Computers are Lousy Random Number Generators

November 17, 2006

The .NET framework provides two random number generators. The first is System.Random. But is it really random?

Pseudo-random numbers are chosen with equal probability from a finite set of numbers. The chosen numbers are not completely random because a definite mathematical algorithm is used to select them, but they are sufficiently random for practical purposes. The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm, from The Art of Computer Programming, volume 2: Seminumerical Algorithms.

These cannot be random numbers because they're produced by a computer algorithm; computers are physically incapable of randomness. But perhaps sufficiently random for practical purposes is enough.

The second method is System.Security.Cryptography.RandomNumberGenerator. It's more than an algorithm. It also incorporates the following environmental factors in its calculations:

  • The current process ID
  • The current thread ID
  • The tick count since boot time
  • The current time
  • Various high precision CPU performance counters
  • An MD4 hash of the user's environment (username, computer name, search path, etc)

Good cryptography requires high quality random data. In fact, a perfect set of encrypted data is indistinguishable from random data.

I wondered what randomness looks like. So I wrote the following program, which compares the two random number methods available in the .NET framework. In blue, System.Random, and in red, System.Cryptography.RandomNumberGenerator.

const int maxlen = 3000;
Random r = new Random();
RandomNumberGenerator rng = RandomNumberGenerator.Create();
Byte[] b = new Byte[4];
using (StreamWriter sw = new StreamWriter("random.csv"))
{
    for (int i = 0; i < maxlen; i++)
    {
        sw.Write(r.Next());
        sw.Write(",");
        rng.GetBytes(b);
        sw.WriteLine(Math.Abs(BitConverter.ToInt32(b, 0)));
    }
}

3,000 random numbers
Graph of 3000 random numbers

10,000 random numbers
Graph of 10,000 random numbers

30,000 random numbers
Graph of 30,000 random numbers

I have no idea how to test for true randomness. The math is far beyond me. But I don't see any obvious patterns in the resulting data. It's utterly random noise to my eye. Although both of these methods produce reasonable randomness, they're ultimately still pseudo-random number generators. Computers are great number crunchers, but they're lousy random number generators.

To have any hope of producing truly random data, you must reach outside the computer and sample the analog world. For example, WASTE samples user mouse movements to generate randomness:

waste-random-number-generator-screenshot.png

But even something as seemingly random as user input can be predictable; not all environmental sources are suitably random:

True random numbers are typically generated by sampling and processing a source of entropy outside the computer. A source of entropy can be very simple, like the little variations in somebody's mouse movements or in the amount of time between keystrokes. In practice, however, it can be tricky to use user input as a source of entropy. Keystrokes, for example, are often buffered by the computer's operating system, meaning that several keystrokes are collected before they are sent to the program waiting for them. To the program, it will seem as though the keys were pressed almost simultaneously.

A better source of entropy is a radioactive source. The points in time at which a radioactive source decays are completely unpredictable, and can be sampled and fed into a computer, avoiding any buffering mechanisms in the operating system. In fact, this is what the HotBits people at Fourmilab in Switzerland are doing. Another source of entropy could be atmospheric noise from a radio, like that used here at random.org, or even just background noise from an office or laboratory. The lavarand people at Silicon Graphics have been clever enough to use lava lamps to generate random numbers, so their entropy source not only gives them entropy, it also looks good! The latest random number generator to come online is EntropyPool which gathers random bits from a variety of sources including HotBits and random.org, but also from web page hits received by the EntropyPool's web server.

Carl Ellision has an excellent summary of many popular environmental sources of randomness and their strengths and weaknesses. But environmental sources have their limits, too-- unlike pseudo-random algorithms, they have to be harvested over time. Not all environmental sources can provide enough random data for a server under heavy load, for example. And some encryption methods require more random data than others; one particularly secure algorithm requires one bit of random data for each bit of encrypted data.

Computers may be lousy random number generators, but we've still come a long way:

As recently as 100 years ago, people who needed random numbers for scientific work still tossed coins, rolled dice, dealt cards, picked numbers out of hats, or browsed census records for lists of digits. In 1927, statistician L.H.C. Tippett published a table of 41,600 random numbers obtained by taking the middle digits from area measurements of English churches. In 1955, the Rand Corporation published A Million Random Numbers With 100,000 Normal Deviates, a massive tome filled with tables of random numbers. To remove slight biases discovered in the course of testing, the million digits were further randomized by adding all pairs and retaining only the last digit. The Rand book became a standard reference, still used today in low-level applications such as picking precincts to poll.

The world is random. Computers aren't. Randomness is really, really hard for computers. It's important to understand the ramifications of this big divide between the analog and digital world, otherwise you're likely to make the same rookie mistakes Netscape did.

Posted by Jeff Atwood
66 Comments

One (very) crude test for randomness is how compressible the data is. I used WinRAR's "best" compression method on 1 megabyte of pseudo-random data, and both times the file ended up *larger* after compression. ;) Here's an amusing related anecdote from Larry Osterman:

http://blogs.msdn.com/larryosterman/archive/2005/04/19/409723.aspx

Jeff Atwood on November 19, 2006 10:23 AM

http://www.fourmilab.ch/random/ provides a nice tool for quantitatively measuring randomness

ent.exe results for 1 million System.Random bytes:
--
Entropy = 7.999794 bits per byte.

Optimum compression would reduce the size
of this 1000000 byte file by 0 percent.

Chi square distribution for 1000000 samples is 286.23, and randomly
would exceed this value 10.00 percent of the times.

Arithmetic mean value of data bytes is 127.4788 (127.5 = random).
Monte Carlo value for Pi is 3.138900556 (error 0.09 percent).
Serial correlation coefficient is 0.001206 (totally uncorrelated = 0.0).
--

ent.exe results for 1 million System.Encryption.RandomNumberGenerator bytes
--
Entropy = 7.999816 bits per byte.

Optimum compression would reduce the size
of this 1000000 byte file by 0 percent.

Chi square distribution for 1000000 samples is 254.68, and randomly
would exceed this value 50.00 percent of the times.

Arithmetic mean value of data bytes is 127.4412 (127.5 = random).
Monte Carlo value for Pi is 3.148140593 (error 0.21 percent).
Serial correlation coefficient is 0.000330 (totally uncorrelated = 0.0).
--

Jeff Atwood on November 19, 2006 10:45 AM

ent.exe results for 1 million http://www.random.org bytes:
--
Entropy = 7.999818 bits per byte.

Optimum compression would reduce the size
of this 1000000 byte file by 0 percent.

Chi square distribution for 1000000 samples is 251.58, and randomly
would exceed this value 50.00 percent of the times.

Arithmetic mean value of data bytes is 127.5342 (127.5 = random).
Monte Carlo value for Pi is 3.143316573 (error 0.05 percent).
Serial correlation coefficient is -0.000293 (totally uncorrelated = 0.0).
--

So it looks like the System.Encryption.RNG method is significantly closer to true random. Or at least the statistics are in line-- with the exception of the Monte Carlo Pi calculation, which is really off!

Jeff Atwood on November 19, 2006 11:03 AM

Funny thing is, people aren't that random either. As anyone to pick 5 'random' numbers from 1-20, and you get a distribution that's generally spaced out.

A genuinely random pick has no preference to spacing.

Having a human in the loop is generally worse than using a prng. That's why the Rand is such a valuable reference - it removes our own peculuarities for what we ourselves deem as 'random' numbers.

Ted Chen on November 19, 2006 11:06 AM

Even the WASTE method isn't really random. People aren't going to randomly move their mouse, there is some sort of pattern to it. It's just the same idea that asking a person to select a random number is not really random either, because we have a predisposition to select certain numbers.

The very philosophical might even suggest that there is in fact nothing random at all, about anything, anywhere. It's only that we lack data and/or methods of prediction.

Taylor on November 19, 2006 11:10 AM

It's easy for a computer to generate random data. It can collect entropy from the noise of the input channel of the sound card. Perfect, random, thermionic noise - no extra devices required. Sometimes I wonder why not a single soul thought of doing this yet. Of course you can't generate millions of random numbers per second this way, but a few per second is easily doable I'd say.

DMB on November 20, 2006 1:02 AM

Schneier Ferguson note in "Practical Cryptography" (chapter 10) that:

"In the context of a cryptographic system, we have more stringent requirements [than statistical randomness does]. Even if the attacker sees a lot of the random data generated by the PRNG, she should not be able to predict anything about the rest of the output of the PRNG. We call such a PRNG cryptographically strong. [...]

Forget about the normal random function in your programming library, because it is almost certainly not a cryptographic PRNG. Many libraries ship with a PRNG that fails even simple statistical tests. Unless the cryptographic strength is explicitly documented, you should never use a library PRNG."

(And I note that your experiments with the two PRNGs in the .NET library seem to bear this out...)

They go onto talk about the difference between PRNGs and true random:

"There is a theoretical argument that real random data is better than pseudorandom data from a PRNG. In certain cryptographic protocols you can prove that certain attacks are impossible if you use real random data. The protocol is unconditionally secure. If you use a PRNG, then the protocol is only secure as long as the attacker cannot break the PRNG; the protocol is computationally secure. This distinction, however, is only relevant for people in ivory towers. All cryptographic protocols use computational assumptions for almost everything. Removing the computational assumption for one particular type of attack is an insignificant improvement, which you need for the unconditional security, is so difficult that you are far more likely to reduce the system security by trying to use real random data."

Instead they argue that the real random data generator should be used to seed a PRNG, which seems like good advice to me.

Alastair Rankine on November 20, 2006 1:06 AM

I'm not sure noise from a soundcard is that random.

Wouldn't noise (if any) from a soundcard be primarily noise from the powergrid, i.e 50 or 60hz ? I guess you could filter that out but not even expensive EMI filters succeed fully in that.

Second, any remaining noise is probably particular to that specific model, so another card would generate much the same characteristics although probably not identical.

I think the problem is if there is enough (random) noise at all.

It could be one source but not the single source.

GH on November 20, 2006 1:55 AM

I found this related article regarding random number algorithms for online poker interesting since I used to play at PlanetPoker :
* http://itmanagement.earthweb.com/entdev/article.php/616221

I now play at PokerStars they claim their open algorithm is correct provides sufficient randomness -- I certainly hope so :) :
* http://www.pokerstars.com/poker/room/features/security/
* http://www.pokerstars.com/poker/rng/

Ian Johns on November 20, 2006 2:06 AM

You can't test for true randomness. What you can do is test for patterns in the allegedly random data. Even then, it's possible that random data will show up as non-random (see http://en.wikipedia.org/wiki/Infinite_monkey_theorem).

Consider this: Let's say you have a machine that continuously prints random bits generated from a radioactive source onto sheets of paper. Let's also say that you have an encrypted telephone system that needs 256 bits of random data in order to function securely.

If you take 50 pages of output from this machine, select a block of 256 bits from somewhere in these 50 pages, program those bits into your encrypted telephone system, and then incinerate the pages, you can rest assured that your secret telephone conversations will remain confidential.

However, if, instead of incinerating those same 50 pages, you publish them in a special edition of The New York Times, then your secret telephone conversations will be much more vulnerable to eavesdropping.

Notice the two different outcomes: In the first scenario, we'd say that the bits are random, but in the second scenario, we'd say that they are highly non-random, and this is true even though the bits themselves are exactly the same in both cases.

When you're generating random bits for use with cryptography, what you're really concerned about (among other things) is limiting the probability that an attacker will be able to guess your key. The bits themselves are irrelevant.

Dwayne Litzenberger on November 20, 2006 2:11 AM

Yes, real world is the best way to provide true randomness.
In a recent Tech-ED Session about cryptography, Rafal Lukawiecki mentioned particle emission from radioactive material (Uranium, Plutoniom ...) as a good random generator method.
He also said that a portable random generator (with Plutonoim inside) would be an extra-cool gadget :-P

Filippo Gualandi on November 20, 2006 2:17 AM

The analog world is not reaaallly random either. Trees growing in a forest can be predicted by the distance seeds fall. Clouds in the sky can be predicted by moisture levels. Waves in an ocean by moon phases, currents, and weather. An ant crawling on the ground by a chemical trail. Grains of sand on a beach by nearby sediment and rock types, etc. Wouldn't all those seem random? So, what really is random?

erwrew on November 20, 2006 2:17 AM

GH: The way to get a random bit from a sound card is to take a bunch of bits from the sound card and XOR them together. If at least one of the input bits was unpredictable and mutually independent from all of the other bits, then that output bit will be random. The problem you can run into is making sure you never fall short in your estimate of how many bits of input you need to produce one bit of random output.

Dwayne Litzenberger on November 20, 2006 2:20 AM

Intel annouced a hardware random number generator (based on thermal noise) to be released with the Pentium III instruction set but it somehow got lost in the way. I googled a bit but could not find a link to post here and all the refereces are pre release comments.

JSD on November 20, 2006 2:47 AM

DMB,
you might want to read a little harder:
"Another source of entropy could be atmospheric noise from a radio, like that used here at random.org, or even just background noise from an office or laboratory."

Modern soundcards can sample at about 192khz, high-end, 48khz, low-end, with 24 bits a sample. If you took only the low bit of each, you end up with a minimum of 48,000 random bits a second; even if you assume you can use a few more bit per sample without compromising the randomness, and munge them around somehow, you're far short of your target if you need millions or billions a second for data transmission.

That said, I've actually seen software that uses this for low-volume needs, combined with other environmental factors. Most people just don't want to have to deal with DirectInput or MCI to get to it.

Chris,
any PRNG gets seeded. System.Random takes time (or user-supplied) as the seed, RandomNumberGenerator generates its seed from higher-entropy system parameters and presumably changes seeds by retesting occasionally.

Alistair,
according to MSDN, RandomNumberGenerator is cryptographically secure, as I'd expect any newer language's PRNG to be now that people actually care about that. Most of the 3rd party C and Fortran enhancements have been used by Python, .Net, and other recent languages. (Java's built-in sucks balls though: http://alife.co.uk/nonrandom/ )

Foxyshadis on November 20, 2006 3:03 AM

Well, if the analog world is so not-random, why aren't our weather forecasts 100% accurate by now? I think it's chaos theory at work..

http://en.wikipedia.org/wiki/Chaos_theory

Jeff Atwood on November 20, 2006 3:06 AM

And just to show some pedigree on audio randomness:
http://www.cs.berkeley.edu/~daw/rnd/audio-entropyd ('99)
http://cypherpunks.venona.com/date/1992/11/msg00011.html ('92)

I'm sure there's older, but I didn't check.

Foxyshadis on November 20, 2006 3:18 AM

I remember in high school we had a maths reference book that included a page of "random numbers" that bore a strong resemblence to digits of pi.

Daniel on November 20, 2006 4:28 AM

This is going to only be of any help to any C/C++ coders, but there's an ANSI-C header available called mt.h (Mersenne Twister) that allows you to generate a better spread of randomness than the default random number generator used with most C compilers.

Back when I used to code for GBA using HAM, I would use mt.h instead of the included random function because it would generate a random number with limited hardware much more efficiently. The results were staggeringly different. Using the built-in generator, I could get a ghost to appear on a field and usually tell you were the ghost would wind up based on when I pressed the key. Using mt.h I could never predict anything, which is precisely what I was looking for.

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html

Jae on November 20, 2006 4:57 AM

"The very philosophical might even suggest that there is in fact nothing random at all, about anything, anywhere. It's only that we lack data and/or methods of prediction."

I'll go with that. The trick isn't about creating random numbers(i'll challenge you all to define random. i sure as hell can't, pardon the language). Trick is about creating the hardest possible numbers to predict.

Okay, i might of gotten too philosophical with this, but that's the way i like it ;)

Juha on November 20, 2006 5:48 AM

Note that some of the CPU measurements _are_ taken from the analog world. Intel added a rand instruction to the Pentium 4 which generated a number based on the heat of the chip at the time.

Bryan on November 20, 2006 6:00 AM

I remember reading that some casin0s use a hardware device as a seed that measures line voltage. Since line voltage is never stable it cannot be predicted. The last thing any casin0 needs is a bettor who knows the next k-e-n-o numbers that are going to hit!

g

Garret on November 20, 2006 6:17 AM

I can think of (at least) 3 types of random number generators:
1. simulation: you do not care if they are predictable but they must have strong statisitical properties (e.g. in n-dimensional space, n-tuples cannot lie in (sets of) hyperplanes)

2. cryptographic and statistical: e.g. poker web site. need some statisitcal properties so hand odds are correct but also do not want players to be able to predict future outcomes and must generate a large volume of data. something like
choose secret key K and init vector V (see 3)
tmp = AES(K,V)
out(0) = AES(K,tmp)
out(n+1) = AES(K,out(n))

3. cryptographic key generation: may be slower but
must be harder to crack (see http://csrc.nist.gov/cryptval/rng/931rngext.pdf)
Choose secret key K and vector V used only for
key generation. For each key to generate
DT = external input with random component
(for NIST, system time, but could include accumulated audio noise or mouse movements)
I = AES(K, DT) // smears random bits around
Result = AES(K, I^V)
new V = AES(K, Result ^ I)

expr on November 20, 2006 6:19 AM

If I squint my eyes I can see a face in your image of 10,000 random numbers. It has a slight resemblence to Bill Gates.

Mags on November 20, 2006 6:59 AM

I believe that some CPUs include a random number generator on them, using heat or interference to generate the numbers.

Here we go, I've grabbed this from Wiki:

#################################################
The Intel 80802 Firmware Hub chip included a hardware RNG using two free running oscillators, one fast and one slow. A thermal noise source (non-commonmode noise from two diodes) is used to modulate the frequency of the slow oscillator, which then triggers a measurement of the fast oscillator. That output is then debiased using a von Neumann type decorrelation step (see below). The output rate of this device is somewhat less than 100,000 bps. This chip was an optional component of the 840 chipset family that supported an earlier Intel bus. It is not included in modern PCs.

All VIA C3 microprocessors have included a hardware RNG on the processor chip since 2003. Instead of using thermal noise, raw bits are generated by using four freerunning oscillators which are designed to run at different rates. The output of two are XORed to control the bias on a third oscillator, whose output clocks the output of the fourth oscillator to produce the raw bit
#################################################

Peter Bridger on November 20, 2006 7:55 AM

Ummm, yo. Every version of Linux and BSD Unix since some arbitrarily long time ago has had a wonderful little interface called /dev/random, which uses an entropy pool seeded from various sources that are both unpredictable and impractical to observe from outside the machine. For example the OpenBSD kernel uses the mouse interrupt timing, network data interrupt latency, inter-keypress timing and disk IO information. Also, if you run it on a machine with a supported hardware RNG, it'll seed from that, too. This is pretty much a solved problem.

Richard on November 20, 2006 8:16 AM

Here's the result of the ent.exe test on OS X's /dev/random circa Jan 2005

http://lists.apple.com/archives/Darwinos-users/2005/Jan/msg00033.html

It's roughly as good as System.Cryptography.RNG, probably because it's doing the same things. It still falls short of external environment sampling.

Jeff Atwood on November 20, 2006 8:39 AM

I always found it pretty amusing how GamesByEmail.com tried to create 'true' random numbrs.

http://www.gamesbyemail.com/dicegenerator

Craig on November 20, 2006 9:52 AM

A more reasonable first test of your library PRNG would be to plot number(N) vs number(N-1). You're comparing number versus previous number. For most PRNG, when you do that you see stripes of diagonal numbers, which shows that once you've cracked the algorithm, you can predict next number.

Peter on November 20, 2006 9:57 AM

'Randomness' can only be defined in terms of measurable experience, which for humans is finite. Therefore the best we can do is 'that is pretty damn random', or not.

The calculation of PI to a bajillion places has so far indictated that there is no repeating pattern, or perhaps no pattern. But this measurement, even taken against such a beautiful number as PI, can only be assumed based on how much time can be spent trying to measure and investigate. Does a human have enough time in his or her lifetime, even using computers?

Graphs like Jeff's are nice ways to say "that appears to be pretty random", and thus decide it is a suitable algorithm.

Steve on November 20, 2006 10:25 AM

A famous case of attempts to draw random numbers is the Vietnam war draft: http://en.wikipedia.org/wiki/Draft_lottery_(1969)

There are a few criticisms of it, one is using birthdays, the other is the technique they used to mix the tokens (they added batches of tokens month by month IIRC).

reed on November 20, 2006 10:30 AM

Another article on the draft: http://www.amstat.org/publications/jse/v5n2/datasets.starr.html

reed on November 20, 2006 10:32 AM

Are humans any better? Apart from the fact that I don't believe in truly random, we just do not have clarity or control over all the parameters/dials. That is perhaps getting a bit philosophical, but are prime numbers random? To a preschooler it might as well be, to a high school student a system appears but the brightest of minds still have not come up with a way of predicting them.

Casper Bang on November 20, 2006 10:34 AM

Jeff, the analog world is deterministic, the article even states as much - but there's no way for us to measure every parameter in order to perfectly define the starting conditions, nor could we do anything with all that data in any useful timescale even if we could. So as far as we're concerned it might as well be random, since there's no way to feasibly predict it, even though it is theoretically predictable.

Foxyshadis on November 20, 2006 11:30 AM

What I do, when an encryption program asks me to move my mouse, is that I lift the mousepad and shake it with the mouse on it.

That just has to be random movements ;) but you never know, someone might be able to put up a model for it.

GH on November 20, 2006 12:35 PM

I don't know about the .NET System.Random function, but in my experience the argument against standard random functions being random is that they'll produce the same numbers time and again. So instead of telling your program to produce morer numbers, you should run the program several times. You may find that System.Rand would do something like this:

2,6,4,9,7
2,6,4,9,7
2,6,4,9,7...

While System.Security.Cryptography.RandomNumberGenerator may do something like this:

3,7,6,9,4
8,5,6,3,7
1,3,8,4,3...

Chris on November 20, 2006 12:58 PM

Truly random numbers will not follow any distribution (except a flat one), as Tyson suggests, as this would imply that some numbers are more probable than others. If you bin the results by position then you should see a uniform distribution over the entire interval of possible numbers.

Mike Zimmerman on November 21, 2006 1:08 AM

Ok well I didn't read Tyson's whole post; he is correct in the context of his post. :)

Mike Zimmerman on November 21, 2006 1:09 AM

It depends what you want to use these numbers for. If it is simulation or homework, then just about any PRNG will do. If it is running an online casin0, then you want hardware random number generators. Even then, the algorithm you use may cripple your organization:
a href="http://www.developer.com/java/other/print.php/10936_616221"http://www.developer.com/java/other/print.php/10936_616221/a

Some time ago, I was interested in making a hardware RNG. Was going to be USB, so gamers or others could buy it, and price it down around $20-40 where it is almost too cheap not to have one. However, the company I worked for at that time claimed ownership of it, even though it had nothing to do with any line of business they were in, and the prototype had been built in the privacy of my own home with my own money and time. And the most tragic part, after all the hissy fits with lawyers, they didn't do anything with the gizmo other than confiscate my proto.

Peter on November 21, 2006 1:57 AM

Your post got me thinking: maybe the motherboard/processor temperature sensor could be used to add more randomness to number generators.

Fbio on November 21, 2006 3:18 AM

Foxyshadis, I assume you are referring to Heisenbergs principle of uncertainty? This is but a principle, not a lemma nor a proved certaincy. One should be careful about ruling out future possebilities, it was once thought as well, that heavier than air machines could not fly. As Arthur C. Clarke puts it "Any sufficiently advanced technology is indistinguishable from magic".

Casper Bang on November 21, 2006 3:40 AM

The Mersenne Twister is not random enough. With enough output data, all future outputs (before changing seeds) can be predicted. It's good enough for most people, which is wildly different.

Adam on November 21, 2006 4:39 AM

Hi,

another funny thing about computer generated randomness: There's a community on the web that uses emulators and their tools combined with save states to try and create perfect movies of how to play old videogames.

Because all randomness happening is seeded in the same way, exact key combinations will always result in exactly the same things happening in the game.

That way, creating a movie is just about storing which keys are pressed in which frame and playing back these combinations.

The emulation always starts at a defined state and the whole randomness in the game is reduced to the machines real time clock and the users input, thus making the movies work.

The end result is a real piece of art and much more interesting from an entertainment point of view than it is from a scientific one.

Besides the fact that movies like this one: http://tasvideos.org/715M.html are a way
to visually display bugs in program code :-)

Philip

Philip Hofstetter on November 21, 2006 7:10 AM

Randomness is wonderful stuff and very hard either to define or produce. Only physical random number sources are really random, but they can have serious problems - mostly by having some easily detected statistical trends. For much more fun (though seriously more mathematical) try Greg Chaitin's work
(his website is http://www.umcs.maine.edu/~chaitin/ -- don't let the rather poor web design or the clear self aggrandizement put you off).

jeff on November 21, 2006 7:31 AM

Excellent points. The investigation of randomness is a fascinating, almost philosophical concept.

Even environmental sources of randomness need to be "whitened" before they're random enough. And the many statistical tests you can perform (ent.exe is one example, linked in the first few comments above) can't definitively, absolutely tell you if a given set of data is totally random.

Jeff Atwood on November 21, 2006 7:43 AM

When something is random it really just means that it's too complex or we lack the proper tools to develop an algorithm for it doesn't it? You can reproduce complex dice rolling outcomes with good equipment in an isolated environment. Noise isn't really random; afterall, electrons don't make choices about where they go next.

barry on November 21, 2006 8:19 AM

The best way to generate output which simulates real-world phenomena is to map the output from a random number generator to the normal distribution. This will give you a random values which will lie mostly about a mean, governed by the normal curve.

As for randomness in general, i think the world is actually random at resolutions where heisenbergs uncertainty principle comes into play. At other resolutions (e.g. marco) then you can predict most things to a reasonable probability. Casper, Heisenbergs is an inherent property - a principle. It doesn't need proving because its not a theorem or law, its simply is. It falls out of wave-particle duality; be my guest and prove some of that stuff wrong :/

Isn't the mersenne twister random enough? I can't predict the next value without your seed, even if i know the algorithm.

Tyson on November 21, 2006 8:57 AM

Actually, the best randomness-generator I've seen in a while are some of the posts to this blog entry...

Steve on November 21, 2006 9:02 AM

Lol, thats almost on the money. Just last week i half-built a program which gives a word (sequentially running through any text file - a dictionary for instance) to google and parses the resultant html to find the first letter in the url of each page returned. Thats random.

Tyson on November 21, 2006 9:12 AM

Casper, I meant more along the lines of, there is not enough computer memory to store the starting positions of every particle in the earth, or the processing power to do anything with it, nor would it be possible to measure the current states of every particle on earth at once. But it'd certainly give you a very accurate forecast if you could. :p Thus it's all theory. Nothing to do with herr heisenburg.

Foxyshadis on November 22, 2006 4:11 AM

Wow, so many of the comments (as well as the original article) are so far off the mark it's crazy. I do want to correct one mistake made, when programs take user keystrokes or mouse movements they're not looking at all of the data, only the smallest increments. So if you tried to move your mouse from 0x0 to 100x100 you would sometimes hit 1x0 or 99x100. The only bit used in the 'random' process is the last bit, which is mostly random. Also the 'environmental' measurements are also used the same way. The CPU fan speed or system temperature might be easy to guess, but not the least significant digits.

Only a computer with no inputs is really incapable of creating random numbers. Computers with inputs (like the keyboard, the mouse, the CPU thermometers, etc) are cable of getting random numbers from those inputs.

Chad Okere on November 24, 2006 12:36 PM

Some day I'd like to build a lava can -- it' based on the luminance values of a webcam in the dark.

http://www.lavarnd.org/what/process.html

It's claimed to be a good source of randomness.

http://www.lavarnd.org/what/how-good.html

Zed on November 27, 2006 11:10 AM

Here's a recipe: Monitor the webcamand mic. Ask the user to imitate a six year old singing "Happy Birthday"

No one I know ever sings Happy Birthday in the same key so it'd be pretty random :-)

William on November 29, 2006 2:10 AM

Just as juha said, there is no 'true' randomness. Even the roll of a die can be a funtion of its bobble in ones hand, momentum and spin of its fall and impact on the surface. Life itself is a very large, complicated equation. So by making a computer generate a large complicated equation, we have emulated life's randomness.

But how can something truly be random? How can something happen, and not have any reason? Everything happens for a reason.

Joshua Brotman on November 29, 2006 2:39 AM

True randomness is impossible for a computer to emulate. If we can't even pick 10 different random numbers then how can computers do it??

Justin on July 21, 2007 12:35 PM

Very interesting comments. I have to attack the notion that there is no random, as that's probably nonsense. People are getting somewhere saying most random stuff might be predictable if we could measure more. However, there are devices like those made by MagiQ that use Quantum Physics to generate perfectly random numbers: quantum physics says there is ALWAYS a 50/50 chance of it being a 0 or a 1. Want a definition of random? See: MagiQ's output.

I liked Tyson's post, as his technique is similar to mine: use search results for rand numbers. His is simple, but I wanted more. From a large dictionary, I choose random number of random words. I randomly choose a search engine from large list (found on allsearchengines.com). Then, randomly pick a result; parse random section of it. I create a number out of that, rarely getting the same one consecutively. Usually I use as seeds (combined with a time function) for a typical RNG. Since it doesn't need to be crytpo-secure for my uses, I do most of this with the fastest RNG i get my hands on. (sometimes different RNG's for different components) What yall think? Good way to make seeds?

Note, the whole point of this was because all the RNG's gave the same numbers in a row if I executed the program several times real quick. I assume it has something to do with how the system time works, since it was the seed. Now, I still use time, but merge it with one of these seeds. An algorithm uses about 20-50 of these seed addons, hopefully dealing with this darn problem. ($20 says someone has easy solution that I overlooked, which doesn't require all this effort. Of course, I did this more for challenge than anything)

Nick on December 10, 2007 11:18 AM

Making a quick apology for posting the same data twice. The first one didn't show up in my browser until I made the second one.

As for the audio and video ideas, the only concern I have with these is the limit on the collected data. Someone mentioned that most audio might end up in certain frequencies. Even with happy birthday, there would be many similarities, and the differences not so great. Could these patterns and limitations screw up the randomness?

To Zed: Yeah, I heard about using a lava lamp and thought it was original and cool. Whether it's effective is debatable... Tks for providing a link so I can look into it. ;)

To webmaster: This captcha doesn't seem so secure. It's the same word done the same way since earlier today. Plus, it's written in a solid font on a solid background, with no variation except shape. Most handwriting looks worse, and yet is recognized. Might want to change to a better one. You can start by looking at what has been broken, some of which is here and here:
http://www.cs.sfu.ca/~mori/research/gimpy/
http://sam.zoy.org/pwntcha/

Merry Christmas all!

Nick on December 10, 2007 11:26 AM

I'm retired now but when I was in college I wrote a paper and presented to an IEEE audience on something like what you are doing. Back then, late 1970's, there were only 8-bit processors and random algorithms where floating point oriented. Intel microprocessors back then had no floating point instructions. So, I experimented with developing an algorithm using algorithm composed of efficient assembly instructions; mostly using as shift and mask operations which looping through the key. I did the same thing you are doing plotting the dots on screen, using x, y random pairs. For weeks I searched for the "best" candidate algorithm. Note by random number I mean it was pseudo-random, reproducible, as opposed to using some hardware clock register which is random but not reproducible. Once the algorithm was completed I then tested using techniques described in "The Art of Computer Programming Volume 2", by Knuth. I decided on 5 different tests referencing the material in the book.

The final test was to run the algorithm and search for when the random sequence begins to reproduce the sequence. This is very important because that is what causes dots to take on pattern that seem to be describing. In conclusion I have found in my research that the best pseudo-random generators can be developed to behave random, but then the CPU time can then be a concern. The result is a trade-off.

So, my technique can be best summarized by making the algorithm a state machine, where the random data from the previous operation is plugged back in, then again with each iteration, and group of operations.

For example a seed value initially used to produce the first number using the random generator. The seed value changes with each random number. The random number is then used to index in to a deck of cards, and after getting the card the card is placed back in the deck randomly. When it’s time shuffle the deck of cards are in a random sequence to be reused again. The next sequence uses the previous random deck sequence as random cards are selected, and the deck is further randomized. The same approach could be applied to other types of random sequences. what_another_bob@yahoo.com, attn: pseudo-random

Bob Harsch on January 28, 2008 11:26 AM

wy do have to right orange

pppppppppppppppoooooooooooooooooooooooooooooooo on April 23, 2008 11:01 AM

Hello i like oranges floof nosn kdoa hi my nose is itchy. I like pie and chocolate milk and I will one day rule the world. my first rule will be that everyone must wear pantyhoses on their noses.

aram on May 2, 2008 7:53 AM

crap

hollie on May 6, 2008 3:26 AM

adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9adfdauyhcafukydnhfabuaeo8aurbanoueboiawaocerxnoapaw9n798r723dno92tb5n0y147ny97f5134%!$!598nh1n4'66nh469%^n1$%91%(6f$!(%1(m(Dm5t#(6n$(%u6!$(7u60! ($n6$(N9

j on May 8, 2008 3:23 AM

boob

fariha on May 11, 2008 12:19 PM

From a .Net prospective, System.Random number generation are not random, they are psuedo-random. The numbers are generated from a set size of 10 to the 24th (I could be wrong on the set size). So, if you can find out where in the set of numbers you are at, you can guess correctly the next number.

For practical purposes, this is random enough and the numbers generated will converge to statistical probabilities as the iterations progress. However, since this "randomness" can be predicted, it can be exploited. So, typically, more secure methods are used to generate random numbers that are harder to crack. I imagine that card games and places like Las Vegas don't don't use System.Random in any of thier slot machines...

Jon Raynor

Jon Raynor on February 6, 2010 9:51 PM

Pi
I usually take a chunk out of pi to make a seemingly random number.

Michael Simmons on February 20, 2010 2:44 PM

Review articles: the quantum random number generators
I did a review of recent articles in the field of quantum random number generators.
Follow this link: http://scisatellite.blogspot.com/2010/10/review-articles-quantum-random-number.html

AlekseyGalan on October 8, 2010 4:01 PM

The comments to this entry are closed.