<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.explainxkcd.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Johnsmith</id>
		<title>explain xkcd - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://www.explainxkcd.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Johnsmith"/>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php/Special:Contributions/Johnsmith"/>
		<updated>2026-04-28T08:53:08Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=1216:_Sticks_and_Stones&amp;diff=38376</id>
		<title>1216: Sticks and Stones</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=1216:_Sticks_and_Stones&amp;diff=38376"/>
				<updated>2013-05-24T19:24:30Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: /* Transcript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{comic&lt;br /&gt;
| number    = 1216&lt;br /&gt;
| date      = May 24, 2013&lt;br /&gt;
| title     = Sticks and Stones&lt;br /&gt;
| image     = sticks and stones.png&lt;br /&gt;
| titletext = Sticks and stones may break my bones, but words can make me think I deserved it.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Explanation==&lt;br /&gt;
{{incomplete}}&lt;br /&gt;
&lt;br /&gt;
{{w|Sticks and Stones (nursery rhyme)}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Sticks and stones will break my bones&amp;lt;br&amp;gt;&lt;br /&gt;
But words/names will never harm/hurt me.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
is a nursery rhyme said, often by parents, to persuade an individual, usually a child, to ignore any name calling or mean taunts that were said by others in an attempt to hurt the individual's feelings.&lt;br /&gt;
&lt;br /&gt;
This comic plays on this rhyme by having the child come in and say that although words can't harm you physically, they can change how you feel and make you feel happy or sad and the child suggests that how you are feeling is all that matters in the world.&lt;br /&gt;
When Cueball suggests that the world isn't that bad the child reminds him of the &amp;quot;sticks and stones&amp;quot; part of the rhyme meaning that, even when emotions aren't an issue, the world can be quite harsh because there are things like sticks and stones that break your bones and presumably people who use them as weapons to do so. This is enough to change Cueball's mind so that he thinks the world is actually horrific.&lt;br /&gt;
&lt;br /&gt;
The rhyme is actually incorrect, as recent studies (for example: http://www.pnas.org/content/108/15/6270.full?sid=758b38cc-b399-4d22-9c37-3c074cf321b) have shown that the brain's reactions to physical pain and emotional rejection are very similar and even feed into each other.&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
Child: Did you hear what he sair abaout me!?&lt;br /&gt;
&lt;br /&gt;
Cueball: Well, remember: Sticks and Stones may break my bones, but words --&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Child: -- can make someone alse feel happy or sad, which is literally the only thing that matters in this stupid world?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Child: Right?&lt;br /&gt;
&lt;br /&gt;
Cueball: The world isn't /that/ bad.&lt;br /&gt;
&lt;br /&gt;
Child: Explain the line about sticks and stones?&lt;br /&gt;
&lt;br /&gt;
Cueball: ...OK, maybe it's kind of horrific?&lt;br /&gt;
&lt;br /&gt;
{{comic discussion}}&lt;br /&gt;
[[Category:Comics featuring Cueball]]&lt;br /&gt;
[[Category:Language]]&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=User:Johnsmith&amp;diff=34509</id>
		<title>User:Johnsmith</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=User:Johnsmith&amp;diff=34509"/>
				<updated>2013-04-20T14:31:25Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  the &lt;br /&gt;
ang els &lt;br /&gt;
h a v e &lt;br /&gt;
t  h  e &lt;br /&gt;
ph o ne&lt;br /&gt;
b  o  x                that one’s my favorite, i have that on a t-shirt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=User:Johnsmith&amp;diff=32694</id>
		<title>User:Johnsmith</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=User:Johnsmith&amp;diff=32694"/>
				<updated>2013-04-06T23:39:23Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  the &lt;br /&gt;
ang els &lt;br /&gt;
h a v e &lt;br /&gt;
t  h  e &lt;br /&gt;
ph o ne&lt;br /&gt;
b  o  x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=User:Johnsmith&amp;diff=32330</id>
		<title>User:Johnsmith</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=User:Johnsmith&amp;diff=32330"/>
				<updated>2013-04-03T06:53:56Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  the &lt;br /&gt;
ang les &lt;br /&gt;
h a v e &lt;br /&gt;
t  h  e &lt;br /&gt;
ph o ne&lt;br /&gt;
b  o  x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=User:Johnsmith&amp;diff=32329</id>
		<title>User:Johnsmith</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=User:Johnsmith&amp;diff=32329"/>
				<updated>2013-04-03T06:51:31Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: Created page with &amp;quot;  the  ang les  h a v e  t  h  e  ph o ne b  o  x&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  the &lt;br /&gt;
ang les &lt;br /&gt;
h a v e &lt;br /&gt;
t  h  e &lt;br /&gt;
ph o ne&lt;br /&gt;
b  o  x&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=Talk:1193:_Externalities&amp;diff=32328</id>
		<title>Talk:1193: Externalities</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=Talk:1193:_Externalities&amp;diff=32328"/>
				<updated>2013-04-03T06:49:35Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Any chance we can convince Randall to let other universities in: the Canadian ones only work if they have a .edu, so uwaterloo.ca and sfu.ca are out.&lt;br /&gt;
: As are [schools].ac.in&lt;br /&gt;
: I can't get my university (PUC-Rio, in Brazil) too... =/ [[Special:Contributions/139.82.240.51|139.82.240.51]] 18:28, 1 April 2013 (UTC) etandel&lt;br /&gt;
: It looks like he may have lifted the restriction, considering all the different urls such as google.com, reddit.com, and even what I have to assume is a porn website. --[[User:LRFLEW|LRFLEW]] ([[User talk:LRFLEW|talk]]) 03:46, 3 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
--[[Special:Contributions/137.147.40.248|137.147.40.248]] 13:53, 1 April 2013 (UTC) For an easier time spotting the changes, go to [http://xkcd.com/1193/#verbose] and open your web console&lt;br /&gt;
&lt;br /&gt;
[[Special:Contributions/199.48.226.89|199.48.226.89]] 10:18, 1 April 2013 (UTC) I put in &amp;quot;caltech.edu&amp;quot; and hashed a lot of words, and &amp;quot;Twilight Sparkle is best pony.&amp;quot; was the best result I managed, only off by 496 bits.&lt;br /&gt;
: Lol, &amp;quot;only&amp;quot;. The results should be binomially distributed, with a mean of 512, so 496 isn't even close to the scores in the ranking. [[User:BKA|BKA]] ([[User talk:BKA|talk]]) 12:44, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
I noticed when looking at the list of scores that a large number of universities have a best score at 420. According to my calculations, the amount of universities with this score is 2516 out of the 2824 universities listed. Is there any reason that so many universities have the exact same score? --[[User:LRFLEW|LRFLEW]] ([[User talk:LRFLEW|talk]]) 03:38, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
: +1! A few hours ago this wasn't the case... What's up with all the 420's?? [[Special:Contributions/108.218.230.91|108.218.230.91]] 03:42, 2 April 2013 (UTC)&lt;br /&gt;
:People keep posting hash values on the internet. Those universities are dirty cheaters, and they're all just entering the 420 hash in for their university without actually calculating it. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|#707|David}}&amp;lt;font color=#070 size=3&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=#508 size=4&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 04:05, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: While this copy-cattism might be the reason for the proliferation of 420s (which, in India, is slang that, funnily enough, refers to a confidence-trickster) - note that at the beginning of the contest, a lot of different domain names all had 'scores' between 400-500. Now, if I'm not wrong, the hash contains 1024 bits. So you could be off by 1024 in the worst case, and 0 in the best case. But the spread was very narrow. Admittedly, you wouldn't notice the higher numbers, because only the best case scenario has been published, but from the clustering of the different universities (with respect to their scores), as well as the fact that it's taking this long for even ONE clear best score to emerge, seems to suggest that there IS something special about the 400-500 score band. Does anyone have any layman-level information on the statistics of the entropy of the Skein hash function? And the statistics of what error figure for random hash compared to given hash is most frequent? [[Special:Contributions/220.224.246.97|220.224.246.97]] 18:26, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::a hash is, at best, very close to a random number. Here, we have two 1024-bit random numbers. It makes sense that most commonly, two such random numbers differ in about half of the bits - for each bit, there's a 50% probability that the bits will be the same and 50% that they will differ. Therefore the spread centers on 512, but of course we just see the lower part of the spread here. [[Special:Contributions/2.223.68.79|2.223.68.79]] 23:46, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: My test here shows that the 420s is that 420 Bits wrong is about what a single computer can get to within a few hours. So its no wonder that 420s are common for a lot of universities. Its just someone there who is running a little script to break the hash. &lt;br /&gt;
[[Special:Contributions/91.214.44.212|91.214.44.212]] 23:34, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All I see is a blank white 780x969 image. Nothing appears when I hover over stuff. [[Special:Contributions/109.65.100.208|109.65.100.208]] 09:04, 1 April 2013 (UTC)&lt;br /&gt;
:Sometimes it does that. It takes a while to generate, and it doesn't always render correctly. Try updating your browser or refreshing. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|#707|David}}&amp;lt;font color=#070 size=3&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=#508 size=4&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 09:06, 1 April 2013 (UTC)&lt;br /&gt;
The person who provided the shopped image either isn't using a modern browser or is using IE. The font is supposed to be &amp;quot;xkcd-Regular&amp;quot;, which I assume is a font that gets downloaded from XKCD's server. Loading the same page in IE 9 gave me that Times New Roman-esque font instead (Chrome, Firefox, and Opera use the special font, although it's rendered a little fuzzy in Firefox). [[Special:Contributions/129.21.119.153|129.21.119.153]] 09:25, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The dog part now shows &amp;quot;FREEPRIME@AMAZON.COM&amp;quot; underneath the sliders for me. --[[User:Gefrierbrand|Gefrierbrand]] ([[User talk:Gefrierbrand|talk]]) 09:50, 1 April 2013 (UTC)&lt;br /&gt;
:I think it matches the company in the first panel? (Currently CAREERS@XLINX INC for me.) --[[Special:Contributions/81.138.95.57|81.138.95.57]] 10:53, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The page where the company name is supposed to be fetched from is &amp;quot;Sith&amp;quot; now, but I checked and the company is not there. I think this will take some time to decipher ... -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 11:12, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
: .... uh, remember few pages ago where we JOKED about being used as distributted computer? Now we ARE used to crack the provided hash ... -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 11:15, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
: It's April 1st.  Maybe the idea that the company is sourced from a Wikipedia page is not true.  That would explain the link to the Wikipedia fund raising page as an apology for the fact that there will be many XKCD readers vandalising the Sith page [[User:Jeremyp|Jeremyp]] ([[User talk:Jeremyp|talk]]) 11:38, 1 April 2013 (UTC).&lt;br /&gt;
&lt;br /&gt;
:: ... AND it's [wikipedia:Jean-Luc_Picard|Jean Luc Picard] now. AND there is actually Apple linked from it. While the Google is company doing recruiting now ... hmmm ... but Google actually IS mentioned in one of previous version of page ... damn vandals. -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 12:35, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::WAIT. Randal now mentioned &amp;quot;... Final Fantasy Tactics. But link on Jean Luc Picard could beat it&amp;quot;. So either it's something like &amp;quot;taken from last edited page&amp;quot; or he is doing it manually. -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 12:42, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::&amp;quot;Microsoft Corporation is the first NASDAQ-100 company mentioned on the wikipedia page 'IBM'. But a link on 'Oprah' could beat it.&amp;quot; -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 14:05, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::::... AND wikipedia editors started observing the comics to edit-protect wikipedia entries BEFORE the vandals strike, as shown [http://en.wikipedia.org/w/index.php?title=Elixir_%28comics%29&amp;amp;action=history here]. -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 14:49, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The top of the page for the comic now mentions this: &amp;quot;You can change the company in this comic. Mouse over its name in the first panel. The schools are selected by a hash breaking competition.&amp;quot; Don't think that was there before. More interesting is the first sentence. Do we have a list of wikipedia pages that he's tracking for the first company mentioned in the page? [[Special:Contributions/220.224.246.97|220.224.246.97]] 17:52, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ignorant question: What is this hash finding competition? Was it announced somewhere? [[Special:Contributions/129.67.199.117|129.67.199.117]] 11:56, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Click that panel: http://almamater.xkcd.com/ [[User:Jeremy1026|Jeremy1026]] ([[User talk:Jeremy1026|talk]]) 12:05, 1 April 2013 (UTC).&lt;br /&gt;
&lt;br /&gt;
:: Looking in the [http://c7.xkcd.com/stream/comic/externalities?method=EventSource&amp;amp;lastEventId=&amp;amp;r=362667083523542 externalities file], another usefull link is &amp;quot;... full standings at [http://almamater.xkcd.com/best.csv http://almamater.xkcd.com/best.csv]&amp;quot; -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 14:24, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
The sad thing is that people are probably only donating to a good cause to see the dog-drawing get bigger. [[Special:Contributions/76.106.251.87|76.106.251.87]] 14:11, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:In that case it's good Randal used GOOD cause. -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 14:24, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Actually, the sad thing is taht people are vandalizing Wikipedia. --[[Special:Contributions/189.61.0.28|189.61.0.28]] 19:26, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Can anyone explain what, if anything, the name/email/education values (fifth panel) refer to? [[Special:Contributions/108.36.128.122|108.36.128.122]] 19:34, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Looks like one random string and one random pair of strings. [[Special:Contributions/178.238.159.109|178.238.159.109]] 20:12, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Has anyone been able to reproduce the 1024-bit Skein hash values that he is generating at http://almamater.xkcd.com/?  The hashes that he shows don't match the ones I'm getting from my Skein hash calculator (using 1024 bit output and 1024 bit internal state size). I tried feeding the same string into the hash function both with and without a trailing null character and neither matches.  For example, if I type abc into the form, he shows 35a599...1f1f (edited for brevity), but I calculate that a hash of the 3-byte message &amp;quot;abc&amp;quot; should be 10a866...035c.[[User:Theodric|Theodric]] ([[User talk:Theodric|talk]]) 22:03, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I'm getting completely different values also. [[Special:Contributions/173.22.172.7|173.22.172.7]] 22:57, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I have the same problem as you. I'm thinking that Xkcd is using an older standard of the encryption. I'm currently trying out the php versions of the code to see if I can get it to work. --[[User:LRFLEW|LRFLEW]] ([[User talk:LRFLEW|talk]]) 23:16, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Nope. Tried all I could and still couldn't figure it out. My guess is that he's using a secret salt. --[[User:LRFLEW|LRFLEW]] ([[User talk:LRFLEW|talk]]) 23:37, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::'''Solved!''' :) I was originally using version 1.2 of the Skein hash function.  Version 1.3 uses different constants and yields different results.  The almamater page seems to be using version 1.3 -- my calculator now matches Randall's hashes.--[[User:Theodric|Theodric]] ([[User talk:Theodric|talk]]) 03:34, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Where are you getting the implementation? I can't seem to get it to work even with v1.3. --[[User:LRFLEW|LRFLEW]] ([[User talk:LRFLEW|talk]]) 04:42, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::I'm using source code from here: http://www.skein-hash.info/sites/default/files/NIST_CD_102610.zip. I'm using the code in the Optimized_64bit directory.  All C files were compiled with gcc as well as http://theodric.com/test_skein.c --[[User:Theodric|Theodric]] ([[User talk:Theodric|talk]]) 10:00, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::::Thank you for the example code. I had two errors in how I was implementing it. The interesting problem I ran into was that the string to hash needs to be formatted for the web (so space becomes '+', ext.) --[[User:LRFLEW|LRFLEW]] ([[User talk:LRFLEW|talk]]) 17:02, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::: Confirmed, xkcd uses skein 1.3. Did anyone find another implementation (besides the reference implementation)? I wasted an hour starting with the Java impl, before I decided to re-fresh my C, but now I am running roughly 7 million tests per minute on my poor notebook ;) Still way too slow to catch up with the current leaders. My best score is 415. [[User:BKA|BKA]] ([[User talk:BKA|talk]]) 12:26, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Wikipedia article on {{hint: The perpetrators of the largest extinction in Earth's history}}&amp;quot; Would this be humans?  I'm afraid to get in on the Wikipedia editing since I'm already in so-so standing due to some childishness in 2006... [[Special:Contributions/76.106.251.87|76.106.251.87]] 21:54, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The opening line of the first panel has changed. It's now &amp;quot;Ahoy, Carnegie Melonites!&amp;quot; (for the current school) rather than &amp;quot;Hey, [university] students!&amp;quot; (as listed in all the current entries for the changing first panel text). The question and response seem to be the same as before.&lt;br /&gt;
And the fifth panel now has &amp;quot;if they're clever with their applications&amp;quot; instead of &amp;quot;provided any of them manage to fill out the application correctly&amp;quot;. So showing the text as static in the comic image is no longer accurate.&lt;br /&gt;
--[[Special:Contributions/50.0.108.18|50.0.108.18]] 23:00, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
If I visit http://xkcd.com/1193/ then the font is xkcd-Regular, whereas if I visit http://www.xkcd.com/1193/ then the font is the default serif font… (Iceweasel with NoScript) [[Special:Contributions/178.238.159.109|178.238.159.109]] 02:44, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Someone, please explain what hash breaking is. [[User:Jackdavinci|Jackdavinci]] ([[User talk:Jackdavinci|talk]]) 04:00, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:A cryptographically-secure hash function maps a set of numbers onto another set of numbers in such a way that converting forwards is easy, but converting back is difficult. The idea is that given a key and a lock, you can check the key against the lock by hashing the key and seeing if it maps to the lock. But given just the lock, you can't generate the key (easily). Randall gave us a lock, and the competition is to find the closest key. This is basically a competition to see who has the most computing power to generate lots and lots of keys. Keep in mind, I've glossed over a lot of technical details here. --[[Special:Contributions/173.162.57.51|173.162.57.51]] 15:22, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: There should be some cleverness involved in addition to access to computers. It all comes down to who can generate the most hashes in the time available, because as a good cryptographic hash Skein gives you no hint about how to change your input to get a result closer to your target, you just have to keep making guesses. But that is not just a matter of how many computers you have. For example, Googling around for implementations of Skein I didn't find any ready to run libraries for GPUs of Skein 1024 1024. A team at a university could have stuck with an existing C implementation running on an available set of computers, or taken the time to get it running on GPUs and get quite a bit of extra speed. Also, I haven't experimented with it, but a hash function should be faster if you give it a smaller input. The current best result from CMU would take on the average about 1 quadtrillion (1e15) trials to find. Given that the input to the hash has to be in the form of URL-safe printable characters, if you assume that your team will not have time to generate more than, say 1e16 hashes and the character set you have to work with is 100 characters (my guess from looking at my keyboard) then your test input strings do not have to be longer than 8 characters. Anyone who is generating test input for the hash that is any longer, for example if they are, as a really bad example, converting 1024-bit numbers to 256 ASCII character hex, is doing at least 32 times too much work for each hash calculation. [[User:Bugstomper|Bugstomper]] ([[User talk:Bugstomper|talk]]) 00:37, 3 April 2013 (UTC)&lt;br /&gt;
:The time it takes to compute a Skein hash depends only on the number of bits of internal state, not of the input. This is intentional; if the execution time were dependent on input length, an attacker could execute a timing attack on the hash. AES is known to be sensitive to such attacks, but Skein is resistant. [[Special:Contributions/140.254.153.76|140.254.153.76]] 04:14, 3 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Is it over now that it's after midnight?  When I moused over the school name, it didn't give me a pop-up showing the next hint.  [[Special:Contributions/76.106.251.87|76.106.251.87]] 06:06, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Do you suppose the &amp;quot;Needs more Bob&amp;quot; possibility in the second panel is a reference to Microsoft Bob (an absolutely and justly reviled Microsoft product from the 90's)? [[Special:Contributions/66.140.241.100|66.140.241.100]] 11:25, 2 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Scary Thought #392:&lt;br /&gt;
'Time' and 'Extenalities' are giving Explainxkcd heavy loads. This may be on purpose. Randall might upload yet another 'heavy' comic. [[User:Greyson|Greyson]] ([[User talk:Greyson|talk]]) 14:05, 2 April 2013 (UTC)&lt;br /&gt;
:It does feel like he sometimes just releases comics that do unusual edge-casey things, just to see us wiki editors struggle with handling the comic. Then again, it might just be Randall trying to make a really dynamic and novel webcomic. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|#707|David}}&amp;lt;font color=#070 size=3&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=#508 size=4&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 14:28, 2 April 2013 (UTC)&lt;br /&gt;
:At the moment, xkcd.com seems to be down. Coincidence? --[[User:Johnsmith|Johnsmith]] ([[User talk:Johnsmith|talk]]) 06:49, 3 April 2013 (UTC)&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=Talk:1190:_Time&amp;diff=31059</id>
		<title>Talk:1190: Time</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=Talk:1190:_Time&amp;diff=31059"/>
				<updated>2013-03-25T23:10:11Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: /* Before obfuscation... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pretty sure we're just getting trolled with this one [[Special:Contributions/99.108.190.136|99.108.190.136]] 04:48, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Can't tell if this is emo xkcd or trolling xkcd. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:53, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Something seems a little fishy because the image url is different than normal. [[User:Bugefun|Bugefun]] ([[User talk:Bugefun|talk]]) 04:55, 25 March 2013 (UTC)&lt;br /&gt;
:Maybe the comic slowly changes throughout the day. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:56, 25 March 2013 (UTC)&lt;br /&gt;
::Oh god, it does. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:57, 25 March 2013 (UTC)&lt;br /&gt;
:::When uploading different versions of the image, use the naming convention time[iterationNumber].png. We'll compile all the images into one and display them as per [[Traffic Lights]]. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:05, 25 March 2013 (UTC)&lt;br /&gt;
::::Alright, so the comic appears to be switching between two states here: between [[media:time2.png|this]] and [[media:time3.png|this]]. If nothing new happens, I'll get to clipping the comics together. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:28, 25 March 2013 (UTC)&lt;br /&gt;
:::::Whoop, nope, [[media:time4.png|this]] just came up. Is there more to come? '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:34, 25 March 2013 (UTC)&lt;br /&gt;
::::::Alright, so a new one is posted every half-hour. Whoopee. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 06:06, 25 March 2013 (UTC)&lt;br /&gt;
:::::::And there's a new one! Megan leaning back and looking up...&lt;br /&gt;
::::::::Well, the image changed, who has the time to make a script to catch the new images and compile them into a gif? https://dl.dropbox.com/u/932170/time.png [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 07:14, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Special:Contributions/72.21.198.66|72.21.198.66]] 05:11, 25 March 2013 (UTC)It could be a reference to the old proverb &amp;quot; time and tide wait for none&amp;quot; Cueball and the girl could be waiting for the tide in the beach! (Just a guess)[[Special:Contributions/72.21.198.66|72.21.198.66]] 05:11, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The picture does chance with time. The URL includes a changing timestamp that I can't decipher. Compare these two URLS (which have slightly different images:&lt;br /&gt;
http://imgs.xkcd.com/comics/time/8eb156cce408df8bb83528382d6a2aa2ce6c74f3c573fd12b058cd1c56420672.png&lt;br /&gt;
http://imgs.xkcd.com/comics/time/1e349a579b5f9b5ed487ddf7e88244b70330941ddedac9c6abf6ed2e3f589b97.png&lt;br /&gt;
&lt;br /&gt;
Perhaps there is a way to hack the URL to view future images. [[Special:Contributions/199.30.248.121|199.30.248.121]] 05:29, 25 March 2013 (UTC)&lt;br /&gt;
: I would also like to add that knowing randall, these are not the only images. For all we know, the image will still be changing in 5 years while a tree grows in front of them. My point is: Are the URLs hackable, or did he encrypt them? [[Special:Contributions/199.30.248.121|199.30.248.121]] 05:33, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Likely there is a way to hack the URLs; they look like some sort of hash, probably a hashed timestamp. Of course, he could easily have added some salt to the hash, making it significantly *harder* to hack. But they're strings of a specific length, so it should be pretty easy to bruteforce it, fetch all the images, and then (maybe) reverse-engineer the sequence. *That* all depends on how many of them there are. [[Special:Contributions/76.90.249.178|76.90.249.178]] 05:44, 25 March 2013 (UTC)&lt;br /&gt;
:Good god, do you see how many digits are *in* that hash? The sun'll have burned out by the time we've tested every possible combination of digits. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:47, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It seems that the image is updated every 1/2 hour. [[Special:Contributions/152.23.97.150|152.23.97.150]] 06:17, 25 March 2013 (UTC)&lt;br /&gt;
: Given that the images switch back and forth between other images already seen, and that the comic should be viewable in the future, it seems unlikely that it's any thing like a simple sha256 of part of the timestamp.  I think it's more likely a function of half-hours and minutes (assuming we continue to get a new possible image every half-hour). [[Special:Contributions/99.153.248.206|99.153.248.206]] 06:59, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: The images do cycle, yes. But for some reason I have never seen the img where Megan is looking behind her. Also wouldn't it be difficult to show a sequential story (like the rising tide) if the previous images keep cycling ?&lt;br /&gt;
&lt;br /&gt;
Hash appears to be SHA-256. I tried some obvious hashes (&amp;quot;1&amp;quot;, &amp;quot;11901&amp;quot;, &amp;quot;1190_1&amp;quot;, &amp;quot;1190.1&amp;quot;) to no avail. Maybe this is HMAC-SHA256? Also, I would suggest trying Unix timestamps. [[Special:Contributions/131.156.236.149|131.156.236.149]] 06:19, 25 March 2013 (UTC)&lt;br /&gt;
: I've been trying to make educated guesses as to what's being hashed here: http://www.xorbin.com/tools/sha256-hash-calculator ... he could also be using hash(hash2(value)) which would be virtually impossible to crack. [[Special:Contributions/99.153.248.206|99.153.248.206]] 06:59, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It's entirely possible that the &amp;quot;hash&amp;quot; is actually randomly generated. Just a thought. [[Special:Contributions/129.21.119.153|129.21.119.153]] 07:03, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Alright, this is probably not going to work, but I'm trying to exploit Randall's awesomeness here. Maybe he decided to take the time-stamps from the user? I don't know if that's even possible... That would then allow people in different time zones to obtain different images simultaneously. (What's the corollary of Godwin's law for a bunch of math-and-science nerds and relativity? Is there one?) Clicking the img src url on the comic's html page, give me this: http://imgs.xkcd.com/comics/time/752687b61523144c61736cd89f8c153dc41e19128f72d78d44947ff800f057fa.png : Never mind.. apparently others see the same image too.&lt;br /&gt;
&lt;br /&gt;
Could he be doing this live? Monitoring the discussion on the net? Collaborative, crowdsourced comic-ing? Reminds me of those you-decide-what-the-character-does-next-and-flip-to-appropriate-page parallel plot novels.&lt;br /&gt;
&lt;br /&gt;
[[Special:Contributions/220.224.246.97|220.224.246.97]] 07:14, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Let's just compare the two pictures and see how the bottom right changes, which I believe is water and they are indeed waiting for the tide. [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 07:19, 25 March 2013 (UTC)&lt;br /&gt;
:I'm adding urls to pictures bellow, edit freely.&lt;br /&gt;
::They change every 5 minutes, will try to keep track.&lt;br /&gt;
&lt;br /&gt;
http://www.explainxkcd.com/wiki/images/f/f8/time.png &lt;br /&gt;
http://imgs.xkcd.com/comics/time/1e349a579b5f9b5ed487ddf7e88244b70330941ddedac9c6abf6ed2e3f589b97.png&lt;br /&gt;
http://imgs.xkcd.com/comics/time/752687b61523144c61736cd89f8c153dc41e19128f72d78d44947ff800f057fa.png&lt;br /&gt;
http://dl.dropbox.com/u/932170/timeasdf.png &lt;br /&gt;
http://dl.dropbox.com/u/932170/time6.png&lt;br /&gt;
&lt;br /&gt;
:I have uploaded all the different images onto the wiki, in the order that they were revealed. To avoid needless duplication of effort, I'll put them up in the explanation page. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 07:44, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It just went back to the second image... [[Special:Contributions/220.224.246.97|220.224.246.97]] 07:59, 25 March 2013 (UTC)&lt;br /&gt;
: And now changed to something new.  http://imgs.xkcd.com/comics/time/cdcc6b46b32c53f8596cd0106958b42c4260b9cbc022e6d94054147aa6554960.png&lt;br /&gt;
:: The images do look alike, but they're all different. Thanks David. [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 08:04, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: No..I checked the random string. They're exactly the same. In fact, now it's gone back to the second image. Again. [[Special:Contributions/220.224.246.97|220.224.246.97]] 08:07, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Just found this JavaScript code embedded in the comic HTML source (Update: Reformatted to prevent eye-bleeding): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(function (e) {&lt;br /&gt;
    &amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function t() {&lt;br /&gt;
        this.data = {}&lt;br /&gt;
    }&lt;br /&gt;
    function n() {&lt;br /&gt;
        this.listeners = new t&lt;br /&gt;
    }&lt;br /&gt;
    function r(e) {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            throw e&lt;br /&gt;
        }, 0)&lt;br /&gt;
    }&lt;br /&gt;
    function i(e) {&lt;br /&gt;
        this.type = e&lt;br /&gt;
    }&lt;br /&gt;
    function s(e, t) {&lt;br /&gt;
        i.call(this, e), this.data = t.data, this.lastEventId = t.lastEventId&lt;br /&gt;
    }&lt;br /&gt;
    function g(e, t) {&lt;br /&gt;
        var n = Number(e);&lt;br /&gt;
        return (n &amp;lt; 1 ? 1 : n &amp;gt; 18e6 ? 18e6 : n) || t&lt;br /&gt;
    }&lt;br /&gt;
    function y(e, t, n) {&lt;br /&gt;
        try {&lt;br /&gt;
            typeof e[t] == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; e[t](n)&lt;br /&gt;
        } catch (i) {&lt;br /&gt;
            r(i)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    function b(t, r) {&lt;br /&gt;
        function B() {&lt;br /&gt;
            L = d, N !== null &amp;amp;&amp;amp; (N.abort(), N = null), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = 0), S.readyState = d&lt;br /&gt;
        }&lt;br /&gt;
        function j(e) {&lt;br /&gt;
            var t = L === p || L === h ? N.responseText || &amp;quot;&amp;quot; : &amp;quot;&amp;quot;,&lt;br /&gt;
                n = null;&lt;br /&gt;
            if (L === h) {&lt;br /&gt;
                var r = f ? t !== &amp;quot;&amp;quot; ? N.getResponseHeader(&amp;quot;Content-Type&amp;quot;) : &amp;quot;&amp;quot; : N.contentType;&lt;br /&gt;
                if (r &amp;amp;&amp;amp; v.test(r)) {&lt;br /&gt;
                    L = p, T = !0, x = u, S.readyState = p, n = new i(&amp;quot;open&amp;quot;), S.dispatchEvent(n), y(S, &amp;quot;onopen&amp;quot;, n);&lt;br /&gt;
                    if (L === d) return&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (L === p) {&lt;br /&gt;
                t.length &amp;gt; k &amp;amp;&amp;amp; (H = !0, T = !0);&lt;br /&gt;
                var o = 0,&lt;br /&gt;
                    a = t.indexOf(&amp;quot;\r&amp;quot;, k),&lt;br /&gt;
                    l = t.indexOf(&amp;quot;\n&amp;quot;, k);&lt;br /&gt;
                while (a !== -1 || l !== -1) {&lt;br /&gt;
                    a === -1 || l !== -1 &amp;amp;&amp;amp; l &amp;lt; a ? (o = l, l = t.indexOf(&amp;quot;\n&amp;quot;, o + 1)) : (o = a, a = t.indexOf(&amp;quot;\r&amp;quot;, o + 1));&lt;br /&gt;
                    var m = t.slice(k, o),&lt;br /&gt;
                        B = D;&lt;br /&gt;
                    D = t.slice(o, o + 1) === &amp;quot;\r&amp;quot;, k = o + 1;&lt;br /&gt;
                    if (!B || m.length !== 0 || D) {&lt;br /&gt;
                        _.push(m);&lt;br /&gt;
                        var j = _.join(&amp;quot;&amp;quot;);&lt;br /&gt;
                        _.length = 0;&lt;br /&gt;
                        if (j !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                            var I = &amp;quot;&amp;quot;,&lt;br /&gt;
                                q = j.indexOf(&amp;quot;:&amp;quot;, 0);&lt;br /&gt;
                            q !== -1 &amp;amp;&amp;amp; (I = j.slice(q + (j.slice(q + 1, q + 2) === &amp;quot; &amp;quot; ? 2 : 1)), j = j.slice(0, q)), j === &amp;quot;data&amp;quot; ? A.push(I) : j === &amp;quot;id&amp;quot; ? O = I : j === &amp;quot;event&amp;quot; ? M = I : j === &amp;quot;retry&amp;quot; ? (u = g(I, u), x = u, b &amp;lt; u &amp;amp;&amp;amp; (b = u)) : j === &amp;quot;retryLimit&amp;quot; ? b = g(I, b) : j === &amp;quot;heartbeatTimeout&amp;quot; &amp;amp;&amp;amp; (w = g(I, w), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = setTimeout(R, w)))&lt;br /&gt;
                        } else {&lt;br /&gt;
                            if (A.length !== 0) {&lt;br /&gt;
                                E = O;&lt;br /&gt;
                                var U = M || &amp;quot;message&amp;quot;;&lt;br /&gt;
                                n = new s(U, {&lt;br /&gt;
                                    data: A.join(&amp;quot;\n&amp;quot;),&lt;br /&gt;
                                    lastEventId: O&lt;br /&gt;
                                }), S.dispatchEvent(n), U === &amp;quot;message&amp;quot; &amp;amp;&amp;amp; y(S, &amp;quot;onmessage&amp;quot;, n);&lt;br /&gt;
                                if (L === d) return&lt;br /&gt;
                            }&lt;br /&gt;
                            A.length = 0, M = &amp;quot;&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                k !== t.length &amp;amp;&amp;amp; (_.push(t.slice(k)), k = t.length)&lt;br /&gt;
            }&lt;br /&gt;
            H &amp;amp;&amp;amp; P === 0 &amp;amp;&amp;amp; (H = !1, P = setTimeout(F, 80)), L !== p &amp;amp;&amp;amp; L !== h || !(e || k &amp;gt; 1048576 || C === 0 &amp;amp;&amp;amp; !T) ? C === 0 &amp;amp;&amp;amp; (T = !1, C = setTimeout(R, w)) : (L = c, N.abort(), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = 0), x &amp;gt; b &amp;amp;&amp;amp; (x = b), C = setTimeout(R, x), x = x * 2 + 1, S.readyState = h, n = new i(&amp;quot;error&amp;quot;), S.dispatchEvent(n), y(S, &amp;quot;onerror&amp;quot;, n))&lt;br /&gt;
        }&lt;br /&gt;
        function F() {&lt;br /&gt;
            P = 0, j(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function I() {&lt;br /&gt;
            j(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function q() {&lt;br /&gt;
            j(!0)&lt;br /&gt;
        }&lt;br /&gt;
        function R() {&lt;br /&gt;
            C = 0;&lt;br /&gt;
            if (L !== c) {&lt;br /&gt;
                j(!1);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (navigator.onLine === !1) {&lt;br /&gt;
                C = setTimeout(R, 500);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (m &amp;amp;&amp;amp; e.document &amp;amp;&amp;amp; (e.document.readyState === &amp;quot;loading&amp;quot; || e.document.readyState === &amp;quot;interactive&amp;quot;)) {&lt;br /&gt;
                C = setTimeout(R, 100);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            N.onload = N.onerror = q, N.mozAnon === undefined ? N.onprogress = I : N.onreadystatechange = I, T = !1, C = setTimeout(R, w), k = 0, L = h, A.length = 0, M = &amp;quot;&amp;quot;, O = E, _.length = 0, D = !1, N.open(&amp;quot;GET&amp;quot;, t + ((t.indexOf(&amp;quot;?&amp;quot;, 0) === -1 ? &amp;quot;?&amp;quot; : &amp;quot;&amp;amp;&amp;quot;) + &amp;quot;lastEventId=&amp;quot; + encodeURIComponent(E) + &amp;quot;&amp;amp;r=&amp;quot; + String(Math.random() + 1).slice(2)), !0), N.withCredentials = o, N.responseType = &amp;quot;text&amp;quot;, f &amp;amp;&amp;amp; N.setRequestHeader(&amp;quot;Accept&amp;quot;, &amp;quot;text/event-stream&amp;quot;), N.send(null)&lt;br /&gt;
        }&lt;br /&gt;
        t = String(t);&lt;br /&gt;
        var o = Boolean(a &amp;amp;&amp;amp; r &amp;amp;&amp;amp; r.withCredentials),&lt;br /&gt;
            u = g(r ? r.retry : NaN, 1e3),&lt;br /&gt;
            b = g(r ? r.retryLimit : NaN, 3e5),&lt;br /&gt;
            w = g(r ? r.heartbeatTimeout : NaN, 45e3),&lt;br /&gt;
            E = r &amp;amp;&amp;amp; r.lastEventId &amp;amp;&amp;amp; String(r.lastEventId) || &amp;quot;&amp;quot;,&lt;br /&gt;
            S = this,&lt;br /&gt;
            x = u,&lt;br /&gt;
            T = !1,&lt;br /&gt;
            N = new l,&lt;br /&gt;
            C = 0,&lt;br /&gt;
            k = 0,&lt;br /&gt;
            L = c,&lt;br /&gt;
            A = [],&lt;br /&gt;
            O = &amp;quot;&amp;quot;,&lt;br /&gt;
            M = &amp;quot;&amp;quot;,&lt;br /&gt;
            _ = [],&lt;br /&gt;
            D = !1,&lt;br /&gt;
            P = 0,&lt;br /&gt;
            H = !1;&lt;br /&gt;
        r = null, n.call(this), this.close = B, this.url = t, this.readyState = h, this.withCredentials = o, R()&lt;br /&gt;
    }&lt;br /&gt;
    function w() {&lt;br /&gt;
        this.CONNECTING = h, this.OPEN = p, this.CLOSED = d&lt;br /&gt;
    }&lt;br /&gt;
    t.prototype = {&lt;br /&gt;
        get: function (e) {&lt;br /&gt;
            return this.data[e + &amp;quot;~&amp;quot;]&lt;br /&gt;
        },&lt;br /&gt;
        set: function (e, t) {&lt;br /&gt;
            this.data[e + &amp;quot;~&amp;quot;] = t&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;delete&amp;quot;: function (e) {&lt;br /&gt;
            delete this.data[e + &amp;quot;~&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }, n.prototype = {&lt;br /&gt;
        dispatchEvent: function (e) {&lt;br /&gt;
            var t = String(e.type),&lt;br /&gt;
                n = this.listeners,&lt;br /&gt;
                i = n.get(t);&lt;br /&gt;
            if (!i) return;&lt;br /&gt;
            var s = i.length,&lt;br /&gt;
                o = -1;&lt;br /&gt;
            while (++o &amp;lt; s) {&lt;br /&gt;
                var u = i[o];&lt;br /&gt;
                try {&lt;br /&gt;
                    u.call(this, e)&lt;br /&gt;
                } catch (a) {&lt;br /&gt;
                    r(a)&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        addEventListener: function (e, t) {&lt;br /&gt;
            e = String(e);&lt;br /&gt;
            var n = this.listeners,&lt;br /&gt;
                r = n.get(e);&lt;br /&gt;
            r || n.set(e, r = []);&lt;br /&gt;
            var i = r.length;&lt;br /&gt;
            while (--i &amp;gt;= 0) if (r[i] === t) return;&lt;br /&gt;
            r.push(t)&lt;br /&gt;
        },&lt;br /&gt;
        removeEventListener: function (e, t) {&lt;br /&gt;
            e = String(e);&lt;br /&gt;
            var n = this.listeners,&lt;br /&gt;
                r = n.get(e);&lt;br /&gt;
            if (!r) return;&lt;br /&gt;
            var i = r.length,&lt;br /&gt;
                s = [],&lt;br /&gt;
                o = -1;&lt;br /&gt;
            while (++o &amp;lt; i) r[o] !== t &amp;amp;&amp;amp; s.push(r[o]);&lt;br /&gt;
            s.length === 0 ? n[&amp;quot;delete&amp;quot;](e) : n.set(e, s)&lt;br /&gt;
        }&lt;br /&gt;
    }, s.prototype = i.prototype;&lt;br /&gt;
    var o = e.XMLHttpRequest,&lt;br /&gt;
        u = e.XDomainRequest,&lt;br /&gt;
        a = Boolean(o &amp;amp;&amp;amp; (new o).withCredentials !== undefined),&lt;br /&gt;
        f = a,&lt;br /&gt;
        l = a ? o : u,&lt;br /&gt;
        c = -1,&lt;br /&gt;
        h = 0,&lt;br /&gt;
        p = 1,&lt;br /&gt;
        d = 2,&lt;br /&gt;
        v = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i,&lt;br /&gt;
        m = /AppleWebKit\/5([0-2][0-9]|3[0-4])[^\d]/.test(navigator.userAgent);&lt;br /&gt;
    w.prototype = n.prototype, b.prototype = new w, w.call(b), l &amp;amp;&amp;amp; (e.EventSource = b)&lt;br /&gt;
})(this),&lt;br /&gt;
function () {&lt;br /&gt;
    function e(e) {&lt;br /&gt;
        (new Image).src = &amp;quot;http://xkcd.com/events/&amp;quot; + e&lt;br /&gt;
    }&lt;br /&gt;
    function t() {&lt;br /&gt;
        location.hash == &amp;quot;#verbose&amp;quot; &amp;amp;&amp;amp; console.log.apply(console, arguments)&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
        var n = &amp;quot;http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;quot;,&lt;br /&gt;
            r = new EventSource(n);&lt;br /&gt;
        t(&amp;quot;connecting to event source:&amp;quot;, n), r.addEventListener(&amp;quot;open&amp;quot;, function (t) {&lt;br /&gt;
            e(&amp;quot;connect_start&amp;quot;)&lt;br /&gt;
        }, !1), r.addEventListener(&amp;quot;error&amp;quot;, function (t) {&lt;br /&gt;
            e(&amp;quot;connect_error&amp;quot;)&lt;br /&gt;
        }, !1), r.addEventListener(&amp;quot;loadtest&amp;quot;, t, !1), r.addEventListener(&amp;quot;comic/time&amp;quot;, t, !1), r.addEventListener(&amp;quot;comic/time&amp;quot;, function (e) {&lt;br /&gt;
            var n = JSON.parse(e.data),&lt;br /&gt;
                r = document.getElementById(&amp;quot;comic&amp;quot;).getElementsByTagName(&amp;quot;img&amp;quot;)[0],&lt;br /&gt;
                i = Math.round(Math.random() * n.spread);&lt;br /&gt;
            t(&amp;quot;waiting&amp;quot;, i, &amp;quot;seconds before displaying comic&amp;quot;, n.image), setTimeout(function () {&lt;br /&gt;
                r.src = &amp;quot;http://imgs.xkcd.com/comics/time/&amp;quot; + n.image&lt;br /&gt;
            }, i * 1e3)&lt;br /&gt;
        }, !1)&lt;br /&gt;
    } catch (i) {&lt;br /&gt;
        e(&amp;quot;js_error&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
}();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm no programmer but this looks important to me...&lt;br /&gt;
&lt;br /&gt;
:Doesn't really help. The script basically changes the image when something happens (probably some time passes, although it's possible there is more hidden there). WHAT image then appears is not directed by the script, but by the site. Specifically, the image displayed as first is taken from [http://c0.xkcd.com/redirect/comic/time http://c0.xkcd.com/redirect/comic/time], while the script asks for [http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;amp;r=(somenumber) http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;amp;r=(somenumber)] ... which is, if you get correct &amp;quot;r&amp;quot;, probably some json containing the image url. So, even if you hack the script, you will not get all possible urls. -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 09:17, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: ... actually, given that the script part doesn't seem to do anything just now, it's even possible it's for later (ie, starts producing images when the correct time come). Or maybe there is a bug somewhere in the code :-). -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 09:27, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Thanks for explaining. Why hasn't anyone posted this before? Could &amp;quot;location.hash&amp;quot; possibly have anything to do with the method used to generate the image hash key? Also, why is this code so difficult to follow (Obfuscation?)? So many questions... Sorry if this is just a huge waste of ''Time''.&lt;br /&gt;
&lt;br /&gt;
:::: &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; is the URI of the page. &amp;lt;code&amp;gt;location.hash&amp;lt;/code&amp;gt; is the part of the uri after the ''#'' character. If you go to [https://xkcd.com/1190/#verbose https://xkcd.com/1190/#verbose], you'll see some debugging output in your browser's debugging console (Firefox: Web Console or Firebug, Chrome: Development Tools). But nothing to decode the algorithm... :-( --[[Special:Contributions/83.243.48.2|83.243.48.2]] 10:01, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::: Well, I don't know what's doing it, but there's definitely some script (probably this script) that's refreshing the image automatically.  I left the comic open for an hour or so and noticed the image had changed. I refreshed with #verbose in Chrome right before the 30 minute mark and got the following in the console.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
connecting to event source: http://c0.xkcd.com/stream/comic/time?method=EventSource time07.min.js:1&lt;br /&gt;
s {type: &amp;quot;comic/time&amp;quot;, data: &amp;quot;{&amp;quot;spread&amp;quot;:5,&amp;quot;image&amp;quot;:&amp;quot;832a7f13ca0fadc46e93475bb617d78211e32c81c3af0e289a51f8f149707759.png&amp;quot;}&amp;quot;, lastEventId: &amp;quot;e2992bf0-9557-11e2-8001-1c6f659cb250&amp;quot;} time07.min.js:1&lt;br /&gt;
waiting 0 seconds before displaying comic 832a7f13ca0fadc46e93475bb617d78211e32c81c3af0e289a51f8f149707759.png time07.min.js:1&lt;br /&gt;
Resource interpreted as Image but transferred with MIME type application/octet-stream: &amp;quot;http://xkcd.com/events/connect_start&amp;quot;. time07.min.js:1&lt;br /&gt;
s {type: &amp;quot;comic/time&amp;quot;, data: &amp;quot;{&amp;quot;spread&amp;quot;:5,&amp;quot;image&amp;quot;:&amp;quot;847265673986f085460bf1a95b96f7171bcd9a4f1f0a598b2188307d03bcfaa3.png&amp;quot;}&amp;quot;, lastEventId: &amp;quot;79580fe8-9558-11e2-8001-1c6f659cb250&amp;quot;} time07.min.js:1&lt;br /&gt;
waiting 4 seconds before displaying comic 847265673986f085460bf1a95b96f7171bcd9a4f1f0a598b2188307d03bcfaa3.png time07.min.js:1&lt;br /&gt;
connection error i {type: &amp;quot;error&amp;quot;} time07.min.js:1&lt;br /&gt;
Resource interpreted as Image but transferred with MIME type application/octet-stream: &amp;quot;http://xkcd.com/events/connect_error&amp;quot;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::: The script seems to poll the server every minute or two. It's different from before, where the image server itself redirected to the correct image. The auto refresh was probably always intended, but not quite ready when the comic went live. It may have turned out to be necessary too, so the image server doesn't have to do all the work. [[Special:Contributions/129.21.119.153|129.21.119.153]] 14:45, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Before obfuscation... ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(function (global) {&lt;br /&gt;
    &amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function Map() {&lt;br /&gt;
        this.data = {}&lt;br /&gt;
    }&lt;br /&gt;
    function EventTarget() {&lt;br /&gt;
        this.listeners = new Map&lt;br /&gt;
    }&lt;br /&gt;
    function throwError(e) {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            throw e&lt;br /&gt;
        }, 0)&lt;br /&gt;
    }&lt;br /&gt;
    function Event(type) {&lt;br /&gt;
        this.type = type&lt;br /&gt;
    }&lt;br /&gt;
    function MessageEvent(type, options) {&lt;br /&gt;
        Event.call(this, type), this.data = options.data, this.lastEventId = options.lastEventId&lt;br /&gt;
    }&lt;br /&gt;
    function getDuration(value, def) {&lt;br /&gt;
        var n = Number(value);&lt;br /&gt;
        return (n &amp;lt; 1 ? 1 : n &amp;gt; 18e6 ? 18e6 : n) || def&lt;br /&gt;
    }&lt;br /&gt;
    function fire(that, property, event) {&lt;br /&gt;
        try {&lt;br /&gt;
            typeof that[property] == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; that[property](event)&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            throwError(e)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    function EventSource(url, options) {&lt;br /&gt;
        function close() {&lt;br /&gt;
            currentState = CLOSED, xhr !== null &amp;amp;&amp;amp; (xhr.abort(), xhr = null), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = 0), that.readyState = CLOSED&lt;br /&gt;
        }&lt;br /&gt;
        function onProgress(isLoadEnd) {&lt;br /&gt;
            var responseText = currentState === OPEN || currentState === CONNECTING ? xhr.responseText || &amp;quot;&amp;quot; : &amp;quot;&amp;quot;,&lt;br /&gt;
                event = null;&lt;br /&gt;
            if (currentState === CONNECTING) {&lt;br /&gt;
                var contentType = isXHR ? responseText !== &amp;quot;&amp;quot; ? xhr.getResponseHeader(&amp;quot;Content-Type&amp;quot;) : &amp;quot;&amp;quot; : xhr.contentType;&lt;br /&gt;
                if (contentType &amp;amp;&amp;amp; contentTypeRegExp.test(contentType)) {&lt;br /&gt;
                    currentState = OPEN, wasActivity = !0, retry = initialRetry, that.readyState = OPEN, event = new Event(&amp;quot;open&amp;quot;), that.dispatchEvent(event), fire(that, &amp;quot;onopen&amp;quot;, event);&lt;br /&gt;
                    if (currentState === CLOSED) return&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (currentState === OPEN) {&lt;br /&gt;
                responseText.length &amp;gt; charOffset &amp;amp;&amp;amp; (wasAct = !0, wasActivity = !0);&lt;br /&gt;
                var i = 0,&lt;br /&gt;
                    i1 = responseText.indexOf(&amp;quot;\r&amp;quot;, charOffset),&lt;br /&gt;
                    i2 = responseText.indexOf(&amp;quot;\n&amp;quot;, charOffset);&lt;br /&gt;
                while (i1 !== -1 || i2 !== -1) {&lt;br /&gt;
                    i1 === -1 || i2 !== -1 &amp;amp;&amp;amp; i2 &amp;lt; i1 ? (i = i2, i2 = responseText.indexOf(&amp;quot;\n&amp;quot;, i + 1)) : (i = i1, i1 = responseText.indexOf(&amp;quot;\r&amp;quot;, i + 1));&lt;br /&gt;
                    var line = responseText.slice(charOffset, i),&lt;br /&gt;
                        oldWasCR = wasCR;&lt;br /&gt;
                    wasCR = responseText.slice(i, i + 1) === &amp;quot;\r&amp;quot;, charOffset = i + 1;&lt;br /&gt;
                    if (!oldWasCR || line.length !== 0 || wasCR) {&lt;br /&gt;
                        responseBuffer.push(line);&lt;br /&gt;
                        var field = responseBuffer.join(&amp;quot;&amp;quot;);&lt;br /&gt;
                        responseBuffer.length = 0;&lt;br /&gt;
                        if (field !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                            var value = &amp;quot;&amp;quot;,&lt;br /&gt;
                                j = field.indexOf(&amp;quot;:&amp;quot;, 0);&lt;br /&gt;
                            j !== -1 &amp;amp;&amp;amp; (value = field.slice(j + (field.slice(j + 1, j + 2) === &amp;quot; &amp;quot; ? 2 : 1)), field = field.slice(0, j)), field === &amp;quot;data&amp;quot; ? dataBuffer.push(value) : field === &amp;quot;id&amp;quot; ? lastEventIdBuffer = value : field === &amp;quot;event&amp;quot; ? eventTypeBuffer = value : field === &amp;quot;retry&amp;quot; ? (initialRetry = getDuration(value, initialRetry), retry = initialRetry, retryLimit &amp;lt; initialRetry &amp;amp;&amp;amp; (retryLimit = initialRetry)) : field === &amp;quot;retryLimit&amp;quot; ? retryLimit = getDuration(value, retryLimit) : field === &amp;quot;heartbeatTimeout&amp;quot; &amp;amp;&amp;amp; (heartbeatTimeout = getDuration(value, heartbeatTimeout), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = setTimeout(onTimeout, heartbeatTimeout)))&lt;br /&gt;
                        } else {&lt;br /&gt;
                            if (dataBuffer.length !== 0) {&lt;br /&gt;
                                lastEventId = lastEventIdBuffer;&lt;br /&gt;
                                var type = eventTypeBuffer || &amp;quot;message&amp;quot;;&lt;br /&gt;
                                event = new MessageEvent(type, {&lt;br /&gt;
                                    data: dataBuffer.join(&amp;quot;\n&amp;quot;),&lt;br /&gt;
                                    lastEventId: lastEventIdBuffer&lt;br /&gt;
                                }), that.dispatchEvent(event), type === &amp;quot;message&amp;quot; &amp;amp;&amp;amp; fire(that, &amp;quot;onmessage&amp;quot;, event);&lt;br /&gt;
                                if (currentState === CLOSED) return&lt;br /&gt;
                            }&lt;br /&gt;
                            dataBuffer.length = 0, eventTypeBuffer = &amp;quot;&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                charOffset !== responseText.length &amp;amp;&amp;amp; (responseBuffer.push(responseText.slice(charOffset)), charOffset = responseText.length)&lt;br /&gt;
            }&lt;br /&gt;
            wasAct &amp;amp;&amp;amp; progressTimeout === 0 &amp;amp;&amp;amp; (wasAct = !1, progressTimeout = setTimeout(p, 80)), currentState !== OPEN &amp;amp;&amp;amp; currentState !== CONNECTING || !(isLoadEnd || charOffset &amp;gt; 1048576 || timeout === 0 &amp;amp;&amp;amp; !wasActivity) ? timeout === 0 &amp;amp;&amp;amp; (wasActivity = !1, timeout = setTimeout(onTimeout, heartbeatTimeout)) : (currentState = WAITING, xhr.abort(), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = 0), retry &amp;gt; retryLimit &amp;amp;&amp;amp; (retry = retryLimit), timeout = setTimeout(onTimeout, retry), retry = retry * 2 + 1, that.readyState = CONNECTING, event = new Event(&amp;quot;error&amp;quot;), that.dispatchEvent(event), fire(that, &amp;quot;onerror&amp;quot;, event))&lt;br /&gt;
        }&lt;br /&gt;
        function p() {&lt;br /&gt;
            progressTimeout = 0, onProgress(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function onProgress2() {&lt;br /&gt;
            onProgress(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function onLoadEnd() {&lt;br /&gt;
            onProgress(!0)&lt;br /&gt;
        }&lt;br /&gt;
        function onTimeout() {&lt;br /&gt;
            timeout = 0;&lt;br /&gt;
            if (currentState !== WAITING) {&lt;br /&gt;
                onProgress(!1);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (navigator.onLine === !1) {&lt;br /&gt;
                timeout = setTimeout(onTimeout, 500);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (webkitBefore535 &amp;amp;&amp;amp; global.document &amp;amp;&amp;amp; (global.document.readyState === &amp;quot;loading&amp;quot; || global.document.readyState === &amp;quot;interactive&amp;quot;)) {&lt;br /&gt;
                timeout = setTimeout(onTimeout, 100);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            xhr.onload = xhr.onerror = onLoadEnd, xhr.mozAnon === undefined ? xhr.onprogress = onProgress2 : xhr.onreadystatechange = onProgress2, wasActivity = !1, timeout = setTimeout(onTimeout, heartbeatTimeout), charOffset = 0, currentState = CONNECTING, dataBuffer.length = 0, eventTypeBuffer = &amp;quot;&amp;quot;, lastEventIdBuffer = lastEventId, responseBuffer.length = 0, wasCR = !1, xhr.open(&amp;quot;GET&amp;quot;, url + ((url.indexOf(&amp;quot;?&amp;quot;, 0) === -1 ? &amp;quot;?&amp;quot; : &amp;quot;&amp;amp;&amp;quot;) + &amp;quot;lastEventId=&amp;quot; + encodeURIComponent(lastEventId) + &amp;quot;&amp;amp;r=&amp;quot; + String(Math.random() + 1).slice(2)), !0), xhr.withCredentials = withCredentials, xhr.responseType = &amp;quot;text&amp;quot;, isXHR &amp;amp;&amp;amp; xhr.setRequestHeader(&amp;quot;Accept&amp;quot;, &amp;quot;text/event-stream&amp;quot;), xhr.send(null)&lt;br /&gt;
        }&lt;br /&gt;
        url = String(url);&lt;br /&gt;
        var withCredentials = Boolean(xhr2 &amp;amp;&amp;amp; options &amp;amp;&amp;amp; options.withCredentials),&lt;br /&gt;
            initialRetry = getDuration(options ? options.retry : NaN, 1e3),&lt;br /&gt;
            retryLimit = getDuration(options ? options.retryLimit : NaN, 3e5),&lt;br /&gt;
            heartbeatTimeout = getDuration(options ? options.heartbeatTimeout : NaN, 45e3),&lt;br /&gt;
            lastEventId = options &amp;amp;&amp;amp; options.lastEventId &amp;amp;&amp;amp; String(options.lastEventId) || &amp;quot;&amp;quot;,&lt;br /&gt;
            that = this,&lt;br /&gt;
            retry = initialRetry,&lt;br /&gt;
            wasActivity = !1,&lt;br /&gt;
            xhr = new Transport,&lt;br /&gt;
            timeout = 0,&lt;br /&gt;
            charOffset = 0,&lt;br /&gt;
            currentState = WAITING,&lt;br /&gt;
            dataBuffer = [],&lt;br /&gt;
            lastEventIdBuffer = &amp;quot;&amp;quot;,&lt;br /&gt;
            eventTypeBuffer = &amp;quot;&amp;quot;,&lt;br /&gt;
            responseBuffer = [],&lt;br /&gt;
            wasCR = !1,&lt;br /&gt;
            progressTimeout = 0,&lt;br /&gt;
            wasAct = !1;&lt;br /&gt;
        options = null, EventTarget.call(this), this.close = close, this.url = url, this.readyState = CONNECTING, this.withCredentials = withCredentials, onTimeout()&lt;br /&gt;
    }&lt;br /&gt;
    function F() {&lt;br /&gt;
        this.CONNECTING = CONNECTING, this.OPEN = OPEN, this.CLOSED = CLOSED&lt;br /&gt;
    }&lt;br /&gt;
    Map.prototype = {&lt;br /&gt;
        get: function (key) {&lt;br /&gt;
            return this.data[key + &amp;quot;~&amp;quot;]&lt;br /&gt;
        },&lt;br /&gt;
        set: function (key, value) {&lt;br /&gt;
            this.data[key + &amp;quot;~&amp;quot;] = value&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;delete&amp;quot;: function (key) {&lt;br /&gt;
            delete this.data[key + &amp;quot;~&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }, EventTarget.prototype = {&lt;br /&gt;
        dispatchEvent: function (event) {&lt;br /&gt;
            var type = String(event.type),&lt;br /&gt;
                listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            if (!typeListeners) return;&lt;br /&gt;
            var length = typeListeners.length,&lt;br /&gt;
                i = -1;&lt;br /&gt;
            while (++i &amp;lt; length) {&lt;br /&gt;
                var listener = typeListeners[i];&lt;br /&gt;
                try {&lt;br /&gt;
                    listener.call(this, event)&lt;br /&gt;
                } catch (e) {&lt;br /&gt;
                    throwError(e)&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        addEventListener: function (type, callback) {&lt;br /&gt;
            type = String(type);&lt;br /&gt;
            var listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            typeListeners || listeners.set(type, typeListeners = []);&lt;br /&gt;
            var i = typeListeners.length;&lt;br /&gt;
            while (--i &amp;gt;= 0) if (typeListeners[i] === callback) return;&lt;br /&gt;
            typeListeners.push(callback)&lt;br /&gt;
        },&lt;br /&gt;
        removeEventListener: function (type, callback) {&lt;br /&gt;
            type = String(type);&lt;br /&gt;
            var listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            if (!typeListeners) return;&lt;br /&gt;
            var length = typeListeners.length,&lt;br /&gt;
                filtered = [],&lt;br /&gt;
                i = -1;&lt;br /&gt;
            while (++i &amp;lt; length) typeListeners[i] !== callback &amp;amp;&amp;amp; filtered.push(typeListeners[i]);&lt;br /&gt;
            filtered.length === 0 ? listeners[&amp;quot;delete&amp;quot;](type) : listeners.set(type, filtered)&lt;br /&gt;
        }&lt;br /&gt;
    }, MessageEvent.prototype = Event.prototype;&lt;br /&gt;
    var XHR = global.XMLHttpRequest,&lt;br /&gt;
        XDR = global.XDomainRequest,&lt;br /&gt;
        xhr2 = Boolean(XHR &amp;amp;&amp;amp; (new XHR).withCredentials !== undefined),&lt;br /&gt;
        isXHR = xhr2,&lt;br /&gt;
        Transport = xhr2 ? XHR : XDR,&lt;br /&gt;
        WAITING = -1,&lt;br /&gt;
        CONNECTING = 0,&lt;br /&gt;
        OPEN = 1,&lt;br /&gt;
        CLOSED = 2,&lt;br /&gt;
        contentTypeRegExp = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i,&lt;br /&gt;
        webkitBefore535 = /AppleWebKit\/5([0-2][0-9]|3[0-4])[^\d]/.test(navigator.userAgent);&lt;br /&gt;
    F.prototype = EventTarget.prototype, EventSource.prototype = new F, F.call(EventSource), Transport &amp;amp;&amp;amp; (global.EventSource = EventSource)&lt;br /&gt;
 })(this),&lt;br /&gt;
function () {&lt;br /&gt;
    function record(name) {&lt;br /&gt;
        (new Image).src = &amp;quot;http://xkcd.com/events/&amp;quot; + name&lt;br /&gt;
    }&lt;br /&gt;
    function log() {&lt;br /&gt;
        location.hash == &amp;quot;#verbose&amp;quot; &amp;amp;&amp;amp; console.log.apply(console, arguments)&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
        var esURL = &amp;quot;http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;quot;,&lt;br /&gt;
            source = new EventSource(esURL);&lt;br /&gt;
        log(&amp;quot;connecting to event source:&amp;quot;, esURL), source.addEventListener(&amp;quot;open&amp;quot;, function (ev) {&lt;br /&gt;
            record(&amp;quot;connect_start&amp;quot;)&lt;br /&gt;
        }, !1), source.addEventListener(&amp;quot;error&amp;quot;, function (ev) {&lt;br /&gt;
            record(&amp;quot;connect_error&amp;quot;)&lt;br /&gt;
        }, !1), source.addEventListener(&amp;quot;loadtest&amp;quot;, log, !1), source.addEventListener(&amp;quot;comic/time&amp;quot;, log, !1), source.addEventListener(&amp;quot;comic/time&amp;quot;, function (ev) {&lt;br /&gt;
            var data = JSON.parse(ev.data),&lt;br /&gt;
                img = document.getElementById(&amp;quot;comic&amp;quot;).getElementsByTagName(&amp;quot;img&amp;quot;)[0],&lt;br /&gt;
                delay = Math.round(Math.random() * data.spread);&lt;br /&gt;
            log(&amp;quot;waiting&amp;quot;, delay, &amp;quot;seconds before displaying comic&amp;quot;, data.image), setTimeout(function () {&lt;br /&gt;
                img.src = &amp;quot;http://imgs.xkcd.com/comics/time/&amp;quot; + data.image&lt;br /&gt;
            }, delay * 1e3)&lt;br /&gt;
        }, !1)&lt;br /&gt;
    } catch (e) {&lt;br /&gt;
        record(&amp;quot;js_error&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
}();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Special:Contributions/79.180.173.88|79.180.173.88]] 09:48, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
http://imgs.xkcd.com/comics/time/426033682a26a0012a6f8e0c47287af91b7991a852d81c77402c937ffbd650c6.png&lt;br /&gt;
&lt;br /&gt;
http://www.explainxkcd.com/wiki/images/1/1e/f46c6571393bee1ee649a7daae41f6328e63482506aef1e22607d22c47dd7027.png --[[User:Johnsmith|Johnsmith]] ([[User talk:Johnsmith|talk]]) 22:51, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
http://www.explainxkcd.com/wiki/images/b/b0/88e3a0c8bba935c669606d9134314f811a0961985f968dd5d329e4695acc67c8.png --[[User:Johnsmith|Johnsmith]] ([[User talk:Johnsmith|talk]]) 23:10, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Denial of Service ==&lt;br /&gt;
&lt;br /&gt;
Is it just me or or did Randall manage to make all of us perform a Denial of Service on xkcd.com, and explainxkcd.com ? xkcd.com seems much slower, and I keep getting &amp;quot;500 Internal server error&amp;quot; when accessing this site (explainxkcd.com). I guess that's the effect of having everybody hit F5 every few minutes :) [[Special:Contributions/193.239.192.194|193.239.192.194]] 11:57, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== We are a botnet ==&lt;br /&gt;
Earlier today, the server handled all the image redirections. The script you see above went through several mutations (currently at #8), with each mutation it seems that Randall is adding more servers and trying to split the load between them. This is basically how a bot-net works - we all run code written by some evil genius, and he's changing the code as time passes to serve some hidden purpose.&lt;br /&gt;
[[Special:Contributions/79.180.173.88|79.180.173.88]] 15:44, 25 March 2013 (UTC)&lt;br /&gt;
    If he is using us as a botnet, then maybe the next comic will be something alluding to that.&lt;br /&gt;
    Probably like this: http://xkcd.com/350/&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=File:time39.png&amp;diff=31056</id>
		<title>File:time39.png</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=File:time39.png&amp;diff=31056"/>
				<updated>2013-03-25T23:08:26Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=Talk:1190:_Time&amp;diff=31049</id>
		<title>Talk:1190: Time</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=Talk:1190:_Time&amp;diff=31049"/>
				<updated>2013-03-25T22:51:59Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: /* Before obfuscation... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pretty sure we're just getting trolled with this one [[Special:Contributions/99.108.190.136|99.108.190.136]] 04:48, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Can't tell if this is emo xkcd or trolling xkcd. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:53, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Something seems a little fishy because the image url is different than normal. [[User:Bugefun|Bugefun]] ([[User talk:Bugefun|talk]]) 04:55, 25 March 2013 (UTC)&lt;br /&gt;
:Maybe the comic slowly changes throughout the day. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:56, 25 March 2013 (UTC)&lt;br /&gt;
::Oh god, it does. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:57, 25 March 2013 (UTC)&lt;br /&gt;
:::When uploading different versions of the image, use the naming convention time[iterationNumber].png. We'll compile all the images into one and display them as per [[Traffic Lights]]. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:05, 25 March 2013 (UTC)&lt;br /&gt;
::::Alright, so the comic appears to be switching between two states here: between [[media:time2.png|this]] and [[media:time3.png|this]]. If nothing new happens, I'll get to clipping the comics together. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:28, 25 March 2013 (UTC)&lt;br /&gt;
:::::Whoop, nope, [[media:time4.png|this]] just came up. Is there more to come? '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:34, 25 March 2013 (UTC)&lt;br /&gt;
::::::Alright, so a new one is posted every half-hour. Whoopee. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 06:06, 25 March 2013 (UTC)&lt;br /&gt;
:::::::And there's a new one! Megan leaning back and looking up...&lt;br /&gt;
::::::::Well, the image changed, who has the time to make a script to catch the new images and compile them into a gif? https://dl.dropbox.com/u/932170/time.png [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 07:14, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Special:Contributions/72.21.198.66|72.21.198.66]] 05:11, 25 March 2013 (UTC)It could be a reference to the old proverb &amp;quot; time and tide wait for none&amp;quot; Cueball and the girl could be waiting for the tide in the beach! (Just a guess)[[Special:Contributions/72.21.198.66|72.21.198.66]] 05:11, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The picture does chance with time. The URL includes a changing timestamp that I can't decipher. Compare these two URLS (which have slightly different images:&lt;br /&gt;
http://imgs.xkcd.com/comics/time/8eb156cce408df8bb83528382d6a2aa2ce6c74f3c573fd12b058cd1c56420672.png&lt;br /&gt;
http://imgs.xkcd.com/comics/time/1e349a579b5f9b5ed487ddf7e88244b70330941ddedac9c6abf6ed2e3f589b97.png&lt;br /&gt;
&lt;br /&gt;
Perhaps there is a way to hack the URL to view future images. [[Special:Contributions/199.30.248.121|199.30.248.121]] 05:29, 25 March 2013 (UTC)&lt;br /&gt;
: I would also like to add that knowing randall, these are not the only images. For all we know, the image will still be changing in 5 years while a tree grows in front of them. My point is: Are the URLs hackable, or did he encrypt them? [[Special:Contributions/199.30.248.121|199.30.248.121]] 05:33, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Likely there is a way to hack the URLs; they look like some sort of hash, probably a hashed timestamp. Of course, he could easily have added some salt to the hash, making it significantly *harder* to hack. But they're strings of a specific length, so it should be pretty easy to bruteforce it, fetch all the images, and then (maybe) reverse-engineer the sequence. *That* all depends on how many of them there are. [[Special:Contributions/76.90.249.178|76.90.249.178]] 05:44, 25 March 2013 (UTC)&lt;br /&gt;
:Good god, do you see how many digits are *in* that hash? The sun'll have burned out by the time we've tested every possible combination of digits. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:47, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It seems that the image is updated every 1/2 hour. [[Special:Contributions/152.23.97.150|152.23.97.150]] 06:17, 25 March 2013 (UTC)&lt;br /&gt;
: Given that the images switch back and forth between other images already seen, and that the comic should be viewable in the future, it seems unlikely that it's any thing like a simple sha256 of part of the timestamp.  I think it's more likely a function of half-hours and minutes (assuming we continue to get a new possible image every half-hour). [[Special:Contributions/99.153.248.206|99.153.248.206]] 06:59, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: The images do cycle, yes. But for some reason I have never seen the img where Megan is looking behind her. Also wouldn't it be difficult to show a sequential story (like the rising tide) if the previous images keep cycling ?&lt;br /&gt;
&lt;br /&gt;
Hash appears to be SHA-256. I tried some obvious hashes (&amp;quot;1&amp;quot;, &amp;quot;11901&amp;quot;, &amp;quot;1190_1&amp;quot;, &amp;quot;1190.1&amp;quot;) to no avail. Maybe this is HMAC-SHA256? Also, I would suggest trying Unix timestamps. [[Special:Contributions/131.156.236.149|131.156.236.149]] 06:19, 25 March 2013 (UTC)&lt;br /&gt;
: I've been trying to make educated guesses as to what's being hashed here: http://www.xorbin.com/tools/sha256-hash-calculator ... he could also be using hash(hash2(value)) which would be virtually impossible to crack. [[Special:Contributions/99.153.248.206|99.153.248.206]] 06:59, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It's entirely possible that the &amp;quot;hash&amp;quot; is actually randomly generated. Just a thought. [[Special:Contributions/129.21.119.153|129.21.119.153]] 07:03, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Alright, this is probably not going to work, but I'm trying to exploit Randall's awesomeness here. Maybe he decided to take the time-stamps from the user? I don't know if that's even possible... That would then allow people in different time zones to obtain different images simultaneously. (What's the corollary of Godwin's law for a bunch of math-and-science nerds and relativity? Is there one?) Clicking the img src url on the comic's html page, give me this: http://imgs.xkcd.com/comics/time/752687b61523144c61736cd89f8c153dc41e19128f72d78d44947ff800f057fa.png : Never mind.. apparently others see the same image too.&lt;br /&gt;
&lt;br /&gt;
Could he be doing this live? Monitoring the discussion on the net? Collaborative, crowdsourced comic-ing? Reminds me of those you-decide-what-the-character-does-next-and-flip-to-appropriate-page parallel plot novels.&lt;br /&gt;
&lt;br /&gt;
[[Special:Contributions/220.224.246.97|220.224.246.97]] 07:14, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Let's just compare the two pictures and see how the bottom right changes, which I believe is water and they are indeed waiting for the tide. [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 07:19, 25 March 2013 (UTC)&lt;br /&gt;
:I'm adding urls to pictures bellow, edit freely.&lt;br /&gt;
::They change every 5 minutes, will try to keep track.&lt;br /&gt;
&lt;br /&gt;
http://www.explainxkcd.com/wiki/images/f/f8/time.png &lt;br /&gt;
http://imgs.xkcd.com/comics/time/1e349a579b5f9b5ed487ddf7e88244b70330941ddedac9c6abf6ed2e3f589b97.png&lt;br /&gt;
http://imgs.xkcd.com/comics/time/752687b61523144c61736cd89f8c153dc41e19128f72d78d44947ff800f057fa.png&lt;br /&gt;
http://dl.dropbox.com/u/932170/timeasdf.png &lt;br /&gt;
http://dl.dropbox.com/u/932170/time6.png&lt;br /&gt;
&lt;br /&gt;
:I have uploaded all the different images onto the wiki, in the order that they were revealed. To avoid needless duplication of effort, I'll put them up in the explanation page. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 07:44, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It just went back to the second image... [[Special:Contributions/220.224.246.97|220.224.246.97]] 07:59, 25 March 2013 (UTC)&lt;br /&gt;
: And now changed to something new.  http://imgs.xkcd.com/comics/time/cdcc6b46b32c53f8596cd0106958b42c4260b9cbc022e6d94054147aa6554960.png&lt;br /&gt;
:: The images do look alike, but they're all different. Thanks David. [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 08:04, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: No..I checked the random string. They're exactly the same. In fact, now it's gone back to the second image. Again. [[Special:Contributions/220.224.246.97|220.224.246.97]] 08:07, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Just found this JavaScript code embedded in the comic HTML source (Update: Reformatted to prevent eye-bleeding): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(function (e) {&lt;br /&gt;
    &amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function t() {&lt;br /&gt;
        this.data = {}&lt;br /&gt;
    }&lt;br /&gt;
    function n() {&lt;br /&gt;
        this.listeners = new t&lt;br /&gt;
    }&lt;br /&gt;
    function r(e) {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            throw e&lt;br /&gt;
        }, 0)&lt;br /&gt;
    }&lt;br /&gt;
    function i(e) {&lt;br /&gt;
        this.type = e&lt;br /&gt;
    }&lt;br /&gt;
    function s(e, t) {&lt;br /&gt;
        i.call(this, e), this.data = t.data, this.lastEventId = t.lastEventId&lt;br /&gt;
    }&lt;br /&gt;
    function g(e, t) {&lt;br /&gt;
        var n = Number(e);&lt;br /&gt;
        return (n &amp;lt; 1 ? 1 : n &amp;gt; 18e6 ? 18e6 : n) || t&lt;br /&gt;
    }&lt;br /&gt;
    function y(e, t, n) {&lt;br /&gt;
        try {&lt;br /&gt;
            typeof e[t] == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; e[t](n)&lt;br /&gt;
        } catch (i) {&lt;br /&gt;
            r(i)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    function b(t, r) {&lt;br /&gt;
        function B() {&lt;br /&gt;
            L = d, N !== null &amp;amp;&amp;amp; (N.abort(), N = null), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = 0), S.readyState = d&lt;br /&gt;
        }&lt;br /&gt;
        function j(e) {&lt;br /&gt;
            var t = L === p || L === h ? N.responseText || &amp;quot;&amp;quot; : &amp;quot;&amp;quot;,&lt;br /&gt;
                n = null;&lt;br /&gt;
            if (L === h) {&lt;br /&gt;
                var r = f ? t !== &amp;quot;&amp;quot; ? N.getResponseHeader(&amp;quot;Content-Type&amp;quot;) : &amp;quot;&amp;quot; : N.contentType;&lt;br /&gt;
                if (r &amp;amp;&amp;amp; v.test(r)) {&lt;br /&gt;
                    L = p, T = !0, x = u, S.readyState = p, n = new i(&amp;quot;open&amp;quot;), S.dispatchEvent(n), y(S, &amp;quot;onopen&amp;quot;, n);&lt;br /&gt;
                    if (L === d) return&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (L === p) {&lt;br /&gt;
                t.length &amp;gt; k &amp;amp;&amp;amp; (H = !0, T = !0);&lt;br /&gt;
                var o = 0,&lt;br /&gt;
                    a = t.indexOf(&amp;quot;\r&amp;quot;, k),&lt;br /&gt;
                    l = t.indexOf(&amp;quot;\n&amp;quot;, k);&lt;br /&gt;
                while (a !== -1 || l !== -1) {&lt;br /&gt;
                    a === -1 || l !== -1 &amp;amp;&amp;amp; l &amp;lt; a ? (o = l, l = t.indexOf(&amp;quot;\n&amp;quot;, o + 1)) : (o = a, a = t.indexOf(&amp;quot;\r&amp;quot;, o + 1));&lt;br /&gt;
                    var m = t.slice(k, o),&lt;br /&gt;
                        B = D;&lt;br /&gt;
                    D = t.slice(o, o + 1) === &amp;quot;\r&amp;quot;, k = o + 1;&lt;br /&gt;
                    if (!B || m.length !== 0 || D) {&lt;br /&gt;
                        _.push(m);&lt;br /&gt;
                        var j = _.join(&amp;quot;&amp;quot;);&lt;br /&gt;
                        _.length = 0;&lt;br /&gt;
                        if (j !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                            var I = &amp;quot;&amp;quot;,&lt;br /&gt;
                                q = j.indexOf(&amp;quot;:&amp;quot;, 0);&lt;br /&gt;
                            q !== -1 &amp;amp;&amp;amp; (I = j.slice(q + (j.slice(q + 1, q + 2) === &amp;quot; &amp;quot; ? 2 : 1)), j = j.slice(0, q)), j === &amp;quot;data&amp;quot; ? A.push(I) : j === &amp;quot;id&amp;quot; ? O = I : j === &amp;quot;event&amp;quot; ? M = I : j === &amp;quot;retry&amp;quot; ? (u = g(I, u), x = u, b &amp;lt; u &amp;amp;&amp;amp; (b = u)) : j === &amp;quot;retryLimit&amp;quot; ? b = g(I, b) : j === &amp;quot;heartbeatTimeout&amp;quot; &amp;amp;&amp;amp; (w = g(I, w), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = setTimeout(R, w)))&lt;br /&gt;
                        } else {&lt;br /&gt;
                            if (A.length !== 0) {&lt;br /&gt;
                                E = O;&lt;br /&gt;
                                var U = M || &amp;quot;message&amp;quot;;&lt;br /&gt;
                                n = new s(U, {&lt;br /&gt;
                                    data: A.join(&amp;quot;\n&amp;quot;),&lt;br /&gt;
                                    lastEventId: O&lt;br /&gt;
                                }), S.dispatchEvent(n), U === &amp;quot;message&amp;quot; &amp;amp;&amp;amp; y(S, &amp;quot;onmessage&amp;quot;, n);&lt;br /&gt;
                                if (L === d) return&lt;br /&gt;
                            }&lt;br /&gt;
                            A.length = 0, M = &amp;quot;&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                k !== t.length &amp;amp;&amp;amp; (_.push(t.slice(k)), k = t.length)&lt;br /&gt;
            }&lt;br /&gt;
            H &amp;amp;&amp;amp; P === 0 &amp;amp;&amp;amp; (H = !1, P = setTimeout(F, 80)), L !== p &amp;amp;&amp;amp; L !== h || !(e || k &amp;gt; 1048576 || C === 0 &amp;amp;&amp;amp; !T) ? C === 0 &amp;amp;&amp;amp; (T = !1, C = setTimeout(R, w)) : (L = c, N.abort(), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = 0), x &amp;gt; b &amp;amp;&amp;amp; (x = b), C = setTimeout(R, x), x = x * 2 + 1, S.readyState = h, n = new i(&amp;quot;error&amp;quot;), S.dispatchEvent(n), y(S, &amp;quot;onerror&amp;quot;, n))&lt;br /&gt;
        }&lt;br /&gt;
        function F() {&lt;br /&gt;
            P = 0, j(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function I() {&lt;br /&gt;
            j(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function q() {&lt;br /&gt;
            j(!0)&lt;br /&gt;
        }&lt;br /&gt;
        function R() {&lt;br /&gt;
            C = 0;&lt;br /&gt;
            if (L !== c) {&lt;br /&gt;
                j(!1);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (navigator.onLine === !1) {&lt;br /&gt;
                C = setTimeout(R, 500);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (m &amp;amp;&amp;amp; e.document &amp;amp;&amp;amp; (e.document.readyState === &amp;quot;loading&amp;quot; || e.document.readyState === &amp;quot;interactive&amp;quot;)) {&lt;br /&gt;
                C = setTimeout(R, 100);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            N.onload = N.onerror = q, N.mozAnon === undefined ? N.onprogress = I : N.onreadystatechange = I, T = !1, C = setTimeout(R, w), k = 0, L = h, A.length = 0, M = &amp;quot;&amp;quot;, O = E, _.length = 0, D = !1, N.open(&amp;quot;GET&amp;quot;, t + ((t.indexOf(&amp;quot;?&amp;quot;, 0) === -1 ? &amp;quot;?&amp;quot; : &amp;quot;&amp;amp;&amp;quot;) + &amp;quot;lastEventId=&amp;quot; + encodeURIComponent(E) + &amp;quot;&amp;amp;r=&amp;quot; + String(Math.random() + 1).slice(2)), !0), N.withCredentials = o, N.responseType = &amp;quot;text&amp;quot;, f &amp;amp;&amp;amp; N.setRequestHeader(&amp;quot;Accept&amp;quot;, &amp;quot;text/event-stream&amp;quot;), N.send(null)&lt;br /&gt;
        }&lt;br /&gt;
        t = String(t);&lt;br /&gt;
        var o = Boolean(a &amp;amp;&amp;amp; r &amp;amp;&amp;amp; r.withCredentials),&lt;br /&gt;
            u = g(r ? r.retry : NaN, 1e3),&lt;br /&gt;
            b = g(r ? r.retryLimit : NaN, 3e5),&lt;br /&gt;
            w = g(r ? r.heartbeatTimeout : NaN, 45e3),&lt;br /&gt;
            E = r &amp;amp;&amp;amp; r.lastEventId &amp;amp;&amp;amp; String(r.lastEventId) || &amp;quot;&amp;quot;,&lt;br /&gt;
            S = this,&lt;br /&gt;
            x = u,&lt;br /&gt;
            T = !1,&lt;br /&gt;
            N = new l,&lt;br /&gt;
            C = 0,&lt;br /&gt;
            k = 0,&lt;br /&gt;
            L = c,&lt;br /&gt;
            A = [],&lt;br /&gt;
            O = &amp;quot;&amp;quot;,&lt;br /&gt;
            M = &amp;quot;&amp;quot;,&lt;br /&gt;
            _ = [],&lt;br /&gt;
            D = !1,&lt;br /&gt;
            P = 0,&lt;br /&gt;
            H = !1;&lt;br /&gt;
        r = null, n.call(this), this.close = B, this.url = t, this.readyState = h, this.withCredentials = o, R()&lt;br /&gt;
    }&lt;br /&gt;
    function w() {&lt;br /&gt;
        this.CONNECTING = h, this.OPEN = p, this.CLOSED = d&lt;br /&gt;
    }&lt;br /&gt;
    t.prototype = {&lt;br /&gt;
        get: function (e) {&lt;br /&gt;
            return this.data[e + &amp;quot;~&amp;quot;]&lt;br /&gt;
        },&lt;br /&gt;
        set: function (e, t) {&lt;br /&gt;
            this.data[e + &amp;quot;~&amp;quot;] = t&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;delete&amp;quot;: function (e) {&lt;br /&gt;
            delete this.data[e + &amp;quot;~&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }, n.prototype = {&lt;br /&gt;
        dispatchEvent: function (e) {&lt;br /&gt;
            var t = String(e.type),&lt;br /&gt;
                n = this.listeners,&lt;br /&gt;
                i = n.get(t);&lt;br /&gt;
            if (!i) return;&lt;br /&gt;
            var s = i.length,&lt;br /&gt;
                o = -1;&lt;br /&gt;
            while (++o &amp;lt; s) {&lt;br /&gt;
                var u = i[o];&lt;br /&gt;
                try {&lt;br /&gt;
                    u.call(this, e)&lt;br /&gt;
                } catch (a) {&lt;br /&gt;
                    r(a)&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        addEventListener: function (e, t) {&lt;br /&gt;
            e = String(e);&lt;br /&gt;
            var n = this.listeners,&lt;br /&gt;
                r = n.get(e);&lt;br /&gt;
            r || n.set(e, r = []);&lt;br /&gt;
            var i = r.length;&lt;br /&gt;
            while (--i &amp;gt;= 0) if (r[i] === t) return;&lt;br /&gt;
            r.push(t)&lt;br /&gt;
        },&lt;br /&gt;
        removeEventListener: function (e, t) {&lt;br /&gt;
            e = String(e);&lt;br /&gt;
            var n = this.listeners,&lt;br /&gt;
                r = n.get(e);&lt;br /&gt;
            if (!r) return;&lt;br /&gt;
            var i = r.length,&lt;br /&gt;
                s = [],&lt;br /&gt;
                o = -1;&lt;br /&gt;
            while (++o &amp;lt; i) r[o] !== t &amp;amp;&amp;amp; s.push(r[o]);&lt;br /&gt;
            s.length === 0 ? n[&amp;quot;delete&amp;quot;](e) : n.set(e, s)&lt;br /&gt;
        }&lt;br /&gt;
    }, s.prototype = i.prototype;&lt;br /&gt;
    var o = e.XMLHttpRequest,&lt;br /&gt;
        u = e.XDomainRequest,&lt;br /&gt;
        a = Boolean(o &amp;amp;&amp;amp; (new o).withCredentials !== undefined),&lt;br /&gt;
        f = a,&lt;br /&gt;
        l = a ? o : u,&lt;br /&gt;
        c = -1,&lt;br /&gt;
        h = 0,&lt;br /&gt;
        p = 1,&lt;br /&gt;
        d = 2,&lt;br /&gt;
        v = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i,&lt;br /&gt;
        m = /AppleWebKit\/5([0-2][0-9]|3[0-4])[^\d]/.test(navigator.userAgent);&lt;br /&gt;
    w.prototype = n.prototype, b.prototype = new w, w.call(b), l &amp;amp;&amp;amp; (e.EventSource = b)&lt;br /&gt;
})(this),&lt;br /&gt;
function () {&lt;br /&gt;
    function e(e) {&lt;br /&gt;
        (new Image).src = &amp;quot;http://xkcd.com/events/&amp;quot; + e&lt;br /&gt;
    }&lt;br /&gt;
    function t() {&lt;br /&gt;
        location.hash == &amp;quot;#verbose&amp;quot; &amp;amp;&amp;amp; console.log.apply(console, arguments)&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
        var n = &amp;quot;http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;quot;,&lt;br /&gt;
            r = new EventSource(n);&lt;br /&gt;
        t(&amp;quot;connecting to event source:&amp;quot;, n), r.addEventListener(&amp;quot;open&amp;quot;, function (t) {&lt;br /&gt;
            e(&amp;quot;connect_start&amp;quot;)&lt;br /&gt;
        }, !1), r.addEventListener(&amp;quot;error&amp;quot;, function (t) {&lt;br /&gt;
            e(&amp;quot;connect_error&amp;quot;)&lt;br /&gt;
        }, !1), r.addEventListener(&amp;quot;loadtest&amp;quot;, t, !1), r.addEventListener(&amp;quot;comic/time&amp;quot;, t, !1), r.addEventListener(&amp;quot;comic/time&amp;quot;, function (e) {&lt;br /&gt;
            var n = JSON.parse(e.data),&lt;br /&gt;
                r = document.getElementById(&amp;quot;comic&amp;quot;).getElementsByTagName(&amp;quot;img&amp;quot;)[0],&lt;br /&gt;
                i = Math.round(Math.random() * n.spread);&lt;br /&gt;
            t(&amp;quot;waiting&amp;quot;, i, &amp;quot;seconds before displaying comic&amp;quot;, n.image), setTimeout(function () {&lt;br /&gt;
                r.src = &amp;quot;http://imgs.xkcd.com/comics/time/&amp;quot; + n.image&lt;br /&gt;
            }, i * 1e3)&lt;br /&gt;
        }, !1)&lt;br /&gt;
    } catch (i) {&lt;br /&gt;
        e(&amp;quot;js_error&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
}();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm no programmer but this looks important to me...&lt;br /&gt;
&lt;br /&gt;
:Doesn't really help. The script basically changes the image when something happens (probably some time passes, although it's possible there is more hidden there). WHAT image then appears is not directed by the script, but by the site. Specifically, the image displayed as first is taken from [http://c0.xkcd.com/redirect/comic/time http://c0.xkcd.com/redirect/comic/time], while the script asks for [http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;amp;r=(somenumber) http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;amp;r=(somenumber)] ... which is, if you get correct &amp;quot;r&amp;quot;, probably some json containing the image url. So, even if you hack the script, you will not get all possible urls. -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 09:17, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: ... actually, given that the script part doesn't seem to do anything just now, it's even possible it's for later (ie, starts producing images when the correct time come). Or maybe there is a bug somewhere in the code :-). -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 09:27, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Thanks for explaining. Why hasn't anyone posted this before? Could &amp;quot;location.hash&amp;quot; possibly have anything to do with the method used to generate the image hash key? Also, why is this code so difficult to follow (Obfuscation?)? So many questions... Sorry if this is just a huge waste of ''Time''.&lt;br /&gt;
&lt;br /&gt;
:::: &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; is the URI of the page. &amp;lt;code&amp;gt;location.hash&amp;lt;/code&amp;gt; is the part of the uri after the ''#'' character. If you go to [https://xkcd.com/1190/#verbose https://xkcd.com/1190/#verbose], you'll see some debugging output in your browser's debugging console (Firefox: Web Console or Firebug, Chrome: Development Tools). But nothing to decode the algorithm... :-( --[[Special:Contributions/83.243.48.2|83.243.48.2]] 10:01, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::: Well, I don't know what's doing it, but there's definitely some script (probably this script) that's refreshing the image automatically.  I left the comic open for an hour or so and noticed the image had changed. I refreshed with #verbose in Chrome right before the 30 minute mark and got the following in the console.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
connecting to event source: http://c0.xkcd.com/stream/comic/time?method=EventSource time07.min.js:1&lt;br /&gt;
s {type: &amp;quot;comic/time&amp;quot;, data: &amp;quot;{&amp;quot;spread&amp;quot;:5,&amp;quot;image&amp;quot;:&amp;quot;832a7f13ca0fadc46e93475bb617d78211e32c81c3af0e289a51f8f149707759.png&amp;quot;}&amp;quot;, lastEventId: &amp;quot;e2992bf0-9557-11e2-8001-1c6f659cb250&amp;quot;} time07.min.js:1&lt;br /&gt;
waiting 0 seconds before displaying comic 832a7f13ca0fadc46e93475bb617d78211e32c81c3af0e289a51f8f149707759.png time07.min.js:1&lt;br /&gt;
Resource interpreted as Image but transferred with MIME type application/octet-stream: &amp;quot;http://xkcd.com/events/connect_start&amp;quot;. time07.min.js:1&lt;br /&gt;
s {type: &amp;quot;comic/time&amp;quot;, data: &amp;quot;{&amp;quot;spread&amp;quot;:5,&amp;quot;image&amp;quot;:&amp;quot;847265673986f085460bf1a95b96f7171bcd9a4f1f0a598b2188307d03bcfaa3.png&amp;quot;}&amp;quot;, lastEventId: &amp;quot;79580fe8-9558-11e2-8001-1c6f659cb250&amp;quot;} time07.min.js:1&lt;br /&gt;
waiting 4 seconds before displaying comic 847265673986f085460bf1a95b96f7171bcd9a4f1f0a598b2188307d03bcfaa3.png time07.min.js:1&lt;br /&gt;
connection error i {type: &amp;quot;error&amp;quot;} time07.min.js:1&lt;br /&gt;
Resource interpreted as Image but transferred with MIME type application/octet-stream: &amp;quot;http://xkcd.com/events/connect_error&amp;quot;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::: The script seems to poll the server every minute or two. It's different from before, where the image server itself redirected to the correct image. The auto refresh was probably always intended, but not quite ready when the comic went live. It may have turned out to be necessary too, so the image server doesn't have to do all the work. [[Special:Contributions/129.21.119.153|129.21.119.153]] 14:45, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Before obfuscation... ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(function (global) {&lt;br /&gt;
    &amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function Map() {&lt;br /&gt;
        this.data = {}&lt;br /&gt;
    }&lt;br /&gt;
    function EventTarget() {&lt;br /&gt;
        this.listeners = new Map&lt;br /&gt;
    }&lt;br /&gt;
    function throwError(e) {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            throw e&lt;br /&gt;
        }, 0)&lt;br /&gt;
    }&lt;br /&gt;
    function Event(type) {&lt;br /&gt;
        this.type = type&lt;br /&gt;
    }&lt;br /&gt;
    function MessageEvent(type, options) {&lt;br /&gt;
        Event.call(this, type), this.data = options.data, this.lastEventId = options.lastEventId&lt;br /&gt;
    }&lt;br /&gt;
    function getDuration(value, def) {&lt;br /&gt;
        var n = Number(value);&lt;br /&gt;
        return (n &amp;lt; 1 ? 1 : n &amp;gt; 18e6 ? 18e6 : n) || def&lt;br /&gt;
    }&lt;br /&gt;
    function fire(that, property, event) {&lt;br /&gt;
        try {&lt;br /&gt;
            typeof that[property] == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; that[property](event)&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            throwError(e)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    function EventSource(url, options) {&lt;br /&gt;
        function close() {&lt;br /&gt;
            currentState = CLOSED, xhr !== null &amp;amp;&amp;amp; (xhr.abort(), xhr = null), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = 0), that.readyState = CLOSED&lt;br /&gt;
        }&lt;br /&gt;
        function onProgress(isLoadEnd) {&lt;br /&gt;
            var responseText = currentState === OPEN || currentState === CONNECTING ? xhr.responseText || &amp;quot;&amp;quot; : &amp;quot;&amp;quot;,&lt;br /&gt;
                event = null;&lt;br /&gt;
            if (currentState === CONNECTING) {&lt;br /&gt;
                var contentType = isXHR ? responseText !== &amp;quot;&amp;quot; ? xhr.getResponseHeader(&amp;quot;Content-Type&amp;quot;) : &amp;quot;&amp;quot; : xhr.contentType;&lt;br /&gt;
                if (contentType &amp;amp;&amp;amp; contentTypeRegExp.test(contentType)) {&lt;br /&gt;
                    currentState = OPEN, wasActivity = !0, retry = initialRetry, that.readyState = OPEN, event = new Event(&amp;quot;open&amp;quot;), that.dispatchEvent(event), fire(that, &amp;quot;onopen&amp;quot;, event);&lt;br /&gt;
                    if (currentState === CLOSED) return&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (currentState === OPEN) {&lt;br /&gt;
                responseText.length &amp;gt; charOffset &amp;amp;&amp;amp; (wasAct = !0, wasActivity = !0);&lt;br /&gt;
                var i = 0,&lt;br /&gt;
                    i1 = responseText.indexOf(&amp;quot;\r&amp;quot;, charOffset),&lt;br /&gt;
                    i2 = responseText.indexOf(&amp;quot;\n&amp;quot;, charOffset);&lt;br /&gt;
                while (i1 !== -1 || i2 !== -1) {&lt;br /&gt;
                    i1 === -1 || i2 !== -1 &amp;amp;&amp;amp; i2 &amp;lt; i1 ? (i = i2, i2 = responseText.indexOf(&amp;quot;\n&amp;quot;, i + 1)) : (i = i1, i1 = responseText.indexOf(&amp;quot;\r&amp;quot;, i + 1));&lt;br /&gt;
                    var line = responseText.slice(charOffset, i),&lt;br /&gt;
                        oldWasCR = wasCR;&lt;br /&gt;
                    wasCR = responseText.slice(i, i + 1) === &amp;quot;\r&amp;quot;, charOffset = i + 1;&lt;br /&gt;
                    if (!oldWasCR || line.length !== 0 || wasCR) {&lt;br /&gt;
                        responseBuffer.push(line);&lt;br /&gt;
                        var field = responseBuffer.join(&amp;quot;&amp;quot;);&lt;br /&gt;
                        responseBuffer.length = 0;&lt;br /&gt;
                        if (field !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                            var value = &amp;quot;&amp;quot;,&lt;br /&gt;
                                j = field.indexOf(&amp;quot;:&amp;quot;, 0);&lt;br /&gt;
                            j !== -1 &amp;amp;&amp;amp; (value = field.slice(j + (field.slice(j + 1, j + 2) === &amp;quot; &amp;quot; ? 2 : 1)), field = field.slice(0, j)), field === &amp;quot;data&amp;quot; ? dataBuffer.push(value) : field === &amp;quot;id&amp;quot; ? lastEventIdBuffer = value : field === &amp;quot;event&amp;quot; ? eventTypeBuffer = value : field === &amp;quot;retry&amp;quot; ? (initialRetry = getDuration(value, initialRetry), retry = initialRetry, retryLimit &amp;lt; initialRetry &amp;amp;&amp;amp; (retryLimit = initialRetry)) : field === &amp;quot;retryLimit&amp;quot; ? retryLimit = getDuration(value, retryLimit) : field === &amp;quot;heartbeatTimeout&amp;quot; &amp;amp;&amp;amp; (heartbeatTimeout = getDuration(value, heartbeatTimeout), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = setTimeout(onTimeout, heartbeatTimeout)))&lt;br /&gt;
                        } else {&lt;br /&gt;
                            if (dataBuffer.length !== 0) {&lt;br /&gt;
                                lastEventId = lastEventIdBuffer;&lt;br /&gt;
                                var type = eventTypeBuffer || &amp;quot;message&amp;quot;;&lt;br /&gt;
                                event = new MessageEvent(type, {&lt;br /&gt;
                                    data: dataBuffer.join(&amp;quot;\n&amp;quot;),&lt;br /&gt;
                                    lastEventId: lastEventIdBuffer&lt;br /&gt;
                                }), that.dispatchEvent(event), type === &amp;quot;message&amp;quot; &amp;amp;&amp;amp; fire(that, &amp;quot;onmessage&amp;quot;, event);&lt;br /&gt;
                                if (currentState === CLOSED) return&lt;br /&gt;
                            }&lt;br /&gt;
                            dataBuffer.length = 0, eventTypeBuffer = &amp;quot;&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                charOffset !== responseText.length &amp;amp;&amp;amp; (responseBuffer.push(responseText.slice(charOffset)), charOffset = responseText.length)&lt;br /&gt;
            }&lt;br /&gt;
            wasAct &amp;amp;&amp;amp; progressTimeout === 0 &amp;amp;&amp;amp; (wasAct = !1, progressTimeout = setTimeout(p, 80)), currentState !== OPEN &amp;amp;&amp;amp; currentState !== CONNECTING || !(isLoadEnd || charOffset &amp;gt; 1048576 || timeout === 0 &amp;amp;&amp;amp; !wasActivity) ? timeout === 0 &amp;amp;&amp;amp; (wasActivity = !1, timeout = setTimeout(onTimeout, heartbeatTimeout)) : (currentState = WAITING, xhr.abort(), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = 0), retry &amp;gt; retryLimit &amp;amp;&amp;amp; (retry = retryLimit), timeout = setTimeout(onTimeout, retry), retry = retry * 2 + 1, that.readyState = CONNECTING, event = new Event(&amp;quot;error&amp;quot;), that.dispatchEvent(event), fire(that, &amp;quot;onerror&amp;quot;, event))&lt;br /&gt;
        }&lt;br /&gt;
        function p() {&lt;br /&gt;
            progressTimeout = 0, onProgress(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function onProgress2() {&lt;br /&gt;
            onProgress(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function onLoadEnd() {&lt;br /&gt;
            onProgress(!0)&lt;br /&gt;
        }&lt;br /&gt;
        function onTimeout() {&lt;br /&gt;
            timeout = 0;&lt;br /&gt;
            if (currentState !== WAITING) {&lt;br /&gt;
                onProgress(!1);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (navigator.onLine === !1) {&lt;br /&gt;
                timeout = setTimeout(onTimeout, 500);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (webkitBefore535 &amp;amp;&amp;amp; global.document &amp;amp;&amp;amp; (global.document.readyState === &amp;quot;loading&amp;quot; || global.document.readyState === &amp;quot;interactive&amp;quot;)) {&lt;br /&gt;
                timeout = setTimeout(onTimeout, 100);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            xhr.onload = xhr.onerror = onLoadEnd, xhr.mozAnon === undefined ? xhr.onprogress = onProgress2 : xhr.onreadystatechange = onProgress2, wasActivity = !1, timeout = setTimeout(onTimeout, heartbeatTimeout), charOffset = 0, currentState = CONNECTING, dataBuffer.length = 0, eventTypeBuffer = &amp;quot;&amp;quot;, lastEventIdBuffer = lastEventId, responseBuffer.length = 0, wasCR = !1, xhr.open(&amp;quot;GET&amp;quot;, url + ((url.indexOf(&amp;quot;?&amp;quot;, 0) === -1 ? &amp;quot;?&amp;quot; : &amp;quot;&amp;amp;&amp;quot;) + &amp;quot;lastEventId=&amp;quot; + encodeURIComponent(lastEventId) + &amp;quot;&amp;amp;r=&amp;quot; + String(Math.random() + 1).slice(2)), !0), xhr.withCredentials = withCredentials, xhr.responseType = &amp;quot;text&amp;quot;, isXHR &amp;amp;&amp;amp; xhr.setRequestHeader(&amp;quot;Accept&amp;quot;, &amp;quot;text/event-stream&amp;quot;), xhr.send(null)&lt;br /&gt;
        }&lt;br /&gt;
        url = String(url);&lt;br /&gt;
        var withCredentials = Boolean(xhr2 &amp;amp;&amp;amp; options &amp;amp;&amp;amp; options.withCredentials),&lt;br /&gt;
            initialRetry = getDuration(options ? options.retry : NaN, 1e3),&lt;br /&gt;
            retryLimit = getDuration(options ? options.retryLimit : NaN, 3e5),&lt;br /&gt;
            heartbeatTimeout = getDuration(options ? options.heartbeatTimeout : NaN, 45e3),&lt;br /&gt;
            lastEventId = options &amp;amp;&amp;amp; options.lastEventId &amp;amp;&amp;amp; String(options.lastEventId) || &amp;quot;&amp;quot;,&lt;br /&gt;
            that = this,&lt;br /&gt;
            retry = initialRetry,&lt;br /&gt;
            wasActivity = !1,&lt;br /&gt;
            xhr = new Transport,&lt;br /&gt;
            timeout = 0,&lt;br /&gt;
            charOffset = 0,&lt;br /&gt;
            currentState = WAITING,&lt;br /&gt;
            dataBuffer = [],&lt;br /&gt;
            lastEventIdBuffer = &amp;quot;&amp;quot;,&lt;br /&gt;
            eventTypeBuffer = &amp;quot;&amp;quot;,&lt;br /&gt;
            responseBuffer = [],&lt;br /&gt;
            wasCR = !1,&lt;br /&gt;
            progressTimeout = 0,&lt;br /&gt;
            wasAct = !1;&lt;br /&gt;
        options = null, EventTarget.call(this), this.close = close, this.url = url, this.readyState = CONNECTING, this.withCredentials = withCredentials, onTimeout()&lt;br /&gt;
    }&lt;br /&gt;
    function F() {&lt;br /&gt;
        this.CONNECTING = CONNECTING, this.OPEN = OPEN, this.CLOSED = CLOSED&lt;br /&gt;
    }&lt;br /&gt;
    Map.prototype = {&lt;br /&gt;
        get: function (key) {&lt;br /&gt;
            return this.data[key + &amp;quot;~&amp;quot;]&lt;br /&gt;
        },&lt;br /&gt;
        set: function (key, value) {&lt;br /&gt;
            this.data[key + &amp;quot;~&amp;quot;] = value&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;delete&amp;quot;: function (key) {&lt;br /&gt;
            delete this.data[key + &amp;quot;~&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }, EventTarget.prototype = {&lt;br /&gt;
        dispatchEvent: function (event) {&lt;br /&gt;
            var type = String(event.type),&lt;br /&gt;
                listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            if (!typeListeners) return;&lt;br /&gt;
            var length = typeListeners.length,&lt;br /&gt;
                i = -1;&lt;br /&gt;
            while (++i &amp;lt; length) {&lt;br /&gt;
                var listener = typeListeners[i];&lt;br /&gt;
                try {&lt;br /&gt;
                    listener.call(this, event)&lt;br /&gt;
                } catch (e) {&lt;br /&gt;
                    throwError(e)&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        addEventListener: function (type, callback) {&lt;br /&gt;
            type = String(type);&lt;br /&gt;
            var listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            typeListeners || listeners.set(type, typeListeners = []);&lt;br /&gt;
            var i = typeListeners.length;&lt;br /&gt;
            while (--i &amp;gt;= 0) if (typeListeners[i] === callback) return;&lt;br /&gt;
            typeListeners.push(callback)&lt;br /&gt;
        },&lt;br /&gt;
        removeEventListener: function (type, callback) {&lt;br /&gt;
            type = String(type);&lt;br /&gt;
            var listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            if (!typeListeners) return;&lt;br /&gt;
            var length = typeListeners.length,&lt;br /&gt;
                filtered = [],&lt;br /&gt;
                i = -1;&lt;br /&gt;
            while (++i &amp;lt; length) typeListeners[i] !== callback &amp;amp;&amp;amp; filtered.push(typeListeners[i]);&lt;br /&gt;
            filtered.length === 0 ? listeners[&amp;quot;delete&amp;quot;](type) : listeners.set(type, filtered)&lt;br /&gt;
        }&lt;br /&gt;
    }, MessageEvent.prototype = Event.prototype;&lt;br /&gt;
    var XHR = global.XMLHttpRequest,&lt;br /&gt;
        XDR = global.XDomainRequest,&lt;br /&gt;
        xhr2 = Boolean(XHR &amp;amp;&amp;amp; (new XHR).withCredentials !== undefined),&lt;br /&gt;
        isXHR = xhr2,&lt;br /&gt;
        Transport = xhr2 ? XHR : XDR,&lt;br /&gt;
        WAITING = -1,&lt;br /&gt;
        CONNECTING = 0,&lt;br /&gt;
        OPEN = 1,&lt;br /&gt;
        CLOSED = 2,&lt;br /&gt;
        contentTypeRegExp = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i,&lt;br /&gt;
        webkitBefore535 = /AppleWebKit\/5([0-2][0-9]|3[0-4])[^\d]/.test(navigator.userAgent);&lt;br /&gt;
    F.prototype = EventTarget.prototype, EventSource.prototype = new F, F.call(EventSource), Transport &amp;amp;&amp;amp; (global.EventSource = EventSource)&lt;br /&gt;
 })(this),&lt;br /&gt;
function () {&lt;br /&gt;
    function record(name) {&lt;br /&gt;
        (new Image).src = &amp;quot;http://xkcd.com/events/&amp;quot; + name&lt;br /&gt;
    }&lt;br /&gt;
    function log() {&lt;br /&gt;
        location.hash == &amp;quot;#verbose&amp;quot; &amp;amp;&amp;amp; console.log.apply(console, arguments)&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
        var esURL = &amp;quot;http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;quot;,&lt;br /&gt;
            source = new EventSource(esURL);&lt;br /&gt;
        log(&amp;quot;connecting to event source:&amp;quot;, esURL), source.addEventListener(&amp;quot;open&amp;quot;, function (ev) {&lt;br /&gt;
            record(&amp;quot;connect_start&amp;quot;)&lt;br /&gt;
        }, !1), source.addEventListener(&amp;quot;error&amp;quot;, function (ev) {&lt;br /&gt;
            record(&amp;quot;connect_error&amp;quot;)&lt;br /&gt;
        }, !1), source.addEventListener(&amp;quot;loadtest&amp;quot;, log, !1), source.addEventListener(&amp;quot;comic/time&amp;quot;, log, !1), source.addEventListener(&amp;quot;comic/time&amp;quot;, function (ev) {&lt;br /&gt;
            var data = JSON.parse(ev.data),&lt;br /&gt;
                img = document.getElementById(&amp;quot;comic&amp;quot;).getElementsByTagName(&amp;quot;img&amp;quot;)[0],&lt;br /&gt;
                delay = Math.round(Math.random() * data.spread);&lt;br /&gt;
            log(&amp;quot;waiting&amp;quot;, delay, &amp;quot;seconds before displaying comic&amp;quot;, data.image), setTimeout(function () {&lt;br /&gt;
                img.src = &amp;quot;http://imgs.xkcd.com/comics/time/&amp;quot; + data.image&lt;br /&gt;
            }, delay * 1e3)&lt;br /&gt;
        }, !1)&lt;br /&gt;
    } catch (e) {&lt;br /&gt;
        record(&amp;quot;js_error&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
}();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Special:Contributions/79.180.173.88|79.180.173.88]] 09:48, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
http://imgs.xkcd.com/comics/time/426033682a26a0012a6f8e0c47287af91b7991a852d81c77402c937ffbd650c6.png&lt;br /&gt;
&lt;br /&gt;
http://www.explainxkcd.com/wiki/images/1/1e/f46c6571393bee1ee649a7daae41f6328e63482506aef1e22607d22c47dd7027.png --[[User:Johnsmith|Johnsmith]] ([[User talk:Johnsmith|talk]]) 22:51, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Denial of Service ==&lt;br /&gt;
&lt;br /&gt;
Is it just me or or did Randall manage to make all of us perform a Denial of Service on xkcd.com, and explainxkcd.com ? xkcd.com seems much slower, and I keep getting &amp;quot;500 Internal server error&amp;quot; when accessing this site (explainxkcd.com). I guess that's the effect of having everybody hit F5 every few minutes :) [[Special:Contributions/193.239.192.194|193.239.192.194]] 11:57, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== We are a botnet ==&lt;br /&gt;
Earlier today, the server handled all the image redirections. The script you see above went through several mutations (currently at #8), with each mutation it seems that Randall is adding more servers and trying to split the load between them. This is basically how a bot-net works - we all run code written by some evil genius, and he's changing the code as time passes to serve some hidden purpose.&lt;br /&gt;
[[Special:Contributions/79.180.173.88|79.180.173.88]] 15:44, 25 March 2013 (UTC)&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=File:time38.png&amp;diff=31048</id>
		<title>File:time38.png</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=File:time38.png&amp;diff=31048"/>
				<updated>2013-03-25T22:49:39Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=Talk:1175:_Moving_Sidewalks&amp;diff=28418</id>
		<title>Talk:1175: Moving Sidewalks</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=Talk:1175:_Moving_Sidewalks&amp;diff=28418"/>
				<updated>2013-02-19T08:48:25Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm not quite sure what the joke here is supposed to be. Many have tried to develop variable speed walkways, as one can see in [http://worldwide.espacenet.com/searchResults?page=0&amp;amp;compact=false&amp;amp;ST=advanced&amp;amp;locale=en_EP&amp;amp;DB=EPODOC&amp;amp;CPC=B66B23%2f26%2flow patents]. There was even a pair of these that were installed circa Y2K in the Paris subway (Châtelet-Les-Halles, IIRC), which is renowned for its long passageways. It is AFAIK no longer in service, I don't know why. When I saw it an attendant was present to watch over for making sure that users wouln't fall. This contraption is way more complicated than standard rubber-belt conveyors with its meshing steps. --[[Special:Contributions/70.52.115.181|70.52.115.181]] 15:59, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
I know what I'm building this weekend... [[Special:Contributions/207.237.164.241|207.237.164.241]] 06:22, 18 February 2013 (UTC)&lt;br /&gt;
:I just wonder if it is possible to remove these stupid posts and the panel on top of them from my treadmill without breaking it... {{unsigned|89.174.214.74}}&lt;br /&gt;
&lt;br /&gt;
Isn't &amp;quot;of&amp;quot; suppose to be &amp;quot;off&amp;quot; in the title text? {{unsigned|67.161.114.84}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do anybody know examples of such belts.   The ones I recall has all one-speed-only [[User:Spongebog|Spongebog]] ([[User talk:Spongebog|talk]]) 10:43, 18 February 2013 (UTC)&lt;br /&gt;
: At Toronto Airport they have double speed moving sidewalks, that accelerate by stretching the panels. --[[User:Johnsmith|Johnsmith]] ([[User talk:Johnsmith|talk]]) 08:43, 19 February 2013 (UTC) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I was under the impression (from the alt-text), that they would take the belts inward traveling faster until they hi-five. Then, as they sped away, they would change sides and repeat the process. 10:56, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
I don't see why they are positioned as they are.  If they were taking the belts inward, they would take advantage of the momentum imparted by the belts and be going much faster than their stride would normally take them.  The way they are positioned, they would have to be running to just catch up to each other in the middle. [[Special:Contributions/64.121.163.170|64.121.163.170]] 11:06, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This is surely the point. They have to run faster as they get closer. [[Special:Contributions/77.99.26.23|77.99.26.23]] 12:00, 18 February 2013 (UTC)&lt;br /&gt;
:: Has the picture changed? Now it seems as if they where going faster to the middle. --[[User:Johnsmith|Johnsmith]] ([[User talk:Johnsmith|talk]]) 08:48, 19 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
There doesn't appear to be any 'trick' to this one. Like the commenter above, I initially thought they were being taken towards each other by the conveyers. I thought the joke was that they would be accelerated to a ridiculous speed which would make it impossible to high five without obliterating each other, but the alt text didn't indicate anything like this and I looked again and realised I had read way too much into it. It's probably most sensible to interpret the speed multiples as relating to the first belts, not the last one you were on. This makes the difference between the '5x' belts going at 5x the speed of the outer ones, instead of 100x if each was the specified multiple of the last. If this alternative situation were the case, the outer belts would have to be going very slowly (of the order of 0.1m/s) for them to ever be able to high five. [[Special:Contributions/77.99.26.23|77.99.26.23]] 12:00, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The appears reminiscent of Improv Everywhere's prank, &amp;quot;High-Five Escalator&amp;quot; http://improveverywhere.com/2009/02/09/high-five-escalator/ [[User:JamesCurran|JamesCurran]] ([[User talk:JamesCurran|talk]])&lt;br /&gt;
&lt;br /&gt;
I'm sure I would fall over trying to use this one. --[[Special:Contributions/173.49.75.121|173.49.75.121]] 14:09, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Randall updated the comic, explaining that he meant to draw the arrows going the way Cueball and Megan are facing, not opposite. I'd change the wiki, but I don't get it now. :) [[User:Zpletan|Zpletan]] ([[User talk:Zpletan|talk]])&lt;br /&gt;
&lt;br /&gt;
The Comic has been changed: &amp;quot;Oops! I originally put up a version with backward sidewalk arrows. I should know better than to edit and post comics while sleep-deprived. Sorry!&amp;quot;  [[Special:Contributions/86.32.218.17|86.32.218.17]] 14:28, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
I don't think they're going a multiple of the previous belt, but a multiple of base speed. Just my 2 cents :) Also, I think the belts are moving toward each other to get the ultimate &amp;quot;high five&amp;quot; in terms of velocity of the impact. {{unsigned|161.31.32.81}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I don't see why anyone would think the &amp;quot;5x speed&amp;quot; etc would mean 5 times the previous tile.  Seems obvious to me that the first tile is moving at some speed, the second tile is moving twice that base speed, the third moving 3x that base, etc.  So when the pass each other their moving at 10x the base speed.  Assuming the base speed is something reasonable, something near  a typical walking speed, the high five would take place at a speed similar to if they were just sprinting past each other.  Hardly a &amp;quot;ridiculous speed which would make it impossible to high five without obliterating each other.&amp;quot; [[Special:Contributions/67.51.59.66|67.51.59.66]] 16:58, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Does anyone think this may be a reference to &amp;quot;The Caves of Steel&amp;quot; a novel by Isaac Asimov?  As I recall there was a global system of moving belts of various speeds that were used for transportation.&lt;br /&gt;
: That's what I thought of immediately. [[Special:Contributions/128.84.127.95|128.84.127.95]] 19:17, 18 February 2013 (UTC)&lt;br /&gt;
: Or Heinlein's &amp;quot;The Roads Must Roll&amp;quot;. [[Special:Contributions/173.8.183.86|173.8.183.86]] 19:41, 18 February 2013 (UTC)&lt;br /&gt;
:: Also Clarke's ''The City and the Stars'', for the {{w|Big Three}} trifecta. But in those stories, the different-speed belts were arranged in parallel, like lanes of a highway, rather than in series. So you'd accelerate by stepping sideways from belt to belt. &lt;br /&gt;
::[[User:Wwoods|Wwoods]] ([[User talk:Wwoods|talk]]) 20:30, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Seriously, they're playing a game of Robo Rally [[User:schmammel|talk]]&lt;br /&gt;
&lt;br /&gt;
I would love to see this sidewalk placed in a Bison habitat.[[Special:Contributions/94.191.187.81|94.191.187.81]] 05:04, 19 February 2013 (UTC)&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=Talk:1175:_Moving_Sidewalks&amp;diff=28417</id>
		<title>Talk:1175: Moving Sidewalks</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=Talk:1175:_Moving_Sidewalks&amp;diff=28417"/>
				<updated>2013-02-19T08:43:08Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm not quite sure what the joke here is supposed to be. Many have tried to develop variable speed walkways, as one can see in [http://worldwide.espacenet.com/searchResults?page=0&amp;amp;compact=false&amp;amp;ST=advanced&amp;amp;locale=en_EP&amp;amp;DB=EPODOC&amp;amp;CPC=B66B23%2f26%2flow patents]. There was even a pair of these that were installed circa Y2K in the Paris subway (Châtelet-Les-Halles, IIRC), which is renowned for its long passageways. It is AFAIK no longer in service, I don't know why. When I saw it an attendant was present to watch over for making sure that users wouln't fall. This contraption is way more complicated than standard rubber-belt conveyors with its meshing steps. --[[Special:Contributions/70.52.115.181|70.52.115.181]] 15:59, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
I know what I'm building this weekend... [[Special:Contributions/207.237.164.241|207.237.164.241]] 06:22, 18 February 2013 (UTC)&lt;br /&gt;
:I just wonder if it is possible to remove these stupid posts and the panel on top of them from my treadmill without breaking it... {{unsigned|89.174.214.74}}&lt;br /&gt;
&lt;br /&gt;
Isn't &amp;quot;of&amp;quot; suppose to be &amp;quot;off&amp;quot; in the title text? {{unsigned|67.161.114.84}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do anybody know examples of such belts.   The ones I recall has all one-speed-only [[User:Spongebog|Spongebog]] ([[User talk:Spongebog|talk]]) 10:43, 18 February 2013 (UTC)&lt;br /&gt;
: At Toronto Airport they have double speed moving sidewalks, that accelerate by stretching the panels. --[[User:Johnsmith|Johnsmith]] ([[User talk:Johnsmith|talk]]) 08:43, 19 February 2013 (UTC) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I was under the impression (from the alt-text), that they would take the belts inward traveling faster until they hi-five. Then, as they sped away, they would change sides and repeat the process. 10:56, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
I don't see why they are positioned as they are.  If they were taking the belts inward, they would take advantage of the momentum imparted by the belts and be going much faster than their stride would normally take them.  The way they are positioned, they would have to be running to just catch up to each other in the middle. [[Special:Contributions/64.121.163.170|64.121.163.170]] 11:06, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This is surely the point. They have to run faster as they get closer. [[Special:Contributions/77.99.26.23|77.99.26.23]] 12:00, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
There doesn't appear to be any 'trick' to this one. Like the commenter above, I initially thought they were being taken towards each other by the conveyers. I thought the joke was that they would be accelerated to a ridiculous speed which would make it impossible to high five without obliterating each other, but the alt text didn't indicate anything like this and I looked again and realised I had read way too much into it. It's probably most sensible to interpret the speed multiples as relating to the first belts, not the last one you were on. This makes the difference between the '5x' belts going at 5x the speed of the outer ones, instead of 100x if each was the specified multiple of the last. If this alternative situation were the case, the outer belts would have to be going very slowly (of the order of 0.1m/s) for them to ever be able to high five. [[Special:Contributions/77.99.26.23|77.99.26.23]] 12:00, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The appears reminiscent of Improv Everywhere's prank, &amp;quot;High-Five Escalator&amp;quot; http://improveverywhere.com/2009/02/09/high-five-escalator/ [[User:JamesCurran|JamesCurran]] ([[User talk:JamesCurran|talk]])&lt;br /&gt;
&lt;br /&gt;
I'm sure I would fall over trying to use this one. --[[Special:Contributions/173.49.75.121|173.49.75.121]] 14:09, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Randall updated the comic, explaining that he meant to draw the arrows going the way Cueball and Megan are facing, not opposite. I'd change the wiki, but I don't get it now. :) [[User:Zpletan|Zpletan]] ([[User talk:Zpletan|talk]])&lt;br /&gt;
&lt;br /&gt;
The Comic has been changed: &amp;quot;Oops! I originally put up a version with backward sidewalk arrows. I should know better than to edit and post comics while sleep-deprived. Sorry!&amp;quot;  [[Special:Contributions/86.32.218.17|86.32.218.17]] 14:28, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
I don't think they're going a multiple of the previous belt, but a multiple of base speed. Just my 2 cents :) Also, I think the belts are moving toward each other to get the ultimate &amp;quot;high five&amp;quot; in terms of velocity of the impact. {{unsigned|161.31.32.81}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I don't see why anyone would think the &amp;quot;5x speed&amp;quot; etc would mean 5 times the previous tile.  Seems obvious to me that the first tile is moving at some speed, the second tile is moving twice that base speed, the third moving 3x that base, etc.  So when the pass each other their moving at 10x the base speed.  Assuming the base speed is something reasonable, something near  a typical walking speed, the high five would take place at a speed similar to if they were just sprinting past each other.  Hardly a &amp;quot;ridiculous speed which would make it impossible to high five without obliterating each other.&amp;quot; [[Special:Contributions/67.51.59.66|67.51.59.66]] 16:58, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Does anyone think this may be a reference to &amp;quot;The Caves of Steel&amp;quot; a novel by Isaac Asimov?  As I recall there was a global system of moving belts of various speeds that were used for transportation.&lt;br /&gt;
: That's what I thought of immediately. [[Special:Contributions/128.84.127.95|128.84.127.95]] 19:17, 18 February 2013 (UTC)&lt;br /&gt;
: Or Heinlein's &amp;quot;The Roads Must Roll&amp;quot;. [[Special:Contributions/173.8.183.86|173.8.183.86]] 19:41, 18 February 2013 (UTC)&lt;br /&gt;
:: Also Clarke's ''The City and the Stars'', for the {{w|Big Three}} trifecta. But in those stories, the different-speed belts were arranged in parallel, like lanes of a highway, rather than in series. So you'd accelerate by stepping sideways from belt to belt. &lt;br /&gt;
::[[User:Wwoods|Wwoods]] ([[User talk:Wwoods|talk]]) 20:30, 18 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Seriously, they're playing a game of Robo Rally [[User:schmammel|talk]]&lt;br /&gt;
&lt;br /&gt;
I would love to see this sidewalk placed in a Bison habitat.[[Special:Contributions/94.191.187.81|94.191.187.81]] 05:04, 19 February 2013 (UTC)&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=1137:_RTL&amp;diff=18989</id>
		<title>1137: RTL</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=1137:_RTL&amp;diff=18989"/>
				<updated>2012-11-21T14:41:06Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: /* Transcript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{comic&lt;br /&gt;
| number    = 1137&lt;br /&gt;
| date      = November 21, 2011&lt;br /&gt;
| title     = ‮LTR&lt;br /&gt;
| image     = rtl.png&lt;br /&gt;
| imagesize = &lt;br /&gt;
| titletext = Collaborative editing can quickly become a textual rap battle fought with increasingly convoluted invocations of U+202a to U+202e&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Explanation==&lt;br /&gt;
U+202e is a {{w|unicode control characters|unicode control character}} that changes all proceeding text to right-to-left (RTL, as the title references). In the comic, [[Black Hat]] tires of [[Cueball]]'s complaining and inserts a U+202e character in the middle of Cueball's speech, turning his complaints into gibberish - sentences that must be read from right-to-left. U+202c returns text back to its normal direction.&lt;br /&gt;
&lt;br /&gt;
When multiple writers work on the same text, arguments can often arise with some writers resorting to vandalizing the works of other writers. The title text takes this up a level, suggesting the use of U+202e and other direction control characters in editor wars to disrupt other people's work.&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
:[Cueball and Black Hat. Cueball is standing. Black Hat is sitting down and using a laptop.]&lt;br /&gt;
:Cueball: And that's not even the worst part! The ''worst'' part is that— &lt;br /&gt;
:Black Hat: U+202e&lt;br /&gt;
:Cueball: ...neve t'ndid yehT— (Flipped translation = &amp;quot;— They didn't even...&amp;quot;)&lt;br /&gt;
:Cueball: ?lleh eth tahW... (Flipped translation = &amp;quot;...What hte hell??&amp;quot;)&lt;br /&gt;
:Cueball: ...uoy did woH (Flipped translation = &amp;quot;How did you...&amp;quot;)&lt;br /&gt;
:Cueball: .elohssA... (Flipped translation = &amp;quot;...Asshole.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Trivia==&lt;br /&gt;
* The title of the comic on the xkcd website actually has a U+202e character preceding it; when copied and pasted, the title of the comic actually reads &amp;quot;LTR&amp;quot;. The page title is &amp;quot;xkcd: [U+202e]LTR&amp;quot;, which causes Firefox to use &amp;quot;xkcd: xoferiF allizoM - RTL&amp;quot; as the window title. This also occurs in Chromium and Opera.&lt;br /&gt;
* There is a typo in the reverse text. &amp;quot;eth&amp;quot; corresponds to &amp;quot;hte&amp;quot; in stead of &amp;quot;the&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{comic discussion}} &lt;br /&gt;
[[Category:Comics featuring Cueball]]&lt;br /&gt;
[[Category:Comics featuring Black Hat]]&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=1102&amp;diff=11089</id>
		<title>1102</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=1102&amp;diff=11089"/>
				<updated>2012-08-31T08:53:30Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: Redirected page to 1102: Fastest-Growing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[1102: Fastest-Growing]]&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=1102:_Fastest-Growing&amp;diff=11088</id>
		<title>1102: Fastest-Growing</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=1102:_Fastest-Growing&amp;diff=11088"/>
				<updated>2012-08-31T08:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: Created page with &amp;quot;{{comic | number    = 1102 | date      = August 31, 2012 | title     = Fastest-Growing | image     = fastest_growing.png | imagesize =  | titletext = I lead a small but extrao...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{comic&lt;br /&gt;
| number    = 1102&lt;br /&gt;
| date      = August 31, 2012&lt;br /&gt;
| title     = Fastest-Growing&lt;br /&gt;
| image     = fastest_growing.png&lt;br /&gt;
| imagesize = &lt;br /&gt;
| titletext = I lead a small but extraordinarily persuasive religion whose only members are door-to-door proselytizers from other faiths.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
&lt;br /&gt;
guy: You should check us out. We're the fastest-growing religion in the country.&lt;br /&gt;
&lt;br /&gt;
black hat: &amp;quot;Fastest-growing&amp;quot; is such a dubious claim.&lt;br /&gt;
&lt;br /&gt;
guy: It's true! We grew by 85% over the past year.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
black hat: Hey, Rob - Wanna join my religion?&lt;br /&gt;
&lt;br /&gt;
(from off): Sure, whatever.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
black hat: Well, looks like my religion grew by 100% this year.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
guy: We habe 38,000 members!&lt;br /&gt;
&lt;br /&gt;
black hat: Hope, they're all OK with second place.&lt;br /&gt;
&lt;br /&gt;
{{comic discussion}} &lt;br /&gt;
&lt;br /&gt;
[[Category:Comics featuring Black Hat]]&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=12:_Poisson&amp;diff=10593</id>
		<title>12: Poisson</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=12:_Poisson&amp;diff=10593"/>
				<updated>2012-08-25T11:42:17Z</updated>
		
		<summary type="html">&lt;p&gt;Johnsmith: /* Explanation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{comic&lt;br /&gt;
| number    = 12&lt;br /&gt;
| date      = &amp;lt;!--If you insert a date, please delete the undated category below--&amp;gt;&lt;br /&gt;
| title     = Poisson&lt;br /&gt;
| image     = Poisson.jpg&lt;br /&gt;
| titletext = Poisson distributions have no value over negative numbers&lt;br /&gt;
| imagesize =&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Explanation==&lt;br /&gt;
In this comic, [[Cueball]] expresses himself as a {{w|Poisson distribution}}.&lt;br /&gt;
&lt;br /&gt;
Per Wikipedia, in mathematics, a {{w|Poisson distribution}} is a distribution that shows the probability of a given number of events occurring in a fixed interval of time or space. The horizontal axis typically represents the “number of events” while the vertical axis is a decimal representing the probability (i.e. 0.5 for 50% probability) a given number of events will occur in that fixed interval of time or space. It is commonly represented by a bar graph, or a point graph (sometimes with a line connection to show a trend, even though there is no actual value for non-integers).&lt;br /&gt;
&lt;br /&gt;
A simple example is the number of heads coming up on a fair coin flip. The distribution for one coin flip should be 0.5 at 0 heads and 0.5 at 1 heads; for 2 coin flips, the distribution would be 0.25 at 0 heads, 0.5 at 1 heads and 0.25 at 2 heads; Etc. Multiple graphs like this are sometimes overlaid on one graph with a legend to distinguish the points (one coin flip in red, two coin flips in blue, etc).&lt;br /&gt;
&lt;br /&gt;
What's important to note for this comic is that this distribution only has data points on non-negative integers and is not continuous through decimal numbers or (as the image text tells us) negative numbers because events can’t occur 0.3 of a time, or -2 times.&lt;br /&gt;
&lt;br /&gt;
After implying that the concept of a person being a mathematical distribution is irrational, [[Black Hat]] suggests he is “less than zero”. Since the Poisson Distribution doesn’t exist or has no value at negative values, Cueball either leaves or disappears magically.&lt;br /&gt;
&lt;br /&gt;
Hence, the punchline is the same as the image text: Cueball doesn't exist to Black Hat anymore, because he has a value less than zero.&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
* This is the first appearance of [[Black Hat]] in [[xkcd]].&lt;br /&gt;
&lt;br /&gt;
* [[Randall Munroe|Randall]] was still experimenting with character design, as [[Cueball]] has a face in the first two frames.&lt;br /&gt;
&lt;br /&gt;
{{Comic discussion}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Comics|0012]]&lt;br /&gt;
[[Category:Comics featuring Cueball]]&lt;br /&gt;
[[Category:Comics featuring Black Hat]]&lt;br /&gt;
[[Category:Undated comics]]&lt;/div&gt;</summary>
		<author><name>Johnsmith</name></author>	</entry>

	</feed>