<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://conwaylife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GUYTU6J</id>
	<title>LifeWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://conwaylife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GUYTU6J"/>
	<link rel="alternate" type="text/html" href="https://conwaylife.com/wiki/Special:Contributions/GUYTU6J"/>
	<updated>2026-11-06T17:04:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=User:GUYTU6J/XOR-extendable_spaceships&amp;diff=144580</id>
		<title>User:GUYTU6J/XOR-extendable spaceships</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=User:GUYTU6J/XOR-extendable_spaceships&amp;diff=144580"/>
		<updated>2024-01-16T03:48:36Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: Minor correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An &#039;&#039;&#039;XOR-extendable spaceship&#039;&#039;&#039; is a [[spaceship]] driven by copies of linear [[replicator]]s that reproduce according to the one-dimensional XOR-based parity rule Wolfram Rule 90. This class of spaceships was first constructed in [[HighLife]], where the first example moves at c/69 with over 84 billion replicator units and was named &#039;&#039;&#039;Basilisk&#039;&#039;&#039;.&amp;lt;ref&amp;gt;{{cite web|url=https://cp4space.hatsya.com/2013/01/06/bombers-and-basilisks/|title=Bombers and Basilisks|work=Complex Projective 4-Space|author=Adam P. Goucher|date=January 6, 2013}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://pentadecathlon.com/lifeNews/2013/01/new_highlife_velocities.html|title=New HighLife velocities|work=Game of Life News|author=Adam P. Goucher|date=January 19, 2013}}&amp;lt;/ref&amp;gt; Similar spaceships at different speeds have since been found in various rules.&lt;br /&gt;
&lt;br /&gt;
==Database==&lt;br /&gt;
Click on the desired period, then click &amp;quot;edit&amp;quot; or &amp;quot;view source&amp;quot; before copying the diagram.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin-left:auto;margin-right:auto;text-align:center;&amp;quot;&lt;br /&gt;
| [[/1c3|1c/3]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c5|1c/5]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c7|1c/7]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c9|1c/9]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c11|1c/11]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c13|1c/13]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c15|1c/15]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c17|1c/17]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c19|1c/19]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/1c23|1c/23]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c4|2c/4]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c6|2c/6]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c8|2c/8]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c10|2c/10]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c12|2c/12]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c14|2c/14]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c16|2c/16]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c18|2c/18]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c20|2c/20]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c22|2c/22]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c26|2c/26]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c30|2c/30]]&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:rgb(192,192,192)&amp;quot; |&lt;br /&gt;
| [[/2c34|2c/34]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
&lt;br /&gt;
The following example uses [https://conwaylife.com/forums/viewtopic.php?f=11&amp;amp;t=4755 Harvest Moon (B3-ckr5y/S2-i3-aek4ci5c)].&lt;br /&gt;
&lt;br /&gt;
===Replicator, terminals and speed===&lt;br /&gt;
&lt;br /&gt;
The replicator operates at (4,0)c/8 orthogonal, each unit covering 8 cells axially. &lt;br /&gt;
&lt;br /&gt;
Front end (leading end) of the spaceship shows a 4×4 checkerboard still life when inactive. A suitable impact pushes it by 8 cells, and the key phase of reaction is&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 21, y = 11, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
3bo7bo$2bobo5bo2bo$7ob2obob5o$o2bo2bobo2b4o3bo$7ob3o6bobo$14bo3bobo$7o&lt;br /&gt;
b3o6bobo$o2bo2bobo2b4o3bo$7ob2obob5o$2bobo5bo2bo$3bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Back end (trailing end) of the spaceship may use gliders, but it has not been designed yet.&lt;br /&gt;
&lt;br /&gt;
Depending on the period of replicator, and supposing that front end is displaced only once every cycle, the spaceship should have a speed of (8,0)c/16n. Here n=8 and the speed is chosen as (8,0)c/128.&lt;br /&gt;
&lt;br /&gt;
===Deduction of replicator sequence===&lt;br /&gt;
====Seed====&lt;br /&gt;
&lt;br /&gt;
In the sample impact, the same pattern reappears 48 ticks later. This time interval needs to be adjusted to 128 ticks to match the selected speed. Appending a replicator unit and it becomes 64 ticks.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 29, y = 11, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
3bo7bo7bo$2bobo5bobo5bo2bo$7ob7ob2obob5o$o2bo2bobo2bo2bobo2b4o3bo$7ob&lt;br /&gt;
7ob3o6bobo$22bo3bobo$7ob7ob3o6bobo$o2bo2bobo2bo2bobo2b4o3bo$7ob7ob2obo&lt;br /&gt;
b5o$2bobo5bobo5bo2bo$3bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Therefore, one additional unit corresponds to 16 ticks. To obtain 128 ticks, another 4 units are necessary, giving the so-called seed below.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 61, y = 11, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
3bo7bo7bo7bo7bo7bo7bo$2bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7ob7ob7o&lt;br /&gt;
b7ob7ob2obob5o$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3b&lt;br /&gt;
o$7ob7ob7ob7ob7ob7ob3o6bobo$54bo3bobo$7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2b&lt;br /&gt;
obo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7ob7ob&lt;br /&gt;
2obob5o$2bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$3bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Body====&lt;br /&gt;
&lt;br /&gt;
Denote a replicator unit as 1 and a same-size vacancy as 0. The seed ...0111111 changes to ...1111111 after 128 ticks, deviating from the 7th unit.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 133, y = 27, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
75bo7bo7bo7bo7bo7bo7bo$74bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$72b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob2obob5o$72bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2b4o3bo$72b7ob7ob7ob7ob7ob7ob3o6bobo$126bo3bobo$72b7ob7ob7ob7ob7ob7o&lt;br /&gt;
b3o6bobo$72bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$&lt;br /&gt;
72b7ob7ob7ob7ob7ob7ob2obob5o$74bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$75b&lt;br /&gt;
o7bo7bo7bo7bo7bo7bo6$3bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo$&lt;br /&gt;
2bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bo2bo$7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob2obob5o$o2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7o&lt;br /&gt;
b7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob3o6bobo$126bo3bobo$7ob7ob7ob7ob7ob7ob7o&lt;br /&gt;
b7ob7ob7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob&lt;br /&gt;
2obob5o$2bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5b&lt;br /&gt;
obo5bobo5bobo5bo2bo$3bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
More units are also wrong after the first deviating unit. For brevity, these remaining ones will be chopped out.&lt;br /&gt;
&lt;br /&gt;
If the seed is experimentally succeeded by 10, it will evolve from ...10111111 to ...11111110 after 128 ticks.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 77, y = 27, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
3bo15bo7bo7bo7bo7bo7bo7bo$2bobo13bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$&lt;br /&gt;
7o9b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bobo2b4o3bo$7o9b7ob7ob7ob7ob7ob7ob3o6bobo$70bo3bobo$7o9b&lt;br /&gt;
7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2b4o3bo$7o9b7ob7ob7ob7ob7ob7ob2obob5o$2bobo13bobo5bobo5b&lt;br /&gt;
obo5bobo5bobo5bobo5bo2bo$3bo15bo7bo7bo7bo7bo7bo7bo6$3bo7bo7bo7bo7bo7bo&lt;br /&gt;
7bo15bo$2bobo5bobo5bobo5bobo5bobo5bobo5bobo13bo2bo$7ob7ob7ob7ob7ob7ob&lt;br /&gt;
7o9b2obob5o$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo9bo&lt;br /&gt;
2b4o3bo$7ob7ob7ob7ob7ob7ob7o9b3o6bobo$70bo3bobo$7ob7ob7ob7ob7ob7ob7o9b&lt;br /&gt;
3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo9bo2b4o&lt;br /&gt;
3bo$7ob7ob7ob7ob7ob7ob7o9b2obob5o$2bobo5bobo5bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
13bo2bo$3bo7bo7bo7bo7bo7bo7bo15bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
As XOR is a linear operation, it can be concluded that modifying kth unit leads to a modified (k-7)th unit. To keep the seed up to 6th unit, the (7~13)th units are determined to be 0; to modify the 7th deviating unit from the seed, the 14th unit should be 1. The resulting ...10000000111111 evolves to ...11111110111111, deviating from the 8th unit.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle =x = 125, y = 27, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
3bo63bo7bo7bo7bo7bo7bo7bo$2bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$&lt;br /&gt;
7o57b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2b4o3bo$7o57b7ob7ob7ob7ob7ob7ob3o6bobo$118bo3bobo&lt;br /&gt;
$7o57b7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2b4o3bo$7o57b7ob7ob7ob7ob7ob7ob2obob5o$2bobo61bob&lt;br /&gt;
o5bobo5bobo5bobo5bobo5bobo5bo2bo$3bo63bo7bo7bo7bo7bo7bo7bo6$3bo7bo7bo&lt;br /&gt;
7bo7bo7bo7bo15bo7bo7bo7bo7bo7bo7bo$2bobo5bobo5bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
13bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7ob7ob7ob7ob7ob7o9b7ob7ob7ob&lt;br /&gt;
7ob7ob7ob2obob5o$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7o&lt;br /&gt;
b7ob7ob7ob7o9b7ob7ob7ob7ob7ob7ob3o6bobo$118bo3bobo$7ob7ob7ob7ob7ob7ob&lt;br /&gt;
7o9b7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o&lt;br /&gt;
3bo$7ob7ob7ob7ob7ob7ob7o9b7ob7ob7ob7ob7ob7ob2obob5o$2bobo5bobo5bobo5bo&lt;br /&gt;
bo5bobo5bobo5bobo13bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$3bo7bo7bo7bo7bo&lt;br /&gt;
7bo7bo15bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To modify the (8~13)th units, the (15~20)th units should be 1. The resulting ...11111110000000111111 evolves to ...00000110000000111111, deviating from the 16th unit.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle =  x = 173, y = 27, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
3bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$2bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7ob7ob7ob7ob7ob7o&lt;br /&gt;
57b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o&lt;br /&gt;
3bo$7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$166bo3bobo$7ob7ob&lt;br /&gt;
7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2b4o3bo$7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$2bo&lt;br /&gt;
bo5bobo5bobo5bobo5bobo5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$&lt;br /&gt;
3bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo6$43bo7bo63bo7bo7bo7bo7bo7b&lt;br /&gt;
o7bo$42bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$40b7ob7o57b7ob7o&lt;br /&gt;
b7ob7ob7ob7ob2obob5o$40bo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2b4o3bo$40b7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$166b&lt;br /&gt;
o3bobo$40b7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$40bo2bo2bobo2bo2bo57bo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$40b7ob7o57b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob2obob5o$42bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$&lt;br /&gt;
43bo7bo63bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To modify the (16~20)th units, the (23~27)th units should be 1. The resulting ...00111110011111110000000111111 evolves to ...11111110011111110000000111111, deviating from the 28th unit.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 245, y = 27, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
19bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$18bobo5bo&lt;br /&gt;
bo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo5bobo5bo2bo$16b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7o&lt;br /&gt;
b7ob7ob7ob7ob2obob5o$16bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$16b7ob7ob7ob7ob7o17b7ob7ob7ob&lt;br /&gt;
7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$238bo3bobo$16b7ob7ob7ob7ob7o&lt;br /&gt;
17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$16bo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3b&lt;br /&gt;
o$16b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o&lt;br /&gt;
$18bobo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo&lt;br /&gt;
5bobo5bobo5bobo5bobo5bobo5bo2bo$19bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo&lt;br /&gt;
63bo7bo7bo7bo7bo7bo7bo6$3bo7bo7bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo63b&lt;br /&gt;
o7bo7bo7bo7bo7bo7bo$2bobo5bobo5bobo5bobo5bobo5bobo5bobo21bobo5bobo5bob&lt;br /&gt;
o5bobo5bobo5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7ob7ob7o&lt;br /&gt;
b7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o&lt;br /&gt;
57b7ob7ob7ob7ob7ob7ob3o6bobo$238bo3bobo$7ob7ob7ob7ob7ob7ob7o17b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
4o3bo$7ob7ob7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob&lt;br /&gt;
2obob5o$2bobo5bobo5bobo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$3bo7bo7bo7bo7bo7bo7bo&lt;br /&gt;
23bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To modify the (28~29)th units, the (35~36)th units should be 1. The resulting ...110000000111110011111110000000111111 becomes ...111110000111110011111110000000111111, deviating from the 32nd unit.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 301, y = 27, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
3bo7bo63bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$2bo&lt;br /&gt;
bo5bobo61bobo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7o57b7ob7ob7ob7ob7o17b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bobo2bo2bo57bo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2b4o3bo$7ob7o57b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob&lt;br /&gt;
7ob7ob3o6bobo$294bo3bobo$7ob7o57b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o&lt;br /&gt;
57b7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7o&lt;br /&gt;
57b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$&lt;br /&gt;
2bobo5bobo61bobo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bo&lt;br /&gt;
bo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$3bo7bo63bo7bo7bo7bo7bo23bo7bo&lt;br /&gt;
7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo6$3bo7bo7bo7bo7bo39bo7bo7bo7bo7bo&lt;br /&gt;
23bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$2bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
37bobo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo5b&lt;br /&gt;
obo5bobo5bobo5bobo5bobo5bo2bo$7ob7ob7ob7ob7o33b7ob7ob7ob7ob7o17b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bo33bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7o33b7ob7ob7ob7ob7o17b7ob&lt;br /&gt;
7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$294bo3bobo$7ob7ob7ob7ob&lt;br /&gt;
7o33b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo&lt;br /&gt;
$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo33bo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob&lt;br /&gt;
7ob7o33b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obo&lt;br /&gt;
b5o$2bobo5bobo5bobo5bobo5bobo37bobo5bobo5bobo5bobo5bobo21bobo5bobo5bob&lt;br /&gt;
o5bobo5bobo5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$3bo7bo7bo7b&lt;br /&gt;
o7bo39bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
In the process of repeating the procedure, the first deviating unit migrates away from the front end and the correct region of sequence grows constantly.&lt;br /&gt;
&lt;br /&gt;
Drawbacks of this method are that repeatedly evolving pattern by 128 ticks is time-consuming, and a lot of one-time copying and pasting are needed to look for deviations. Meet [[User:GUYTU6J/Repeat#Key_parameters_&amp;amp;_Implementation|repeat.py]], a handy script to help displaying evolution and reduce clipboard stress.&lt;br /&gt;
&lt;br /&gt;
Take the seed above and apply (0,16,16) by 8 times in repeat.py, the result is&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 133, y = 139, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
3bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo$2bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7ob7o&lt;br /&gt;
b7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob&lt;br /&gt;
7ob7ob7ob3o6bobo$126bo3bobo$7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob&lt;br /&gt;
7ob3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$&lt;br /&gt;
7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob2obob5o$2bobo5bobo5bobo5b&lt;br /&gt;
obo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$3bo7b&lt;br /&gt;
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo6$11bo7bo23bo7bo23bo7bo23bo&lt;br /&gt;
7bo$10bobo5bobo21bobo5bobo21bobo5bobo21bobo5bobo$8b7ob7o17b7ob7o17b7ob&lt;br /&gt;
7o17b7ob7o10bo$8bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo&lt;br /&gt;
17bo2bo2bobo2bo2bo9bobo$8b7ob7o17b7ob7o17b7ob7o17b7ob7o8bobobo$126bobo&lt;br /&gt;
bobo$8b7ob7o17b7ob7o17b7ob7o17b7ob7o8bobobo$8bo2bo2bobo2bo2bo17bo2bo2b&lt;br /&gt;
obo2bo2bo17bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bobo$8b7ob7o17b7ob7o17b&lt;br /&gt;
7ob7o17b7ob7o10bo$10bobo5bobo21bobo5bobo21bobo5bobo21bobo5bobo$11bo7bo&lt;br /&gt;
23bo7bo23bo7bo23bo7bo6$19bo7bo7bo7bo39bo7bo7bo7bo$18bobo5bobo5bobo5bob&lt;br /&gt;
o37bobo5bobo5bobo5bobo$16b7ob7ob7ob7o33b7ob7ob7ob7o18bo$16bo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bo33bo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bobo$16b7ob7ob&lt;br /&gt;
7ob7o33b7ob7ob7ob7o16bobobo$126bobobobo$16b7ob7ob7ob7o33b7ob7ob7ob7o&lt;br /&gt;
16bobobo$16bo2bo2bobo2bo2bobo2bo2bobo2bo2bo33bo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bo17bobo$16b7ob7ob7ob7o33b7ob7ob7ob7o18bo$18bobo5bobo5bobo5bobo&lt;br /&gt;
37bobo5bobo5bobo5bobo$19bo7bo7bo7bo39bo7bo7bo7bo6$27bo7bo55bo7bo$26bob&lt;br /&gt;
o5bobo53bobo5bobo$24b7ob7o49b7ob7o26bo$24bo2bo2bobo2bo2bo49bo2bo2bobo&lt;br /&gt;
2bo2bo25bobo$24b7ob7o49b7ob7o24bobobo$126bobobobo$24b7ob7o49b7ob7o24bo&lt;br /&gt;
bobo$24bo2bo2bobo2bo2bo49bo2bo2bobo2bo2bo25bobo$24b7ob7o49b7ob7o26bo$&lt;br /&gt;
26bobo5bobo53bobo5bobo$27bo7bo55bo7bo6$35bo7bo7bo7bo7bo7bo7bo7bo$34bob&lt;br /&gt;
o5bobo5bobo5bobo5bobo5bobo5bobo5bobo$32b7ob7ob7ob7ob7ob7ob7ob7o34bo$&lt;br /&gt;
32bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo33bo&lt;br /&gt;
bo$32b7ob7ob7ob7ob7ob7ob7ob7o32bobobo$126bobobobo$32b7ob7ob7ob7ob7ob7o&lt;br /&gt;
b7ob7o32bobobo$32bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bo33bobo$32b7ob7ob7ob7ob7ob7ob7ob7o34bo$34bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo5bobo5bobo$35bo7bo7bo7bo7bo7bo7bo7bo6$43bo7bo23bo7bo$42bobo&lt;br /&gt;
5bobo21bobo5bobo$40b7ob7o17b7ob7o42bo$40bo2bo2bobo2bo2bo17bo2bo2bobo2b&lt;br /&gt;
o2bo41bobo$40b7ob7o17b7ob7o40bobobo$126bobobobo$40b7ob7o17b7ob7o40bobo&lt;br /&gt;
bo$40bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo41bobo$40b7ob7o17b7ob7o42bo$42b&lt;br /&gt;
obo5bobo21bobo5bobo$43bo7bo23bo7bo6$51bo7bo7bo7bo$50bobo5bobo5bobo5bob&lt;br /&gt;
o$48b7ob7ob7ob7o50bo$48bo2bo2bobo2bo2bobo2bo2bobo2bo2bo49bobo$48b7ob7o&lt;br /&gt;
b7ob7o48bobobo$126bobobobo$48b7ob7ob7ob7o48bobobo$48bo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bo49bobo$48b7ob7ob7ob7o50bo$50bobo5bobo5bobo5bobo$51bo7bo&lt;br /&gt;
7bo7bo6$59bo7bo$58bobo5bobo$56b7ob7o48b2o$56bo2bo2bobo2bo2bo48bobo5bo$&lt;br /&gt;
56b7ob7o50bo6bo$122bo2bo3bo$56b7ob7o50bo6bo$56bo2bo2bobo2bo2bo48bobo5b&lt;br /&gt;
o$56b7ob7o48b2o$58bobo5bobo$59bo7bo6$67bo7bo7bo7bo7bo7bo7bo$66bobo5bob&lt;br /&gt;
o5bobo5bobo5bobo5bobo5bo2bo$64b7ob7ob7ob7ob7ob7ob2obob5o$64bo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$64b7ob7ob7ob7ob7ob7ob&lt;br /&gt;
3o6bobo$118bo3bobo$64b7ob7ob7ob7ob7ob7ob3o6bobo$64bo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$64b7ob7ob7ob7ob7ob7ob2obob5o$66b&lt;br /&gt;
obo5bobo5bobo5bobo5bobo5bobo5bo2bo$67bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Essentially, the seed evolves by 16 generations (third parameter) and a new seed is pasted in 16 cells north (first two parameters), repeated n=8 times until reaching generation 128. For ease of reference and comparison, drop another copy of the seed above at (8, -150) relative to the bottommost seed, where 8 is the fixed displacement and 150 is a sufficiently large arbitrary integer.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 133, y = 161, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
75bo7bo7bo7bo7bo7bo7bo$74bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$72b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob2obob5o$72bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2b4o3bo$72b7ob7ob7ob7ob7ob7ob3o6bobo$126bo3bobo$72b7ob7ob7ob7ob7ob7o&lt;br /&gt;
b3o6bobo$72bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$&lt;br /&gt;
72b7ob7ob7ob7ob7ob7ob2obob5o$74bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$75b&lt;br /&gt;
o7bo7bo7bo7bo7bo7bo12$3bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo&lt;br /&gt;
$2bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bob&lt;br /&gt;
o5bobo5bo2bo$7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob2obob5o$o2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7o&lt;br /&gt;
b7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob3o6bobo$126bo3bobo$7ob7ob7ob7ob7ob7ob7o&lt;br /&gt;
b7ob7ob7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob7ob&lt;br /&gt;
2obob5o$2bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo5b&lt;br /&gt;
obo5bobo5bobo5bo2bo$3bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo6$&lt;br /&gt;
11bo7bo23bo7bo23bo7bo23bo7bo$10bobo5bobo21bobo5bobo21bobo5bobo21bobo5b&lt;br /&gt;
obo$8b7ob7o17b7ob7o17b7ob7o17b7ob7o10bo$8bo2bo2bobo2bo2bo17bo2bo2bobo&lt;br /&gt;
2bo2bo17bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bobo$8b7ob7o17b7ob7o17b7ob&lt;br /&gt;
7o17b7ob7o8bobobo$126bobobobo$8b7ob7o17b7ob7o17b7ob7o17b7ob7o8bobobo$&lt;br /&gt;
8bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo17bo2bo2bobo2bo2b&lt;br /&gt;
o9bobo$8b7ob7o17b7ob7o17b7ob7o17b7ob7o10bo$10bobo5bobo21bobo5bobo21bob&lt;br /&gt;
o5bobo21bobo5bobo$11bo7bo23bo7bo23bo7bo23bo7bo6$19bo7bo7bo7bo39bo7bo7b&lt;br /&gt;
o7bo$18bobo5bobo5bobo5bobo37bobo5bobo5bobo5bobo$16b7ob7ob7ob7o33b7ob7o&lt;br /&gt;
b7ob7o18bo$16bo2bo2bobo2bo2bobo2bo2bobo2bo2bo33bo2bo2bobo2bo2bobo2bo2b&lt;br /&gt;
obo2bo2bo17bobo$16b7ob7ob7ob7o33b7ob7ob7ob7o16bobobo$126bobobobo$16b7o&lt;br /&gt;
b7ob7ob7o33b7ob7ob7ob7o16bobobo$16bo2bo2bobo2bo2bobo2bo2bobo2bo2bo33bo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bo17bobo$16b7ob7ob7ob7o33b7ob7ob7ob7o18bo$&lt;br /&gt;
18bobo5bobo5bobo5bobo37bobo5bobo5bobo5bobo$19bo7bo7bo7bo39bo7bo7bo7bo&lt;br /&gt;
6$27bo7bo55bo7bo$26bobo5bobo53bobo5bobo$24b7ob7o49b7ob7o26bo$24bo2bo2b&lt;br /&gt;
obo2bo2bo49bo2bo2bobo2bo2bo25bobo$24b7ob7o49b7ob7o24bobobo$126bobobobo&lt;br /&gt;
$24b7ob7o49b7ob7o24bobobo$24bo2bo2bobo2bo2bo49bo2bo2bobo2bo2bo25bobo$&lt;br /&gt;
24b7ob7o49b7ob7o26bo$26bobo5bobo53bobo5bobo$27bo7bo55bo7bo6$35bo7bo7bo&lt;br /&gt;
7bo7bo7bo7bo7bo$34bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo$32b7ob7ob7ob&lt;br /&gt;
7ob7ob7ob7ob7o34bo$32bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bo33bobo$32b7ob7ob7ob7ob7ob7ob7ob7o32bobobo$126bobobobo$&lt;br /&gt;
32b7ob7ob7ob7ob7ob7ob7ob7o32bobobo$32bo2bo2bobo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2bo2bo33bobo$32b7ob7ob7ob7ob7ob7ob7ob7o34bo$&lt;br /&gt;
34bobo5bobo5bobo5bobo5bobo5bobo5bobo5bobo$35bo7bo7bo7bo7bo7bo7bo7bo6$&lt;br /&gt;
43bo7bo23bo7bo$42bobo5bobo21bobo5bobo$40b7ob7o17b7ob7o42bo$40bo2bo2bob&lt;br /&gt;
o2bo2bo17bo2bo2bobo2bo2bo41bobo$40b7ob7o17b7ob7o40bobobo$126bobobobo$&lt;br /&gt;
40b7ob7o17b7ob7o40bobobo$40bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo41bobo$&lt;br /&gt;
40b7ob7o17b7ob7o42bo$42bobo5bobo21bobo5bobo$43bo7bo23bo7bo6$51bo7bo7bo&lt;br /&gt;
7bo$50bobo5bobo5bobo5bobo$48b7ob7ob7ob7o50bo$48bo2bo2bobo2bo2bobo2bo2b&lt;br /&gt;
obo2bo2bo49bobo$48b7ob7ob7ob7o48bobobo$126bobobobo$48b7ob7ob7ob7o48bob&lt;br /&gt;
obo$48bo2bo2bobo2bo2bobo2bo2bobo2bo2bo49bobo$48b7ob7ob7ob7o50bo$50bobo&lt;br /&gt;
5bobo5bobo5bobo$51bo7bo7bo7bo6$59bo7bo$58bobo5bobo$56b7ob7o48b2o$56bo&lt;br /&gt;
2bo2bobo2bo2bo48bobo5bo$56b7ob7o50bo6bo$122bo2bo3bo$56b7ob7o50bo6bo$&lt;br /&gt;
56bo2bo2bobo2bo2bo48bobo5bo$56b7ob7o48b2o$58bobo5bobo$59bo7bo6$67bo7bo&lt;br /&gt;
7bo7bo7bo7bo7bo$66bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$64b7ob7ob7ob7ob&lt;br /&gt;
7ob7ob2obob5o$64bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o&lt;br /&gt;
3bo$64b7ob7ob7ob7ob7ob7ob3o6bobo$118bo3bobo$64b7ob7ob7ob7ob7ob7ob3o6bo&lt;br /&gt;
bo$64bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$64b7ob&lt;br /&gt;
7ob7ob7ob7ob7ob2obob5o$66bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$67bo7bo7b&lt;br /&gt;
o7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The same repeat.py procedure is done to a single unit of replicator, and another unit is also put at (8, -150) relative to the bottommost unit:&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 135, y = 161, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
75bo$74bobo$72b7o$72bo2bo2bo$72b7o2$72b7o$72bo2bo2bo$72b7o$74bobo$75bo&lt;br /&gt;
12$3bo127bo$2bobo125bobo$7o121b7o$o2bo2bo121bo2bo2bo$7o121b7o2$7o121b&lt;br /&gt;
7o$o2bo2bo121bo2bo2bo$7o121b7o$2bobo125bobo$3bo127bo6$11bo15bo15bo15bo&lt;br /&gt;
15bo15bo15bo15bo$10bobo13bobo13bobo13bobo13bobo13bobo13bobo13bobo$8b7o&lt;br /&gt;
9b7o9b7o9b7o9b7o9b7o9b7o9b7o$8bo2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bo9bo2b&lt;br /&gt;
o2bo9bo2bo2bo9bo2bo2bo9bo2bo2bo$8b7o9b7o9b7o9b7o9b7o9b7o9b7o9b7o2$8b7o&lt;br /&gt;
9b7o9b7o9b7o9b7o9b7o9b7o9b7o$8bo2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bo9bo2b&lt;br /&gt;
o2bo9bo2bo2bo9bo2bo2bo9bo2bo2bo$8b7o9b7o9b7o9b7o9b7o9b7o9b7o9b7o$10bob&lt;br /&gt;
o13bobo13bobo13bobo13bobo13bobo13bobo13bobo$11bo15bo15bo15bo15bo15bo&lt;br /&gt;
15bo15bo6$19bo31bo31bo31bo$18bobo29bobo29bobo29bobo$16b7o25b7o25b7o25b&lt;br /&gt;
7o$16bo2bo2bo25bo2bo2bo25bo2bo2bo25bo2bo2bo$16b7o25b7o25b7o25b7o2$16b&lt;br /&gt;
7o25b7o25b7o25b7o$16bo2bo2bo25bo2bo2bo25bo2bo2bo25bo2bo2bo$16b7o25b7o&lt;br /&gt;
25b7o25b7o$18bobo29bobo29bobo29bobo$19bo31bo31bo31bo6$27bo15bo47bo15bo&lt;br /&gt;
$26bobo13bobo45bobo13bobo$24b7o9b7o41b7o9b7o$24bo2bo2bo9bo2bo2bo41bo2b&lt;br /&gt;
o2bo9bo2bo2bo$24b7o9b7o41b7o9b7o2$24b7o9b7o41b7o9b7o$24bo2bo2bo9bo2bo&lt;br /&gt;
2bo41bo2bo2bo9bo2bo2bo$24b7o9b7o41b7o9b7o$26bobo13bobo45bobo13bobo$27b&lt;br /&gt;
o15bo47bo15bo6$35bo63bo$34bobo61bobo$32b7o57b7o$32bo2bo2bo57bo2bo2bo$&lt;br /&gt;
32b7o57b7o2$32b7o57b7o$32bo2bo2bo57bo2bo2bo$32b7o57b7o$34bobo61bobo$&lt;br /&gt;
35bo63bo6$43bo15bo15bo15bo$42bobo13bobo13bobo13bobo$40b7o9b7o9b7o9b7o$&lt;br /&gt;
40bo2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bo$40b7o9b7o9b7o9b7o2$40b7o9b7o9b7o&lt;br /&gt;
9b7o$40bo2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bo$40b7o9b7o9b7o9b7o$42bobo13b&lt;br /&gt;
obo13bobo13bobo$43bo15bo15bo15bo6$51bo31bo$50bobo29bobo$48b7o25b7o$48b&lt;br /&gt;
o2bo2bo25bo2bo2bo$48b7o25b7o2$48b7o25b7o$48bo2bo2bo25bo2bo2bo$48b7o25b&lt;br /&gt;
7o$50bobo29bobo$51bo31bo6$59bo15bo$58bobo13bobo$56b7o9b7o$56bo2bo2bo9b&lt;br /&gt;
o2bo2bo$56b7o9b7o2$56b7o9b7o$56bo2bo2bo9bo2bo2bo$56b7o9b7o$58bobo13bob&lt;br /&gt;
o$59bo15bo6$67bo$66bobo$64b7o$64bo2bo2bo$64b7o2$64b7o$64bo2bo2bo$64b7o&lt;br /&gt;
$66bobo$67bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Then deduction of the succeeding sequence will be done by repeatedly paste the second pattern R into the first pattern S. Set paste mode to XOR and set paste location to top right. The first paste yields&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 197, y = 161, rule = B3-ckr5y/S2-i3-aek4ci5cHistory&lt;br /&gt;
75.A63.E7.E7.E7.E7.E7.E7.E$74.A.A61.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E2.&lt;br /&gt;
E$72.7A57.7E.7E.7E.7E.7E.7E.2E.E.5E$72.A2.A2.A57.E2.E2.E.E2.E2.E.E2.E&lt;br /&gt;
2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.4E3.E$72.7A57.7E.7E.7E.7E.7E.7E.3E6.E.&lt;br /&gt;
E$190.E3.E.E$72.7A57.7E.7E.7E.7E.7E.7E.3E6.E.E$72.A2.A2.A57.E2.E2.E.E&lt;br /&gt;
2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.4E3.E$72.7A57.7E.7E.7E.7E.&lt;br /&gt;
7E.7E.2E.E.5E$74.A.A61.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E2.E$75.A63.E7.E&lt;br /&gt;
7.E7.E7.E7.E7.E12$3.A63.E7.E7.E7.E7.E7.E7.E7.E7.D7.E7.E7.E7.E7.E7.E7.&lt;br /&gt;
E$2.A.A61.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.D.D5.E.E5.E.E5.E.E&lt;br /&gt;
5.E.E5.E.E5.E.E5.E2.E$7A57.7E.7E.7E.7E.7E.7E.7E.7E.7D.7E.7E.7E.7E.7E.&lt;br /&gt;
7E.2E.E.5E$A2.A2.A57.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.&lt;br /&gt;
E2.E2.E.E2.E2.E.D2.D2.D.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E&lt;br /&gt;
2.E.E2.4E3.E$7A57.7E.7E.7E.7E.7E.7E.7E.7E.7D.7E.7E.7E.7E.7E.7E.3E6.E.&lt;br /&gt;
E$190.E3.E.E$7A57.7E.7E.7E.7E.7E.7E.7E.7E.7D.7E.7E.7E.7E.7E.7E.3E6.E.&lt;br /&gt;
E$A2.A2.A57.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E&lt;br /&gt;
2.E2.E.D2.D2.D.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.4E&lt;br /&gt;
3.E$7A57.7E.7E.7E.7E.7E.7E.7E.7E.7D.7E.7E.7E.7E.7E.7E.2E.E.5E$2.A.A&lt;br /&gt;
61.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.D.D5.E.E5.E.E5.E.E5.E.E5.E&lt;br /&gt;
.E5.E.E5.E2.E$3.A63.E7.E7.E7.E7.E7.E7.E7.E7.D7.E7.E7.E7.E7.E7.E7.E6$&lt;br /&gt;
11.A15.A15.A15.A15.D7.E7.A15.D7.E7.A15.E7.E23.E7.E$10.A.A13.A.A13.A.A&lt;br /&gt;
13.A.A13.D.D5.E.E5.A.A13.D.D5.E.E5.A.A13.E.E5.E.E21.E.E5.E.E$8.7A9.7A&lt;br /&gt;
9.7A9.7A9.7D.7E.7A9.7D.7E.7A9.7E.7E17.7E.7E10.E$8.A2.A2.A9.A2.A2.A9.A&lt;br /&gt;
2.A2.A9.A2.A2.A9.D2.D2.D.E2.E2.E.A2.A2.A9.D2.D2.D.E2.E2.E.A2.A2.A9.E&lt;br /&gt;
2.E2.E.E2.E2.E17.E2.E2.E.E2.E2.E9.E.E$8.7A9.7A9.7A9.7A9.7D.7E.7A9.7D.&lt;br /&gt;
7E.7A9.7E.7E17.7E.7E8.E.E.E$190.E.E.E.E$8.7A9.7A9.7A9.7A9.7D.7E.7A9.&lt;br /&gt;
7D.7E.7A9.7E.7E17.7E.7E8.E.E.E$8.A2.A2.A9.A2.A2.A9.A2.A2.A9.A2.A2.A9.&lt;br /&gt;
D2.D2.D.E2.E2.E.A2.A2.A9.D2.D2.D.E2.E2.E.A2.A2.A9.E2.E2.E.E2.E2.E17.E&lt;br /&gt;
2.E2.E.E2.E2.E9.E.E$8.7A9.7A9.7A9.7A9.7D.7E.7A9.7D.7E.7A9.7E.7E17.7E.&lt;br /&gt;
7E10.E$10.A.A13.A.A13.A.A13.A.A13.D.D5.E.E5.A.A13.D.D5.E.E5.A.A13.E.E&lt;br /&gt;
5.E.E21.E.E5.E.E$11.A15.A15.A15.A15.D7.E7.A15.D7.E7.A15.E7.E23.E7.E6$&lt;br /&gt;
19.A31.A31.D7.E7.E7.E7.A31.E7.E7.E7.E$18.A.A29.A.A29.D.D5.E.E5.E.E5.E&lt;br /&gt;
.E5.A.A29.E.E5.E.E5.E.E5.E.E$16.7A25.7A25.7D.7E.7E.7E.7A25.7E.7E.7E.&lt;br /&gt;
7E18.E$16.A2.A2.A25.A2.A2.A25.D2.D2.D.E2.E2.E.E2.E2.E.E2.E2.E.A2.A2.A&lt;br /&gt;
25.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E17.E.E$16.7A25.7A25.7D.7E.7E.7E.7A&lt;br /&gt;
25.7E.7E.7E.7E16.E.E.E$190.E.E.E.E$16.7A25.7A25.7D.7E.7E.7E.7A25.7E.&lt;br /&gt;
7E.7E.7E16.E.E.E$16.A2.A2.A25.A2.A2.A25.D2.D2.D.E2.E2.E.E2.E2.E.E2.E&lt;br /&gt;
2.E.A2.A2.A25.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E17.E.E$16.7A25.7A25.7D.&lt;br /&gt;
7E.7E.7E.7A25.7E.7E.7E.7E18.E$18.A.A29.A.A29.D.D5.E.E5.E.E5.E.E5.A.A&lt;br /&gt;
29.E.E5.E.E5.E.E5.E.E$19.A31.A31.D7.E7.E7.E7.A31.E7.E7.E7.E6$27.A15.A&lt;br /&gt;
47.D7.E7.A47.E7.E$26.A.A13.A.A45.D.D5.E.E5.A.A45.E.E5.E.E$24.7A9.7A&lt;br /&gt;
41.7D.7E.7A41.7E.7E26.E$24.A2.A2.A9.A2.A2.A41.D2.D2.D.E2.E2.E.A2.A2.A&lt;br /&gt;
41.E2.E2.E.E2.E2.E25.E.E$24.7A9.7A41.7D.7E.7A41.7E.7E24.E.E.E$190.E.E&lt;br /&gt;
.E.E$24.7A9.7A41.7D.7E.7A41.7E.7E24.E.E.E$24.A2.A2.A9.A2.A2.A41.D2.D&lt;br /&gt;
2.D.E2.E2.E.A2.A2.A41.E2.E2.E.E2.E2.E25.E.E$24.7A9.7A41.7D.7E.7A41.7E&lt;br /&gt;
.7E26.E$26.A.A13.A.A45.D.D5.E.E5.A.A45.E.E5.E.E$27.A15.A47.D7.E7.A47.&lt;br /&gt;
E7.E6$35.A63.D7.E7.E7.E7.E7.E7.E7.E$34.A.A61.D.D5.E.E5.E.E5.E.E5.E.E&lt;br /&gt;
5.E.E5.E.E5.E.E$32.7A57.7D.7E.7E.7E.7E.7E.7E.7E34.E$32.A2.A2.A57.D2.D&lt;br /&gt;
2.D.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E33.E.E$32.&lt;br /&gt;
7A57.7D.7E.7E.7E.7E.7E.7E.7E32.E.E.E$190.E.E.E.E$32.7A57.7D.7E.7E.7E.&lt;br /&gt;
7E.7E.7E.7E32.E.E.E$32.A2.A2.A57.D2.D2.D.E2.E2.E.E2.E2.E.E2.E2.E.E2.E&lt;br /&gt;
2.E.E2.E2.E.E2.E2.E.E2.E2.E33.E.E$32.7A57.7D.7E.7E.7E.7E.7E.7E.7E34.E&lt;br /&gt;
$34.A.A61.D.D5.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E.E$35.A63.D7.E7.E7.E7.E&lt;br /&gt;
7.E7.E7.E6$43.A15.A15.A15.A15.E7.E23.E7.E$42.A.A13.A.A13.A.A13.A.A13.&lt;br /&gt;
E.E5.E.E21.E.E5.E.E$40.7A9.7A9.7A9.7A9.7E.7E17.7E.7E42.E$40.A2.A2.A9.&lt;br /&gt;
A2.A2.A9.A2.A2.A9.A2.A2.A9.E2.E2.E.E2.E2.E17.E2.E2.E.E2.E2.E41.E.E$&lt;br /&gt;
40.7A9.7A9.7A9.7A9.7E.7E17.7E.7E40.E.E.E$190.E.E.E.E$40.7A9.7A9.7A9.&lt;br /&gt;
7A9.7E.7E17.7E.7E40.E.E.E$40.A2.A2.A9.A2.A2.A9.A2.A2.A9.A2.A2.A9.E2.E&lt;br /&gt;
2.E.E2.E2.E17.E2.E2.E.E2.E2.E41.E.E$40.7A9.7A9.7A9.7A9.7E.7E17.7E.7E&lt;br /&gt;
42.E$42.A.A13.A.A13.A.A13.A.A13.E.E5.E.E21.E.E5.E.E$43.A15.A15.A15.A&lt;br /&gt;
15.E7.E23.E7.E6$51.A31.A31.E7.E7.E7.E$50.A.A29.A.A29.E.E5.E.E5.E.E5.E&lt;br /&gt;
.E$48.7A25.7A25.7E.7E.7E.7E50.E$48.A2.A2.A25.A2.A2.A25.E2.E2.E.E2.E2.&lt;br /&gt;
E.E2.E2.E.E2.E2.E49.E.E$48.7A25.7A25.7E.7E.7E.7E48.E.E.E$190.E.E.E.E$&lt;br /&gt;
48.7A25.7A25.7E.7E.7E.7E48.E.E.E$48.A2.A2.A25.A2.A2.A25.E2.E2.E.E2.E&lt;br /&gt;
2.E.E2.E2.E.E2.E2.E49.E.E$48.7A25.7A25.7E.7E.7E.7E50.E$50.A.A29.A.A&lt;br /&gt;
29.E.E5.E.E5.E.E5.E.E$51.A31.A31.E7.E7.E7.E6$59.A15.A47.E7.E$58.A.A&lt;br /&gt;
13.A.A45.E.E5.E.E$56.7A9.7A41.7E.7E48.2E$56.A2.A2.A9.A2.A2.A41.E2.E2.&lt;br /&gt;
E.E2.E2.E48.E.E5.E$56.7A9.7A41.7E.7E50.E6.E$186.E2.E3.E$56.7A9.7A41.&lt;br /&gt;
7E.7E50.E6.E$56.A2.A2.A9.A2.A2.A41.E2.E2.E.E2.E2.E48.E.E5.E$56.7A9.7A&lt;br /&gt;
41.7E.7E48.2E$58.A.A13.A.A45.E.E5.E.E$59.A15.A47.E7.E6$67.A63.E7.E7.E&lt;br /&gt;
7.E7.E7.E7.E$66.A.A61.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E2.E$64.7A57.7E.&lt;br /&gt;
7E.7E.7E.7E.7E.2E.E.5E$64.A2.A2.A57.E2.E2.E.E2.E2.E.E2.E2.E.E2.E2.E.E&lt;br /&gt;
2.E2.E.E2.E2.E.E2.4E3.E$64.7A57.7E.7E.7E.7E.7E.7E.3E6.E.E$182.E3.E.E$&lt;br /&gt;
64.7A57.7E.7E.7E.7E.7E.7E.3E6.E.E$64.A2.A2.A57.E2.E2.E.E2.E2.E.E2.E2.&lt;br /&gt;
E.E2.E2.E.E2.E2.E.E2.E2.E.E2.4E3.E$64.7A57.7E.7E.7E.7E.7E.7E.2E.E.5E$&lt;br /&gt;
66.A.A61.E.E5.E.E5.E.E5.E.E5.E.E5.E.E5.E2.E$67.A63.E7.E7.E7.E7.E7.E7.&lt;br /&gt;
E!&lt;br /&gt;
|position = center&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
LifeHistory is temporarily switched on to colour-code the different parts: back is the R pattern, yellow is the S pattern, and red is the overlap part that has been turned to 0 by XOR. Back to plain 2-state pattern, the second paste looks like this:&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 205, y = 161, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
75bo7bo63bo7bo7bo7bo7bo7bo7bo$74bobo5bobo61bobo5bobo5bobo5bobo5bobo5bo&lt;br /&gt;
bo5bo2bo$72b7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$72bo2bo2bobo2bo2bo57bo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$72b7ob7o57b7ob7o&lt;br /&gt;
b7ob7ob7ob7ob3o6bobo$198bo3bobo$72b7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$&lt;br /&gt;
72bo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2b4o3bo$72b7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$74bobo5bobo61bobo5bobo5bo&lt;br /&gt;
bo5bobo5bobo5bobo5bo2bo$75bo7bo63bo7bo7bo7bo7bo7bo7bo12$3bo7bo63bo7bo&lt;br /&gt;
7bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo$2bobo5bobo61bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7o57b7ob7ob7ob&lt;br /&gt;
7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bobo2bo2bo57bo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7o57b7ob7ob7ob7ob7ob7ob7o17b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob3o6bobo$198bo3bobo$7ob7o57b7ob7ob7ob7ob7ob7ob7o17b7ob7ob7o&lt;br /&gt;
b7ob7ob7ob3o6bobo$o2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2b4o3bo$7ob7o57b7ob7ob7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob2obob5o$&lt;br /&gt;
2bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bo&lt;br /&gt;
bo5bobo5bo2bo$3bo7bo63bo7bo7bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo6$11bo&lt;br /&gt;
7bo7bo7bo7bo7bo7bo7bo7bo23bo7bo23bo15bo7bo23bo7bo$10bobo5bobo5bobo5bob&lt;br /&gt;
o5bobo5bobo5bobo5bobo5bobo21bobo5bobo21bobo13bobo5bobo21bobo5bobo$8b7o&lt;br /&gt;
b7ob7ob7ob7ob7ob7ob7ob7o17b7ob7o17b7o9b7ob7o17b7ob7o10bo$8bo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bo&lt;br /&gt;
bo2bo2bo17bo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bobo$8b7ob7ob7ob&lt;br /&gt;
7ob7ob7ob7ob7ob7o17b7ob7o17b7o9b7ob7o17b7ob7o8bobobo$198bobobobo$8b7ob&lt;br /&gt;
7ob7ob7ob7ob7ob7ob7ob7o17b7ob7o17b7o9b7ob7o17b7ob7o8bobobo$8bo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo&lt;br /&gt;
2bobo2bo2bo17bo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bobo$8b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob7ob7ob7o17b7ob7o17b7o9b7ob7o17b7ob7o10bo$10bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo5bobo5bobo5bobo5bobo21bobo5bobo21bobo13bobo5bobo21bobo5bobo$&lt;br /&gt;
11bo7bo7bo7bo7bo7bo7bo7bo7bo23bo7bo23bo15bo7bo23bo7bo6$19bo7bo23bo7bo&lt;br /&gt;
23bo15bo7bo15bo31bo7bo7bo7bo$18bobo5bobo21bobo5bobo21bobo13bobo5bobo&lt;br /&gt;
13bobo29bobo5bobo5bobo5bobo$16b7ob7o17b7ob7o17b7o9b7ob7o9b7o25b7ob7ob&lt;br /&gt;
7ob7o18bo$16bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo17bo2bo2bo9bo2bo2bobo2bo&lt;br /&gt;
2bo9bo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bobo$16b7ob7o17b7ob7o&lt;br /&gt;
17b7o9b7ob7o9b7o25b7ob7ob7ob7o16bobobo$198bobobobo$16b7ob7o17b7ob7o17b&lt;br /&gt;
7o9b7ob7o9b7o25b7ob7ob7ob7o16bobobo$16bo2bo2bobo2bo2bo17bo2bo2bobo2bo&lt;br /&gt;
2bo17bo2bo2bo9bo2bo2bobo2bo2bo9bo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bo17bobo$16b7ob7o17b7ob7o17b7o9b7ob7o9b7o25b7ob7ob7ob7o18bo$18bobo5bo&lt;br /&gt;
bo21bobo5bobo21bobo13bobo5bobo13bobo29bobo5bobo5bobo5bobo$19bo7bo23bo&lt;br /&gt;
7bo23bo15bo7bo15bo31bo7bo7bo7bo6$27bo7bo7bo7bo39bo23bo47bo7bo$26bobo5b&lt;br /&gt;
obo5bobo5bobo37bobo21bobo45bobo5bobo$24b7ob7ob7ob7o33b7o17b7o41b7ob7o&lt;br /&gt;
26bo$24bo2bo2bobo2bo2bobo2bo2bobo2bo2bo33bo2bo2bo17bo2bo2bo41bo2bo2bob&lt;br /&gt;
o2bo2bo25bobo$24b7ob7ob7ob7o33b7o17b7o41b7ob7o24bobobo$198bobobobo$24b&lt;br /&gt;
7ob7ob7ob7o33b7o17b7o41b7ob7o24bobobo$24bo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bo33bo2bo2bo17bo2bo2bo41bo2bo2bobo2bo2bo25bobo$24b7ob7ob7ob7o33b7o17b&lt;br /&gt;
7o41b7ob7o26bo$26bobo5bobo5bobo5bobo37bobo21bobo45bobo5bobo$27bo7bo7bo&lt;br /&gt;
7bo39bo23bo47bo7bo6$35bo7bo55bo15bo7bo7bo7bo7bo7bo7bo$34bobo5bobo53bob&lt;br /&gt;
o13bobo5bobo5bobo5bobo5bobo5bobo5bobo$32b7ob7o49b7o9b7ob7ob7ob7ob7ob7o&lt;br /&gt;
b7o34bo$32bo2bo2bobo2bo2bo49bo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bo33bobo$32b7ob7o49b7o9b7ob7ob7ob7ob7ob7ob7o32bob&lt;br /&gt;
obo$198bobobobo$32b7ob7o49b7o9b7ob7ob7ob7ob7ob7ob7o32bobobo$32bo2bo2bo&lt;br /&gt;
bo2bo2bo49bo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bo33bobo$32b7ob7o49b7o9b7ob7ob7ob7ob7ob7ob7o34bo$34bobo5bobo53bobo&lt;br /&gt;
13bobo5bobo5bobo5bobo5bobo5bobo5bobo$35bo7bo55bo15bo7bo7bo7bo7bo7bo7bo&lt;br /&gt;
6$43bo7bo7bo7bo7bo7bo7bo7bo15bo7bo23bo7bo$42bobo5bobo5bobo5bobo5bobo5b&lt;br /&gt;
obo5bobo5bobo13bobo5bobo21bobo5bobo$40b7ob7ob7ob7ob7ob7ob7ob7o9b7ob7o&lt;br /&gt;
17b7ob7o42bo$40bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2b&lt;br /&gt;
obo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo41bobo$40b7ob7ob7ob7ob7ob&lt;br /&gt;
7ob7ob7o9b7ob7o17b7ob7o40bobobo$198bobobobo$40b7ob7ob7ob7ob7ob7ob7ob7o&lt;br /&gt;
9b7ob7o17b7ob7o40bobobo$40bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo41bobo$40b7ob7o&lt;br /&gt;
b7ob7ob7ob7ob7ob7o9b7ob7o17b7ob7o42bo$42bobo5bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo13bobo5bobo21bobo5bobo$43bo7bo7bo7bo7bo7bo7bo7bo15bo7bo23bo&lt;br /&gt;
7bo6$51bo7bo23bo7bo31bo7bo7bo7bo$50bobo5bobo21bobo5bobo29bobo5bobo5bob&lt;br /&gt;
o5bobo$48b7ob7o17b7ob7o25b7ob7ob7ob7o50bo$48bo2bo2bobo2bo2bo17bo2bo2bo&lt;br /&gt;
bo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo49bobo$48b7ob7o17b7ob7o25b7o&lt;br /&gt;
b7ob7ob7o48bobobo$198bobobobo$48b7ob7o17b7ob7o25b7ob7ob7ob7o48bobobo$&lt;br /&gt;
48bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
49bobo$48b7ob7o17b7ob7o25b7ob7ob7ob7o50bo$50bobo5bobo21bobo5bobo29bobo&lt;br /&gt;
5bobo5bobo5bobo$51bo7bo23bo7bo31bo7bo7bo7bo6$59bo7bo7bo7bo47bo7bo$58bo&lt;br /&gt;
bo5bobo5bobo5bobo45bobo5bobo$56b7ob7ob7ob7o41b7ob7o48b2o$56bo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bo41bo2bo2bobo2bo2bo48bobo5bo$56b7ob7ob7ob7o41b7ob&lt;br /&gt;
7o50bo6bo$194bo2bo3bo$56b7ob7ob7ob7o41b7ob7o50bo6bo$56bo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bo41bo2bo2bobo2bo2bo48bobo5bo$56b7ob7ob7ob7o41b7ob7o48b&lt;br /&gt;
2o$58bobo5bobo5bobo5bobo45bobo5bobo$59bo7bo7bo7bo47bo7bo6$67bo7bo63bo&lt;br /&gt;
7bo7bo7bo7bo7bo7bo$66bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$&lt;br /&gt;
64b7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$64bo2bo2bobo2bo2bo57bo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$64b7ob7o57b7ob7ob7ob7ob7o&lt;br /&gt;
b7ob3o6bobo$190bo3bobo$64b7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$64bo2bo2bo&lt;br /&gt;
bo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$&lt;br /&gt;
64b7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$66bobo5bobo61bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo5bo2bo$67bo7bo63bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Paste locations are determined by comparison; they should be able to modify the second row to match the first row for reference. Another five pastes give&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 245, y = 161, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
75bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$74bobo5bobo5bobo5bobo5bob&lt;br /&gt;
o5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$72b7ob7ob7ob7ob7ob7ob&lt;br /&gt;
7o57b7ob7ob7ob7ob7ob7ob2obob5o$72bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2b4o3bo$72b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$238bo3bob&lt;br /&gt;
o$72b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$72bo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2b4o3bo$72b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7o&lt;br /&gt;
b7ob7ob2obob5o$74bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo5bobo5bobo5bo&lt;br /&gt;
bo5bobo5bobo5bo2bo$75bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo12$3bo&lt;br /&gt;
7bo7bo7bo7bo7bo7bo63bo7bo63bo7bo7bo7bo7bo7bo7bo$2bobo5bobo5bobo5bobo5b&lt;br /&gt;
obo5bobo5bobo61bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7ob7o&lt;br /&gt;
b7ob7ob7ob7o57b7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bo57bo2bo2bobo2bo2b&lt;br /&gt;
obo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7ob7ob7o57b7ob&lt;br /&gt;
7o57b7ob7ob7ob7ob7ob7ob3o6bobo$238bo3bobo$7ob7ob7ob7ob7ob7ob7o57b7ob7o&lt;br /&gt;
57b7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bo57bo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7ob7ob7o57b7ob7o57b7ob7ob7ob7ob7ob7o&lt;br /&gt;
b2obob5o$2bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo5bobo61bobo5bobo5bob&lt;br /&gt;
o5bobo5bobo5bobo5bo2bo$3bo7bo7bo7bo7bo7bo7bo63bo7bo63bo7bo7bo7bo7bo7bo&lt;br /&gt;
7bo6$11bo7bo23bo7bo15bo15bo15bo15bo7bo15bo15bo15bo15bo7bo23bo7bo$10bob&lt;br /&gt;
o5bobo21bobo5bobo13bobo13bobo13bobo13bobo5bobo13bobo13bobo13bobo13bobo&lt;br /&gt;
5bobo21bobo5bobo$8b7ob7o17b7ob7o9b7o9b7o9b7o9b7ob7o9b7o9b7o9b7o9b7ob7o&lt;br /&gt;
17b7ob7o10bo$8bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bo2bo2bo9bo2bo2bo9bo&lt;br /&gt;
2bo2bo9bo2bo2bobo2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bobo2bo2bo17b&lt;br /&gt;
o2bo2bobo2bo2bo9bobo$8b7ob7o17b7ob7o9b7o9b7o9b7o9b7ob7o9b7o9b7o9b7o9b&lt;br /&gt;
7ob7o17b7ob7o8bobobo$238bobobobo$8b7ob7o17b7ob7o9b7o9b7o9b7o9b7ob7o9b&lt;br /&gt;
7o9b7o9b7o9b7ob7o17b7ob7o8bobobo$8bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9b&lt;br /&gt;
o2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bobo2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bo&lt;br /&gt;
9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bobo$8b7ob7o17b7ob7o9b7o9b7o9b7o9b&lt;br /&gt;
7ob7o9b7o9b7o9b7o9b7ob7o17b7ob7o10bo$10bobo5bobo21bobo5bobo13bobo13bob&lt;br /&gt;
o13bobo13bobo5bobo13bobo13bobo13bobo13bobo5bobo21bobo5bobo$11bo7bo23bo&lt;br /&gt;
7bo15bo15bo15bo15bo7bo15bo15bo15bo15bo7bo23bo7bo6$19bo7bo7bo7bo31bo31b&lt;br /&gt;
o23bo31bo31bo7bo7bo7bo$18bobo5bobo5bobo5bobo29bobo29bobo21bobo29bobo&lt;br /&gt;
29bobo5bobo5bobo5bobo$16b7ob7ob7ob7o25b7o25b7o17b7o25b7o25b7ob7ob7ob7o&lt;br /&gt;
18bo$16bo2bo2bobo2bo2bobo2bo2bobo2bo2bo25bo2bo2bo25bo2bo2bo17bo2bo2bo&lt;br /&gt;
25bo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bobo$16b7ob7ob7ob7o25b7o&lt;br /&gt;
25b7o17b7o25b7o25b7ob7ob7ob7o16bobobo$238bobobobo$16b7ob7ob7ob7o25b7o&lt;br /&gt;
25b7o17b7o25b7o25b7ob7ob7ob7o16bobobo$16bo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bo25bo2bo2bo25bo2bo2bo17bo2bo2bo25bo2bo2bo25bo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bo17bobo$16b7ob7ob7ob7o25b7o25b7o17b7o25b7o25b7ob7ob7ob7o18bo$18b&lt;br /&gt;
obo5bobo5bobo5bobo29bobo29bobo21bobo29bobo29bobo5bobo5bobo5bobo$19bo7b&lt;br /&gt;
o7bo7bo31bo31bo23bo31bo31bo7bo7bo7bo6$27bo7bo47bo15bo39bo15bo47bo7bo$&lt;br /&gt;
26bobo5bobo45bobo13bobo37bobo13bobo45bobo5bobo$24b7ob7o41b7o9b7o33b7o&lt;br /&gt;
9b7o41b7ob7o26bo$24bo2bo2bobo2bo2bo41bo2bo2bo9bo2bo2bo33bo2bo2bo9bo2bo&lt;br /&gt;
2bo41bo2bo2bobo2bo2bo25bobo$24b7ob7o41b7o9b7o33b7o9b7o41b7ob7o24bobobo&lt;br /&gt;
$238bobobobo$24b7ob7o41b7o9b7o33b7o9b7o41b7ob7o24bobobo$24bo2bo2bobo2b&lt;br /&gt;
o2bo41bo2bo2bo9bo2bo2bo33bo2bo2bo9bo2bo2bo41bo2bo2bobo2bo2bo25bobo$24b&lt;br /&gt;
7ob7o41b7o9b7o33b7o9b7o41b7ob7o26bo$26bobo5bobo45bobo13bobo37bobo13bob&lt;br /&gt;
o45bobo5bobo$27bo7bo47bo15bo39bo15bo47bo7bo6$35bo7bo7bo7bo7bo7bo7bo15b&lt;br /&gt;
o7bo7bo7bo7bo7bo15bo7bo7bo7bo7bo7bo7bo$34bobo5bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo13bobo5bobo5bobo5bobo5bobo5bobo13bobo5bobo5bobo5bobo5bobo5bobo5bo&lt;br /&gt;
bo$32b7ob7ob7ob7ob7ob7ob7o9b7ob7ob7ob7ob7ob7o9b7ob7ob7ob7ob7ob7ob7o34b&lt;br /&gt;
o$32bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo9bo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bo33bobo$32b7ob7ob7ob7ob7ob7ob7o9b7ob7ob7ob7o&lt;br /&gt;
b7ob7o9b7ob7ob7ob7ob7ob7ob7o32bobobo$238bobobobo$32b7ob7ob7ob7ob7ob7ob&lt;br /&gt;
7o9b7ob7ob7ob7ob7ob7o9b7ob7ob7ob7ob7ob7ob7o32bobobo$32bo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bo33bobo$32b7ob7ob7ob7ob7ob7ob7o9b7ob7ob7ob7ob7ob7o9b7ob7ob7ob7ob&lt;br /&gt;
7ob7ob7o34bo$34bobo5bobo5bobo5bobo5bobo5bobo5bobo13bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo13bobo5bobo5bobo5bobo5bobo5bobo5bobo$35bo7bo7bo7bo7bo7bo7bo&lt;br /&gt;
15bo7bo7bo7bo7bo7bo15bo7bo7bo7bo7bo7bo7bo6$43bo7bo23bo7bo15bo7bo23bo7b&lt;br /&gt;
o15bo7bo23bo7bo$42bobo5bobo21bobo5bobo13bobo5bobo21bobo5bobo13bobo5bob&lt;br /&gt;
o21bobo5bobo$40b7ob7o17b7ob7o9b7ob7o17b7ob7o9b7ob7o17b7ob7o42bo$40bo2b&lt;br /&gt;
o2bobo2bo2bo17bo2bo2bobo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bo2b&lt;br /&gt;
o2bobo2bo2bo17bo2bo2bobo2bo2bo41bobo$40b7ob7o17b7ob7o9b7ob7o17b7ob7o9b&lt;br /&gt;
7ob7o17b7ob7o40bobobo$238bobobobo$40b7ob7o17b7ob7o9b7ob7o17b7ob7o9b7ob&lt;br /&gt;
7o17b7ob7o40bobobo$40bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bo2bo2bobo2bo&lt;br /&gt;
2bo17bo2bo2bobo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo41bobo$40b7ob&lt;br /&gt;
7o17b7ob7o9b7ob7o17b7ob7o9b7ob7o17b7ob7o42bo$42bobo5bobo21bobo5bobo13b&lt;br /&gt;
obo5bobo21bobo5bobo13bobo5bobo21bobo5bobo$43bo7bo23bo7bo15bo7bo23bo7bo&lt;br /&gt;
15bo7bo23bo7bo6$51bo7bo7bo7bo31bo7bo7bo7bo31bo7bo7bo7bo$50bobo5bobo5bo&lt;br /&gt;
bo5bobo29bobo5bobo5bobo5bobo29bobo5bobo5bobo5bobo$48b7ob7ob7ob7o25b7ob&lt;br /&gt;
7ob7ob7o25b7ob7ob7ob7o50bo$48bo2bo2bobo2bo2bobo2bo2bobo2bo2bo25bo2bo2b&lt;br /&gt;
obo2bo2bobo2bo2bobo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo49bobo$48b&lt;br /&gt;
7ob7ob7ob7o25b7ob7ob7ob7o25b7ob7ob7ob7o48bobobo$238bobobobo$48b7ob7ob&lt;br /&gt;
7ob7o25b7ob7ob7ob7o25b7ob7ob7ob7o48bobobo$48bo2bo2bobo2bo2bobo2bo2bobo&lt;br /&gt;
2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bo49bobo$48b7ob7ob7ob7o25b7ob7ob7ob7o25b7ob7ob7ob7o50bo$50bobo5bobo&lt;br /&gt;
5bobo5bobo29bobo5bobo5bobo5bobo29bobo5bobo5bobo5bobo$51bo7bo7bo7bo31bo&lt;br /&gt;
7bo7bo7bo31bo7bo7bo7bo6$59bo7bo47bo7bo47bo7bo$58bobo5bobo45bobo5bobo&lt;br /&gt;
45bobo5bobo$56b7ob7o41b7ob7o41b7ob7o48b2o$56bo2bo2bobo2bo2bo41bo2bo2bo&lt;br /&gt;
bo2bo2bo41bo2bo2bobo2bo2bo48bobo5bo$56b7ob7o41b7ob7o41b7ob7o50bo6bo$&lt;br /&gt;
234bo2bo3bo$56b7ob7o41b7ob7o41b7ob7o50bo6bo$56bo2bo2bobo2bo2bo41bo2bo&lt;br /&gt;
2bobo2bo2bo41bo2bo2bobo2bo2bo48bobo5bo$56b7ob7o41b7ob7o41b7ob7o48b2o$&lt;br /&gt;
58bobo5bobo45bobo5bobo45bobo5bobo$59bo7bo47bo7bo47bo7bo6$67bo7bo7bo7bo&lt;br /&gt;
7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$66bobo5bobo5bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$64b7ob7ob7ob7ob7ob7ob7o57b7ob7ob&lt;br /&gt;
7ob7ob7ob7ob2obob5o$64bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$&lt;br /&gt;
64b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$230bo3bobo$64b7ob&lt;br /&gt;
7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$64bo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2b4o3bo$64b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob&lt;br /&gt;
2obob5o$66bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
5bobo5bo2bo$67bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Another five pastes later it is&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 301, y = 161, rule = B3-ckr5y/S2-i3-aek4ci5c&lt;br /&gt;
75bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$74bobo5bo&lt;br /&gt;
bo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo5bobo5bobo&lt;br /&gt;
5bobo5bobo5bobo5bo2bo$72b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7o&lt;br /&gt;
b7ob7ob7ob7ob2obob5o$72bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$72b7ob7ob7ob7ob7o17b7ob7ob7ob&lt;br /&gt;
7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$294bo3bobo$72b7ob7ob7ob7ob7o&lt;br /&gt;
17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$72bo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3b&lt;br /&gt;
o$72b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o&lt;br /&gt;
$74bobo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo&lt;br /&gt;
5bobo5bobo5bobo5bobo5bobo5bo2bo$75bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo&lt;br /&gt;
63bo7bo7bo7bo7bo7bo7bo12$3bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo23bo7bo&lt;br /&gt;
7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$2bobo5bobo5bobo5bobo5bobo21bobo&lt;br /&gt;
5bobo5bobo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bobo61bo&lt;br /&gt;
bo5bobo5bobo5bobo5bobo5bobo5bo2bo$7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob&lt;br /&gt;
7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$o2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob&lt;br /&gt;
7ob7o17b7ob7ob7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob&lt;br /&gt;
7ob3o6bobo$294bo3bobo$7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o17b7ob7ob7o&lt;br /&gt;
b7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob3o6bobo$o2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
17bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$7ob7ob7ob7ob7o17b7ob7o&lt;br /&gt;
b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$2bo&lt;br /&gt;
bo5bobo5bobo5bobo5bobo21bobo5bobo5bobo5bobo5bobo5bobo5bobo21bobo5bobo&lt;br /&gt;
5bobo5bobo5bobo5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$3bo7bo&lt;br /&gt;
7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo&lt;br /&gt;
7bo7bo6$11bo7bo23bo15bo7bo23bo7bo39bo7bo23bo7bo15bo15bo15bo15bo7bo23bo&lt;br /&gt;
7bo$10bobo5bobo21bobo13bobo5bobo21bobo5bobo37bobo5bobo21bobo5bobo13bob&lt;br /&gt;
o13bobo13bobo13bobo5bobo21bobo5bobo$8b7ob7o17b7o9b7ob7o17b7ob7o33b7ob&lt;br /&gt;
7o17b7ob7o9b7o9b7o9b7o9b7ob7o17b7ob7o10bo$8bo2bo2bobo2bo2bo17bo2bo2bo&lt;br /&gt;
9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo33bo2bo2bobo2bo2bo17bo2bo2bobo2bo2b&lt;br /&gt;
o9bo2bo2bo9bo2bo2bo9bo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bobo$&lt;br /&gt;
8b7ob7o17b7o9b7ob7o17b7ob7o33b7ob7o17b7ob7o9b7o9b7o9b7o9b7ob7o17b7ob7o&lt;br /&gt;
8bobobo$294bobobobo$8b7ob7o17b7o9b7ob7o17b7ob7o33b7ob7o17b7ob7o9b7o9b&lt;br /&gt;
7o9b7o9b7ob7o17b7ob7o8bobobo$8bo2bo2bobo2bo2bo17bo2bo2bo9bo2bo2bobo2bo&lt;br /&gt;
2bo17bo2bo2bobo2bo2bo33bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bo2bo2bo9bo&lt;br /&gt;
2bo2bo9bo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bobo$8b7ob7o17b7o9b&lt;br /&gt;
7ob7o17b7ob7o33b7ob7o17b7ob7o9b7o9b7o9b7o9b7ob7o17b7ob7o10bo$10bobo5bo&lt;br /&gt;
bo21bobo13bobo5bobo21bobo5bobo37bobo5bobo21bobo5bobo13bobo13bobo13bobo&lt;br /&gt;
13bobo5bobo21bobo5bobo$11bo7bo23bo15bo7bo23bo7bo39bo7bo23bo7bo15bo15bo&lt;br /&gt;
15bo15bo7bo23bo7bo6$19bo7bo7bo7bo15bo7bo15bo23bo15bo15bo7bo15bo23bo31b&lt;br /&gt;
o31bo7bo7bo7bo$18bobo5bobo5bobo5bobo13bobo5bobo13bobo21bobo13bobo13bob&lt;br /&gt;
o5bobo13bobo21bobo29bobo29bobo5bobo5bobo5bobo$16b7ob7ob7ob7o9b7ob7o9b&lt;br /&gt;
7o17b7o9b7o9b7ob7o9b7o17b7o25b7o25b7ob7ob7ob7o18bo$16bo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bo9bo2bo2bobo2bo2bo9bo2bo2bo17bo2bo2bo9bo2bo2bo9bo2bo2bob&lt;br /&gt;
o2bo2bo9bo2bo2bo17bo2bo2bo25bo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
17bobo$16b7ob7ob7ob7o9b7ob7o9b7o17b7o9b7o9b7ob7o9b7o17b7o25b7o25b7ob7o&lt;br /&gt;
b7ob7o16bobobo$294bobobobo$16b7ob7ob7ob7o9b7ob7o9b7o17b7o9b7o9b7ob7o9b&lt;br /&gt;
7o17b7o25b7o25b7ob7ob7ob7o16bobobo$16bo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
9bo2bo2bobo2bo2bo9bo2bo2bo17bo2bo2bo9bo2bo2bo9bo2bo2bobo2bo2bo9bo2bo2b&lt;br /&gt;
o17bo2bo2bo25bo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bobo$16b7ob7o&lt;br /&gt;
b7ob7o9b7ob7o9b7o17b7o9b7o9b7ob7o9b7o17b7o25b7o25b7ob7ob7ob7o18bo$18bo&lt;br /&gt;
bo5bobo5bobo5bobo13bobo5bobo13bobo21bobo13bobo13bobo5bobo13bobo21bobo&lt;br /&gt;
29bobo29bobo5bobo5bobo5bobo$19bo7bo7bo7bo15bo7bo15bo23bo15bo15bo7bo15b&lt;br /&gt;
o23bo31bo31bo7bo7bo7bo6$27bo7bo31bo7bo7bo15bo31bo23bo39bo15bo47bo7bo$&lt;br /&gt;
26bobo5bobo29bobo5bobo5bobo13bobo29bobo21bobo37bobo13bobo45bobo5bobo$&lt;br /&gt;
24b7ob7o25b7ob7ob7o9b7o25b7o17b7o33b7o9b7o41b7ob7o26bo$24bo2bo2bobo2bo&lt;br /&gt;
2bo25bo2bo2bobo2bo2bobo2bo2bo9bo2bo2bo25bo2bo2bo17bo2bo2bo33bo2bo2bo9b&lt;br /&gt;
o2bo2bo41bo2bo2bobo2bo2bo25bobo$24b7ob7o25b7ob7ob7o9b7o25b7o17b7o33b7o&lt;br /&gt;
9b7o41b7ob7o24bobobo$294bobobobo$24b7ob7o25b7ob7ob7o9b7o25b7o17b7o33b&lt;br /&gt;
7o9b7o41b7ob7o24bobobo$24bo2bo2bobo2bo2bo25bo2bo2bobo2bo2bobo2bo2bo9bo&lt;br /&gt;
2bo2bo25bo2bo2bo17bo2bo2bo33bo2bo2bo9bo2bo2bo41bo2bo2bobo2bo2bo25bobo$&lt;br /&gt;
24b7ob7o25b7ob7ob7o9b7o25b7o17b7o33b7o9b7o41b7ob7o26bo$26bobo5bobo29bo&lt;br /&gt;
bo5bobo5bobo13bobo29bobo21bobo37bobo13bobo45bobo5bobo$27bo7bo31bo7bo7b&lt;br /&gt;
o15bo31bo23bo39bo15bo47bo7bo6$35bo7bo7bo7bo7bo23bo47bo15bo7bo7bo7bo7bo&lt;br /&gt;
7bo15bo7bo7bo7bo7bo7bo7bo$34bobo5bobo5bobo5bobo5bobo21bobo45bobo13bobo&lt;br /&gt;
5bobo5bobo5bobo5bobo5bobo13bobo5bobo5bobo5bobo5bobo5bobo5bobo$32b7ob7o&lt;br /&gt;
b7ob7ob7o17b7o41b7o9b7ob7ob7ob7ob7ob7o9b7ob7ob7ob7ob7ob7ob7o34bo$32bo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bo41bo2bo2bo9bo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2b&lt;br /&gt;
obo2bo2bobo2bo2bobo2bo2bo33bobo$32b7ob7ob7ob7ob7o17b7o41b7o9b7ob7ob7ob&lt;br /&gt;
7ob7ob7o9b7ob7ob7ob7ob7ob7ob7o32bobobo$294bobobobo$32b7ob7ob7ob7ob7o&lt;br /&gt;
17b7o41b7o9b7ob7ob7ob7ob7ob7o9b7ob7ob7ob7ob7ob7ob7o32bobobo$32bo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bo41bo2bo2bo9bo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bo33bobo$32b7ob7ob7ob7ob7o17b7o41b7o9b7ob7ob7ob7ob7ob&lt;br /&gt;
7o9b7ob7ob7ob7ob7ob7ob7o34bo$34bobo5bobo5bobo5bobo5bobo21bobo45bobo13b&lt;br /&gt;
obo5bobo5bobo5bobo5bobo5bobo13bobo5bobo5bobo5bobo5bobo5bobo5bobo$35bo&lt;br /&gt;
7bo7bo7bo7bo23bo47bo15bo7bo7bo7bo7bo7bo15bo7bo7bo7bo7bo7bo7bo6$43bo7bo&lt;br /&gt;
23bo15bo7bo7bo7bo7bo7bo7bo15bo7bo23bo7bo15bo7bo23bo7bo$42bobo5bobo21bo&lt;br /&gt;
bo13bobo5bobo5bobo5bobo5bobo5bobo5bobo13bobo5bobo21bobo5bobo13bobo5bob&lt;br /&gt;
o21bobo5bobo$40b7ob7o17b7o9b7ob7ob7ob7ob7ob7ob7o9b7ob7o17b7ob7o9b7ob7o&lt;br /&gt;
17b7ob7o42bo$40bo2bo2bobo2bo2bo17bo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bobo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bo2bo&lt;br /&gt;
2bobo2bo2bo17bo2bo2bobo2bo2bo41bobo$40b7ob7o17b7o9b7ob7ob7ob7ob7ob7ob&lt;br /&gt;
7o9b7ob7o17b7ob7o9b7ob7o17b7ob7o40bobobo$294bobobobo$40b7ob7o17b7o9b7o&lt;br /&gt;
b7ob7ob7ob7ob7ob7o9b7ob7o17b7ob7o9b7ob7o17b7ob7o40bobobo$40bo2bo2bobo&lt;br /&gt;
2bo2bo17bo2bo2bo9bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo&lt;br /&gt;
2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo2bo9bo2bo2bobo2bo2bo17bo2bo2bobo2bo&lt;br /&gt;
2bo41bobo$40b7ob7o17b7o9b7ob7ob7ob7ob7ob7ob7o9b7ob7o17b7ob7o9b7ob7o17b&lt;br /&gt;
7ob7o42bo$42bobo5bobo21bobo13bobo5bobo5bobo5bobo5bobo5bobo5bobo13bobo&lt;br /&gt;
5bobo21bobo5bobo13bobo5bobo21bobo5bobo$43bo7bo23bo15bo7bo7bo7bo7bo7bo&lt;br /&gt;
7bo15bo7bo23bo7bo15bo7bo23bo7bo6$51bo7bo7bo7bo15bo7bo23bo7bo31bo7bo7bo&lt;br /&gt;
7bo31bo7bo7bo7bo$50bobo5bobo5bobo5bobo13bobo5bobo21bobo5bobo29bobo5bob&lt;br /&gt;
o5bobo5bobo29bobo5bobo5bobo5bobo$48b7ob7ob7ob7o9b7ob7o17b7ob7o25b7ob7o&lt;br /&gt;
b7ob7o25b7ob7ob7ob7o50bo$48bo2bo2bobo2bo2bobo2bo2bobo2bo2bo9bo2bo2bobo&lt;br /&gt;
2bo2bo17bo2bo2bobo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo25bo2bo2bobo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bo49bobo$48b7ob7ob7ob7o9b7ob7o17b7ob7o25b7ob7ob7ob&lt;br /&gt;
7o25b7ob7ob7ob7o48bobobo$294bobobobo$48b7ob7ob7ob7o9b7ob7o17b7ob7o25b&lt;br /&gt;
7ob7ob7ob7o25b7ob7ob7ob7o48bobobo$48bo2bo2bobo2bo2bobo2bo2bobo2bo2bo9b&lt;br /&gt;
o2bo2bobo2bo2bo17bo2bo2bobo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo25b&lt;br /&gt;
o2bo2bobo2bo2bobo2bo2bobo2bo2bo49bobo$48b7ob7ob7ob7o9b7ob7o17b7ob7o25b&lt;br /&gt;
7ob7ob7ob7o25b7ob7ob7ob7o50bo$50bobo5bobo5bobo5bobo13bobo5bobo21bobo5b&lt;br /&gt;
obo29bobo5bobo5bobo5bobo29bobo5bobo5bobo5bobo$51bo7bo7bo7bo15bo7bo23bo&lt;br /&gt;
7bo31bo7bo7bo7bo31bo7bo7bo7bo6$59bo7bo31bo7bo7bo7bo47bo7bo47bo7bo$58bo&lt;br /&gt;
bo5bobo29bobo5bobo5bobo5bobo45bobo5bobo45bobo5bobo$56b7ob7o25b7ob7ob7o&lt;br /&gt;
b7o41b7ob7o41b7ob7o48b2o$56bo2bo2bobo2bo2bo25bo2bo2bobo2bo2bobo2bo2bob&lt;br /&gt;
o2bo2bo41bo2bo2bobo2bo2bo41bo2bo2bobo2bo2bo48bobo5bo$56b7ob7o25b7ob7ob&lt;br /&gt;
7ob7o41b7ob7o41b7ob7o50bo6bo$290bo2bo3bo$56b7ob7o25b7ob7ob7ob7o41b7ob&lt;br /&gt;
7o41b7ob7o50bo6bo$56bo2bo2bobo2bo2bo25bo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
41bo2bo2bobo2bo2bo41bo2bo2bobo2bo2bo48bobo5bo$56b7ob7o25b7ob7ob7ob7o&lt;br /&gt;
41b7ob7o41b7ob7o48b2o$58bobo5bobo29bobo5bobo5bobo5bobo45bobo5bobo45bob&lt;br /&gt;
o5bobo$59bo7bo31bo7bo7bo7bo47bo7bo47bo7bo6$67bo7bo7bo7bo7bo23bo7bo7bo&lt;br /&gt;
7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo$66bobo5bobo5bobo5bobo5bobo21bobo5bo&lt;br /&gt;
bo5bobo5bobo5bobo5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo2bo$64b7o&lt;br /&gt;
b7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$64bo2b&lt;br /&gt;
o2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo2bo2bobo2bo2bobo2bo2bobo2bo2bo&lt;br /&gt;
bo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b&lt;br /&gt;
o2bobo2b4o3bo$64b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7ob7ob7ob7ob&lt;br /&gt;
7ob7ob3o6bobo$286bo3bobo$64b7ob7ob7ob7ob7o17b7ob7ob7ob7ob7ob7ob7o57b7o&lt;br /&gt;
b7ob7ob7ob7ob7ob3o6bobo$64bo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo17bo&lt;br /&gt;
2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bo57bo2bo2bobo2bo&lt;br /&gt;
2bobo2bo2bobo2bo2bobo2bo2bobo2bo2bobo2b4o3bo$64b7ob7ob7ob7ob7o17b7ob7o&lt;br /&gt;
b7ob7ob7ob7ob7o57b7ob7ob7ob7ob7ob7ob2obob5o$66bobo5bobo5bobo5bobo5bobo&lt;br /&gt;
21bobo5bobo5bobo5bobo5bobo5bobo5bobo61bobo5bobo5bobo5bobo5bobo5bobo5bo&lt;br /&gt;
2bo$67bo7bo7bo7bo7bo23bo7bo7bo7bo7bo7bo7bo63bo7bo7bo7bo7bo7bo7bo!&lt;br /&gt;
|position = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
And so on.&lt;br /&gt;
&lt;br /&gt;
The sequence appears to be extremely long... But surprisingly, repeat.py assisted with fine pattern recognition can find the full sequence rather quickly. Set the rule to W90, Wolfram&#039;s Rule 90, where the replication of a single dot is printed row by row. Apply (2,16,16) by above 1024 times in repeat.py, and observe the lower left to middle region carefully. A section can be isolated that reveals entire history of the sequence! Rest of the story is in [https://conwaylife.com/forums/viewtopic.php?p=150644#p150644 this post].&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=User:GUYTU6J/List_of_rules_apgsearched_by_GUYTU6J&amp;diff=138676</id>
		<title>User:GUYTU6J/List of rules apgsearched by GUYTU6J</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=User:GUYTU6J/List_of_rules_apgsearched_by_GUYTU6J&amp;diff=138676"/>
		<updated>2023-10-15T02:35:16Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: the links are directed to the mirror &amp;lt;tt&amp;gt;gol.hatsya.co.uk&amp;lt;/tt&amp;gt;, not &amp;lt;tt&amp;gt;catagolue.appspot.com&amp;lt;/tt&amp;gt; (old location) or &amp;lt;tt&amp;gt;catagolue.hatsya.com&amp;lt;/tt&amp;gt; (new location since September 28, 2020, which is longer). The format &amp;lt;nowiki&amp;gt;{{LinkCatagolueRule|b3-jknr4ity5ijk6i8s23-a4city6c7c|rulename=Glimmering Garden}}&amp;lt;/nowiki&amp;gt; malfunctions here: it will make the separation command || ignored and three columns merged into the first. The speed estimation is for my laptop only.&lt;br /&gt;
&lt;br /&gt;
List of rules searched with &amp;quot;An account that people with its key can use&amp;quot;:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! [[Rule]]&lt;br /&gt;
! [[Symmetry]]&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3s23 b3s23([[Conway&#039;s Game of Life]])] || C4_4, D2_+1, 4Glider_stdin, 8Glider_stdin, ikpx2_stdin || 4G stopped on March 14, 2020, 8G paused on June 19&amp;lt;br&amp;gt;I was listed as the 11th discoverer of a megasized_101h C4_4 soup, namely [https://gol.hatsya.co.uk/hashsoup/C4_4/k_EQSUyCnLstx824894/b3s23 k_EQSUyCnLstx824894]&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-jknr4ity5ijk6i8s23-a4city6c7c b3-jknr4ity5ijk6i8s23-a4city6c7c([[User:GUYTU6J/OCA:Glimmering_Garden]])] || C1, C2_2, C4_1, C4_4, D2_x, D4_+4, D4_x1, D4_x4, D8_1, D8_4, 1x256&amp;lt;br&amp;gt;ikpx2_stdin, tcollision_in_phase_stdin, tcollision_stdin || generally long-term ongoing, D8_1 very recommended; scripts for T-collisions adapted from [https://www.conwaylife.com/forums/viewtopic.php?f=2&amp;amp;t=4257 here]&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2i3-cr4itw5aejqr6akn78s2-i3-aek4cij5ci7e b2i3-cr4itw5aejqr6akn78s2-i3-aek4cij5ci7e] || C1, D2_x, D8_1, D8_4 || reason: glider with two 4×4 checkerboards is a 14c/2294 rake, see [https://conwaylife.com/forums/viewtopic.php?p=167510#p167510 spaceship collection]&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2i3-ek4-aitwz5k6n8s23-a4ity5e6n b2i3-ek4-aitwz5k6n8s23-a4ity5e6n] || C1 || reason: 2c/2100d spaceship made of three 4c/76o spaceships&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2i34c6cen7c8s2-i3-q4c5a6e8 b2i34c6cen7c8s2-i3-q4c5a6e8(MaritimeLife)] || C1 || per request by [[User:Moosey]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2in3-jknq4ijy5cik6cik7es23-a4ity5ejn6i b2in3-jknq4ijy5cik6cik7es23-a4ity5ejn6i] || C1 || reason: near-explosive,&amp;lt;br&amp;gt;dominated by 6c/102d spaceship and blinkers&amp;lt;br&amp;gt;&#039;&#039;&#039;May choke apgsearch&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2in3aceir4eity5i6ek7es2-in3-aey4ai5ci7c b2in3aceir4eity5i6ek7es2-in3-aey4ai5ci7c] || C1 || reason: sparky&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2in3aceir4eity5i6ik7es2-in3-a4ity5ejnq6in7e b2in3aceir4eity5i6ik7es2-in3-a4ity5ejnq6in7e] || C1 || reason: full of replicator-like sparks but not explosive, interesting&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2in3aceir4eity5ik6k7es2-in3-ak4ity5enq6in7e b2in3aceir4eity5ik6k7es2-in3-ak4ity5enq6in7e] || C1 || reason: very sparky&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2in3aceir4ity5ik6k7es2-in3-ak4ity5e6in7e b2in3aceir4ity5ik6k7es2-in3-ak4ity5e6in7e] || C1 || reason: still lives dominate but rotating p132 exists&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2in3aiqry4cnqty5ce6k7es2-i3-a4eirtyz5acijn6aik7e b2in3aiqry4cnqty5ce6k7es2-i3-a4eirtyz5acijn6aik7e] || C1 || reason: 72c/6102o where an reflectorless rotating&amp;lt;br&amp;gt;oscillator hassles still lives&amp;lt;br&amp;gt;&#039;&#039;&#039;Slow search speed&#039;&#039;&#039; (10000 soups/~2 hours 45 minutes in WSL)&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2k3acijr4ijqy6i7cs2aek3ijnqr4it5n b2k3acijr4ijqy6i7cs2aek3ijnqr4it5n(Omosso)] || C1 || reason: multiple high-period OMOS&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2k3ai4jtz5iy6is2-ci3-acey4ik5q b2k3ai4jtz5iy6is2-ci3-acey4ik5q] || C1 || reason: asymmetric sparky diagonal 6c/128d&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2k3aiq4ej5i7cs2aek3ijnqr4i b2k3aiq4ej5i7cs2aek3ijnqr4i] || C1 || reason: common (9,2)c/22 and many 2c/4o, 4c/20o, 3c/12d and 8c/38d&amp;lt;br&amp;gt;&#039;&#039;&#039;May choke apgsearch&#039;&#039;&#039; (e.g. seed k_NrgC3PP472cn)&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-ekq4c5e6i7es2-n3-aeny4ceikrt5c6ein b2kn3-ekq4c5e6i7es2-n3-aeny4ceikrt5c6ein] || C1 || reason: slope-143 p301 spaceship&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-ekqr4i5eq6n8s23-aeny4cikqr5ek6ace7c b2kn3-ekqr4i5eq6n8s23-aeny4cikqr5ek6ace7c(Clousdale)] || C1, C4_1, D8_4, ikpx2_stdin || reason: rotating engine powering p16848,&amp;lt;br&amp;gt;chaotic crystallographic defects on checkerboard agar&amp;lt;br&amp;gt;&#039;&#039;&#039;May choke apgsearch but rarely&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-ekqr4ik5enqys2-n3ijkqr4ceikqr5ek6aei b2kn3-ekqr4ik5enqys2-n3ijkqr4ceikqr5ek6aei] || D8_4 || reason: rotating engine powering p37440&amp;lt;br&amp;gt;&#039;&#039;&#039;Slow search speed&#039;&#039;&#039; at lower symmetries due to enormous puffer&amp;amp;breeder&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-kq4cit5ce6cns23ijkqr4ceikr5ek b2kn3-kq4cit5ce6cns23ijkqr4ceikr5ek] || C1 || reason: rotating engine powering p15960&amp;lt;br&amp;gt;&#039;&#039;&#039;Slow search speed&#039;&#039;&#039; (10000 soups/~1 hours 40 minutes in Cygwin)&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-kq4eikwzs23ijkqr4ikr b2kn3-kq4eikwzs23ijkqr4ikr] || C1 || reason: unknown?&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-kq6i7e8s2-n3ijkqr4ikr5e6cn7e b2kn3-kq6i7e8s2-n3ijkqr4ikr5e6cn7e] || C1 || reason: (120,30)c/1500 spaceship&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-kqr4ik5nqy8s2-n3ijkqr4cikqr5ek6aei7e b2kn3-kqr4ik5nqy8s2-n3ijkqr4cikqr5ek6aei7e] || C1 || reason: big (2,1)c/522 spaceship&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-n4ckq5r6-aks23-aekn4ceikqty5ej6-ai7e b2kn3-n4ckq5r6-aks23-aekn4ceikqty5ej6-ai7e] || C1 || reason: failed replicating 28c/5140d SMOS&amp;lt;br&amp;gt;&#039;&#039;&#039;Slow search speed&#039;&#039;&#039; (10000 soups/~1 hours 20 minutes in Cygwin)&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2kn3-nr4ct6aeks23-aeny4ceiknq6ace b2kn3-nr4ct6aeks23-aeny4ceiknq6ace] || C1 || reason: 36c/1434d self-climbing SMOS&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2n3-k4jkqw5er6is23-q4c b2n3-k4jkqw5er6is23-q4c] || C1 || reason: glider+block 7c/82d spaceship,&amp;lt;br&amp;gt;XWSS is supported, pre-loaf becomes two tripoles&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b2n3s23-q b2n3s23-q(Leaplife)] || D2_x, D8_1, D8_4 || per request by [[User:Ultimium]]. Stopped in January 2020&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-c7es2-in3-a4ciqyz5ai6i b3-c7es2-in3-a4ciqyz5ai6i] || C1 || reason: rotating p1580, p316 and yl395 glider gun&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-cjn4ejktz5cj6i7cs2-ci3-ae4iq5ae6e b3-cjn4ejktz5cj6i7cs2-ci3-ae4iq5ae6e] || C1 || reason: 9c/1764d spaceship made of 2c/38 and oscillator&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-ckq4cekq5ery6iks2-ci3-aek4i6kn b3-ckq4cekq5ery6iks2-ci3-aek4i6kn] || C1 || reason: p66 oscillator made of gliders, p98, p114, p240 and p291 oscillators made of c/12o spaceships&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-ckq4ck5ys2-ci3-aek4i6k b3-ckq4ck5ys2-ci3-aek4i6k] || C1 || reason: p66 oscillator made of gliders, p80 and p224 RRO&amp;lt;br&amp;gt;&#039;&#039;&#039;May significantly consume RAM and choke apgsearch&#039;&#039;&#039;, see [https://conwaylife.com/forums/viewtopic.php?p=156327#p156327 issue report]&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-ckqr4city5aky7cs2-i3-ae4it5a6k b3-ckqr4city5aky7cs2-i3-ae4it5a6k] || C1 || reason: c/3d, c/4d, c/7d, 3c/50d, p68, and&amp;lt;br&amp;gt;a massive t-tetromino explosion, all leading to dynamics&amp;lt;br&amp;gt; &#039;&#039;&#039;Always chokes apgsearch&#039;&#039;&#039;, so requiring [https://www.conwaylife.com/forums/viewtopic.php?p=135599#p135599 spaceinvaders hacked version] &lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-ckr5ys2-i3-aek4ci5c b3-ckr5ys2-i3-aek4ci5c(Harvest Moon)] || C1 || reason: gliders and 4×4 checkerboard pieces are good building blocks, linear replicator and puffers are common&amp;lt;br&amp;gt;&#039;&#039;&#039;May choke apgsearch&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-cq4ckq5jy6is2-ci3-aek4cit6ek b3-cq4ckq5jy6is2-ci3-aek4cit6ek] || C1 || reason: p66 oscillator made of gliders (which in turn dimerizes to a 6c/42o spaceship), p64 and p172 RRO, 7c/50d spaceship&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-cr4cet6is2-i3-a4cit5acr6i7 b3-cr4cet6is2-i3-a4cit5acr6i7] || C1 || reason: rotating p112, 2c/13o century and replicator wave&amp;lt;br&amp;gt;&#039;&#039;&#039;Slow search speed&#039;&#039;&#039; (10000 soups/~1 hours in WSL)&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3-eny4e7es2aek3ijnqr4cir5cen6e7e8 b3-eny4e7es2aek3ijnqr4cir5cen6e7e8] || C1 || reason: (26,57)c/1662 carrying many tripoles&amp;lt;br&amp;gt;&#039;&#039;&#039;Slow search speed&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b34city5eqry6n8s23-a4city6c7 b34city5eqry6n8s23-a4city6c7] || C1, D8_4 || reason: period-156 oscillator made of spaceships and period-188 oscillator&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b34city5eqry6n8s23-a4city6c7c b34city5eqry6n8s23-a4city6c7c] || C1, D2_+1 || reason: sparky?&amp;lt;br&amp;gt;&#039;&#039;&#039;May choke apgsearch&#039;&#039;&#039; such as k_emfx9rxEiKGY&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b34citys23ijqr4inty b34citys23ijqr4inty] || C1 || reason: seeking for something among abundant xp4_4r4?&amp;lt;br&amp;gt;&#039;&#039;&#039;Spaceship flotillae separation suffers&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b34eitws23-knr b34eitws23-knr] || C1 || reason: abundant xq6_137e731 and xq8_15cse51?&amp;lt;br&amp;gt;&#039;&#039;&#039;Spaceship flotillae separation suffers&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b38s23 b38s23([[Pedestrian Life]])] || C1, D2_x || rarely search it because of haul verification &lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3aeijq4cqt5jr6i7cs2-ci3-ek4ei5aein6ac7e b3aeijq4cqt5jr6i7cs2-ci3-ek4ei5aein6ac7e] || C1 || reason: rotating engine powering p61248&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3aeijr4jk5cr6ci7cs2-i3-ak4-ajkqw5cjknr6ci7c8 b3aeijr4jk5cr6ci7cs2-i3-ak4-ajkqw5cjknr6ci7c8] || C1 || per request by [[User:Saka]]. reason: 12c/3328o&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3aijn4ce5eys2-i3-aky4ceity5aj b3aijn4ce5eys2-i3-aky4ceity5aj] || C1 || reason: p48 flipper and p172 RRO&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3aijq4cetz5er6ei8s2-i3-ak4cit5a6i b3aijq4cetz5er6ei8s2-i3-ak4cit5a6i] || C1 || reason: (9,7)c/483 consisting of a p156 and a boat&amp;lt;br&amp;gt;&#039;&#039;&#039;May choke apgsearch&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3air4jk5ckns2aek3-aey4iq5aejn6cn b3air4jk5ckns2aek3-aey4iq5aejn6cn] || C1 || reason: 30c/2976o carrying many small RROs&amp;lt;br&amp;gt;&#039;&#039;&#039;Slow search speed&#039;&#039;&#039; (10000 soups/~1 hours 25 minutes in Cygwin)&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/b3s2-in3-a4eiqy5ai6i b3s2-in3-a4eiqy5ai6i] || C1, D8_1 || reason: large sparky p184&lt;br /&gt;
|-&lt;br /&gt;
| [https://gol.hatsya.co.uk/census/g4b2s345/ g4b2s345([[Star Wars]])] || 32x32_40pct_C1_soup_in_64x64_box_stdin || reason: testing custom soup-generating script&amp;lt;br&amp;gt;&#039;&#039;&#039;Small hauls only&#039;&#039;&#039; (a haul with above 350 soups easily exceeds size limit) &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Random rules that look somewhat more interesting than average...&lt;br /&gt;
[https://catagolue.hatsya.com/census/b2-a3aer4ejrtz5inqy6cs01c2-kn3cn4ejknqw5ck6cn]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b2cei3cej4eijr5cny6cik7es2aei3ejknr4eijnrz5ckry6-an7e]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b2cei3ej4eijrwz5cinry6acn78s2ae3-ikqy4iry5cin6ace]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b2cei3in4qw5kn6-i7cs14ciknw5-einy6-ac8]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b2cek3aejk4aijr5c6ks2-ac3-cij4ijrwz5eir7e]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b2ci3aikr4cik5c6a7es02c3-ejkr4acinwy5er6ei7]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b2kn3-ekqr4i5eqys2-n3ijkqr4ikqr5ae6a]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b2kn3aijnr4acikys2n3-cek4aijnt5-aky67c8]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b3-cknq4kz5rs2-in3-cky4et5ikr6c]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b3-q4jw6-in7s2n3-ky4aeknrty5y678]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b3-rs2-ckn3-cknqy4-acknqwy5-ejkq6c7-c]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b3ai4aekqyz5cery6en8s2-ci3-ace4inqrt5-cjk6ak]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b3aijry5cey6c7es23-aky4-ajkqw5-aiqy6cin7]&lt;br /&gt;
[https://catagolue.hatsya.com/census/b3aiky4cejy6kn7cs2-a3aeiny4-tz5ijkr6-a7c8]&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Talk:Catagolue&amp;diff=137753</id>
		<title>Talk:Catagolue</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Talk:Catagolue&amp;diff=137753"/>
		<updated>2023-09-28T09:46:12Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* Object comments */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==4x64, 2x128, 1x256, 32x32==&lt;br /&gt;
I did that. -wwei23 2:54PM 6/23/2017 NY time&lt;br /&gt;
&lt;br /&gt;
:Would you share your version of apgsearch that you used for these? [[User:Apple Bottom|Apple Bottom]] ([[User talk:Apple Bottom|talk]]) 21:19, 23 June 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Sure, this is modified because I had it use my key, here it uses &amp;quot;#anon&amp;quot;. These modifications are trivial(I use JS, not PY!). Also, won&#039;t apgsearch eventually run out of soups to search?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# *************************************&lt;br /&gt;
# * Ash Pattern Generator (apgsearch) *&lt;br /&gt;
# *************************************&lt;br /&gt;
# * Version: v1.1  (beta release)     *&lt;br /&gt;
# *************************************&lt;br /&gt;
#&lt;br /&gt;
# -- Processes roughly 100 soups per (second . core . GHz), using caching&lt;br /&gt;
#    and machine-learning to optimise itself during runtime.&lt;br /&gt;
#&lt;br /&gt;
# -- Can perfectly identify oscillators with period &amp;lt; 1000, well-separated&lt;br /&gt;
#    spaceships of low period, and certain infinite-growth patterns (such&lt;br /&gt;
#    guns and puffers, including both naturally-occurring types of switch&lt;br /&gt;
#    engine).&lt;br /&gt;
#&lt;br /&gt;
# -- Separates most pseudo-objects into their constituent parts, including&lt;br /&gt;
#    all pseudo-still-lifes of 18 or fewer live cells (which is the maximum&lt;br /&gt;
#    theoretically possible, given there is a 19-cell pseudo-still-life&lt;br /&gt;
#    with two distinct decompositions).&lt;br /&gt;
#&lt;br /&gt;
# -- Correctly separates non-interacting standard spaceships, irrespective&lt;br /&gt;
#    of their proximity. In particular, a LWSS-on-LWSS is registered as two&lt;br /&gt;
#    LWSSes, whereas an LWSS-on-HWSS is registered as a single spaceship&lt;br /&gt;
#    (since they interact by suppressing sparks).&lt;br /&gt;
#&lt;br /&gt;
# -- At least 99.9999999999% reliable at identifying objects in asymmetrical&lt;br /&gt;
#    soups in B3/S23 (based on the fact that out of over 10^12 objects that&lt;br /&gt;
#    have appeared, there are no errors).&lt;br /&gt;
#&lt;br /&gt;
# -- Scores soups based on the total excitement of the ash objects.&lt;br /&gt;
#&lt;br /&gt;
# -- Support for other outer-totalistic rules, including detection and&lt;br /&gt;
#    classification of various types of infinite growth.&lt;br /&gt;
#&lt;br /&gt;
# -- Support for symmetrical soups.&lt;br /&gt;
#&lt;br /&gt;
# -- Uploads results to the server at http://catagolue.appspot.com (which&lt;br /&gt;
#    currently has collected over 2.7 * 10^12 objects).&lt;br /&gt;
#&lt;br /&gt;
# -- Peer-reviews others&#039; contributions to ensure data integrity for the&lt;br /&gt;
#    asymmetrical B3/S23 census.&lt;br /&gt;
#&lt;br /&gt;
# By Adam P. Goucher, with contributions from Andrew Trevorrow, Tom Rokicki,&lt;br /&gt;
# Nathaniel Johnston, Dave Greene and Richard Schank.&lt;br /&gt;
&lt;br /&gt;
import golly as g&lt;br /&gt;
from glife import rect, pattern&lt;br /&gt;
import time&lt;br /&gt;
import math&lt;br /&gt;
import operator&lt;br /&gt;
import hashlib&lt;br /&gt;
import datetime&lt;br /&gt;
import os&lt;br /&gt;
import urllib2&lt;br /&gt;
import RANDOM&lt;br /&gt;
&lt;br /&gt;
def get_server_address():&lt;br /&gt;
    # Should be &#039;http://catagolue.appspot.com&#039; for the released version,&lt;br /&gt;
    # and &#039;http://localhost:8080&#039; for the development version:    &lt;br /&gt;
    return &#039;http://catagolue.appspot.com&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Engages with Catagolue&#039;s authentication system (&#039;payment over SHA-256&#039;,&lt;br /&gt;
# affectionately abbreviated to &#039;payosha256&#039;):&lt;br /&gt;
#&lt;br /&gt;
# The payosha256_key can be obtained from logging into Catagolue in your&lt;br /&gt;
# web browser and visiting http://catagolue.appspot.com/payosha256&lt;br /&gt;
def authenticate(payosha256_key, operation_name):&lt;br /&gt;
&lt;br /&gt;
    g.show(&amp;quot;Authenticating with Catagolue via the payosha256 protocol...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    payload = &amp;quot;payosha256:get_token:&amp;quot;+payosha256_key+&amp;quot;:&amp;quot;+operation_name&lt;br /&gt;
&lt;br /&gt;
    req = urllib2.Request(get_server_address() + &amp;quot;/payosha256&amp;quot;, payload, {&amp;quot;Content-type&amp;quot;: &amp;quot;text/plain&amp;quot;})&lt;br /&gt;
    f = urllib2.urlopen(req)&lt;br /&gt;
&lt;br /&gt;
    if (f.getcode() != 200):&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    resp = f.read()&lt;br /&gt;
&lt;br /&gt;
    lines = resp.splitlines()&lt;br /&gt;
&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        parts = line.split(&#039;:&#039;)&lt;br /&gt;
&lt;br /&gt;
        if (len(parts) &amp;lt; 3):&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        if (parts[1] != &#039;good&#039;):&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        target = parts[2]&lt;br /&gt;
        token = parts[3]&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Token &amp;quot; + token + &amp;quot; obtained from payosha256. Performing proof of work with target &amp;quot; + target + &amp;quot;...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        for nonce in xrange(100000000):&lt;br /&gt;
&lt;br /&gt;
            prehash = token + &amp;quot;:&amp;quot; + str(nonce)&lt;br /&gt;
            posthash = hashlib.sha256(prehash).hexdigest()&lt;br /&gt;
&lt;br /&gt;
            if (posthash &amp;lt; target):&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
        if (posthash &amp;gt; target):&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;String &amp;quot;+prehash+&amp;quot; is sufficiently valuable (&amp;quot;+posthash+&amp;quot; &amp;lt; &amp;quot;+target+&amp;quot;).&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        payload = &amp;quot;payosha256:pay_token:&amp;quot;+prehash+&amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return payload&lt;br /&gt;
&lt;br /&gt;
    return None&lt;br /&gt;
&lt;br /&gt;
# Sends the results to Catagolue:&lt;br /&gt;
def catagolue_results(results, payosha256_key, operation_name, endpoint=&amp;quot;/apgsearch&amp;quot;, return_point=None):&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
&lt;br /&gt;
        payload = authenticate(&amp;quot;#anon&amp;quot;, operation_name)&lt;br /&gt;
&lt;br /&gt;
        if payload is None:&lt;br /&gt;
            return 1&lt;br /&gt;
&lt;br /&gt;
        payload += results&lt;br /&gt;
&lt;br /&gt;
        req = urllib2.Request(get_server_address() + endpoint, payload, {&amp;quot;Content-type&amp;quot;: &amp;quot;text/plain&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
        f = urllib2.urlopen(req)&lt;br /&gt;
&lt;br /&gt;
        if (f.getcode() != 200):&lt;br /&gt;
            return 2&lt;br /&gt;
&lt;br /&gt;
        resp = f.read()&lt;br /&gt;
&lt;br /&gt;
        try:&lt;br /&gt;
            f2 = open(g.getdir(&amp;quot;data&amp;quot;)+&amp;quot;catagolue-response.txt&amp;quot;, &#039;w&#039;)&lt;br /&gt;
            f2.write(resp)&lt;br /&gt;
            f2.close()&lt;br /&gt;
&lt;br /&gt;
            if return_point is not None:&lt;br /&gt;
                return_point[0] = resp&lt;br /&gt;
            &lt;br /&gt;
        except:&lt;br /&gt;
            g.warn(&amp;quot;Unable to save catagolue response file.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    except:&lt;br /&gt;
&lt;br /&gt;
        return 1&lt;br /&gt;
&lt;br /&gt;
# Takes approximately 350 microseconds to construct a 16-by-16 soup based&lt;br /&gt;
# on a SHA-256 cryptographic hash in the obvious way.&lt;br /&gt;
def hashsoup(instring, sym):&lt;br /&gt;
&lt;br /&gt;
    s = hashlib.sha256(instring).digest()&lt;br /&gt;
&lt;br /&gt;
    thesoup = []&lt;br /&gt;
&lt;br /&gt;
    if sym in [&#039;D2_x&#039;, &#039;D8_1&#039;, &#039;D8_4&#039;]:&lt;br /&gt;
        d = 1&lt;br /&gt;
    elif sym in [&#039;D4_x1&#039;, &#039;D4_x4&#039;]:&lt;br /&gt;
        d = 2&lt;br /&gt;
    else:&lt;br /&gt;
        d = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
    for j in xrange(32):&lt;br /&gt;
&lt;br /&gt;
        t = ord(s[j])&lt;br /&gt;
&lt;br /&gt;
        for k in xrange(8):&lt;br /&gt;
&lt;br /&gt;
            if (sym == &#039;8x32&#039;):&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 4)&lt;br /&gt;
                y = int(j / 4)&lt;br /&gt;
                &lt;br /&gt;
            elif (sym == &#039;4x64&#039;):&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 8)&lt;br /&gt;
                y = int(j / 8)&lt;br /&gt;
        &lt;br /&gt;
            elif (sym == &#039;2x128&#039;):&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 16)&lt;br /&gt;
                y = int(j / 16)&lt;br /&gt;
                &lt;br /&gt;
            elif (sym == &#039;1x256&#039;):&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 32)&lt;br /&gt;
                y = int(j / 32)&lt;br /&gt;
                &lt;br /&gt;
            else:&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 2)&lt;br /&gt;
                y = int(j / 2)&lt;br /&gt;
&lt;br /&gt;
            if (t &amp;amp; (1 &amp;lt;&amp;lt; (7 - k))):&lt;br /&gt;
&lt;br /&gt;
                if ((d == 0) | (x &amp;gt;= y)):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(x)&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
&lt;br /&gt;
                    if (sym == &#039;32x32&#039;):&lt;br /&gt;
&lt;br /&gt;
                        thesoup.append(x+16)&lt;br /&gt;
                        thesoup.append(y)&lt;br /&gt;
                        thesoup.append(x)&lt;br /&gt;
                        thesoup.append(y+16)&lt;br /&gt;
                        thesoup.append(x+16)&lt;br /&gt;
                        thesoup.append(y+16)&lt;br /&gt;
&lt;br /&gt;
                elif (sym == &#039;D4_x1&#039;):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(-x)&lt;br /&gt;
&lt;br /&gt;
                elif (sym == &#039;D4_x4&#039;):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(-x-1)&lt;br /&gt;
&lt;br /&gt;
                if ((sym == &#039;D4_x1&#039;) &amp;amp; (x == y)):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(-x)&lt;br /&gt;
&lt;br /&gt;
                if ((sym == &#039;D4_x4&#039;) &amp;amp; (x == y)):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(-x-1)&lt;br /&gt;
&lt;br /&gt;
    # Checks for diagonal symmetries:&lt;br /&gt;
    if (d &amp;gt;= 1):&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
            thesoup.append(thesoup[x])&lt;br /&gt;
        if d == 2:&lt;br /&gt;
            if (sym == &#039;D4_x1&#039;):&lt;br /&gt;
                for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
                    thesoup.append(-thesoup[x+1])&lt;br /&gt;
                    thesoup.append(-thesoup[x])&lt;br /&gt;
            else:&lt;br /&gt;
                for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
                    thesoup.append(-thesoup[x+1] - 1)&lt;br /&gt;
                    thesoup.append(-thesoup[x] - 1)&lt;br /&gt;
            return thesoup&lt;br /&gt;
&lt;br /&gt;
    # Checks for orthogonal x symmetry:&lt;br /&gt;
    if sym in [&#039;D2_+1&#039;, &#039;D4_+1&#039;, &#039;D4_+2&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x])&lt;br /&gt;
            thesoup.append(-thesoup[x+1])&lt;br /&gt;
    elif sym in [&#039;D2_+2&#039;, &#039;D4_+4&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x])&lt;br /&gt;
            thesoup.append(-thesoup[x+1] - 1)&lt;br /&gt;
&lt;br /&gt;
    # Checks for orthogonal y symmetry:&lt;br /&gt;
    if sym in [&#039;D4_+1&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x])&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
    elif sym in [&#039;D4_+2&#039;, &#039;D4_+4&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x] - 1)&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
&lt;br /&gt;
    # Checks for rotate2 symmetry:&lt;br /&gt;
    if sym in [&#039;C2_1&#039;, &#039;C4_1&#039;, &#039;D8_1&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x])&lt;br /&gt;
            thesoup.append(-thesoup[x+1])&lt;br /&gt;
    elif sym in [&#039;C2_2&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x])&lt;br /&gt;
            thesoup.append(-thesoup[x+1]-1)&lt;br /&gt;
    elif sym in [&#039;C2_4&#039;, &#039;C4_4&#039;, &#039;D8_4&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x]-1)&lt;br /&gt;
            thesoup.append(-thesoup[x+1]-1)&lt;br /&gt;
&lt;br /&gt;
    # Checks for rotate4 symmetry:&lt;br /&gt;
    if (sym in [&#039;C4_1&#039;, &#039;D8_1&#039;]):&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
            thesoup.append(-thesoup[x])&lt;br /&gt;
    elif (sym in [&#039;C4_4&#039;, &#039;D8_4&#039;]):&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
            thesoup.append(-thesoup[x]-1)&lt;br /&gt;
&lt;br /&gt;
    return thesoup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Obtains a canonical representation of any oscillator/spaceship that (in&lt;br /&gt;
# some phase) fits within a 40-by-40 bounding box. This representation is&lt;br /&gt;
# alphanumeric and lowercase, and so much more compact than RLE. Compare:&lt;br /&gt;
#&lt;br /&gt;
# Common name: pentadecathlon&lt;br /&gt;
# Canonical representation: 4r4z4r4&lt;br /&gt;
# Equivalent RLE: 2bo4bo$2ob4ob2o$2bo4bo!&lt;br /&gt;
#&lt;br /&gt;
# It is a generalisation of a notation created by Allan Weschler in 1992.&lt;br /&gt;
def canonise(duration):&lt;br /&gt;
&lt;br /&gt;
    representation = &amp;quot;#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # We need to compare each phase to find the one with the smallest&lt;br /&gt;
    # description:&lt;br /&gt;
    for t in xrange(duration):&lt;br /&gt;
&lt;br /&gt;
        rect = g.getrect()&lt;br /&gt;
        if (len(rect) == 0):&lt;br /&gt;
            return &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if ((rect[2] &amp;lt;= 40) &amp;amp; (rect[3] &amp;lt;= 40)):&lt;br /&gt;
            # Fits within a 40-by-40 bounding box, so eligible to be canonised.&lt;br /&gt;
            # Choose the orientation which results in the smallest description:&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0], rect[1], 1, 0, 0, 1))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0]+rect[2]-1, rect[1], -1, 0, 0, 1))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0], rect[1]+rect[3]-1, 1, 0, 0, -1))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0]+rect[2]-1, rect[1]+rect[3]-1, -1, 0, 0, -1))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0], rect[1], 0, 1, 1, 0))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0]+rect[2]-1, rect[1], 0, -1, 1, 0))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0], rect[1]+rect[3]-1, 0, 1, -1, 0))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0]+rect[2]-1, rect[1]+rect[3]-1, 0, -1, -1, 0))&lt;br /&gt;
&lt;br /&gt;
        g.run(1)&lt;br /&gt;
&lt;br /&gt;
    return representation&lt;br /&gt;
&lt;br /&gt;
# A subroutine used by canonise:&lt;br /&gt;
def canonise_orientation(length, breadth, ox, oy, a, b, c, d):&lt;br /&gt;
&lt;br /&gt;
    representation = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    chars = &amp;quot;0123456789abcdefghijklmnopqrstuvwxyz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    for v in xrange(int((breadth-1)/5)+1):&lt;br /&gt;
        zeroes = 0&lt;br /&gt;
        if (v != 0):&lt;br /&gt;
            representation += &amp;quot;z&amp;quot;&lt;br /&gt;
        for u in xrange(length):&lt;br /&gt;
            baudot = 0&lt;br /&gt;
            for w in xrange(5):&lt;br /&gt;
                x = ox + a*u + b*(5*v + w)&lt;br /&gt;
                y = oy + c*u + d*(5*v + w)&lt;br /&gt;
                baudot = (baudot &amp;gt;&amp;gt; 1) + 16*g.getcell(x, y)&lt;br /&gt;
            if (baudot == 0):&lt;br /&gt;
                zeroes += 1&lt;br /&gt;
            else:&lt;br /&gt;
                if (zeroes &amp;gt; 0):&lt;br /&gt;
                    if (zeroes == 1):&lt;br /&gt;
                        representation += &amp;quot;0&amp;quot;&lt;br /&gt;
                    elif (zeroes == 2):&lt;br /&gt;
                        representation += &amp;quot;w&amp;quot;&lt;br /&gt;
                    elif (zeroes == 3):&lt;br /&gt;
                        representation += &amp;quot;x&amp;quot;&lt;br /&gt;
                    else:&lt;br /&gt;
                        representation += &amp;quot;y&amp;quot;&lt;br /&gt;
                        representation += chars[zeroes - 4]&lt;br /&gt;
                zeroes = 0&lt;br /&gt;
                representation += chars[baudot]&lt;br /&gt;
    return representation&lt;br /&gt;
&lt;br /&gt;
# Compares strings first by length, then by lexicographical ordering.&lt;br /&gt;
# A hash character is worse than anything else.&lt;br /&gt;
def compare_representations(a, b):&lt;br /&gt;
&lt;br /&gt;
    if (a == &amp;quot;#&amp;quot;):&lt;br /&gt;
        return b&lt;br /&gt;
    elif (b == &amp;quot;#&amp;quot;):&lt;br /&gt;
        return a&lt;br /&gt;
    elif (len(a) &amp;lt; len(b)):&lt;br /&gt;
        return a&lt;br /&gt;
    elif (len(b) &amp;lt; len(a)):&lt;br /&gt;
        return b&lt;br /&gt;
    elif (a &amp;lt; b):&lt;br /&gt;
        return a&lt;br /&gt;
    else:&lt;br /&gt;
        return b&lt;br /&gt;
&lt;br /&gt;
# Finds the gradient of the least-squares regression line corresponding&lt;br /&gt;
# to a list of ordered pairs:&lt;br /&gt;
def regress(pairlist):&lt;br /&gt;
&lt;br /&gt;
    cumx = 0.0&lt;br /&gt;
    cumy = 0.0&lt;br /&gt;
    cumvar = 0.0&lt;br /&gt;
    cumcov = 0.0&lt;br /&gt;
&lt;br /&gt;
    for x,y in pairlist:&lt;br /&gt;
&lt;br /&gt;
        cumx += x&lt;br /&gt;
        cumy += y&lt;br /&gt;
&lt;br /&gt;
    cumx = cumx / len(pairlist)&lt;br /&gt;
    cumy = cumy / len(pairlist)&lt;br /&gt;
&lt;br /&gt;
    for x,y in pairlist:&lt;br /&gt;
&lt;br /&gt;
        cumvar += (x - cumx)*(x - cumx)&lt;br /&gt;
        cumcov += (x - cumx)*(y - cumy)&lt;br /&gt;
&lt;br /&gt;
    return (cumcov / cumvar)&lt;br /&gt;
&lt;br /&gt;
# Analyses a pattern whose average population follows a power-law:&lt;br /&gt;
def powerlyse(stepsize, numsteps):&lt;br /&gt;
&lt;br /&gt;
    g.setalgo(&amp;quot;HashLife&amp;quot;)&lt;br /&gt;
    g.setbase(2)&lt;br /&gt;
    g.setstep(stepsize)&lt;br /&gt;
&lt;br /&gt;
    poplist = [0]*numsteps&lt;br /&gt;
&lt;br /&gt;
    poplist[0] = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
    pointlist = []&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(1, numsteps, 1):&lt;br /&gt;
&lt;br /&gt;
        g.step()&lt;br /&gt;
        poplist[i] = int(g.getpop()) + poplist[i-1]&lt;br /&gt;
&lt;br /&gt;
        if (i % 50 == 0):&lt;br /&gt;
&lt;br /&gt;
            g.fit()&lt;br /&gt;
            g.update()&lt;br /&gt;
&lt;br /&gt;
        if (i &amp;gt; numsteps/2):&lt;br /&gt;
&lt;br /&gt;
            pointlist.append((math.log(i),math.log(poplist[i]+1.0)))&lt;br /&gt;
&lt;br /&gt;
    power = regress(pointlist)&lt;br /&gt;
&lt;br /&gt;
    if (power &amp;lt; 1.10):&lt;br /&gt;
        return &amp;quot;unidentified&amp;quot;&lt;br /&gt;
    elif (power &amp;lt; 1.65):&lt;br /&gt;
        return &amp;quot;zz_REPLICATOR&amp;quot;&lt;br /&gt;
    elif (power &amp;lt; 2.05):&lt;br /&gt;
        return &amp;quot;zz_LINEAR&amp;quot;&lt;br /&gt;
    elif (power &amp;lt; 2.8):&lt;br /&gt;
        return &amp;quot;zz_EXPLOSIVE&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;zz_QUADRATIC&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Gets the period of an interleaving of degree-d polynomials:&lt;br /&gt;
def deepperiod(sequence, maxperiod, degree):&lt;br /&gt;
&lt;br /&gt;
    for p in xrange(1, maxperiod, 1):&lt;br /&gt;
&lt;br /&gt;
        good = True&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(maxperiod):&lt;br /&gt;
&lt;br /&gt;
            diffs = [0] * (degree + 2)&lt;br /&gt;
            for j in xrange(degree + 2):&lt;br /&gt;
&lt;br /&gt;
                diffs[j] = sequence[i + j*p]&lt;br /&gt;
&lt;br /&gt;
            # Produce successive differences:&lt;br /&gt;
            for j in xrange(degree + 1):&lt;br /&gt;
                for k in xrange(degree + 1):&lt;br /&gt;
                    diffs[k] = diffs[k] - diffs[k + 1]&lt;br /&gt;
&lt;br /&gt;
            if (diffs[0] != 0):&lt;br /&gt;
                good = False&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
        if (good):&lt;br /&gt;
            return p&lt;br /&gt;
    return -1&lt;br /&gt;
&lt;br /&gt;
# Analyses a linear-growth pattern, returning a hash:&lt;br /&gt;
def linearlyse(maxperiod):&lt;br /&gt;
&lt;br /&gt;
    poplist = [0]*(3*maxperiod)&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(3*maxperiod):&lt;br /&gt;
&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        poplist[i] = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
    p = deepperiod(poplist, maxperiod, 1)&lt;br /&gt;
&lt;br /&gt;
    if (p == -1):&lt;br /&gt;
        return &amp;quot;unidentified&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    difflist = [0]*(2*maxperiod)&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(2*maxperiod):&lt;br /&gt;
&lt;br /&gt;
        difflist[i] = poplist[i + p] - poplist[i]&lt;br /&gt;
&lt;br /&gt;
    q = deepperiod(difflist, maxperiod, 0)&lt;br /&gt;
&lt;br /&gt;
    moments = [0, 0, 0]&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(p):&lt;br /&gt;
&lt;br /&gt;
        moments[0] += (poplist[i + q] - poplist[i])&lt;br /&gt;
        moments[1] += (poplist[i + q] - poplist[i]) ** 2&lt;br /&gt;
        moments[2] += (poplist[i + q] - poplist[i]) ** 3&lt;br /&gt;
&lt;br /&gt;
    prehash = str(moments[1]) + &amp;quot;#&amp;quot; + str(moments[2])&lt;br /&gt;
&lt;br /&gt;
    # Linear-growth patterns with growth rate zero are clearly errors!&lt;br /&gt;
    if (moments[0] == 0):&lt;br /&gt;
        return &amp;quot;unidentified&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;yl&amp;quot; + str(p) + &amp;quot;_&amp;quot; + str(q) + &amp;quot;_&amp;quot; + str(moments[0]) + &amp;quot;_&amp;quot; + hashlib.md5(prehash).hexdigest()&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
# This explodes pseudo-still-lifes and pseudo-oscillators into their&lt;br /&gt;
# constituent parts.&lt;br /&gt;
#&lt;br /&gt;
# -- Requires the period (if oscillatory) and graph-theoretic diameter&lt;br /&gt;
#    to not exceed 4096.&lt;br /&gt;
# -- Never mistakenly separates a true object.&lt;br /&gt;
# -- Correctly separates most pseudo-still-lifes, including the famous:&lt;br /&gt;
#    http://www.conwaylife.com/wiki/Quad_pseudo_still_life&lt;br /&gt;
# -- Works perfectly for all still-lifes of up to 17 bits.&lt;br /&gt;
# -- Doesn&#039;t separate &#039;locks&#039;, of which the smallest example has 18&lt;br /&gt;
#    bits and is unique:&lt;br /&gt;
#&lt;br /&gt;
#     ** **&lt;br /&gt;
#     ** **&lt;br /&gt;
#&lt;br /&gt;
#    * *** *&lt;br /&gt;
#    ** * **&lt;br /&gt;
#&lt;br /&gt;
# To use this function (standalone), merely copy it into a script of&lt;br /&gt;
# the following form:&lt;br /&gt;
#&lt;br /&gt;
#   import golly as g&lt;br /&gt;
#&lt;br /&gt;
#   def pseudo_bangbang():&lt;br /&gt;
#&lt;br /&gt;
#   [...]&lt;br /&gt;
#&lt;br /&gt;
#   pseudo_bangbang()&lt;br /&gt;
#&lt;br /&gt;
# and execute it in Golly with a B3/S23 universe containing any still-&lt;br /&gt;
# lifes or oscillators you want to separate. Pure objects correspond to&lt;br /&gt;
# connected components in the final state of the universe.&lt;br /&gt;
#&lt;br /&gt;
# This has dependencies on the rules ContagiousLife, PercolateInfection&lt;br /&gt;
# and EradicateInfection.&lt;br /&gt;
#&lt;br /&gt;
# Not to be confused with the Unix shell instruction for repeating the&lt;br /&gt;
# previous instruction as a superuser (sudo !!), or indeed with any&lt;br /&gt;
# parodies of this song: https://www.youtube.com/watch?v=YswhUHH6Ufc&lt;br /&gt;
#&lt;br /&gt;
# Adam P. Goucher, 2014-08-25&lt;br /&gt;
def pseudo_bangbang(alpharule):&lt;br /&gt;
&lt;br /&gt;
    g.setrule(&amp;quot;APG_ContagiousLife_&amp;quot; + alpharule)&lt;br /&gt;
    g.setbase(2)&lt;br /&gt;
    g.setstep(12)&lt;br /&gt;
    g.step()&lt;br /&gt;
&lt;br /&gt;
    celllist = g.getcells(g.getrect())&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(0, len(celllist)-1, 3):&lt;br /&gt;
        &lt;br /&gt;
        # Only infect cells that haven&#039;t yet been infected:&lt;br /&gt;
        if (g.getcell(celllist[i], celllist[i+1]) &amp;lt;= 2):&lt;br /&gt;
&lt;br /&gt;
            # Seed an initial &#039;infected&#039; (red) cell:&lt;br /&gt;
            g.setcell(celllist[i], celllist[i+1], g.getcell(celllist[i], celllist[i+1]) + 2)&lt;br /&gt;
&lt;br /&gt;
            prevpop = 0&lt;br /&gt;
            currpop = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
            # Continue infecting until the entire component has been engulfed:&lt;br /&gt;
            while (prevpop != currpop):&lt;br /&gt;
&lt;br /&gt;
                # Percolate the infection to every cell in the island:&lt;br /&gt;
                g.setrule(&amp;quot;APG_PercolateInfection&amp;quot;)&lt;br /&gt;
                g.setbase(2)&lt;br /&gt;
                g.setstep(12)&lt;br /&gt;
                g.step()&lt;br /&gt;
&lt;br /&gt;
                # Transmit the infection across any bridges.&lt;br /&gt;
                g.setrule(&amp;quot;APG_ContagiousLife_&amp;quot; + alpharule)&lt;br /&gt;
                g.setbase(2)&lt;br /&gt;
                g.setstep(12)&lt;br /&gt;
                g.step()&lt;br /&gt;
&lt;br /&gt;
                prevpop = currpop&lt;br /&gt;
                currpop = int(g.getpop())&lt;br /&gt;
                &lt;br /&gt;
            g.fit()&lt;br /&gt;
            g.update()&lt;br /&gt;
&lt;br /&gt;
            # Red becomes green:&lt;br /&gt;
            g.setrule(&amp;quot;APG_EradicateInfection&amp;quot;)&lt;br /&gt;
            g.step()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Counts the number of live cells of each degree:&lt;br /&gt;
def degreecount():&lt;br /&gt;
&lt;br /&gt;
    celllist = g.getcells(g.getrect())&lt;br /&gt;
    counts = [0,0,0,0,0,0,0,0,0]&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(0, len(celllist), 2):&lt;br /&gt;
&lt;br /&gt;
        x = celllist[i]&lt;br /&gt;
        y = celllist[i+1]&lt;br /&gt;
&lt;br /&gt;
        degree = -1&lt;br /&gt;
&lt;br /&gt;
        for ux in xrange(x - 1, x + 2):&lt;br /&gt;
            for uy in xrange(y - 1, y + 2):&lt;br /&gt;
&lt;br /&gt;
                degree += g.getcell(ux, uy)&lt;br /&gt;
&lt;br /&gt;
        counts[degree] += 1&lt;br /&gt;
&lt;br /&gt;
    return counts&lt;br /&gt;
&lt;br /&gt;
# Counts the number of live cells of each degree in generations 1 and 2:&lt;br /&gt;
def degreecount2():&lt;br /&gt;
&lt;br /&gt;
    g.run(1)&lt;br /&gt;
    a = degreecount()&lt;br /&gt;
    g.run(1)&lt;br /&gt;
    b = degreecount()&lt;br /&gt;
&lt;br /&gt;
    return (a + b)&lt;br /&gt;
&lt;br /&gt;
# If the universe consists only of disjoint *WSSes, this will return&lt;br /&gt;
# a triple (l, w, h) giving the quantities of each *WSS. Otherwise,&lt;br /&gt;
# this function will return (-1, -1, -1).&lt;br /&gt;
#&lt;br /&gt;
# This should only be used to separate period-4 moving objects which&lt;br /&gt;
# may contain multiple *WSSes.&lt;br /&gt;
def countxwsses():&lt;br /&gt;
&lt;br /&gt;
    degcount = degreecount2()&lt;br /&gt;
    if (degreecount2() != degcount):&lt;br /&gt;
        # Degree counts are not period-2:&lt;br /&gt;
        return (-1, -1, -1)&lt;br /&gt;
&lt;br /&gt;
    # Degree counts of each standard spaceship:&lt;br /&gt;
    hwssa = [1,4,6,2,0,0,0,0,0,0,0,0,4,4,6,1,2,1]&lt;br /&gt;
    mwssa = [2,2,5,2,0,0,0,0,0,0,0,0,4,4,4,1,2,0]&lt;br /&gt;
    lwssa = [1,2,4,2,0,0,0,0,0,0,0,0,4,4,2,2,0,0]&lt;br /&gt;
    hwssb = [0,0,0,4,4,6,1,2,1,1,4,6,2,0,0,0,0,0]&lt;br /&gt;
    mwssb = [0,0,0,4,4,4,1,2,0,2,2,5,2,0,0,0,0,0]&lt;br /&gt;
    lwssb = [0,0,0,4,4,2,2,0,0,1,2,4,2,0,0,0,0,0]&lt;br /&gt;
&lt;br /&gt;
    # Calculate the number of standard spaceships in each phase:&lt;br /&gt;
    hacount = degcount[17]&lt;br /&gt;
    macount = degcount[16]/2 - hacount&lt;br /&gt;
    lacount = (degcount[15] - hacount - macount)/2&lt;br /&gt;
    hbcount = degcount[8]&lt;br /&gt;
    mbcount = degcount[7]/2 - hbcount&lt;br /&gt;
    lbcount = (degcount[6] - hbcount - mbcount)/2&lt;br /&gt;
&lt;br /&gt;
    # Determine the expected degcount given the calculated quantities:&lt;br /&gt;
    pcounts = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: hacount*x, hwssa))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: macount*x, mwssa))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: lacount*x, lwssa))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: hbcount*x, hwssb))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: mbcount*x, mwssb))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: lbcount*x, lwssb))&lt;br /&gt;
&lt;br /&gt;
    # Compare the observed and expected degcounts (to eliminate nonstandard spaceships):&lt;br /&gt;
    if (pcounts != degcount):&lt;br /&gt;
        # Expected and observed values do not match:&lt;br /&gt;
        return (-1, -1, -1)&lt;br /&gt;
&lt;br /&gt;
    # Return the combined numbers of *WSSes:&lt;br /&gt;
    return(lacount + lbcount, macount + mbcount, hacount + hbcount)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Generates the helper rules for apgsearch, given a base outer-totalistic rule.&lt;br /&gt;
class RuleGenerator:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
&lt;br /&gt;
        # Unless otherwise specified, assume standard B3/S23 rule:&lt;br /&gt;
        self.bee = [False, False, False, True, False, False, False, False, False]&lt;br /&gt;
        self.ess = [False, False, True, True, False, False, False, False, False]&lt;br /&gt;
        self.alphanumeric = &amp;quot;B3S23&amp;quot;&lt;br /&gt;
        self.slashed = &amp;quot;B3/S23&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Save all helper rules:&lt;br /&gt;
    def saveAllRules(self):&lt;br /&gt;
&lt;br /&gt;
        self.saveClassifyObjects()&lt;br /&gt;
        self.saveCoalesceObjects()&lt;br /&gt;
        self.saveExpungeObjects()&lt;br /&gt;
        self.saveExpungeGliders()&lt;br /&gt;
        self.saveIdentifyGliders()&lt;br /&gt;
        self.saveHandlePlumes()&lt;br /&gt;
        self.savePercolateInfection()&lt;br /&gt;
        self.saveEradicateInfection()&lt;br /&gt;
        self.saveContagiousLife()&lt;br /&gt;
&lt;br /&gt;
    # Set outer-totalistic rule:&lt;br /&gt;
    def setrule(self, rulestring):&lt;br /&gt;
&lt;br /&gt;
        mode = 0&lt;br /&gt;
        s = [False]*9&lt;br /&gt;
        b = [False]*9&lt;br /&gt;
&lt;br /&gt;
        for c in rulestring:&lt;br /&gt;
&lt;br /&gt;
            if ((c == &#039;s&#039;) | (c == &#039;S&#039;)):&lt;br /&gt;
                mode = 0&lt;br /&gt;
&lt;br /&gt;
            if ((c == &#039;b&#039;) | (c == &#039;B&#039;)):&lt;br /&gt;
                mode = 1&lt;br /&gt;
&lt;br /&gt;
            if (c == &#039;/&#039;):&lt;br /&gt;
                mode = 1 - mode&lt;br /&gt;
&lt;br /&gt;
            if ((ord(c) &amp;gt;= 48) &amp;amp; (ord(c) &amp;lt;= 56)):&lt;br /&gt;
                d = ord(c) - 48&lt;br /&gt;
                if (mode == 0):&lt;br /&gt;
                    s[d] = True&lt;br /&gt;
                else:&lt;br /&gt;
                    b[d] = True&lt;br /&gt;
&lt;br /&gt;
        prefix = &amp;quot;B&amp;quot;&lt;br /&gt;
        suffix = &amp;quot;S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (b[i]):&lt;br /&gt;
                prefix += str(i)&lt;br /&gt;
            if (s[i]):&lt;br /&gt;
                suffix += str(i)&lt;br /&gt;
&lt;br /&gt;
        self.alphanumeric = prefix + suffix&lt;br /&gt;
        self.slashed = prefix + &amp;quot;/&amp;quot; + suffix&lt;br /&gt;
        self.bee = b&lt;br /&gt;
        self.ess = s&lt;br /&gt;
&lt;br /&gt;
    # Save a rule file:&lt;br /&gt;
    def saverule(self, name, comments, table, colours):&lt;br /&gt;
&lt;br /&gt;
        ruledir = g.getdir(&amp;quot;rules&amp;quot;)&lt;br /&gt;
        filename = ruledir + name + &amp;quot;.rule&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        results = &amp;quot;@RULE &amp;quot; + name + &amp;quot;\n\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;*** File autogenerated by saverule. ***\n\n&amp;quot;&lt;br /&gt;
        results += comments&lt;br /&gt;
        results += &amp;quot;\n\n@TABLE\n\n&amp;quot;&lt;br /&gt;
        results += table&lt;br /&gt;
        results += &amp;quot;\n\n@COLORS\n\n&amp;quot;&lt;br /&gt;
        results += colours&lt;br /&gt;
&lt;br /&gt;
        # Only create a rule file if it doesn&#039;t already exist; this avoids&lt;br /&gt;
        # concurrency issues when booting an instance of apgsearch whilst&lt;br /&gt;
        # one is already running.&lt;br /&gt;
        if not os.path.exists(filename):&lt;br /&gt;
            try:&lt;br /&gt;
                f = open(filename, &#039;w&#039;)&lt;br /&gt;
                f.write(results)&lt;br /&gt;
                f.close()&lt;br /&gt;
            except:&lt;br /&gt;
                g.warn(&amp;quot;Unable to create rule table:\n&amp;quot; + filename)&lt;br /&gt;
&lt;br /&gt;
    # Defines a variable:&lt;br /&gt;
    def newvar(self, name, vallist):&lt;br /&gt;
&lt;br /&gt;
        line = &amp;quot;var &amp;quot;+name+&amp;quot;={&amp;quot;&lt;br /&gt;
        for i in xrange(len(vallist)):&lt;br /&gt;
            if (i &amp;gt; 0):&lt;br /&gt;
                line += &#039;,&#039;&lt;br /&gt;
            line += str(vallist[i])&lt;br /&gt;
        line += &amp;quot;}\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return line&lt;br /&gt;
&lt;br /&gt;
    # Defines a block of equivalent variables:&lt;br /&gt;
    def newvars(self, namelist, vallist):&lt;br /&gt;
&lt;br /&gt;
        block = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for name in namelist:&lt;br /&gt;
            block += self.newvar(name, vallist)&lt;br /&gt;
&lt;br /&gt;
        block += &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return block&lt;br /&gt;
&lt;br /&gt;
    def scoline(self, chara, charb, left, right, amount):&lt;br /&gt;
&lt;br /&gt;
        line = str(left) + &amp;quot;,&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(8):&lt;br /&gt;
            if (i &amp;lt; amount):&lt;br /&gt;
                line += chara&lt;br /&gt;
            else:&lt;br /&gt;
                line += charb&lt;br /&gt;
            line += chr(97 + i)&lt;br /&gt;
            line += &amp;quot;,&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        line += str(right) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return line&lt;br /&gt;
&lt;br /&gt;
    def saveHandlePlumes(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This post-processes the output of ClassifyObjects to remove any&lt;br /&gt;
unwanted clustering of low-period objects appearing in puffer&lt;br /&gt;
exhaust.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
&lt;br /&gt;
state 7:  ON, still-life&lt;br /&gt;
state 8:  OFF, still-life&lt;br /&gt;
&lt;br /&gt;
state 9:  ON, p2 oscillator&lt;br /&gt;
state 10: OFF, p2 oscillator&lt;br /&gt;
&lt;br /&gt;
state 11: ON, higher-period object&lt;br /&gt;
state 12: OFF, higher-period object&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:17&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:permute&lt;br /&gt;
&lt;br /&gt;
var da={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var db={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var dc={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var dd={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var de={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var df={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var dg={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var dh={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
&lt;br /&gt;
var a={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var b={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var c={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var d={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var e={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var f={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var g={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var h={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8,da,db,dc,dd,de,df,dg,dh,0&lt;br /&gt;
10,da,db,dc,dd,de,df,dg,dh,0&lt;br /&gt;
&lt;br /&gt;
9,a,b,c,d,e,f,g,h,1&lt;br /&gt;
10,a,b,c,d,e,f,g,h,2&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_HandlePlumesCorrected&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveExpungeGliders(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This removes unwanted gliders.&lt;br /&gt;
It is mandatory that one first runs the rules CoalesceObjects,&lt;br /&gt;
IdentifyGliders and ClassifyObjects.&lt;br /&gt;
&lt;br /&gt;
Run this for two generations, and observe the population&lt;br /&gt;
counts after 1 and 2 generations. This will give the&lt;br /&gt;
following data:&lt;br /&gt;
&lt;br /&gt;
number of gliders = (p(1) - p(2))/5&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:17&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:rotate4reflect&lt;br /&gt;
&lt;br /&gt;
var a={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var b={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var c={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var d={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var e={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var f={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var g={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var h={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
&lt;br /&gt;
13,a,b,c,d,e,f,g,h,14&lt;br /&gt;
14,a,b,c,d,e,f,g,h,0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
13 255  255    0&lt;br /&gt;
14 127  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_ExpungeGliders&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveIdentifyGliders(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Run this after CoalesceObjects to find any gliders.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:17&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:rotate4reflect&lt;br /&gt;
&lt;br /&gt;
var a={0,2}&lt;br /&gt;
var b={0,2}&lt;br /&gt;
var c={0,2}&lt;br /&gt;
var d={0,2}&lt;br /&gt;
var e={0,2}&lt;br /&gt;
var f={0,2}&lt;br /&gt;
var g={0,2}&lt;br /&gt;
var h={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var i={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var j={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var k={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var l={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var m={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var n={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var o={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var p={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var q={3,4}&lt;br /&gt;
var r={9,10}&lt;br /&gt;
var s={11,12}&lt;br /&gt;
&lt;br /&gt;
1,1,a,1,1,b,1,c,d,3&lt;br /&gt;
d,1,1,1,1,a,b,1,c,4&lt;br /&gt;
&lt;br /&gt;
3,i,j,k,l,m,n,o,p,5&lt;br /&gt;
4,i,j,k,l,m,n,o,p,6&lt;br /&gt;
&lt;br /&gt;
1,q,i,j,a,b,c,k,l,7&lt;br /&gt;
d,q,i,j,a,b,c,k,l,8&lt;br /&gt;
1,i,a,b,c,d,e,j,q,7&lt;br /&gt;
f,i,a,b,c,d,e,j,q,8&lt;br /&gt;
&lt;br /&gt;
5,7,8,7,7,8,7,8,8,9&lt;br /&gt;
6,7,7,7,7,8,8,7,8,10&lt;br /&gt;
5,i,j,k,l,m,n,o,p,15&lt;br /&gt;
6,i,j,k,l,m,n,o,p,16&lt;br /&gt;
15,i,j,k,l,m,n,o,p,1&lt;br /&gt;
16,i,j,k,l,m,n,o,p,2&lt;br /&gt;
&lt;br /&gt;
7,i,j,k,l,m,n,o,p,11&lt;br /&gt;
8,i,j,k,l,m,n,o,p,12&lt;br /&gt;
&lt;br /&gt;
9,i,j,k,l,m,n,o,p,13&lt;br /&gt;
10,i,j,k,l,m,n,o,p,14&lt;br /&gt;
11,r,j,k,l,m,n,o,p,13&lt;br /&gt;
11,i,r,k,l,m,n,o,p,13&lt;br /&gt;
12,r,j,k,l,m,n,o,p,14&lt;br /&gt;
12,i,r,k,l,m,n,o,p,14&lt;br /&gt;
&lt;br /&gt;
11,i,j,k,l,m,n,o,p,1&lt;br /&gt;
12,i,j,k,l,m,n,o,p,2&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
13 255  255    0&lt;br /&gt;
14 127  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_IdentifyGliders&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveEradicateInfection(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
To run after ContagiousLife to disinfect any cells in states 3 or 4.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:7&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:permute&lt;br /&gt;
&lt;br /&gt;
var a={0,1,2,3,4,5,6}&lt;br /&gt;
var b={0,1,2,3,4,5,6}&lt;br /&gt;
var c={0,1,2,3,4,5,6}&lt;br /&gt;
var d={0,1,2,3,4,5,6}&lt;br /&gt;
var e={0,1,2,3,4,5,6}&lt;br /&gt;
var f={0,1,2,3,4,5,6}&lt;br /&gt;
var g={0,1,2,3,4,5,6}&lt;br /&gt;
var h={0,1,2,3,4,5,6}&lt;br /&gt;
var i={0,1,2,3,4,5,6}&lt;br /&gt;
&lt;br /&gt;
4,a,b,c,d,e,f,g,h,6&lt;br /&gt;
3,a,b,c,d,e,f,g,h,5&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1    0    0  255&lt;br /&gt;
2    0    0  127&lt;br /&gt;
3  255    0    0&lt;br /&gt;
4  127    0    0&lt;br /&gt;
5    0  255    0&lt;br /&gt;
6    0  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_EradicateInfection&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def savePercolateInfection(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Percolates any infection to all cells of that particular island.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:7&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:permute&lt;br /&gt;
&lt;br /&gt;
var a={0,1,2,3,4,5,6}&lt;br /&gt;
var b={0,1,2,3,4,5,6}&lt;br /&gt;
var c={0,1,2,3,4,5,6}&lt;br /&gt;
var d={0,1,2,3,4,5,6}&lt;br /&gt;
var e={0,1,2,3,4,5,6}&lt;br /&gt;
var f={0,1,2,3,4,5,6}&lt;br /&gt;
var g={0,1,2,3,4,5,6}&lt;br /&gt;
var h={0,1,2,3,4,5,6}&lt;br /&gt;
var i={0,1,2,3,4,5,6}&lt;br /&gt;
&lt;br /&gt;
var q={3,4}&lt;br /&gt;
var da={2,4,6}&lt;br /&gt;
var la={1,3,5}&lt;br /&gt;
&lt;br /&gt;
da,q,b,c,d,e,f,g,h,4&lt;br /&gt;
la,q,b,c,d,e,f,g,h,3&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1    0    0  255&lt;br /&gt;
2    0    0  127&lt;br /&gt;
3  255    0    0&lt;br /&gt;
4  127    0    0&lt;br /&gt;
5    0  255    0&lt;br /&gt;
6    0  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_PercolateInfection&amp;quot;, comments, table, colours)&lt;br /&gt;
        &lt;br /&gt;
    def saveExpungeObjects(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This removes unwanted monominos, blocks, blinkers and beehives.&lt;br /&gt;
It is mandatory that one first runs the rule ClassifyObjects.&lt;br /&gt;
&lt;br /&gt;
Run this for four generations, and observe the population&lt;br /&gt;
counts after 0, 1, 2, 3 and 4 generations. This will give the&lt;br /&gt;
following data:&lt;br /&gt;
&lt;br /&gt;
number of monominos = p(1) - p(0)&lt;br /&gt;
number of blocks = (p(2) - p(1))/4&lt;br /&gt;
number of blinkers = (p(3) - p(2))/5&lt;br /&gt;
number of beehives = (p(4) - p(3))/8&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;n_states:17\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;neighborhood:Moore\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;symmetries:rotate4reflect\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        table += self.newvars([&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;], range(0, 17, 1))&lt;br /&gt;
&lt;br /&gt;
        table += &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
# Monomino&lt;br /&gt;
7,0,0,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
# Death&lt;br /&gt;
6,a,b,c,d,e,f,g,h,0&lt;br /&gt;
a,6,b,c,d,e,f,g,h,0&lt;br /&gt;
&lt;br /&gt;
# Block&lt;br /&gt;
7,7,7,7,0,0,0,0,0,1&lt;br /&gt;
1,1,1,1,0,0,0,0,0,0&lt;br /&gt;
1,a,b,c,d,e,f,g,h,7&lt;br /&gt;
&lt;br /&gt;
# Blinker&lt;br /&gt;
10,0,0,0,9,9,9,0,0,2&lt;br /&gt;
9,9,10,0,0,0,0,0,10,3&lt;br /&gt;
2,a,b,c,d,e,f,g,h,10&lt;br /&gt;
3,a,b,c,d,e,f,g,h,9&lt;br /&gt;
9,2,0,3,0,2,0,3,0,6&lt;br /&gt;
&lt;br /&gt;
# Beehive&lt;br /&gt;
7,0,7,8,7,0,0,0,0,1&lt;br /&gt;
7,0,0,7,8,8,7,0,0,1&lt;br /&gt;
8,7,7,8,7,7,0,7,0,4&lt;br /&gt;
4,1,1,4,1,1,0,1,0,5&lt;br /&gt;
4,a,b,c,d,e,f,g,h,8&lt;br /&gt;
5,5,b,c,d,e,f,g,h,6&lt;br /&gt;
5,a,b,c,d,e,f,g,h,15&lt;br /&gt;
15,a,b,c,d,e,f,g,h,8&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
13 255  255    0&lt;br /&gt;
14 127  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_ExpungeObjects&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveCoalesceObjects(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
A variant of HistoricalLife which separates a field of ash into&lt;br /&gt;
distinct objects.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;n_states:3\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;neighborhood:Moore\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;symmetries:permute\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        table += self.newvars([&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;], [0, 1, 2])&lt;br /&gt;
        table += self.newvars([&amp;quot;da&amp;quot;,&amp;quot;db&amp;quot;,&amp;quot;dc&amp;quot;,&amp;quot;dd&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;df&amp;quot;,&amp;quot;dg&amp;quot;,&amp;quot;dh&amp;quot;,&amp;quot;di&amp;quot;], [0, 2])&lt;br /&gt;
        table += self.newvars([&amp;quot;la&amp;quot;,&amp;quot;lb&amp;quot;,&amp;quot;lc&amp;quot;,&amp;quot;ld&amp;quot;,&amp;quot;le&amp;quot;,&amp;quot;lf&amp;quot;,&amp;quot;lg&amp;quot;,&amp;quot;lh&amp;quot;,&amp;quot;li&amp;quot;], [1])&lt;br /&gt;
&lt;br /&gt;
        minperc = 10&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (self.bee[i]):&lt;br /&gt;
                if (minperc == 10):&lt;br /&gt;
                    minperc = i&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,0,1,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,2,1,i)&lt;br /&gt;
            if (self.ess[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,1,1,i)&lt;br /&gt;
&lt;br /&gt;
        table += &amp;quot;\n# Bridge inductors\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (i &amp;gt;= minperc):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,0,2,i)&lt;br /&gt;
&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,1,2,0)&lt;br /&gt;
&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_CoalesceObjects_&amp;quot;+self.alphanumeric, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveClassifyObjects(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This passively classifies objects as either still-lifes, p2 oscillators&lt;br /&gt;
or higher-period oscillators. It is mandatory that one first runs the&lt;br /&gt;
rule CoalesceObjects.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  input ON&lt;br /&gt;
state 2:  input OFF&lt;br /&gt;
&lt;br /&gt;
state 3:  ON, will die&lt;br /&gt;
state 4:  OFF, will remain off&lt;br /&gt;
state 5:  ON, will survive&lt;br /&gt;
state 6:  OFF, will become alive&lt;br /&gt;
&lt;br /&gt;
state 7:  ON, still-life&lt;br /&gt;
state 8:  OFF, still-life&lt;br /&gt;
&lt;br /&gt;
state 9:  ON, p2 oscillator&lt;br /&gt;
state 10: OFF, p2 oscillator&lt;br /&gt;
&lt;br /&gt;
state 11: ON, higher-period object&lt;br /&gt;
state 12: OFF, higher-period object&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;n_states:17\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;neighborhood:Moore\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;symmetries:permute\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        table += self.newvars([&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;], range(0, 17, 1))&lt;br /&gt;
        table += self.newvars([&amp;quot;la&amp;quot;,&amp;quot;lb&amp;quot;,&amp;quot;lc&amp;quot;,&amp;quot;ld&amp;quot;,&amp;quot;le&amp;quot;,&amp;quot;lf&amp;quot;,&amp;quot;lg&amp;quot;,&amp;quot;lh&amp;quot;,&amp;quot;li&amp;quot;], range(1, 17, 2))&lt;br /&gt;
        table += self.newvars([&amp;quot;da&amp;quot;,&amp;quot;db&amp;quot;,&amp;quot;dc&amp;quot;,&amp;quot;dd&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;df&amp;quot;,&amp;quot;dg&amp;quot;,&amp;quot;dh&amp;quot;,&amp;quot;di&amp;quot;], range(0, 17, 2))&lt;br /&gt;
        table += self.newvars([&amp;quot;pa&amp;quot;,&amp;quot;pb&amp;quot;,&amp;quot;pc&amp;quot;,&amp;quot;pd&amp;quot;,&amp;quot;pe&amp;quot;,&amp;quot;pf&amp;quot;,&amp;quot;pg&amp;quot;,&amp;quot;ph&amp;quot;,&amp;quot;pi&amp;quot;], [0, 3, 4])&lt;br /&gt;
        table += self.newvars([&amp;quot;qa&amp;quot;,&amp;quot;qb&amp;quot;,&amp;quot;qc&amp;quot;,&amp;quot;qd&amp;quot;,&amp;quot;qe&amp;quot;,&amp;quot;qf&amp;quot;,&amp;quot;qg&amp;quot;,&amp;quot;qh&amp;quot;,&amp;quot;qi&amp;quot;], [5, 6])&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (self.bee[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,2,6,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;q&amp;quot;,&amp;quot;p&amp;quot;,3,9,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;q&amp;quot;,&amp;quot;p&amp;quot;,4,12,i)&lt;br /&gt;
            if (self.ess[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,1,5,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;q&amp;quot;,&amp;quot;p&amp;quot;,5,7,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;q&amp;quot;,&amp;quot;p&amp;quot;,6,12,i)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,2,4,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,1,3,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,5,11,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,3,11,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,4,8,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,6,10,0)&lt;br /&gt;
&lt;br /&gt;
        table += &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
# Propagate interestingness&lt;br /&gt;
7,11,b,c,d,e,f,g,h,11&lt;br /&gt;
7,12,b,c,d,e,f,g,h,11&lt;br /&gt;
7,9,b,c,d,e,f,g,h,9&lt;br /&gt;
7,10,b,c,d,e,f,g,h,9&lt;br /&gt;
8,11,b,c,d,e,f,g,h,12&lt;br /&gt;
8,12,b,c,d,e,f,g,h,12&lt;br /&gt;
8,9,b,c,d,e,f,g,h,10&lt;br /&gt;
8,10,b,c,d,e,f,g,h,10&lt;br /&gt;
&lt;br /&gt;
7,13,b,c,d,e,f,g,h,11&lt;br /&gt;
7,14,b,c,d,e,f,g,h,11&lt;br /&gt;
8,13,b,c,d,e,f,g,h,14&lt;br /&gt;
8,14,b,c,d,e,f,g,h,14&lt;br /&gt;
9,13,b,c,d,e,f,g,h,11&lt;br /&gt;
9,14,b,c,d,e,f,g,h,11&lt;br /&gt;
10,13,b,c,d,e,f,g,h,14&lt;br /&gt;
10,14,b,c,d,e,f,g,h,14&lt;br /&gt;
&lt;br /&gt;
9,11,b,c,d,e,f,g,h,11&lt;br /&gt;
9,12,b,c,d,e,f,g,h,11&lt;br /&gt;
10,11,b,c,d,e,f,g,h,12&lt;br /&gt;
10,12,b,c,d,e,f,g,h,12&lt;br /&gt;
&lt;br /&gt;
13,11,b,c,d,e,f,g,h,11&lt;br /&gt;
13,12,b,c,d,e,f,g,h,11&lt;br /&gt;
14,11,b,c,d,e,f,g,h,12&lt;br /&gt;
14,12,b,c,d,e,f,g,h,12&lt;br /&gt;
13,9,b,c,d,e,f,g,h,11&lt;br /&gt;
14,9,b,c,d,e,f,g,h,12&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
13 255  255    0&lt;br /&gt;
14 127  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_ClassifyObjects_&amp;quot;+self.alphanumeric, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveContagiousLife(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
A variant of HistoricalLife used for detecting dependencies between&lt;br /&gt;
islands.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;n_states:7\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;neighborhood:Moore\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;symmetries:permute\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        table += self.newvars([&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;], range(0, 7, 1))&lt;br /&gt;
        table += self.newvars([&amp;quot;la&amp;quot;,&amp;quot;lb&amp;quot;,&amp;quot;lc&amp;quot;,&amp;quot;ld&amp;quot;,&amp;quot;le&amp;quot;,&amp;quot;lf&amp;quot;,&amp;quot;lg&amp;quot;,&amp;quot;lh&amp;quot;,&amp;quot;li&amp;quot;], range(1, 7, 2))&lt;br /&gt;
        table += self.newvars([&amp;quot;da&amp;quot;,&amp;quot;db&amp;quot;,&amp;quot;dc&amp;quot;,&amp;quot;dd&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;df&amp;quot;,&amp;quot;dg&amp;quot;,&amp;quot;dh&amp;quot;,&amp;quot;di&amp;quot;], range(0, 7, 2))&lt;br /&gt;
        table += self.newvar(&amp;quot;p&amp;quot;,[3, 4])&lt;br /&gt;
        table += self.newvars([&amp;quot;ta&amp;quot;,&amp;quot;tb&amp;quot;,&amp;quot;tc&amp;quot;,&amp;quot;td&amp;quot;,&amp;quot;te&amp;quot;,&amp;quot;tf&amp;quot;,&amp;quot;tg&amp;quot;,&amp;quot;th&amp;quot;,&amp;quot;ti&amp;quot;], [3])&lt;br /&gt;
        table += self.newvars([&amp;quot;qa&amp;quot;,&amp;quot;qb&amp;quot;,&amp;quot;qc&amp;quot;,&amp;quot;qd&amp;quot;,&amp;quot;qe&amp;quot;,&amp;quot;qf&amp;quot;,&amp;quot;qg&amp;quot;,&amp;quot;qh&amp;quot;,&amp;quot;qi&amp;quot;], [0, 1, 2, 4, 5, 6])&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (self.bee[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,4,3,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,2,1,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,0,1,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,6,5,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;t&amp;quot;,&amp;quot;q&amp;quot;,0,4,i)&lt;br /&gt;
            if (self.ess[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,3,3,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,5,5,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,1,1,i)&lt;br /&gt;
&lt;br /&gt;
        table += &amp;quot;# Default behaviour (death):\n&amp;quot;&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,1,2,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,5,6,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,3,4,0)&lt;br /&gt;
&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1    0    0  255&lt;br /&gt;
2    0    0  127&lt;br /&gt;
3  255    0    0&lt;br /&gt;
4  127    0    0&lt;br /&gt;
5    0  255    0&lt;br /&gt;
6    0  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_ContagiousLife_&amp;quot;+self.alphanumeric, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Soup:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
&lt;br /&gt;
        # The rule generator:&lt;br /&gt;
        self.rg = RuleGenerator()&lt;br /&gt;
&lt;br /&gt;
        # Should we skip error-correction:&lt;br /&gt;
        self.skipErrorCorrection = False&lt;br /&gt;
&lt;br /&gt;
        # A dict mapping binary representations of small possibly-pseudo-objects&lt;br /&gt;
        # to their equivalent canonised representation.&lt;br /&gt;
        #&lt;br /&gt;
        # This is many-to-one, as (for example) all of these will map to&lt;br /&gt;
        # the same pseudo-object (namely the beacon on block):&lt;br /&gt;
        #&lt;br /&gt;
        # ..**.**  ..**.**  **.....                           **.....&lt;br /&gt;
        # ..**.**  ...*.**  **.....                           *......&lt;br /&gt;
        # **.....  *......  ..**...                           ...*.**&lt;br /&gt;
        # **.....  **.....  ..**... [...12 others omitted...] ..**.**&lt;br /&gt;
        # .......  .......  .......                           .......&lt;br /&gt;
        # .......  .......  ..**...                           .......&lt;br /&gt;
        # .......  .......  ..**...                           .......&lt;br /&gt;
        #&lt;br /&gt;
        # The first few soups are much slower to process, as objects are being&lt;br /&gt;
        # entered into the cache.&lt;br /&gt;
        self.cache = {}&lt;br /&gt;
&lt;br /&gt;
        # A dict to store memoized decompositions of possibly-pseudo-objects&lt;br /&gt;
        # into constituent parts. This is initialised with the unique minimal&lt;br /&gt;
        # pseudo-still-life (two blocks on lock) that cannot be automatically&lt;br /&gt;
        # separated by the routine pseudo_bangbang(). Any larger objects are&lt;br /&gt;
        # ambiguous, such as this one:&lt;br /&gt;
        #&lt;br /&gt;
        #     *&lt;br /&gt;
        #    * * **&lt;br /&gt;
        #     ** **&lt;br /&gt;
        #&lt;br /&gt;
        #    * *** *&lt;br /&gt;
        #    ** * **&lt;br /&gt;
        #&lt;br /&gt;
        # Is it a (block on (lock on boat)) or ((block on lock) on boat)?&lt;br /&gt;
        # Ahh, the joys of non-associativity.&lt;br /&gt;
        #&lt;br /&gt;
        # See http://paradise.caltech.edu/~cook/Workshop/CAs/2DOutTot/Life/StillLife/StillLifeTheory.html&lt;br /&gt;
        self.decompositions = {&amp;quot;xs18_3pq3qp3&amp;quot;: [&amp;quot;xs14_3123qp3&amp;quot;, &amp;quot;xs4_33&amp;quot;]}&lt;br /&gt;
&lt;br /&gt;
        # A dict of objects in the form {&amp;quot;identifier&amp;quot;: (&amp;quot;common name&amp;quot;, points)}&lt;br /&gt;
        #&lt;br /&gt;
        # As a rough heuristic, an object is worth 15 + log2(n) points if it&lt;br /&gt;
        # is n times rarer than the pentadecathlon.&lt;br /&gt;
        #&lt;br /&gt;
        # Still-lifes are limited to 10 points.&lt;br /&gt;
        # p2 oscillators are limited to 20 points.&lt;br /&gt;
        # p3 and p4 oscillators are limited to 30 points.&lt;br /&gt;
        self.commonnames = {&amp;quot;xp3_co9nas0san9oczgoldlo0oldlogz1047210127401&amp;quot;: (&amp;quot;pulsar&amp;quot;, 8),&lt;br /&gt;
                       &amp;quot;xp15_4r4z4r4&amp;quot;: (&amp;quot;pentadecathlon&amp;quot;, 15),&lt;br /&gt;
                       &amp;quot;xp2_2a54&amp;quot;: (&amp;quot;clock&amp;quot;, 16),&lt;br /&gt;
                       &amp;quot;xp2_31ago&amp;quot;: (&amp;quot;bipole&amp;quot;, 17),&lt;br /&gt;
                       &amp;quot;xp2_0g0k053z32&amp;quot;: (&amp;quot;quadpole&amp;quot;, 18),&lt;br /&gt;
                       &amp;quot;xp2_g8gid1e8z1226&amp;quot;: (&amp;quot;great on-off&amp;quot;, 19),&lt;br /&gt;
                       &amp;quot;xp2_rhewehr&amp;quot;: (&amp;quot;spark coil&amp;quot;, 19),&lt;br /&gt;
                       &amp;quot;xp8_gk2gb3z11&amp;quot;: (&amp;quot;figure-8&amp;quot;, 20),&lt;br /&gt;
                       &amp;quot;xp4_37bkic&amp;quot;: (&amp;quot;mold&amp;quot;, 21),&lt;br /&gt;
                       &amp;quot;xp2_31a08zy0123cko&amp;quot;: (&amp;quot;quadpole on ship&amp;quot;, 20),&lt;br /&gt;
                       &amp;quot;xp2_g0k053z11&amp;quot;: (&amp;quot;tripole&amp;quot;, 20),&lt;br /&gt;
                       &amp;quot;xp4_ssj3744zw3&amp;quot;: (&amp;quot;mazing&amp;quot;, 23),&lt;br /&gt;
                       &amp;quot;xp8_g3jgz1ut&amp;quot;: (&amp;quot;blocker&amp;quot;, 24),&lt;br /&gt;
                       &amp;quot;xp3_695qc8zx33&amp;quot;: (&amp;quot;jam&amp;quot;, 24),&lt;br /&gt;
                       &amp;quot;xp30_w33z8kqrqk8zzzw33&amp;quot;: (&amp;quot;cis-queen-bee-shuttle&amp;quot;, 24),&lt;br /&gt;
                       &amp;quot;xp30_w33z8kqrqk8zzzx33&amp;quot;: (&amp;quot;trans-queen-bee-shuttle&amp;quot;, 24),&lt;br /&gt;
                       &amp;quot;xp4_8eh5e0e5he8z178a707a871&amp;quot;: (&amp;quot;cloverleaf&amp;quot;, 25),&lt;br /&gt;
                       &amp;quot;xp5_idiidiz01w1&amp;quot;: (&amp;quot;octagon II&amp;quot;, 26),&lt;br /&gt;
                       &amp;quot;xp6_ccb7w66z066&amp;quot;: (&amp;quot;unix&amp;quot;, 26),&lt;br /&gt;
                       &amp;quot;xp14_j9d0d9j&amp;quot;: (&amp;quot;tumbler&amp;quot;, 27),&lt;br /&gt;
                       &amp;quot;xp3_025qzrq221&amp;quot;: (&amp;quot;trans-tub-eater&amp;quot;, 28),&lt;br /&gt;
                       &amp;quot;xp3_4hh186z07&amp;quot;: (&amp;quot;caterer&amp;quot;, 29),&lt;br /&gt;
                       &amp;quot;xp3_025qz32qq1&amp;quot;: (&amp;quot;cis-tub-eater&amp;quot;, 30),&lt;br /&gt;
                       &amp;quot;xp8_wgovnz234z33&amp;quot;: (&amp;quot;Tim Coe&#039;s p8&amp;quot;, 31),&lt;br /&gt;
                       &amp;quot;xp5_3pmwmp3zx11&amp;quot;: (&amp;quot;fumarole&amp;quot;, 33),&lt;br /&gt;
                       &amp;quot;xp46_330279cx1aad3y833zx4e93x855bc&amp;quot;: (&amp;quot;cis-twin-bees-shuttle&amp;quot;, 35),&lt;br /&gt;
                       &amp;quot;xp46_330279cx1aad3zx4e93x855bcy8cc&amp;quot;: (&amp;quot;trans-twin-bees-shuttle&amp;quot;, 35),&lt;br /&gt;
                       &amp;quot;yl144_1_16_afb5f3db909e60548f086e22ee3353ac&amp;quot;: (&amp;quot;block-laying switch engine&amp;quot;, 16),&lt;br /&gt;
                       &amp;quot;yl384_1_59_7aeb1999980c43b4945fb7fcdb023326&amp;quot;: (&amp;quot;glider-producing switch engine&amp;quot;, 17),&lt;br /&gt;
                       &amp;quot;xp10_9hr&amp;quot;: (&amp;quot;[HighLife] p10&amp;quot;, 6),&lt;br /&gt;
                       &amp;quot;xp7_13090c8&amp;quot;: (&amp;quot;[HighLife] p7&amp;quot;, 9),&lt;br /&gt;
                       &amp;quot;xq48_07z8ca7zy1e531&amp;quot;: (&amp;quot;[HighLife] bomber&amp;quot;, 9),&lt;br /&gt;
                       &amp;quot;xq4_153&amp;quot;: (&amp;quot;glider&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xq4_6frc&amp;quot;: (&amp;quot;lightweight spaceship&amp;quot;, 7),&lt;br /&gt;
                       &amp;quot;xq4_27dee6&amp;quot;: (&amp;quot;middleweight spaceship&amp;quot;, 9),&lt;br /&gt;
                       &amp;quot;xq4_27deee6&amp;quot;: (&amp;quot;heavyweight spaceship&amp;quot;, 12),&lt;br /&gt;
                       &amp;quot;xq7_3nw17862z6952&amp;quot;: (&amp;quot;loafer&amp;quot;, 70),&lt;br /&gt;
                       &amp;quot;xp2_7&amp;quot;: (&amp;quot;blinker&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs4_33&amp;quot;: (&amp;quot;block&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs4_252&amp;quot;: (&amp;quot;tub&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs5_253&amp;quot;: (&amp;quot;boat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_bd&amp;quot;: (&amp;quot;snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_356&amp;quot;: (&amp;quot;ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_696&amp;quot;: (&amp;quot;beehive&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_25a4&amp;quot;: (&amp;quot;barge&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_39c&amp;quot;: (&amp;quot;carrier&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xp2_7e&amp;quot;: (&amp;quot;toad&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xp2_318c&amp;quot;: (&amp;quot;beacon&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs7_3lo&amp;quot;: (&amp;quot;long snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs7_25ac&amp;quot;: (&amp;quot;long boat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs7_178c&amp;quot;: (&amp;quot;eater&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs7_2596&amp;quot;: (&amp;quot;loaf&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_178k8&amp;quot;: (&amp;quot;twit&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_32qk&amp;quot;: (&amp;quot;hook with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_69ic&amp;quot;: (&amp;quot;mango&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_6996&amp;quot;: (&amp;quot;pond&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_25ak8&amp;quot;: (&amp;quot;long barge&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_3pm&amp;quot;: (&amp;quot;shillelagh&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_312ko&amp;quot;: (&amp;quot;canoe&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_31248c&amp;quot;: (&amp;quot;very long snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_35ac&amp;quot;: (&amp;quot;long ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_g8o653z11&amp;quot;: (&amp;quot;ship-tie&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_g88m952z121&amp;quot;: (&amp;quot;half-bakery&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_69bqic&amp;quot;: (&amp;quot;paperclip&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_31ego&amp;quot;: (&amp;quot;integral sign&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_g8o652z01&amp;quot;: (&amp;quot;boat-tie&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_g88b96z123&amp;quot;: (&amp;quot;big ess&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_g88m996z1221&amp;quot;: (&amp;quot;bipond&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_raar&amp;quot;: (&amp;quot;table on table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_4aar&amp;quot;: (&amp;quot;hat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_35ako&amp;quot;: (&amp;quot;very long ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_178ko&amp;quot;: (&amp;quot;trans boat with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_354cgc453&amp;quot;: (&amp;quot;moose antlers&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_6970796&amp;quot;: (&amp;quot;cis-mirrored r-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_32qr&amp;quot;: (&amp;quot;block on table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_j1u0696z11&amp;quot;: (&amp;quot;beehive on dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_j1u066z11&amp;quot;: (&amp;quot;block on dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_g8o652z11&amp;quot;: (&amp;quot;boat tie ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_25ako&amp;quot;: (&amp;quot;very long boat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_69egmiczx1&amp;quot;: (&amp;quot;scorpion&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs18_rhe0ehr&amp;quot;: (&amp;quot;dead spark coil&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs17_2ege1ege2&amp;quot;: (&amp;quot;twinhat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_178kk8&amp;quot;: (&amp;quot;beehive with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_69ar&amp;quot;: (&amp;quot;loop&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_69bo8a6&amp;quot;: (&amp;quot;fourteener&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_39e0e93&amp;quot;: (&amp;quot;bookends&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_178kc&amp;quot;: (&amp;quot;cis boat with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_330f96&amp;quot;: (&amp;quot;block and cap&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_358gkc&amp;quot;: (&amp;quot;10.003&amp;quot;,0),&lt;br /&gt;
                       &amp;quot;xs12_330fho&amp;quot;: (&amp;quot;trans block and longhook&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_g0s252z11&amp;quot;: (&amp;quot;prodigal sign&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_g0s453z11&amp;quot;: (&amp;quot;elevener&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_6is079c&amp;quot;: (&amp;quot;cis-rotated hook&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_69e0eic&amp;quot;: (&amp;quot;trans-mirrored R-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_ggm952z1&amp;quot;: (&amp;quot;trans loaf with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_j1u06a4z11&amp;quot;: (&amp;quot;cis boat and dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs20_3lkkl3z32w23&amp;quot;: (&amp;quot;mirrored dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_178br&amp;quot;: (&amp;quot;12.003&amp;quot;,0),&lt;br /&gt;
                       &amp;quot;xs12_3hu066&amp;quot;: (&amp;quot;cis block and longhook&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_178c453&amp;quot;: (&amp;quot;eater with nine&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_0drz32&amp;quot;: (&amp;quot;broken snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_312453&amp;quot;: (&amp;quot;long shillelagh&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_3215ac&amp;quot;: (&amp;quot;boat with long tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_39e0e96&amp;quot;: (&amp;quot;cis-hook and R-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_g88m96z121&amp;quot;: (&amp;quot;beehive at loaf&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_39e0eic&amp;quot;: (&amp;quot;trans hook and R-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_3542ac&amp;quot;: (&amp;quot;S-ten&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_259e0eic&amp;quot;: (&amp;quot;trans R-bee and R-loaf&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_178jd&amp;quot;: (&amp;quot;11-loop&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_25a84c&amp;quot;: (&amp;quot;tub with long tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_3lkm96z01&amp;quot;: (&amp;quot;bee-hat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_g8o0e96z121&amp;quot;: (&amp;quot;cis-rotated R-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_69e0mq&amp;quot;: (&amp;quot;R-bee and snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_69lic&amp;quot;: (&amp;quot;11.003&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_6960ui&amp;quot;: (&amp;quot;beehive and table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_259e0e952&amp;quot;: (&amp;quot;cis-mirrored R-loaf&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_1784ko&amp;quot;: (&amp;quot;8-snake-eater&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_4a960ui&amp;quot;: (&amp;quot;ortho loaf and table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_g0g853z11&amp;quot;: (&amp;quot;long canoe&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs18_69is0si96&amp;quot;: (&amp;quot;[cis-mirrored R-mango]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_178kic&amp;quot;: (&amp;quot;cis loaf with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_69bob96&amp;quot;: (&amp;quot;symmetric scorpion&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_0g8o653z121&amp;quot;: (&amp;quot;longboat on ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_o4q552z01&amp;quot;: (&amp;quot;beehive at beehive&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_ggka52z1&amp;quot;: (&amp;quot;trans barge with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_256o8a6&amp;quot;: (&amp;quot;eater on boat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_6960uic&amp;quot;: (&amp;quot;beehive with cap&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_2egm93&amp;quot;: (&amp;quot;snorkel loop&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_2egm96&amp;quot;: (&amp;quot;beehive bend tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_g0s253z11&amp;quot;: (&amp;quot;trans boat with nine&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_3lk453z121&amp;quot;: (&amp;quot;trans boat and dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs19_69icw8ozxdd11&amp;quot;: (&amp;quot;[mango with block on dock]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_2530f96&amp;quot;: (&amp;quot;[cis boat and cap]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_2530f9&amp;quot;: (&amp;quot;cis boat and table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_4a9m88gzx121&amp;quot;: (&amp;quot;[bi-loaf2]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_ggka53z1&amp;quot;: (&amp;quot;trans longboat with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs18_2egm9a4zx346&amp;quot;: (&amp;quot;[loaf eater tail]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_4a9raic&amp;quot;: (&amp;quot;[15-bent-paperclip]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_3586246&amp;quot;: (&amp;quot;[11-snake]&amp;quot;,0),&lt;br /&gt;
                       &amp;quot;xs11_178b52&amp;quot;: (&amp;quot;[11-boat wrap tail]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_08u1e8z321&amp;quot;: (&amp;quot;[hat join hook]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_g4s079cz11&amp;quot;: (&amp;quot;[cis-mirrored offset hooks]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_31egma4&amp;quot;: (&amp;quot;[13-boat wrap eater]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_69960ui&amp;quot;: (&amp;quot;pond and table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_255q8a6&amp;quot;: (&amp;quot;[eater tie beehive]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_09v0ccz321&amp;quot;: (&amp;quot;[hook join table and block]&amp;quot;,0)}&lt;br /&gt;
&lt;br /&gt;
        # First soup to contain a particular object:&lt;br /&gt;
        self.alloccur = {}&lt;br /&gt;
&lt;br /&gt;
        # A tally of objects that have occurred during this run of apgsearch:&lt;br /&gt;
        self.objectcounts = {}&lt;br /&gt;
&lt;br /&gt;
        # Any soups with positive scores, and the number of points.&lt;br /&gt;
        self.soupscores = {}&lt;br /&gt;
&lt;br /&gt;
        # Temporary list of unidentified objects:&lt;br /&gt;
        self.unids = []&lt;br /&gt;
&lt;br /&gt;
        # Things like glider guns and large oscillators belong here:&lt;br /&gt;
        self.superunids = []&lt;br /&gt;
        self.gridsize = 0&lt;br /&gt;
        self.resets = 0&lt;br /&gt;
&lt;br /&gt;
        # For profiling purposes:&lt;br /&gt;
        self.qlifetime = 0.0&lt;br /&gt;
        self.ruletime = 0.0&lt;br /&gt;
        self.gridtime = 0.0&lt;br /&gt;
&lt;br /&gt;
    # Increment object count by given value:&lt;br /&gt;
    def incobject(self, obj, incval):&lt;br /&gt;
        if (incval &amp;gt; 0):&lt;br /&gt;
            if obj in self.objectcounts:&lt;br /&gt;
                self.objectcounts[obj] = self.objectcounts[obj] + incval&lt;br /&gt;
            else:&lt;br /&gt;
                self.objectcounts[obj] = incval&lt;br /&gt;
&lt;br /&gt;
    # Increment soup score by given value:&lt;br /&gt;
    def awardpoints(self, soupid, incval):&lt;br /&gt;
        if (incval &amp;gt; 0):&lt;br /&gt;
            if soupid in self.soupscores:&lt;br /&gt;
                self.soupscores[soupid] = self.soupscores[soupid] + incval&lt;br /&gt;
            else:&lt;br /&gt;
                self.soupscores[soupid] = incval&lt;br /&gt;
&lt;br /&gt;
    # Increment soup score by appropriate value:&lt;br /&gt;
    def awardpoints2(self, soupid, obj):&lt;br /&gt;
&lt;br /&gt;
        # Record the occurrence of this object:&lt;br /&gt;
        if (obj in self.alloccur):&lt;br /&gt;
            if (len(self.alloccur[obj]) &amp;lt; 10):&lt;br /&gt;
                if (soupid not in self.alloccur[obj]):&lt;br /&gt;
                    self.alloccur[obj] += [soupid]&lt;br /&gt;
        else:&lt;br /&gt;
            self.alloccur[obj] = [soupid]&lt;br /&gt;
        &lt;br /&gt;
        if obj in self.commonnames:&lt;br /&gt;
            self.awardpoints(soupid, self.commonnames[obj][1])&lt;br /&gt;
        elif (obj[0] == &#039;x&#039;):&lt;br /&gt;
            prefix = obj.split(&#039;_&#039;)[0]&lt;br /&gt;
            prenum = int(prefix[2:])&lt;br /&gt;
            if (obj[1] == &#039;s&#039;):&lt;br /&gt;
                self.awardpoints(soupid, min(prenum, 20)) # for still-lifes, award one point per constituent cell (max 20)&lt;br /&gt;
            elif (obj[1] == &#039;p&#039;):&lt;br /&gt;
                if (prenum == 2):&lt;br /&gt;
                    self.awardpoints(soupid, 20) # p2 oscillators are limited to 20 points&lt;br /&gt;
                elif ((prenum == 3) | (prenum == 4)):&lt;br /&gt;
                    self.awardpoints(soupid, 30) # p3 and p4 oscillators are limited to 30 points&lt;br /&gt;
                else:&lt;br /&gt;
                    self.awardpoints(soupid, 40)&lt;br /&gt;
            else:&lt;br /&gt;
                self.awardpoints(soupid, 50)&lt;br /&gt;
        else:&lt;br /&gt;
            self.awardpoints(soupid, 60)&lt;br /&gt;
&lt;br /&gt;
    # Assuming the pattern has stabilised, perform a census:&lt;br /&gt;
    def census(self, stepsize):&lt;br /&gt;
&lt;br /&gt;
        g.setrule(&amp;quot;APG_CoalesceObjects_&amp;quot; + self.rg.alphanumeric)&lt;br /&gt;
        g.setbase(2)&lt;br /&gt;
        g.setstep(stepsize)&lt;br /&gt;
        g.step()&lt;br /&gt;
&lt;br /&gt;
        # apgsearch theoretically supports up to 2^14 rules, whereas the Guy&lt;br /&gt;
        # glider is only stable in 2^8 rules. Ensure that this is one of these&lt;br /&gt;
        # rules by doing some basic Boolean arithmetic.&lt;br /&gt;
        #&lt;br /&gt;
        # This should be parsed as `gliders exist&#039;, not `glider sexist&#039;:&lt;br /&gt;
        glidersexist = self.rg.ess[2] &amp;amp; self.rg.ess[3] &amp;amp; (not self.rg.ess[1]) &amp;amp; (not self.rg.ess[4])&lt;br /&gt;
        glidersexist = glidersexist &amp;amp; (not (self.rg.bee[4] | self.rg.bee[5]))&lt;br /&gt;
&lt;br /&gt;
        if (glidersexist):&lt;br /&gt;
            g.setrule(&amp;quot;APG_IdentifyGliders&amp;quot;)&lt;br /&gt;
            g.setbase(2)&lt;br /&gt;
            g.setstep(2)&lt;br /&gt;
            g.step()&lt;br /&gt;
&lt;br /&gt;
        g.setrule(&amp;quot;APG_ClassifyObjects_&amp;quot; + self.rg.alphanumeric)&lt;br /&gt;
        g.setbase(2)&lt;br /&gt;
        g.setstep(max(8, stepsize))&lt;br /&gt;
        g.step()&lt;br /&gt;
&lt;br /&gt;
        # Only do this if we have an infinite-growth pattern:&lt;br /&gt;
        if (stepsize &amp;gt; 8):&lt;br /&gt;
            g.setrule(&amp;quot;APG_HandlePlumesCorrected&amp;quot;)&lt;br /&gt;
            g.setbase(2)&lt;br /&gt;
            g.setstep(1)&lt;br /&gt;
            g.step()&lt;br /&gt;
            g.setrule(&amp;quot;APG_ClassifyObjects_&amp;quot; + self.rg.alphanumeric)&lt;br /&gt;
            g.setstep(stepsize)&lt;br /&gt;
            g.step()&lt;br /&gt;
&lt;br /&gt;
        # Remove any gliders:&lt;br /&gt;
        if (glidersexist):&lt;br /&gt;
            g.setrule(&amp;quot;APG_ExpungeGliders&amp;quot;)&lt;br /&gt;
            g.run(1)&lt;br /&gt;
            pop5 = int(g.getpop())&lt;br /&gt;
            g.run(1)&lt;br /&gt;
            pop6 = int(g.getpop())&lt;br /&gt;
            self.incobject(&amp;quot;xq4_153&amp;quot;, (pop5 - pop6)/5)&lt;br /&gt;
&lt;br /&gt;
        # Remove any blocks, blinkers and beehives:&lt;br /&gt;
        g.setrule(&amp;quot;APG_ExpungeObjects&amp;quot;)&lt;br /&gt;
        pop0 = int(g.getpop())&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        pop1 = int(g.getpop())&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        pop2 = int(g.getpop())&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        pop3 = int(g.getpop())&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        pop4 = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
        # Blocks, blinkers and beehives removed by ExpungeObjects:&lt;br /&gt;
        self.incobject(&amp;quot;xs1_1&amp;quot;, (pop0-pop1))&lt;br /&gt;
        self.incobject(&amp;quot;xs4_33&amp;quot;, (pop1-pop2)/4)&lt;br /&gt;
        self.incobject(&amp;quot;xp2_7&amp;quot;, (pop2-pop3)/5)&lt;br /&gt;
        self.incobject(&amp;quot;xs6_696&amp;quot;, (pop3-pop4)/8)&lt;br /&gt;
&lt;br /&gt;
    # Removes an object incident with (ix, iy) and returns the cell list:&lt;br /&gt;
    def grabobj(self, ix, iy):&lt;br /&gt;
&lt;br /&gt;
        allcells = [ix, iy, g.getcell(ix, iy)]&lt;br /&gt;
        g.setcell(ix, iy, 0)&lt;br /&gt;
        livecells = []&lt;br /&gt;
        deadcells = []&lt;br /&gt;
&lt;br /&gt;
        marker = 0&lt;br /&gt;
        ll = 3&lt;br /&gt;
&lt;br /&gt;
        while (marker &amp;lt; ll):&lt;br /&gt;
            x = allcells[marker]&lt;br /&gt;
            y = allcells[marker+1]&lt;br /&gt;
            z = allcells[marker+2]&lt;br /&gt;
            marker += 3&lt;br /&gt;
&lt;br /&gt;
            if ((z % 2) == 1):&lt;br /&gt;
                livecells.append(x)&lt;br /&gt;
                livecells.append(y)&lt;br /&gt;
            else:&lt;br /&gt;
                deadcells.append(x)&lt;br /&gt;
                deadcells.append(y)&lt;br /&gt;
&lt;br /&gt;
            for nx in xrange(x - 1, x + 2):&lt;br /&gt;
                for ny in xrange(y - 1, y + 2):&lt;br /&gt;
&lt;br /&gt;
                    nz = g.getcell(nx, ny)&lt;br /&gt;
                    if (nz &amp;gt; 0):&lt;br /&gt;
                        allcells.append(nx)&lt;br /&gt;
                        allcells.append(ny)&lt;br /&gt;
                        allcells.append(nz)&lt;br /&gt;
                        g.setcell(nx, ny, 0)&lt;br /&gt;
                        ll += 3&lt;br /&gt;
&lt;br /&gt;
        return livecells&lt;br /&gt;
&lt;br /&gt;
    # Command to Grab, Remove and IDentify an OBJect:&lt;br /&gt;
    def gridobj(self, ix, iy, gsize, gspacing, pos):&lt;br /&gt;
&lt;br /&gt;
        allcells = [ix, iy, g.getcell(ix, iy)]&lt;br /&gt;
        g.setcell(ix, iy, 0)&lt;br /&gt;
        livecells = []&lt;br /&gt;
        deadcells = []&lt;br /&gt;
&lt;br /&gt;
        # This tacitly assumes the object is smaller than 1000-by-1000.&lt;br /&gt;
        # But this is okay, since it is only used by the routing logic.&lt;br /&gt;
        dleft = ix + 1000&lt;br /&gt;
        dright = ix - 1000&lt;br /&gt;
        dtop = iy + 1000&lt;br /&gt;
        dbottom = iy - 1000&lt;br /&gt;
&lt;br /&gt;
        lleft = ix + 1000&lt;br /&gt;
        lright = ix - 1000&lt;br /&gt;
        ltop = iy + 1000&lt;br /&gt;
        lbottom = iy - 1000&lt;br /&gt;
&lt;br /&gt;
        lpop = 0&lt;br /&gt;
        dpop = 0&lt;br /&gt;
&lt;br /&gt;
        marker = 0&lt;br /&gt;
        ll = 3&lt;br /&gt;
&lt;br /&gt;
        while (marker &amp;lt; ll):&lt;br /&gt;
            x = allcells[marker]&lt;br /&gt;
            y = allcells[marker+1]&lt;br /&gt;
            z = allcells[marker+2]&lt;br /&gt;
            marker += 3&lt;br /&gt;
&lt;br /&gt;
            if ((z % 2) == 1):&lt;br /&gt;
                livecells.append(x)&lt;br /&gt;
                livecells.append(y)&lt;br /&gt;
                lleft = min(lleft, x)&lt;br /&gt;
                lright = max(lright, x)&lt;br /&gt;
                ltop = min(ltop, y)&lt;br /&gt;
                lbottom = max(lbottom, y)&lt;br /&gt;
                lpop += 1&lt;br /&gt;
            else:&lt;br /&gt;
                deadcells.append(x)&lt;br /&gt;
                deadcells.append(y)&lt;br /&gt;
                dleft = min(dleft, x)&lt;br /&gt;
                dright = max(dright, x)&lt;br /&gt;
                dtop = min(dtop, y)&lt;br /&gt;
                dbottom = max(dbottom, y)&lt;br /&gt;
                dpop += 1&lt;br /&gt;
&lt;br /&gt;
            for nx in xrange(x - 1, x + 2):&lt;br /&gt;
                for ny in xrange(y - 1, y + 2):&lt;br /&gt;
&lt;br /&gt;
                    nz = g.getcell(nx, ny)&lt;br /&gt;
                    if (nz &amp;gt; 0):&lt;br /&gt;
                        allcells.append(nx)&lt;br /&gt;
                        allcells.append(ny)&lt;br /&gt;
                        allcells.append(nz)&lt;br /&gt;
                        g.setcell(nx, ny, 0)&lt;br /&gt;
                        ll += 3&lt;br /&gt;
&lt;br /&gt;
        lwidth = max(0, 1 + lright - lleft)&lt;br /&gt;
        lheight = max(0, 1 + lbottom - ltop)&lt;br /&gt;
        dwidth = max(0, 1 + dright - dleft)&lt;br /&gt;
        dheight = max(0, 1 + dbottom - dtop)&lt;br /&gt;
&lt;br /&gt;
        llength = max(lwidth, lheight)&lt;br /&gt;
        lbreadth = min(lwidth, lheight)&lt;br /&gt;
        dlength = max(dwidth, dheight)&lt;br /&gt;
        dbreadth = min(dwidth, dheight)&lt;br /&gt;
&lt;br /&gt;
        self.gridsize = max(self.gridsize, llength)&lt;br /&gt;
&lt;br /&gt;
        objid = &amp;quot;unidentified&amp;quot;&lt;br /&gt;
        bitstring = 0&lt;br /&gt;
&lt;br /&gt;
        if (lpop == 0):&lt;br /&gt;
            objid = &amp;quot;nothing&amp;quot;&lt;br /&gt;
        else:&lt;br /&gt;
            if ((lwidth &amp;lt;= 7) &amp;amp; (lheight &amp;lt;= 7)):&lt;br /&gt;
                for i in xrange(0, lpop*2, 2):&lt;br /&gt;
                    bitstring += (1 &amp;lt;&amp;lt; ((livecells[i] - lleft) + 7*(livecells[i + 1] - ltop)))&lt;br /&gt;
&lt;br /&gt;
                if bitstring in self.cache:&lt;br /&gt;
                    objid = self.cache[bitstring]&lt;br /&gt;
&lt;br /&gt;
        if (objid == &amp;quot;unidentified&amp;quot;):&lt;br /&gt;
            # This has passed through the routing logic without being identified,&lt;br /&gt;
            # so save it in a temporary list for later identification:&lt;br /&gt;
            self.unids.append(bitstring)&lt;br /&gt;
            self.unids.append(livecells)&lt;br /&gt;
            self.unids.append(lleft)&lt;br /&gt;
            self.unids.append(ltop)&lt;br /&gt;
        elif (objid != &amp;quot;nothing&amp;quot;):&lt;br /&gt;
            # The object is non-empty, so add it to the census:&lt;br /&gt;
            ux = int(0.5 + float(lleft)/float(gspacing))&lt;br /&gt;
            uy = int(0.5 + float(ltop)/float(gspacing))&lt;br /&gt;
            soupid = ux + (uy * gsize) + pos&lt;br /&gt;
&lt;br /&gt;
            # Check whether the cached object is in the set of decompositions&lt;br /&gt;
            # (this is usually the case, unless for example it is a high-period&lt;br /&gt;
            # albeit small spaceship):&lt;br /&gt;
            if objid in self.decompositions:            &lt;br /&gt;
                for comp in self.decompositions[objid]:&lt;br /&gt;
                    self.incobject(comp, 1)&lt;br /&gt;
                    self.awardpoints2(soupid, comp)&lt;br /&gt;
            else:&lt;br /&gt;
                self.incobject(objid, 1)&lt;br /&gt;
                self.awardpoints2(soupid, objid)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # Tests for population periodicity:&lt;br /&gt;
    def naivestab(self, period, security, length):&lt;br /&gt;
&lt;br /&gt;
        depth = 0&lt;br /&gt;
        prevpop = 0&lt;br /&gt;
        for i in xrange(length):&lt;br /&gt;
            g.run(period)&lt;br /&gt;
            currpop = int(g.getpop())&lt;br /&gt;
            if (currpop == prevpop):&lt;br /&gt;
                depth += 1&lt;br /&gt;
            else:&lt;br /&gt;
                depth = 0&lt;br /&gt;
            prevpop = currpop&lt;br /&gt;
            if (depth == security):&lt;br /&gt;
                # Population is periodic.&lt;br /&gt;
                return True&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # This should catch most short-lived soups with few gliders produced:&lt;br /&gt;
    def naivestab2(self, period, length):&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(length):&lt;br /&gt;
            r = g.getrect()&lt;br /&gt;
            if (len(r) == 0):&lt;br /&gt;
                return True&lt;br /&gt;
            pop0 = int(g.getpop())&lt;br /&gt;
            g.run(period)&lt;br /&gt;
            hash1 = g.hash(r)&lt;br /&gt;
            pop1 = int(g.getpop())&lt;br /&gt;
            g.run(period)&lt;br /&gt;
            hash2 = g.hash(r)&lt;br /&gt;
            pop2 = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
            if ((hash1 == hash2) &amp;amp; (pop0 == pop1) &amp;amp; (pop1 == pop2)):&lt;br /&gt;
&lt;br /&gt;
                if (g.getrect() == r):&lt;br /&gt;
                    return True&lt;br /&gt;
                &lt;br /&gt;
                g.run((2*int(max(r[2], r[3])/period)+1)*period)&lt;br /&gt;
                hash3 = g.hash(r)&lt;br /&gt;
                pop3 = int(g.getpop())&lt;br /&gt;
                if ((hash2 == hash3) &amp;amp; (pop2 == pop3)):&lt;br /&gt;
                    return True&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
            &lt;br /&gt;
    # Runs a pattern until stabilisation with a 99.99996% success rate.&lt;br /&gt;
    # False positives are handled by a later error-correction stage.&lt;br /&gt;
    def stabilise3(self):&lt;br /&gt;
&lt;br /&gt;
        # Phase I of stabilisation detection, designed to weed out patterns&lt;br /&gt;
        # that stabilise into a cluster of low-period oscillators within&lt;br /&gt;
        # about 6000 generations.&lt;br /&gt;
&lt;br /&gt;
        if (self.naivestab2(12, 10)):&lt;br /&gt;
            return 4;&lt;br /&gt;
&lt;br /&gt;
        if (self.naivestab(12, 30, 200)):&lt;br /&gt;
            return 4;&lt;br /&gt;
&lt;br /&gt;
        if (self.naivestab(30, 30, 200)):&lt;br /&gt;
            return 5;&lt;br /&gt;
&lt;br /&gt;
        # Phase II of stabilisation detection, which is much more rigorous&lt;br /&gt;
        # and based on oscar.py.&lt;br /&gt;
&lt;br /&gt;
        # Should be sufficient:&lt;br /&gt;
        prect = [-2000, -2000, 4000, 4000]&lt;br /&gt;
&lt;br /&gt;
        # initialize lists&lt;br /&gt;
        hashlist = []        # for pattern hash values&lt;br /&gt;
        genlist = []         # corresponding generation counts&lt;br /&gt;
&lt;br /&gt;
        for j in xrange(4000):&lt;br /&gt;
&lt;br /&gt;
            g.run(30)&lt;br /&gt;
&lt;br /&gt;
            h = g.hash(prect)&lt;br /&gt;
&lt;br /&gt;
            # determine where to insert h into hashlist&lt;br /&gt;
            pos = 0&lt;br /&gt;
            listlen = len(hashlist)&lt;br /&gt;
            while pos &amp;lt; listlen:&lt;br /&gt;
                if h &amp;gt; hashlist[pos]:&lt;br /&gt;
                    pos += 1&lt;br /&gt;
                elif h &amp;lt; hashlist[pos]:&lt;br /&gt;
                    # shorten lists and append info below&lt;br /&gt;
                    del hashlist[pos : listlen]&lt;br /&gt;
                    del genlist[pos : listlen]&lt;br /&gt;
                    break&lt;br /&gt;
                else:&lt;br /&gt;
                    period = (int(g.getgen()) - genlist[pos])&lt;br /&gt;
&lt;br /&gt;
                    prevpop = g.getpop()&lt;br /&gt;
&lt;br /&gt;
                    for i in xrange(20):&lt;br /&gt;
                        g.run(period)&lt;br /&gt;
                        currpop = g.getpop()&lt;br /&gt;
                        if (currpop != prevpop):&lt;br /&gt;
                            period = max(period, 4000)&lt;br /&gt;
                            break&lt;br /&gt;
                        prevpop = currpop&lt;br /&gt;
                        &lt;br /&gt;
                    return max(1 + int(math.log(period, 2)),3)&lt;br /&gt;
&lt;br /&gt;
            hashlist.insert(pos, h)&lt;br /&gt;
            genlist.insert(pos, int(g.getgen()))&lt;br /&gt;
&lt;br /&gt;
        g.setalgo(&amp;quot;HashLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
        g.setbase(2)&lt;br /&gt;
        g.setstep(16)&lt;br /&gt;
        g.step()&lt;br /&gt;
        stepsize = 12&lt;br /&gt;
        g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
&lt;br /&gt;
        return 12&lt;br /&gt;
&lt;br /&gt;
    # Differs from oscar.py in that it detects absolute cycles, not eventual cycles.&lt;br /&gt;
    def bijoscar(self, maxsteps):&lt;br /&gt;
&lt;br /&gt;
        initpop = int(g.getpop())&lt;br /&gt;
        initrect = g.getrect()&lt;br /&gt;
        if (len(initrect) == 0):&lt;br /&gt;
            return 0&lt;br /&gt;
        inithash = g.hash(initrect)&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(maxsteps):&lt;br /&gt;
&lt;br /&gt;
            g.run(1)&lt;br /&gt;
&lt;br /&gt;
            if (int(g.getpop()) == initpop):&lt;br /&gt;
&lt;br /&gt;
                prect = g.getrect()&lt;br /&gt;
                phash = g.hash(prect)&lt;br /&gt;
&lt;br /&gt;
                if (phash == inithash):&lt;br /&gt;
&lt;br /&gt;
                    period = i + 1&lt;br /&gt;
&lt;br /&gt;
                    if (prect == initrect):&lt;br /&gt;
                        return period&lt;br /&gt;
                    else:&lt;br /&gt;
                        return -period&lt;br /&gt;
        return -1&lt;br /&gt;
&lt;br /&gt;
    # For a non-moving unidentified object, we check the dictionary of&lt;br /&gt;
    # memoized decompositions of possibly-pseudo-objects. If the object is&lt;br /&gt;
    # not already in the dictionary, it will be memoized.&lt;br /&gt;
    #&lt;br /&gt;
    # Low-period spaceships are also separated by this routine, although&lt;br /&gt;
    # this is less important now that there is a more bespoke prodecure&lt;br /&gt;
    # to handle disjoint unions of standard spaceships.&lt;br /&gt;
    #&lt;br /&gt;
    # @param moving  a bool which specifies whether the object is moving&lt;br /&gt;
    def enter_unid(self, unidname, soupid, moving):&lt;br /&gt;
&lt;br /&gt;
        if not(unidname in self.decompositions):&lt;br /&gt;
&lt;br /&gt;
            # Separate into pure components:&lt;br /&gt;
            if (moving):&lt;br /&gt;
                g.setrule(&amp;quot;APG_CoalesceObjects_&amp;quot; + self.rg.alphanumeric)&lt;br /&gt;
                g.setbase(2)&lt;br /&gt;
                g.setstep(3)&lt;br /&gt;
                g.step()&lt;br /&gt;
            else:&lt;br /&gt;
                pseudo_bangbang(self.rg.alphanumeric)&lt;br /&gt;
&lt;br /&gt;
            listoflists = [] # which incidentally don&#039;t contain themselves.&lt;br /&gt;
&lt;br /&gt;
            # Someone who plays the celllo:&lt;br /&gt;
            celllist = g.join(g.getcells(g.getrect()), [0])&lt;br /&gt;
&lt;br /&gt;
            for i in xrange(0, len(celllist)-1, 3):&lt;br /&gt;
                if (g.getcell(celllist[i], celllist[i+1]) != 0):&lt;br /&gt;
                    livecells = self.grabobj(celllist[i], celllist[i+1])&lt;br /&gt;
                    if (len(livecells) &amp;gt; 0):&lt;br /&gt;
                        listoflists.append(livecells)&lt;br /&gt;
&lt;br /&gt;
            listofobjs = []&lt;br /&gt;
&lt;br /&gt;
            for livecells in listoflists:&lt;br /&gt;
&lt;br /&gt;
                g.new(&amp;quot;Subcomponent&amp;quot;)&lt;br /&gt;
                g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
                g.setrule(self.rg.slashed)&lt;br /&gt;
                g.putcells(livecells)&lt;br /&gt;
                period = self.bijoscar(1000)&lt;br /&gt;
                canonised = canonise(abs(period))&lt;br /&gt;
                if (period &amp;lt; 0):&lt;br /&gt;
                    listofobjs.append(&amp;quot;xq&amp;quot;+str(0-period)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
                elif (period == 1):&lt;br /&gt;
                    listofobjs.append(&amp;quot;xs&amp;quot;+str(len(livecells)/2)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
                else:&lt;br /&gt;
                    listofobjs.append(&amp;quot;xp&amp;quot;+str(period)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
&lt;br /&gt;
            self.decompositions[unidname] = listofobjs&lt;br /&gt;
&lt;br /&gt;
        # Actually add to the census:&lt;br /&gt;
        for comp in self.decompositions[unidname]:&lt;br /&gt;
            self.incobject(comp, 1)&lt;br /&gt;
            self.awardpoints2(soupid, comp)&lt;br /&gt;
&lt;br /&gt;
    # This function has lots of arguments (hence the name):&lt;br /&gt;
    #&lt;br /&gt;
    # @param gsize     the square-root of the number of soups per page&lt;br /&gt;
    # @param gspacing  the minimum distance between centres of soups&lt;br /&gt;
    # @param ashes     a list of cell lists&lt;br /&gt;
    # @param stepsize  binary logarithm of amount of time to coalesce objects&lt;br /&gt;
    # @param intergen  binary logarithm of amount of time to run HashLife&lt;br /&gt;
    # @param pos       the index of the first soup on the page&lt;br /&gt;
    def teenager(self, gsize, gspacing, ashes, stepsize, intergen, pos):&lt;br /&gt;
&lt;br /&gt;
        # For error-correction:&lt;br /&gt;
        if (intergen &amp;gt; 0):&lt;br /&gt;
            g.setalgo(&amp;quot;HashLife&amp;quot;)&lt;br /&gt;
            g.setrule(self.rg.slashed)&lt;br /&gt;
&lt;br /&gt;
        # If this gets incremented, we panic and perform error-correction:&lt;br /&gt;
        pathological = 0&lt;br /&gt;
&lt;br /&gt;
        # Draw the soups:&lt;br /&gt;
        for i in xrange(gsize * gsize):&lt;br /&gt;
&lt;br /&gt;
            x = int(i % gsize)&lt;br /&gt;
            y = int(i / gsize)&lt;br /&gt;
&lt;br /&gt;
            g.putcells(ashes[3*i], gspacing * x, gspacing * y)&lt;br /&gt;
&lt;br /&gt;
        # Because why not?&lt;br /&gt;
        g.fit()&lt;br /&gt;
        g.update()&lt;br /&gt;
&lt;br /&gt;
        # For error-correction:&lt;br /&gt;
        if (intergen &amp;gt; 0):&lt;br /&gt;
            g.setbase(2)&lt;br /&gt;
            g.setstep(intergen)&lt;br /&gt;
            g.step()&lt;br /&gt;
&lt;br /&gt;
        # Apply rules to coalesce objects and expunge annoyances such as&lt;br /&gt;
        # blocks, blinkers, beehives and gliders:&lt;br /&gt;
        start_time = time.clock()&lt;br /&gt;
        self.census(stepsize)&lt;br /&gt;
        end_time = time.clock()&lt;br /&gt;
        self.ruletime += (end_time - start_time)&lt;br /&gt;
&lt;br /&gt;
        # Now begin identifying objects:&lt;br /&gt;
        start_time = time.clock()&lt;br /&gt;
        celllist = g.join(g.getcells(g.getrect()), [0])&lt;br /&gt;
&lt;br /&gt;
        if (len(celllist) &amp;gt; 2):&lt;br /&gt;
            for i in xrange(0, len(celllist)-1, 3):&lt;br /&gt;
                if (g.getcell(celllist[i], celllist[i+1]) != 0):&lt;br /&gt;
                    self.gridobj(celllist[i], celllist[i+1], gsize, gspacing, pos)&lt;br /&gt;
&lt;br /&gt;
        # If we have leftover unidentified objects, attempt to canonise them:&lt;br /&gt;
        while (len(self.unids) &amp;gt; 0):&lt;br /&gt;
            ux = int(0.5 + float(self.unids[-2])/float(gspacing))&lt;br /&gt;
            uy = int(0.5 + float(self.unids[-1])/float(gspacing))&lt;br /&gt;
            soupid = ux + (uy * gsize) + pos&lt;br /&gt;
            unidname = self.process_unid()&lt;br /&gt;
            if (unidname == &amp;quot;PATHOLOGICAL&amp;quot;):&lt;br /&gt;
                pathological += 1&lt;br /&gt;
            if (unidname != &amp;quot;nothing&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
                if ((unidname[0] == &#039;U&#039;) &amp;amp; (unidname[1] == &#039;S&#039;) &amp;amp; (unidname[2] == &#039;S&#039;)):&lt;br /&gt;
                    &lt;br /&gt;
                    # Union of standard spaceships:&lt;br /&gt;
                    countlist = unidname.split(&#039;_&#039;)&lt;br /&gt;
                    &lt;br /&gt;
                    self.incobject(&amp;quot;xq4_6frc&amp;quot;, int(countlist[1]))&lt;br /&gt;
                    for i in xrange(int(countlist[1])):&lt;br /&gt;
                        self.awardpoints2(soupid, &amp;quot;xq4_6frc&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
                    self.incobject(&amp;quot;xq4_27dee6&amp;quot;, int(countlist[2]))&lt;br /&gt;
                    for i in xrange(int(countlist[2])):&lt;br /&gt;
                        self.awardpoints2(soupid, &amp;quot;xq4_27dee6&amp;quot;)&lt;br /&gt;
                        &lt;br /&gt;
                    self.incobject(&amp;quot;xq4_27deee6&amp;quot;, int(countlist[3]))&lt;br /&gt;
                    for i in xrange(int(countlist[3])):&lt;br /&gt;
                        self.awardpoints2(soupid, &amp;quot;xq4_27deee6&amp;quot;)&lt;br /&gt;
                        &lt;br /&gt;
                elif ((unidname[0] == &#039;x&#039;) &amp;amp; ((unidname[1] == &#039;s&#039;) | (unidname[1] == &#039;p&#039;))):&lt;br /&gt;
                    self.enter_unid(unidname, soupid, False)&lt;br /&gt;
                else:&lt;br /&gt;
                    if ((unidname[0] == &#039;x&#039;) &amp;amp; (unidname[1] == &#039;q&#039;) &amp;amp; (unidname[3] == &#039;_&#039;)):&lt;br /&gt;
                        # Separates low-period (&amp;lt;= 9) non-standard spaceships in medium proximity:&lt;br /&gt;
                        self.enter_unid(unidname, soupid, True)&lt;br /&gt;
                    else:&lt;br /&gt;
                        self.incobject(unidname, 1)&lt;br /&gt;
                        self.awardpoints2(soupid, unidname)&lt;br /&gt;
&lt;br /&gt;
        end_time = time.clock()&lt;br /&gt;
        self.gridtime += (end_time - start_time)&lt;br /&gt;
&lt;br /&gt;
        return pathological&lt;br /&gt;
&lt;br /&gt;
    def stabilise_soups_parallel(self, root, pos, gsize, sym):&lt;br /&gt;
&lt;br /&gt;
        souplist = [[sym, root + str(pos + i)] for i in xrange(gsize * gsize)]&lt;br /&gt;
&lt;br /&gt;
        return self.stabilise_soups_parallel_orig(gsize, souplist, pos)&lt;br /&gt;
&lt;br /&gt;
    def stabilise_soups_parallel_list(self, gsize, stringlist, pos):&lt;br /&gt;
&lt;br /&gt;
        souplist = [s.split(&#039;/&#039;) for s in stringlist]&lt;br /&gt;
&lt;br /&gt;
        return self.stabilise_soups_parallel_orig(gsize, souplist, pos)&lt;br /&gt;
&lt;br /&gt;
    # This basically orchestrates everything:&lt;br /&gt;
    def stabilise_soups_parallel_orig(self, gsize, souplist, pos):&lt;br /&gt;
&lt;br /&gt;
        ashes = []&lt;br /&gt;
        stepsize = 3&lt;br /&gt;
&lt;br /&gt;
        g.new(&amp;quot;Random soups&amp;quot;)&lt;br /&gt;
        g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
&lt;br /&gt;
        gspacing = 0&lt;br /&gt;
&lt;br /&gt;
        # Generate and run the soups until stabilisation:&lt;br /&gt;
        for i in xrange(gsize * gsize):&lt;br /&gt;
&lt;br /&gt;
            if (i &amp;lt; len(souplist)):&lt;br /&gt;
&lt;br /&gt;
                sym = souplist[i][0]&lt;br /&gt;
                prehash = souplist[i][1]&lt;br /&gt;
&lt;br /&gt;
                # Generate the soup from the SHA-256 of the concatenation of the&lt;br /&gt;
                # seed with the index:&lt;br /&gt;
                g.putcells(hashsoup(prehash, sym), 0, 0)&lt;br /&gt;
&lt;br /&gt;
            # Run the soup until stabilisation:&lt;br /&gt;
            start_time = time.clock()&lt;br /&gt;
            stepsize = max(stepsize, self.stabilise3())&lt;br /&gt;
            end_time = time.clock()&lt;br /&gt;
            self.qlifetime += (end_time - start_time)&lt;br /&gt;
&lt;br /&gt;
            # Ironically, the spelling of this variable is incurrrect:&lt;br /&gt;
            currrect = g.getrect()&lt;br /&gt;
            ashes.append(g.getcells(currrect))&lt;br /&gt;
&lt;br /&gt;
            if (len(currrect) == 4):&lt;br /&gt;
                ashes.append(currrect[0])&lt;br /&gt;
                ashes.append(currrect[1])&lt;br /&gt;
                # Choose the grid spacing based on the size of the ash:&lt;br /&gt;
                gspacing = max(gspacing, 2*currrect[2])&lt;br /&gt;
                gspacing = max(gspacing, 2*currrect[3])&lt;br /&gt;
                g.select(currrect)&lt;br /&gt;
                g.clear(0)&lt;br /&gt;
            else:&lt;br /&gt;
                ashes.append(0)&lt;br /&gt;
                ashes.append(0)&lt;br /&gt;
            g.select([])&lt;br /&gt;
&lt;br /&gt;
        # Account for any extra enlargement caused by running CoalesceObjects:&lt;br /&gt;
        gspacing += 2 ** (stepsize + 1) + 1000&lt;br /&gt;
&lt;br /&gt;
        start_time = time.clock()&lt;br /&gt;
&lt;br /&gt;
        # Remember the dictionary, just in case we have a pathological object:&lt;br /&gt;
        prevdict = self.objectcounts.copy()&lt;br /&gt;
        prevscores = self.soupscores.copy()&lt;br /&gt;
        prevunids = self.superunids[:]&lt;br /&gt;
&lt;br /&gt;
        # Process the soups:&lt;br /&gt;
        returncode = self.teenager(gsize, gspacing, ashes, stepsize, 0, pos)&lt;br /&gt;
&lt;br /&gt;
        end_time = time.clock()&lt;br /&gt;
&lt;br /&gt;
        # Calculate the mean delay incurred (excluding qlifetime or error-correction):&lt;br /&gt;
        meandelay = (end_time - start_time) / (gsize * gsize)&lt;br /&gt;
&lt;br /&gt;
        if (returncode &amp;gt; 0):&lt;br /&gt;
            if (self.skipErrorCorrection == False):&lt;br /&gt;
                # Arrrggghhhh, there&#039;s a pathological object! Usually this means&lt;br /&gt;
                # that naive stabilisation detection returned a false positive.&lt;br /&gt;
                self.resets += 1&lt;br /&gt;
                &lt;br /&gt;
                # Reset the object counts:&lt;br /&gt;
                self.objectcounts = prevdict&lt;br /&gt;
                self.soupscores = prevscores&lt;br /&gt;
                self.superunids = prevunids&lt;br /&gt;
&lt;br /&gt;
                # 2^18 generations should suffice. This takes about 30 seconds in&lt;br /&gt;
                # HashLife, but error-correction only occurs very infrequently, so&lt;br /&gt;
                # this has a negligible impact on mean performance:&lt;br /&gt;
                gspacing += 2 ** 19&lt;br /&gt;
                stepsize = max(stepsize, 12)&lt;br /&gt;
                &lt;br /&gt;
                # Clear the universe:&lt;br /&gt;
                g.new(&amp;quot;Error-correcting phase&amp;quot;)&lt;br /&gt;
                self.teenager(gsize, gspacing, ashes, stepsize, 18, pos)&lt;br /&gt;
&lt;br /&gt;
        # Erase any ashes. Not least because England usually loses...&lt;br /&gt;
        ashes = []&lt;br /&gt;
&lt;br /&gt;
        # Return the mean delay so that we can use machine-learning to&lt;br /&gt;
        # find the optimal value of sqrtspp:&lt;br /&gt;
        return meandelay&lt;br /&gt;
&lt;br /&gt;
    def reset(self):&lt;br /&gt;
&lt;br /&gt;
        self.objectcounts = {}&lt;br /&gt;
        self.soupscores = {}&lt;br /&gt;
        self.alloccur = {}&lt;br /&gt;
        self.superunids = []&lt;br /&gt;
        self.unids = []&lt;br /&gt;
&lt;br /&gt;
    # Pop the last unidentified object from the stack, and attempt to&lt;br /&gt;
    # ascertain its period and classify it.&lt;br /&gt;
    def process_unid(self):&lt;br /&gt;
&lt;br /&gt;
        g.new(&amp;quot;Unidentified object&amp;quot;)&lt;br /&gt;
        g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
        y = self.unids.pop()&lt;br /&gt;
        x = self.unids.pop()&lt;br /&gt;
        livecells = self.unids.pop()&lt;br /&gt;
        bitstring = self.unids.pop()&lt;br /&gt;
        g.putcells(livecells, -x, -y, 1, 0, 0, 1, &amp;quot;or&amp;quot;)&lt;br /&gt;
        period = self.bijoscar(1000)&lt;br /&gt;
        &lt;br /&gt;
        if (period == -1):&lt;br /&gt;
            # Infinite growth pattern, probably. Most infinite-growth&lt;br /&gt;
            # patterns are linear-growth (such as puffers, wickstretchers,&lt;br /&gt;
            # guns etc.) so we analyse to see whether we have a linear-&lt;br /&gt;
            # growth pattern:&lt;br /&gt;
            descriptor = linearlyse(1500)&lt;br /&gt;
            if (descriptor[0] == &amp;quot;y&amp;quot;):&lt;br /&gt;
                return descriptor&lt;br /&gt;
&lt;br /&gt;
            # Similarly check for irregular power-law growth. This will&lt;br /&gt;
            # catch replicators, for instance. Spend around 375 000&lt;br /&gt;
            # generations; this seems like a reasonable amount of time.&lt;br /&gt;
            descriptor = powerlyse(8, 1500)&lt;br /&gt;
            if (descriptor[0] == &amp;quot;z&amp;quot;):&lt;br /&gt;
                return descriptor&lt;br /&gt;
&lt;br /&gt;
            # It may be an unstabilised ember that slipped through the net,&lt;br /&gt;
            # but this will be handled by error-correction (unless it&lt;br /&gt;
            # persists another 2^18 gens, which is so unbelievably improbable&lt;br /&gt;
            # that you are more likely to be picked up by a passing ship in&lt;br /&gt;
            # the vacuum of space).&lt;br /&gt;
            self.superunids.append(livecells)&lt;br /&gt;
            self.superunids.append(x)&lt;br /&gt;
            self.superunids.append(y)&lt;br /&gt;
            &lt;br /&gt;
            return &amp;quot;PATHOLOGICAL&amp;quot;&lt;br /&gt;
        elif (period == 0):&lt;br /&gt;
            return &amp;quot;nothing&amp;quot;&lt;br /&gt;
        else:&lt;br /&gt;
            if (period == -4):&lt;br /&gt;
&lt;br /&gt;
                triple = countxwsses()&lt;br /&gt;
&lt;br /&gt;
                if (triple != (-1, -1, -1)):&lt;br /&gt;
&lt;br /&gt;
                    # Union of Standard Spaceships:&lt;br /&gt;
                    return (&amp;quot;USS_&amp;quot; + str(triple[0]) + &amp;quot;_&amp;quot; + str(triple[1]) + &amp;quot;_&amp;quot; + str(triple[2]))&lt;br /&gt;
&lt;br /&gt;
            &lt;br /&gt;
            canonised = canonise(abs(period))&lt;br /&gt;
&lt;br /&gt;
            if (canonised == &amp;quot;#&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
                # Okay, we know that it&#039;s an oscillator or spaceship with&lt;br /&gt;
                # a non-astronomical period. But it&#039;s too large to canonise&lt;br /&gt;
                # in any of its phases (i.e. transcends a 40-by-40 box).&lt;br /&gt;
                self.superunids.append(livecells)&lt;br /&gt;
                self.superunids.append(x)&lt;br /&gt;
                self.superunids.append(y)&lt;br /&gt;
                &lt;br /&gt;
                # Append a suffix according to whether it is a still-life,&lt;br /&gt;
                # oscillator or moving object:&lt;br /&gt;
                if (period == 1):&lt;br /&gt;
                    descriptor = (&amp;quot;ov_s&amp;quot;+str(len(livecells)/2))&lt;br /&gt;
                elif (period &amp;gt; 0):&lt;br /&gt;
                    descriptor = (&amp;quot;ov_p&amp;quot;+str(period))&lt;br /&gt;
                else:&lt;br /&gt;
                    descriptor = (&amp;quot;ov_q&amp;quot;+str(0-period))&lt;br /&gt;
&lt;br /&gt;
                return descriptor&lt;br /&gt;
            &lt;br /&gt;
            else:&lt;br /&gt;
&lt;br /&gt;
                # Prepend a prefix according to whether it is a still-life,&lt;br /&gt;
                # oscillator or moving object:&lt;br /&gt;
                if (period == 1):&lt;br /&gt;
                    descriptor = (&amp;quot;xs&amp;quot;+str(len(livecells)/2)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
                elif (period &amp;gt; 0):&lt;br /&gt;
                    descriptor = (&amp;quot;xp&amp;quot;+str(period)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
                else:&lt;br /&gt;
                    descriptor = (&amp;quot;xq&amp;quot;+str(0-period)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
&lt;br /&gt;
                if (bitstring &amp;gt; 0):&lt;br /&gt;
                    self.cache[bitstring] = descriptor&lt;br /&gt;
&lt;br /&gt;
                return descriptor&lt;br /&gt;
&lt;br /&gt;
    # This doesn&#039;t really do much, since unids should be empty and&lt;br /&gt;
    # actual pathological/oversized objects will rarely arise naturally.&lt;br /&gt;
    def display_unids(self):&lt;br /&gt;
&lt;br /&gt;
        g.new(&amp;quot;Unidentified objects&amp;quot;)&lt;br /&gt;
        g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
&lt;br /&gt;
        rowlength = 1 + int(math.sqrt(len(self.superunids)/3))&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(len(self.superunids)/3):&lt;br /&gt;
&lt;br /&gt;
            xpos = i % rowlength&lt;br /&gt;
            ypos = int(i / rowlength)&lt;br /&gt;
&lt;br /&gt;
            g.putcells(self.superunids[3*i], xpos * (self.gridsize + 8) - self.superunids[3*i + 1], ypos * (self.gridsize + 8) - self.superunids[3*i + 2], 1, 0, 0, 1, &amp;quot;or&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        g.fit()&lt;br /&gt;
        g.update()&lt;br /&gt;
&lt;br /&gt;
    def compactify_scores(self):&lt;br /&gt;
&lt;br /&gt;
        # Number of soups to record:&lt;br /&gt;
        highscores = 100&lt;br /&gt;
        ilist = sorted(self.soupscores.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
&lt;br /&gt;
        # Empty the high score table:&lt;br /&gt;
        self.soupscores = {}&lt;br /&gt;
        &lt;br /&gt;
        for soupnum, score in ilist[:highscores]:&lt;br /&gt;
            self.soupscores[soupnum] = score&lt;br /&gt;
&lt;br /&gt;
    # Saves a machine-readable textual file containing the census:&lt;br /&gt;
    def save_progress(self, numsoups, root, symmetry=&#039;C1&#039;, save_file=True, payosha256_key=None):&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Saving progress...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Count the total number of objects:&lt;br /&gt;
        totobjs = 0&lt;br /&gt;
        censustable = &amp;quot;@CENSUS TABLE\n&amp;quot;&lt;br /&gt;
        tlist = sorted(self.objectcounts.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
        for objname, count in tlist:&lt;br /&gt;
            totobjs += count&lt;br /&gt;
            censustable += objname + &amp;quot; &amp;quot; + str(count) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Writing header information...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # The MD5 hash of the root string:&lt;br /&gt;
        md5root = hashlib.md5(root).hexdigest()&lt;br /&gt;
&lt;br /&gt;
        # Header information:&lt;br /&gt;
        results = &amp;quot;@VERSION v1.1\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@MD5 &amp;quot;+md5root+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@ROOT &amp;quot;+root+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@RULE &amp;quot;+self.rg.alphanumeric+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@SYMMETRY &amp;quot;+symmetry+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@NUM_SOUPS &amp;quot;+str(numsoups)+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@NUM_OBJECTS &amp;quot;+str(totobjs)+&amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        results += &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Census table:&lt;br /&gt;
        results += censustable&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Compactifying score table...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        results += &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Number of soups to record:&lt;br /&gt;
        highscores = 100&lt;br /&gt;
&lt;br /&gt;
        results += &amp;quot;@TOP &amp;quot;+str(highscores)+&amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        ilist = sorted(self.soupscores.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
&lt;br /&gt;
        # Empty the high score table:&lt;br /&gt;
        self.soupscores = {}&lt;br /&gt;
        &lt;br /&gt;
        for soupnum, score in ilist[:highscores]:&lt;br /&gt;
            self.soupscores[soupnum] = score&lt;br /&gt;
            results += str(soupnum) + &amp;quot; &amp;quot; + str(score) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Saving soupids for rare objects...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        results += &amp;quot;\n@SAMPLE_SOUPIDS\n&amp;quot;&lt;br /&gt;
        for objname, count in tlist:&lt;br /&gt;
            # blinkers and gliders have no alloccur[] entry for some reason,&lt;br /&gt;
            # so the line below avoids errors in B3/S23, maybe other rules too?&lt;br /&gt;
            if objname in self.alloccur:&lt;br /&gt;
                results += objname&lt;br /&gt;
                for soup in self.alloccur[objname]:&lt;br /&gt;
                    results += &amp;quot; &amp;quot; + str(soup)&lt;br /&gt;
                results += &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Writing progress file...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        dirname = g.getdir(&amp;quot;data&amp;quot;)&lt;br /&gt;
        separator = dirname[-1]&lt;br /&gt;
        progresspath = dirname + &amp;quot;apgsearch&amp;quot; + separator + &amp;quot;progress&amp;quot; + separator&lt;br /&gt;
        if not os.path.exists(progresspath):&lt;br /&gt;
            os.makedirs(progresspath)&lt;br /&gt;
&lt;br /&gt;
        filename = progresspath + &amp;quot;search_&amp;quot; + md5root + &amp;quot;.txt&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        try:&lt;br /&gt;
            f = open(filename, &#039;w&#039;)&lt;br /&gt;
            f.write(results)&lt;br /&gt;
            f.close()&lt;br /&gt;
        except:&lt;br /&gt;
            g.warn(&amp;quot;Unable to create progress file:\n&amp;quot; + filename)&lt;br /&gt;
&lt;br /&gt;
        if payosha256_key is not None:&lt;br /&gt;
            if (len(payosha256_key) &amp;gt; 0):&lt;br /&gt;
                return catagolue_results(results, payosha256_key, &amp;quot;post_apgsearch_haul&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Save soup RLE:&lt;br /&gt;
    def save_soup(self, root, soupnum, symmetry):&lt;br /&gt;
&lt;br /&gt;
        # Soup pattern will be stored in a temporary directory:&lt;br /&gt;
        souphash = hashlib.sha256(root + str(soupnum))&lt;br /&gt;
        rlepath = souphash.hexdigest()&lt;br /&gt;
        rlepath = g.getdir(&amp;quot;temp&amp;quot;) + rlepath + &amp;quot;.rle&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        results = &amp;quot;&amp;lt;a href=\&amp;quot;open:&amp;quot; + rlepath + &amp;quot;\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        results += str(soupnum)&lt;br /&gt;
        results += &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Try to write soup patterns to file &amp;quot;rlepath&amp;quot;:&lt;br /&gt;
        try:&lt;br /&gt;
            g.store(hashsoup(root + str(soupnum), symmetry), rlepath)&lt;br /&gt;
        except:&lt;br /&gt;
            g.warn(&amp;quot;Unable to create soup pattern:\n&amp;quot; + rlepath)&lt;br /&gt;
&lt;br /&gt;
        return results&lt;br /&gt;
        &lt;br /&gt;
    # Display results in Help window:&lt;br /&gt;
    def display_census(self, numsoups, root, symmetry):&lt;br /&gt;
&lt;br /&gt;
        dirname = g.getdir(&amp;quot;data&amp;quot;)&lt;br /&gt;
        separator = dirname[-1]&lt;br /&gt;
        apgpath = dirname + &amp;quot;apgsearch&amp;quot; + separator&lt;br /&gt;
        objectspath = apgpath + &amp;quot;objects&amp;quot; + separator + self.rg.alphanumeric + separator&lt;br /&gt;
        if not os.path.exists(objectspath):&lt;br /&gt;
            os.makedirs(objectspath)&lt;br /&gt;
&lt;br /&gt;
        results = &amp;quot;&amp;lt;html&amp;gt;\n&amp;lt;title&amp;gt;Census results&amp;lt;/title&amp;gt;\n&amp;lt;body bgcolor=\&amp;quot;#FFFFCE\&amp;quot;&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;p&amp;gt;Census results after processing &amp;quot; + str(numsoups) + &amp;quot; soups (seed = &amp;quot; + root + &amp;quot;, symmetry = &amp;quot; + symmetry + &amp;quot;):\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        tlist = sorted(self.objectcounts.iteritems(), key=operator.itemgetter(1), reverse=True)    &lt;br /&gt;
        results += &amp;quot;&amp;lt;p&amp;gt;&amp;lt;center&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;table cellspacing=1 border=2 cols=2&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;Object&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td align=center&amp;gt;&amp;amp;nbsp;Common name&amp;amp;nbsp;&amp;lt;/td&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;td align=right&amp;gt;&amp;amp;nbsp;Count&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;Sample occurrences&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
        for objname, count in tlist:&lt;br /&gt;
            if (objname[0] == &#039;x&#039;):&lt;br /&gt;
                if (objname[1] == &#039;p&#039;):&lt;br /&gt;
                    results += &amp;quot;&amp;lt;tr bgcolor=\&amp;quot;#CECECF\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
                elif (objname[1] == &#039;q&#039;):&lt;br /&gt;
                    results += &amp;quot;&amp;lt;tr bgcolor=\&amp;quot;#CEFFCE\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
                else:&lt;br /&gt;
                    results += &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;&lt;br /&gt;
            else:&lt;br /&gt;
                results += &amp;quot;&amp;lt;tr bgcolor=\&amp;quot;#FFCECE\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
            results += &amp;quot;&amp;lt;td&amp;gt;&amp;quot;&lt;br /&gt;
            results += &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            # Using &amp;quot;open:&amp;quot; link enables one to click on the object name to open the pattern in Golly:&lt;br /&gt;
            rlepath = objectspath + objname + &amp;quot;.rle&amp;quot;&lt;br /&gt;
            if (objname[0] == &#039;x&#039;):&lt;br /&gt;
                results += &amp;quot;&amp;lt;a href=\&amp;quot;open:&amp;quot; + rlepath + &amp;quot;\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
            # If the name is longer than that of the block-laying switch engine:&lt;br /&gt;
            if len(objname) &amp;gt; 51:&lt;br /&gt;
                # Contract name and include ellipsis:&lt;br /&gt;
                results += objname[:40] + &amp;quot;&amp;amp;#8230;&amp;quot; + objname[-10:]&lt;br /&gt;
            else:&lt;br /&gt;
                results += objname&lt;br /&gt;
            if (objname[0] == &#039;x&#039;):&lt;br /&gt;
                results += &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;&lt;br /&gt;
            results += &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            if (objname[0] == &#039;x&#039;):&lt;br /&gt;
                # save object in rlepath if it doesn&#039;t exist&lt;br /&gt;
                if not os.path.exists(rlepath):&lt;br /&gt;
                    # Canonised objects are at most 40-by-40:&lt;br /&gt;
                    rledata = &amp;quot;x = 40, y = 40, rule = &amp;quot; + self.rg.slashed + &amp;quot;\n&amp;quot;&lt;br /&gt;
                    # http://ferkeltongs.livejournal.com/15837.html&lt;br /&gt;
                    compact = objname.split(&#039;_&#039;)[1] + &amp;quot;z&amp;quot;&lt;br /&gt;
                    i = 0&lt;br /&gt;
                    strip = []&lt;br /&gt;
                    while (i &amp;lt; len(compact)):&lt;br /&gt;
                        c = ord2(compact[i])&lt;br /&gt;
                        if (c &amp;gt;= 0):&lt;br /&gt;
                            if (c &amp;lt; 32):&lt;br /&gt;
                                # Conventional character:&lt;br /&gt;
                                strip.append(c)&lt;br /&gt;
                            else:&lt;br /&gt;
                                if (c == 35):&lt;br /&gt;
                                    # End of line:&lt;br /&gt;
                                    if (len(strip) == 0):&lt;br /&gt;
                                        strip.append(0)&lt;br /&gt;
                                    for j in xrange(5):&lt;br /&gt;
                                        for d in strip:&lt;br /&gt;
                                            if ((d &amp;amp; (1 &amp;lt;&amp;lt; j)) &amp;gt; 0):&lt;br /&gt;
                                                rledata += &amp;quot;o&amp;quot;&lt;br /&gt;
                                            else:&lt;br /&gt;
                                                rledata += &amp;quot;b&amp;quot;&lt;br /&gt;
                                        rledata += &amp;quot;$\n&amp;quot;&lt;br /&gt;
                                    strip = []&lt;br /&gt;
                                else:&lt;br /&gt;
                                    # Multispace character:&lt;br /&gt;
                                    strip.append(0)&lt;br /&gt;
                                    strip.append(0)&lt;br /&gt;
                                    if (c &amp;gt;= 33):&lt;br /&gt;
                                        strip.append(0)&lt;br /&gt;
                                    if (c == 34):&lt;br /&gt;
                                        strip.append(0)&lt;br /&gt;
                                        i += 1&lt;br /&gt;
                                        d = ord2(compact[i])&lt;br /&gt;
                                        for j in xrange(d):&lt;br /&gt;
                                            strip.append(0)&lt;br /&gt;
                        i += 1&lt;br /&gt;
                    # End of pattern representation:&lt;br /&gt;
                    rledata += &amp;quot;!\n&amp;quot;&lt;br /&gt;
                    try:&lt;br /&gt;
                        f = open(rlepath, &#039;w&#039;)&lt;br /&gt;
                        f.write(rledata)&lt;br /&gt;
                        f.close()&lt;br /&gt;
                    except:&lt;br /&gt;
                        g.warn(&amp;quot;Unable to create object pattern:\n&amp;quot; + rlepath)&lt;br /&gt;
            &lt;br /&gt;
            results += &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td align=center&amp;gt;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
            if (objname in self.commonnames):&lt;br /&gt;
                results += self.commonnames[objname][0]&lt;br /&gt;
            results += &amp;quot;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td align=right&amp;gt;&amp;amp;nbsp;&amp;quot; + str(count) + &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
            results += &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;&lt;br /&gt;
            if objname in self.alloccur:&lt;br /&gt;
                results += &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
                for soup in self.alloccur[objname]:&lt;br /&gt;
                    results += self.save_soup(root, soup, symmetry) &lt;br /&gt;
                    results += &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
            results += &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;/table&amp;gt;\n&amp;lt;/center&amp;gt;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        ilist = sorted(self.soupscores.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
        results += &amp;quot;&amp;lt;p&amp;gt;&amp;lt;center&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;table cellspacing=1 border=2 cols=2&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;Soup number&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td align=right&amp;gt;&amp;amp;nbsp;Score&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
        for soupnum, score in ilist[:50]:&lt;br /&gt;
            results += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
            results += self.save_soup(root, soupnum, symmetry)&lt;br /&gt;
            results += &amp;quot;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td align=right&amp;gt;&amp;amp;nbsp;&amp;quot; + str(score) + &amp;quot;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        results += &amp;quot;&amp;lt;/table&amp;gt;\n&amp;lt;/center&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        htmlname = apgpath + &amp;quot;latest_census.html&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            f = open(htmlname, &#039;w&#039;)&lt;br /&gt;
            f.write(results)&lt;br /&gt;
            f.close()&lt;br /&gt;
            g.open(htmlname)&lt;br /&gt;
        except:&lt;br /&gt;
            g.warn(&amp;quot;Unable to create html file:\n&amp;quot; + htmlname)&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
# Converts a base-36 case-insensitive alphanumeric character into a&lt;br /&gt;
# numerical value.&lt;br /&gt;
def ord2(char):&lt;br /&gt;
&lt;br /&gt;
    x = ord(char)&lt;br /&gt;
&lt;br /&gt;
    if ((x &amp;gt;= 48) &amp;amp; (x &amp;lt; 58)):&lt;br /&gt;
        return x - 48&lt;br /&gt;
&lt;br /&gt;
    if ((x &amp;gt;= 65) &amp;amp; (x &amp;lt; 91)):&lt;br /&gt;
        return x - 55&lt;br /&gt;
&lt;br /&gt;
    if ((x &amp;gt;= 97) &amp;amp; (x &amp;lt; 123)):&lt;br /&gt;
        return x - 87&lt;br /&gt;
&lt;br /&gt;
    return -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def apg_verify(rulestring, symmetry, payoshakey):&lt;br /&gt;
&lt;br /&gt;
    verifysoup = Soup()&lt;br /&gt;
    verifysoup.rg.setrule(rulestring)&lt;br /&gt;
    verifysoup.rg.saveAllRules()&lt;br /&gt;
&lt;br /&gt;
    return_point = [None]&lt;br /&gt;
&lt;br /&gt;
    catagolue_results(rulestring+&amp;quot;\n&amp;quot;+symmetry+&amp;quot;\n&amp;quot;, payoshakey, &amp;quot;verify_apgsearch_haul&amp;quot;, endpoint=&amp;quot;/verify&amp;quot;, return_point=return_point)&lt;br /&gt;
&lt;br /&gt;
    if return_point[0] is not None:&lt;br /&gt;
&lt;br /&gt;
        resplist = return_point[0].split(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if ((len(resplist) &amp;gt;= 4) and (resplist[1] == &amp;quot;yes&amp;quot;)):&lt;br /&gt;
&lt;br /&gt;
            md5 = resplist[2]&lt;br /&gt;
            passcode = resplist[3]&lt;br /&gt;
&lt;br /&gt;
            stringlist = resplist[4:]&lt;br /&gt;
&lt;br /&gt;
            stringlist = [s for s in stringlist if (len(s) &amp;gt; 0 and s[0] != &#039;*&#039;)]&lt;br /&gt;
&lt;br /&gt;
            # g.exit(stringlist[0])&lt;br /&gt;
&lt;br /&gt;
            gsize = 3&lt;br /&gt;
&lt;br /&gt;
            pos = 0&lt;br /&gt;
&lt;br /&gt;
            while (len(stringlist) &amp;gt; 0):&lt;br /&gt;
&lt;br /&gt;
                while (gsize * gsize &amp;gt; len(stringlist)):&lt;br /&gt;
&lt;br /&gt;
                    gsize -= 1&lt;br /&gt;
&lt;br /&gt;
                listhead = stringlist[:(gsize*gsize)]&lt;br /&gt;
                stringlist = stringlist[(gsize*gsize):]&lt;br /&gt;
&lt;br /&gt;
                verifysoup.stabilise_soups_parallel_list(gsize, listhead, pos)&lt;br /&gt;
&lt;br /&gt;
                pos += (gsize * gsize)&lt;br /&gt;
&lt;br /&gt;
            # verifysoup.display_census(-1, &amp;quot;verify&amp;quot;, &amp;quot;verify&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            payload = &amp;quot;@MD5 &amp;quot;+md5+&amp;quot;\n&amp;quot;&lt;br /&gt;
            payload += &amp;quot;@PASSCODE &amp;quot;+passcode+&amp;quot;\n&amp;quot;&lt;br /&gt;
            payload += &amp;quot;@RULE &amp;quot;+rulestring+&amp;quot;\n&amp;quot;&lt;br /&gt;
            payload += &amp;quot;@SYMMETRY &amp;quot;+symmetry+&amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            tlist = sorted(verifysoup.objectcounts.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
&lt;br /&gt;
            for objname, count in tlist:&lt;br /&gt;
&lt;br /&gt;
                payload += objname + &amp;quot; &amp;quot; + str(count) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            catagolue_results(payload, payoshakey, &amp;quot;submit_verification&amp;quot;, endpoint=&amp;quot;/verify&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def apg_main():&lt;br /&gt;
&lt;br /&gt;
    # ---------------- Hardcode the following inputs if running without a user interface ----------------&lt;br /&gt;
    orignumber = int(g.getstring(&amp;quot;How many soups to search between successive uploads?&amp;quot;, &amp;quot;5000000&amp;quot;))&lt;br /&gt;
    rulestring = g.getstring(&amp;quot;Which rule to use?&amp;quot;, &amp;quot;B3/S23&amp;quot;)&lt;br /&gt;
    symmstring = g.getstring(&amp;quot;What symmetries to use?&amp;quot;, &amp;quot;C1&amp;quot;)&lt;br /&gt;
    payoshakey = g.getstring(&amp;quot;Please enter your key (visit &amp;quot;+get_server_address()+&amp;quot;/payosha256 in your browser).&amp;quot;, &amp;quot;#anon&amp;quot;)&lt;br /&gt;
    # ---------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    # Sanitise input:&lt;br /&gt;
    orignumber = max(orignumber, 100000)&lt;br /&gt;
    orignumber = min(orignumber, 100000000)&lt;br /&gt;
    number = orignumber&lt;br /&gt;
    initpos = 0&lt;br /&gt;
    if symmstring not in [&amp;quot;32x32&amp;quot;, &amp;quot;1x256&amp;quot;, &amp;quot;2x128&amp;quot;, &amp;quot;4x64&amp;quot;, &amp;quot;8x32&amp;quot;, &amp;quot;C1&amp;quot;, &amp;quot;C2_1&amp;quot;, &amp;quot;C2_2&amp;quot;, &amp;quot;C2_4&amp;quot;, &amp;quot;C4_1&amp;quot;, &amp;quot;C4_4&amp;quot;, &amp;quot;D2_+1&amp;quot;, &amp;quot;D2_+2&amp;quot;, &amp;quot;D2_x&amp;quot;, &amp;quot;D4_+1&amp;quot;, &amp;quot;D4_+2&amp;quot;, &amp;quot;D4_+4&amp;quot;, &amp;quot;D4_x1&amp;quot;, &amp;quot;D4_x4&amp;quot;, &amp;quot;D8_1&amp;quot;, &amp;quot;D8_4&amp;quot;]:&lt;br /&gt;
        g.exit(symmstring+&amp;quot; is not a valid symmetry option&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    quitapg = False&lt;br /&gt;
&lt;br /&gt;
    # Create associated rule tables:&lt;br /&gt;
    soup = Soup()&lt;br /&gt;
    soup.rg.setrule(rulestring)&lt;br /&gt;
    soup.rg.saveAllRules()&lt;br /&gt;
&lt;br /&gt;
    # We have 100 soups per page, instead of one. This parallel approach&lt;br /&gt;
    # was suggested by Tomas Rokicki, and results in approximately a&lt;br /&gt;
    # fourfold increase in soup-searching speed!&lt;br /&gt;
    sqrtspp_optimal = 10&lt;br /&gt;
&lt;br /&gt;
    # Initialise the census:&lt;br /&gt;
    start_time = time.clock()&lt;br /&gt;
    f = (lambda x : &#039;abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789&#039;[ord(x) % 56])&lt;br /&gt;
    rootstring = &#039;&#039;.join(map(f, list(hashlib.sha256(payoshakey + datetime.datetime.now().isoformat()).digest()[:12])))&lt;br /&gt;
    scount = 0&lt;br /&gt;
&lt;br /&gt;
    while (quitapg == False):&lt;br /&gt;
&lt;br /&gt;
        # Peer-review some soups:&lt;br /&gt;
        for i in xrange(5):&lt;br /&gt;
            apg_verify(&amp;quot;b3s23&amp;quot;, &amp;quot;C1&amp;quot;, payoshakey)&lt;br /&gt;
&lt;br /&gt;
        # The &#039;for&#039; loop has been replaced with a &#039;while&#039; loop to allow sqrtspp&lt;br /&gt;
        # to vary during runtime. The idea is that apgsearch can apply a basic&lt;br /&gt;
        # form of machine-learning to dynamically locate the optimum sqrtspp:&lt;br /&gt;
        while (scount &amp;lt; number):&lt;br /&gt;
&lt;br /&gt;
            delays = [0.0, 0.0, 0.0]&lt;br /&gt;
&lt;br /&gt;
            for i in xrange(1000):&lt;br /&gt;
&lt;br /&gt;
                page_time = time.clock()&lt;br /&gt;
&lt;br /&gt;
                sqrtspp = (sqrtspp_optimal + (i % 3) - 1) if (i &amp;lt; 150) else (sqrtspp_optimal)&lt;br /&gt;
&lt;br /&gt;
                # Don&#039;t overrun:&lt;br /&gt;
                while (scount + sqrtspp * sqrtspp &amp;gt; number):&lt;br /&gt;
                    sqrtspp -= 1&lt;br /&gt;
&lt;br /&gt;
                meandelay = soup.stabilise_soups_parallel(rootstring, scount + initpos, sqrtspp, symmstring)&lt;br /&gt;
                if (i &amp;lt; 150):&lt;br /&gt;
                    delays[i % 3] += meandelay&lt;br /&gt;
                scount += (sqrtspp * sqrtspp)&lt;br /&gt;
&lt;br /&gt;
                current_speed = int((sqrtspp * sqrtspp)/(time.clock() - page_time))&lt;br /&gt;
                alltime_speed = int((scount)/(time.clock() - start_time))&lt;br /&gt;
                &lt;br /&gt;
                g.show(str(scount) + &amp;quot; soups processed (&amp;quot; + str(current_speed) +&lt;br /&gt;
                       &amp;quot; per second current; &amp;quot; + str(alltime_speed) + &amp;quot; overall)&amp;quot; +&lt;br /&gt;
                       &amp;quot; : (type &#039;s&#039; to see latest census or &#039;q&#039; to quit).&amp;quot;)&lt;br /&gt;
                &lt;br /&gt;
                event = g.getevent()&lt;br /&gt;
                if event.startswith(&amp;quot;key&amp;quot;):&lt;br /&gt;
                    evt, ch, mods = event.split()&lt;br /&gt;
                    if ch == &amp;quot;s&amp;quot;:&lt;br /&gt;
                        soup.save_progress(scount, rootstring, symmstring)&lt;br /&gt;
                        soup.display_census(scount, rootstring, symmstring)&lt;br /&gt;
                    elif ch == &amp;quot;q&amp;quot;:&lt;br /&gt;
                        quitapg = True&lt;br /&gt;
                        break&lt;br /&gt;
&lt;br /&gt;
                if (scount &amp;gt;= number):&lt;br /&gt;
                    break&lt;br /&gt;
                &lt;br /&gt;
            if (quitapg == True):&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
            # Change sqrtspp to a more optimal value:&lt;br /&gt;
            if (scount &amp;lt; number):&lt;br /&gt;
                sqrtspp_new = sqrtspp_optimal&lt;br /&gt;
&lt;br /&gt;
                if (delays[0] &amp;lt; delays[1]):&lt;br /&gt;
                    sqrtspp_new = sqrtspp_optimal - 1&lt;br /&gt;
                if ((delays[2] &amp;lt; delays[1]) and (delays[2] &amp;lt; delays[0])):&lt;br /&gt;
                    sqrtspp_new = sqrtspp_optimal + 1&lt;br /&gt;
&lt;br /&gt;
                sqrtspp_optimal = sqrtspp_new&lt;br /&gt;
                sqrtspp_optimal = max(sqrtspp_optimal, 5)&lt;br /&gt;
&lt;br /&gt;
            # Compactify highscore table:&lt;br /&gt;
            soup.compactify_scores()&lt;br /&gt;
&lt;br /&gt;
        if (quitapg == False):&lt;br /&gt;
            # Save progress, upload it to Catagolue, and reset the census if successful:&lt;br /&gt;
            a = soup.save_progress(scount, rootstring, symmstring, payosha256_key=payoshakey)&lt;br /&gt;
            if (a == 0):&lt;br /&gt;
                # Reset the census:&lt;br /&gt;
                soup.reset()&lt;br /&gt;
                start_time = time.clock()&lt;br /&gt;
                f = (lambda x : &#039;abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789&#039;[ord(x) % 56])&lt;br /&gt;
                rootstring = &#039;&#039;.join(map(f, list(hashlib.sha256(rootstring + payoshakey + datetime.datetime.now().isoformat()).digest()[:12])))&lt;br /&gt;
                scount = 0&lt;br /&gt;
                number = orignumber&lt;br /&gt;
            else:&lt;br /&gt;
                number += orignumber&lt;br /&gt;
&lt;br /&gt;
    end_time = time.clock()&lt;br /&gt;
&lt;br /&gt;
    soup.save_progress(scount, rootstring, symmstring, payosha256_key=payoshakey)&lt;br /&gt;
&lt;br /&gt;
    soup.display_unids()&lt;br /&gt;
    soup.display_census(scount, rootstring, symmstring)&lt;br /&gt;
&lt;br /&gt;
def symmetry_test():&lt;br /&gt;
&lt;br /&gt;
    g.new(&amp;quot;Symmetry test&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    symmetries = [[&amp;quot;32x32&amp;quot;, &amp;quot;C1&amp;quot;, &amp;quot;8x32&amp;quot;, &amp;quot;4x64&amp;quot;, &amp;quot;2x128&amp;quot;, &amp;quot;1x256&amp;quot;],&lt;br /&gt;
                  [&amp;quot;C2_1&amp;quot;, &amp;quot;C2_2&amp;quot;, &amp;quot;C2_4&amp;quot;],&lt;br /&gt;
                  [&amp;quot;C4_1&amp;quot;, &amp;quot;C4_4&amp;quot;],&lt;br /&gt;
                  [&amp;quot;D2_+1&amp;quot;, &amp;quot;D2_+2&amp;quot;, &amp;quot;D2_x&amp;quot;],&lt;br /&gt;
                  [&amp;quot;D4_+1&amp;quot;, &amp;quot;D4_+2&amp;quot;, &amp;quot;D4_+4&amp;quot;, &amp;quot;D4_x1&amp;quot;, &amp;quot;D4_x4&amp;quot;],&lt;br /&gt;
                  [&amp;quot;D8_1&amp;quot;, &amp;quot;D8_4&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
    for i in range(len(symmetries)):&lt;br /&gt;
        for j in range(len(symmetries[i])):&lt;br /&gt;
&lt;br /&gt;
            g.putcells(hashsoup(&amp;quot;sym_test&amp;quot;, symmetries[i][j]), 120 * j + 60 * (i % 2), 80 * i)&lt;br /&gt;
    g.fit()&lt;br /&gt;
&lt;br /&gt;
# Run the soup-searching script:&lt;br /&gt;
apg_main()&lt;br /&gt;
# apg_verify()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
-wwei23 10:21AM 6/25/2017 NY time&lt;br /&gt;
&lt;br /&gt;
:Thanks -- this should make it easier to ensure that if others also search these symmetries, they&#039;ll generate soups the same way!&lt;br /&gt;
&lt;br /&gt;
:And yes, eventually there won&#039;t be any new soups left to search, but that&#039;s not a concern in practice. [[User:Apple Bottom|Apple Bottom]] ([[User talk:Apple Bottom|talk]]) 09:06, 30 June 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== More symmetries ==&lt;br /&gt;
&lt;br /&gt;
1x256X2 and 1x256X2+1 now available!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# *************************************&lt;br /&gt;
# * Ash Pattern Generator (apgsearch) *&lt;br /&gt;
# *************************************&lt;br /&gt;
# * Version: v1.1  (beta release)     *&lt;br /&gt;
# *************************************&lt;br /&gt;
#&lt;br /&gt;
# -- Processes roughly 100 soups per (second . core . GHz), using caching&lt;br /&gt;
#    and machine-learning to optimise itself during runtime.&lt;br /&gt;
#&lt;br /&gt;
# -- Can perfectly identify oscillators with period &amp;lt; 1000, well-separated&lt;br /&gt;
#    spaceships of low period, and certain infinite-growth patterns (such&lt;br /&gt;
#    guns and puffers, including both naturally-occurring types of switch&lt;br /&gt;
#    engine).&lt;br /&gt;
#&lt;br /&gt;
# -- Separates most pseudo-objects into their constituent parts, including&lt;br /&gt;
#    all pseudo-still-lifes of 18 or fewer live cells (which is the maximum&lt;br /&gt;
#    theoretically possible, given there is a 19-cell pseudo-still-life&lt;br /&gt;
#    with two distinct decompositions).&lt;br /&gt;
#&lt;br /&gt;
# -- Correctly separates non-interacting standard spaceships, irrespective&lt;br /&gt;
#    of their proximity. In particular, a LWSS-on-LWSS is registered as two&lt;br /&gt;
#    LWSSes, whereas an LWSS-on-HWSS is registered as a single spaceship&lt;br /&gt;
#    (since they interact by suppressing sparks).&lt;br /&gt;
#&lt;br /&gt;
# -- At least 99.9999999999% reliable at identifying objects in asymmetrical&lt;br /&gt;
#    soups in B3/S23 (based on the fact that out of over 10^12 objects that&lt;br /&gt;
#    have appeared, there are no errors).&lt;br /&gt;
#&lt;br /&gt;
# -- Scores soups based on the total excitement of the ash objects.&lt;br /&gt;
#&lt;br /&gt;
# -- Support for other outer-totalistic rules, including detection and&lt;br /&gt;
#    classification of various types of infinite growth.&lt;br /&gt;
#&lt;br /&gt;
# -- Support for symmetrical soups.&lt;br /&gt;
#&lt;br /&gt;
# -- Uploads results to the server at http://catagolue.appspot.com (which&lt;br /&gt;
#    currently has collected over 2.7 * 10^12 objects).&lt;br /&gt;
#&lt;br /&gt;
# -- Peer-reviews others&#039; contributions to ensure data integrity for the&lt;br /&gt;
#    asymmetrical B3/S23 census.&lt;br /&gt;
#&lt;br /&gt;
# By Adam P. Goucher, with contributions from Andrew Trevorrow, Tom Rokicki,&lt;br /&gt;
# Nathaniel Johnston, Dave Greene and Richard Schank.&lt;br /&gt;
&lt;br /&gt;
import golly as g&lt;br /&gt;
from glife import rect, pattern&lt;br /&gt;
import time&lt;br /&gt;
import math&lt;br /&gt;
import operator&lt;br /&gt;
import hashlib&lt;br /&gt;
import datetime&lt;br /&gt;
import os&lt;br /&gt;
import urllib2&lt;br /&gt;
&lt;br /&gt;
def get_server_address():&lt;br /&gt;
    # Should be &#039;http://catagolue.appspot.com&#039; for the released version,&lt;br /&gt;
    # and &#039;http://localhost:8080&#039; for the development version:    &lt;br /&gt;
    return &#039;http://catagolue.appspot.com&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Engages with Catagolue&#039;s authentication system (&#039;payment over SHA-256&#039;,&lt;br /&gt;
# affectionately abbreviated to &#039;payosha256&#039;):&lt;br /&gt;
#&lt;br /&gt;
# The payosha256_key can be obtained from logging into Catagolue in your&lt;br /&gt;
# web browser and visiting http://catagolue.appspot.com/payosha256&lt;br /&gt;
def authenticate(payosha256_key, operation_name):&lt;br /&gt;
&lt;br /&gt;
    g.show(&amp;quot;Authenticating with Catagolue via the payosha256 protocol...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    payload = &amp;quot;payosha256:get_token:&amp;quot;+payosha256_key+&amp;quot;:&amp;quot;+operation_name&lt;br /&gt;
&lt;br /&gt;
    req = urllib2.Request(get_server_address() + &amp;quot;/payosha256&amp;quot;, payload, {&amp;quot;Content-type&amp;quot;: &amp;quot;text/plain&amp;quot;})&lt;br /&gt;
    f = urllib2.urlopen(req)&lt;br /&gt;
&lt;br /&gt;
    if (f.getcode() != 200):&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    resp = f.read()&lt;br /&gt;
&lt;br /&gt;
    lines = resp.splitlines()&lt;br /&gt;
&lt;br /&gt;
    for line in lines:&lt;br /&gt;
        parts = line.split(&#039;:&#039;)&lt;br /&gt;
&lt;br /&gt;
        if (len(parts) &amp;lt; 3):&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        if (parts[1] != &#039;good&#039;):&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        target = parts[2]&lt;br /&gt;
        token = parts[3]&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Token &amp;quot; + token + &amp;quot; obtained from payosha256. Performing proof of work with target &amp;quot; + target + &amp;quot;...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        for nonce in xrange(100000000):&lt;br /&gt;
&lt;br /&gt;
            prehash = token + &amp;quot;:&amp;quot; + str(nonce)&lt;br /&gt;
            posthash = hashlib.sha256(prehash).hexdigest()&lt;br /&gt;
&lt;br /&gt;
            if (posthash &amp;lt; target):&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
        if (posthash &amp;gt; target):&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;String &amp;quot;+prehash+&amp;quot; is sufficiently valuable (&amp;quot;+posthash+&amp;quot; &amp;lt; &amp;quot;+target+&amp;quot;).&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        payload = &amp;quot;payosha256:pay_token:&amp;quot;+prehash+&amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return payload&lt;br /&gt;
&lt;br /&gt;
    return None&lt;br /&gt;
&lt;br /&gt;
# Sends the results to Catagolue:&lt;br /&gt;
def catagolue_results(results, payosha256_key, operation_name, endpoint=&amp;quot;/apgsearch&amp;quot;, return_point=None):&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
&lt;br /&gt;
        payload = authenticate(payosha256_key, operation_name)&lt;br /&gt;
&lt;br /&gt;
        if payload is None:&lt;br /&gt;
            return 1&lt;br /&gt;
&lt;br /&gt;
        payload += results&lt;br /&gt;
&lt;br /&gt;
        req = urllib2.Request(get_server_address() + endpoint, payload, {&amp;quot;Content-type&amp;quot;: &amp;quot;text/plain&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
        f = urllib2.urlopen(req)&lt;br /&gt;
&lt;br /&gt;
        if (f.getcode() != 200):&lt;br /&gt;
            return 2&lt;br /&gt;
&lt;br /&gt;
        resp = f.read()&lt;br /&gt;
&lt;br /&gt;
        try:&lt;br /&gt;
            f2 = open(g.getdir(&amp;quot;data&amp;quot;)+&amp;quot;catagolue-response.txt&amp;quot;, &#039;w&#039;)&lt;br /&gt;
            f2.write(resp)&lt;br /&gt;
            f2.close()&lt;br /&gt;
&lt;br /&gt;
            if return_point is not None:&lt;br /&gt;
                return_point[0] = resp&lt;br /&gt;
            &lt;br /&gt;
        except:&lt;br /&gt;
            g.warn(&amp;quot;Unable to save catagolue response file.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    except:&lt;br /&gt;
&lt;br /&gt;
        return 1&lt;br /&gt;
&lt;br /&gt;
# Takes approximately 350 microseconds to construct a 16-by-16 soup based&lt;br /&gt;
# on a SHA-256 cryptographic hash in the obvious way.&lt;br /&gt;
def hashsoup(instring, sym):&lt;br /&gt;
&lt;br /&gt;
    s = hashlib.sha256(instring).digest()&lt;br /&gt;
&lt;br /&gt;
    thesoup = []&lt;br /&gt;
&lt;br /&gt;
    if sym in [&#039;D2_x&#039;, &#039;D8_1&#039;, &#039;D8_4&#039;]:&lt;br /&gt;
        d = 1&lt;br /&gt;
    elif sym in [&#039;D4_x1&#039;, &#039;D4_x4&#039;]:&lt;br /&gt;
        d = 2&lt;br /&gt;
    else:&lt;br /&gt;
        d = 0&lt;br /&gt;
        &lt;br /&gt;
    for j in xrange(32):&lt;br /&gt;
&lt;br /&gt;
        t = ord(s[j])&lt;br /&gt;
&lt;br /&gt;
        for k in xrange(8):&lt;br /&gt;
&lt;br /&gt;
            if (sym == &#039;8x32&#039;):&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 4)&lt;br /&gt;
                y = int(j / 4)&lt;br /&gt;
                &lt;br /&gt;
            elif (sym == &#039;4x64&#039;):&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 8)&lt;br /&gt;
                y = int(j / 8)&lt;br /&gt;
        &lt;br /&gt;
            elif (sym == &#039;2x128&#039;):&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 16)&lt;br /&gt;
                y = int(j / 16)&lt;br /&gt;
                &lt;br /&gt;
            elif (sym in [&#039;1x256&#039;, &#039;1x256X2&#039;, &#039;1x256X2+1&#039;]):&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 32)&lt;br /&gt;
                y = int(j / 32)&lt;br /&gt;
                &lt;br /&gt;
            else:&lt;br /&gt;
                &lt;br /&gt;
                x = k + 8*(j % 2)&lt;br /&gt;
                y = int(j / 2)&lt;br /&gt;
&lt;br /&gt;
            if (t &amp;amp; (1 &amp;lt;&amp;lt; (7 - k))):&lt;br /&gt;
                &lt;br /&gt;
                if ((d == 0) | (x &amp;gt;= y)):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(x)&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
&lt;br /&gt;
                if (sym == &#039;1x256X2+1&#039;):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(-x)&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
&lt;br /&gt;
                if (sym == &#039;1x256X2&#039;):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(-1-x)&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                &lt;br /&gt;
                if (sym == &#039;32x32&#039;):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(x+16)&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(x)&lt;br /&gt;
                    thesoup.append(y+16)&lt;br /&gt;
                    thesoup.append(x+16)&lt;br /&gt;
                    thesoup.append(y+16)&lt;br /&gt;
&lt;br /&gt;
                if (sym == &#039;75p&#039;):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(16-y)&lt;br /&gt;
                    thesoup.append(x)&lt;br /&gt;
&lt;br /&gt;
                elif (sym == &#039;D4_x1&#039;):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(-x)&lt;br /&gt;
&lt;br /&gt;
                elif (sym == &#039;D4_x4&#039;):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(-x-1)&lt;br /&gt;
&lt;br /&gt;
                if ((sym == &#039;D4_x1&#039;) &amp;amp; (x == y)):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(-x)&lt;br /&gt;
&lt;br /&gt;
                if ((sym == &#039;D4_x4&#039;) &amp;amp; (x == y)):&lt;br /&gt;
&lt;br /&gt;
                    thesoup.append(y)&lt;br /&gt;
                    thesoup.append(-x-1)&lt;br /&gt;
&lt;br /&gt;
    # Checks for diagonal symmetries:&lt;br /&gt;
    if (d &amp;gt;= 1):&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
            thesoup.append(thesoup[x])&lt;br /&gt;
        if d == 2:&lt;br /&gt;
            if (sym == &#039;D4_x1&#039;):&lt;br /&gt;
                for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
                    thesoup.append(-thesoup[x+1])&lt;br /&gt;
                    thesoup.append(-thesoup[x])&lt;br /&gt;
            else:&lt;br /&gt;
                for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
                    thesoup.append(-thesoup[x+1] - 1)&lt;br /&gt;
                    thesoup.append(-thesoup[x] - 1)&lt;br /&gt;
            return thesoup&lt;br /&gt;
&lt;br /&gt;
    # Checks for orthogonal x symmetry:&lt;br /&gt;
    if sym in [&#039;D2_+1&#039;, &#039;D4_+1&#039;, &#039;D4_+2&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x])&lt;br /&gt;
            thesoup.append(-thesoup[x+1])&lt;br /&gt;
    elif sym in [&#039;D2_+2&#039;, &#039;D4_+4&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x])&lt;br /&gt;
            thesoup.append(-thesoup[x+1] - 1)&lt;br /&gt;
&lt;br /&gt;
    # Checks for orthogonal y symmetry:&lt;br /&gt;
    if sym in [&#039;D4_+1&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x])&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
    elif sym in [&#039;D4_+2&#039;, &#039;D4_+4&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x] - 1)&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
&lt;br /&gt;
    # Checks for rotate2 symmetry:&lt;br /&gt;
    if sym in [&#039;C2_1&#039;, &#039;C4_1&#039;, &#039;D8_1&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x])&lt;br /&gt;
            thesoup.append(-thesoup[x+1])&lt;br /&gt;
    elif sym in [&#039;C2_2&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x])&lt;br /&gt;
            thesoup.append(-thesoup[x+1]-1)&lt;br /&gt;
    elif sym in [&#039;C2_4&#039;, &#039;C4_4&#039;, &#039;D8_4&#039;]:&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(-thesoup[x]-1)&lt;br /&gt;
            thesoup.append(-thesoup[x+1]-1)&lt;br /&gt;
&lt;br /&gt;
    # Checks for rotate4 symmetry:&lt;br /&gt;
    if (sym in [&#039;C4_1&#039;, &#039;D8_1&#039;]):&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
            thesoup.append(-thesoup[x])&lt;br /&gt;
    elif (sym in [&#039;C4_4&#039;, &#039;D8_4&#039;]):&lt;br /&gt;
        for x in xrange(0, len(thesoup), 2):&lt;br /&gt;
            thesoup.append(thesoup[x+1])&lt;br /&gt;
            thesoup.append(-thesoup[x]-1)&lt;br /&gt;
&lt;br /&gt;
    return thesoup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Obtains a canonical representation of any oscillator/spaceship that (in&lt;br /&gt;
# some phase) fits within a 40-by-40 bounding box. This representation is&lt;br /&gt;
# alphanumeric and lowercase, and so much more compact than RLE. Compare:&lt;br /&gt;
#&lt;br /&gt;
# Common name: pentadecathlon&lt;br /&gt;
# Canonical representation: 4r4z4r4&lt;br /&gt;
# Equivalent RLE: 2bo4bo$2ob4ob2o$2bo4bo!&lt;br /&gt;
#&lt;br /&gt;
# It is a generalisation of a notation created by Allan Weschler in 1992.&lt;br /&gt;
def canonise(duration):&lt;br /&gt;
&lt;br /&gt;
    representation = &amp;quot;#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # We need to compare each phase to find the one with the smallest&lt;br /&gt;
    # description:&lt;br /&gt;
    for t in xrange(duration):&lt;br /&gt;
&lt;br /&gt;
        rect = g.getrect()&lt;br /&gt;
        if (len(rect) == 0):&lt;br /&gt;
            return &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if ((rect[2] &amp;lt;= 40) &amp;amp; (rect[3] &amp;lt;= 40)):&lt;br /&gt;
            # Fits within a 40-by-40 bounding box, so eligible to be canonised.&lt;br /&gt;
            # Choose the orientation which results in the smallest description:&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0], rect[1], 1, 0, 0, 1))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0]+rect[2]-1, rect[1], -1, 0, 0, 1))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0], rect[1]+rect[3]-1, 1, 0, 0, -1))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0]+rect[2]-1, rect[1]+rect[3]-1, -1, 0, 0, -1))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0], rect[1], 0, 1, 1, 0))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0]+rect[2]-1, rect[1], 0, -1, 1, 0))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0], rect[1]+rect[3]-1, 0, 1, -1, 0))&lt;br /&gt;
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0]+rect[2]-1, rect[1]+rect[3]-1, 0, -1, -1, 0))&lt;br /&gt;
&lt;br /&gt;
        g.run(1)&lt;br /&gt;
&lt;br /&gt;
    return representation&lt;br /&gt;
&lt;br /&gt;
# A subroutine used by canonise:&lt;br /&gt;
def canonise_orientation(length, breadth, ox, oy, a, b, c, d):&lt;br /&gt;
&lt;br /&gt;
    representation = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    chars = &amp;quot;0123456789abcdefghijklmnopqrstuvwxyz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    for v in xrange(int((breadth-1)/5)+1):&lt;br /&gt;
        zeroes = 0&lt;br /&gt;
        if (v != 0):&lt;br /&gt;
            representation += &amp;quot;z&amp;quot;&lt;br /&gt;
        for u in xrange(length):&lt;br /&gt;
            baudot = 0&lt;br /&gt;
            for w in xrange(5):&lt;br /&gt;
                x = ox + a*u + b*(5*v + w)&lt;br /&gt;
                y = oy + c*u + d*(5*v + w)&lt;br /&gt;
                baudot = (baudot &amp;gt;&amp;gt; 1) + 16*g.getcell(x, y)&lt;br /&gt;
            if (baudot == 0):&lt;br /&gt;
                zeroes += 1&lt;br /&gt;
            else:&lt;br /&gt;
                if (zeroes &amp;gt; 0):&lt;br /&gt;
                    if (zeroes == 1):&lt;br /&gt;
                        representation += &amp;quot;0&amp;quot;&lt;br /&gt;
                    elif (zeroes == 2):&lt;br /&gt;
                        representation += &amp;quot;w&amp;quot;&lt;br /&gt;
                    elif (zeroes == 3):&lt;br /&gt;
                        representation += &amp;quot;x&amp;quot;&lt;br /&gt;
                    else:&lt;br /&gt;
                        representation += &amp;quot;y&amp;quot;&lt;br /&gt;
                        representation += chars[zeroes - 4]&lt;br /&gt;
                zeroes = 0&lt;br /&gt;
                representation += chars[baudot]&lt;br /&gt;
    return representation&lt;br /&gt;
&lt;br /&gt;
# Compares strings first by length, then by lexicographical ordering.&lt;br /&gt;
# A hash character is worse than anything else.&lt;br /&gt;
def compare_representations(a, b):&lt;br /&gt;
&lt;br /&gt;
    if (a == &amp;quot;#&amp;quot;):&lt;br /&gt;
        return b&lt;br /&gt;
    elif (b == &amp;quot;#&amp;quot;):&lt;br /&gt;
        return a&lt;br /&gt;
    elif (len(a) &amp;lt; len(b)):&lt;br /&gt;
        return a&lt;br /&gt;
    elif (len(b) &amp;lt; len(a)):&lt;br /&gt;
        return b&lt;br /&gt;
    elif (a &amp;lt; b):&lt;br /&gt;
        return a&lt;br /&gt;
    else:&lt;br /&gt;
        return b&lt;br /&gt;
&lt;br /&gt;
# Finds the gradient of the least-squares regression line corresponding&lt;br /&gt;
# to a list of ordered pairs:&lt;br /&gt;
def regress(pairlist):&lt;br /&gt;
&lt;br /&gt;
    cumx = 0.0&lt;br /&gt;
    cumy = 0.0&lt;br /&gt;
    cumvar = 0.0&lt;br /&gt;
    cumcov = 0.0&lt;br /&gt;
&lt;br /&gt;
    for x,y in pairlist:&lt;br /&gt;
&lt;br /&gt;
        cumx += x&lt;br /&gt;
        cumy += y&lt;br /&gt;
&lt;br /&gt;
    cumx = cumx / len(pairlist)&lt;br /&gt;
    cumy = cumy / len(pairlist)&lt;br /&gt;
&lt;br /&gt;
    for x,y in pairlist:&lt;br /&gt;
&lt;br /&gt;
        cumvar += (x - cumx)*(x - cumx)&lt;br /&gt;
        cumcov += (x - cumx)*(y - cumy)&lt;br /&gt;
&lt;br /&gt;
    return (cumcov / cumvar)&lt;br /&gt;
&lt;br /&gt;
# Analyses a pattern whose average population follows a power-law:&lt;br /&gt;
def powerlyse(stepsize, numsteps):&lt;br /&gt;
&lt;br /&gt;
    g.setalgo(&amp;quot;HashLife&amp;quot;)&lt;br /&gt;
    g.setbase(2)&lt;br /&gt;
    g.setstep(stepsize)&lt;br /&gt;
&lt;br /&gt;
    poplist = [0]*numsteps&lt;br /&gt;
&lt;br /&gt;
    poplist[0] = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
    pointlist = []&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(1, numsteps, 1):&lt;br /&gt;
&lt;br /&gt;
        g.step()&lt;br /&gt;
        poplist[i] = int(g.getpop()) + poplist[i-1]&lt;br /&gt;
&lt;br /&gt;
        if (i % 50 == 0):&lt;br /&gt;
&lt;br /&gt;
            g.fit()&lt;br /&gt;
            g.update()&lt;br /&gt;
&lt;br /&gt;
        if (i &amp;gt; numsteps/2):&lt;br /&gt;
&lt;br /&gt;
            pointlist.append((math.log(i),math.log(poplist[i]+1.0)))&lt;br /&gt;
&lt;br /&gt;
    power = regress(pointlist)&lt;br /&gt;
&lt;br /&gt;
    if (power &amp;lt; 1.10):&lt;br /&gt;
        return &amp;quot;unidentified&amp;quot;&lt;br /&gt;
    elif (power &amp;lt; 1.65):&lt;br /&gt;
        return &amp;quot;zz_REPLICATOR&amp;quot;&lt;br /&gt;
    elif (power &amp;lt; 2.05):&lt;br /&gt;
        return &amp;quot;zz_LINEAR&amp;quot;&lt;br /&gt;
    elif (power &amp;lt; 2.8):&lt;br /&gt;
        return &amp;quot;zz_EXPLOSIVE&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;zz_QUADRATIC&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Gets the period of an interleaving of degree-d polynomials:&lt;br /&gt;
def deepperiod(sequence, maxperiod, degree):&lt;br /&gt;
&lt;br /&gt;
    for p in xrange(1, maxperiod, 1):&lt;br /&gt;
&lt;br /&gt;
        good = True&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(maxperiod):&lt;br /&gt;
&lt;br /&gt;
            diffs = [0] * (degree + 2)&lt;br /&gt;
            for j in xrange(degree + 2):&lt;br /&gt;
&lt;br /&gt;
                diffs[j] = sequence[i + j*p]&lt;br /&gt;
&lt;br /&gt;
            # Produce successive differences:&lt;br /&gt;
            for j in xrange(degree + 1):&lt;br /&gt;
                for k in xrange(degree + 1):&lt;br /&gt;
                    diffs[k] = diffs[k] - diffs[k + 1]&lt;br /&gt;
&lt;br /&gt;
            if (diffs[0] != 0):&lt;br /&gt;
                good = False&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
        if (good):&lt;br /&gt;
            return p&lt;br /&gt;
    return -1&lt;br /&gt;
&lt;br /&gt;
# Analyses a linear-growth pattern, returning a hash:&lt;br /&gt;
def linearlyse(maxperiod):&lt;br /&gt;
&lt;br /&gt;
    poplist = [0]*(3*maxperiod)&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(3*maxperiod):&lt;br /&gt;
&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        poplist[i] = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
    p = deepperiod(poplist, maxperiod, 1)&lt;br /&gt;
&lt;br /&gt;
    if (p == -1):&lt;br /&gt;
        return &amp;quot;unidentified&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    difflist = [0]*(2*maxperiod)&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(2*maxperiod):&lt;br /&gt;
&lt;br /&gt;
        difflist[i] = poplist[i + p] - poplist[i]&lt;br /&gt;
&lt;br /&gt;
    q = deepperiod(difflist, maxperiod, 0)&lt;br /&gt;
&lt;br /&gt;
    moments = [0, 0, 0]&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(p):&lt;br /&gt;
&lt;br /&gt;
        moments[0] += (poplist[i + q] - poplist[i])&lt;br /&gt;
        moments[1] += (poplist[i + q] - poplist[i]) ** 2&lt;br /&gt;
        moments[2] += (poplist[i + q] - poplist[i]) ** 3&lt;br /&gt;
&lt;br /&gt;
    prehash = str(moments[1]) + &amp;quot;#&amp;quot; + str(moments[2])&lt;br /&gt;
&lt;br /&gt;
    # Linear-growth patterns with growth rate zero are clearly errors!&lt;br /&gt;
    if (moments[0] == 0):&lt;br /&gt;
        return &amp;quot;unidentified&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;yl&amp;quot; + str(p) + &amp;quot;_&amp;quot; + str(q) + &amp;quot;_&amp;quot; + str(moments[0]) + &amp;quot;_&amp;quot; + hashlib.md5(prehash).hexdigest()&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
# This explodes pseudo-still-lifes and pseudo-oscillators into their&lt;br /&gt;
# constituent parts.&lt;br /&gt;
#&lt;br /&gt;
# -- Requires the period (if oscillatory) and graph-theoretic diameter&lt;br /&gt;
#    to not exceed 4096.&lt;br /&gt;
# -- Never mistakenly separates a true object.&lt;br /&gt;
# -- Correctly separates most pseudo-still-lifes, including the famous:&lt;br /&gt;
#    http://www.conwaylife.com/wiki/Quad_pseudo_still_life&lt;br /&gt;
# -- Works perfectly for all still-lifes of up to 17 bits.&lt;br /&gt;
# -- Doesn&#039;t separate &#039;locks&#039;, of which the smallest example has 18&lt;br /&gt;
#    bits and is unique:&lt;br /&gt;
#&lt;br /&gt;
#     ** **&lt;br /&gt;
#     ** **&lt;br /&gt;
#&lt;br /&gt;
#    * *** *&lt;br /&gt;
#    ** * **&lt;br /&gt;
#&lt;br /&gt;
# To use this function (standalone), merely copy it into a script of&lt;br /&gt;
# the following form:&lt;br /&gt;
#&lt;br /&gt;
#   import golly as g&lt;br /&gt;
#&lt;br /&gt;
#   def pseudo_bangbang():&lt;br /&gt;
#&lt;br /&gt;
#   [...]&lt;br /&gt;
#&lt;br /&gt;
#   pseudo_bangbang()&lt;br /&gt;
#&lt;br /&gt;
# and execute it in Golly with a B3/S23 universe containing any still-&lt;br /&gt;
# lifes or oscillators you want to separate. Pure objects correspond to&lt;br /&gt;
# connected components in the final state of the universe.&lt;br /&gt;
#&lt;br /&gt;
# This has dependencies on the rules ContagiousLife, PercolateInfection&lt;br /&gt;
# and EradicateInfection.&lt;br /&gt;
#&lt;br /&gt;
# Not to be confused with the Unix shell instruction for repeating the&lt;br /&gt;
# previous instruction as a superuser (sudo !!), or indeed with any&lt;br /&gt;
# parodies of this song: https://www.youtube.com/watch?v=YswhUHH6Ufc&lt;br /&gt;
#&lt;br /&gt;
# Adam P. Goucher, 2014-08-25&lt;br /&gt;
def pseudo_bangbang(alpharule):&lt;br /&gt;
&lt;br /&gt;
    g.setrule(&amp;quot;APG_ContagiousLife_&amp;quot; + alpharule)&lt;br /&gt;
    g.setbase(2)&lt;br /&gt;
    g.setstep(12)&lt;br /&gt;
    g.step()&lt;br /&gt;
&lt;br /&gt;
    celllist = g.getcells(g.getrect())&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(0, len(celllist)-1, 3):&lt;br /&gt;
        &lt;br /&gt;
        # Only infect cells that haven&#039;t yet been infected:&lt;br /&gt;
        if (g.getcell(celllist[i], celllist[i+1]) &amp;lt;= 2):&lt;br /&gt;
&lt;br /&gt;
            # Seed an initial &#039;infected&#039; (red) cell:&lt;br /&gt;
            g.setcell(celllist[i], celllist[i+1], g.getcell(celllist[i], celllist[i+1]) + 2)&lt;br /&gt;
&lt;br /&gt;
            prevpop = 0&lt;br /&gt;
            currpop = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
            # Continue infecting until the entire component has been engulfed:&lt;br /&gt;
            while (prevpop != currpop):&lt;br /&gt;
&lt;br /&gt;
                # Percolate the infection to every cell in the island:&lt;br /&gt;
                g.setrule(&amp;quot;APG_PercolateInfection&amp;quot;)&lt;br /&gt;
                g.setbase(2)&lt;br /&gt;
                g.setstep(12)&lt;br /&gt;
                g.step()&lt;br /&gt;
&lt;br /&gt;
                # Transmit the infection across any bridges.&lt;br /&gt;
                g.setrule(&amp;quot;APG_ContagiousLife_&amp;quot; + alpharule)&lt;br /&gt;
                g.setbase(2)&lt;br /&gt;
                g.setstep(12)&lt;br /&gt;
                g.step()&lt;br /&gt;
&lt;br /&gt;
                prevpop = currpop&lt;br /&gt;
                currpop = int(g.getpop())&lt;br /&gt;
                &lt;br /&gt;
            g.fit()&lt;br /&gt;
            g.update()&lt;br /&gt;
&lt;br /&gt;
            # Red becomes green:&lt;br /&gt;
            g.setrule(&amp;quot;APG_EradicateInfection&amp;quot;)&lt;br /&gt;
            g.step()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Counts the number of live cells of each degree:&lt;br /&gt;
def degreecount():&lt;br /&gt;
&lt;br /&gt;
    celllist = g.getcells(g.getrect())&lt;br /&gt;
    counts = [0,0,0,0,0,0,0,0,0]&lt;br /&gt;
&lt;br /&gt;
    for i in xrange(0, len(celllist), 2):&lt;br /&gt;
&lt;br /&gt;
        x = celllist[i]&lt;br /&gt;
        y = celllist[i+1]&lt;br /&gt;
&lt;br /&gt;
        degree = -1&lt;br /&gt;
&lt;br /&gt;
        for ux in xrange(x - 1, x + 2):&lt;br /&gt;
            for uy in xrange(y - 1, y + 2):&lt;br /&gt;
&lt;br /&gt;
                degree += g.getcell(ux, uy)&lt;br /&gt;
&lt;br /&gt;
        counts[degree] += 1&lt;br /&gt;
&lt;br /&gt;
    return counts&lt;br /&gt;
&lt;br /&gt;
# Counts the number of live cells of each degree in generations 1 and 2:&lt;br /&gt;
def degreecount2():&lt;br /&gt;
&lt;br /&gt;
    g.run(1)&lt;br /&gt;
    a = degreecount()&lt;br /&gt;
    g.run(1)&lt;br /&gt;
    b = degreecount()&lt;br /&gt;
&lt;br /&gt;
    return (a + b)&lt;br /&gt;
&lt;br /&gt;
# If the universe consists only of disjoint *WSSes, this will return&lt;br /&gt;
# a triple (l, w, h) giving the quantities of each *WSS. Otherwise,&lt;br /&gt;
# this function will return (-1, -1, -1).&lt;br /&gt;
#&lt;br /&gt;
# This should only be used to separate period-4 moving objects which&lt;br /&gt;
# may contain multiple *WSSes.&lt;br /&gt;
def countxwsses():&lt;br /&gt;
&lt;br /&gt;
    degcount = degreecount2()&lt;br /&gt;
    if (degreecount2() != degcount):&lt;br /&gt;
        # Degree counts are not period-2:&lt;br /&gt;
        return (-1, -1, -1)&lt;br /&gt;
&lt;br /&gt;
    # Degree counts of each standard spaceship:&lt;br /&gt;
    hwssa = [1,4,6,2,0,0,0,0,0,0,0,0,4,4,6,1,2,1]&lt;br /&gt;
    mwssa = [2,2,5,2,0,0,0,0,0,0,0,0,4,4,4,1,2,0]&lt;br /&gt;
    lwssa = [1,2,4,2,0,0,0,0,0,0,0,0,4,4,2,2,0,0]&lt;br /&gt;
    hwssb = [0,0,0,4,4,6,1,2,1,1,4,6,2,0,0,0,0,0]&lt;br /&gt;
    mwssb = [0,0,0,4,4,4,1,2,0,2,2,5,2,0,0,0,0,0]&lt;br /&gt;
    lwssb = [0,0,0,4,4,2,2,0,0,1,2,4,2,0,0,0,0,0]&lt;br /&gt;
&lt;br /&gt;
    # Calculate the number of standard spaceships in each phase:&lt;br /&gt;
    hacount = degcount[17]&lt;br /&gt;
    macount = degcount[16]/2 - hacount&lt;br /&gt;
    lacount = (degcount[15] - hacount - macount)/2&lt;br /&gt;
    hbcount = degcount[8]&lt;br /&gt;
    mbcount = degcount[7]/2 - hbcount&lt;br /&gt;
    lbcount = (degcount[6] - hbcount - mbcount)/2&lt;br /&gt;
&lt;br /&gt;
    # Determine the expected degcount given the calculated quantities:&lt;br /&gt;
    pcounts = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: hacount*x, hwssa))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: macount*x, mwssa))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: lacount*x, lwssa))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: hbcount*x, hwssb))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: mbcount*x, mwssb))&lt;br /&gt;
    pcounts = map(lambda x, y: x + y, pcounts, map(lambda x: lbcount*x, lwssb))&lt;br /&gt;
&lt;br /&gt;
    # Compare the observed and expected degcounts (to eliminate nonstandard spaceships):&lt;br /&gt;
    if (pcounts != degcount):&lt;br /&gt;
        # Expected and observed values do not match:&lt;br /&gt;
        return (-1, -1, -1)&lt;br /&gt;
&lt;br /&gt;
    # Return the combined numbers of *WSSes:&lt;br /&gt;
    return(lacount + lbcount, macount + mbcount, hacount + hbcount)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Generates the helper rules for apgsearch, given a base outer-totalistic rule.&lt;br /&gt;
class RuleGenerator:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
&lt;br /&gt;
        # Unless otherwise specified, assume standard B3/S23 rule:&lt;br /&gt;
        self.bee = [False, False, False, True, False, False, False, False, False]&lt;br /&gt;
        self.ess = [False, False, True, True, False, False, False, False, False]&lt;br /&gt;
        self.alphanumeric = &amp;quot;B3S23&amp;quot;&lt;br /&gt;
        self.slashed = &amp;quot;B3/S23&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Save all helper rules:&lt;br /&gt;
    def saveAllRules(self):&lt;br /&gt;
&lt;br /&gt;
        self.saveClassifyObjects()&lt;br /&gt;
        self.saveCoalesceObjects()&lt;br /&gt;
        self.saveExpungeObjects()&lt;br /&gt;
        self.saveExpungeGliders()&lt;br /&gt;
        self.saveIdentifyGliders()&lt;br /&gt;
        self.saveHandlePlumes()&lt;br /&gt;
        self.savePercolateInfection()&lt;br /&gt;
        self.saveEradicateInfection()&lt;br /&gt;
        self.saveContagiousLife()&lt;br /&gt;
&lt;br /&gt;
    # Set outer-totalistic rule:&lt;br /&gt;
    def setrule(self, rulestring):&lt;br /&gt;
&lt;br /&gt;
        mode = 0&lt;br /&gt;
        s = [False]*9&lt;br /&gt;
        b = [False]*9&lt;br /&gt;
&lt;br /&gt;
        for c in rulestring:&lt;br /&gt;
&lt;br /&gt;
            if ((c == &#039;s&#039;) | (c == &#039;S&#039;)):&lt;br /&gt;
                mode = 0&lt;br /&gt;
&lt;br /&gt;
            if ((c == &#039;b&#039;) | (c == &#039;B&#039;)):&lt;br /&gt;
                mode = 1&lt;br /&gt;
&lt;br /&gt;
            if (c == &#039;/&#039;):&lt;br /&gt;
                mode = 1 - mode&lt;br /&gt;
&lt;br /&gt;
            if ((ord(c) &amp;gt;= 48) &amp;amp; (ord(c) &amp;lt;= 56)):&lt;br /&gt;
                d = ord(c) - 48&lt;br /&gt;
                if (mode == 0):&lt;br /&gt;
                    s[d] = True&lt;br /&gt;
                else:&lt;br /&gt;
                    b[d] = True&lt;br /&gt;
&lt;br /&gt;
        prefix = &amp;quot;B&amp;quot;&lt;br /&gt;
        suffix = &amp;quot;S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (b[i]):&lt;br /&gt;
                prefix += str(i)&lt;br /&gt;
            if (s[i]):&lt;br /&gt;
                suffix += str(i)&lt;br /&gt;
&lt;br /&gt;
        self.alphanumeric = prefix + suffix&lt;br /&gt;
        self.slashed = prefix + &amp;quot;/&amp;quot; + suffix&lt;br /&gt;
        self.bee = b&lt;br /&gt;
        self.ess = s&lt;br /&gt;
&lt;br /&gt;
    # Save a rule file:&lt;br /&gt;
    def saverule(self, name, comments, table, colours):&lt;br /&gt;
&lt;br /&gt;
        ruledir = g.getdir(&amp;quot;rules&amp;quot;)&lt;br /&gt;
        filename = ruledir + name + &amp;quot;.rule&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        results = &amp;quot;@RULE &amp;quot; + name + &amp;quot;\n\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;*** File autogenerated by saverule. ***\n\n&amp;quot;&lt;br /&gt;
        results += comments&lt;br /&gt;
        results += &amp;quot;\n\n@TABLE\n\n&amp;quot;&lt;br /&gt;
        results += table&lt;br /&gt;
        results += &amp;quot;\n\n@COLORS\n\n&amp;quot;&lt;br /&gt;
        results += colours&lt;br /&gt;
&lt;br /&gt;
        # Only create a rule file if it doesn&#039;t already exist; this avoids&lt;br /&gt;
        # concurrency issues when booting an instance of apgsearch whilst&lt;br /&gt;
        # one is already running.&lt;br /&gt;
        if not os.path.exists(filename):&lt;br /&gt;
            try:&lt;br /&gt;
                f = open(filename, &#039;w&#039;)&lt;br /&gt;
                f.write(results)&lt;br /&gt;
                f.close()&lt;br /&gt;
            except:&lt;br /&gt;
                g.warn(&amp;quot;Unable to create rule table:\n&amp;quot; + filename)&lt;br /&gt;
&lt;br /&gt;
    # Defines a variable:&lt;br /&gt;
    def newvar(self, name, vallist):&lt;br /&gt;
&lt;br /&gt;
        line = &amp;quot;var &amp;quot;+name+&amp;quot;={&amp;quot;&lt;br /&gt;
        for i in xrange(len(vallist)):&lt;br /&gt;
            if (i &amp;gt; 0):&lt;br /&gt;
                line += &#039;,&#039;&lt;br /&gt;
            line += str(vallist[i])&lt;br /&gt;
        line += &amp;quot;}\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return line&lt;br /&gt;
&lt;br /&gt;
    # Defines a block of equivalent variables:&lt;br /&gt;
    def newvars(self, namelist, vallist):&lt;br /&gt;
&lt;br /&gt;
        block = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for name in namelist:&lt;br /&gt;
            block += self.newvar(name, vallist)&lt;br /&gt;
&lt;br /&gt;
        block += &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return block&lt;br /&gt;
&lt;br /&gt;
    def scoline(self, chara, charb, left, right, amount):&lt;br /&gt;
&lt;br /&gt;
        line = str(left) + &amp;quot;,&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(8):&lt;br /&gt;
            if (i &amp;lt; amount):&lt;br /&gt;
                line += chara&lt;br /&gt;
            else:&lt;br /&gt;
                line += charb&lt;br /&gt;
            line += chr(97 + i)&lt;br /&gt;
            line += &amp;quot;,&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        line += str(right) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        return line&lt;br /&gt;
&lt;br /&gt;
    def saveHandlePlumes(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This post-processes the output of ClassifyObjects to remove any&lt;br /&gt;
unwanted clustering of low-period objects appearing in puffer&lt;br /&gt;
exhaust.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
&lt;br /&gt;
state 7:  ON, still-life&lt;br /&gt;
state 8:  OFF, still-life&lt;br /&gt;
&lt;br /&gt;
state 9:  ON, p2 oscillator&lt;br /&gt;
state 10: OFF, p2 oscillator&lt;br /&gt;
&lt;br /&gt;
state 11: ON, higher-period object&lt;br /&gt;
state 12: OFF, higher-period object&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:17&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:permute&lt;br /&gt;
&lt;br /&gt;
var da={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var db={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var dc={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var dd={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var de={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var df={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var dg={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
var dh={0,2,4,6,8,10,12,14,16}&lt;br /&gt;
&lt;br /&gt;
var a={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var b={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var c={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var d={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var e={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var f={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var g={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var h={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8,da,db,dc,dd,de,df,dg,dh,0&lt;br /&gt;
10,da,db,dc,dd,de,df,dg,dh,0&lt;br /&gt;
&lt;br /&gt;
9,a,b,c,d,e,f,g,h,1&lt;br /&gt;
10,a,b,c,d,e,f,g,h,2&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_HandlePlumesCorrected&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveExpungeGliders(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This removes unwanted gliders.&lt;br /&gt;
It is mandatory that one first runs the rules CoalesceObjects,&lt;br /&gt;
IdentifyGliders and ClassifyObjects.&lt;br /&gt;
&lt;br /&gt;
Run this for two generations, and observe the population&lt;br /&gt;
counts after 1 and 2 generations. This will give the&lt;br /&gt;
following data:&lt;br /&gt;
&lt;br /&gt;
number of gliders = (p(1) - p(2))/5&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:17&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:rotate4reflect&lt;br /&gt;
&lt;br /&gt;
var a={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var b={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var c={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var d={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var e={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var f={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var g={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var h={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
&lt;br /&gt;
13,a,b,c,d,e,f,g,h,14&lt;br /&gt;
14,a,b,c,d,e,f,g,h,0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
13 255  255    0&lt;br /&gt;
14 127  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_ExpungeGliders&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveIdentifyGliders(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Run this after CoalesceObjects to find any gliders.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:17&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:rotate4reflect&lt;br /&gt;
&lt;br /&gt;
var a={0,2}&lt;br /&gt;
var b={0,2}&lt;br /&gt;
var c={0,2}&lt;br /&gt;
var d={0,2}&lt;br /&gt;
var e={0,2}&lt;br /&gt;
var f={0,2}&lt;br /&gt;
var g={0,2}&lt;br /&gt;
var h={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var i={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var j={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var k={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var l={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var m={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var n={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var o={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var p={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}&lt;br /&gt;
var q={3,4}&lt;br /&gt;
var r={9,10}&lt;br /&gt;
var s={11,12}&lt;br /&gt;
&lt;br /&gt;
1,1,a,1,1,b,1,c,d,3&lt;br /&gt;
d,1,1,1,1,a,b,1,c,4&lt;br /&gt;
&lt;br /&gt;
3,i,j,k,l,m,n,o,p,5&lt;br /&gt;
4,i,j,k,l,m,n,o,p,6&lt;br /&gt;
&lt;br /&gt;
1,q,i,j,a,b,c,k,l,7&lt;br /&gt;
d,q,i,j,a,b,c,k,l,8&lt;br /&gt;
1,i,a,b,c,d,e,j,q,7&lt;br /&gt;
f,i,a,b,c,d,e,j,q,8&lt;br /&gt;
&lt;br /&gt;
5,7,8,7,7,8,7,8,8,9&lt;br /&gt;
6,7,7,7,7,8,8,7,8,10&lt;br /&gt;
5,i,j,k,l,m,n,o,p,15&lt;br /&gt;
6,i,j,k,l,m,n,o,p,16&lt;br /&gt;
15,i,j,k,l,m,n,o,p,1&lt;br /&gt;
16,i,j,k,l,m,n,o,p,2&lt;br /&gt;
&lt;br /&gt;
7,i,j,k,l,m,n,o,p,11&lt;br /&gt;
8,i,j,k,l,m,n,o,p,12&lt;br /&gt;
&lt;br /&gt;
9,i,j,k,l,m,n,o,p,13&lt;br /&gt;
10,i,j,k,l,m,n,o,p,14&lt;br /&gt;
11,r,j,k,l,m,n,o,p,13&lt;br /&gt;
11,i,r,k,l,m,n,o,p,13&lt;br /&gt;
12,r,j,k,l,m,n,o,p,14&lt;br /&gt;
12,i,r,k,l,m,n,o,p,14&lt;br /&gt;
&lt;br /&gt;
11,i,j,k,l,m,n,o,p,1&lt;br /&gt;
12,i,j,k,l,m,n,o,p,2&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
13 255  255    0&lt;br /&gt;
14 127  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_IdentifyGliders&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveEradicateInfection(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
To run after ContagiousLife to disinfect any cells in states 3 or 4.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:7&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:permute&lt;br /&gt;
&lt;br /&gt;
var a={0,1,2,3,4,5,6}&lt;br /&gt;
var b={0,1,2,3,4,5,6}&lt;br /&gt;
var c={0,1,2,3,4,5,6}&lt;br /&gt;
var d={0,1,2,3,4,5,6}&lt;br /&gt;
var e={0,1,2,3,4,5,6}&lt;br /&gt;
var f={0,1,2,3,4,5,6}&lt;br /&gt;
var g={0,1,2,3,4,5,6}&lt;br /&gt;
var h={0,1,2,3,4,5,6}&lt;br /&gt;
var i={0,1,2,3,4,5,6}&lt;br /&gt;
&lt;br /&gt;
4,a,b,c,d,e,f,g,h,6&lt;br /&gt;
3,a,b,c,d,e,f,g,h,5&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1    0    0  255&lt;br /&gt;
2    0    0  127&lt;br /&gt;
3  255    0    0&lt;br /&gt;
4  127    0    0&lt;br /&gt;
5    0  255    0&lt;br /&gt;
6    0  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_EradicateInfection&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def savePercolateInfection(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Percolates any infection to all cells of that particular island.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
n_states:7&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:permute&lt;br /&gt;
&lt;br /&gt;
var a={0,1,2,3,4,5,6}&lt;br /&gt;
var b={0,1,2,3,4,5,6}&lt;br /&gt;
var c={0,1,2,3,4,5,6}&lt;br /&gt;
var d={0,1,2,3,4,5,6}&lt;br /&gt;
var e={0,1,2,3,4,5,6}&lt;br /&gt;
var f={0,1,2,3,4,5,6}&lt;br /&gt;
var g={0,1,2,3,4,5,6}&lt;br /&gt;
var h={0,1,2,3,4,5,6}&lt;br /&gt;
var i={0,1,2,3,4,5,6}&lt;br /&gt;
&lt;br /&gt;
var q={3,4}&lt;br /&gt;
var da={2,4,6}&lt;br /&gt;
var la={1,3,5}&lt;br /&gt;
&lt;br /&gt;
da,q,b,c,d,e,f,g,h,4&lt;br /&gt;
la,q,b,c,d,e,f,g,h,3&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1    0    0  255&lt;br /&gt;
2    0    0  127&lt;br /&gt;
3  255    0    0&lt;br /&gt;
4  127    0    0&lt;br /&gt;
5    0  255    0&lt;br /&gt;
6    0  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_PercolateInfection&amp;quot;, comments, table, colours)&lt;br /&gt;
        &lt;br /&gt;
    def saveExpungeObjects(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This removes unwanted monominos, blocks, blinkers and beehives.&lt;br /&gt;
It is mandatory that one first runs the rule ClassifyObjects.&lt;br /&gt;
&lt;br /&gt;
Run this for four generations, and observe the population&lt;br /&gt;
counts after 0, 1, 2, 3 and 4 generations. This will give the&lt;br /&gt;
following data:&lt;br /&gt;
&lt;br /&gt;
number of monominos = p(1) - p(0)&lt;br /&gt;
number of blocks = (p(2) - p(1))/4&lt;br /&gt;
number of blinkers = (p(3) - p(2))/5&lt;br /&gt;
number of beehives = (p(4) - p(3))/8&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;n_states:17\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;neighborhood:Moore\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;symmetries:rotate4reflect\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        table += self.newvars([&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;], range(0, 17, 1))&lt;br /&gt;
&lt;br /&gt;
        table += &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
# Monomino&lt;br /&gt;
7,0,0,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
# Death&lt;br /&gt;
6,a,b,c,d,e,f,g,h,0&lt;br /&gt;
a,6,b,c,d,e,f,g,h,0&lt;br /&gt;
&lt;br /&gt;
# Block&lt;br /&gt;
7,7,7,7,0,0,0,0,0,1&lt;br /&gt;
1,1,1,1,0,0,0,0,0,0&lt;br /&gt;
1,a,b,c,d,e,f,g,h,7&lt;br /&gt;
&lt;br /&gt;
# Blinker&lt;br /&gt;
10,0,0,0,9,9,9,0,0,2&lt;br /&gt;
9,9,10,0,0,0,0,0,10,3&lt;br /&gt;
2,a,b,c,d,e,f,g,h,10&lt;br /&gt;
3,a,b,c,d,e,f,g,h,9&lt;br /&gt;
9,2,0,3,0,2,0,3,0,6&lt;br /&gt;
&lt;br /&gt;
# Beehive&lt;br /&gt;
7,0,7,8,7,0,0,0,0,1&lt;br /&gt;
7,0,0,7,8,8,7,0,0,1&lt;br /&gt;
8,7,7,8,7,7,0,7,0,4&lt;br /&gt;
4,1,1,4,1,1,0,1,0,5&lt;br /&gt;
4,a,b,c,d,e,f,g,h,8&lt;br /&gt;
5,5,b,c,d,e,f,g,h,6&lt;br /&gt;
5,a,b,c,d,e,f,g,h,15&lt;br /&gt;
15,a,b,c,d,e,f,g,h,8&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
13 255  255    0&lt;br /&gt;
14 127  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_ExpungeObjects&amp;quot;, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveCoalesceObjects(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
A variant of HistoricalLife which separates a field of ash into&lt;br /&gt;
distinct objects.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;n_states:3\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;neighborhood:Moore\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;symmetries:permute\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        table += self.newvars([&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;], [0, 1, 2])&lt;br /&gt;
        table += self.newvars([&amp;quot;da&amp;quot;,&amp;quot;db&amp;quot;,&amp;quot;dc&amp;quot;,&amp;quot;dd&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;df&amp;quot;,&amp;quot;dg&amp;quot;,&amp;quot;dh&amp;quot;,&amp;quot;di&amp;quot;], [0, 2])&lt;br /&gt;
        table += self.newvars([&amp;quot;la&amp;quot;,&amp;quot;lb&amp;quot;,&amp;quot;lc&amp;quot;,&amp;quot;ld&amp;quot;,&amp;quot;le&amp;quot;,&amp;quot;lf&amp;quot;,&amp;quot;lg&amp;quot;,&amp;quot;lh&amp;quot;,&amp;quot;li&amp;quot;], [1])&lt;br /&gt;
&lt;br /&gt;
        minperc = 10&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (self.bee[i]):&lt;br /&gt;
                if (minperc == 10):&lt;br /&gt;
                    minperc = i&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,0,1,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,2,1,i)&lt;br /&gt;
            if (self.ess[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,1,1,i)&lt;br /&gt;
&lt;br /&gt;
        table += &amp;quot;\n# Bridge inductors\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (i &amp;gt;= minperc):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,0,2,i)&lt;br /&gt;
&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,1,2,0)&lt;br /&gt;
&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_CoalesceObjects_&amp;quot;+self.alphanumeric, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveClassifyObjects(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This passively classifies objects as either still-lifes, p2 oscillators&lt;br /&gt;
or higher-period oscillators. It is mandatory that one first runs the&lt;br /&gt;
rule CoalesceObjects.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  input ON&lt;br /&gt;
state 2:  input OFF&lt;br /&gt;
&lt;br /&gt;
state 3:  ON, will die&lt;br /&gt;
state 4:  OFF, will remain off&lt;br /&gt;
state 5:  ON, will survive&lt;br /&gt;
state 6:  OFF, will become alive&lt;br /&gt;
&lt;br /&gt;
state 7:  ON, still-life&lt;br /&gt;
state 8:  OFF, still-life&lt;br /&gt;
&lt;br /&gt;
state 9:  ON, p2 oscillator&lt;br /&gt;
state 10: OFF, p2 oscillator&lt;br /&gt;
&lt;br /&gt;
state 11: ON, higher-period object&lt;br /&gt;
state 12: OFF, higher-period object&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;n_states:17\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;neighborhood:Moore\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;symmetries:permute\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        table += self.newvars([&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;], range(0, 17, 1))&lt;br /&gt;
        table += self.newvars([&amp;quot;la&amp;quot;,&amp;quot;lb&amp;quot;,&amp;quot;lc&amp;quot;,&amp;quot;ld&amp;quot;,&amp;quot;le&amp;quot;,&amp;quot;lf&amp;quot;,&amp;quot;lg&amp;quot;,&amp;quot;lh&amp;quot;,&amp;quot;li&amp;quot;], range(1, 17, 2))&lt;br /&gt;
        table += self.newvars([&amp;quot;da&amp;quot;,&amp;quot;db&amp;quot;,&amp;quot;dc&amp;quot;,&amp;quot;dd&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;df&amp;quot;,&amp;quot;dg&amp;quot;,&amp;quot;dh&amp;quot;,&amp;quot;di&amp;quot;], range(0, 17, 2))&lt;br /&gt;
        table += self.newvars([&amp;quot;pa&amp;quot;,&amp;quot;pb&amp;quot;,&amp;quot;pc&amp;quot;,&amp;quot;pd&amp;quot;,&amp;quot;pe&amp;quot;,&amp;quot;pf&amp;quot;,&amp;quot;pg&amp;quot;,&amp;quot;ph&amp;quot;,&amp;quot;pi&amp;quot;], [0, 3, 4])&lt;br /&gt;
        table += self.newvars([&amp;quot;qa&amp;quot;,&amp;quot;qb&amp;quot;,&amp;quot;qc&amp;quot;,&amp;quot;qd&amp;quot;,&amp;quot;qe&amp;quot;,&amp;quot;qf&amp;quot;,&amp;quot;qg&amp;quot;,&amp;quot;qh&amp;quot;,&amp;quot;qi&amp;quot;], [5, 6])&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (self.bee[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,2,6,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;q&amp;quot;,&amp;quot;p&amp;quot;,3,9,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;q&amp;quot;,&amp;quot;p&amp;quot;,4,12,i)&lt;br /&gt;
            if (self.ess[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,1,5,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;q&amp;quot;,&amp;quot;p&amp;quot;,5,7,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;q&amp;quot;,&amp;quot;p&amp;quot;,6,12,i)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,2,4,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,1,3,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,5,11,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,3,11,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,4,8,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,6,10,0)&lt;br /&gt;
&lt;br /&gt;
        table += &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
# Propagate interestingness&lt;br /&gt;
7,11,b,c,d,e,f,g,h,11&lt;br /&gt;
7,12,b,c,d,e,f,g,h,11&lt;br /&gt;
7,9,b,c,d,e,f,g,h,9&lt;br /&gt;
7,10,b,c,d,e,f,g,h,9&lt;br /&gt;
8,11,b,c,d,e,f,g,h,12&lt;br /&gt;
8,12,b,c,d,e,f,g,h,12&lt;br /&gt;
8,9,b,c,d,e,f,g,h,10&lt;br /&gt;
8,10,b,c,d,e,f,g,h,10&lt;br /&gt;
&lt;br /&gt;
7,13,b,c,d,e,f,g,h,11&lt;br /&gt;
7,14,b,c,d,e,f,g,h,11&lt;br /&gt;
8,13,b,c,d,e,f,g,h,14&lt;br /&gt;
8,14,b,c,d,e,f,g,h,14&lt;br /&gt;
9,13,b,c,d,e,f,g,h,11&lt;br /&gt;
9,14,b,c,d,e,f,g,h,11&lt;br /&gt;
10,13,b,c,d,e,f,g,h,14&lt;br /&gt;
10,14,b,c,d,e,f,g,h,14&lt;br /&gt;
&lt;br /&gt;
9,11,b,c,d,e,f,g,h,11&lt;br /&gt;
9,12,b,c,d,e,f,g,h,11&lt;br /&gt;
10,11,b,c,d,e,f,g,h,12&lt;br /&gt;
10,12,b,c,d,e,f,g,h,12&lt;br /&gt;
&lt;br /&gt;
13,11,b,c,d,e,f,g,h,11&lt;br /&gt;
13,12,b,c,d,e,f,g,h,11&lt;br /&gt;
14,11,b,c,d,e,f,g,h,12&lt;br /&gt;
14,12,b,c,d,e,f,g,h,12&lt;br /&gt;
13,9,b,c,d,e,f,g,h,11&lt;br /&gt;
14,9,b,c,d,e,f,g,h,12&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1  255  255  255&lt;br /&gt;
2  127  127  127&lt;br /&gt;
7    0    0  255&lt;br /&gt;
8    0    0  127&lt;br /&gt;
9  255    0    0&lt;br /&gt;
10 127    0    0&lt;br /&gt;
11   0  255    0&lt;br /&gt;
12   0  127    0&lt;br /&gt;
13 255  255    0&lt;br /&gt;
14 127  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_ClassifyObjects_&amp;quot;+self.alphanumeric, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
    def saveContagiousLife(self):&lt;br /&gt;
&lt;br /&gt;
        comments = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
A variant of HistoricalLife used for detecting dependencies between&lt;br /&gt;
islands.&lt;br /&gt;
&lt;br /&gt;
state 0:  vacuum&lt;br /&gt;
state 1:  ON&lt;br /&gt;
state 2:  OFF&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        table = &amp;quot;n_states:7\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;neighborhood:Moore\n&amp;quot;&lt;br /&gt;
        table += &amp;quot;symmetries:permute\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        table += self.newvars([&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;], range(0, 7, 1))&lt;br /&gt;
        table += self.newvars([&amp;quot;la&amp;quot;,&amp;quot;lb&amp;quot;,&amp;quot;lc&amp;quot;,&amp;quot;ld&amp;quot;,&amp;quot;le&amp;quot;,&amp;quot;lf&amp;quot;,&amp;quot;lg&amp;quot;,&amp;quot;lh&amp;quot;,&amp;quot;li&amp;quot;], range(1, 7, 2))&lt;br /&gt;
        table += self.newvars([&amp;quot;da&amp;quot;,&amp;quot;db&amp;quot;,&amp;quot;dc&amp;quot;,&amp;quot;dd&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;df&amp;quot;,&amp;quot;dg&amp;quot;,&amp;quot;dh&amp;quot;,&amp;quot;di&amp;quot;], range(0, 7, 2))&lt;br /&gt;
        table += self.newvar(&amp;quot;p&amp;quot;,[3, 4])&lt;br /&gt;
        table += self.newvars([&amp;quot;ta&amp;quot;,&amp;quot;tb&amp;quot;,&amp;quot;tc&amp;quot;,&amp;quot;td&amp;quot;,&amp;quot;te&amp;quot;,&amp;quot;tf&amp;quot;,&amp;quot;tg&amp;quot;,&amp;quot;th&amp;quot;,&amp;quot;ti&amp;quot;], [3])&lt;br /&gt;
        table += self.newvars([&amp;quot;qa&amp;quot;,&amp;quot;qb&amp;quot;,&amp;quot;qc&amp;quot;,&amp;quot;qd&amp;quot;,&amp;quot;qe&amp;quot;,&amp;quot;qf&amp;quot;,&amp;quot;qg&amp;quot;,&amp;quot;qh&amp;quot;,&amp;quot;qi&amp;quot;], [0, 1, 2, 4, 5, 6])&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(9):&lt;br /&gt;
            if (self.bee[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,4,3,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,2,1,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,0,1,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,6,5,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;t&amp;quot;,&amp;quot;q&amp;quot;,0,4,i)&lt;br /&gt;
            if (self.ess[i]):&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,3,3,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,5,5,i)&lt;br /&gt;
                table += self.scoline(&amp;quot;l&amp;quot;,&amp;quot;d&amp;quot;,1,1,i)&lt;br /&gt;
&lt;br /&gt;
        table += &amp;quot;# Default behaviour (death):\n&amp;quot;&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,1,2,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,5,6,0)&lt;br /&gt;
        table += self.scoline(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,3,4,0)&lt;br /&gt;
&lt;br /&gt;
        colours = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
0    0    0    0&lt;br /&gt;
1    0    0  255&lt;br /&gt;
2    0    0  127&lt;br /&gt;
3  255    0    0&lt;br /&gt;
4  127    0    0&lt;br /&gt;
5    0  255    0&lt;br /&gt;
6    0  127    0&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.saverule(&amp;quot;APG_ContagiousLife_&amp;quot;+self.alphanumeric, comments, table, colours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Soup:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
&lt;br /&gt;
        # The rule generator:&lt;br /&gt;
        self.rg = RuleGenerator()&lt;br /&gt;
&lt;br /&gt;
        # Should we skip error-correction:&lt;br /&gt;
        self.skipErrorCorrection = False&lt;br /&gt;
&lt;br /&gt;
        # A dict mapping binary representations of small possibly-pseudo-objects&lt;br /&gt;
        # to their equivalent canonised representation.&lt;br /&gt;
        #&lt;br /&gt;
        # This is many-to-one, as (for example) all of these will map to&lt;br /&gt;
        # the same pseudo-object (namely the beacon on block):&lt;br /&gt;
        #&lt;br /&gt;
        # ..**.**  ..**.**  **.....                           **.....&lt;br /&gt;
        # ..**.**  ...*.**  **.....                           *......&lt;br /&gt;
        # **.....  *......  ..**...                           ...*.**&lt;br /&gt;
        # **.....  **.....  ..**... [...12 others omitted...] ..**.**&lt;br /&gt;
        # .......  .......  .......                           .......&lt;br /&gt;
        # .......  .......  ..**...                           .......&lt;br /&gt;
        # .......  .......  ..**...                           .......&lt;br /&gt;
        #&lt;br /&gt;
        # The first few soups are much slower to process, as objects are being&lt;br /&gt;
        # entered into the cache.&lt;br /&gt;
        self.cache = {}&lt;br /&gt;
&lt;br /&gt;
        # A dict to store memoized decompositions of possibly-pseudo-objects&lt;br /&gt;
        # into constituent parts. This is initialised with the unique minimal&lt;br /&gt;
        # pseudo-still-life (two blocks on lock) that cannot be automatically&lt;br /&gt;
        # separated by the routine pseudo_bangbang(). Any larger objects are&lt;br /&gt;
        # ambiguous, such as this one:&lt;br /&gt;
        #&lt;br /&gt;
        #     *&lt;br /&gt;
        #    * * **&lt;br /&gt;
        #     ** **&lt;br /&gt;
        #&lt;br /&gt;
        #    * *** *&lt;br /&gt;
        #    ** * **&lt;br /&gt;
        #&lt;br /&gt;
        # Is it a (block on (lock on boat)) or ((block on lock) on boat)?&lt;br /&gt;
        # Ahh, the joys of non-associativity.&lt;br /&gt;
        #&lt;br /&gt;
        # See http://paradise.caltech.edu/~cook/Workshop/CAs/2DOutTot/Life/StillLife/StillLifeTheory.html&lt;br /&gt;
        self.decompositions = {&amp;quot;xs18_3pq3qp3&amp;quot;: [&amp;quot;xs14_3123qp3&amp;quot;, &amp;quot;xs4_33&amp;quot;]}&lt;br /&gt;
&lt;br /&gt;
        # A dict of objects in the form {&amp;quot;identifier&amp;quot;: (&amp;quot;common name&amp;quot;, points)}&lt;br /&gt;
        #&lt;br /&gt;
        # As a rough heuristic, an object is worth 15 + log2(n) points if it&lt;br /&gt;
        # is n times rarer than the pentadecathlon.&lt;br /&gt;
        #&lt;br /&gt;
        # Still-lifes are limited to 10 points.&lt;br /&gt;
        # p2 oscillators are limited to 20 points.&lt;br /&gt;
        # p3 and p4 oscillators are limited to 30 points.&lt;br /&gt;
        self.commonnames = {&amp;quot;xp3_co9nas0san9oczgoldlo0oldlogz1047210127401&amp;quot;: (&amp;quot;pulsar&amp;quot;, 8),&lt;br /&gt;
                       &amp;quot;xp15_4r4z4r4&amp;quot;: (&amp;quot;pentadecathlon&amp;quot;, 15),&lt;br /&gt;
                       &amp;quot;xp2_2a54&amp;quot;: (&amp;quot;clock&amp;quot;, 16),&lt;br /&gt;
                       &amp;quot;xp2_31ago&amp;quot;: (&amp;quot;bipole&amp;quot;, 17),&lt;br /&gt;
                       &amp;quot;xp2_0g0k053z32&amp;quot;: (&amp;quot;quadpole&amp;quot;, 18),&lt;br /&gt;
                       &amp;quot;xp2_g8gid1e8z1226&amp;quot;: (&amp;quot;great on-off&amp;quot;, 19),&lt;br /&gt;
                       &amp;quot;xp2_rhewehr&amp;quot;: (&amp;quot;spark coil&amp;quot;, 19),&lt;br /&gt;
                       &amp;quot;xp8_gk2gb3z11&amp;quot;: (&amp;quot;figure-8&amp;quot;, 20),&lt;br /&gt;
                       &amp;quot;xp4_37bkic&amp;quot;: (&amp;quot;mold&amp;quot;, 21),&lt;br /&gt;
                       &amp;quot;xp2_31a08zy0123cko&amp;quot;: (&amp;quot;quadpole on ship&amp;quot;, 20),&lt;br /&gt;
                       &amp;quot;xp2_g0k053z11&amp;quot;: (&amp;quot;tripole&amp;quot;, 20),&lt;br /&gt;
                       &amp;quot;xp4_ssj3744zw3&amp;quot;: (&amp;quot;mazing&amp;quot;, 23),&lt;br /&gt;
                       &amp;quot;xp8_g3jgz1ut&amp;quot;: (&amp;quot;blocker&amp;quot;, 24),&lt;br /&gt;
                       &amp;quot;xp3_695qc8zx33&amp;quot;: (&amp;quot;jam&amp;quot;, 24),&lt;br /&gt;
                       &amp;quot;xp30_w33z8kqrqk8zzzw33&amp;quot;: (&amp;quot;cis-queen-bee-shuttle&amp;quot;, 24),&lt;br /&gt;
                       &amp;quot;xp30_w33z8kqrqk8zzzx33&amp;quot;: (&amp;quot;trans-queen-bee-shuttle&amp;quot;, 24),&lt;br /&gt;
                       &amp;quot;xp4_8eh5e0e5he8z178a707a871&amp;quot;: (&amp;quot;cloverleaf&amp;quot;, 25),&lt;br /&gt;
                       &amp;quot;xp5_idiidiz01w1&amp;quot;: (&amp;quot;octagon II&amp;quot;, 26),&lt;br /&gt;
                       &amp;quot;xp6_ccb7w66z066&amp;quot;: (&amp;quot;unix&amp;quot;, 26),&lt;br /&gt;
                       &amp;quot;xp14_j9d0d9j&amp;quot;: (&amp;quot;tumbler&amp;quot;, 27),&lt;br /&gt;
                       &amp;quot;xp3_025qzrq221&amp;quot;: (&amp;quot;trans-tub-eater&amp;quot;, 28),&lt;br /&gt;
                       &amp;quot;xp3_4hh186z07&amp;quot;: (&amp;quot;caterer&amp;quot;, 29),&lt;br /&gt;
                       &amp;quot;xp3_025qz32qq1&amp;quot;: (&amp;quot;cis-tub-eater&amp;quot;, 30),&lt;br /&gt;
                       &amp;quot;xp8_wgovnz234z33&amp;quot;: (&amp;quot;Tim Coe&#039;s p8&amp;quot;, 31),&lt;br /&gt;
                       &amp;quot;xp5_3pmwmp3zx11&amp;quot;: (&amp;quot;fumarole&amp;quot;, 33),&lt;br /&gt;
                       &amp;quot;xp46_330279cx1aad3y833zx4e93x855bc&amp;quot;: (&amp;quot;cis-twin-bees-shuttle&amp;quot;, 35),&lt;br /&gt;
                       &amp;quot;xp46_330279cx1aad3zx4e93x855bcy8cc&amp;quot;: (&amp;quot;trans-twin-bees-shuttle&amp;quot;, 35),&lt;br /&gt;
                       &amp;quot;yl144_1_16_afb5f3db909e60548f086e22ee3353ac&amp;quot;: (&amp;quot;block-laying switch engine&amp;quot;, 16),&lt;br /&gt;
                       &amp;quot;yl384_1_59_7aeb1999980c43b4945fb7fcdb023326&amp;quot;: (&amp;quot;glider-producing switch engine&amp;quot;, 17),&lt;br /&gt;
                       &amp;quot;xp10_9hr&amp;quot;: (&amp;quot;[HighLife] p10&amp;quot;, 6),&lt;br /&gt;
                       &amp;quot;xp7_13090c8&amp;quot;: (&amp;quot;[HighLife] p7&amp;quot;, 9),&lt;br /&gt;
                       &amp;quot;xq48_07z8ca7zy1e531&amp;quot;: (&amp;quot;[HighLife] bomber&amp;quot;, 9),&lt;br /&gt;
                       &amp;quot;xq4_153&amp;quot;: (&amp;quot;glider&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xq4_6frc&amp;quot;: (&amp;quot;lightweight spaceship&amp;quot;, 7),&lt;br /&gt;
                       &amp;quot;xq4_27dee6&amp;quot;: (&amp;quot;middleweight spaceship&amp;quot;, 9),&lt;br /&gt;
                       &amp;quot;xq4_27deee6&amp;quot;: (&amp;quot;heavyweight spaceship&amp;quot;, 12),&lt;br /&gt;
                       &amp;quot;xq7_3nw17862z6952&amp;quot;: (&amp;quot;loafer&amp;quot;, 70),&lt;br /&gt;
                       &amp;quot;xp2_7&amp;quot;: (&amp;quot;blinker&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs4_33&amp;quot;: (&amp;quot;block&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs4_252&amp;quot;: (&amp;quot;tub&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs5_253&amp;quot;: (&amp;quot;boat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_bd&amp;quot;: (&amp;quot;snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_356&amp;quot;: (&amp;quot;ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_696&amp;quot;: (&amp;quot;beehive&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_25a4&amp;quot;: (&amp;quot;barge&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs6_39c&amp;quot;: (&amp;quot;carrier&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xp2_7e&amp;quot;: (&amp;quot;toad&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xp2_318c&amp;quot;: (&amp;quot;beacon&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs7_3lo&amp;quot;: (&amp;quot;long snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs7_25ac&amp;quot;: (&amp;quot;long boat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs7_178c&amp;quot;: (&amp;quot;eater&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs7_2596&amp;quot;: (&amp;quot;loaf&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_178k8&amp;quot;: (&amp;quot;twit&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_32qk&amp;quot;: (&amp;quot;hook with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_69ic&amp;quot;: (&amp;quot;mango&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_6996&amp;quot;: (&amp;quot;pond&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_25ak8&amp;quot;: (&amp;quot;long barge&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_3pm&amp;quot;: (&amp;quot;shillelagh&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_312ko&amp;quot;: (&amp;quot;canoe&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_31248c&amp;quot;: (&amp;quot;very long snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs8_35ac&amp;quot;: (&amp;quot;long ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_g8o653z11&amp;quot;: (&amp;quot;ship-tie&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_g88m952z121&amp;quot;: (&amp;quot;half-bakery&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_69bqic&amp;quot;: (&amp;quot;paperclip&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_31ego&amp;quot;: (&amp;quot;integral sign&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_g8o652z01&amp;quot;: (&amp;quot;boat-tie&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_g88b96z123&amp;quot;: (&amp;quot;big ess&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_g88m996z1221&amp;quot;: (&amp;quot;bipond&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_raar&amp;quot;: (&amp;quot;table on table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_4aar&amp;quot;: (&amp;quot;hat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_35ako&amp;quot;: (&amp;quot;very long ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_178ko&amp;quot;: (&amp;quot;trans boat with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_354cgc453&amp;quot;: (&amp;quot;moose antlers&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_6970796&amp;quot;: (&amp;quot;cis-mirrored r-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_32qr&amp;quot;: (&amp;quot;block on table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_j1u0696z11&amp;quot;: (&amp;quot;beehive on dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_j1u066z11&amp;quot;: (&amp;quot;block on dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_g8o652z11&amp;quot;: (&amp;quot;boat tie ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_25ako&amp;quot;: (&amp;quot;very long boat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_69egmiczx1&amp;quot;: (&amp;quot;scorpion&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs18_rhe0ehr&amp;quot;: (&amp;quot;dead spark coil&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs17_2ege1ege2&amp;quot;: (&amp;quot;twinhat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_178kk8&amp;quot;: (&amp;quot;beehive with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_69ar&amp;quot;: (&amp;quot;loop&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_69bo8a6&amp;quot;: (&amp;quot;fourteener&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_39e0e93&amp;quot;: (&amp;quot;bookends&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_178kc&amp;quot;: (&amp;quot;cis boat with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_330f96&amp;quot;: (&amp;quot;block and cap&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_358gkc&amp;quot;: (&amp;quot;10.003&amp;quot;,0),&lt;br /&gt;
                       &amp;quot;xs12_330fho&amp;quot;: (&amp;quot;trans block and longhook&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_g0s252z11&amp;quot;: (&amp;quot;prodigal sign&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_g0s453z11&amp;quot;: (&amp;quot;elevener&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_6is079c&amp;quot;: (&amp;quot;cis-rotated hook&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_69e0eic&amp;quot;: (&amp;quot;trans-mirrored R-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_ggm952z1&amp;quot;: (&amp;quot;trans loaf with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_j1u06a4z11&amp;quot;: (&amp;quot;cis boat and dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs20_3lkkl3z32w23&amp;quot;: (&amp;quot;mirrored dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_178br&amp;quot;: (&amp;quot;12.003&amp;quot;,0),&lt;br /&gt;
                       &amp;quot;xs12_3hu066&amp;quot;: (&amp;quot;cis block and longhook&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_178c453&amp;quot;: (&amp;quot;eater with nine&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_0drz32&amp;quot;: (&amp;quot;broken snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_312453&amp;quot;: (&amp;quot;long shillelagh&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_3215ac&amp;quot;: (&amp;quot;boat with long tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_39e0e96&amp;quot;: (&amp;quot;cis-hook and R-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_g88m96z121&amp;quot;: (&amp;quot;beehive at loaf&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_39e0eic&amp;quot;: (&amp;quot;trans hook and R-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_3542ac&amp;quot;: (&amp;quot;S-ten&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_259e0eic&amp;quot;: (&amp;quot;trans R-bee and R-loaf&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_178jd&amp;quot;: (&amp;quot;11-loop&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_25a84c&amp;quot;: (&amp;quot;tub with long tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_3lkm96z01&amp;quot;: (&amp;quot;bee-hat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_g8o0e96z121&amp;quot;: (&amp;quot;cis-rotated R-bee&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_69e0mq&amp;quot;: (&amp;quot;R-bee and snake&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_69lic&amp;quot;: (&amp;quot;11.003&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_6960ui&amp;quot;: (&amp;quot;beehive and table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_259e0e952&amp;quot;: (&amp;quot;cis-mirrored R-loaf&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_1784ko&amp;quot;: (&amp;quot;8-snake-eater&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_4a960ui&amp;quot;: (&amp;quot;ortho loaf and table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs9_g0g853z11&amp;quot;: (&amp;quot;long canoe&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs18_69is0si96&amp;quot;: (&amp;quot;[cis-mirrored R-mango]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_178kic&amp;quot;: (&amp;quot;cis loaf with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs16_69bob96&amp;quot;: (&amp;quot;symmetric scorpion&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_0g8o653z121&amp;quot;: (&amp;quot;longboat on ship&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_o4q552z01&amp;quot;: (&amp;quot;beehive at beehive&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs10_ggka52z1&amp;quot;: (&amp;quot;trans barge with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_256o8a6&amp;quot;: (&amp;quot;eater on boat&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_6960uic&amp;quot;: (&amp;quot;beehive with cap&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_2egm93&amp;quot;: (&amp;quot;snorkel loop&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs12_2egm96&amp;quot;: (&amp;quot;beehive bend tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_g0s253z11&amp;quot;: (&amp;quot;trans boat with nine&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_3lk453z121&amp;quot;: (&amp;quot;trans boat and dock&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs19_69icw8ozxdd11&amp;quot;: (&amp;quot;[mango with block on dock]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_2530f96&amp;quot;: (&amp;quot;[cis boat and cap]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_2530f9&amp;quot;: (&amp;quot;cis boat and table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_4a9m88gzx121&amp;quot;: (&amp;quot;[bi-loaf2]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_ggka53z1&amp;quot;: (&amp;quot;trans longboat with tail&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs18_2egm9a4zx346&amp;quot;: (&amp;quot;[loaf eater tail]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_4a9raic&amp;quot;: (&amp;quot;[15-bent-paperclip]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs11_3586246&amp;quot;: (&amp;quot;[11-snake]&amp;quot;,0),&lt;br /&gt;
                       &amp;quot;xs11_178b52&amp;quot;: (&amp;quot;[11-boat wrap tail]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_08u1e8z321&amp;quot;: (&amp;quot;[hat join hook]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_g4s079cz11&amp;quot;: (&amp;quot;[cis-mirrored offset hooks]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_31egma4&amp;quot;: (&amp;quot;[13-boat wrap eater]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs14_69960ui&amp;quot;: (&amp;quot;pond and table&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs13_255q8a6&amp;quot;: (&amp;quot;[eater tie beehive]&amp;quot;, 0),&lt;br /&gt;
                       &amp;quot;xs15_09v0ccz321&amp;quot;: (&amp;quot;[hook join table and block]&amp;quot;,0)}&lt;br /&gt;
&lt;br /&gt;
        # First soup to contain a particular object:&lt;br /&gt;
        self.alloccur = {}&lt;br /&gt;
&lt;br /&gt;
        # A tally of objects that have occurred during this run of apgsearch:&lt;br /&gt;
        self.objectcounts = {}&lt;br /&gt;
&lt;br /&gt;
        # Any soups with positive scores, and the number of points.&lt;br /&gt;
        self.soupscores = {}&lt;br /&gt;
&lt;br /&gt;
        # Temporary list of unidentified objects:&lt;br /&gt;
        self.unids = []&lt;br /&gt;
&lt;br /&gt;
        # Things like glider guns and large oscillators belong here:&lt;br /&gt;
        self.superunids = []&lt;br /&gt;
        self.gridsize = 0&lt;br /&gt;
        self.resets = 0&lt;br /&gt;
&lt;br /&gt;
        # For profiling purposes:&lt;br /&gt;
        self.qlifetime = 0.0&lt;br /&gt;
        self.ruletime = 0.0&lt;br /&gt;
        self.gridtime = 0.0&lt;br /&gt;
&lt;br /&gt;
    # Increment object count by given value:&lt;br /&gt;
    def incobject(self, obj, incval):&lt;br /&gt;
        if (incval &amp;gt; 0):&lt;br /&gt;
            if obj in self.objectcounts:&lt;br /&gt;
                self.objectcounts[obj] = self.objectcounts[obj] + incval&lt;br /&gt;
            else:&lt;br /&gt;
                self.objectcounts[obj] = incval&lt;br /&gt;
&lt;br /&gt;
    # Increment soup score by given value:&lt;br /&gt;
    def awardpoints(self, soupid, incval):&lt;br /&gt;
        if (incval &amp;gt; 0):&lt;br /&gt;
            if soupid in self.soupscores:&lt;br /&gt;
                self.soupscores[soupid] = self.soupscores[soupid] + incval&lt;br /&gt;
            else:&lt;br /&gt;
                self.soupscores[soupid] = incval&lt;br /&gt;
&lt;br /&gt;
    # Increment soup score by appropriate value:&lt;br /&gt;
    def awardpoints2(self, soupid, obj):&lt;br /&gt;
&lt;br /&gt;
        # Record the occurrence of this object:&lt;br /&gt;
        if (obj in self.alloccur):&lt;br /&gt;
            if (len(self.alloccur[obj]) &amp;lt; 10):&lt;br /&gt;
                if (soupid not in self.alloccur[obj]):&lt;br /&gt;
                    self.alloccur[obj] += [soupid]&lt;br /&gt;
        else:&lt;br /&gt;
            self.alloccur[obj] = [soupid]&lt;br /&gt;
        &lt;br /&gt;
        if obj in self.commonnames:&lt;br /&gt;
            self.awardpoints(soupid, self.commonnames[obj][1])&lt;br /&gt;
        elif (obj[0] == &#039;x&#039;):&lt;br /&gt;
            prefix = obj.split(&#039;_&#039;)[0]&lt;br /&gt;
            prenum = int(prefix[2:])&lt;br /&gt;
            if (obj[1] == &#039;s&#039;):&lt;br /&gt;
                self.awardpoints(soupid, min(prenum, 20)) # for still-lifes, award one point per constituent cell (max 20)&lt;br /&gt;
            elif (obj[1] == &#039;p&#039;):&lt;br /&gt;
                if (prenum == 2):&lt;br /&gt;
                    self.awardpoints(soupid, 20) # p2 oscillators are limited to 20 points&lt;br /&gt;
                elif ((prenum == 3) | (prenum == 4)):&lt;br /&gt;
                    self.awardpoints(soupid, 30) # p3 and p4 oscillators are limited to 30 points&lt;br /&gt;
                else:&lt;br /&gt;
                    self.awardpoints(soupid, 40)&lt;br /&gt;
            else:&lt;br /&gt;
                self.awardpoints(soupid, 50)&lt;br /&gt;
        else:&lt;br /&gt;
            self.awardpoints(soupid, 60)&lt;br /&gt;
&lt;br /&gt;
    # Assuming the pattern has stabilised, perform a census:&lt;br /&gt;
    def census(self, stepsize):&lt;br /&gt;
&lt;br /&gt;
        g.setrule(&amp;quot;APG_CoalesceObjects_&amp;quot; + self.rg.alphanumeric)&lt;br /&gt;
        g.setbase(2)&lt;br /&gt;
        g.setstep(stepsize)&lt;br /&gt;
        g.step()&lt;br /&gt;
&lt;br /&gt;
        # apgsearch theoretically supports up to 2^14 rules, whereas the Guy&lt;br /&gt;
        # glider is only stable in 2^8 rules. Ensure that this is one of these&lt;br /&gt;
        # rules by doing some basic Boolean arithmetic.&lt;br /&gt;
        #&lt;br /&gt;
        # This should be parsed as `gliders exist&#039;, not `glider sexist&#039;:&lt;br /&gt;
        glidersexist = self.rg.ess[2] &amp;amp; self.rg.ess[3] &amp;amp; (not self.rg.ess[1]) &amp;amp; (not self.rg.ess[4])&lt;br /&gt;
        glidersexist = glidersexist &amp;amp; (not (self.rg.bee[4] | self.rg.bee[5]))&lt;br /&gt;
&lt;br /&gt;
        if (glidersexist):&lt;br /&gt;
            g.setrule(&amp;quot;APG_IdentifyGliders&amp;quot;)&lt;br /&gt;
            g.setbase(2)&lt;br /&gt;
            g.setstep(2)&lt;br /&gt;
            g.step()&lt;br /&gt;
&lt;br /&gt;
        g.setrule(&amp;quot;APG_ClassifyObjects_&amp;quot; + self.rg.alphanumeric)&lt;br /&gt;
        g.setbase(2)&lt;br /&gt;
        g.setstep(max(8, stepsize))&lt;br /&gt;
        g.step()&lt;br /&gt;
&lt;br /&gt;
        # Only do this if we have an infinite-growth pattern:&lt;br /&gt;
        if (stepsize &amp;gt; 8):&lt;br /&gt;
            g.setrule(&amp;quot;APG_HandlePlumesCorrected&amp;quot;)&lt;br /&gt;
            g.setbase(2)&lt;br /&gt;
            g.setstep(1)&lt;br /&gt;
            g.step()&lt;br /&gt;
            g.setrule(&amp;quot;APG_ClassifyObjects_&amp;quot; + self.rg.alphanumeric)&lt;br /&gt;
            g.setstep(stepsize)&lt;br /&gt;
            g.step()&lt;br /&gt;
&lt;br /&gt;
        # Remove any gliders:&lt;br /&gt;
        if (glidersexist):&lt;br /&gt;
            g.setrule(&amp;quot;APG_ExpungeGliders&amp;quot;)&lt;br /&gt;
            g.run(1)&lt;br /&gt;
            pop5 = int(g.getpop())&lt;br /&gt;
            g.run(1)&lt;br /&gt;
            pop6 = int(g.getpop())&lt;br /&gt;
            self.incobject(&amp;quot;xq4_153&amp;quot;, (pop5 - pop6)/5)&lt;br /&gt;
&lt;br /&gt;
        # Remove any blocks, blinkers and beehives:&lt;br /&gt;
        g.setrule(&amp;quot;APG_ExpungeObjects&amp;quot;)&lt;br /&gt;
        pop0 = int(g.getpop())&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        pop1 = int(g.getpop())&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        pop2 = int(g.getpop())&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        pop3 = int(g.getpop())&lt;br /&gt;
        g.run(1)&lt;br /&gt;
        pop4 = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
        # Blocks, blinkers and beehives removed by ExpungeObjects:&lt;br /&gt;
        self.incobject(&amp;quot;xs1_1&amp;quot;, (pop0-pop1))&lt;br /&gt;
        self.incobject(&amp;quot;xs4_33&amp;quot;, (pop1-pop2)/4)&lt;br /&gt;
        self.incobject(&amp;quot;xp2_7&amp;quot;, (pop2-pop3)/5)&lt;br /&gt;
        self.incobject(&amp;quot;xs6_696&amp;quot;, (pop3-pop4)/8)&lt;br /&gt;
&lt;br /&gt;
    # Removes an object incident with (ix, iy) and returns the cell list:&lt;br /&gt;
    def grabobj(self, ix, iy):&lt;br /&gt;
&lt;br /&gt;
        allcells = [ix, iy, g.getcell(ix, iy)]&lt;br /&gt;
        g.setcell(ix, iy, 0)&lt;br /&gt;
        livecells = []&lt;br /&gt;
        deadcells = []&lt;br /&gt;
&lt;br /&gt;
        marker = 0&lt;br /&gt;
        ll = 3&lt;br /&gt;
&lt;br /&gt;
        while (marker &amp;lt; ll):&lt;br /&gt;
            x = allcells[marker]&lt;br /&gt;
            y = allcells[marker+1]&lt;br /&gt;
            z = allcells[marker+2]&lt;br /&gt;
            marker += 3&lt;br /&gt;
&lt;br /&gt;
            if ((z % 2) == 1):&lt;br /&gt;
                livecells.append(x)&lt;br /&gt;
                livecells.append(y)&lt;br /&gt;
            else:&lt;br /&gt;
                deadcells.append(x)&lt;br /&gt;
                deadcells.append(y)&lt;br /&gt;
&lt;br /&gt;
            for nx in xrange(x - 1, x + 2):&lt;br /&gt;
                for ny in xrange(y - 1, y + 2):&lt;br /&gt;
&lt;br /&gt;
                    nz = g.getcell(nx, ny)&lt;br /&gt;
                    if (nz &amp;gt; 0):&lt;br /&gt;
                        allcells.append(nx)&lt;br /&gt;
                        allcells.append(ny)&lt;br /&gt;
                        allcells.append(nz)&lt;br /&gt;
                        g.setcell(nx, ny, 0)&lt;br /&gt;
                        ll += 3&lt;br /&gt;
&lt;br /&gt;
        return livecells&lt;br /&gt;
&lt;br /&gt;
    # Command to Grab, Remove and IDentify an OBJect:&lt;br /&gt;
    def gridobj(self, ix, iy, gsize, gspacing, pos):&lt;br /&gt;
&lt;br /&gt;
        allcells = [ix, iy, g.getcell(ix, iy)]&lt;br /&gt;
        g.setcell(ix, iy, 0)&lt;br /&gt;
        livecells = []&lt;br /&gt;
        deadcells = []&lt;br /&gt;
&lt;br /&gt;
        # This tacitly assumes the object is smaller than 1000-by-1000.&lt;br /&gt;
        # But this is okay, since it is only used by the routing logic.&lt;br /&gt;
        dleft = ix + 1000&lt;br /&gt;
        dright = ix - 1000&lt;br /&gt;
        dtop = iy + 1000&lt;br /&gt;
        dbottom = iy - 1000&lt;br /&gt;
&lt;br /&gt;
        lleft = ix + 1000&lt;br /&gt;
        lright = ix - 1000&lt;br /&gt;
        ltop = iy + 1000&lt;br /&gt;
        lbottom = iy - 1000&lt;br /&gt;
&lt;br /&gt;
        lpop = 0&lt;br /&gt;
        dpop = 0&lt;br /&gt;
&lt;br /&gt;
        marker = 0&lt;br /&gt;
        ll = 3&lt;br /&gt;
&lt;br /&gt;
        while (marker &amp;lt; ll):&lt;br /&gt;
            x = allcells[marker]&lt;br /&gt;
            y = allcells[marker+1]&lt;br /&gt;
            z = allcells[marker+2]&lt;br /&gt;
            marker += 3&lt;br /&gt;
&lt;br /&gt;
            if ((z % 2) == 1):&lt;br /&gt;
                livecells.append(x)&lt;br /&gt;
                livecells.append(y)&lt;br /&gt;
                lleft = min(lleft, x)&lt;br /&gt;
                lright = max(lright, x)&lt;br /&gt;
                ltop = min(ltop, y)&lt;br /&gt;
                lbottom = max(lbottom, y)&lt;br /&gt;
                lpop += 1&lt;br /&gt;
            else:&lt;br /&gt;
                deadcells.append(x)&lt;br /&gt;
                deadcells.append(y)&lt;br /&gt;
                dleft = min(dleft, x)&lt;br /&gt;
                dright = max(dright, x)&lt;br /&gt;
                dtop = min(dtop, y)&lt;br /&gt;
                dbottom = max(dbottom, y)&lt;br /&gt;
                dpop += 1&lt;br /&gt;
&lt;br /&gt;
            for nx in xrange(x - 1, x + 2):&lt;br /&gt;
                for ny in xrange(y - 1, y + 2):&lt;br /&gt;
&lt;br /&gt;
                    nz = g.getcell(nx, ny)&lt;br /&gt;
                    if (nz &amp;gt; 0):&lt;br /&gt;
                        allcells.append(nx)&lt;br /&gt;
                        allcells.append(ny)&lt;br /&gt;
                        allcells.append(nz)&lt;br /&gt;
                        g.setcell(nx, ny, 0)&lt;br /&gt;
                        ll += 3&lt;br /&gt;
&lt;br /&gt;
        lwidth = max(0, 1 + lright - lleft)&lt;br /&gt;
        lheight = max(0, 1 + lbottom - ltop)&lt;br /&gt;
        dwidth = max(0, 1 + dright - dleft)&lt;br /&gt;
        dheight = max(0, 1 + dbottom - dtop)&lt;br /&gt;
&lt;br /&gt;
        llength = max(lwidth, lheight)&lt;br /&gt;
        lbreadth = min(lwidth, lheight)&lt;br /&gt;
        dlength = max(dwidth, dheight)&lt;br /&gt;
        dbreadth = min(dwidth, dheight)&lt;br /&gt;
&lt;br /&gt;
        self.gridsize = max(self.gridsize, llength)&lt;br /&gt;
&lt;br /&gt;
        objid = &amp;quot;unidentified&amp;quot;&lt;br /&gt;
        bitstring = 0&lt;br /&gt;
&lt;br /&gt;
        if (lpop == 0):&lt;br /&gt;
            objid = &amp;quot;nothing&amp;quot;&lt;br /&gt;
        else:&lt;br /&gt;
            if ((lwidth &amp;lt;= 7) &amp;amp; (lheight &amp;lt;= 7)):&lt;br /&gt;
                for i in xrange(0, lpop*2, 2):&lt;br /&gt;
                    bitstring += (1 &amp;lt;&amp;lt; ((livecells[i] - lleft) + 7*(livecells[i + 1] - ltop)))&lt;br /&gt;
&lt;br /&gt;
                if bitstring in self.cache:&lt;br /&gt;
                    objid = self.cache[bitstring]&lt;br /&gt;
&lt;br /&gt;
        if (objid == &amp;quot;unidentified&amp;quot;):&lt;br /&gt;
            # This has passed through the routing logic without being identified,&lt;br /&gt;
            # so save it in a temporary list for later identification:&lt;br /&gt;
            self.unids.append(bitstring)&lt;br /&gt;
            self.unids.append(livecells)&lt;br /&gt;
            self.unids.append(lleft)&lt;br /&gt;
            self.unids.append(ltop)&lt;br /&gt;
        elif (objid != &amp;quot;nothing&amp;quot;):&lt;br /&gt;
            # The object is non-empty, so add it to the census:&lt;br /&gt;
            ux = int(0.5 + float(lleft)/float(gspacing))&lt;br /&gt;
            uy = int(0.5 + float(ltop)/float(gspacing))&lt;br /&gt;
            soupid = ux + (uy * gsize) + pos&lt;br /&gt;
&lt;br /&gt;
            # Check whether the cached object is in the set of decompositions&lt;br /&gt;
            # (this is usually the case, unless for example it is a high-period&lt;br /&gt;
            # albeit small spaceship):&lt;br /&gt;
            if objid in self.decompositions:            &lt;br /&gt;
                for comp in self.decompositions[objid]:&lt;br /&gt;
                    self.incobject(comp, 1)&lt;br /&gt;
                    self.awardpoints2(soupid, comp)&lt;br /&gt;
            else:&lt;br /&gt;
                self.incobject(objid, 1)&lt;br /&gt;
                self.awardpoints2(soupid, objid)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # Tests for population periodicity:&lt;br /&gt;
    def naivestab(self, period, security, length):&lt;br /&gt;
&lt;br /&gt;
        depth = 0&lt;br /&gt;
        prevpop = 0&lt;br /&gt;
        for i in xrange(length):&lt;br /&gt;
            g.run(period)&lt;br /&gt;
            currpop = int(g.getpop())&lt;br /&gt;
            if (currpop == prevpop):&lt;br /&gt;
                depth += 1&lt;br /&gt;
            else:&lt;br /&gt;
                depth = 0&lt;br /&gt;
            prevpop = currpop&lt;br /&gt;
            if (depth == security):&lt;br /&gt;
                # Population is periodic.&lt;br /&gt;
                return True&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # This should catch most short-lived soups with few gliders produced:&lt;br /&gt;
    def naivestab2(self, period, length):&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(length):&lt;br /&gt;
            r = g.getrect()&lt;br /&gt;
            if (len(r) == 0):&lt;br /&gt;
                return True&lt;br /&gt;
            pop0 = int(g.getpop())&lt;br /&gt;
            g.run(period)&lt;br /&gt;
            hash1 = g.hash(r)&lt;br /&gt;
            pop1 = int(g.getpop())&lt;br /&gt;
            g.run(period)&lt;br /&gt;
            hash2 = g.hash(r)&lt;br /&gt;
            pop2 = int(g.getpop())&lt;br /&gt;
&lt;br /&gt;
            if ((hash1 == hash2) &amp;amp; (pop0 == pop1) &amp;amp; (pop1 == pop2)):&lt;br /&gt;
&lt;br /&gt;
                if (g.getrect() == r):&lt;br /&gt;
                    return True&lt;br /&gt;
                &lt;br /&gt;
                g.run((2*int(max(r[2], r[3])/period)+1)*period)&lt;br /&gt;
                hash3 = g.hash(r)&lt;br /&gt;
                pop3 = int(g.getpop())&lt;br /&gt;
                if ((hash2 == hash3) &amp;amp; (pop2 == pop3)):&lt;br /&gt;
                    return True&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
            &lt;br /&gt;
    # Runs a pattern until stabilisation with a 99.99996% success rate.&lt;br /&gt;
    # False positives are handled by a later error-correction stage.&lt;br /&gt;
    def stabilise3(self):&lt;br /&gt;
&lt;br /&gt;
        # Phase I of stabilisation detection, designed to weed out patterns&lt;br /&gt;
        # that stabilise into a cluster of low-period oscillators within&lt;br /&gt;
        # about 6000 generations.&lt;br /&gt;
&lt;br /&gt;
        if (self.naivestab2(12, 10)):&lt;br /&gt;
            return 4;&lt;br /&gt;
&lt;br /&gt;
        if (self.naivestab(12, 30, 200)):&lt;br /&gt;
            return 4;&lt;br /&gt;
&lt;br /&gt;
        if (self.naivestab(30, 30, 200)):&lt;br /&gt;
            return 5;&lt;br /&gt;
&lt;br /&gt;
        # Phase II of stabilisation detection, which is much more rigorous&lt;br /&gt;
        # and based on oscar.py.&lt;br /&gt;
&lt;br /&gt;
        # Should be sufficient:&lt;br /&gt;
        prect = [-2000, -2000, 4000, 4000]&lt;br /&gt;
&lt;br /&gt;
        # initialize lists&lt;br /&gt;
        hashlist = []        # for pattern hash values&lt;br /&gt;
        genlist = []         # corresponding generation counts&lt;br /&gt;
&lt;br /&gt;
        for j in xrange(4000):&lt;br /&gt;
&lt;br /&gt;
            g.run(30)&lt;br /&gt;
&lt;br /&gt;
            h = g.hash(prect)&lt;br /&gt;
&lt;br /&gt;
            # determine where to insert h into hashlist&lt;br /&gt;
            pos = 0&lt;br /&gt;
            listlen = len(hashlist)&lt;br /&gt;
            while pos &amp;lt; listlen:&lt;br /&gt;
                if h &amp;gt; hashlist[pos]:&lt;br /&gt;
                    pos += 1&lt;br /&gt;
                elif h &amp;lt; hashlist[pos]:&lt;br /&gt;
                    # shorten lists and append info below&lt;br /&gt;
                    del hashlist[pos : listlen]&lt;br /&gt;
                    del genlist[pos : listlen]&lt;br /&gt;
                    break&lt;br /&gt;
                else:&lt;br /&gt;
                    period = (int(g.getgen()) - genlist[pos])&lt;br /&gt;
&lt;br /&gt;
                    prevpop = g.getpop()&lt;br /&gt;
&lt;br /&gt;
                    for i in xrange(20):&lt;br /&gt;
                        g.run(period)&lt;br /&gt;
                        currpop = g.getpop()&lt;br /&gt;
                        if (currpop != prevpop):&lt;br /&gt;
                            period = max(period, 4000)&lt;br /&gt;
                            break&lt;br /&gt;
                        prevpop = currpop&lt;br /&gt;
                        &lt;br /&gt;
                    return max(1 + int(math.log(period, 2)),3)&lt;br /&gt;
&lt;br /&gt;
            hashlist.insert(pos, h)&lt;br /&gt;
            genlist.insert(pos, int(g.getgen()))&lt;br /&gt;
&lt;br /&gt;
        g.setalgo(&amp;quot;HashLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
        g.setbase(2)&lt;br /&gt;
        g.setstep(16)&lt;br /&gt;
        g.step()&lt;br /&gt;
        stepsize = 12&lt;br /&gt;
        g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
&lt;br /&gt;
        return 12&lt;br /&gt;
&lt;br /&gt;
    # Differs from oscar.py in that it detects absolute cycles, not eventual cycles.&lt;br /&gt;
    def bijoscar(self, maxsteps):&lt;br /&gt;
&lt;br /&gt;
        initpop = int(g.getpop())&lt;br /&gt;
        initrect = g.getrect()&lt;br /&gt;
        if (len(initrect) == 0):&lt;br /&gt;
            return 0&lt;br /&gt;
        inithash = g.hash(initrect)&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(maxsteps):&lt;br /&gt;
&lt;br /&gt;
            g.run(1)&lt;br /&gt;
&lt;br /&gt;
            if (int(g.getpop()) == initpop):&lt;br /&gt;
&lt;br /&gt;
                prect = g.getrect()&lt;br /&gt;
                phash = g.hash(prect)&lt;br /&gt;
&lt;br /&gt;
                if (phash == inithash):&lt;br /&gt;
&lt;br /&gt;
                    period = i + 1&lt;br /&gt;
&lt;br /&gt;
                    if (prect == initrect):&lt;br /&gt;
                        return period&lt;br /&gt;
                    else:&lt;br /&gt;
                        return -period&lt;br /&gt;
        return -1&lt;br /&gt;
&lt;br /&gt;
    # For a non-moving unidentified object, we check the dictionary of&lt;br /&gt;
    # memoized decompositions of possibly-pseudo-objects. If the object is&lt;br /&gt;
    # not already in the dictionary, it will be memoized.&lt;br /&gt;
    #&lt;br /&gt;
    # Low-period spaceships are also separated by this routine, although&lt;br /&gt;
    # this is less important now that there is a more bespoke prodecure&lt;br /&gt;
    # to handle disjoint unions of standard spaceships.&lt;br /&gt;
    #&lt;br /&gt;
    # @param moving  a bool which specifies whether the object is moving&lt;br /&gt;
    def enter_unid(self, unidname, soupid, moving):&lt;br /&gt;
&lt;br /&gt;
        if not(unidname in self.decompositions):&lt;br /&gt;
&lt;br /&gt;
            # Separate into pure components:&lt;br /&gt;
            if (moving):&lt;br /&gt;
                g.setrule(&amp;quot;APG_CoalesceObjects_&amp;quot; + self.rg.alphanumeric)&lt;br /&gt;
                g.setbase(2)&lt;br /&gt;
                g.setstep(3)&lt;br /&gt;
                g.step()&lt;br /&gt;
            else:&lt;br /&gt;
                pseudo_bangbang(self.rg.alphanumeric)&lt;br /&gt;
&lt;br /&gt;
            listoflists = [] # which incidentally don&#039;t contain themselves.&lt;br /&gt;
&lt;br /&gt;
            # Someone who plays the celllo:&lt;br /&gt;
            celllist = g.join(g.getcells(g.getrect()), [0])&lt;br /&gt;
&lt;br /&gt;
            for i in xrange(0, len(celllist)-1, 3):&lt;br /&gt;
                if (g.getcell(celllist[i], celllist[i+1]) != 0):&lt;br /&gt;
                    livecells = self.grabobj(celllist[i], celllist[i+1])&lt;br /&gt;
                    if (len(livecells) &amp;gt; 0):&lt;br /&gt;
                        listoflists.append(livecells)&lt;br /&gt;
&lt;br /&gt;
            listofobjs = []&lt;br /&gt;
&lt;br /&gt;
            for livecells in listoflists:&lt;br /&gt;
&lt;br /&gt;
                g.new(&amp;quot;Subcomponent&amp;quot;)&lt;br /&gt;
                g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
                g.setrule(self.rg.slashed)&lt;br /&gt;
                g.putcells(livecells)&lt;br /&gt;
                period = self.bijoscar(1000)&lt;br /&gt;
                canonised = canonise(abs(period))&lt;br /&gt;
                if (period &amp;lt; 0):&lt;br /&gt;
                    listofobjs.append(&amp;quot;xq&amp;quot;+str(0-period)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
                elif (period == 1):&lt;br /&gt;
                    listofobjs.append(&amp;quot;xs&amp;quot;+str(len(livecells)/2)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
                else:&lt;br /&gt;
                    listofobjs.append(&amp;quot;xp&amp;quot;+str(period)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
&lt;br /&gt;
            self.decompositions[unidname] = listofobjs&lt;br /&gt;
&lt;br /&gt;
        # Actually add to the census:&lt;br /&gt;
        for comp in self.decompositions[unidname]:&lt;br /&gt;
            self.incobject(comp, 1)&lt;br /&gt;
            self.awardpoints2(soupid, comp)&lt;br /&gt;
&lt;br /&gt;
    # This function has lots of arguments (hence the name):&lt;br /&gt;
    #&lt;br /&gt;
    # @param gsize     the square-root of the number of soups per page&lt;br /&gt;
    # @param gspacing  the minimum distance between centres of soups&lt;br /&gt;
    # @param ashes     a list of cell lists&lt;br /&gt;
    # @param stepsize  binary logarithm of amount of time to coalesce objects&lt;br /&gt;
    # @param intergen  binary logarithm of amount of time to run HashLife&lt;br /&gt;
    # @param pos       the index of the first soup on the page&lt;br /&gt;
    def teenager(self, gsize, gspacing, ashes, stepsize, intergen, pos):&lt;br /&gt;
&lt;br /&gt;
        # For error-correction:&lt;br /&gt;
        if (intergen &amp;gt; 0):&lt;br /&gt;
            g.setalgo(&amp;quot;HashLife&amp;quot;)&lt;br /&gt;
            g.setrule(self.rg.slashed)&lt;br /&gt;
&lt;br /&gt;
        # If this gets incremented, we panic and perform error-correction:&lt;br /&gt;
        pathological = 0&lt;br /&gt;
&lt;br /&gt;
        # Draw the soups:&lt;br /&gt;
        for i in xrange(gsize * gsize):&lt;br /&gt;
&lt;br /&gt;
            x = int(i % gsize)&lt;br /&gt;
            y = int(i / gsize)&lt;br /&gt;
&lt;br /&gt;
            g.putcells(ashes[3*i], gspacing * x, gspacing * y)&lt;br /&gt;
&lt;br /&gt;
        # Because why not?&lt;br /&gt;
        g.fit()&lt;br /&gt;
        g.update()&lt;br /&gt;
&lt;br /&gt;
        # For error-correction:&lt;br /&gt;
        if (intergen &amp;gt; 0):&lt;br /&gt;
            g.setbase(2)&lt;br /&gt;
            g.setstep(intergen)&lt;br /&gt;
            g.step()&lt;br /&gt;
&lt;br /&gt;
        # Apply rules to coalesce objects and expunge annoyances such as&lt;br /&gt;
        # blocks, blinkers, beehives and gliders:&lt;br /&gt;
        start_time = time.clock()&lt;br /&gt;
        self.census(stepsize)&lt;br /&gt;
        end_time = time.clock()&lt;br /&gt;
        self.ruletime += (end_time - start_time)&lt;br /&gt;
&lt;br /&gt;
        # Now begin identifying objects:&lt;br /&gt;
        start_time = time.clock()&lt;br /&gt;
        celllist = g.join(g.getcells(g.getrect()), [0])&lt;br /&gt;
&lt;br /&gt;
        if (len(celllist) &amp;gt; 2):&lt;br /&gt;
            for i in xrange(0, len(celllist)-1, 3):&lt;br /&gt;
                if (g.getcell(celllist[i], celllist[i+1]) != 0):&lt;br /&gt;
                    self.gridobj(celllist[i], celllist[i+1], gsize, gspacing, pos)&lt;br /&gt;
&lt;br /&gt;
        # If we have leftover unidentified objects, attempt to canonise them:&lt;br /&gt;
        while (len(self.unids) &amp;gt; 0):&lt;br /&gt;
            ux = int(0.5 + float(self.unids[-2])/float(gspacing))&lt;br /&gt;
            uy = int(0.5 + float(self.unids[-1])/float(gspacing))&lt;br /&gt;
            soupid = ux + (uy * gsize) + pos&lt;br /&gt;
            unidname = self.process_unid()&lt;br /&gt;
            if (unidname == &amp;quot;PATHOLOGICAL&amp;quot;):&lt;br /&gt;
                pathological += 1&lt;br /&gt;
            if (unidname != &amp;quot;nothing&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
                if ((unidname[0] == &#039;U&#039;) &amp;amp; (unidname[1] == &#039;S&#039;) &amp;amp; (unidname[2] == &#039;S&#039;)):&lt;br /&gt;
                    &lt;br /&gt;
                    # Union of standard spaceships:&lt;br /&gt;
                    countlist = unidname.split(&#039;_&#039;)&lt;br /&gt;
                    &lt;br /&gt;
                    self.incobject(&amp;quot;xq4_6frc&amp;quot;, int(countlist[1]))&lt;br /&gt;
                    for i in xrange(int(countlist[1])):&lt;br /&gt;
                        self.awardpoints2(soupid, &amp;quot;xq4_6frc&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
                    self.incobject(&amp;quot;xq4_27dee6&amp;quot;, int(countlist[2]))&lt;br /&gt;
                    for i in xrange(int(countlist[2])):&lt;br /&gt;
                        self.awardpoints2(soupid, &amp;quot;xq4_27dee6&amp;quot;)&lt;br /&gt;
                        &lt;br /&gt;
                    self.incobject(&amp;quot;xq4_27deee6&amp;quot;, int(countlist[3]))&lt;br /&gt;
                    for i in xrange(int(countlist[3])):&lt;br /&gt;
                        self.awardpoints2(soupid, &amp;quot;xq4_27deee6&amp;quot;)&lt;br /&gt;
                        &lt;br /&gt;
                elif ((unidname[0] == &#039;x&#039;) &amp;amp; ((unidname[1] == &#039;s&#039;) | (unidname[1] == &#039;p&#039;))):&lt;br /&gt;
                    self.enter_unid(unidname, soupid, False)&lt;br /&gt;
                else:&lt;br /&gt;
                    if ((unidname[0] == &#039;x&#039;) &amp;amp; (unidname[1] == &#039;q&#039;) &amp;amp; (unidname[3] == &#039;_&#039;)):&lt;br /&gt;
                        # Separates low-period (&amp;lt;= 9) non-standard spaceships in medium proximity:&lt;br /&gt;
                        self.enter_unid(unidname, soupid, True)&lt;br /&gt;
                    else:&lt;br /&gt;
                        self.incobject(unidname, 1)&lt;br /&gt;
                        self.awardpoints2(soupid, unidname)&lt;br /&gt;
&lt;br /&gt;
        end_time = time.clock()&lt;br /&gt;
        self.gridtime += (end_time - start_time)&lt;br /&gt;
&lt;br /&gt;
        return pathological&lt;br /&gt;
&lt;br /&gt;
    def stabilise_soups_parallel(self, root, pos, gsize, sym):&lt;br /&gt;
&lt;br /&gt;
        souplist = [[sym, root + str(pos + i)] for i in xrange(gsize * gsize)]&lt;br /&gt;
&lt;br /&gt;
        return self.stabilise_soups_parallel_orig(gsize, souplist, pos)&lt;br /&gt;
&lt;br /&gt;
    def stabilise_soups_parallel_list(self, gsize, stringlist, pos):&lt;br /&gt;
&lt;br /&gt;
        souplist = [s.split(&#039;/&#039;) for s in stringlist]&lt;br /&gt;
&lt;br /&gt;
        return self.stabilise_soups_parallel_orig(gsize, souplist, pos)&lt;br /&gt;
&lt;br /&gt;
    # This basically orchestrates everything:&lt;br /&gt;
    def stabilise_soups_parallel_orig(self, gsize, souplist, pos):&lt;br /&gt;
&lt;br /&gt;
        ashes = []&lt;br /&gt;
        stepsize = 3&lt;br /&gt;
&lt;br /&gt;
        g.new(&amp;quot;Random soups&amp;quot;)&lt;br /&gt;
        g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
&lt;br /&gt;
        gspacing = 0&lt;br /&gt;
&lt;br /&gt;
        # Generate and run the soups until stabilisation:&lt;br /&gt;
        for i in xrange(gsize * gsize):&lt;br /&gt;
&lt;br /&gt;
            if (i &amp;lt; len(souplist)):&lt;br /&gt;
&lt;br /&gt;
                sym = souplist[i][0]&lt;br /&gt;
                prehash = souplist[i][1]&lt;br /&gt;
&lt;br /&gt;
                # Generate the soup from the SHA-256 of the concatenation of the&lt;br /&gt;
                # seed with the index:&lt;br /&gt;
                g.putcells(hashsoup(prehash, sym), 0, 0)&lt;br /&gt;
&lt;br /&gt;
            # Run the soup until stabilisation:&lt;br /&gt;
            start_time = time.clock()&lt;br /&gt;
            stepsize = max(stepsize, self.stabilise3())&lt;br /&gt;
            end_time = time.clock()&lt;br /&gt;
            self.qlifetime += (end_time - start_time)&lt;br /&gt;
&lt;br /&gt;
            # Ironically, the spelling of this variable is incurrrect:&lt;br /&gt;
            currrect = g.getrect()&lt;br /&gt;
            ashes.append(g.getcells(currrect))&lt;br /&gt;
&lt;br /&gt;
            if (len(currrect) == 4):&lt;br /&gt;
                ashes.append(currrect[0])&lt;br /&gt;
                ashes.append(currrect[1])&lt;br /&gt;
                # Choose the grid spacing based on the size of the ash:&lt;br /&gt;
                gspacing = max(gspacing, 2*currrect[2])&lt;br /&gt;
                gspacing = max(gspacing, 2*currrect[3])&lt;br /&gt;
                g.select(currrect)&lt;br /&gt;
                g.clear(0)&lt;br /&gt;
            else:&lt;br /&gt;
                ashes.append(0)&lt;br /&gt;
                ashes.append(0)&lt;br /&gt;
            g.select([])&lt;br /&gt;
&lt;br /&gt;
        # Account for any extra enlargement caused by running CoalesceObjects:&lt;br /&gt;
        gspacing += 2 ** (stepsize + 1) + 1000&lt;br /&gt;
&lt;br /&gt;
        start_time = time.clock()&lt;br /&gt;
&lt;br /&gt;
        # Remember the dictionary, just in case we have a pathological object:&lt;br /&gt;
        prevdict = self.objectcounts.copy()&lt;br /&gt;
        prevscores = self.soupscores.copy()&lt;br /&gt;
        prevunids = self.superunids[:]&lt;br /&gt;
&lt;br /&gt;
        # Process the soups:&lt;br /&gt;
        returncode = self.teenager(gsize, gspacing, ashes, stepsize, 0, pos)&lt;br /&gt;
&lt;br /&gt;
        end_time = time.clock()&lt;br /&gt;
&lt;br /&gt;
        # Calculate the mean delay incurred (excluding qlifetime or error-correction):&lt;br /&gt;
        meandelay = (end_time - start_time) / (gsize * gsize)&lt;br /&gt;
&lt;br /&gt;
        if (returncode &amp;gt; 0):&lt;br /&gt;
            if (self.skipErrorCorrection == False):&lt;br /&gt;
                # Arrrggghhhh, there&#039;s a pathological object! Usually this means&lt;br /&gt;
                # that naive stabilisation detection returned a false positive.&lt;br /&gt;
                self.resets += 1&lt;br /&gt;
                &lt;br /&gt;
                # Reset the object counts:&lt;br /&gt;
                self.objectcounts = prevdict&lt;br /&gt;
                self.soupscores = prevscores&lt;br /&gt;
                self.superunids = prevunids&lt;br /&gt;
&lt;br /&gt;
                # 2^18 generations should suffice. This takes about 30 seconds in&lt;br /&gt;
                # HashLife, but error-correction only occurs very infrequently, so&lt;br /&gt;
                # this has a negligible impact on mean performance:&lt;br /&gt;
                gspacing += 2 ** 19&lt;br /&gt;
                stepsize = max(stepsize, 12)&lt;br /&gt;
                &lt;br /&gt;
                # Clear the universe:&lt;br /&gt;
                g.new(&amp;quot;Error-correcting phase&amp;quot;)&lt;br /&gt;
                self.teenager(gsize, gspacing, ashes, stepsize, 18, pos)&lt;br /&gt;
&lt;br /&gt;
        # Erase any ashes. Not least because England usually loses...&lt;br /&gt;
        ashes = []&lt;br /&gt;
&lt;br /&gt;
        # Return the mean delay so that we can use machine-learning to&lt;br /&gt;
        # find the optimal value of sqrtspp:&lt;br /&gt;
        return meandelay&lt;br /&gt;
&lt;br /&gt;
    def reset(self):&lt;br /&gt;
&lt;br /&gt;
        self.objectcounts = {}&lt;br /&gt;
        self.soupscores = {}&lt;br /&gt;
        self.alloccur = {}&lt;br /&gt;
        self.superunids = []&lt;br /&gt;
        self.unids = []&lt;br /&gt;
&lt;br /&gt;
    # Pop the last unidentified object from the stack, and attempt to&lt;br /&gt;
    # ascertain its period and classify it.&lt;br /&gt;
    def process_unid(self):&lt;br /&gt;
&lt;br /&gt;
        g.new(&amp;quot;Unidentified object&amp;quot;)&lt;br /&gt;
        g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
        y = self.unids.pop()&lt;br /&gt;
        x = self.unids.pop()&lt;br /&gt;
        livecells = self.unids.pop()&lt;br /&gt;
        bitstring = self.unids.pop()&lt;br /&gt;
        g.putcells(livecells, -x, -y, 1, 0, 0, 1, &amp;quot;or&amp;quot;)&lt;br /&gt;
        period = self.bijoscar(1000)&lt;br /&gt;
        &lt;br /&gt;
        if (period == -1):&lt;br /&gt;
            # Infinite growth pattern, probably. Most infinite-growth&lt;br /&gt;
            # patterns are linear-growth (such as puffers, wickstretchers,&lt;br /&gt;
            # guns etc.) so we analyse to see whether we have a linear-&lt;br /&gt;
            # growth pattern:&lt;br /&gt;
            descriptor = linearlyse(1500)&lt;br /&gt;
            if (descriptor[0] == &amp;quot;y&amp;quot;):&lt;br /&gt;
                return descriptor&lt;br /&gt;
&lt;br /&gt;
            # Similarly check for irregular power-law growth. This will&lt;br /&gt;
            # catch replicators, for instance. Spend around 375 000&lt;br /&gt;
            # generations; this seems like a reasonable amount of time.&lt;br /&gt;
            descriptor = powerlyse(8, 1500)&lt;br /&gt;
            if (descriptor[0] == &amp;quot;z&amp;quot;):&lt;br /&gt;
                return descriptor&lt;br /&gt;
&lt;br /&gt;
            # It may be an unstabilised ember that slipped through the net,&lt;br /&gt;
            # but this will be handled by error-correction (unless it&lt;br /&gt;
            # persists another 2^18 gens, which is so unbelievably improbable&lt;br /&gt;
            # that you are more likely to be picked up by a passing ship in&lt;br /&gt;
            # the vacuum of space).&lt;br /&gt;
            self.superunids.append(livecells)&lt;br /&gt;
            self.superunids.append(x)&lt;br /&gt;
            self.superunids.append(y)&lt;br /&gt;
            &lt;br /&gt;
            return &amp;quot;PATHOLOGICAL&amp;quot;&lt;br /&gt;
        elif (period == 0):&lt;br /&gt;
            return &amp;quot;nothing&amp;quot;&lt;br /&gt;
        else:&lt;br /&gt;
            if (period == -4):&lt;br /&gt;
&lt;br /&gt;
                triple = countxwsses()&lt;br /&gt;
&lt;br /&gt;
                if (triple != (-1, -1, -1)):&lt;br /&gt;
&lt;br /&gt;
                    # Union of Standard Spaceships:&lt;br /&gt;
                    return (&amp;quot;USS_&amp;quot; + str(triple[0]) + &amp;quot;_&amp;quot; + str(triple[1]) + &amp;quot;_&amp;quot; + str(triple[2]))&lt;br /&gt;
&lt;br /&gt;
            &lt;br /&gt;
            canonised = canonise(abs(period))&lt;br /&gt;
&lt;br /&gt;
            if (canonised == &amp;quot;#&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
                # Okay, we know that it&#039;s an oscillator or spaceship with&lt;br /&gt;
                # a non-astronomical period. But it&#039;s too large to canonise&lt;br /&gt;
                # in any of its phases (i.e. transcends a 40-by-40 box).&lt;br /&gt;
                self.superunids.append(livecells)&lt;br /&gt;
                self.superunids.append(x)&lt;br /&gt;
                self.superunids.append(y)&lt;br /&gt;
                &lt;br /&gt;
                # Append a suffix according to whether it is a still-life,&lt;br /&gt;
                # oscillator or moving object:&lt;br /&gt;
                if (period == 1):&lt;br /&gt;
                    descriptor = (&amp;quot;ov_s&amp;quot;+str(len(livecells)/2))&lt;br /&gt;
                elif (period &amp;gt; 0):&lt;br /&gt;
                    descriptor = (&amp;quot;ov_p&amp;quot;+str(period))&lt;br /&gt;
                else:&lt;br /&gt;
                    descriptor = (&amp;quot;ov_q&amp;quot;+str(0-period))&lt;br /&gt;
&lt;br /&gt;
                return descriptor&lt;br /&gt;
            &lt;br /&gt;
            else:&lt;br /&gt;
&lt;br /&gt;
                # Prepend a prefix according to whether it is a still-life,&lt;br /&gt;
                # oscillator or moving object:&lt;br /&gt;
                if (period == 1):&lt;br /&gt;
                    descriptor = (&amp;quot;xs&amp;quot;+str(len(livecells)/2)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
                elif (period &amp;gt; 0):&lt;br /&gt;
                    descriptor = (&amp;quot;xp&amp;quot;+str(period)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
                else:&lt;br /&gt;
                    descriptor = (&amp;quot;xq&amp;quot;+str(0-period)+&amp;quot;_&amp;quot;+canonised)&lt;br /&gt;
&lt;br /&gt;
                if (bitstring &amp;gt; 0):&lt;br /&gt;
                    self.cache[bitstring] = descriptor&lt;br /&gt;
&lt;br /&gt;
                return descriptor&lt;br /&gt;
&lt;br /&gt;
    # This doesn&#039;t really do much, since unids should be empty and&lt;br /&gt;
    # actual pathological/oversized objects will rarely arise naturally.&lt;br /&gt;
    def display_unids(self):&lt;br /&gt;
&lt;br /&gt;
        g.new(&amp;quot;Unidentified objects&amp;quot;)&lt;br /&gt;
        g.setalgo(&amp;quot;QuickLife&amp;quot;)&lt;br /&gt;
        g.setrule(self.rg.slashed)&lt;br /&gt;
&lt;br /&gt;
        rowlength = 1 + int(math.sqrt(len(self.superunids)/3))&lt;br /&gt;
&lt;br /&gt;
        for i in xrange(len(self.superunids)/3):&lt;br /&gt;
&lt;br /&gt;
            xpos = i % rowlength&lt;br /&gt;
            ypos = int(i / rowlength)&lt;br /&gt;
&lt;br /&gt;
            g.putcells(self.superunids[3*i], xpos * (self.gridsize + 8) - self.superunids[3*i + 1], ypos * (self.gridsize + 8) - self.superunids[3*i + 2], 1, 0, 0, 1, &amp;quot;or&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        g.fit()&lt;br /&gt;
        g.update()&lt;br /&gt;
&lt;br /&gt;
    def compactify_scores(self):&lt;br /&gt;
&lt;br /&gt;
        # Number of soups to record:&lt;br /&gt;
        highscores = 100&lt;br /&gt;
        ilist = sorted(self.soupscores.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
&lt;br /&gt;
        # Empty the high score table:&lt;br /&gt;
        self.soupscores = {}&lt;br /&gt;
        &lt;br /&gt;
        for soupnum, score in ilist[:highscores]:&lt;br /&gt;
            self.soupscores[soupnum] = score&lt;br /&gt;
&lt;br /&gt;
    # Saves a machine-readable textual file containing the census:&lt;br /&gt;
    def save_progress(self, numsoups, root, symmetry=&#039;C1&#039;, save_file=True, payosha256_key=None):&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Saving progress...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Count the total number of objects:&lt;br /&gt;
        totobjs = 0&lt;br /&gt;
        censustable = &amp;quot;@CENSUS TABLE\n&amp;quot;&lt;br /&gt;
        tlist = sorted(self.objectcounts.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
        for objname, count in tlist:&lt;br /&gt;
            totobjs += count&lt;br /&gt;
            censustable += objname + &amp;quot; &amp;quot; + str(count) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Writing header information...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # The MD5 hash of the root string:&lt;br /&gt;
        md5root = hashlib.md5(root).hexdigest()&lt;br /&gt;
&lt;br /&gt;
        # Header information:&lt;br /&gt;
        results = &amp;quot;@VERSION v1.1\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@MD5 &amp;quot;+md5root+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@ROOT &amp;quot;+root+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@RULE &amp;quot;+self.rg.alphanumeric+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@SYMMETRY &amp;quot;+symmetry+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@NUM_SOUPS &amp;quot;+str(numsoups)+&amp;quot;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;@NUM_OBJECTS &amp;quot;+str(totobjs)+&amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        results += &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Census table:&lt;br /&gt;
        results += censustable&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Compactifying score table...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        results += &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Number of soups to record:&lt;br /&gt;
        highscores = 100&lt;br /&gt;
&lt;br /&gt;
        results += &amp;quot;@TOP &amp;quot;+str(highscores)+&amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        ilist = sorted(self.soupscores.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
&lt;br /&gt;
        # Empty the high score table:&lt;br /&gt;
        self.soupscores = {}&lt;br /&gt;
        &lt;br /&gt;
        for soupnum, score in ilist[:highscores]:&lt;br /&gt;
            self.soupscores[soupnum] = score&lt;br /&gt;
            results += str(soupnum) + &amp;quot; &amp;quot; + str(score) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Saving soupids for rare objects...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        results += &amp;quot;\n@SAMPLE_SOUPIDS\n&amp;quot;&lt;br /&gt;
        for objname, count in tlist:&lt;br /&gt;
            # blinkers and gliders have no alloccur[] entry for some reason,&lt;br /&gt;
            # so the line below avoids errors in B3/S23, maybe other rules too?&lt;br /&gt;
            if objname in self.alloccur:&lt;br /&gt;
                results += objname&lt;br /&gt;
                for soup in self.alloccur[objname]:&lt;br /&gt;
                    results += &amp;quot; &amp;quot; + str(soup)&lt;br /&gt;
                results += &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        g.show(&amp;quot;Writing progress file...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        dirname = g.getdir(&amp;quot;data&amp;quot;)&lt;br /&gt;
        separator = dirname[-1]&lt;br /&gt;
        progresspath = dirname + &amp;quot;apgsearch&amp;quot; + separator + &amp;quot;progress&amp;quot; + separator&lt;br /&gt;
        if not os.path.exists(progresspath):&lt;br /&gt;
            os.makedirs(progresspath)&lt;br /&gt;
&lt;br /&gt;
        filename = progresspath + &amp;quot;search_&amp;quot; + md5root + &amp;quot;.txt&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        try:&lt;br /&gt;
            f = open(filename, &#039;w&#039;)&lt;br /&gt;
            f.write(results)&lt;br /&gt;
            f.close()&lt;br /&gt;
        except:&lt;br /&gt;
            g.warn(&amp;quot;Unable to create progress file:\n&amp;quot; + filename)&lt;br /&gt;
&lt;br /&gt;
        if payosha256_key is not None:&lt;br /&gt;
            if (len(payosha256_key) &amp;gt; 0):&lt;br /&gt;
                return catagolue_results(results, payosha256_key, &amp;quot;post_apgsearch_haul&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Save soup RLE:&lt;br /&gt;
    def save_soup(self, root, soupnum, symmetry):&lt;br /&gt;
&lt;br /&gt;
        # Soup pattern will be stored in a temporary directory:&lt;br /&gt;
        souphash = hashlib.sha256(root + str(soupnum))&lt;br /&gt;
        rlepath = souphash.hexdigest()&lt;br /&gt;
        rlepath = g.getdir(&amp;quot;temp&amp;quot;) + rlepath + &amp;quot;.rle&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        results = &amp;quot;&amp;lt;a href=\&amp;quot;open:&amp;quot; + rlepath + &amp;quot;\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        results += str(soupnum)&lt;br /&gt;
        results += &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Try to write soup patterns to file &amp;quot;rlepath&amp;quot;:&lt;br /&gt;
        try:&lt;br /&gt;
            g.store(hashsoup(root + str(soupnum), symmetry), rlepath)&lt;br /&gt;
        except:&lt;br /&gt;
            g.warn(&amp;quot;Unable to create soup pattern:\n&amp;quot; + rlepath)&lt;br /&gt;
&lt;br /&gt;
        return results&lt;br /&gt;
        &lt;br /&gt;
    # Display results in Help window:&lt;br /&gt;
    def display_census(self, numsoups, root, symmetry):&lt;br /&gt;
&lt;br /&gt;
        dirname = g.getdir(&amp;quot;data&amp;quot;)&lt;br /&gt;
        separator = dirname[-1]&lt;br /&gt;
        apgpath = dirname + &amp;quot;apgsearch&amp;quot; + separator&lt;br /&gt;
        objectspath = apgpath + &amp;quot;objects&amp;quot; + separator + self.rg.alphanumeric + separator&lt;br /&gt;
        if not os.path.exists(objectspath):&lt;br /&gt;
            os.makedirs(objectspath)&lt;br /&gt;
&lt;br /&gt;
        results = &amp;quot;&amp;lt;html&amp;gt;\n&amp;lt;title&amp;gt;Census results&amp;lt;/title&amp;gt;\n&amp;lt;body bgcolor=\&amp;quot;#FFFFCE\&amp;quot;&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;p&amp;gt;Census results after processing &amp;quot; + str(numsoups) + &amp;quot; soups (seed = &amp;quot; + root + &amp;quot;, symmetry = &amp;quot; + symmetry + &amp;quot;):\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        tlist = sorted(self.objectcounts.iteritems(), key=operator.itemgetter(1), reverse=True)    &lt;br /&gt;
        results += &amp;quot;&amp;lt;p&amp;gt;&amp;lt;center&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;table cellspacing=1 border=2 cols=2&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; Object &amp;lt;/td&amp;gt;&amp;lt;td align=center&amp;gt; Common name &amp;lt;/td&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;td align=right&amp;gt; Count &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; Sample occurrences &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
        for objname, count in tlist:&lt;br /&gt;
            if (objname[0] == &#039;x&#039;):&lt;br /&gt;
                if (objname[1] == &#039;p&#039;):&lt;br /&gt;
                    results += &amp;quot;&amp;lt;tr bgcolor=\&amp;quot;#CECECF\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
                elif (objname[1] == &#039;q&#039;):&lt;br /&gt;
                    results += &amp;quot;&amp;lt;tr bgcolor=\&amp;quot;#CEFFCE\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
                else:&lt;br /&gt;
                    results += &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;&lt;br /&gt;
            else:&lt;br /&gt;
                results += &amp;quot;&amp;lt;tr bgcolor=\&amp;quot;#FFCECE\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
            results += &amp;quot;&amp;lt;td&amp;gt;&amp;quot;&lt;br /&gt;
            results += &amp;quot; &amp;quot;&lt;br /&gt;
            &lt;br /&gt;
            # Using &amp;quot;open:&amp;quot; link enables one to click on the object name to open the pattern in Golly:&lt;br /&gt;
            rlepath = objectspath + objname + &amp;quot;.rle&amp;quot;&lt;br /&gt;
            if (objname[0] == &#039;x&#039;):&lt;br /&gt;
                results += &amp;quot;&amp;lt;a href=\&amp;quot;open:&amp;quot; + rlepath + &amp;quot;\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
            # If the name is longer than that of the block-laying switch engine:&lt;br /&gt;
            if len(objname) &amp;gt; 51:&lt;br /&gt;
                # Contract name and include ellipsis:&lt;br /&gt;
                results += objname[:40] + &amp;quot;…&amp;quot; + objname[-10:]&lt;br /&gt;
            else:&lt;br /&gt;
                results += objname&lt;br /&gt;
            if (objname[0] == &#039;x&#039;):&lt;br /&gt;
                results += &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;&lt;br /&gt;
            results += &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
            if (objname[0] == &#039;x&#039;):&lt;br /&gt;
                # save object in rlepath if it doesn&#039;t exist&lt;br /&gt;
                if not os.path.exists(rlepath):&lt;br /&gt;
                    # Canonised objects are at most 40-by-40:&lt;br /&gt;
                    rledata = &amp;quot;x = 40, y = 40, rule = &amp;quot; + self.rg.slashed + &amp;quot;\n&amp;quot;&lt;br /&gt;
                    # http://ferkeltongs.livejournal.com/15837.html&lt;br /&gt;
                    compact = objname.split(&#039;_&#039;)[1] + &amp;quot;z&amp;quot;&lt;br /&gt;
                    i = 0&lt;br /&gt;
                    strip = []&lt;br /&gt;
                    while (i &amp;lt; len(compact)):&lt;br /&gt;
                        c = ord2(compact[i])&lt;br /&gt;
                        if (c &amp;gt;= 0):&lt;br /&gt;
                            if (c &amp;lt; 32):&lt;br /&gt;
                                # Conventional character:&lt;br /&gt;
                                strip.append(c)&lt;br /&gt;
                            else:&lt;br /&gt;
                                if (c == 35):&lt;br /&gt;
                                    # End of line:&lt;br /&gt;
                                    if (len(strip) == 0):&lt;br /&gt;
                                        strip.append(0)&lt;br /&gt;
                                    for j in xrange(5):&lt;br /&gt;
                                        for d in strip:&lt;br /&gt;
                                            if ((d &amp;amp; (1 &amp;lt;&amp;lt; j)) &amp;gt; 0):&lt;br /&gt;
                                                rledata += &amp;quot;o&amp;quot;&lt;br /&gt;
                                            else:&lt;br /&gt;
                                                rledata += &amp;quot;b&amp;quot;&lt;br /&gt;
                                        rledata += &amp;quot;$\n&amp;quot;&lt;br /&gt;
                                    strip = []&lt;br /&gt;
                                else:&lt;br /&gt;
                                    # Multispace character:&lt;br /&gt;
                                    strip.append(0)&lt;br /&gt;
                                    strip.append(0)&lt;br /&gt;
                                    if (c &amp;gt;= 33):&lt;br /&gt;
                                        strip.append(0)&lt;br /&gt;
                                    if (c == 34):&lt;br /&gt;
                                        strip.append(0)&lt;br /&gt;
                                        i += 1&lt;br /&gt;
                                        d = ord2(compact[i])&lt;br /&gt;
                                        for j in xrange(d):&lt;br /&gt;
                                            strip.append(0)&lt;br /&gt;
                        i += 1&lt;br /&gt;
                    # End of pattern representation:&lt;br /&gt;
                    rledata += &amp;quot;!\n&amp;quot;&lt;br /&gt;
                    try:&lt;br /&gt;
                        f = open(rlepath, &#039;w&#039;)&lt;br /&gt;
                        f.write(rledata)&lt;br /&gt;
                        f.close()&lt;br /&gt;
                    except:&lt;br /&gt;
                        g.warn(&amp;quot;Unable to create object pattern:\n&amp;quot; + rlepath)&lt;br /&gt;
            &lt;br /&gt;
            results += &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td align=center&amp;gt; &amp;quot;&lt;br /&gt;
            if (objname in self.commonnames):&lt;br /&gt;
                results += self.commonnames[objname][0]&lt;br /&gt;
            results += &amp;quot; &amp;lt;/td&amp;gt;&amp;lt;td align=right&amp;gt; &amp;quot; + str(count) + &amp;quot; &amp;quot;&lt;br /&gt;
            results += &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;&lt;br /&gt;
            if objname in self.alloccur:&lt;br /&gt;
                results += &amp;quot; &amp;quot;&lt;br /&gt;
                for soup in self.alloccur[objname]:&lt;br /&gt;
                    results += self.save_soup(root, soup, symmetry) &lt;br /&gt;
                    results += &amp;quot; &amp;quot;&lt;br /&gt;
            results += &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;/table&amp;gt;\n&amp;lt;/center&amp;gt;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        ilist = sorted(self.soupscores.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
        results += &amp;quot;&amp;lt;p&amp;gt;&amp;lt;center&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;table cellspacing=1 border=2 cols=2&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; Soup number &amp;lt;/td&amp;gt;&amp;lt;td align=right&amp;gt; Score &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
        for soupnum, score in ilist[:50]:&lt;br /&gt;
            results += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &amp;quot;&lt;br /&gt;
            results += self.save_soup(root, soupnum, symmetry)&lt;br /&gt;
            results += &amp;quot; &amp;lt;/td&amp;gt;&amp;lt;td align=right&amp;gt; &amp;quot; + str(score) + &amp;quot; &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        results += &amp;quot;&amp;lt;/table&amp;gt;\n&amp;lt;/center&amp;gt;\n&amp;quot;&lt;br /&gt;
        results += &amp;quot;&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        htmlname = apgpath + &amp;quot;latest_census.html&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            f = open(htmlname, &#039;w&#039;)&lt;br /&gt;
            f.write(results)&lt;br /&gt;
            f.close()&lt;br /&gt;
            g.open(htmlname)&lt;br /&gt;
        except:&lt;br /&gt;
            g.warn(&amp;quot;Unable to create html file:\n&amp;quot; + htmlname)&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
# Converts a base-36 case-insensitive alphanumeric character into a&lt;br /&gt;
# numerical value.&lt;br /&gt;
def ord2(char):&lt;br /&gt;
&lt;br /&gt;
    x = ord(char)&lt;br /&gt;
&lt;br /&gt;
    if ((x &amp;gt;= 48) &amp;amp; (x &amp;lt; 58)):&lt;br /&gt;
        return x - 48&lt;br /&gt;
&lt;br /&gt;
    if ((x &amp;gt;= 65) &amp;amp; (x &amp;lt; 91)):&lt;br /&gt;
        return x - 55&lt;br /&gt;
&lt;br /&gt;
    if ((x &amp;gt;= 97) &amp;amp; (x &amp;lt; 123)):&lt;br /&gt;
        return x - 87&lt;br /&gt;
&lt;br /&gt;
    return -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def apg_verify(rulestring, symmetry, payoshakey):&lt;br /&gt;
&lt;br /&gt;
    verifysoup = Soup()&lt;br /&gt;
    verifysoup.rg.setrule(rulestring)&lt;br /&gt;
    verifysoup.rg.saveAllRules()&lt;br /&gt;
&lt;br /&gt;
    return_point = [None]&lt;br /&gt;
&lt;br /&gt;
    catagolue_results(rulestring+&amp;quot;\n&amp;quot;+symmetry+&amp;quot;\n&amp;quot;, payoshakey, &amp;quot;verify_apgsearch_haul&amp;quot;, endpoint=&amp;quot;/verify&amp;quot;, return_point=return_point)&lt;br /&gt;
&lt;br /&gt;
    if return_point[0] is not None:&lt;br /&gt;
&lt;br /&gt;
        resplist = return_point[0].split(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if ((len(resplist) &amp;gt;= 4) and (resplist[1] == &amp;quot;yes&amp;quot;)):&lt;br /&gt;
&lt;br /&gt;
            md5 = resplist[2]&lt;br /&gt;
            passcode = resplist[3]&lt;br /&gt;
&lt;br /&gt;
            stringlist = resplist[4:]&lt;br /&gt;
&lt;br /&gt;
            stringlist = [s for s in stringlist if (len(s) &amp;gt; 0 and s[0] != &#039;*&#039;)]&lt;br /&gt;
&lt;br /&gt;
            # g.exit(stringlist[0])&lt;br /&gt;
&lt;br /&gt;
            gsize = 3&lt;br /&gt;
&lt;br /&gt;
            pos = 0&lt;br /&gt;
&lt;br /&gt;
            while (len(stringlist) &amp;gt; 0):&lt;br /&gt;
&lt;br /&gt;
                while (gsize * gsize &amp;gt; len(stringlist)):&lt;br /&gt;
&lt;br /&gt;
                    gsize -= 1&lt;br /&gt;
&lt;br /&gt;
                listhead = stringlist[:(gsize*gsize)]&lt;br /&gt;
                stringlist = stringlist[(gsize*gsize):]&lt;br /&gt;
&lt;br /&gt;
                verifysoup.stabilise_soups_parallel_list(gsize, listhead, pos)&lt;br /&gt;
&lt;br /&gt;
                pos += (gsize * gsize)&lt;br /&gt;
&lt;br /&gt;
            # verifysoup.display_census(-1, &amp;quot;verify&amp;quot;, &amp;quot;verify&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            payload = &amp;quot;@MD5 &amp;quot;+md5+&amp;quot;\n&amp;quot;&lt;br /&gt;
            payload += &amp;quot;@PASSCODE &amp;quot;+passcode+&amp;quot;\n&amp;quot;&lt;br /&gt;
            payload += &amp;quot;@RULE &amp;quot;+rulestring+&amp;quot;\n&amp;quot;&lt;br /&gt;
            payload += &amp;quot;@SYMMETRY &amp;quot;+symmetry+&amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            tlist = sorted(verifysoup.objectcounts.iteritems(), key=operator.itemgetter(1), reverse=True)&lt;br /&gt;
&lt;br /&gt;
            for objname, count in tlist:&lt;br /&gt;
&lt;br /&gt;
                payload += objname + &amp;quot; &amp;quot; + str(count) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            catagolue_results(payload, payoshakey, &amp;quot;submit_verification&amp;quot;, endpoint=&amp;quot;/verify&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def apg_main():&lt;br /&gt;
&lt;br /&gt;
    # ---------------- Hardcode the following inputs if running without a user interface ----------------&lt;br /&gt;
    orignumber = int(g.getstring(&amp;quot;How many soups to search between successive uploads?&amp;quot;, &amp;quot;5000000&amp;quot;))&lt;br /&gt;
    rulestring = g.getstring(&amp;quot;Which rule to use?&amp;quot;, &amp;quot;B3/S23&amp;quot;)&lt;br /&gt;
    symmstring = g.getstring(&amp;quot;What symmetries to use?&amp;quot;, &amp;quot;C1&amp;quot;)&lt;br /&gt;
    payoshakey = g.getstring(&amp;quot;Please enter your key (visit &amp;quot;+get_server_address()+&amp;quot;/payosha256 in your browser).&amp;quot;, &amp;quot;#anon&amp;quot;)&lt;br /&gt;
    # ---------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    # Sanitise input:&lt;br /&gt;
    #orignumber = max(orignumber, 100000)&lt;br /&gt;
    #orignumber = min(orignumber, 100000000)&lt;br /&gt;
    number = orignumber&lt;br /&gt;
    initpos = 0&lt;br /&gt;
    if symmstring not in [&amp;quot;1x256X2+1&amp;quot;, &amp;quot;1x256X2&amp;quot;, &amp;quot;32x32&amp;quot;, &amp;quot;25p&amp;quot;, &amp;quot;75p&amp;quot;, &amp;quot;1x256&amp;quot;, &amp;quot;2x128&amp;quot;, &amp;quot;4x64&amp;quot;, &amp;quot;8x32&amp;quot;, &amp;quot;C1&amp;quot;, &amp;quot;C2_1&amp;quot;, &amp;quot;C2_2&amp;quot;, &amp;quot;C2_4&amp;quot;, &amp;quot;C4_1&amp;quot;, &amp;quot;C4_4&amp;quot;, &amp;quot;D2_+1&amp;quot;, &amp;quot;D2_+2&amp;quot;, &amp;quot;D2_x&amp;quot;, &amp;quot;D4_+1&amp;quot;, &amp;quot;D4_+2&amp;quot;, &amp;quot;D4_+4&amp;quot;, &amp;quot;D4_x1&amp;quot;, &amp;quot;D4_x4&amp;quot;, &amp;quot;D8_1&amp;quot;, &amp;quot;D8_4&amp;quot;]:&lt;br /&gt;
        g.exit(symmstring+&amp;quot; is not a valid symmetry option&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if symmstring in [&amp;quot;25p&amp;quot;]:&lt;br /&gt;
        g.exit(symmstring+&amp;quot; is faulty and DOES NOT WORK CORRECTLY&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    quitapg = False&lt;br /&gt;
&lt;br /&gt;
    # Create associated rule tables:&lt;br /&gt;
    soup = Soup()&lt;br /&gt;
    soup.rg.setrule(rulestring)&lt;br /&gt;
    soup.rg.saveAllRules()&lt;br /&gt;
&lt;br /&gt;
    # We have 100 soups per page, instead of one. This parallel approach&lt;br /&gt;
    # was suggested by Tomas Rokicki, and results in approximately a&lt;br /&gt;
    # fourfold increase in soup-searching speed!&lt;br /&gt;
    sqrtspp_optimal = 10&lt;br /&gt;
&lt;br /&gt;
    # Initialise the census:&lt;br /&gt;
    start_time = time.clock()&lt;br /&gt;
    f = (lambda x : &#039;abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789&#039;[ord(x) % 56])&lt;br /&gt;
    rootstring = &#039;&#039;.join(map(f, list(hashlib.sha256(payoshakey + datetime.datetime.now().isoformat()).digest()[:12])))&lt;br /&gt;
    scount = 0&lt;br /&gt;
&lt;br /&gt;
    while (quitapg == False):&lt;br /&gt;
&lt;br /&gt;
        # Peer-review some soups:&lt;br /&gt;
        for i in xrange(5):&lt;br /&gt;
            apg_verify(&amp;quot;b3s23&amp;quot;, &amp;quot;32x32&amp;quot;, payoshakey)&lt;br /&gt;
            apg_verify(&amp;quot;b3s23&amp;quot;, &amp;quot;4x64&amp;quot;, payoshakey)&lt;br /&gt;
            apg_verify(&amp;quot;b3s23&amp;quot;, &amp;quot;2x128&amp;quot;, payoshakey)&lt;br /&gt;
            apg_verify(&amp;quot;b3s23&amp;quot;, &amp;quot;1x256&amp;quot;, payoshakey)&lt;br /&gt;
            apg_verify(&amp;quot;b3s23&amp;quot;, &amp;quot;1x256X2&amp;quot;, payoshakey)&lt;br /&gt;
            apg_verify(&amp;quot;b3s23&amp;quot;, &amp;quot;1x256X2+1&amp;quot;, payoshakey)&lt;br /&gt;
&lt;br /&gt;
        # The &#039;for&#039; loop has been replaced with a &#039;while&#039; loop to allow sqrtspp&lt;br /&gt;
        # to vary during runtime. The idea is that apgsearch can apply a basic&lt;br /&gt;
        # form of machine-learning to dynamically locate the optimum sqrtspp:&lt;br /&gt;
        while (scount &amp;lt; number):&lt;br /&gt;
&lt;br /&gt;
            delays = [0.0, 0.0, 0.0]&lt;br /&gt;
&lt;br /&gt;
            for i in xrange(1000):&lt;br /&gt;
&lt;br /&gt;
                page_time = time.clock()&lt;br /&gt;
&lt;br /&gt;
                sqrtspp = (sqrtspp_optimal + (i % 3) - 1) if (i &amp;lt; 150) else (sqrtspp_optimal)&lt;br /&gt;
&lt;br /&gt;
                # Don&#039;t overrun:&lt;br /&gt;
                while (scount + sqrtspp * sqrtspp &amp;gt; number):&lt;br /&gt;
                    sqrtspp -= 1&lt;br /&gt;
&lt;br /&gt;
                meandelay = soup.stabilise_soups_parallel(rootstring, scount + initpos, sqrtspp, symmstring)&lt;br /&gt;
                if (i &amp;lt; 150):&lt;br /&gt;
                    delays[i % 3] += meandelay&lt;br /&gt;
                scount += (sqrtspp * sqrtspp)&lt;br /&gt;
&lt;br /&gt;
                current_speed = int((sqrtspp * sqrtspp)/(time.clock() - page_time))&lt;br /&gt;
                alltime_speed = int((scount)/(time.clock() - start_time))&lt;br /&gt;
                &lt;br /&gt;
                g.show(str(scount) + &amp;quot; soups processed (&amp;quot; + str(current_speed) +&lt;br /&gt;
                       &amp;quot; per second current; &amp;quot; + str(alltime_speed) + &amp;quot; overall)&amp;quot; +&lt;br /&gt;
                       &amp;quot; : (type &#039;s&#039; to see latest census or &#039;q&#039; to quit).&amp;quot;)&lt;br /&gt;
                &lt;br /&gt;
                event = g.getevent()&lt;br /&gt;
                if event.startswith(&amp;quot;key&amp;quot;):&lt;br /&gt;
                    evt, ch, mods = event.split()&lt;br /&gt;
                    if ch == &amp;quot;s&amp;quot;:&lt;br /&gt;
                        soup.save_progress(scount, rootstring, symmstring)&lt;br /&gt;
                        soup.display_census(scount, rootstring, symmstring)&lt;br /&gt;
                    elif ch == &amp;quot;q&amp;quot;:&lt;br /&gt;
                        quitapg = True&lt;br /&gt;
                        break&lt;br /&gt;
&lt;br /&gt;
                if (scount &amp;gt;= number):&lt;br /&gt;
                    break&lt;br /&gt;
                &lt;br /&gt;
            if (quitapg == True):&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
            # Change sqrtspp to a more optimal value:&lt;br /&gt;
            if (scount &amp;lt; number):&lt;br /&gt;
                sqrtspp_new = sqrtspp_optimal&lt;br /&gt;
&lt;br /&gt;
                if (delays[0] &amp;lt; delays[1]):&lt;br /&gt;
                    sqrtspp_new = sqrtspp_optimal - 1&lt;br /&gt;
                if ((delays[2] &amp;lt; delays[1]) and (delays[2] &amp;lt; delays[0])):&lt;br /&gt;
                    sqrtspp_new = sqrtspp_optimal + 1&lt;br /&gt;
&lt;br /&gt;
                sqrtspp_optimal = sqrtspp_new&lt;br /&gt;
                sqrtspp_optimal = max(sqrtspp_optimal, 5)&lt;br /&gt;
&lt;br /&gt;
            # Compactify highscore table:&lt;br /&gt;
            soup.compactify_scores()&lt;br /&gt;
&lt;br /&gt;
        if (quitapg == False):&lt;br /&gt;
            # Save progress, upload it to Catagolue, and reset the census if successful:&lt;br /&gt;
            a = soup.save_progress(scount, rootstring, symmstring, payosha256_key=payoshakey)&lt;br /&gt;
            if (a == 0):&lt;br /&gt;
                # Reset the census:&lt;br /&gt;
                soup.reset()&lt;br /&gt;
                start_time = time.clock()&lt;br /&gt;
                f = (lambda x : &#039;abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789&#039;[ord(x) % 56])&lt;br /&gt;
                rootstring = &#039;&#039;.join(map(f, list(hashlib.sha256(rootstring + payoshakey + datetime.datetime.now().isoformat()).digest()[:12])))&lt;br /&gt;
                scount = 0&lt;br /&gt;
                number = orignumber&lt;br /&gt;
            else:&lt;br /&gt;
                number += orignumber&lt;br /&gt;
&lt;br /&gt;
    end_time = time.clock()&lt;br /&gt;
&lt;br /&gt;
    soup.save_progress(scount, rootstring, symmstring, payosha256_key=payoshakey)&lt;br /&gt;
&lt;br /&gt;
    soup.display_unids()&lt;br /&gt;
    soup.display_census(scount, rootstring, symmstring)&lt;br /&gt;
&lt;br /&gt;
def symmetry_test():&lt;br /&gt;
&lt;br /&gt;
    g.new(&amp;quot;Symmetry test&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    symmetries = [[&amp;quot;1x256X2+1&amp;quot;, &amp;quot;1x256X2&amp;quot;, &amp;quot;32x32&amp;quot;, &amp;quot;25p&amp;quot;, &amp;quot;75p&amp;quot;, &amp;quot;C1&amp;quot;, &amp;quot;8x32&amp;quot;, &amp;quot;4x64&amp;quot;, &amp;quot;2x128&amp;quot;, &amp;quot;1x256&amp;quot;],&lt;br /&gt;
                  [&amp;quot;C2_1&amp;quot;, &amp;quot;C2_2&amp;quot;, &amp;quot;C2_4&amp;quot;],&lt;br /&gt;
                  [&amp;quot;C4_1&amp;quot;, &amp;quot;C4_4&amp;quot;],&lt;br /&gt;
                  [&amp;quot;D2_+1&amp;quot;, &amp;quot;D2_+2&amp;quot;, &amp;quot;D2_x&amp;quot;],&lt;br /&gt;
                  [&amp;quot;D4_+1&amp;quot;, &amp;quot;D4_+2&amp;quot;, &amp;quot;D4_+4&amp;quot;, &amp;quot;D4_x1&amp;quot;, &amp;quot;D4_x4&amp;quot;],&lt;br /&gt;
                  [&amp;quot;D8_1&amp;quot;, &amp;quot;D8_4&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
    for i in range(len(symmetries)):&lt;br /&gt;
        for j in range(len(symmetries[i])):&lt;br /&gt;
&lt;br /&gt;
            g.putcells(hashsoup(&amp;quot;sym_test&amp;quot;, symmetries[i][j]), 120 * j + 60 * (i % 2), 80 * i)&lt;br /&gt;
    g.fit()&lt;br /&gt;
&lt;br /&gt;
# Run the soup-searching script:&lt;br /&gt;
apg_main()&lt;br /&gt;
# apg_verify()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Yes, I get silly all the time. -wwei23 9:53 AM 8/7/2017 NY time&lt;br /&gt;
&lt;br /&gt;
:Thanks. BTW, there is no use in calling apg_verify for your higher newly-created symmetries -- peer review is not enabled server-side for these in the first place. [[User:Apple Bottom|Apple Bottom]] ([[User talk:Apple Bottom|talk]]) 11:00, 7 August 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== picture ==&lt;br /&gt;
&lt;br /&gt;
may the homepage picture be changed to the Christmas theme to fit whatever is currently happening? [[User:Snacked|Snacked]] ([[User talk:Snacked|talk]]) 23:37, 20 December 2022 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Object comments ==&lt;br /&gt;
&lt;br /&gt;
Should the article mention that you can log in on Catagolue and leave comments on the object pages with [https://conwaylife.com/forums/viewtopic.php?p=65745#p65745 supported markdown]? [[User:GUYTU6J|GUYTU6J]] ([[User talk:GUYTU6J|talk]]) 09:46, 28 September 2023 (UTC)&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Hexagonal_neighbourhood&amp;diff=134459</id>
		<title>Hexagonal neighbourhood</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Hexagonal_neighbourhood&amp;diff=134459"/>
		<updated>2023-08-03T13:37:24Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* Isotropic non-totalistic rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glossary}}&lt;br /&gt;
The &#039;&#039;&#039;hexagonal neighbourhood&#039;&#039;&#039; is the set of all [[cell]]s that are adjacent to the region of interest in a grid tiled with hexagons (the region of interest itself may or may not be considered part of the hexagonal neighbourhood, depending on context). Currently, these rules are partially supported by both [[Golly]] and [[apgsearch]]. These rules are typically notated using the &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;H&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; suffix (e.g. &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;B2/S34H&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Generalizations ==&lt;br /&gt;
As mentioned above, [[Golly]] also has the ability to support outer-totalistic [[Generations]] rules using the hexagonal grid. [[Larger than Life]] and [[BSFKL]] rules are also possible, but they are not currently supported by apgsearch as of January 2022. However, [[LifeViewer]] and [[Golly]] support [[Larger than Life]] rules in this neighbourhood.&lt;br /&gt;
&lt;br /&gt;
=== Higher ranges ===&lt;br /&gt;
The hexagonal neighbourhood can be defined with a higher range; that is, so that it captures cells that are further than one cell away from the region of interest. The higher range hexagonal neighbourhood take the shape of a symmetric honeycomb&amp;lt;ref&amp;gt;{{Cite web|url=https://lazyslug.com/lifeview/plugin/neighbourhoods.html|title=LifeViewer Plugin Tests|author=Chris Rowett|accessdate=November 21, 2020}}&amp;lt;/ref&amp;gt; and the number of cells in a range n hexagonal neighbourhood has the formula {{nowrap|3 n (n + 1)}}.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto; border-spacing: 1em 0;&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Hexagonal neighbourhood (range 1).png|frame|none|range = 1]]&lt;br /&gt;
| [[File:Hexagonal neighbourhood (range 2).png|frame|none|range = 2]]&lt;br /&gt;
| [[File:Hexagonal neighbourhood (range 3).png|frame|none|range = 3]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Subsets and alternate extensions ===&lt;br /&gt;
Rather than extending the hexagonal neighbourhood outwards as to form a large, solid hexagon, it can be extended by casting six rays outwards from the central cell to form what is referred to as the &amp;quot;asterisk&amp;quot; neighbourhood. This can be seen as the hexagonal-grid analogue to the [[cross neighbourhood]] or [[star neighbourhood]] depending on the analysis used.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto; border-spacing: 1em 0;&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Asterisk neighbourhood (range 1).png|frame|none|range = 1]]&lt;br /&gt;
| [[File:Asterisk neighbourhood (range 2).png|frame|none|range = 2]]&lt;br /&gt;
| [[File:Asterisk neighbourhood (range 3).png|frame|none|range = 3]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A subset of the hexagonal range 1 neighbourhood known as the tripod neighbourhood has also been investigated.&amp;lt;ref name=&amp;quot;post7049&amp;quot; /&amp;gt; This neighbourhood has an essence of intrinsic chirality; having only half of the rotational symmetry of the usual hexagonal and asterisk neighbourhoods as well as cells in one cell&#039;s tripod neighbourhood not including the original cell in their tripod neighbourhood imparts rather strange mechanics upon rules which use it. Like with the asterisk neighbourhood, it can be extended via casting three rays from a central cell.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 0 auto; border-spacing: 1em 0;&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Tripod neighbourhood (range 1).png|frame|none|range = 1]]&lt;br /&gt;
| [[File:Tripod neighbourhood (range 2).png|frame|none|range = 2]]&lt;br /&gt;
| [[File:Tripod neighbourhood (range 3).png|frame|none|range = 3]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Isotropic non-totalistic rules ===&lt;br /&gt;
{{related|Isotropic non-totalistic cellular automaton}}&lt;br /&gt;
Like in the [[Moore neighborhood]], [[isotropic]] cellular automata using the hexagonal neighbourhood can be defined using a notation devised by [[Paul Callahan]] which represent the relative permutations of the cells using the letters &#039;&#039;o&#039;&#039;, &#039;&#039;m&#039;&#039;, and &#039;&#039;p&#039;&#039;, as shown in the table below. The three letters stand for &#039;&#039;ortho&#039;&#039;, &#039;&#039;meta&#039;&#039;, and &#039;&#039;para&#039;&#039; respectively and were chosen in analogy to arene substitution patterns&amp;lt;ref&amp;gt;{{LinkWikipedia|Arene_substitution_pattern|name=Arene substitution pattern|nobullet=nobullet}}&amp;lt;/ref&amp;gt; in aromatic chemistry.&amp;lt;ref&amp;gt;{{LinkCallahan|hexrule.txt|patternname=Experiments with a somewhat &amp;quot;Life-like&amp;quot; hexagonal CA (long)}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=https://conwaylife.com/forums/download/file.php?id=261|title=ExtendedCallahanHexagonal.gif|work=ConwayLife.com forums|accessdate=December 8, 2018}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Golly]] does not support isotropic non-totalistic hexagonal rules using this syntax, so they must instead be simulated using either rule tables or [[MAP string]]s. [[LifeViewer]] and [[lifelib]] support them natively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin-left: auto; margin-right: auto; border: none;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border: none; background: #fff;&amp;quot; |&lt;br /&gt;
! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6&lt;br /&gt;
|-&lt;br /&gt;
! —&amp;lt;small style=&amp;quot;font-weight: normal;&amp;quot;&amp;gt; (no&amp;lt;br/&amp;gt;letter)&amp;lt;/small&amp;gt;&lt;br /&gt;
| [[File:INT hexagonal R1 0.png]] || [[File:INT hexagonal R1 1.png]] || || || || [[File:INT hexagonal R1 5.png]] || [[File:INT hexagonal R1 6.png]]&lt;br /&gt;
|-&lt;br /&gt;
! o&amp;lt;br/&amp;gt;&amp;lt;small style=&amp;quot;font-weight: normal;&amp;quot;&amp;gt;(ortho)&amp;lt;/small&amp;gt;&lt;br /&gt;
| || || [[File:INT hexagonal R1 2o.png]] || [[File:INT hexagonal R1 3o.png]] || [[File:INT hexagonal R1 4o.png]] || || &lt;br /&gt;
|-&lt;br /&gt;
! m&amp;lt;br/&amp;gt;&amp;lt;small style=&amp;quot;font-weight: normal;&amp;quot;&amp;gt;(meta)&amp;lt;/small&amp;gt;&lt;br /&gt;
| || || [[File:INT hexagonal R1 2m.png]] || [[File:INT hexagonal R1 3m.png]] || [[File:INT hexagonal R1 4m.png]] || || &lt;br /&gt;
|-&lt;br /&gt;
! p&amp;lt;br/&amp;gt;&amp;lt;small style=&amp;quot;font-weight: normal;&amp;quot;&amp;gt;(para)&amp;lt;/small&amp;gt;&lt;br /&gt;
| || || [[File:INT hexagonal R1 2p.png]] || [[File:INT hexagonal R1 3p.png]] || [[File:INT hexagonal R1 4p.png]] || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Symmetries ==&lt;br /&gt;
{{main|Static symmetry#On a hexagonal or triangular grid}}&lt;br /&gt;
The hexagonal neighbourhood relies on a different grid than the [[Moore neighbourhood|Moore]] and [[Von Neumann neighbourhood|von Neumann]] neighborhoods and thus features a different set of inherent symmetries when dealing with [[isotropic]] rules:&lt;br /&gt;
&lt;br /&gt;
* Asymmetric (C1, 8x32, 4x64, 2x128, 1x256)&lt;br /&gt;
* C2_1&lt;br /&gt;
* C2_4&lt;br /&gt;
* C3_1&lt;br /&gt;
* C3_3 (unsupported by apgsearch)&lt;br /&gt;
* C6&lt;br /&gt;
* D2_xo&lt;br /&gt;
* D2_x&lt;br /&gt;
* D4_x1&lt;br /&gt;
* D4_x4&lt;br /&gt;
* D6_1&lt;br /&gt;
* D6_1o&lt;br /&gt;
* D6_3 (unsupported by apgsearch)&lt;br /&gt;
* D12&lt;br /&gt;
&lt;br /&gt;
All of these are currently supported by both [[lifelib]] and [[apgsearch]], except for D6_3 and C3_3. [[Catagolue]]&#039;s &#039;&#039;&#039;/hashsoup&#039;&#039;&#039; endpoint currently does not understand any of the C3, C6, D6 or D12 symmetries,&amp;lt;ref&amp;gt;https://gitlab.com/apgoucher/catagolue/-/issues/2&amp;lt;/ref&amp;gt; but the samples soups can nonetheless be correctly retrieved using lifelib&#039;s &#039;&#039;&#039;pattern.download_samples()&#039;&#039;&#039; function.&amp;lt;ref&amp;gt;{{LinkForumThread|format=ref|f=7|t=3049|p=66646|title=Re: apgsearch v4.0}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hexagonal rules can also support gutter symmetry,&amp;lt;ref name=&amp;quot;post66215&amp;quot; /&amp;gt; however apgsearch does not support searching with these.&lt;br /&gt;
&lt;br /&gt;
== Software support ==&lt;br /&gt;
[[LifeViewer]] supports outer-totalistic hexagonal rules and also supports isotropic non-totalistic hexagonal rulestrings from build 313,&amp;lt;ref name=&amp;quot;post73364&amp;quot; /&amp;gt; and supports hexagonal [[Higher-range outer-totalistic]] (including [[Larger than Life]]) rules.&lt;br /&gt;
&lt;br /&gt;
[[Golly]] also simulates outer-totalistic hexagonal rules, although it does not natively support isotropic non-totalistic hexagonal rules with the usual notation. They both also have the ability to support [[Generations]] variants of hexagonal rules. In addition, hexagonal [[Higher-range outer-totalistic]] (including [[Larger than Life]]) rules are supported from v4.0 onwards.&lt;br /&gt;
&lt;br /&gt;
[[apgsearch]] and [[Catagolue]] also support the hexagonal neighbourhood. They support hexagonal [[Generations]] rules, but they also support isotropic non-totalistic rules (see [[#Generalizations|Generalizations]] below). As of version 4.71, all possible symmetries are available for searching except for C3_3 and D6_3 (see [[#Symmetries|Symmetries]] below).&amp;lt;ref name=&amp;quot;post66638&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=https://gitlab.com/apgoucher/lifelib/-/issues/4|title=C3_3 and D6_3 hex symmetries are not supported|author=Connor Steppie|date=January 15, 2020|work=GitLab}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| {{Nbh-demo |r = 2 |n = H |z = 16 |w = 150 |h = 150 |caption = Range-2 hexagonal Moore neighbourhood}}&lt;br /&gt;
| {{Nbh-demo |r = 3 |n = H |z = 16 |w = 150 |h = 150 |caption = Range-3 hexagonal Moore neighbourhood}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Neighbourhood]]&lt;br /&gt;
** [[Margolus neighbourhood]]&lt;br /&gt;
** [[Moore neighbourhood]]&lt;br /&gt;
** [[von Neumann neighbourhood]]&lt;br /&gt;
** [[Triangular Moore neighbourhood]]&lt;br /&gt;
** [[Triangular von Neumann neighbourhood]]&lt;br /&gt;
* [[Zone of influence]]&lt;br /&gt;
* [[Gallery of neighbourhoods/Images]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post73364&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Pattern viewer for forum threads&lt;br /&gt;
|p      = 73364&lt;br /&gt;
|author = Chris Rowett&lt;br /&gt;
|date   = March 17, 2019&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post66638&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: apgsearch v4.0&lt;br /&gt;
|p      = 66638&lt;br /&gt;
|author = Adam P. Goucher&lt;br /&gt;
|date   = December 20, 2018&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post7049&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Triangular &amp;amp; Tripod von Neuman neighborhoods&lt;br /&gt;
|p      = 7049&lt;br /&gt;
|author = EricG&lt;br /&gt;
|date   = September 9, 2012&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post66215&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Non-totalistic hex rules&lt;br /&gt;
|p      = 66215&lt;br /&gt;
|author = Connor Steppie&lt;br /&gt;
|date   = December 5, 2018&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{LinkWikipedia|Hexagonal_tiling|name=Hexagonal tiling}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neighbourhoods]]&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Primer&amp;diff=134458</id>
		<title>Primer</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Primer&amp;diff=134458"/>
		<updated>2023-08-03T13:33:03Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Pattern&lt;br /&gt;
|name         = Primer&lt;br /&gt;
|pname        = primer&lt;br /&gt;
|c            = 2953&lt;br /&gt;
|bx           = 440&lt;br /&gt;
|by           = 294&lt;br /&gt;
|discoverer   = Dean Hickerson&lt;br /&gt;
|discoveryear = 1991&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B3/S23&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B3/S23&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|hideimg      = true&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Primer&#039;&#039;&#039; is a [[pattern]] that was constructed by [[Dean Hickerson]] on November 1, {{year|1991}} that produces a stream of [[lightweight spaceship]]s representing [[Prime number|prime numbers]]. N is prime if and only if a lightweight spaceship escapes to the left of the [[pentadecathlon]] at the bottom-left corner of the pattern at [[generation]] {{nowrap|120 N + 100}}.&amp;lt;ref&amp;gt;{{filename|PRIMES.LIF}} from [[Alan Hensel]]&#039;s [http://www.ibiblio.org/lifepatterns/ {{filename|lifep.zip}} pattern collection]. Accessed on July 28, 2009.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{CiteGollyPatternCollection|four-primers.rle.gz|accessdate=July 28, 2009}}&amp;lt;/ref&amp;gt; It was the first known pattern created that computes prime numbers, though others have since been constructed based on the same ideas.&amp;lt;ref name=&amp;quot;post6330&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It works by using [[glider]]s to emulate a prime number sieve&amp;lt;ref&amp;gt;{{LinkWikipedia|Sieve_of_Eratosthenes|name=Sieve of Eratosthenes|nobullet=nobullet}}&amp;lt;/ref&amp;gt;. Lightweight spaceships that move westward are deleted by gliders that represent positive integers if the lightweight spaceship represents a multiple of that number.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = primer&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 640 WIDTH 960 THUMBSIZE 2 ZOOM 2 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = The pattern&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Image gallery==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Primer_stream.png|thumb|The stream of spaceships representing prime numbers]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Videos==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|{{#ev:youtube|68nEX5CEmZE|300|left|Primer outputting the prime numbers from 2 through 37}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Fermat prime calculator]]&lt;br /&gt;
* [[tlog(t) growth]]&lt;br /&gt;
* [[Twin prime calculator]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post6330&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 6330&lt;br /&gt;
|title  = Re: The theory behind Primer?&lt;br /&gt;
|author = Jason Summers&lt;br /&gt;
|date   = February 28, 2012&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_p.htm#primer}}&lt;br /&gt;
* {{LinkGoLNews|2007/12/prime_number_calculators.html|title=Prime Number Calculators|date=December 15, 2007|author=Dave Greene}}&lt;br /&gt;
* {{LinkGoLNews|2010/02/prime_numbers.html|title=Prime numbers|date=February 04, 2010|author=Adam P. Goucher}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Infinite growth]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Melusine&amp;diff=134457</id>
		<title>Melusine</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Melusine&amp;diff=134457"/>
		<updated>2023-08-03T13:31:47Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stilllife&lt;br /&gt;
|name             = Melusine&lt;br /&gt;
|pname            = xs10_ggka23z1&lt;br /&gt;
|c                = 10&lt;br /&gt;
|bx               = 6&lt;br /&gt;
|by               = 6&lt;br /&gt;
|fc               = 26.4&lt;br /&gt;
|discoveryear     = 1972&lt;br /&gt;
|rulemin          = B/S23&lt;br /&gt;
|rulemax          = B35678/S012345678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]], [[HighLife]]&lt;br /&gt;
|isorulemin       = B/S2-in3r&lt;br /&gt;
|isorulemax       = B2-ae34-ajn5678/S012345678&lt;br /&gt;
|synthesis        = 5&lt;br /&gt;
|synthesisRLE     = true&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|apgcode          = xs10_ggka23z1&lt;br /&gt;
|niemiecid        = 10.14&lt;br /&gt;
|pentadecathlonid = 10.21&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Melusine&#039;&#039;&#039; (or &#039;&#039;&#039;fuse with two tails&#039;&#039;&#039;) is a {{slcells|10|text=10-cell}} [[still life]].&lt;br /&gt;
&lt;br /&gt;
While sometimes referred to as &#039;&#039;trans-fuse with two tails&#039;&#039;, this distinction is slightly misleading, as there is no way to connect two tails to a &amp;quot;fuse&amp;quot; of length 2 in [[cis]] arrangement. The closest alternative, [[weld]]ing the two tails, yields a [[boat]].&lt;br /&gt;
&lt;br /&gt;
== Occurrence ==&lt;br /&gt;
{{related|List of common still lifes}}&lt;br /&gt;
It is the fifth rarest 10-cell still life out of 25. It is about 45 times as common as the [[long fuse with two tails]].&lt;br /&gt;
&lt;br /&gt;
== Glider synthesis ==&lt;br /&gt;
{{Small constructible periodic object}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Cis-fuse with two tails]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{LinkCatagolue|xs10_ggka23z1}}&lt;br /&gt;
* {{LinkNiemiec|p1.htm#p1-10|The 25 ten-bit still-lifes|rle=10/10-14.rle}}&lt;br /&gt;
* {{LinkPentadecathlonObject|id=10.21}}&lt;br /&gt;
* {{LinkWikipedia|Melusine}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|180degree}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Andrew_Adamatzky&amp;diff=134456</id>
		<title>Andrew Adamatzky</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Andrew_Adamatzky&amp;diff=134456"/>
		<updated>2023-08-03T13:30:59Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Person|name=Andrew Adamatzky|res=United Kingdom|inst=University of the West of England|nat=British|born=October 10, 1975|alma=St. Petersburg University,&amp;lt;br/&amp;gt;Program Systems Institute of Russian Academy of Sciences}}&lt;br /&gt;
&#039;&#039;&#039;Andrew Adamatzky&#039;&#039;&#039; is a British computer scientist, who is a Director of the Unconventional Computing Laboratory and Professor in Unconventional Computing at the Department of Computer Science and Creative Technology, University of the West of England, Bristol, United Kingdom.  He is founding Editor-in-Chief of the [https://www.oldcitypublishing.com/journals/jca-home/ &#039;&#039;Journal of Cellular Automata&#039;&#039;]. He edited &#039;&#039;[[Game of Life Cellular Automata]]&#039;&#039; and co-edited [https://www.amazon.com/dp/3319272691/ &#039;&#039;Designing Beauty: The Art of Cellular Automata&#039;&#039;], and authored [https://www.amazon.com/dp/0748401725/ &#039;&#039;Identification of Cellular Automata&#039;&#039;].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Minor static symmetry]]&lt;br /&gt;
*[[Larger than Life]]&lt;br /&gt;
*[[Kellie Michele Evans]]&lt;br /&gt;
*[[Nick Gotts]]&lt;br /&gt;
*[[Harold McIntosh]]&lt;br /&gt;
*[[Genaro J. Martínez]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*{{LinkWikipedia|Andrew_Adamatzky|name=Adam Adamatzsky}}&lt;br /&gt;
*[https://people.uwe.ac.uk/Person/AndrewAdamatzky Professor Andrew Adamatzky staff profile]&lt;br /&gt;
*[https://prabook.com/web/andrew.adamatzky/482285 Andrew Adamatzky at Prabook]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Adamatzky, Andrew}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Static_symmetry&amp;diff=134455</id>
		<title>Static symmetry</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Static_symmetry&amp;diff=134455"/>
		<updated>2023-08-03T13:29:11Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;static symmetry&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;post138823&amp;quot; /&amp;gt; refers to the combined rotational and reflectional symmetries of an arrangement of cells on a grid. Most isotropic rules preserve all such symmetries.&lt;br /&gt;
&lt;br /&gt;
This page specifically only covers purely geometric symmetries. Other preserved attributes which are not necessarily geometrical symmetries, notably gutters, are compiled on the [[Minor static symmetries]] page. Symmetries which apply to periodic objects, such as still lifes, oscillators and spaceships, which also includes time symmetries, are listed on the [[Kinetic symmetry]] page.&lt;br /&gt;
&lt;br /&gt;
== Basic theory ==&lt;br /&gt;
The Life transition rule, like that of any [[Isotropic non-totalistic cellular automaton|isotropic cellular automaton]], is invariant under valid reflections and rotations. That is, the change in state of a cell remains the same if its [[neighbourhood]] is rotated or reflected. This implies there are &#039;&#039;&#039;symmetries&#039;&#039;&#039; which if present in a pattern are present in all its successors. Note that the converse is not true: a pattern need not have the full symmetry of one of its successor states.&lt;br /&gt;
&lt;br /&gt;
== On a square grid ==&lt;br /&gt;
[[File:Symmetries.png|center|frame|Overview of symmetries (excluding D8_2).]]&lt;br /&gt;
&lt;br /&gt;
=== Rotational ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible&amp;quot;&amp;gt;&lt;br /&gt;
Rotational symmetries are prefixed with &amp;quot;C&amp;quot;, referring to the cyclic groups.&amp;lt;ref&amp;gt;{{LinkWikipedia|Cyclic_group|name=Cyclic group|nobullet=nobullet}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== C1 ====&lt;br /&gt;
&#039;&#039;&#039;C1&#039;&#039;&#039;: Symmetric under 360° rotation. This is essentially no symmetry at all. Example: [[Eater 1]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;{{Sym-demo&lt;br /&gt;
|rle = x = 16, y = 16, rule = B/S012345678&lt;br /&gt;
16o$o14bo$o14bo$o3b2o4b2o3bo$o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2bo$o3b2o4b&lt;br /&gt;
2o3bo$o14bo$o14bo$o2b10o2bo$o2b4o8bo$o2b4o8bo$o3b2o9bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 160&lt;br /&gt;
|height = 160&lt;br /&gt;
|caption = C1 symmetry&lt;br /&gt;
}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== C2 ====&lt;br /&gt;
&#039;&#039;&#039;C2&#039;&#039;&#039;: Symmetric under 180° rotation. There are three possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;C2_1&#039;&#039;&#039;: Rotation around the center of a cell. The bounding rectangle of a C2_1 pattern is odd by odd. Example: [[Long snake]]&lt;br /&gt;
* &#039;&#039;&#039;C2_2&#039;&#039;&#039;: Rotation around the midpoint of a side of a cell. The bounding rectangle is even by odd. Example: [[Aircraft carrier]]&lt;br /&gt;
* &#039;&#039;&#039;C2_4&#039;&#039;&#039;: Rotation around a corner of a cell. The bounding rectangle is even by even. Example: [[Snake]]&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B/S012345678&lt;br /&gt;
16o$o14bo$o14bo$o3b2o4b2o3bo$o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2bo$o3b2o4b&lt;br /&gt;
2o3bo$o14bo$o14bo$o2b10o2bo$o2b4o8bo$o2b4o8bo$o3b2o9bo$o14bo$o14bo$31o&lt;br /&gt;
$15bo14bo$15bo14bo$15bo9b2o3bo$15bo8b4o2bo$15bo8b4o2bo$15bo2b10o2bo$&lt;br /&gt;
15bo14bo$15bo14bo$15bo3b2o4b2o3bo$15bo2bo2bo2bo2bo2bo$15bo2bo2bo2bo2bo&lt;br /&gt;
2bo$15bo3b2o4b2o3bo$15bo14bo$15bo14bo$15b16o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = C2_1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 32, rule = B/S012345678&lt;br /&gt;
16o$o14bo$o14bo$o3b2o4b2o3bo$o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2bo$o3b2o4b&lt;br /&gt;
2o3bo$o14bo$o14bo$o2b10o2bo$o2b4o8bo$o2b4o8bo$o3b2o9bo$o14bo$o14bo$16o&lt;br /&gt;
$15b16o$15bo14bo$15bo14bo$15bo9b2o3bo$15bo8b4o2bo$15bo8b4o2bo$15bo2b&lt;br /&gt;
10o2bo$15bo14bo$15bo14bo$15bo3b2o4b2o3bo$15bo2bo2bo2bo2bo2bo$15bo2bo2b&lt;br /&gt;
o2bo2bo2bo$15bo3b2o4b2o3bo$15bo14bo$15bo14bo$15b16o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = C2_2 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 32, rule = B/S012345678&lt;br /&gt;
16o$o14bo$o14bo$o3b2o4b2o3bo$o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2bo$o3b2o4b&lt;br /&gt;
2o3bo$o14bo$o14bo$o2b10o2bo$o2b4o8bo$o2b4o8bo$o3b2o9bo$o14bo$o14bo$16o&lt;br /&gt;
$16b16o$16bo14bo$16bo14bo$16bo9b2o3bo$16bo8b4o2bo$16bo8b4o2bo$16bo2b&lt;br /&gt;
10o2bo$16bo14bo$16bo14bo$16bo3b2o4b2o3bo$16bo2bo2bo2bo2bo2bo$16bo2bo2b&lt;br /&gt;
o2bo2bo2bo$16bo3b2o4b2o3bo$16bo14bo$16bo14bo$16b16o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = C2_4 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== C4 ====&lt;br /&gt;
&#039;&#039;&#039;C4&#039;&#039;&#039;: Symmetric under 90° rotation. There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;C4_1&#039;&#039;&#039;: Rotation around the center of a cell. The bounding rectangle is odd by odd. Example: [[Shuriken]]&lt;br /&gt;
* &#039;&#039;&#039;C4_4&#039;&#039;&#039;: Rotation around a corner of a cell. The bounding rectangle is even by even. Example: [[Quad]]&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B/S012345678&lt;br /&gt;
31o$o14bo14bo$o14bo14bo$o3b2o4b2o3bo3b3o3b2o3bo$o2bo2bo2bo2bo2bo2b4o2b&lt;br /&gt;
o2bo2bo$o2bo2bo2bo2bo2bo2b4o2bo2bo2bo$o3b2o4b2o3bo3b3o3b2o3bo$o14bo5bo&lt;br /&gt;
8bo$o14bo5bo8bo$o2b10o2bo5bo3b2o3bo$o2b4o8bo5bo2bo2bo2bo$o2b4o8bo5bo2b&lt;br /&gt;
o2bo2bo$o3b2o9bo5bo3b2o3bo$o14bo14bo$o14bo14bo$31o$o14bo14bo$o14bo14bo&lt;br /&gt;
$o3b2o3bo5bo9b2o3bo$o2bo2bo2bo5bo8b4o2bo$o2bo2bo2bo5bo8b4o2bo$o3b2o3bo&lt;br /&gt;
5bo2b10o2bo$o8bo5bo14bo$o8bo5bo14bo$o3b2o3b3o3bo3b2o4b2o3bo$o2bo2bo2b&lt;br /&gt;
4o2bo2bo2bo2bo2bo2bo$o2bo2bo2b4o2bo2bo2bo2bo2bo2bo$o3b2o3b3o3bo3b2o4b&lt;br /&gt;
2o3bo$o14bo14bo$o14bo14bo$31o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = C4_1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 32, rule = B/S012345678&lt;br /&gt;
32o$o14b2o14bo$o14b2o14bo$o3b2o4b2o3b2o3b3o3b2o3bo$o2bo2bo2bo2bo2b2o2b&lt;br /&gt;
4o2bo2bo2bo$o2bo2bo2bo2bo2b2o2b4o2bo2bo2bo$o3b2o4b2o3b2o3b3o3b2o3bo$o&lt;br /&gt;
14b2o5bo8bo$o14b2o5bo8bo$o2b10o2b2o5bo3b2o3bo$o2b4o8b2o5bo2bo2bo2bo$o&lt;br /&gt;
2b4o8b2o5bo2bo2bo2bo$o3b2o9b2o5bo3b2o3bo$o14b2o14bo$o14b2o14bo$32o$32o&lt;br /&gt;
$o14b2o14bo$o14b2o14bo$o3b2o3bo5b2o9b2o3bo$o2bo2bo2bo5b2o8b4o2bo$o2bo&lt;br /&gt;
2bo2bo5b2o8b4o2bo$o3b2o3bo5b2o2b10o2bo$o8bo5b2o14bo$o8bo5b2o14bo$o3b2o&lt;br /&gt;
3b3o3b2o3b2o4b2o3bo$o2bo2bo2b4o2b2o2bo2bo2bo2bo2bo$o2bo2bo2b4o2b2o2bo&lt;br /&gt;
2bo2bo2bo2bo$o3b2o3b3o3b2o3b2o4b2o3bo$o14b2o14bo$o14b2o14bo$32o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = C4_4 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C4 tends to produce record [[diehard]]s and [[megasized]] soups compared to other symmetries.&lt;br /&gt;
&lt;br /&gt;
=== Reflectional ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible&amp;quot;&amp;gt;&lt;br /&gt;
Reflectional symmetries are prefixed with &amp;quot;D&amp;quot;, referring to the dihedral groups.&amp;lt;ref&amp;gt;{{LinkWikipedia|Dihedral_group|name=Dihedral group|nobullet=nobullet}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== D2 ====&lt;br /&gt;
&#039;&#039;&#039;D2&#039;&#039;&#039;: Symmetric under reflection through a line. There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D2_+&#039;&#039;&#039; The line is orthogonal. There are two sub-possibilities:&lt;br /&gt;
** &#039;&#039;&#039;D2_+1&#039;&#039;&#039; The line bisects a row of cells. The bounding rectangle is odd by any. Example: [[Hat]]&lt;br /&gt;
** &#039;&#039;&#039;D2_+2&#039;&#039;&#039; The line lies between two rows of cells. The bounding rectangle is even by any. Example: [[Frutterfly]]&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 16, y = 31, rule = B/S012345678&lt;br /&gt;
16o$o14bo$o14bo$o3b2o4b2o3bo$o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2bo$o3b2o4b&lt;br /&gt;
2o3bo$o14bo$o14bo$o2b10o2bo$o2b4o8bo$o2b4o8bo$o3b2o9bo$o14bo$o14bo$16o&lt;br /&gt;
$o14bo$o14bo$o3b2o9bo$o2b4o8bo$o2b4o8bo$o2b10o2bo$o14bo$o14bo$o3b2o4b&lt;br /&gt;
2o3bo$o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2bo$o3b2o4b2o3bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 160&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D2_+1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 16, y = 32, rule = B/S012345678&lt;br /&gt;
16o$o14bo$o14bo$o3b2o4b2o3bo$o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2bo$o3b2o4b&lt;br /&gt;
2o3bo$o14bo$o14bo$o2b10o2bo$o2b4o8bo$o2b4o8bo$o3b2o9bo$o14bo$o14bo$16o&lt;br /&gt;
$16o$o14bo$o14bo$o3b2o9bo$o2b4o8bo$o2b4o8bo$o2b10o2bo$o14bo$o14bo$o3b&lt;br /&gt;
2o4b2o3bo$o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2bo$o3b2o4b2o3bo$o14bo$o14bo$&lt;br /&gt;
16o!&lt;br /&gt;
|width = 160&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D2_+2 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D2_x&#039;&#039;&#039; The line is diagonal. Example: [[Elevener]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;{{Sym-demo&lt;br /&gt;
|rle = x = 16, y = 16, rule = B/S012345678&lt;br /&gt;
16o$o14bo$o14bo$o7bo6bo$o6bobo5bo$o7bo3bo2bo$o11bo2bo$o3bo7bo2bo$o2bob&lt;br /&gt;
o6bo2bo$o3bo6bo3bo$o9bo4bo$o8bo5bo$o4b4o6bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 160&lt;br /&gt;
|height = 160&lt;br /&gt;
|caption = D2_x symmetry}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== D4 ====&lt;br /&gt;
&#039;&#039;&#039;D4&#039;&#039;&#039;: Symmetric under both reflection and 180° rotation. The reflection symmetry will be with respect to two lines. There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D4_+&#039;&#039;&#039;: The lines are orthogonal. There are three sub-possibilities:&lt;br /&gt;
** &#039;&#039;&#039;D4_+1&#039;&#039;&#039;: Rotation around the center of a cell. The bounding rectangle is odd by odd. Example: [[Dead spark coil]]&lt;br /&gt;
** &#039;&#039;&#039;D4_+2&#039;&#039;&#039;: Rotation around the midpoint of a side of a cell. The bounding rectangle is even by odd. Example: [[Honeycomb]]&lt;br /&gt;
** &#039;&#039;&#039;D4_+4&#039;&#039;&#039;: Rotation around a corner of a cell. The bounding rectangle is even by even. Example: [[A for all]]&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B/S012345678&lt;br /&gt;
31o$o14bo14bo$o14bo14bo$o3b2o4b2o3bo3b2o4b2o3bo$o2bo2bo2bo2bo2bo2bo2bo&lt;br /&gt;
2bo2bo2bo$o2bo2bo2bo2bo2bo2bo2bo2bo2bo2bo$o3b2o4b2o3bo3b2o4b2o3bo$o14b&lt;br /&gt;
o14bo$o14bo14bo$o2b10o2bo2b10o2bo$o2b4o8bo8b4o2bo$o2b4o8bo8b4o2bo$o3b&lt;br /&gt;
2o9bo9b2o3bo$o14bo14bo$o14bo14bo$31o$o14bo14bo$o14bo14bo$o3b2o9bo9b2o&lt;br /&gt;
3bo$o2b4o8bo8b4o2bo$o2b4o8bo8b4o2bo$o2b10o2bo2b10o2bo$o14bo14bo$o14bo&lt;br /&gt;
14bo$o3b2o4b2o3bo3b2o4b2o3bo$o2bo2bo2bo2bo2bo2bo2bo2bo2bo2bo$o2bo2bo2b&lt;br /&gt;
o2bo2bo2bo2bo2bo2bo2bo$o3b2o4b2o3bo3b2o4b2o3bo$o14bo14bo$o14bo14bo$31o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D4_+1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 31, rule = B/S012345678&lt;br /&gt;
32o$o14b2o14bo$o14b2o14bo$o3b2o4b2o3b2o3b2o4b2o3bo$o2bo2bo2bo2bo2b2o2b&lt;br /&gt;
o2bo2bo2bo2bo$o2bo2bo2bo2bo2b2o2bo2bo2bo2bo2bo$o3b2o4b2o3b2o3b2o4b2o3b&lt;br /&gt;
o$o14b2o14bo$o14b2o14bo$o2b10o2b2o2b10o2bo$o2b4o8b2o8b4o2bo$o2b4o8b2o&lt;br /&gt;
8b4o2bo$o3b2o9b2o9b2o3bo$o14b2o14bo$o14b2o14bo$32o$o14b2o14bo$o14b2o&lt;br /&gt;
14bo$o3b2o9b2o9b2o3bo$o2b4o8b2o8b4o2bo$o2b4o8b2o8b4o2bo$o2b10o2b2o2b&lt;br /&gt;
10o2bo$o14b2o14bo$o14b2o14bo$o3b2o4b2o3b2o3b2o4b2o3bo$o2bo2bo2bo2bo2b&lt;br /&gt;
2o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2b2o2bo2bo2bo2bo2bo$o3b2o4b2o3b2o3b2o4b&lt;br /&gt;
2o3bo$o14b2o14bo$o14b2o14bo$32o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D4_+2 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 32, rule = B/S012345678&lt;br /&gt;
32o$o14b2o14bo$o14b2o14bo$o3b2o4b2o3b2o3b2o4b2o3bo$o2bo2bo2bo2bo2b2o2b&lt;br /&gt;
o2bo2bo2bo2bo$o2bo2bo2bo2bo2b2o2bo2bo2bo2bo2bo$o3b2o4b2o3b2o3b2o4b2o3b&lt;br /&gt;
o$o14b2o14bo$o14b2o14bo$o2b10o2b2o2b10o2bo$o2b4o8b2o8b4o2bo$o2b4o8b2o&lt;br /&gt;
8b4o2bo$o3b2o9b2o9b2o3bo$o14b2o14bo$o14b2o14bo$32o$32o$o14b2o14bo$o14b&lt;br /&gt;
2o14bo$o3b2o9b2o9b2o3bo$o2b4o8b2o8b4o2bo$o2b4o8b2o8b4o2bo$o2b10o2b2o2b&lt;br /&gt;
10o2bo$o14b2o14bo$o14b2o14bo$o3b2o4b2o3b2o3b2o4b2o3bo$o2bo2bo2bo2bo2b&lt;br /&gt;
2o2bo2bo2bo2bo2bo$o2bo2bo2bo2bo2b2o2bo2bo2bo2bo2bo$o3b2o4b2o3b2o3b2o4b&lt;br /&gt;
2o3bo$o14b2o14bo$o14b2o14bo$32o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D4_+4 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D4_x&#039;&#039;&#039; The lines are diagonal. There are two sub-possibilities:&lt;br /&gt;
** &#039;&#039;&#039;D4_x1&#039;&#039;&#039;: Rotation around the center of a cell. The bounding rectangle is odd by odd. Example: [[Loaf siamese loaf]]&lt;br /&gt;
** &#039;&#039;&#039;D4_x4&#039;&#039;&#039;: Rotation around a corner of a cell. The bounding rectangle is even by even. Example: [[Long ship]]&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B/S012345678&lt;br /&gt;
31o$o14bo14bo$o14bo14bo$o7bo6bo5b3o6bo$o6bobo5bo5bobo6bo$o7bo3bo2bo2bo&lt;br /&gt;
2b3o6bo$o11bo2bo2b2o10bo$o3bo7bo2bo2b2o5b3o2bo$o2bobo6bo2bo2b3o4bobo2b&lt;br /&gt;
o$o3bo6bo3bo3b2o4b3o2bo$o9bo4bo3b4o7bo$o8bo5bo4b5o5bo$o4b4o6bo6b4o4bo$&lt;br /&gt;
o14bo14bo$o14bo14bo$31o$o14bo14bo$o14bo14bo$o4b4o6bo6b4o4bo$o5b5o4bo5b&lt;br /&gt;
o8bo$o7b4o3bo4bo9bo$o2b3o4b2o3bo3bo6bo3bo$o2bobo4b3o2bo2bo6bobo2bo$o2b&lt;br /&gt;
3o5b2o2bo2bo7bo3bo$o10b2o2bo2bo11bo$o6b3o2bo2bo2bo3bo7bo$o6bobo5bo5bob&lt;br /&gt;
o6bo$o6b3o5bo6bo7bo$o14bo14bo$o14bo14bo$31o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D4_x1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 32, rule = B/S012345678&lt;br /&gt;
32o$o14b2o14bo$o14b2o14bo$o7bo6b2o5b3o6bo$o6bobo5b2o5bobo6bo$o7bo3bo2b&lt;br /&gt;
2o2bo2b3o6bo$o11bo2b2o2b2o10bo$o3bo7bo2b2o2b2o5b3o2bo$o2bobo6bo2b2o2b&lt;br /&gt;
3o4bobo2bo$o3bo6bo3b2o3b2o4b3o2bo$o9bo4b2o3b4o7bo$o8bo5b2o4b5o5bo$o4b&lt;br /&gt;
4o6b2o6b4o4bo$o14b2o14bo$o14b2o14bo$32o$32o$o14b2o14bo$o14b2o14bo$o4b&lt;br /&gt;
4o6b2o6b4o4bo$o5b5o4b2o5bo8bo$o7b4o3b2o4bo9bo$o2b3o4b2o3b2o3bo6bo3bo$o&lt;br /&gt;
2bobo4b3o2b2o2bo6bobo2bo$o2b3o5b2o2b2o2bo7bo3bo$o10b2o2b2o2bo11bo$o6b&lt;br /&gt;
3o2bo2b2o2bo3bo7bo$o6bobo5b2o5bobo6bo$o6b3o5b2o6bo7bo$o14b2o14bo$o14b&lt;br /&gt;
2o14bo$32o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D4_x4 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== D8 ====&lt;br /&gt;
&#039;&#039;&#039;D8&#039;&#039;&#039;: Symmetric under both reflection and 90° rotation. The reflection symmetry will be with respect to horizontal, vertical, and diagonal lines. There are three possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D8_1&#039;&#039;&#039;: Rotation around the center of a cell. The bounding rectangle is odd by odd. Example: [[Pulsar]]&lt;br /&gt;
* &#039;&#039;&#039;D8_2&#039;&#039;&#039;: Rotation around a edge of a cell. The bounding rectangle is even by odd. This symmetry is not preserved by Life (reverting to D4_+2), but is with most bilaterally symmetric rules.&lt;br /&gt;
* &#039;&#039;&#039;D8_4&#039;&#039;&#039;: Rotation around a corner of a cell. The bounding rectangle is even by even. Example: [[Lake 2]]&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B/S012345678&lt;br /&gt;
31o$o14bo14bo$o14bo14bo$o7bo6bo6bo7bo$o6bobo5bo5bobo6bo$o7bo3bo2bo2bo&lt;br /&gt;
3bo7bo$o11bo2bo2bo11bo$o3bo7bo2bo2bo7bo3bo$o2bobo6bo2bo2bo6bobo2bo$o3b&lt;br /&gt;
o6bo3bo3bo6bo3bo$o9bo4bo4bo9bo$o8bo5bo5bo8bo$o4b4o6bo6b4o4bo$o14bo14bo&lt;br /&gt;
$o14bo14bo$31o$o14bo14bo$o14bo14bo$o4b4o6bo6b4o4bo$o8bo5bo5bo8bo$o9bo&lt;br /&gt;
4bo4bo9bo$o3bo6bo3bo3bo6bo3bo$o2bobo6bo2bo2bo6bobo2bo$o3bo7bo2bo2bo7bo&lt;br /&gt;
3bo$o11bo2bo2bo11bo$o7bo3bo2bo2bo3bo7bo$o6bobo5bo5bobo6bo$o7bo6bo6bo7b&lt;br /&gt;
o$o14bo14bo$o14bo14bo$31o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D8_1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 31, rule = B/S012345678&lt;br /&gt;
32o$o14b2o14bo$o14b2o14bo$o7bo6b2o6bo7bo$o6bobo5b2o5bobo6bo$o7bo3bo2b&lt;br /&gt;
2o2bo3bo7bo$o11bo2b2o2bo11bo$o3bo7bo2b2o2bo7bo3bo$o2bobo6bo2b2o2bo6bob&lt;br /&gt;
o2bo$o3bo6bo3b2o3bo6bo3bo$o9bo4b2o4bo9bo$o8bo5b2o5bo8bo$o4b4o6b2o6b4o&lt;br /&gt;
4bo$o14b2o14bo$o14b2o14bo$32o$o14b2o14bo$o14b2o14bo$o4b4o6b2o6b4o4bo$o&lt;br /&gt;
8bo5b2o5bo8bo$o9bo4b2o4bo9bo$o3bo6bo3b2o3bo6bo3bo$o2bobo6bo2b2o2bo6bob&lt;br /&gt;
o2bo$o3bo7bo2b2o2bo7bo3bo$o11bo2b2o2bo11bo$o7bo3bo2b2o2bo3bo7bo$o6bobo&lt;br /&gt;
5b2o5bobo6bo$o7bo6b2o6bo7bo$o14b2o14bo$o14b2o14bo$32o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D8_2 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 32, rule = B/S012345678&lt;br /&gt;
32o$o14b2o14bo$o14b2o14bo$o7bo6b2o6bo7bo$o6bobo5b2o5bobo6bo$o7bo3bo2b&lt;br /&gt;
2o2bo3bo7bo$o11bo2b2o2bo11bo$o3bo7bo2b2o2bo7bo3bo$o2bobo6bo2b2o2bo6bob&lt;br /&gt;
o2bo$o3bo6bo3b2o3bo6bo3bo$o9bo4b2o4bo9bo$o8bo5b2o5bo8bo$o4b4o6b2o6b4o&lt;br /&gt;
4bo$o14b2o14bo$o14b2o14bo$32o$32o$o14b2o14bo$o14b2o14bo$o4b4o6b2o6b4o&lt;br /&gt;
4bo$o8bo5b2o5bo8bo$o9bo4b2o4bo9bo$o3bo6bo3b2o3bo6bo3bo$o2bobo6bo2b2o2b&lt;br /&gt;
o6bobo2bo$o3bo7bo2b2o2bo7bo3bo$o11bo2b2o2bo11bo$o7bo3bo2b2o2bo3bo7bo$o&lt;br /&gt;
6bobo5b2o5bobo6bo$o7bo6b2o6bo7bo$o14b2o14bo$o14b2o14bo$32o!&lt;br /&gt;
|width = 320&lt;br /&gt;
|height = 320&lt;br /&gt;
|caption = D8_4 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To preserve D8_2 symmetry, the following [[isotropic non-totalistic]] transitions must either all exist simultaneously with all other transitions in the same line or none should:&amp;lt;ref name=&amp;quot;post143859&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*B4i=B2a=B2i=B1e&lt;br /&gt;
*S6a=S7e=S4t=S6i&lt;br /&gt;
*S4c=S3y=S4q&lt;br /&gt;
*B1c=B2c=B4c&lt;br /&gt;
*S3a=S1e=S0&lt;br /&gt;
*S7c=S6c=S4e&lt;br /&gt;
*B5y=B4w=B4e&lt;br /&gt;
*B8=B7e=B5a&lt;br /&gt;
*B5e=B4n&lt;br /&gt;
*B4a=B5i&lt;br /&gt;
*B4t=B5r&lt;br /&gt;
*S5y=S5q&lt;br /&gt;
*S5e=S5j&lt;br /&gt;
*B6i=B3i&lt;br /&gt;
*B6c=B6k&lt;br /&gt;
*S4i=S3r&lt;br /&gt;
*B3j=B3e&lt;br /&gt;
*B3y=B3q&lt;br /&gt;
*S2k=S2c&lt;br /&gt;
*S4a=S3i&lt;br /&gt;
*S3e=S4r&lt;br /&gt;
*S5i=S2i&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== On a hexagonal or triangular grid ==&lt;br /&gt;
[[Hexagonal neighbourhood|Hexagonal]] and [[triangular neighbourhood|triangular]] grids have the same set of admissible symmetries as each other (by planar&amp;lt;ref&amp;gt;{{LinkMathworld|filename=DualTessellation.html|pagename=Dual tessellation}}&amp;lt;/ref&amp;gt; or polytopic duality&amp;lt;ref&amp;gt;{{LinkWikipedia|Dual_polyhedron#Dual_polytopes_and_tessellations|name=Dual polyhedron|nobullet=nobullet}}&amp;lt;/ref&amp;gt; - see also [[Schläfli symbol]]), but these are not the same symmetries as square grids. Due to how hexagonal and triangular grids are handled by programs such as [[Golly]] and [[LifeViewer]], they will also appear markedly different in these respects. C2, D2, and D4 symmetries are still compatible, but C4 symmetries become meaningless because the cells no longer have a side count that is perfectly divisible by 4. Other symmetries are exclusive to these alternative grids, as indicated below:&lt;br /&gt;
&lt;br /&gt;
* C1&lt;br /&gt;
* C2_1&lt;br /&gt;
* C2_4&lt;br /&gt;
* C3_1&lt;br /&gt;
* C3_3 (unsupported by apgsearch)&lt;br /&gt;
* C6&lt;br /&gt;
* D2_xo&lt;br /&gt;
* D2_x&lt;br /&gt;
* D4_x1&lt;br /&gt;
* D4_x4&lt;br /&gt;
* D6_1&lt;br /&gt;
* D6_1o&lt;br /&gt;
* D6_3 (unsupported by apgsearch)&lt;br /&gt;
* D12&lt;br /&gt;
&lt;br /&gt;
[[apgsearch]] currently supports most higher symmetries for hexagonal rules; the rest (C3_3 and D6_3) will be added in a future version.&amp;lt;ref name=&amp;quot;post66638&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another type of rotational symmetry which may not have been accounted for in the above list, arising as an alternate form of C2_2, was described in November 2021. Whether this is an actually distinct type of symmetry, however, is unknown and needs investigation.&amp;lt;ref name=&amp;quot;post137220&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rotational ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible&amp;quot;&amp;gt;&lt;br /&gt;
Click on &amp;quot;Expand&amp;quot; to the right to view a list of hexagonal/triangular rotational symmetries. &lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== C1 ====&lt;br /&gt;
&#039;&#039;&#039;C1&#039;&#039;&#039;: Symmetric under 360° rotation. This is essentially no symmetry at all.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;{{Sym-demo&lt;br /&gt;
|rle = x = 16, y = 16, rule = B/S0123456H&lt;br /&gt;
16o$o14bo$o14bo$o5b2o7bo$o5bobo6bo$o6b2o6bo$o2b2o10bo$o2bobo9bo$o3b2o&lt;br /&gt;
4b2o3bo$o8b2o4bo$o7b2o5bo$o7b3o4bo$o8b2o4bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 200&lt;br /&gt;
|height = 200&lt;br /&gt;
|caption = C1 symmetry&lt;br /&gt;
}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== C2 ====&lt;br /&gt;
&#039;&#039;&#039;C2&#039;&#039;&#039;: Symmetric under 180° rotation. There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;C2_1&#039;&#039;&#039;: Rotation around the center of a cell.&lt;br /&gt;
* &#039;&#039;&#039;C2_2&#039;&#039;&#039;: Rotation around the midpoint of a side of a cell.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B/S0123456H&lt;br /&gt;
15b16o$15bo14bo$15bo14bo$15bo4b2o8bo$15bo4b3o7bo$15bo5b2o7bo$15bo4b2o&lt;br /&gt;
8bo$15bo3b2o4b2o3bo$15bo9bobo2bo$15bo10b2o2bo$15bo6b2o6bo$15bo6bobo5bo&lt;br /&gt;
$15bo7b2o5bo$15bo14bo$15bo14bo$31o$o14bo$o14bo$o5b2o7bo$o5bobo6bo$o6b&lt;br /&gt;
2o6bo$o2b2o10bo$o2bobo9bo$o3b2o4b2o3bo$o8b2o4bo$o7b2o5bo$o7b3o4bo$o8b&lt;br /&gt;
2o4bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = C2_1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 32, rule = B/S0123456H&lt;br /&gt;
16b16o$16bo14bo$16bo14bo$16bo4b2o8bo$16bo4b3o7bo$16bo5b2o7bo$16bo4b2o&lt;br /&gt;
8bo$16bo3b2o4b2o3bo$16bo9bobo2bo$16bo10b2o2bo$16bo6b2o6bo$16bo6bobo5bo&lt;br /&gt;
$16bo7b2o5bo$16bo14bo$16bo14bo$16b16o$16o$o14bo$o14bo$o5b2o7bo$o5bobo&lt;br /&gt;
6bo$o6b2o6bo$o2b2o10bo$o2bobo9bo$o3b2o4b2o3bo$o8b2o4bo$o7b2o5bo$o7b3o&lt;br /&gt;
4bo$o8b2o4bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = C2_4 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== C3 ====&lt;br /&gt;
&#039;&#039;&#039;C3&#039;&#039;&#039;: Symmetric under 120° rotation. There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;C3_1&#039;&#039;&#039;: Rotation around the center of a cell.&lt;br /&gt;
* &#039;&#039;&#039;C3_3&#039;&#039;&#039;: Rotation around a corner of a cell. (unsupported by apgsearch)&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 46, y = 46, rule = B/S0123456H&lt;br /&gt;
o$2o$obo$o2bo$o3bo$o4bo$o5bo$o6bo$o7bo$o8bo$o9bo$o6b2o2bo$o2b2o2bobo2b&lt;br /&gt;
o$o2b3o2b2o3bo$o3b2o8bo$o5bo8bo$bo4bo8bo$2bo4bo2b2o3bo$3bo3bo2bobo2bo$&lt;br /&gt;
4bo6b2o2bo$5bo9bo$6bo8bo$7bo7bo$8bo6bo$9bo5bo$10bo4bo$11bo3bo$12bo2bo$&lt;br /&gt;
13bobo$14b2o$31o$o14b2o14bo$o14bobo14bo$o5b2o7bo2bo14bo$o5bobo6bo3bo7b&lt;br /&gt;
o6bo$o6b2o6bo4bo7b2ob2o2bo$o2b2o10bo5bo8b4o2bo$o2bobo9bo6bo3b2o4b2o3bo&lt;br /&gt;
$o3b2o4b2o3bo7bo2bobo9bo$o8b2o4bo8bo2b2o10bo$o7b2o5bo9bo6b2o6bo$o7b3o&lt;br /&gt;
4bo10bo5bobo6bo$o8b2o4bo11bo5b2o7bo$o14bo12bo14bo$o14bo13bo14bo$16o14b&lt;br /&gt;
16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = C3_1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 48, y = 48, rule = B/S0123456H&lt;br /&gt;
o$2o$obo$o2bo$o3bo$o4bo$o5bo$o6bo$o7bo$o8bo$o9bo$o6b2o2bo$o2b2o2bobo2b&lt;br /&gt;
o$o2b3o2b2o3bo$o3b2o8bo$o5bo8bo$bo4bo8bo$2bo4bo2b2o3bo$3bo3bo2bobo2bo$&lt;br /&gt;
4bo6b2o2bo$5bo9bo$6bo8bo$7bo7bo$8bo6bo$9bo5bo$10bo4bo$11bo3bo$12bo2bo$&lt;br /&gt;
13bobo$14b2o$15bo2$16ob16o$o14bo2bo14bo$o14bo3bo14bo$o5b2o7bo4bo14bo$o&lt;br /&gt;
5bobo6bo5bo7bo6bo$o6b2o6bo6bo7b2ob2o2bo$o2b2o10bo7bo8b4o2bo$o2bobo9bo&lt;br /&gt;
8bo3b2o4b2o3bo$o3b2o4b2o3bo9bo2bobo9bo$o8b2o4bo10bo2b2o10bo$o7b2o5bo&lt;br /&gt;
11bo6b2o6bo$o7b3o4bo12bo5bobo6bo$o8b2o4bo13bo5b2o7bo$o14bo14bo14bo$o&lt;br /&gt;
14bo15bo14bo$16o16b16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = C3_3 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== C6 ====&lt;br /&gt;
&#039;&#039;&#039;C6&#039;&#039;&#039;: Symmetric under 60° rotation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;{{Sym-demo&lt;br /&gt;
|rle = x = 61, y = 61, rule = B/S0123456H&lt;br /&gt;
15bo$15b2o$15bobo$15bo2bo$15bo3bo$15bo4bo$15bo5bo$15bo6bo$15bo7bo$15bo&lt;br /&gt;
8bo$15bo9bo$15bo6b2o2bo$15bo2b2o2bobo2bo$15bo2b3o2b2o3bo$15bo3b2o8bo$&lt;br /&gt;
16o5bo8b16o$bo14bo4bo8bo14bo$2bo14bo4bo2b2o3bo14bo$3bo7b2o5bo3bo2bobo&lt;br /&gt;
2bo4b2o8bo$4bo6bobo5bo6b2o2bo4b3o7bo$5bo6b2o6bo9bo5b2o7bo$6bo10b2o2bo&lt;br /&gt;
8bo4b2o8bo$7bo9bobo2bo7bo3b2o4b2o3bo$8bo3b2o4b2o3bo6bo9bobo2bo$9bo2b4o&lt;br /&gt;
8bo5bo10b2o2bo$10bo2b2ob2o7bo4bo6b2o6bo$11bo6bo7bo3bo6bobo5bo$12bo14bo&lt;br /&gt;
2bo7b2o5bo$13bo14bobo14bo$14bo14b2o14bo$15b31o$15bo14b2o14bo$15bo14bob&lt;br /&gt;
o14bo$15bo5b2o7bo2bo14bo$15bo5bobo6bo3bo7bo6bo$15bo6b2o6bo4bo7b2ob2o2b&lt;br /&gt;
o$15bo2b2o10bo5bo8b4o2bo$15bo2bobo9bo6bo3b2o4b2o3bo$15bo3b2o4b2o3bo7bo&lt;br /&gt;
2bobo9bo$15bo8b2o4bo8bo2b2o10bo$15bo7b2o5bo9bo6b2o6bo$15bo7b3o4bo2b2o&lt;br /&gt;
6bo5bobo6bo$15bo8b2o4bo2bobo2bo3bo5b2o7bo$15bo14bo3b2o2bo4bo14bo$15bo&lt;br /&gt;
14bo8bo4bo14bo$15b16o8bo5b16o$31bo8b2o3bo$32bo3b2o2b3o2bo$33bo2bobo2b&lt;br /&gt;
2o2bo$34bo2b2o6bo$35bo9bo$36bo8bo$37bo7bo$38bo6bo$39bo5bo$40bo4bo$41bo&lt;br /&gt;
3bo$42bo2bo$43bobo$44b2o$45bo!&lt;br /&gt;
|width = 500&lt;br /&gt;
|height = 500&lt;br /&gt;
|caption = C6 symmetry}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reflectional ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible&amp;quot;&amp;gt;&lt;br /&gt;
Click on &amp;quot;Expand&amp;quot; to the right to view a list of hexagonal/triangular reflectional symmetries. &lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== D2 ====&lt;br /&gt;
&#039;&#039;&#039;D2&#039;&#039;&#039;: There is line symmetry. There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D2_x&#039;&#039;&#039;: Through the vertices of a cell. &lt;br /&gt;
* &#039;&#039;&#039;D2_xo&#039;&#039;&#039;: Through the edges of a cell.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 16, y = 16, rule = B/S0123456H&lt;br /&gt;
16o$o14bo$o14bo$o5b2o7bo$o5bobo6bo$o2bo3b2o6bo$o2bo11bo$o2bo6b2o3bo$o&lt;br /&gt;
2bo6bobo2bo$o3bo6b2o2bo$o4bo9bo$o5bo8bo$o6b4o4bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 300&lt;br /&gt;
|height = 300&lt;br /&gt;
|caption = D2_x symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B/S0123456H&lt;br /&gt;
16o$bo14bo$2bo14bo$3bo8b2o4bo$4bo7b3o4bo$5bo7b2o5bo$6bo8b2o4bo$7bo3b2o&lt;br /&gt;
4b2o3bo$8bo2bobo9bo$9bo2b2o10bo$10bo6b2o6bo$11bo5bobo6bo$12bo5b2o7bo$&lt;br /&gt;
13bo14bo$14bo14bo$15b16o$15bo14bo$15bo14bo$15bo5b2o7bo$15bo5bobo6bo$15b&lt;br /&gt;
o6b2o6bo$15bo2b2o10bo$15bo2bobo9bo$15bo3b2o4b2o3bo$15bo8b2o4bo$15bo7b&lt;br /&gt;
2o5bo$15bo7b3o4bo$15bo8b2o4bo$15bo14bo$15bo14bo$15b16o!&lt;br /&gt;
|width = 300&lt;br /&gt;
|height = 300&lt;br /&gt;
|caption = D2_xo symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== D4 ====&lt;br /&gt;
&#039;&#039;&#039;D4&#039;&#039;&#039;: Symmetric under both reflection and 180° rotation. The reflection symmetry will be with respect to two lines. There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D4_x1&#039;&#039;&#039;: Rotation around the center of a cell.&lt;br /&gt;
* &#039;&#039;&#039;D4_x4&#039;&#039;&#039;: Rotation around the edges of a cell.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B/S0123456H&lt;br /&gt;
15b16o$15bo14bo$15bo14bo$15bo4b4o6bo$15bo8bo5bo$15bo9bo4bo$15bo2b2o6bo&lt;br /&gt;
3bo$15bo2bobo6bo2bo$15bo3b2o6bo2bo$15bo11bo2bo$15bo6b2o3bo2bo$15bo6bob&lt;br /&gt;
o5bo$15bo7b2o5bo$15bo14bo$15bo14bo$31o$o14bo$o14bo$o5b2o7bo$o5bobo6bo$&lt;br /&gt;
o2bo3b2o6bo$o2bo11bo$o2bo6b2o3bo$o2bo6bobo2bo$o3bo6b2o2bo$o4bo9bo$o5bo&lt;br /&gt;
8bo$o6b4o4bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = D4_x1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 32, y = 32, rule = B/S0123456H&lt;br /&gt;
16b16o$16bo14bo$16bo14bo$16bo4b4o6bo$16bo8bo5bo$16bo9bo4bo$16bo2b2o6bo&lt;br /&gt;
3bo$16bo2bobo6bo2bo$16bo3b2o6bo2bo$16bo11bo2bo$16bo6b2o3bo2bo$16bo6bob&lt;br /&gt;
o5bo$16bo7b2o5bo$16bo14bo$16bo14bo$16b16o$16o$o14bo$o14bo$o5b2o7bo$o5b&lt;br /&gt;
obo6bo$o2bo3b2o6bo$o2bo11bo$o2bo6b2o3bo$o2bo6bobo2bo$o3bo6b2o2bo$o4bo&lt;br /&gt;
9bo$o5bo8bo$o6b4o4bo$o14bo$o14bo$16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = D4_x4 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== D6 ====&lt;br /&gt;
&#039;&#039;&#039;D6&#039;&#039;&#039;: Symmetric under both reflection and 120° rotation. The reflection symmetry will be with respect to three lines. There are three possibilities:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D6_1&#039;&#039;&#039;: Rotation around the center of a cell with lines going through the edges of cells.&lt;br /&gt;
* &#039;&#039;&#039;D6_1o&#039;&#039;&#039;: Rotation around the center of a cell with lines going through the centers of cells.&lt;br /&gt;
* &#039;&#039;&#039;D6_3&#039;&#039;&#039;: Rotation around the corner of a cell. (unsupported by apgsearch)&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left: auto; margin-right: auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 46, y = 46, rule = B/S0123456H&lt;br /&gt;
o$2o$obo$o2bo$o3bo$o4bo$o5bo$o6bo$o7bo$o8bo$o2b5o2bo$o2bo4bo2bo$o2bo5b&lt;br /&gt;
o2bo$o2bo6bo2bo$o13bo$o14bo$bo13bo$2bo3b2o2b2o3bo$3bo2bobobobo2bo$4bo&lt;br /&gt;
2b2o2b2o2bo$5bo9bo$6bo8bo$7bo7bo$8bo6bo$9bo5bo$10bo4bo$11bo3bo$12bo2bo&lt;br /&gt;
$13bobo$14b2o$31o$o14b2o14bo$o14bobo14bo$o5b2o7bo2bo7b2o5bo$o5bobo6bo&lt;br /&gt;
3bo6bobo5bo$o2bo3b2o6bo4bo6b2o3bo2bo$o2bo11bo5bo11bo2bo$o2bo6b2o3bo6bo&lt;br /&gt;
3b2o6bo2bo$o2bo6bobo2bo7bo2bobo6bo2bo$o3bo6b2o2bo8bo2b2o6bo3bo$o4bo9bo&lt;br /&gt;
9bo9bo4bo$o5bo8bo10bo8bo5bo$o6b4o4bo11bo4b4o6bo$o14bo12bo14bo$o14bo13b&lt;br /&gt;
o14bo$16o14b16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = D6_1 symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 31, y = 31, rule = B2/S34H&lt;br /&gt;
16o$2o14bo$obo14bo$o2bo4b5o5bo$o3bo8b2o4bo$o4bo9b2o3bo$o5bo3b2o5b2o2bo&lt;br /&gt;
$o6bo2bobo6bo2bo$o2bo4bo2b2o7bo2bo$o2bo5bo11bo2bo$o2bo2b2o2bo7b2o2bo2b&lt;br /&gt;
o$o2bo2bobo2bo6bobo5bo$o2bo3b2o3bo6b2o6bo$o3bo8bo14bo$o3bo9bo14bo$o4bo&lt;br /&gt;
9b16o$bo3bo9bo14bo$2bo3bo8bo14bo$3bo2bo3b2o3bo6b2o6bo$4bo2bo2bobo2bo6b&lt;br /&gt;
obo5bo$5bo2bo2b2o2bo7b2o2bo2bo$6bo2bo5bo11bo2bo$7bo2bo4bo2b2o7bo2bo$8b&lt;br /&gt;
o6bo2bobo6bo2bo$9bo5bo3b2o5b2o2bo$10bo4bo9b2o3bo$11bo3bo8b2o4bo$12bo2b&lt;br /&gt;
o4b5o5bo$13bobo14bo$14b2o14bo$15b16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = D6_1o symmetry}}&lt;br /&gt;
| {{Sym-demo&lt;br /&gt;
|rle = x = 48, y = 48, rule = B/S0123456H&lt;br /&gt;
o$2o$obo$o2bo$o3bo$o4bo$o5bo$o6bo$o7bo$o8bo$o2b5o2bo$o2bo4bo2bo$o2bo5b&lt;br /&gt;
o2bo$o2bo6bo2bo$o13bo$o14bo$bo13bo$2bo3b2o2b2o3bo$3bo2bobobobo2bo$4bo&lt;br /&gt;
2b2o2b2o2bo$5bo9bo$6bo8bo$7bo7bo$8bo6bo$9bo5bo$10bo4bo$11bo3bo$12bo2bo&lt;br /&gt;
$13bobo$14b2o$15bo2$16ob16o$o14bo2bo14bo$o14bo3bo14bo$o5b2o7bo4bo7b2o&lt;br /&gt;
5bo$o5bobo6bo5bo6bobo5bo$o2bo3b2o6bo6bo6b2o3bo2bo$o2bo11bo7bo11bo2bo$o&lt;br /&gt;
2bo6b2o3bo8bo3b2o6bo2bo$o2bo6bobo2bo9bo2bobo6bo2bo$o3bo6b2o2bo10bo2b2o&lt;br /&gt;
6bo3bo$o4bo9bo11bo9bo4bo$o5bo8bo12bo8bo5bo$o6b4o4bo13bo4b4o6bo$o14bo&lt;br /&gt;
14bo14bo$o14bo15bo14bo$16o16b16o!&lt;br /&gt;
|width = 400&lt;br /&gt;
|height = 400&lt;br /&gt;
|caption = D6_3 symmetry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== D12 ====&lt;br /&gt;
&#039;&#039;&#039;D12&#039;&#039;&#039;: Symmetric under both reflection and 60° rotation. The reflection symmetry will be with respect to six lines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;{{Sym-demo&lt;br /&gt;
|rle = x = 61, y = 61, rule = B/S0123456H&lt;br /&gt;
15bo$15b2o$15bobo$15bo2bo$15bo3bo$15bo4bo$15bo5bo$15bo6bo$15bo7bo$15bo&lt;br /&gt;
8bo$15bo2b5o2bo$15bo2bo4bo2bo$15bo2bo5bo2bo$15bo2bo6bo2bo$15bo13bo$16o&lt;br /&gt;
14b16o$bo14bo13bo14bo$2bo14bo3b2o2b2o3bo14bo$3bo6b4o4bo2bobobobo2bo4b&lt;br /&gt;
4o6bo$4bo5bo8bo2b2o2b2o2bo8bo5bo$5bo4bo9bo9bo9bo4bo$6bo3bo6b2o2bo8bo2b&lt;br /&gt;
2o6bo3bo$7bo2bo6bobo2bo7bo2bobo6bo2bo$8bo2bo6b2o3bo6bo3b2o6bo2bo$9bo2b&lt;br /&gt;
o11bo5bo11bo2bo$10bo2bo3b2o6bo4bo6b2o3bo2bo$11bo5bobo6bo3bo6bobo5bo$&lt;br /&gt;
12bo5b2o7bo2bo7b2o5bo$13bo14bobo14bo$14bo14b2o14bo$15b31o$15bo14b2o14b&lt;br /&gt;
o$15bo14bobo14bo$15bo5b2o7bo2bo7b2o5bo$15bo5bobo6bo3bo6bobo5bo$15bo2bo&lt;br /&gt;
3b2o6bo4bo6b2o3bo2bo$15bo2bo11bo5bo11bo2bo$15bo2bo6b2o3bo6bo3b2o6bo2bo&lt;br /&gt;
$15bo2bo6bobo2bo7bo2bobo6bo2bo$15bo3bo6b2o2bo8bo2b2o6bo3bo$15bo4bo9bo&lt;br /&gt;
9bo9bo4bo$15bo5bo8bo2b2o2b2o2bo8bo5bo$15bo6b4o4bo2bobobobo2bo4b4o6bo$&lt;br /&gt;
15bo14bo3b2o2b2o3bo14bo$15bo14bo13bo14bo$15b16o14b16o$31bo13bo$32bo2bo&lt;br /&gt;
6bo2bo$33bo2bo5bo2bo$34bo2bo4bo2bo$35bo2b5o2bo$36bo8bo$37bo7bo$38bo6bo&lt;br /&gt;
$39bo5bo$40bo4bo$41bo3bo$42bo2bo$43bobo$44b2o$45bo!&lt;br /&gt;
|width = 500&lt;br /&gt;
|height = 500&lt;br /&gt;
|caption = D12 symmetry}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post138823&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Help with symmetries&lt;br /&gt;
|p      = 138823&lt;br /&gt;
|author = GUYTU6J&lt;br /&gt;
|date   = December 13, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post143859&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Truly Bilateral Life-Like rules&lt;br /&gt;
|p      = 143859&lt;br /&gt;
|author = LaundryPizza03&lt;br /&gt;
|date   = April 6, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post66638&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: apgsearch v4.0&lt;br /&gt;
|p      = 66638&lt;br /&gt;
|author = Adam P. Goucher&lt;br /&gt;
|date   = December 20, 2018&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post137220&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Help with symmetries&lt;br /&gt;
|p      = 137220&lt;br /&gt;
|author = GUYTU6J&lt;br /&gt;
|date   = November 2, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{LinkLexicon|lex_s.htm#symmetric|name=Symmetric}}&lt;br /&gt;
* {{LinkForumThread|f=7|t=1898|title=Help with symmetries}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Everything else]]&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Trans-carrier-tie&amp;diff=133940</id>
		<title>Trans-carrier-tie</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Trans-carrier-tie&amp;diff=133940"/>
		<updated>2023-07-23T13:19:10Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: job log&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stilllife&lt;br /&gt;
|name             = Trans-carrier-tie&lt;br /&gt;
|pname            = transcarriertie&lt;br /&gt;
|c                = 12&lt;br /&gt;
|bx               = 7&lt;br /&gt;
|by               = 7&lt;br /&gt;
|fc               = 33.3&lt;br /&gt;
|discoverer       = Robert Wainwright&lt;br /&gt;
|discoverer2      = Everett Boyer&lt;br /&gt;
|discoveryear     = 1973&lt;br /&gt;
|rulemin          = B/S23&lt;br /&gt;
|rulemax          = B35678/S012345678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]], [[HighLife]]&lt;br /&gt;
|isorulemin       = B/S2ae3k&lt;br /&gt;
|isorulemax       = B2-ak34-qw5678/S012345678&lt;br /&gt;
|synthesis        = 6&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|apgcode          = xs12_08o6413z32&lt;br /&gt;
|niemiecid        = 12.10&lt;br /&gt;
|pentadecathlonid = 12.77&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;trans-carrier-tie&#039;&#039;&#039; is a {{slcells|12|text=12-cell}} [[still life]].&lt;br /&gt;
&lt;br /&gt;
== Construction ==&lt;br /&gt;
In July 2023, [[GUYTU6J]] found a {{gliders|6|text=6-glider}} [[glider synthesis|synthesis]] for this still life.&amp;lt;ref name=&amp;quot;post164071&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;j4720044714&amp;quot; /&amp;gt; Several known syntheses can be found in [[Mark Niemiec&#039;s database]].&amp;lt;ref name=&amp;quot;niemiec&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = x = 39, y = 29, rule = B3/S23&lt;br /&gt;
18bo$17bo$2bo14b3o$obo$b2o5$18bobo5bo$18b2o6bobo3b2o$11bo7bo6b2o4bo2bo&lt;br /&gt;
$9bobo22b2o$10b2o24b2o$36bo$38bo$37b2o3$10b2o$9bobo$11bo5$24b3o$24bo$&lt;br /&gt;
25bo!&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 400 THEME Book ZOOM 10 X 0 Y 0 AUTOSTART GPS 12 T 0 PAUSE 3 T 19 PAUSE 1 T 20 PAUSE 1 T 38 PAUSE 2 LOOP 39 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A 7G synthesis&amp;lt;ref name=&amp;quot;niemiec&amp;quot; /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = x = 33, y = 22, rule = B3/S23&lt;br /&gt;
14bo$13bo$7bo5b3o$8b2o$7b2o2$19bo$19bobo$19b2o$26b2o$4b2o20bo2bo$3bobo&lt;br /&gt;
22b2o$5bo12bo11b2o$17b2o11bo$17bobo12bo$31b2o$3o6b3o$2bo8bo$bo8bo$4b2o&lt;br /&gt;
$3bobo$5bo!&lt;br /&gt;
|viewerconfig = #C [[ THEME Book ZOOM 10 X 0 Y 0 AUTOSTART GPS 12 T 0 PAUSE 3 T 25 PAUSE 2 LOOP 26 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A 8G synthesis&amp;lt;ref name=&amp;quot;niemiec&amp;quot; /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Occurrence ==&lt;br /&gt;
&lt;br /&gt;
Among the 121 still lifes with 12 cells, this is the 101st [[List of common still lifes|most common still life]] according to [[Catagolue]].&lt;br /&gt;
&lt;br /&gt;
There are no collisions in [[Octohash database|octohash]], octo3obj or octo3g databases with this still life occurring in the ash.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Cis-carrier-tie]]&lt;br /&gt;
* [[Trans-snake-tie]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post164071&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format     = ref&lt;br /&gt;
|p          = 164071&lt;br /&gt;
|title      = Re: Thread for your fast components&lt;br /&gt;
|author     = GUYTU6J&lt;br /&gt;
|date       = July 23, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;j4720044714&amp;quot;&amp;gt;{{CiteCatagolueJob|job=4720044714|date=2023}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;niemiec&amp;quot;&amp;gt;{{LinkNiemiec|p1-12.htm|The 121 twelve-bit still-lifes|rle=12/12-10.rle|nobullet=nobullet}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{LinkCatagolue|xs12_08o6413z32}}&lt;br /&gt;
* {{LinkPentadecathlonObject|12.77}}&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|diagonal2}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Trans-carrier-tie&amp;diff=133937</id>
		<title>Trans-carrier-tie</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Trans-carrier-tie&amp;diff=133937"/>
		<updated>2023-07-23T13:15:39Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: 6G synthesis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stilllife&lt;br /&gt;
|name             = Trans-carrier-tie&lt;br /&gt;
|pname            = transcarriertie&lt;br /&gt;
|c                = 12&lt;br /&gt;
|bx               = 7&lt;br /&gt;
|by               = 7&lt;br /&gt;
|fc               = 33.3&lt;br /&gt;
|discoverer       = Robert Wainwright&lt;br /&gt;
|discoverer2      = Everett Boyer&lt;br /&gt;
|discoveryear     = 1973&lt;br /&gt;
|rulemin          = B/S23&lt;br /&gt;
|rulemax          = B35678/S012345678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]], [[HighLife]]&lt;br /&gt;
|isorulemin       = B/S2ae3k&lt;br /&gt;
|isorulemax       = B2-ak34-qw5678/S012345678&lt;br /&gt;
|synthesis        = 6&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|apgcode          = xs12_08o6413z32&lt;br /&gt;
|niemiecid        = 12.10&lt;br /&gt;
|pentadecathlonid = 12.77&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;trans-carrier-tie&#039;&#039;&#039; is a {{slcells|12|text=12-cell}} [[still life]].&lt;br /&gt;
&lt;br /&gt;
== Construction ==&lt;br /&gt;
In July 2023, [[GUYTU6J]] found a {{gliders|6|text=6-glider}} [[glider synthesis|synthesis]] for this still life.&amp;lt;ref name=&amp;quot;post164071&amp;quot; /&amp;gt; Several known syntheses can be found in [[Mark Niemiec&#039;s database]].&amp;lt;ref name=&amp;quot;niemiec&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = x = 39, y = 29, rule = B3/S23&lt;br /&gt;
18bo$17bo$2bo14b3o$obo$b2o5$18bobo5bo$18b2o6bobo3b2o$11bo7bo6b2o4bo2bo&lt;br /&gt;
$9bobo22b2o$10b2o24b2o$36bo$38bo$37b2o3$10b2o$9bobo$11bo5$24b3o$24bo$&lt;br /&gt;
25bo!&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 400 THEME Book ZOOM 10 X 0 Y 0 AUTOSTART GPS 12 T 0 PAUSE 3 T 19 PAUSE 1 T 20 PAUSE 1 T 38 PAUSE 2 LOOP 39 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A 7G synthesis&amp;lt;ref name=&amp;quot;niemiec&amp;quot; /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = x = 33, y = 22, rule = B3/S23&lt;br /&gt;
14bo$13bo$7bo5b3o$8b2o$7b2o2$19bo$19bobo$19b2o$26b2o$4b2o20bo2bo$3bobo&lt;br /&gt;
22b2o$5bo12bo11b2o$17b2o11bo$17bobo12bo$31b2o$3o6b3o$2bo8bo$bo8bo$4b2o&lt;br /&gt;
$3bobo$5bo!&lt;br /&gt;
|viewerconfig = #C [[ THEME Book ZOOM 10 X 0 Y 0 AUTOSTART GPS 12 T 0 PAUSE 3 T 25 PAUSE 2 LOOP 26 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A 8G synthesis&amp;lt;ref name=&amp;quot;niemiec&amp;quot; /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Occurrence ==&lt;br /&gt;
&lt;br /&gt;
Among the 121 still lifes with 12 cells, this is the 101st [[List of common still lifes|most common still life]] according to [[Catagolue]].&lt;br /&gt;
&lt;br /&gt;
There are no collisions in [[Octohash database|octohash]], octo3obj or octo3g databases with this still life occurring in the ash.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Cis-carrier-tie]]&lt;br /&gt;
* [[Trans-snake-tie]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post164071&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format     = ref&lt;br /&gt;
|p          = 164071&lt;br /&gt;
|title      = Re: Thread for your fast components&lt;br /&gt;
|author     = GUYTU6J&lt;br /&gt;
|date       = July 23, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;niemiec&amp;quot;&amp;gt;{{LinkNiemiec|p1-12.htm|The 121 twelve-bit still-lifes|rle=12/12-10.rle|nobullet=nobullet}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{LinkCatagolue|xs12_08o6413z32}}&lt;br /&gt;
* {{LinkPentadecathlonObject|12.77}}&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|diagonal2}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:P24gliderlesslwssgun.png&amp;diff=133910</id>
		<title>File:P24gliderlesslwssgun.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:P24gliderlesslwssgun.png&amp;diff=133910"/>
		<updated>2023-07-22T09:31:17Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:P24gliderlesslwssgun.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:P67herschelloop.png&amp;diff=133909</id>
		<title>File:P67herschelloop.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:P67herschelloop.png&amp;diff=133909"/>
		<updated>2023-07-22T09:28:15Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:P67herschelloop.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:P82lomhassler.png&amp;diff=133908</id>
		<title>File:P82lomhassler.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:P82lomhassler.png&amp;diff=133908"/>
		<updated>2023-07-22T09:27:56Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:P82lomhassler.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:P68centuryhassler.png&amp;diff=133907</id>
		<title>File:P68centuryhassler.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:P68centuryhassler.png&amp;diff=133907"/>
		<updated>2023-07-22T09:27:36Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:P68centuryhassler.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:P71dependentreflectorloop.png&amp;diff=133906</id>
		<title>File:P71dependentreflectorloop.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:P71dependentreflectorloop.png&amp;diff=133906"/>
		<updated>2023-07-22T09:27:08Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:P71glidershuttle.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:P23piheptominohassler202304.png&amp;diff=133905</id>
		<title>File:P23piheptominohassler202304.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:P23piheptominohassler202304.png&amp;diff=133905"/>
		<updated>2023-07-22T09:26:42Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:P23piheptominohassler202304.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:P67bheptominohassler202304.png&amp;diff=133904</id>
		<title>File:P67bheptominohassler202304.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:P67bheptominohassler202304.png&amp;diff=133904"/>
		<updated>2023-07-22T09:26:02Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:P67bheptominohassler202304.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:P59piheptominohassler.png&amp;diff=133903</id>
		<title>File:P59piheptominohassler.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:P59piheptominohassler.png&amp;diff=133903"/>
		<updated>2023-07-22T09:25:40Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:P59piheptominohassler.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:Oddtrafficstop.png&amp;diff=133902</id>
		<title>File:Oddtrafficstop.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:Oddtrafficstop.png&amp;diff=133902"/>
		<updated>2023-07-22T09:25:18Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:Oddtrafficstop.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:42p38.png&amp;diff=133901</id>
		<title>File:42p38.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:42p38.png&amp;diff=133901"/>
		<updated>2023-07-22T09:24:55Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:42p38.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:92p59.png&amp;diff=133900</id>
		<title>File:92p59.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:92p59.png&amp;diff=133900"/>
		<updated>2023-07-22T09:24:36Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:92p59.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:112p57.png&amp;diff=133899</id>
		<title>File:112p57.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:112p57.png&amp;diff=133899"/>
		<updated>2023-07-22T09:24:15Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J uploaded a new version of File:112p57.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:204p41.png&amp;diff=133898</id>
		<title>File:204p41.png</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:204p41.png&amp;diff=133898"/>
		<updated>2023-07-22T09:23:19Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: {{PatternImage}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
{{PatternImage}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=File:204p41.gif&amp;diff=133897</id>
		<title>File:204p41.gif</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=File:204p41.gif&amp;diff=133897"/>
		<updated>2023-07-22T09:21:51Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: {{AnimatedImage}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
{{AnimatedImage}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Rule:BrickMaze&amp;diff=133547</id>
		<title>Rule:BrickMaze</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Rule:BrickMaze&amp;diff=133547"/>
		<updated>2023-07-19T03:09:54Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: GUYTU6J moved page BrickMaze to Rule:BrickMaze without leaving a redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@RULE BrickMaze&lt;br /&gt;
&lt;br /&gt;
@TABLE&lt;br /&gt;
n_states:4&lt;br /&gt;
neighborhood:Moore&lt;br /&gt;
symmetries:permute&lt;br /&gt;
var b={2,3}&lt;br /&gt;
var c={1,3}&lt;br /&gt;
var d={1,2}&lt;br /&gt;
var e={2,3}&lt;br /&gt;
var f={1,3}&lt;br /&gt;
var g={1,2}&lt;br /&gt;
var h={2,3}&lt;br /&gt;
var i={1,3}&lt;br /&gt;
var j={1,2}&lt;br /&gt;
var k={2,3}&lt;br /&gt;
var l={1,3}&lt;br /&gt;
var m={1,2}&lt;br /&gt;
var n={0,1,2,3}&lt;br /&gt;
var o={0,1,2,3}&lt;br /&gt;
var p={0,1,2,3}&lt;br /&gt;
var q={0,1,2,3}&lt;br /&gt;
var r={0,1,2,3}&lt;br /&gt;
var s={2,3}&lt;br /&gt;
var t={1,3}&lt;br /&gt;
var u={1,2}&lt;br /&gt;
0,1,1,1,0,0,0,0,0,1&lt;br /&gt;
0,1,1,1,2,0,0,0,0,1&lt;br /&gt;
0,1,1,1,3,0,0,0,0,1&lt;br /&gt;
0,1,1,1,2,2,0,0,0,1&lt;br /&gt;
0,1,1,1,3,3,0,0,0,1&lt;br /&gt;
0,1,1,1,2,3,0,0,0,1&lt;br /&gt;
1,0,0,0,0,0,0,0,0,0&lt;br /&gt;
1,1,0,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
1,1,1,1,1,1,0,0,0,0&lt;br /&gt;
1,1,1,1,1,1,1,0,0,0&lt;br /&gt;
1,1,1,1,1,1,1,1,0,0&lt;br /&gt;
1,1,1,1,1,1,1,1,1,0&lt;br /&gt;
0,2,2,2,0,0,0,0,0,2&lt;br /&gt;
0,2,2,2,1,0,0,0,0,2&lt;br /&gt;
0,2,2,2,1,1,0,0,0,2&lt;br /&gt;
0,2,2,2,1,3,0,0,0,2&lt;br /&gt;
0,2,2,2,3,0,0,0,0,2&lt;br /&gt;
0,2,2,2,3,3,0,0,0,2&lt;br /&gt;
0,2,2,2,3,1,0,0,0,2&lt;br /&gt;
2,0,0,0,0,0,0,0,0,0&lt;br /&gt;
2,2,0,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
2,2,2,2,2,2,0,0,0,0&lt;br /&gt;
2,2,2,2,2,2,2,0,0,0&lt;br /&gt;
2,2,2,2,2,2,2,2,0,0&lt;br /&gt;
2,2,2,2,2,2,2,2,2,0&lt;br /&gt;
0,3,3,3,0,0,0,0,0,3&lt;br /&gt;
0,3,3,3,2,0,0,0,0,3&lt;br /&gt;
0,3,3,3,1,0,0,0,0,3&lt;br /&gt;
0,3,3,3,2,2,0,0,0,3&lt;br /&gt;
0,3,3,3,1,1,0,0,0,3&lt;br /&gt;
0,3,3,3,1,2,0,0,0,3&lt;br /&gt;
3,0,0,0,0,0,0,0,0,0&lt;br /&gt;
3,3,0,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
3,3,3,3,3,3,0,0,0,0&lt;br /&gt;
3,3,3,3,3,3,3,0,0,0&lt;br /&gt;
3,3,3,3,3,3,3,3,0,0&lt;br /&gt;
3,3,3,3,3,3,3,3,3,0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1,b,e,h,n,o,p,q,r,0&lt;br /&gt;
2,c,f,i,n,o,p,q,r,0&lt;br /&gt;
3,d,g,j,n,o,p,q,r,0&lt;br /&gt;
1,b,e,h,k,n,o,p,q,0&lt;br /&gt;
2,c,f,i,l,n,o,p,q,0&lt;br /&gt;
3,d,g,j,m,n,o,p,q,0&lt;br /&gt;
1,b,e,h,k,s,o,p,q,0&lt;br /&gt;
2,c,f,i,l,t,o,p,q,0&lt;br /&gt;
3,d,g,j,m,u,o,p,q,0&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Nihonium&amp;diff=133542</id>
		<title>Nihonium</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Nihonium&amp;diff=133542"/>
		<updated>2023-07-18T04:12:06Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name         = Nihonium&lt;br /&gt;
|pname        = nihonium&lt;br /&gt;
|c            = 106&lt;br /&gt;
|bx           = 58&lt;br /&gt;
|by           = 37&lt;br /&gt;
|p            = 113&lt;br /&gt;
|m            = 113&lt;br /&gt;
|h            = 43.2&lt;br /&gt;
|v            = 0.93&lt;br /&gt;
|sv           = 0.93&lt;br /&gt;
|discoverer   = Jeremy Tan&lt;br /&gt;
|discoveryear = 2021&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B38/S23&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B34ce8/S234c&lt;br /&gt;
|synthesis    = 50&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|viewerconfig = #C [[ LOOP 113 GPS 14 THUMBSIZE 2 HEIGHT 320 ZOOM 8 ]]&lt;br /&gt;
|apgcode      = xp113_y98oyn33y166z8oy732ys33y0ccz01219g8y2gkszwcq2qbyzy18e1eozx121ywsk4y2b591zxooyzy5221e8zy3gg33ysdbzy311y133&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nihonium&#039;&#039;&#039;{{refn|group=note|Named after [https://en.wikipedia.org/wiki/Nihonium the element] with atomic number 113, which in turn is named after Japan.}} is a {{period|113}} [[oscillator]], found by [[Jeremy Tan]] on July 5, {{year|2021}}.&amp;lt;ref name=&amp;quot;post133079&amp;quot; /&amp;gt;{{refn|group=note|An independent but incomplete attempt to construct a Herschel loop with two R49 and two R64 was made by PHPBB12345 dated back to 2019.&amp;lt;ref name=&amp;quot;post83772&amp;quot; /&amp;gt;}} It was the smallest known oscillator of its period until the discovery of [[86P113]] in October, 2022. It is an [[emu]] comprised of two [[R64]] and two [[R49]] [[conduit]]s populated with two [[Herschel]]s whose [[first natural glider]]s annihilate each other; both Herschels must be present for the oscillator to work, but one Herschel may be advanced in time to yield a {{period|226}} oscillator, the least-populous of them at {{cells|107|text=107 cells}} called &#039;&#039;&#039;nihonium*&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|viewerconfig = #C [[ AUTOSTART GPS 14 LOOP 226 ZOOM 8 HEIGHT 320 ]]&lt;br /&gt;
|pname        = nihoniumstar&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = Nihonium*, the smallest-known {{period|226}} oscillator&lt;br /&gt;
|style        = width:360px;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A {{gliders|52}} [[synthesis]] was found for nihonium on the day of its discovery.&amp;lt;ref name=&amp;quot;post133069&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Simkin&#039;s p60]]&lt;br /&gt;
* [[Period-256 glider gun]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references group=note /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post133079&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|p      = 133079&lt;br /&gt;
|author = Jeremy Tan&lt;br /&gt;
|date   = July 5, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post83772&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|p      = 83772&lt;br /&gt;
|author = PHPBB12345&lt;br /&gt;
|date   = October, 2019&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post133069&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Synthesising Oscillators&lt;br /&gt;
|p      = 133069&lt;br /&gt;
|author = Jeremy Tan&lt;br /&gt;
|date   = July 5, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkCatagolue|xp113_y98oyn33y166z8oy732ys33y0ccz01219g8y2gkszwcq2qbyzy18e1eozx121ywsk4y2b591zxooyzy5221e8zy3gg33ysdbzy311y133}}&lt;br /&gt;
* [https://derpibooru.org/images/2685510 An artwork by the discoverer] with this pattern in the background&lt;br /&gt;
&lt;br /&gt;
{{symmetry|180degree}}&lt;br /&gt;
[[Category:Emus]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Quetzal&amp;diff=133531</id>
		<title>Quetzal</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Quetzal&amp;diff=133531"/>
		<updated>2023-07-17T09:10:15Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* Further reading */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;Quetzal&#039;&#039;&#039; is a [[Herschel track]]-based [[gun]] with a period lower than 62. Standard stable [[Herschel conduit]]s do not permit guns with periods less than 62, so alternate components are required. The name, attributed to [[Dietrich Leithner]],&amp;lt;ref name=&amp;quot;post60875&amp;quot; /&amp;gt; is short for &#039;&#039;&#039;Quetzalcoatlus&#039;&#039;&#039; (a giant pterosaur), and expresses the fact that Quetzal guns are enormous and emit [[glider]]s.&lt;br /&gt;
&lt;br /&gt;
The [[Fx77]] [[Herschel conduit]] can potentially be made to emit gliders at periods as low as 51.  However, no Quetzal of periods 51 or 53 has yet been found.&lt;br /&gt;
&lt;br /&gt;
== Quetzal-52 ==&lt;br /&gt;
{{main|Period-52 glider gun}}&lt;br /&gt;
The [[Period-52 glider gun|first Q52 gun]] was constructed by [[Dave Greene]] on 26 September 2018.&amp;lt;ref name=&amp;quot;post64083&amp;quot; /&amp;gt;  It uses 6 short [[Herschel]] tracks to convert 12 glider streams into 14 glider streams.  Essential components in this construction were found by [[Matthias Merzenich]], [[Adam P. Goucher]], [[Chris Cain]], [[Tanner Jacobi]], and [[Louis-François Handfield]]. The discovery that [[53P13]] could be used to eat gliders from the Herschel tracks allowed for the construction of the much smaller [[p13-assisted period-52 glider gun]].&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = q52originalgun | position = center | viewerconfig = #C [[ THUMBSIZE 2 ZOOM .25 ]]}}&lt;br /&gt;
&lt;br /&gt;
== Quetzal-54 ==&lt;br /&gt;
The original Q54 gun was created by [[Dietrich Leithner]] in January 1998.&amp;lt;ref name=&amp;quot;post60875&amp;quot; /&amp;gt; It is a huge Herschel loop populated with oscillators, which destroy the [[first natural glider]]s of the Herschels before they have chance to collide into the other Herschels. A [[pipsquirter]], which is welded to one of the other oscillators, is used to liberate a glider from the Herschel track.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = q54gun1 | position = center | viewerconfig = #C [[ THUMBSIZE 2 ZOOM .5 ]]}}&lt;br /&gt;
&lt;br /&gt;
== Quetzal-55 ==&lt;br /&gt;
The Q55 gun was first explicitly constructed by Stephen Silver, and dwarfed the other Quetzals due to period constraints. Specifically, the unlucky coincidence of the track period and the length of the 77-step conduit both being divisible by 11 resulted in the loop requiring 44 corners. Noam Elkies suggested using a linear track, where gliders emitted from the track are reflected using [[p5 reflector]]s to re-synthesize the initial Herschel. Stephen Silver constructed such a gun shortly after assembling the original Quetzal-55 gun. This method was later applied to the p54 gun, but was much more difficult due to the timing constraints caused by the even period. The version shown was created by Jason Summers in 2004 based on the work of Silver and Elkies.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = q55glidergun | position = center | viewerconfig = #C [[ THUMBSIZE 2 ZOOM 1 ]]}}&lt;br /&gt;
&lt;br /&gt;
== Quetzal-56 ==&lt;br /&gt;
The Q56 gun is a relatively compact Herschel loop, again built by Dietrich Leithner. It uses p4 and p8 oscillators, even though p7 oscillators could have been used. In October 2018, [[Chris Cain]] improved the Q56 gun by using an open track.&amp;lt;ref name=&amp;quot;post64298&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = quetzal56 | position = center | viewerconfig = #C [[ THUMBSIZE 2 ZOOM 1.5 ]]}}&lt;br /&gt;
&lt;br /&gt;
== Quetzal-57 ==&lt;br /&gt;
{{main|p57 Herschel loop 1}}&lt;br /&gt;
The Q57 gun uses a large p3 oscillator, found by [[Matthias Merzenich]], to release a glider from an Fx77 Herschel conduit in the [[p57 Herschel loop]]. Later, [[Luka Okanishi]] created an open-track variant with a much smaller bounding box (166-by-122) using an extra copy of the large p3 oscillator.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = p57gun | position = center | viewerconfig = #C [[ THUMBSIZE 2 ZOOM .75 ]]}}&lt;br /&gt;
&lt;br /&gt;
== Quetzal-58 ==&lt;br /&gt;
The Q58 gun&amp;lt;ref name=&amp;quot;post138658&amp;quot; /&amp;gt; ([https://catagolue.hatsya.com/object/guntrue_58/b3s23 guntrue_58 in Catagolue]) uses a [[glider duplicator]] based on an interaction between a p58 Herschel loop and a [[glider-to-Herschel converter]].&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = q58glidergun | position = center | viewerconfig = #C [[ THUMBSIZE 2 ZOOM 1 ]]}}&lt;br /&gt;
&lt;br /&gt;
== Quetzal-59 ==&lt;br /&gt;
{{main|Period-59 glider gun}}&lt;br /&gt;
The Q59 gun, built by [[Adam P. Goucher]] in 2009,&amp;lt;ref name=&amp;quot;post1624&amp;quot; /&amp;gt; is a large assembly of p59 Herschel tracks, rephasers and p44-like engines. It is larger even than the original Quetzal-55 gun, due to the immense amount of rephasing required. Jason Summers noticed that one half of the gun could be removed and replaced with a single reflector, due to the serendipitous fact that the reflector has exactly the right spacing to complete the gun.&amp;lt;ref name=&amp;quot;post1623&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = period59glidergun | position = center | viewerconfig = #C [[ THUMBSIZE 2 ]]}} &lt;br /&gt;
&lt;br /&gt;
== Quetzal-60 ==&lt;br /&gt;
A period-60 glider-emitting [[Herschel]] loop was constructed by Dieter Leithner in January 1998. It uses a [[unix]] to liberate gliders from a corner of the loop. Due to its period, the gun is minuscule compared to the other Quetzals, with a bounding box of less than 10 000 cells.&amp;lt;ref&amp;gt;{{CiteSummersPattern|name=osc-o0060-gun}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;post138658&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = q60glidergun | position = center | viewerconfig = #C [[ THUMBSIZE 2 ZOOM 3.5 ]]}}&lt;br /&gt;
&lt;br /&gt;
== Quetzal-61 ==&lt;br /&gt;
{{main|Period-61 glider gun}}&lt;br /&gt;
The first Q61 gun was built by Luka Okanishi.&amp;lt;ref name=&amp;quot;post29965&amp;quot; /&amp;gt; It uses a [[lightweight spaceship]] stream as a glider-to-Herschel converter, as well as a small stable Herschel-to-2-glider converter.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer | pname = period61glidergun | position = center | viewerconfig = #C [[ THUMBSIZE 2 ZOOM 1 ]]}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guns]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Emu]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post64298&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format=ref&lt;br /&gt;
|title=Re: Suggested LifeWiki Edits&lt;br /&gt;
|author=Entity Valkyrie &lt;br /&gt;
|p=64298&lt;br /&gt;
|date=October 2, 2018&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post64083&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format=ref&lt;br /&gt;
|title=Re: Oscillator Discussion Thread&lt;br /&gt;
|author=Dave Greene &lt;br /&gt;
|p=64083&lt;br /&gt;
|date=September 26, 2018&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post60875&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format=ref&lt;br /&gt;
|title=Re: Life Lexicon update -- now Release 29, 2 June 2018&lt;br /&gt;
|author=Matthias Merzenich&lt;br /&gt;
|p=60875&lt;br /&gt;
|date=June 11, 2018&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post29965&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|p          = 29965&lt;br /&gt;
|format   = ref&lt;br /&gt;
|title       = Re: p61 gun&lt;br /&gt;
|author   = Luka Okanishi&lt;br /&gt;
|date      = April 13, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post1624&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: New p59 oscillators&lt;br /&gt;
|p      = 1624&lt;br /&gt;
|author = Adam P. Goucher&lt;br /&gt;
|date   = December 3, 2009&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post1623&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: New p59 oscillators&lt;br /&gt;
|p      = 1623&lt;br /&gt;
|author = Jason Summers&lt;br /&gt;
|date   = December 2, 2009&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post138658&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Truth in Quetzals&lt;br /&gt;
|p      = 138658&lt;br /&gt;
|author = Matthias Merzenich&lt;br /&gt;
|date   = December 11, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
* {{LinkLexicon|lex_q.htm#quetzal}}&lt;br /&gt;
* {{citeCGoLMC|section=8.5.3}} Quetzals: True-Period 52, 54–58, and 61 Guns&lt;br /&gt;
* {{LinkWikipedia|Quetzalcoatlus|name=Quetzalcoatlus}} (name origin)&lt;br /&gt;
&lt;br /&gt;
[[Category:Quetzals| ]]&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Period-35_honey_farm_hasslers&amp;diff=133527</id>
		<title>Period-35 honey farm hasslers</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Period-35_honey_farm_hasslers&amp;diff=133527"/>
		<updated>2023-07-17T08:33:18Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: Added p35 beehive hassler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OscListP/HF|p=35}}&lt;br /&gt;
{{gallery top}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = p35honeyfarmhassler&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 400 WIDTH 600 THUMBLAUNCH THUMBSIZE 2 ZOOM 12 GPS 18 THEME Book STARTFROM 42 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = [[p35 honey farm hassler|44P35]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp35_y4ok46y3253zooxgcgy47r4xcczxgw33y0ggkczw321y31&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = p35d2honeyfarmhassler&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 380 WIDTH 600 THUMBLAUNCH THUMBSIZE 2 ZOOM 12 GPS 18 THEME Book STARTFROM 35 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = 104P35, found by [[Mitchell Riley]] on October 7, {{year|2022}}&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp35_2egoy3h11w11hy3oge2zy63cd2w2dc3z06a8c2ccgxggwggxgcc2c8a6zx651169iq221w122qi961156&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|rle          = x = 51, y = 50, rule = B3/S23&lt;br /&gt;
29b2o$28bobo$28bo$25b2ob2o4b2o$26bobobo3b2o$23bo2bo2b2o$21b3o3b4ob4o$&lt;br /&gt;
20bo10bo4bo$20b2o7bo2b2o2bo$29bo4bob2ob2o$17b2o12b4o2bobo$17bobo15bo4b&lt;br /&gt;
o$12b2o4b2o10bo2b2ob3obo$11bo2bo11b3obo3bo3bob2o$11bob2o11b4o4bo3bo4b&lt;br /&gt;
2ob2o$10b2o18b2ob2ob2ob4obobo$9bo3b2o20bobobo4bo2bo$10b3o2bo5bo13bo2b&lt;br /&gt;
3o2b2ob2o$13b2obo3b3o11b2obobo3b2o3b2o$12bo2bo3b2ob2o10bo2b2o7b2o2bo$&lt;br /&gt;
12b2o4b3ob3o11bo3bo6bob2o$19b2ob2o10bo2b4o6bo$20b3o11b2obo8b2o$21bo13b&lt;br /&gt;
obob2o$14bo20bobob2o$10b2obobo20bo$10b2obobo13bo$3b2o8bob2o11b3o$3bo6b&lt;br /&gt;
4o2bo10b2ob2o$2obo6bo3bo11b3ob3o4b2o$o2b2o7b2o2bo10b2ob2o3bo2bo$b2o3b&lt;br /&gt;
2o3bobob2o11b3o3bob2o$3b2ob2o2b3o2bo13bo5bo2b3o$3bo2bo4bobobo20b2o3bo$&lt;br /&gt;
4bobob4ob2ob2ob2o18b2o$3b2ob2o4bo3bo4b4o11b2obo$9b2obo3bo3bob3o11bo2bo&lt;br /&gt;
$10bob3ob2o2bo10b2o4b2o$10bo4bo15bobo$11bobo2b4o12b2o$10b2ob2obo4bo$&lt;br /&gt;
14bo2b2o2bo7b2o$14bo4bo10bo$15b4ob4o3b3o$20b2o2bo2bo$15b2o3bobobo$15b&lt;br /&gt;
2o4b2ob2o$22bo$20bobo$20b2o!&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 600 WIDTH 600 THUMBLAUNCH THUMBSIZE 2 ZOOM 10 GPS 18 THEME Book STARTFROM 34 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = 346P35&amp;lt;ref name=&amp;quot;post155643&amp;quot; /&amp;gt;, found by [[James Pascua]] on January 6, {{year|2023}} based on a partial by [[David Raucci]], reduced by [[iNoMed]] the same day&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp35_yno8bp6o8gozycgya60aq6gzy8ciq3o7o4cxgbb8fhe998r45t1arggzy6ckoy012hgy0113212311mqq6hm2cgf033zy18e13y6bb8y81qpx330eihm453zg88r2is0ggx6my94kky6g0s401z110gh0s2dhq2onmrwgg0ggy233gy16ac011zx110122mk1e88m555s3s5ll2xc96p6gmiczy510113onk1p011011y3121zya6246o6k46zyf11&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = p35honeyfarmhassler2&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 600 WIDTH 600 THUMBLAUNCH THUMBSIZE 2 ZOOM 14 GPS 18 THEME Book STARTFROM 35 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = 132P35, found by [[Carson Cheng]] on July 5, {{year|2023}} and reduced by Mitchell Riley seven days later&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp35_y0gg0s2p6o8ge2zxoh4e1e96zykg88c9jz64k80gx33w7y611wd5kczw11dlggkcy67w66y2113zy0641ydgg0g08ozyfg8go3s3s39czye23x3421&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname = p35beehivehassler2&lt;br /&gt;
|viewerconfig = #C [[ GPS 18 ZOOM 12 HEIGHT 400 STARTFROM 40 THEME Book ]]&lt;br /&gt;
|caption      = A smaller version of the [[p35 beehive hassler]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|position     = center&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery bottom}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post155643&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 155643&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = JP21&lt;br /&gt;
|date   = January 6, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=P35_beehive_hassler&amp;diff=133526</id>
		<title>P35 beehive hassler</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=P35_beehive_hassler&amp;diff=133526"/>
		<updated>2023-07-17T08:29:19Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: This is also a honey farm hassler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name         = p35 beehive hassler&lt;br /&gt;
|pname        = p35beehivehassler&lt;br /&gt;
|c            = 372&lt;br /&gt;
|bx           = 79&lt;br /&gt;
|by           = 24&lt;br /&gt;
|p            = 35&lt;br /&gt;
|m            = 35&lt;br /&gt;
|h            = 136.9&lt;br /&gt;
|v            = 0.59&lt;br /&gt;
|sv           = 0.09&lt;br /&gt;
|discoverer   = Dean Hickerson&lt;br /&gt;
|discoveryear = 1995&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B38/S238&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B34e8/S234e5c6i7e8&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|animated     = true&lt;br /&gt;
|apgcode      = xp35_wgg0ggmi8cgg0s4y2g84s0gg0s4y0r16ss61ry4gz470v0ha823s1gfo7pkoowoh10v07k1luy11w1y1gs2qbgn48cy2o8gzy01169d5961t4gw17a89a9kg0s5glfy163y1u3206701gd5ppl2wg0mbo6pab96o8gzya11y2312egd543y1gg88ggx36ao3vgfj89hw1228egejo3dmgjo2vge2zyvc96w69cy023y0321y323x3146&lt;br /&gt;
|viewerconfig = #C [[ GPS 7 ZOOM 8 WIDTH 640 LOOP 35 ]]&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;p35 beehive hassler&#039;&#039;&#039; is a {{period|35}} oscillator discovered by [[Dean Hickerson]] on February 14, {{year|1995}}&amp;lt;ref&amp;gt;{{CiteHickersonOscillators}}&amp;lt;/ref&amp;gt; and was the first oscillator of this period to be discovered.{{refn|group=note|A nontrivial period-35 oscillator, such as {{LinkCatagolue|xp35_0g88bdggzw1130147obbgz4q44q4y04t1u246z121121y21|patternname=octagon II on 44P7.2|style=raw}}, could have been constructed from two oscillators of lower period (such as p5 and p7), both of which were known by an earlier date. However, no such [[LCM oscillator]]s were attested prior to the discovery of this oscillator in 1995.}}  It is composed of two [[fumarole]]s and two [[heavyweight volcano]]es [[hassle|hassling]] a [[beehive]].&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
&amp;lt;!-- [[Image:p30beehivehassler.png|framed|left|A related period 30 beehive hassler&amp;lt;br/&amp;gt;{{JavaRLE|p30beehivehassler|brief}}]] (this version has larger p5 sparkers than the current one in the gallery) --&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
{|&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname = p35beehivehassler2&lt;br /&gt;
|viewerconfig = #C [[ GPS 28 ZOOM 8 LOOP 35 ]]&lt;br /&gt;
|caption      = A smaller version of the p35 beehive hassler&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|position     = center&lt;br /&gt;
}}&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname = p30beehivehassler&lt;br /&gt;
|viewerconfig = #C [[ GPS 28 ZOOM 8 LOOP 35 ]]&lt;br /&gt;
|caption      = A related period-30 beehive hassler&lt;br /&gt;
|position     = center&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[50P35]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
{{LinkCatagolue|xp35_wgg0ggmi8cgg0s4y2g84s0gg0s4y0r16ss61ry4gz470v0ha823s1gfo7pkoowoh10v07k1luy11w1y1gs2qbgn48cy2o8gzy01169d5961t4gw17a89a9kg0s5glfy163y1u3206701gd5ppl2wg0mbo6pab96o8gzya11y2312egd543y1gg88ggx36ao3vgfj89hw1228egejo3dmgjo2vge2zyvc96w69cy023y0321y323x3146|patternname=p35 beehive hassler}}&lt;br /&gt;
&lt;br /&gt;
{{DISPLAYTITLE:p35 beehive hassler}}&lt;br /&gt;
[[Category:Honey farm hasslers|35]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Zweiback&amp;diff=133525</id>
		<title>Zweiback</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Zweiback&amp;diff=133525"/>
		<updated>2023-07-17T08:27:11Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name         = Zweiback&lt;br /&gt;
|pname        = zweiback&lt;br /&gt;
|c            = 331&lt;br /&gt;
|bx           = 79&lt;br /&gt;
|by           = 21&lt;br /&gt;
|p            = 30&lt;br /&gt;
|m            = 15&lt;br /&gt;
|h            = 110.3&lt;br /&gt;
|v            = 0.56&lt;br /&gt;
|sv           = 0.08&lt;br /&gt;
|discoverer   = Mark Niemiec&lt;br /&gt;
|discoveryear = 1995&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B38/S238&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B34e8/S234e5cy6i7e8&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|animated     = true&lt;br /&gt;
|apgcode      = xp30_y3c4goxo8y3g8oy0o8yco4km1e8goy2ggz8e1v03lh56o31uhei8ggwh221u1f83asy9ul1k7015iai2asgw14ngcikmicggzx123ciqajc3q90113fkgjli810ob0bvy16952y0flg5s0v0gh3w335js3u1g7o82ah0v0s4zy9123y2624t1qb871yb4701107421y247011629d11011zym1&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 ZOOM 6 GPS 5 LOOP 30 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Zweiback&#039;&#039;&#039; is a {{period|30}} [[oscillator]] that was found by [[Mark Niemiec]] on February 13, {{year|1995}}.&amp;lt;ref&amp;gt;{{CiteHickersonOscillators|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt; It consists of two [[heavyweight volcano]]es [[hassle|hassling]] a [[loaf]]; the loaf turns into a [[wing]] by taking a [[domino]] spark, and the wing receives another five ticks later.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = zweiback2&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 400 THUMBSIZE 2 ZOOM 10 GPS 10 LOOP 30 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A smaller version&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Etymology ==&lt;br /&gt;
Zwieback is a German term meaning &amp;quot;twice baked&amp;quot;,&amp;lt;ref&amp;gt;{{cite web|url=https://en.wiktionary.org/wiki/zwieback|title=zwieback|work=Wiktionary|accessdate=May 18, 2023}}&amp;lt;/ref&amp;gt; which refers to a certain kind of toasted bread that is baked twice. The name was coined (and misspelt) by Mark Niemiec twice.&amp;lt;ref name=&amp;quot;post37698&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[p35 beehive hassler]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post37698&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Help with names&lt;br /&gt;
|p      = 37698&lt;br /&gt;
|author = Mark D. Niemiec&lt;br /&gt;
|date   = November 27, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_z.htm#zweiback}}&lt;br /&gt;
* {{LinkCatagolue|xp30_y3c4goxo8y3g8oy0o8yco4km1e8goy2ggz8e1v03lh56o31uhei8ggwh221u1f83asy9ul1k7015iai2asgw14ngcikmicggzx123ciqajc3q90113fkgjli810ob0bvy16952y0flg5s0v0gh3w335js3u1g7o82ah0v0s4zy9123y2624t1qb871yb4701107421y247011629d11011zym1|format=extended}}&lt;br /&gt;
* {{LinkWikipedia|Zwieback|name=Zwieback}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|osc=turn180}}&lt;br /&gt;
[[Category:Wing hasslers]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Wing_hasslers&amp;diff=133524</id>
		<title>Wing hasslers</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Wing_hasslers&amp;diff=133524"/>
		<updated>2023-07-17T08:22:55Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* p30 */ added zweiback and rotated the other pattern&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glossary}}{{HasslerList}}&lt;br /&gt;
A &#039;&#039;&#039;Wing hassler&#039;&#039;&#039; is an [[oscillator]] that [[hassle]]s one or more copies of [[Wing]], the [[List of common evolutionary sequences|seventh most common evolutionary sequence]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;18&amp;quot; | Wing hasslers known periods:&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p12|12]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p16|16]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p20|20]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p21|21]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p24|24]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p25|25]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p27|27]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p28|28]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p30|30]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p36|36]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p37|37]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p38|38]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p42|42]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p56|56]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p60|60]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p70|70]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p72|72]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p88|88]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p100|100]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p128|128]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p138|138]]&lt;br /&gt;
| style=&amp;quot;background:#c6efce;text-align:center&amp;quot; | [[#p190|190]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===p12===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 14b2o4bo4b2o$13bo2bobo3bobo2bo$13b3o9b3o$16b2o5b2o$15bo2b5o2bo3b2o$15b&lt;br /&gt;
2o7bobo2bobo$6bo18bobobobo$8bo17bobobo$3bo4bo19bo$2bo5b2o12b2o2bo2bo$&lt;br /&gt;
9bo8bo3b3o4bo$6b4o8bo3b2obo3bo$o4bo4b3o5bo3bo6bo$5bob2obob3o11bo2bo$b&lt;br /&gt;
3obob2obo17bo$3b3o4bo4bo10bobobo$6b4o16b2obobo$6bo22bobo$6b2o5bo15b2o$&lt;br /&gt;
7bo4bo$7bo$9bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by [[Carson Cheng]] on September 17, 2022&amp;lt;ref name=&amp;quot;post151136&amp;quot;/&amp;gt; and reduced by [[iNoMed]]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
===p16===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 20b2o$18b2obo$17bo2bo$4bo3bo8bo2bo4bo$2b2obobob2o6bo2bo3bobo$bo3bobo3bo6b3o3b&lt;br /&gt;
2o$o3b2ob2o3bo$obo7bobo5b3o3b2o$bo9bo5bo2bo3bobo$17bo2bo4bo$4b2ob2o8bo2bo$3bo&lt;br /&gt;
bobobo2bo5b2obo$4bo3bo2bo3bo4b2o$15bo$15bo$12bobo$13bo$19bo$18bobo$17bo$17bo$&lt;br /&gt;
11b2o4bo3bo2bo3bo$11bob2o5bo2bobobobo$12bo2bo8b2ob2o$7bo4bo2bo$6bobo3bo2bo5bo&lt;br /&gt;
9bo$7b2o3b3o5bobo7bobo$20bo3b2ob2o3bo$7b2o3b3o6bo3bobo3bo$6bobo3bo2bo6b2obobo&lt;br /&gt;
b2o$7bo4bo2bo8bo3bo$12bo2bo$11bob2o$11b2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by Carson Cheng on October 8, 2022&amp;lt;ref name=&amp;quot;post151935&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname        = charitysp16&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = [[Charity&#039;s p16]]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p20===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 14b2ob2o12bo$2b2o4bobo3b2ob2o12b3o$3bo2b4obo22bo$3bobo5b10o12b2o24b2ob&lt;br /&gt;
2o$b2o2b2o2b2o9bo38b2ob2o3bobo4b2o$2bobo2bobobo2b2o2bo18bo28bob4o2bo$o&lt;br /&gt;
2bob3obobobo4b2o17bo19b10o5bobo$2obo4bo5bo4bo37bo9b2o2b2o2b2o$3bo10bo&lt;br /&gt;
3bo40bo2b2o2bobobo2bobo$3b2o10bob2o2b2o35b2o4bobobob3obo2bo$7bobo2bo2b&lt;br /&gt;
2obo4bobob2o7b2o20bo4bo5bo4bob2o$6bob2o2b3o2bobo3bo5bo5bob2o20bo3bo10b&lt;br /&gt;
o$2b2o2bo8bo3bo3bo5b2o3bo2bo17b2o2b2obo10b2o$2bobobob2o2b3o2bobo3bo5bo&lt;br /&gt;
5b2o12b2obobo4bob2o2bo2bobo2bo$4bo2bobo2bo2b2obo4bobob2o12b2o5bo5bo3bo&lt;br /&gt;
bo2b3o2b2obobobo$3b2o10bob2o2b2o17bo2bo3b2o5bo3bo3bo8bo2b2o$3bo10bo3bo&lt;br /&gt;
20b2obo5bo5bo3bobo2b3o2b2obo$2obo4bo5bo4bo20b2o7b2obobo4bob2o2bo2bobo$&lt;br /&gt;
o2bob3obobobo4b2o35b2o2b2obo10b2o$2bobo2bobobo2b2o2bo40bo3bo10bo$b2o2b&lt;br /&gt;
2o2b2o9bo37bo4bo5bo4bob2o$3bobo5b10o19bo17b2o4bobobob3obo2bo$3bo2b4obo&lt;br /&gt;
28bo18bo2b2o2bobobo2bobo$2b2o4bobo3b2ob2o38bo9b2o2b2o2b2o$14b2ob2o24b&lt;br /&gt;
2o12b10o5bobo$43bo22bob4o2bo$44b3o12b2ob2o3bobo4b2o$46bo12b2ob2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by [[David Raucci]] and [[wwei23]]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p21===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 5bo2bo2bo38bo2bo2bo$5b7o2bo32bo2b7o$12b3o32b3o$7b2obo40bob2o$6bo3b3o&lt;br /&gt;
36b3o3bo$6bobo4bo34bo4bobo$5b2ob5obo32bob5ob2o$6bo5bobo32bobo5bo$6bo2b&lt;br /&gt;
3o2b2o30b2o2b3o2bo$5b2ob2obobo34bobob2ob2o$7bobobobo34bobobobo$7bobobo&lt;br /&gt;
b2o2b2o24b2o2b2obobobo$4b2obo4bo4bobo22bobo4bo4bob2o$4bo2b2obobo6bo22b&lt;br /&gt;
o6bobob2o2bo$6bo5b2o34b2o5bo$7b4o3bo32bo3b4o$11bob2o5bo6b8o6bo5b2obo$&lt;br /&gt;
7b4o3bo5bo6bob4obo6bo5bo3b4o$7bo2bob2o3bo2bo6b8o6bo2bo3b2obo2bo$12bo4b&lt;br /&gt;
obo22bobo4bo$10bobo36bobo$10b2o38b2o2$28b2o$27bobo$27b2o$27b2o8b2o$21b&lt;br /&gt;
o16bo$19bo16bo$19b2o8b2o$29b2o$28bobo$28b2o2$6b2o38b2o$6bobo36bobo$8bo&lt;br /&gt;
4bobo22bobo4bo$3bo2bob2o3bo2bo6b8o6bo2bo3b2obo2bo$3b4o3bo5bo6bob4obo6b&lt;br /&gt;
o5bo3b4o$7bob2o5bo6b8o6bo5b2obo$3b4o3bo32bo3b4o$2bo5b2o34b2o5bo$o2b2ob&lt;br /&gt;
obo6bo22bo6bobob2o2bo$2obo4bo4bobo22bobo4bo4bob2o$3bobobob2o2b2o24b2o&lt;br /&gt;
2b2obobobo$3bobobobo34bobobobo$b2ob2obobo34bobob2ob2o$2bo2b3o2b2o30b2o&lt;br /&gt;
2b3o2bo$2bo5bobo32bobo5bo$b2ob5obo32bob5ob2o$2bobo4bo34bo4bobo$2bo3b3o&lt;br /&gt;
36b3o3bo$3b2obo40bob2o$8b3o32b3o$b7o2bo32bo2b7o$bo2bo2bo38bo2bo2bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by David Raucci and [[iNoMed]]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p24===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 19b2o$18bobo$18bo$16b2ob4o$12b2obobo4bo$12b2obobob2o2b2o$15bobo3b2o2bo&lt;br /&gt;
$15bobob2o2b2obo8b2o$16bo4bo4bo8b2o$17b3obob3o$19b2ob2o9b4o$32bo4bo$&lt;br /&gt;
31bob5o$31bobo4b2o$30b2o5bo2bo$21b2o7bo2bobobob2o$7b2o11bo2bo6b3obo2bo&lt;br /&gt;
$6bo2bo10bo2bo6bo3bob2o$5bobobo11b2o7b2obobo$5bobob2o7b2o11bobobo$3b2o&lt;br /&gt;
bo3bo6bo2bo10bo2bo$3bo2bob3o6bo2bo11b2o$2obobobo2bo7b2o$o2bo5b2o$b2o4b&lt;br /&gt;
obo$3b5obo$3bo4bo$4b4o9b2ob2o$15b3obob3o$4b2o8bo4bo4bo$4b2o8bob2o2b2ob&lt;br /&gt;
obo$15bo2b2o3bobo$16b2o2b2obobob2o$18bo4bobob2o$18b4ob2o$22bo$20bobo$&lt;br /&gt;
20b2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by David Raucci on November 4th, 2021&amp;lt;ref name=&amp;quot;post137305&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p25===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          =&lt;br /&gt;
19b2o$13bob2obobo$13b2obobo$17b2o2$26b2o$26bobo$17b2o9bo$16bo2b2o6b2ob&lt;br /&gt;
2o$17bo2bo7bo2bo$18b3o4b3o2bo$7b2o15bo3b2o$6bobo15b4o$2b2o2bo20bo$2bob&lt;br /&gt;
ob2o16b2obobo$4bo20bo2b2o$4b4o15bobo$2b2o3bo15b2o$bo2b3o4b3o$o2bo7bo2b&lt;br /&gt;
o$2ob2o6b2o2bo$3bo9b2o$3bobo$4b2o2$13b2o$13bobob2o$11bobob2obo$11b2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by Mitchell Riley on December 9th, 2022&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p27===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 25b2o$22b2o2bo$22bo3bobo$23b3obobo$27bobo$6b2o13b3ob2ob2ob2o$6bobo11b&lt;br /&gt;
o2bo3bobob2o$4bobobo11b2o2b3o2bo$3bobo2bob2o13bo2b2o$2bo2bobobo2bo$2b&lt;br /&gt;
2obobo3bobo$5bob2o3bo$2b2obob2o14b3o$o2bobo2b2o13bo2bo$2o2bo3b2o5b2o6b&lt;br /&gt;
2o2bo$7bo2bo3bo2bo7b2o$2o2bo3b2o5b2o$o2bobo2b2o$2b2obob2o$5bob2o3bo$2b&lt;br /&gt;
2obobo3bobo10b2o2b2o$2bo2bobobo2bo11b2o2b2o$3bobo2bob2o9bobobo2bobobo&lt;br /&gt;
$4bobobo10b3obobo2bobob3o$6bobo9bo3b2ob4ob2o3bo$6b2o11b2o3bo4bo3b2o$21b&lt;br /&gt;
2o2bo2bo2b2o$21bob2o4b2obo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by David Raucci on March 14, 2023. It&#039;s also a [[B-heptomino]] hassler.&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p28===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 13bo8bo$12bobo6bobo$12bo2bo4bo2bo$10b3obob4obob3o$9bo4bob4obo4bo$10b3o&lt;br /&gt;
b3o2b3ob3o$12bo4b2o4bo$13bo3b2o3bo$14b2o4b2o$14bo6bo$12bobo6bobo$10b3o&lt;br /&gt;
bo6bob3o$9bo4bo2b2o2bo4bo$10b3obo6bob3o$12bobo6bobo$14bo6bo$14b2o4b2o$&lt;br /&gt;
13bo3b2o3bo$9bo2bo4b2o4bo$9b4ob3o2b3ob3o$2ob2o9bob4obo4bo$bobo3bo3b2ob&lt;br /&gt;
ob4obob3o$o4bo2bo3bo2bo4bo2bo$b7o4bobo6bobo$13bo8bo$3b2o$2bo6b2o$2b2o&lt;br /&gt;
4bo2bo$39b2ob2o$8bo2bo5b2o17bo3bobo$8bo2bo4bobo16bo2bo4bo$8bo2bo3bo2bo&lt;br /&gt;
17b7o$8bo2bo4b2o$39b2o$2b2o4bo2bo21b2o6bo$2bo6b2o21bo2bo4b2o$3b2o$26b&lt;br /&gt;
2o4bo2bo$b7o17bo2bo3bo2bo$o4bo2bo16bobo4bo2bo$bobo3bo17b2o5bo2bo$2ob2o&lt;br /&gt;
$32bo2bo4b2o$33b2o6bo$39b2o$21bo8bo$20bobo6bobo4b7o$20bo2bo4bo2bo3bo2b&lt;br /&gt;
o4bo$18b3obob4obob2o3bo3bobo$17bo4bob4obo9b2ob2o$18b3ob3o2b3ob4o$20bo&lt;br /&gt;
4b2o4bo2bo$21bo3b2o3bo$22b2o4b2o$22bo6bo$20bobo6bobo$18b3obo6bob3o$17b&lt;br /&gt;
o4bo2b2o2bo4bo$18b3obo6bob3o$20bobo6bobo$22bo6bo$22b2o4b2o$21bo3b2o3bo&lt;br /&gt;
$20bo4b2o4bo$18b3ob3o2b3ob3o$17bo4bob4obo4bo$18b3obob4obob3o$20bo2bo4b&lt;br /&gt;
o2bo$20bobo6bobo$21bo8bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by David Raucci on November 10, 2021&amp;lt;ref name=&amp;quot;post137514&amp;quot;/&amp;gt; and reduced by [[Dongook Lee]] the next day&amp;lt;ref name=&amp;quot;post137520&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p30===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname        = zweiback2&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 400 THUMBSIZE 2 ZOOM 12 STARTFROM 2 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = [[Zweiback]] (reduced version)&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = x = 43, y = 35, rule = B3/S23&lt;br /&gt;
37b2o$4b2o32bo$4bo$34b7o$2b7o25b2obo3bo$bo3bob2o25b2o3bo2bo$o2bo3b2o9b&lt;br /&gt;
6o11b7o$b7o9bo6bo9bo$8bo7bo8bo8b6o$3b6o8bo6bo9b2obob3o$b3obob2o9b6o13b&lt;br /&gt;
o4bo$o4bo30b2ob4o$4ob2o23b3o3bo$6bo22b5o3bobob2o$2obobo5b3o15bo2b2o2bo&lt;br /&gt;
2bob2o$bobo2bo13b3o6b2obo3b2obo$bobob2o3bo9bobo6b2ob2o3bobo$2obobo4bo&lt;br /&gt;
3bo5bo2bo5b2ob2o3bobob2o$3bobo4bo3bo6bobo5b2obo3b2obobo$3bob2o3bo11bo&lt;br /&gt;
6bo2b2o2bo2bobo$2obo2bo22b5o3bobob2o$2obobo5b3o16b3o3bo$6bo29b2ob4o$4o&lt;br /&gt;
b2o30bo4bo$o4bo13b6o9b2obob3o$b3obob2o9bo6bo8b6o$3b6o8bo8bo7bo$8bo9bo&lt;br /&gt;
6bo9b7o$b7o11b6o9b2o3bo2bo$o2bo3b2o25b2obo3bo$bo3bob2o25b7o$2b7o$38bo$&lt;br /&gt;
4bo32b2o$4b2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ZOOM 12 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by David Raucci on March 10, 2023&amp;lt;ref name=&amp;quot;post158818&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p36===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname        = p36winghassler&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = p36, found by [[Mitchell Riley]] on August 27, 2022&amp;lt;ref name=&amp;quot;post150788&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p37===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 17b2o$17bobo2b2o$19bo3bo16bo$15b4ob3o16bobo$15bo2bo20bobo$18bobob3o13b&lt;br /&gt;
2ob3o$19b2obo2bo18bo$24b2o12b2ob3o$7b2o29b2obo$7bobo18b2o$9bo17bo2bo4b&lt;br /&gt;
o$9b2o23bobo$21b2o10bo2bo2b2o$34b2o3b2o$16b2o11b2o$15bobo9bobo$14b2o&lt;br /&gt;
11b2o$4b2o3b2o$4b2o2bo2bo10b2o$8bobo23b2o$9bo4bo2bo17bo$15b2o18bobo$3b&lt;br /&gt;
ob2o29b2o$b3ob2o12b2o$o18bo2bob2o$b3ob2o13b3obobo$3bobo20bo2bo$3bobo&lt;br /&gt;
16b3ob4o$4bo16bo3bo$21b2o2bobo$26b2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by [[Nico Brown]] on April 21, 2023&amp;lt;ref name=&amp;quot;post160736&amp;quot;/&amp;gt;, and reduced by [[Entity Valkyrie 2]]&amp;lt;ref name=&amp;quot;post160739&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p38===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname          = 44p38&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = [[Raucci&#039;s p38]]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p42===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          =&lt;br /&gt;
5b2o9b2o$b2obo11bobo$b2o2bo2bo8bo$6bobo$7bo2$6b2o$6b2o$2o14b3o$bo14bob&lt;br /&gt;
o$bobo12bo2bo$2b2o3bo9bobo$6bobo9bo3b2o$6bo2bo12bobo$7bobo14bo$7b3o14b&lt;br /&gt;
2o$18b2o$18b2o2$18bo$17bobo$8bo8bo2bo2b2o$7bobo11bob2o$8b2o9b2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by Carson Cheng on November 2, 2022&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p56===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 14bo$14b2o$13b2ob2o$15bo$5b2o7b2o3b2o$5bobo6b2obo12b2o$5b3o8b2o12bo$2b&lt;br /&gt;
2o8b2o4b2o8bobo$bobo8b2o4b2o8b2o$bo12b2o8b3o$2o12bob2o6bobo$11b2o3b2o&lt;br /&gt;
7b2o$16bo$14b2ob2o$16b2o7b2o$17bo7bo2bo2$25bo2bo$24bo2bo$24bobo$25bo$&lt;br /&gt;
14b3o$6b2o6bo2bo7b2o$6bo2bo4b2o2bo6b2o$16b2o$6bo2bo$5bo2bo$5bobo$6bo2$&lt;br /&gt;
6b2o7bo$6b2o7b2o$14b2ob2o$16bo$6b2o7b2o3b2o$6bobo6b2obo12b2o$6b3o8b2o&lt;br /&gt;
12bo$3b2o8b2o4b2o8bobo$2bobo8b2o4b2o8b2o$2bo12b2o8b3o$b2o12bob2o6bobo$&lt;br /&gt;
12b2o3b2o7b2o$17bo$15b2ob2o$17b2o$18bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by David Raucci on March 16, 2023&amp;lt;ref name=&amp;quot;post159102&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p60===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          =&lt;br /&gt;
17b3o$16bo3bo$16bo3bo$17b3o$27bo$26b3o3$17b3o6b3o$16bo3bo$16bo3bo5bobo&lt;br /&gt;
$17b3o6bobo2$21bo4b3o$21bo2$26b3o$27bo$14b2o$15bo$16bo$2bo4bo$2ob4ob2o&lt;br /&gt;
8b3o$2bo4bo10bo2bo$18b2o2bo$20b2o4b2o$26bo$27b3o$29bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by Carson Cheng on September 29, 2022&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p70===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 6b2o10b2o$5bo2bo9bo2bo$o2bo2bobo$5obob2o6bo5bo$6bo2bo6bo5bo2bo$2b3o2b&lt;br /&gt;
3o11bo2bobo$bo4b4o9b2o4bo3bo2b2o$bob2o2b3o18bobo2bo$2bo3bo2bo4b3o11bo&lt;br /&gt;
bobo$3b2obob2o3bo2b2o9b2obob2o$4bobobo5bo3bo8bo2bo3bo$3bo2bobo6b3o10b&lt;br /&gt;
o2b3obo$3b2o2bo8bo10bo2b2o3bo$28bo2b4o$27bo2bo$27b2obob5o$28bobo2bo2b&lt;br /&gt;
o$28bo2bo$29b2o$14b2o$15bo$12b3o$12bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by [[Cvojan]] on October 2, 2022&amp;lt;ref name=&amp;quot;post151666&amp;quot;/&amp;gt;, and reduced by [[Christopher D&#039;Agostino]] on June 29, 2023&amp;lt;ref name=&amp;quot;post163117&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p72===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          =&lt;br /&gt;
5bo21b2o7bo$4bobo19bo2bo5bobo$3bobobo6bo10bobobo5bobo$b3obobo6b3o7bo2b&lt;br /&gt;
ob2o3b2ob2o$o3b4ob2o6bo5bo3bo5bo2bo2bo$b3o4bob3o3b2o6b3ob2o3b2ob3obo$&lt;br /&gt;
3bob2obo4bo12bo7bobo2bo$4b2o2bob3o14b2ob3o3b3o$7b2obo17b2o2b4o$7bobo&lt;br /&gt;
21bo4bo$3bo3bo24b2ob2o$b3obo2bo24bobo$o4bob2o24bobo$ob3o2bo26bo$bo3b2o&lt;br /&gt;
11b3o16b2o$2bo2bo11bo2bo16bo$3bobo11bobo15bobo$4bo13bo5b2o9b2o$23bo2bo&lt;br /&gt;
$24bobo$14b2o9b2o$14bobo$14bo2bo$4b2o9b2o5bo13bo$3bobo15bobo11bobo$3bo&lt;br /&gt;
16bo2bo11bo2bo$2b2o16b3o11b2o3bo$6bo26bo2b3obo$5bobo24b2obo4bo$5bobo&lt;br /&gt;
24bo2bob3o$4b2ob2o24bo3bo$4bo4bo21bobo$5b4o2b2o17bob2o$2b3o3b3ob2o14b&lt;br /&gt;
3obo2b2o$bo2bobo7bo12bo4bob2obo$ob3ob2o3b2ob3o6b2o3b3obo4b3o$bo2bo2bo&lt;br /&gt;
5bo3bo5bo6b2ob4o3bo$2b2ob2o3b2obo2bo7b3o6bobob3o$3bobo5bobobo10bo6bobo&lt;br /&gt;
bo$3bobo5bo2bo19bobo$4bo7b2o21bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by [[Luke Kiernan]] on May 27, 2022, and reduced by iNoMed the next day&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p88===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 14b2o14b2o$14b2o14b2o$30b2o$31bo$13b2obo13bobo$14bobo12b2obo$15bo$14b&lt;br /&gt;
2o$14b2o14b2o$14b2o14b2o4$4b2o35bo$4o4b2o26b3ob2o2b2o$3ob2o2b2o11b3o12b&lt;br /&gt;
4o4b2o$5bo14bo2bo16b2o$20bobo$21bo2$28b2o$27bo2bo$15b2o11bobo$15bobo11b&lt;br /&gt;
2o$15bo2bo$16b2o2$24bo$23bobo$4b2o16bo2bo14bo$2o4b4o12b3o11b2o2b2ob3o&lt;br /&gt;
$2o2b2ob3o26b2o4b4o$4bo35b2o3$14b2o2$13bo3bo12bo$12bo4bo11bobo$11bobo&lt;br /&gt;
bo6bo5bo3bo$10bobobo8b2o4bo3bo$8bo4bo8b2o6bo3bo$8bo3bo18bo3bo$25b2o5b&lt;br /&gt;
obo$10b2o13bo7bo$26b3o$28bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = capped [[Period-88 glider gun]]&lt;br /&gt;
}}&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 14b2o14b2o$14b2o14b2o$30b2o$31bo$13b2obo13bobo$14bobo12b2obo$15bo$14b&lt;br /&gt;
2o$14b2o14b2o$14b2o14b2o4$4b2o35bo$4o4b2o26b3ob2o2b2o$3ob2o2b2o11b3o12b&lt;br /&gt;
4o4b2o$5bo14bo2bo16b2o$20bobo$21bo2$28b2o$27bo2bo$15b2o11bobo$15bobo11b&lt;br /&gt;
2o$15bo2bo$16b2o2$24bo$23bobo$4b2o16bo2bo14bo$2o4b4o12b3o11b2o2b2ob3o&lt;br /&gt;
$2o2b2ob3o26b2o4b4o$4bo35b2o4$14b2o14b2o$14b2o14b2o$30b2o$30bo$13bob2o&lt;br /&gt;
12bobo$13bobo13bob2o$14bo$14b2o$14b2o14b2o$14b2o14b2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p100===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname        = p100winghassler&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by David Raucci and Dongook Lee; reduced by [[Extrementhusiast]]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p128===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname        = p128wingshuttle&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = [[P128 wing shuttle]]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p138===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = 32b2o$28b2obobo$29bobo$29bob2o$28b2obobob2ob2o$27bo3b2o3bobo$28b3o3bo&lt;br /&gt;
bobo$31b7o$28b2obo$27bob2o3b6o$27bo3b2o7bo$28b3o6b3o$30bo6bo$31b6o13$&lt;br /&gt;
31b3o$10bo20bo2bo22b2o3bo$4bo4bobo20bobo21bo2bobobo2bo$4b3o2bobo21bo22b&lt;br /&gt;
ob2obob4o$7bobob2o42b2obo2bo$4b4obo3bo26b2o12bo2bob2ob5o$4bo2bobo3bo25b&lt;br /&gt;
obo12bo2bo2bobobo2bo$6b2obo3bo13b2o9bo2bo12bo5bo2bo2b2o$2o2bo2bo5bo12b&lt;br /&gt;
o2bo9b2o13bo3bob2o$o2bobobo2bo2bo12bobo25bo3bobo2bo$b5ob2obo2bo12b2o26b&lt;br /&gt;
o3bob4o$6bo2bob2o42b2obobo$b4obob2obo22bo21bobo2b3o$bo2bobobo2bo21bob&lt;br /&gt;
o20bobo4bo$5bo3b2o22bo2bo20bo$34b3o13$31b6o$30bo6bo$28b3o6b3o$27bo7b2o&lt;br /&gt;
3bo$28b6o3b2obo$36bob2o$30b7o$29bobobo3b3o$29bobo3b2o3bo$28b2ob2obobo&lt;br /&gt;
b2o$35b2obo$36bobo$34bobob2o$34b2o!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by David Raucci&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===p190===&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          =&lt;br /&gt;
29bo4b2ob2o2bo2bob2o4bo$28bobo2bobob2o2b4obobo2bobo$27bo2bo2bobo10bobo&lt;br /&gt;
2bo2bo$27bob2ob2o2bob6obo2b2ob2obo$24b2obo2bo4bobo6bobo4bo2bob2o$24b2o&lt;br /&gt;
b2obobob2obob4obob2obobob2ob2o$8bo17bo3bo4b5o2b5o4bo3bo$7bobo16bo7bo&lt;br /&gt;
12bo7bo$7bobo17bo3bobo14bobo3bo$5b3ob2o17bo3bo3bo8bo3bo3bo$4bo$5b3ob2o&lt;br /&gt;
24bo10bo$7bob2o$36b2o6b2o$38b6o3$17bo$16bobo$15bo2bo$14b2ob2o$15bobo$&lt;br /&gt;
16bo2$41bo$40bobo$39b2ob2o$39bo2bo$39bobo$40bo3$14b6o$12b2o6b2o$47b2ob&lt;br /&gt;
o$11bo10bo24b2ob3o$53bo$4bo3bo3bo8bo3bo3bo17b2ob3o$3bo3bobo14bobo3bo&lt;br /&gt;
17bobo$2bo7bo12bo7bo16bobo$2bo3bo4b5o2b5o4bo3bo17bo$2ob2obobob2obob4ob&lt;br /&gt;
ob2obobob2ob2o$2obo2bo4bobo6bobo4bo2bob2o$3bob2ob2o2bob6obo2b2ob2obo$&lt;br /&gt;
3bo2bo2bobo10bobo2bo2bo$4bobo2bobob4o2b2obobo2bobo$5bo4b2obo2bo2b2ob2o&lt;br /&gt;
4bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 HEIGHT 500 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = found by Carson Cheng on August 28, 2022, and reduced by iNoMed the next day&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post150788&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 150788&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = Dave Greene&lt;br /&gt;
|date   = September 9, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post151666&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 151666&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = Cvojan&lt;br /&gt;
|date   = October 2, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post163117&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 163117&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = Christopher D&#039;Agostino&lt;br /&gt;
|date   = June 29, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post160736&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 160736&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = Nico Brown&lt;br /&gt;
|date   = April 21, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post160739&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 160739&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = Entity Valkyrie 2&lt;br /&gt;
|date   = April 21, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post159102&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 159102&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = David Raucci&lt;br /&gt;
|date   = March 16, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post158818&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 158818&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = David Raucci&lt;br /&gt;
|date   = March 10, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post151935&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 151935&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = Carson Cheng&lt;br /&gt;
|date   = October 8, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post151136&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 151136&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = Carson Cheng&lt;br /&gt;
|date   = September 17, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post137514&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 137514&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = David Raucci&lt;br /&gt;
|date   = November 10, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post137520&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 137520&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = Dongook Lee&lt;br /&gt;
|date   = November 11, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post137305&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 137305&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|author = David Raucci&lt;br /&gt;
|date   = November 4, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Wing hasslers| ]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Zweiback&amp;diff=133523</id>
		<title>Zweiback</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Zweiback&amp;diff=133523"/>
		<updated>2023-07-17T08:19:24Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: This is also a wing hassler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name         = Zweiback&lt;br /&gt;
|pname        = zweiback&lt;br /&gt;
|c            = 331&lt;br /&gt;
|bx           = 79&lt;br /&gt;
|by           = 21&lt;br /&gt;
|p            = 30&lt;br /&gt;
|m            = 15&lt;br /&gt;
|h            = 110.3&lt;br /&gt;
|v            = 0.56&lt;br /&gt;
|sv           = 0.08&lt;br /&gt;
|discoverer   = Mark Niemiec&lt;br /&gt;
|discoveryear = 1995&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B38/S238&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B34e8/S234e5cy6i7e8&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|animated     = true&lt;br /&gt;
|apgcode      = xp30_y3c4goxo8y3g8oy0o8yco4km1e8goy2ggz8e1v03lh56o31uhei8ggwh221u1f83asy9ul1k7015iai2asgw14ngcikmicggzx123ciqajc3q90113fkgjli810ob0bvy16952y0flg5s0v0gh3w335js3u1g7o82ah0v0s4zy9123y2624t1qb871yb4701107421y247011629d11011zym1&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 ZOOM 6 GPS 5 LOOP 30 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Zweiback&#039;&#039;&#039; is a {{period|30}} [[oscillator]] that was found by [[Mark Niemiec]] on February 13, {{year|1995}}.&amp;lt;ref&amp;gt;{{CiteHickersonOscillators|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt; It consists of two [[heavyweight volcano]]es [[hassle|hassling]] a [[loaf]]; the loaf turns into a [[wing]] by taking a [[domino]] spark, which receives another five ticks later.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = zweiback2&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 400 THUMBSIZE 2 ZOOM 10 GPS 10 LOOP 30 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A smaller version&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Etymology ==&lt;br /&gt;
Zwieback is a German term meaning &amp;quot;twice baked&amp;quot;,&amp;lt;ref&amp;gt;{{cite web|url=https://en.wiktionary.org/wiki/zwieback|title=zwieback|work=Wiktionary|accessdate=May 18, 2023}}&amp;lt;/ref&amp;gt; and refers to a certain kind of toasted bread that is baked twice. The name was coined (and misspelt) by Mark Niemiec twice.&amp;lt;ref name=&amp;quot;post37698&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[p35 beehive hassler]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post37698&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Help with names&lt;br /&gt;
|p      = 37698&lt;br /&gt;
|author = Mark D. Niemiec&lt;br /&gt;
|date   = November 27, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_z.htm#zweiback}}&lt;br /&gt;
* {{LinkCatagolue|xp30_y3c4goxo8y3g8oy0o8yco4km1e8goy2ggz8e1v03lh56o31uhei8ggwh221u1f83asy9ul1k7015iai2asgw14ngcikmicggzx123ciqajc3q90113fkgjli810ob0bvy16952y0flg5s0v0gh3w335js3u1g7o82ah0v0s4zy9123y2624t1qb871yb4701107421y247011629d11011zym1|format=extended}}&lt;br /&gt;
* {{LinkWikipedia|Zwieback|name=Zwieback}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|osc=turn180}}&lt;br /&gt;
[[Category:Wing hasslers]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Zweiback&amp;diff=133522</id>
		<title>Zweiback</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Zweiback&amp;diff=133522"/>
		<updated>2023-07-17T08:13:11Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name         = Zweiback&lt;br /&gt;
|pname        = zweiback&lt;br /&gt;
|c            = 331&lt;br /&gt;
|bx           = 79&lt;br /&gt;
|by           = 21&lt;br /&gt;
|p            = 30&lt;br /&gt;
|m            = 15&lt;br /&gt;
|h            = 110.3&lt;br /&gt;
|v            = 0.56&lt;br /&gt;
|sv           = 0.08&lt;br /&gt;
|discoverer   = Mark Niemiec&lt;br /&gt;
|discoveryear = 1995&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B38/S238&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B34e8/S234e5cy6i7e8&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|animated     = true&lt;br /&gt;
|apgcode      = xp30_y3c4goxo8y3g8oy0o8yco4km1e8goy2ggz8e1v03lh56o31uhei8ggwh221u1f83asy9ul1k7015iai2asgw14ngcikmicggzx123ciqajc3q90113fkgjli810ob0bvy16952y0flg5s0v0gh3w335js3u1g7o82ah0v0s4zy9123y2624t1qb871yb4701107421y247011629d11011zym1&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 ZOOM 6 GPS 5 LOOP 30 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Zweiback&#039;&#039;&#039; is a {{period|30}} [[oscillator]] that was found by [[Mark Niemiec]] on February 13, {{year|1995}}.&amp;lt;ref&amp;gt;{{CiteHickersonOscillators|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt; It consists of two [[heavyweight volcano]]es [[hassle|hassling]] a [[loaf]].&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = zweiback2&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 400 THUMBSIZE 2 ZOOM 10 GPS 10 LOOP 30 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A smaller version&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Etymology ==&lt;br /&gt;
Zwieback is a German term meaning &amp;quot;twice baked&amp;quot;,&amp;lt;ref&amp;gt;{{cite web|url=https://en.wiktionary.org/wiki/zwieback|title=zwieback|work=Wiktionary|accessdate=May 18, 2023}}&amp;lt;/ref&amp;gt; and refers to a certain kind of toasted bread that is baked twice. The name was coined (and misspelt) by Mark Niemiec twice.&amp;lt;ref name=&amp;quot;post37698&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[p35 beehive hassler]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post37698&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Help with names&lt;br /&gt;
|p      = 37698&lt;br /&gt;
|author = Mark D. Niemiec&lt;br /&gt;
|date   = November 27, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_z.htm#zweiback}}&lt;br /&gt;
* {{LinkCatagolue|xp30_y3c4goxo8y3g8oy0o8yco4km1e8goy2ggz8e1v03lh56o31uhei8ggwh221u1f83asy9ul1k7015iai2asgw14ngcikmicggzx123ciqajc3q90113fkgjli810ob0bvy16952y0flg5s0v0gh3w335js3u1g7o82ah0v0s4zy9123y2624t1qb871yb4701107421y247011629d11011zym1|format=extended}}&lt;br /&gt;
* {{LinkWikipedia|Zwieback}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|osc=turn180}}&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Tapeworm&amp;diff=133521</id>
		<title>Tapeworm</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tapeworm&amp;diff=133521"/>
		<updated>2023-07-17T08:07:21Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stilllife&lt;br /&gt;
|name             = Tapeworm&lt;br /&gt;
|pname            = tapeworm&lt;br /&gt;
|c                = 13&lt;br /&gt;
|bx               = 7&lt;br /&gt;
|by               = 5&lt;br /&gt;
|fc               = 22.3&lt;br /&gt;
|rulemin          = B/S23&lt;br /&gt;
|rulemax          = B3678/S012345678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life]]&lt;br /&gt;
|isorulemin       = B/S2-cn3nr&lt;br /&gt;
|isorulemax       = B2ikn34-nrt5-knq678/S012345678&lt;br /&gt;
|synthesis        = 4&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|apgcode          = xs13_321fgkc&lt;br /&gt;
|niemiecid        = 13.198&lt;br /&gt;
|pentadecathlonid = 13.160&lt;br /&gt;
|viewerconfig     = [[ ZOOM 48 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Tapeworm&#039;&#039;&#039; (or &#039;&#039;&#039;snake with curl&#039;&#039;&#039;) is a {{slcells|13|text=13-cell}} [[still life]]. Despite being particularly common, this still life did not have a name until 2019, when the two aforementioned names were mentioned in its [[Catagolue]] comment section.&amp;lt;ref name=&amp;quot;catagolue_object&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Construction ==&lt;br /&gt;
&lt;br /&gt;
Tapeworm is known to be [[Glider synthesis|constructible]] with 4 gliders.&amp;lt;ref name=&amp;quot;catagolue_object&amp;quot; /&amp;gt; Several known syntheses can be found in [[Mark Niemiec&#039;s database]].&amp;lt;ref name=&amp;quot;niemiec&amp;quot; /&amp;gt; A {{gliders|4}} synthesis was found in August {{year|2017}}.&amp;lt;ref name=&amp;quot;post48924&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = x = 28, y = 44, rule = B3/S23&lt;br /&gt;
19bobo$20b2o$20bo6$13bo$14bo$12b3o11bo$25bo$25b3o2$ob2o$2obo$3bob2o$3b&lt;br /&gt;
o2bo$4b2o23$7b2o$6bobo$8bo!&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 470 THEME Book ZOOM 10 X 4 AUTOSTART GPS 12 T 0 PAUSE 1 T 16 PAUSE 3 T 101 PAUSE 1 T 102 PAUSE 2 LOOP 103 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A 4G synthesis&amp;lt;ref name=&amp;quot;post48924&amp;quot; /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = x = 43, y = 25, rule = B3/S23&lt;br /&gt;
bo$2bo$3o20bobo$23b2o$24bo3$19bo$18bo$18b3o6$23b3o$23bo12bob2o$24bo11b&lt;br /&gt;
2obo$39bob2o$39bo2bo$40b2o2$20bo$19b2o$19bobo!&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 400 THEME Book ZOOM 10 AUTOSTART GPS 12 T 0 PAUSE 1 T 16 PAUSE 3 T 42 PAUSE 1 T 43 PAUSE 2 LOOP 44 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A 5G synthesis&amp;lt;ref name=&amp;quot;niemiec&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;{{LinkForumThread|format=ref|p=37575|title=Re: 4 glider syntheses}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Occurrence ==&lt;br /&gt;
{{related|List of common still lifes}}&lt;br /&gt;
&lt;br /&gt;
It is the 102nd [[List of common still lifes|most common still life]] on [[Adam P. Goucher]]&#039;s [[Catagolue]], being less common than [[cis-boat with nine]] but more common than [[loaf back tie loaf]]. It is the 6th most common still life with 14 cells, being less common than [[cis-boat on cap]] but more common than [[boat with hooked nine]].&lt;br /&gt;
&lt;br /&gt;
The [[octo3obj database]] contains four collisions with tapeworm in the ash.{{refn|One collision (headerless RLE {{headerlessRLE|2o$2o2b2o$4b2o6$2bo6b2o$2bo6b2o$2bo$4b3o$4bo$5bo!}}) has final population 278 with 6 escaping gliders. Three other collisions converge to sequence {{headerlessRLE|10b3o$9bo3bo$3o5bo5bo$8bo5bo$8bo5bo$9bo3bo$10b3o3$8bo$8bo$8bo!}} with 11 escaping gliders and final population 589.}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Worm]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post48924&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format  = ref&lt;br /&gt;
|p       = 48924&lt;br /&gt;
|title   = Re: 4 glider syntheses&lt;br /&gt;
|author  = Simon Ekström&lt;br /&gt;
|date    = August 16, 2017&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;niemiec&amp;quot;&amp;gt;{{LinkNiemiec|p1-13.htm|The 240 thirteen-bit still-lifes|rle=13/13-198.rle|nobullet=nobullet}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;catagolue_object&amp;quot;&amp;gt;{{LinkCatagolue|xs13_321fgkc|style=nobullet}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{LinkCatagolue|xs13_321fgkc}}&lt;br /&gt;
* {{LinkPentadecathlonObject|13.160}}&lt;br /&gt;
* {{LinkNiemiec|p1-13.htm|The 240 thirteen-bit still-lifes|rle=13/13-198.rle}}&lt;br /&gt;
* {{LinkWikipedia|Eucestoda|name=Tapeworm}} (name origin)&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Taco&amp;diff=133520</id>
		<title>Taco</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Taco&amp;diff=133520"/>
		<updated>2023-07-17T08:05:39Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}{{Spaceship&lt;br /&gt;
|name             = Taco&lt;br /&gt;
|pname            = 90p7h1v0&lt;br /&gt;
|c                = 90&lt;br /&gt;
|bx               = 29&lt;br /&gt;
|by               = 25&lt;br /&gt;
|dir              = Orthogonal&lt;br /&gt;
|p                = 7&lt;br /&gt;
|m                = 7&lt;br /&gt;
|s                = c/7&lt;br /&gt;
|z                = c/7&lt;br /&gt;
|h                = 89.7&lt;br /&gt;
|discoverer       = Frank Everdij&lt;br /&gt;
|discoveryear     = 2022&lt;br /&gt;
|rulemin          = B3/S23&lt;br /&gt;
|rulemax          = B38/S238&lt;br /&gt;
|isorulemin       = B3/S23&lt;br /&gt;
|isorulemax       = B34e5cen6c7c8/S234cjy5ek6i7e8&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|rle              = true&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|viewerconfig     = #C [[ THUMBSIZE 3 ZOOM 15 WIDTH 610 HEIGHT 570 TRACKLOOP 7 0 -1/7 GPS 10 ]]&lt;br /&gt;
|apgcode          = xq7_69a4yh4a96zd6wg8gybg8gw6dzx5aa8yb8aa5zy0396p244y3442p693zy111w6egkg0gkge6w11&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Taco&#039;&#039;&#039; (systematic name: &#039;&#039;&#039;90P7H1V0&#039;&#039;&#039;) is a [[c/7 orthogonal]], bilaterally [[symmetric]] [[spaceship]] discovered on December 5, {{year|2022}} by [[Frank Everdij]] using [[ikpx2]].&amp;lt;ref name=&amp;quot;post154464&amp;quot; /&amp;gt; Its front end contains two copies of the [[loafer]]&#039;s front end, while its back end produces two one-bit [[tail spark]]s. It is the third known [[Elementary spaceship|elementary]] c/7 orthogonal spaceship, after loafer and [[339P7H1V0]].&lt;br /&gt;
&lt;br /&gt;
The name &amp;quot;taco&amp;quot; was chosen by Frank Everdij out of several bread-related names from the similarity to the loafer in both speed and loaf-pushing mechanism.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;qqd&amp;quot; posted a taco eater on June 27, 2023.&amp;lt;ref name=&amp;quot;post163004&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = tacoeater&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 ZOOM 12 HEIGHT 600 ]]&lt;br /&gt;
|caption      = Taco eater&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post154464&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|p      = 154464&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Spaceship Discussion Thread&lt;br /&gt;
|author = Frank Everdij &lt;br /&gt;
|date   = December 5, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post163004&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|p      = 163004&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Spaceship Eaters&lt;br /&gt;
|author = qqd&lt;br /&gt;
|date   = June 27, 2023&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkCatagolue|xq7_69a4yh4a96zd6wg8gybg8gw6dzx5aa8yb8aa5zy0396p244y3442p693zy111w6egkg0gkge6w11}}&lt;br /&gt;
* {{LinkWikipedia|Taco}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|orthogonal2}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Squaredance&amp;diff=133519</id>
		<title>Squaredance</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Squaredance&amp;diff=133519"/>
		<updated>2023-07-17T08:03:56Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Agar&lt;br /&gt;
|name         = Squaredance&lt;br /&gt;
|pname        = squaredance&lt;br /&gt;
|p            = 2&lt;br /&gt;
|d            = 0.25&lt;br /&gt;
|discoverer   = Don Woods&lt;br /&gt;
|discoveryear = 1971&lt;br /&gt;
|rulemin      = B3/S&lt;br /&gt;
|rulemax      = B345678/S02345678&lt;br /&gt;
|isorulemin   = B3q/S&lt;br /&gt;
|isorulemax   = B012-ak345678/S01c2345678&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Life]], [[HighLife]]&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|animated     = yes&lt;br /&gt;
|viewerconfig = #C [[ ZOOM 16 THUMBSIZE 2 HEIGHT 480 GPS 2 AUTOSTART ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Squaredance&#039;&#039;&#039; is a [[period]] 2 [[agar]] and [[phoenix]] that was found in {{year|1971}} by [[Don Woods]].&amp;lt;ref&amp;gt;{{CiteLifeline|vol=2}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;DRH&amp;quot;&amp;gt;{{CiteHickersonOscillators|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt; Woods originally referred to it as &amp;quot;&#039;&#039;&#039;quilt&#039;&#039;&#039;&amp;quot;, but Wainwright renamed it &amp;quot;squaredance&amp;quot; because the pairs of bits seem to move in and out around empty squares.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin:auto;width:300px;&amp;quot;&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname        = squaredancestabilization&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 5 AUTOSTART ]]&lt;br /&gt;
|caption      = A stabilisation of squaredance discovered by [[Dean Hickerson]] on March 25, 1993&amp;lt;ref name=&amp;quot;DRH&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|rle          = x = 16, y = 16, rule = B3/S23&lt;br /&gt;
5bo$5bo3b3o$4bo2bo$9b2o$bo3b2o6bo$bobo4bo2bo2b2o$bobo4bo2bo$5b2o6bo$2bo6b2o$4bo2bo4bobo$2o2bo2bo4bobo$2bo6b2o3bo$5b2o$8bo2bo$4b3o3bo$10bo!&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 5 AUTOSTART ]]&lt;br /&gt;
|caption      = A thinner but non-extensible stabilisation discovered in the C4_4 census on [[Catagolue]] with components of the [[Lei]].&lt;br /&gt;
|apgcode      = xp2_0gw4jg40aa20gz0383g44g3883g4h1z1120hkk182i8103zy61&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{LinkLexicon|lex_s.htm#squaredance}}&lt;br /&gt;
* {{LinkWikipedia|Square_dance}} (name origin)&lt;br /&gt;
&lt;br /&gt;
[[Category:Phoenices]]&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Spaghetti_monster&amp;diff=133518</id>
		<title>Spaghetti monster</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Spaghetti_monster&amp;diff=133518"/>
		<updated>2023-07-17T08:02:41Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Spaceship&lt;br /&gt;
|name         = Spaghetti monster&lt;br /&gt;
|pname        = spaghettimonster&lt;br /&gt;
|c            = 702&lt;br /&gt;
|bx           = 27&lt;br /&gt;
|by           = 137&lt;br /&gt;
|dir          = Orthogonal&lt;br /&gt;
|p            = 7&lt;br /&gt;
|m            = 7&lt;br /&gt;
|s            = 3c/7&lt;br /&gt;
|z            = 3c/7&lt;br /&gt;
|h            = 680&lt;br /&gt;
|discoverer   = Tim Coe&lt;br /&gt;
|discoveryear = 2016&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B3/S23&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B3/S23&lt;br /&gt;
|animated     = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 1800 THUMBSIZE 3 ZOOM 12 GPS 12 TRACKLOOP 7 0 -3/7 ]]&lt;br /&gt;
|apgcode      = xq7_y2g4uhe40g04ehu4gzy1gpp1tj77277jt1ppgzy010g2gii8x8iig2g01zy31gpt7x7tpg1zx4uhp1dkogxgokd1phu4zy0a0ogo1y31ogo0azx12313u698g0g896u31321z713ew8s50mc101cm05s8we317z221a90501y510509a122zkm3yh3mkz0decwo2ciscxcsic2owcedzxcs11p9gy3g9p11scz03kgtgf0g1ic272ci1g0fgtgk3zw111011c1da3j3ad1c110111zy3e6os0o1o0so6ezy236hcf01010fch63zy41h1y11h1zy475cro0orc57zy4gk423c324kgzy1gi5pj01x10jp5igzy02444nu4gxg4un4442zy382t0thght0t28zy28k3rm31013mr3k8zy17up10oo808oo01pu7zy1oe0o710ggg017o0eozxocd8cbw2d5d2wbc8dcozy37w139o931w7zy61330331&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;spaghetti monster&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;post31878&amp;quot; /&amp;gt; (or &#039;&#039;&#039;702P7H3V0&#039;&#039;&#039;) is a [[3c/7 orthogonal]] [[spaceship]] discovered by [[Tim Coe]] on 11 June {{year|2016}}.&amp;lt;ref name=&amp;quot;post31863&amp;quot; /&amp;gt; It was the first spaceship of that speed to be discovered; it was also the smallest until the discovery of [[Anura]]. Despite its large size, it is considered an [[elementary spaceship]]. It can support a period-28 [[3c/7 wave]] found by [[Stephen Silver]] on February 2, {{year|2000}},&amp;lt;ref name=&amp;quot;post31872&amp;quot; /&amp;gt; and is known to support certain period-7 waves as well.&amp;lt;ref name=&amp;quot;post119133&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Luka Okanishi]] constructed the first 3c/7 [[puffer]] on March 1, {{year|2017}} using several spaghetti monsters.&amp;lt;ref name=&amp;quot;post41074&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Martin Grant]] constructed a spaghetti monster [[eater]] on October 10, {{year|2019}}.&amp;lt;ref name=&amp;quot;post84018&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Dylan Chen]] found a smaller way to support the front third on January 4, {{year|2021}}.&amp;lt;ref name=&amp;quot;post118021&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{{gallery top}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = 3c7wavestabilization&lt;br /&gt;
|viewerconfig = #C [[ WIDTH 760 HEIGHT 570 THUMBSIZE 2 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = Spaghetti monsters stabilizing a 3c/7 [[wave]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = spaghettimonstereater&lt;br /&gt;
|viewerconfig = #C [[ WIDTH 760 HEIGHT 570 THUMBSIZE 2 ZOOM 1.5 QUALITY ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = Spaghetti monster eater&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery bottom}}&lt;br /&gt;
&lt;br /&gt;
==References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post31863&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 31863&lt;br /&gt;
|title  = Re: Spaceship Discussion Thread&lt;br /&gt;
|author = Tim Coe&lt;br /&gt;
|date   = June 11, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post31872&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 31872&lt;br /&gt;
|title  = Re: Spaceship Discussion Thread&lt;br /&gt;
|author = Matthias Merzenich&lt;br /&gt;
|date   = June 11, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post31878&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 31878&lt;br /&gt;
|title  = Re: Spaceship Discussion Thread&lt;br /&gt;
|author = Tim Coe&lt;br /&gt;
|date   = June 11, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post41074&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 41074&lt;br /&gt;
|title  = Re: Spaceship Discussion Thread&lt;br /&gt;
|author = Luka Okanishi&lt;br /&gt;
|date   = March 1, 2017&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post84018&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 84018&lt;br /&gt;
|title  = Another speed has been eaten!&lt;br /&gt;
|author = Martin Grant&lt;br /&gt;
|date   = October 10, 2019&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post118021&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 118021&lt;br /&gt;
|title  = Re: Spaceship Discussion Thread&lt;br /&gt;
|author = Dylan Chen&lt;br /&gt;
|date   = January 4, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post119133&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 119133&lt;br /&gt;
|title  = Re: Spaceship Discussion Thread&lt;br /&gt;
|author = Matthias Merzenich&lt;br /&gt;
|date   = January 14, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_s.htm#spaghettimonster}}&lt;br /&gt;
* {{LinkCatagolue|xq7_y2g4uhe40g04ehu4gzy1gpp1tj77277jt1ppgzy010g2gii8x8iig2g01zy31gpt7x7tpg1zx4uhp1dkogxgokd1phu4zy0a0ogo1y31ogo0azx12313u698g0g896u31321z713ew8s50mc101cm05s8we317z221a90501y510509a122zkm3yh3mkz0decwo2ciscxcsic2owcedzxcs11p9gy3g9p11scz03kgtgf0g1ic272ci1g0fgtgk3zw111011c1da3j3ad1c110111zy3e6os0o1o0so6ezy236hcf01010fch63zy41h1y11h1zy475cro0orc57zy4gk423c324kgzy1gi5pj01x10jp5igzy02444nu4gxg4un4442zy382t0thght0t28zy28k3rm31013mr3k8zy17up10oo808oo01pu7zy1oe0o710ggg017o0eozxocd8cbw2d5d2wbc8dcozy37w139o931w7zy61330331|format=extended}}&lt;br /&gt;
* {{LinkWikipedia|Flying_Spaghetti_Monster}} (name origin) &lt;br /&gt;
&lt;br /&gt;
{{Symmetry|orthogonal2}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Soba&amp;diff=133517</id>
		<title>Soba</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Soba&amp;diff=133517"/>
		<updated>2023-07-17T07:59:29Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Spaceship&lt;br /&gt;
|name         = Soba&lt;br /&gt;
|pname        = soba&lt;br /&gt;
|c            = 257&lt;br /&gt;
|bx           = 31&lt;br /&gt;
|by           = 40&lt;br /&gt;
|dir          = Orthogonal&lt;br /&gt;
|p            = 7&lt;br /&gt;
|m            = 7&lt;br /&gt;
|s            = 3c/7&lt;br /&gt;
|z            = 3c/7&lt;br /&gt;
|h            = 253.7&lt;br /&gt;
|discoverer   = Dylan Chen&lt;br /&gt;
|discoveryear = 2020&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B3/S238&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B34e/S234c8&lt;br /&gt;
|rle          = true&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|viewerconfig = #C [[ TRACKLOOP 7 0 -3/7 THUMBSIZE 2 GPS 12 ZOOM 12 HEIGHT 640 ]]&lt;br /&gt;
|apgcode      = xq7_y1g08294y549280gzi2a8a281uc0211x1120cu182a8a2izw3544gw3231348431323wg4453zo448831x842gxg248x138844oz068ggl88x2bjo0ojb2x88lgg86zy0ow37obaa41014aabo73wozy04scwpk4mss0ssm4kpwcs4zy279lgia5y15aigl97&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Soba&#039;&#039;&#039;&amp;lt;ref name=&amp;quot;message795484431996682260&amp;quot; /&amp;gt; (or &#039;&#039;&#039;257P7H3V0&#039;&#039;&#039;) is a [[3c/7 orthogonal]] [[spaceship]] found by [[Dylan Chen]] on December 31, {{year|2020}}&amp;lt;ref name=&amp;quot;post117548&amp;quot; /&amp;gt; as a smaller stabilization of the front two-fifths of [[Anura]]. It was formerly the smallest known 3c/7 orthogonal spaceship, taking that title from Anura, which Chen had found three days earlier. It has since been superseded by [[232P7H3V0]], which was discovered in February {{year|2022}}.&lt;br /&gt;
&lt;br /&gt;
==References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;message795484431996682260&amp;quot;&amp;gt;{{CiteDiscord&lt;br /&gt;
|author  = Dongook Lee&lt;br /&gt;
|date    = January 3, 2021&lt;br /&gt;
|channel = cgol&lt;br /&gt;
|id      = 795484431996682260&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post117548&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Spaceship Discussion Thread&lt;br /&gt;
|p      = 117548&lt;br /&gt;
|author = Dylan Chen&lt;br /&gt;
|date   = December 31, 2020&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkCatagolue|xq7_y1g08294y549280gzi2a8a281uc0211x1120cu182a8a2izw3544gw3231348431323wg4453zo448831x842gxg248x138844oz068ggl88x2bjo0ojb2x88lgg86zy0ow37obaa41014aabo73wozy04scwpk4mss0ssm4kpwcs4zy279lgia5y15aigl97}}&lt;br /&gt;
* {{LinkWikipedia|Soba}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|orthogonal2}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Sombreros&amp;diff=133516</id>
		<title>Sombreros</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Sombreros&amp;diff=133516"/>
		<updated>2023-07-17T07:57:15Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name             = Sombreros&lt;br /&gt;
|pname            = sombreros&lt;br /&gt;
|c                = 50&lt;br /&gt;
|bx               = 18&lt;br /&gt;
|by               = 11&lt;br /&gt;
|p                = 6&lt;br /&gt;
|m                = 6&lt;br /&gt;
|h                = 5.3&lt;br /&gt;
|v                = 0.25&lt;br /&gt;
|sv               = 0.25&lt;br /&gt;
|discoverer       = David Buckingham&lt;br /&gt;
|discoveryear     = 1972&lt;br /&gt;
|rulemin          = B3/S23&lt;br /&gt;
|rulemax          = B378/S1235678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin       = B3eiry/S2-in3-ac&lt;br /&gt;
|isorulemax       = B2kn34-akqyz5-ekqy6-ai78/S1234-eint5678&lt;br /&gt;
|synthesis        = 38&lt;br /&gt;
|synthesis2       = 36&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|animated         = true&lt;br /&gt;
|pentadecathlonid = 50P6.9&lt;br /&gt;
|apgcode          = xp6_0ggr1e8y08e1rggz122m1s5y05s1m221zx11y411&lt;br /&gt;
|apgcode2         = xp6_o809fgf908oz0113020311zok4mgagm4kozx47074&lt;br /&gt;
|viewerconfig     = #C [[ HEIGHT 500 THUMBSIZE 3 ZOOM 24 GPS 3 LOOP 6 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Sombreros&#039;&#039;&#039; is a {{period|6}} [[oscillator]] that was found by [[David Buckingham]] in December {{year|1972}}.&amp;lt;ref&amp;gt;{{CiteLifeline|vol=9|pages=page 3}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{CiteHickersonOscillators|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt; Each half by itself is called a &#039;&#039;&#039;sombrero&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If the two sombreros are moved three cells closer to one another, the oscillator&#039;s [[period]] drops to {{period|4|text=4 ticks}} and the result is just a less compact form of [[Achim&#039;s p4]]:&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = smallersombreros&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 GPS 3 AUTOSTART ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = Period 4 variant&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Two sombreros moved two spaces closer and staggered by one space forms a period 5 oscillator called [[Siesta]].&lt;br /&gt;
&lt;br /&gt;
[[goldenratio]] found a {{gliders|36}} [[synthesis]] of a sombreros variant&amp;lt;ref group=c&amp;gt;{{LinkCatagolue|xp6_o809fgf908oz0113020311zok4mgagm4kozx47074|style=nobullet}}&amp;lt;/ref&amp;gt; in October {{year|2020}}.&amp;lt;ref name=&amp;quot;post105471&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One sombrero can be supported by two [[eater 1]]s.&amp;lt;ref name=&amp;quot;post37439&amp;quot; /&amp;gt; The resulting oscillator is shown below, with a stator variant&amp;lt;ref name=&amp;quot;post37442&amp;quot; /&amp;gt; that is thinner but taller:&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle          = x = 12, y = 11, rule = B3/S23&lt;br /&gt;
2o6b2o$bo5bo2bo$bobo3bob2o$2b2o2b2o$6bo2b2o$8b2obo$6bo4bo$2b2o2b2ob2o$&lt;br /&gt;
bobo3bobo$bo5bobo$2o6bo!&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 GPS 3 AUTOSTART ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = Stator variant of sombrero supported by two eaters&amp;lt;ref name=&amp;quot;post37439&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;post37442&amp;quot; /&amp;gt;&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp6_178cwoe1lmz0o4cw6s1t43z11y21&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
One period-6 stabilisation of [[Scrubber#Scrubber_half_stabilisations|scrubber halves]] involves them each mutually stabilising with a single sombrero, and can be extended to a glide-symmetric wick.&lt;br /&gt;
&lt;br /&gt;
==In other rules==&lt;br /&gt;
A lone sombrero&amp;lt;ref&amp;gt;Headerless RLE: {{headerlessRLE|3b2ob2o$b3o3b3o$o4bo4bo$2ob2ob2ob2o$4bobo$4bobo$5bo!}}&amp;lt;/ref&amp;gt; would function as a period-6 pipsquirter if not for the births triggered by the b3q transition when the edges have not receded in the phase of the domino&#039;s appearance. However, interestingly, when b3q is removed (for the rule called {{rl|qlife}}), it becomes a period-9 pipsquirter&amp;lt;ref group=c&amp;gt;{{LinkCatagolue|xp9_ok4mhdhm4kozy0343|rule=b3-qs23|style=nobullet}}&amp;lt;/ref&amp;gt; with a single cell of additional clearance.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle          = x = 8, y = 11, rule = B3-q/S23&lt;br /&gt;
3b2o$2bobo$2bo$b2obo$o3b3o$ob2o3bo$o3b3o$b2obo$2bo$2bobo$3b2o!&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 600 THUMBSIZE 3 ZOOM 36 X -3/2 GPS 3 AUTOSTART ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = qlife p9 sombrero&lt;br /&gt;
|style        = width:100px;&lt;br /&gt;
|apgcode      = xp9_ok4mhdhm4kozy0343/b3-qs23&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post37439&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 37439&lt;br /&gt;
|title  = Re: Oscillator Discoveries Thread&lt;br /&gt;
|author = toroidalet&lt;br /&gt;
|date   = November 19th, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post37442&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 37442&lt;br /&gt;
|title  = Re: Oscillator Discoveries Thread&lt;br /&gt;
|author = BlinkerSpawn&lt;br /&gt;
|date   = November 19th, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post105471&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|p      = 105471&lt;br /&gt;
|title  = Re: Synthesising Oscillators&lt;br /&gt;
|author = goldenratio&lt;br /&gt;
|date   = October 3, 2020&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Catagolue&lt;br /&gt;
&amp;lt;references group=c&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_s.htm#sombreros}}&lt;br /&gt;
* {{LinkPentadecathlonObject|50P6.9}}&lt;br /&gt;
* {{LinkCatagolue|xp6_0ggr1e8y08e1rggz122m1s5y05s1m221zx11y411}}&lt;br /&gt;
* {{LinkWikipedia|Sombrero|name=Sombrero}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|orthogonal4}}&lt;br /&gt;
{{seminatural}}&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Rattlesnake&amp;diff=133515</id>
		<title>Rattlesnake</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Rattlesnake&amp;diff=133515"/>
		<updated>2023-07-17T07:51:47Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name             = Rattlesnake&lt;br /&gt;
|pname            = rattlesnake&lt;br /&gt;
|c                = 33&lt;br /&gt;
|bx               = 13&lt;br /&gt;
|by               = 15&lt;br /&gt;
|p                = 11&lt;br /&gt;
|m                = 11&lt;br /&gt;
|h                = 5.82&lt;br /&gt;
|v                = 0.51&lt;br /&gt;
|discoverer       = Dean Hickerson&lt;br /&gt;
|discoveryear     = 2016&lt;br /&gt;
|rulemin          = B3/S23&lt;br /&gt;
|rulemax          = B38/S2378&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin       = B3-y/S23&lt;br /&gt;
|isorulemax       = B34ceqt5ci6cen7c8/S234cekqry5-cqy6-a78&lt;br /&gt;
|synthesis        = 25&lt;br /&gt;
|synthesisRLE     = true&lt;br /&gt;
|animated         = true&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|viewerconfig     = #C [[ GPS 4 THUMBSIZE 3 ZOOM 21 HEIGHT 480 ]]&lt;br /&gt;
|apgcode          = xp11_y0dbzggci5ld3xog8oz0343&lt;br /&gt;
|pentadecathlonid = 33P11.1&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Rattlesnake&#039;&#039;&#039; is a {{period|11}} [[oscillator]] (so named because it has 11 letters and a snake for a [[rock]]&amp;lt;ref name=&amp;quot;post26682&amp;quot; /&amp;gt;) found by [[Dean Hickerson]] in a [[drifter]] search on January 10, {{year|2016}}.&amp;lt;ref name=&amp;quot;post26591&amp;quot; /&amp;gt; In terms of its {{cells|33|text=33 cells}}, it is currently tied for the smallest known period 11 oscillator with [[diamondback]]. It gives two [[dot spark]]s, one on the right and one on the left, and this allows the construction of [[non-trivial]] higher-period oscillators as seen in [[#LCM oscillators|the next section]].&lt;br /&gt;
&lt;br /&gt;
Martin Grant found a {{gliders|37}} [[synthesis]] of this oscillator no later than January 13, 2016.&amp;lt;ref name=&amp;quot;post26244&amp;quot; /&amp;gt; [[Tanner Jacobi]] improved the synthesis of the base still life by four gliders in April {{year|2021}}.&amp;lt;ref name=&amp;quot;message835934387925155840&amp;quot; /&amp;gt; More reduction has since brought the cost down to {{gliders|25|text=25 gliders}} (see the [[Catagolue]]-generated synthesis [[RLE]] in the infobox).&lt;br /&gt;
&lt;br /&gt;
==LCM oscillators==&lt;br /&gt;
The [[LCM oscillator]]s below are listed due to being the smallest known ones by population, while also satisfying the condition that at least one cell oscillates at the full period.&lt;br /&gt;
The oscillators are shown with visible [[envelope]]s, to highlight interactions between subpatterns.&lt;br /&gt;
{{gallery top}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = catereronrattlesnake&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 15 ZOOM 12 THUMBSIZE 2 HEIGHT 400 THEME Book STARTFROM 33 ]]&lt;br /&gt;
|caption      = p33 with [[caterer]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp33_8ehe8oy1o8a6zw12ll64x88c04c6ezy056y313&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = moldonrattlesnake&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 20 ZOOM 12 THUMBSIZE 2 HEIGHT 400 THEME Book STARTFROM 44 ]]&lt;br /&gt;
|caption      = p44 with [[mold]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp44_0oql96xmqzgh1gxeqaa4oz1011y217871&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = pseudobarberpoleonrattlesnake&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 25 ZOOM 12 THUMBSIZE 2 HEIGHT 400 THEME Book STARTFROM 55 ]]&lt;br /&gt;
|caption      = p55 with [[pseudo-barberpole]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp55_y0dby06a8gzggci5ld3xogg150cgz0343y523y0346&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = 34p7onrattlesnake&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 35 ZOOM 12 THUMBSIZE 2 HEIGHT 400 THEME Book STARTFROM 77 ]]&lt;br /&gt;
|caption      = p77 with [[34P7]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp77_0jjg08c2a2oggcxqmz3w145431wccy3gozya8kkn9b4303213zyd1&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = figureeightonrattlesnake&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 40 ZOOM 12 THUMBSIZE 2 HEIGHT 400 THEME Book STARTFROM 88 ]]&lt;br /&gt;
|caption      = p88 with [[figure eight]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp88_3bg2kgzy011y1o4oz3213xgonl9611zy5qm&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|rle          = x = 20, y = 17, rule = B3/S23&lt;br /&gt;
4bo2bo$4b4o$2b2o$bo2b6o$2bobo5bo2b2o$b2ob2o3b2o2bo$o2bo11bo$obo2bo8b2o&lt;br /&gt;
$bob2o$3bo3bo4b4o$bo2b3o6bo2bo$b3o10b2obo$4bo3bo5bo2bo$3bo2b3o5b3ob2o$&lt;br /&gt;
3b3o10bobo$6bo9bobo$5b2o10bo!&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 45 ZOOM 12 THUMBSIZE 2 HEIGHT 400 THEME Book STARTFROM 99 ]]&lt;br /&gt;
|caption      = p99 with unnamed p9&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp99_xck5b8oy1o8ehe8zgbhd2auy146ll21z1amhda9c8a6w641zy03113&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery item|{{EmbedViewer&lt;br /&gt;
|pname        = rattlesnakeonpentadecathlon&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ GPS 40 ZOOM 12 THUMBSIZE 2 HEIGHT 400 THEME Book STARTFROM 165 ]]&lt;br /&gt;
|caption      = p165 with [[pentadecathlon]]&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
|apgcode      = xp165_y0dbzggci5ld3xog8oz0343zy275777757&lt;br /&gt;
}}}}&lt;br /&gt;
{{gallery bottom}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;message835934387925155840&amp;quot;&amp;gt;{{CiteDiscord&lt;br /&gt;
|author  = Tanner Jacobi&lt;br /&gt;
|date    = April 25, 2021&lt;br /&gt;
|channel = cgol&lt;br /&gt;
|id      = 835934387925155840&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post26244&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format     = ref&lt;br /&gt;
|p          = 26244&lt;br /&gt;
|title      = Re: Synthesising Oscillators&lt;br /&gt;
|author     = Martin Grant&lt;br /&gt;
|date       = December 27, 2015&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post26591&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format     = ref&lt;br /&gt;
|p          = 26591&lt;br /&gt;
|title      = Re: Oscillator Discoveries Thread&lt;br /&gt;
|author     = Dean Hickerson&lt;br /&gt;
|date       = January 10, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post26682&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format     = ref&lt;br /&gt;
|p          = 26682&lt;br /&gt;
|title      = Re: Oscillator Discoveries Thread&lt;br /&gt;
|author     = Dean Hickerson&lt;br /&gt;
|date       = January 14, 2016&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_r.htm#rattlesnake}}&lt;br /&gt;
* {{LinkCatagolue|xp11_y0dbzggci5ld3xog8oz0343}}&lt;br /&gt;
* {{LinkPentadecathlonObject|33P11.1}}&lt;br /&gt;
* {{LinkWikipedia|Rattlesnake}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Sparker|p=11|type=dot|strength=strong}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=R2-D2&amp;diff=133514</id>
		<title>R2-D2</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=R2-D2&amp;diff=133514"/>
		<updated>2023-07-17T07:50:26Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name             = R2-D2&lt;br /&gt;
|pname            = r2d2&lt;br /&gt;
|f1               = Billiard table&lt;br /&gt;
|c                = 29&lt;br /&gt;
|bx               = 11&lt;br /&gt;
|by               = 10&lt;br /&gt;
|p                = 8&lt;br /&gt;
|m                = 4&lt;br /&gt;
|h                = 2.0&lt;br /&gt;
|v                = 0.22&lt;br /&gt;
|sv               = 0.22&lt;br /&gt;
|discoverer       = Peter Raynham&lt;br /&gt;
|rulemin          = B3/S23&lt;br /&gt;
|rulemax          = B378/S0235678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin       = B3eiy/S2cik3-jknq&lt;br /&gt;
|isorulemax       = B2kn34-aejn5-jry6-ik78/S01c234-n5678&lt;br /&gt;
|synthesis        = 53&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|animated         = yes&lt;br /&gt;
|apgcode          = xp8_gg0s252s0ggz11078m87011&lt;br /&gt;
|pentadecathlonid = 29P8.2&lt;br /&gt;
|viewerconfig     = #C [[ GPS 4 ZOOM 20 LOOP 8 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;R2-D2&#039;&#039;&#039; is a {{period|8}} [[oscillator]] that was found in the form shown in the infobox at right, but not named, by [[Peter Raynham]] in the early 1970s. The name derives from a form with a larger and less symmetric [[stator]] discovered later by [[Noam Elkies]] in August {{year|1994}}, shown below.&amp;lt;ref&amp;gt;{{CiteHickersonOscillators|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:R2d2alternatestator.png|frame|center|Elkies&#039; R2-D2 stator from 1994 (which inspired the name)]]&lt;br /&gt;
&lt;br /&gt;
[[Goldtiger997]] found a {{gliders|86}} [[synthesis]] for this oscillator on March 7, {{year|2020}},&amp;lt;ref name=&amp;quot;post90798&amp;quot; /&amp;gt; that has since been reduced to {{gliders|53}} on Catagolue.&lt;br /&gt;
&lt;br /&gt;
On 2022-11-30, the shown variant with the smallest stator appeared in a symmetric soup discovered by the [[Open Science Grid]], albeit not in a way useful to synthesis, with the initial soup matching 50 states of the 70 cells in its minimal covering octagon and the mechanism forming entirely in one generation, with pre-blocks becoming blocks in the next.&amp;lt;ref&amp;gt;{{Cata|attribute/xp8_gg0s252s0ggz11078m87011/b3s23/H4_+1|the attribute page}}, {{Cata|hashsoup/H4_+1/o_asYXjPKfDVK4858762063/b3s23|the soup}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Gray counter]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post90798&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Synthesising Oscillators&lt;br /&gt;
|p      = 90798&lt;br /&gt;
|author = Goldtiger997&lt;br /&gt;
|date   = March 7, 2020&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{LinkLexicon|lex_r.htm#r2d2}}&lt;br /&gt;
* {{LinkCatagolue|xp8_gg0s252s0ggz11078m87011}}&lt;br /&gt;
* {{LinkPentadecathlonObject|29P8.2}}&lt;br /&gt;
* {{LinkWikipedia|R2-D2}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|orthogonal2|osc=flip}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Quasar&amp;diff=133512</id>
		<title>Quasar</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Quasar&amp;diff=133512"/>
		<updated>2023-07-17T04:18:58Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name             = Quasar&lt;br /&gt;
|pname            = quasar&lt;br /&gt;
|c                = 144&lt;br /&gt;
|bx               = 31&lt;br /&gt;
|by               = 31&lt;br /&gt;
|p                = 3&lt;br /&gt;
|m                = 3&lt;br /&gt;
|h                = 128&lt;br /&gt;
|v                = 0.73&lt;br /&gt;
|rotor            = Pulsar&lt;br /&gt;
|discoverer       = Robert Wainwright&lt;br /&gt;
|discoveryear     = 1971&lt;br /&gt;
|rulemin          = B3/S23&lt;br /&gt;
|rulemax          = B3578/S023678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin       = B3ainq/S2-cn3ejnr&lt;br /&gt;
|isorulemax       = B34cjkqrty56-in78/S01c234-jny5-e678&lt;br /&gt;
|synthesis        = 24&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|animated         = true&lt;br /&gt;
|viewerconfig     = #C [[ ZOOM 12 THUMBSIZE 2 GPS 4 WIDTH 480 HEIGHT 480 ]]&lt;br /&gt;
|apgcode          = xp3_y4co9nas0san9oczw8ogwokclphxhplckowgo8z36ada70127401x10472107ada63zc65rle0okeigoxogieko0elr56czw11x12jap8g0g8paj21x11zy4319e53035e913&lt;br /&gt;
|pentadecathlonid = 144P3.1&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Quasar&#039;&#039;&#039; is a {{period|3}} [[oscillator]] that was found by [[Robert Wainwright]] in August {{year|1971}},&amp;lt;ref&amp;gt;{{CiteLifeline|vol=3|pages=page 4}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{CiteHickersonOscillators|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt; and is just the second smallest of an extensible series of p3 oscillators (first being the pulsar) built using pulsar quadrants which are shifted with respect to each other.&lt;br /&gt;
&lt;br /&gt;
Here are the next 2 oscillators in the series:&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = quasar2&lt;br /&gt;
|viewerconfig = #C [[ ZOOM 10 THUMBSIZE 2 GPS 4 WIDTH 540 HEIGHT 540 AUTOSTART LOOP 3 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
}}&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = quasar3&lt;br /&gt;
|viewerconfig = #C [[ ZOOM 8 THUMBSIZE 2 GPS 4 WIDTH 540 HEIGHT 540 AUTOSTART LOOP 3 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Like the [[pulsar]], each quadrant can be made with a traffic light predecessor. This gives these predecessors:&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = prequasar&lt;br /&gt;
|viewerconfig = #C [[ ZOOM 4 THUMBSIZE 2 GPS 4 WIDTH 540 HEIGHT 540 AUTOSTART PAUSE 2 T 14 PAUSE 2 LOOP 15 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The components making up quasars and their relatives do not necessarily need four symmetrical parts stabilising each other. The following is a sample stabilised [[wick]] with one 90-degree turn, and above it the smallest version of this wick (which is a 36P3).&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = quasarwick&lt;br /&gt;
|viewerconfig = #C [[ ZOOM 10 THUMBSIZE 2 GPS 4 WIDTH 1000 HEIGHT 540 AUTOSTART LOOP 3 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The quasar first appeared [[semi-natural]]ly in April {{year|2015}}.&amp;lt;ref name=&amp;quot;post18530&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Pulsar]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post18530&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Soup search results&lt;br /&gt;
|p      = 18530&lt;br /&gt;
|author = gameoflifeboy&lt;br /&gt;
|date   = April 5, 2015&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_q.htm#quasar}}&lt;br /&gt;
* {{LinkCatagolue|xp3_y4co9nas0san9oczw8ogwokclphxhplckowgo8z36ada70127401x10472107ada63zc65rle0okeigoxogieko0elr56czw11x12jap8g0g8paj21x11zy4319e53035e913}}&lt;br /&gt;
* {{LinkPentadecathlonObject|144P3.1}}&lt;br /&gt;
* {{LinkWikipedia|Quasar}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|full}}&lt;br /&gt;
{{Sparker|p=3|strength=weak}}&lt;br /&gt;
{{seminatural}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Ocellus&amp;diff=133511</id>
		<title>Ocellus</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Ocellus&amp;diff=133511"/>
		<updated>2023-07-17T04:12:25Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ Name origin along the lines of Gallus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name         = Ocellus&lt;br /&gt;
|pname        = ocellus&lt;br /&gt;
|f1           = Relay&lt;br /&gt;
|c            = 92&lt;br /&gt;
|bx           = 31&lt;br /&gt;
|by           = 25&lt;br /&gt;
|p            = 114&lt;br /&gt;
|m            = 57&lt;br /&gt;
|h            = 17.9&lt;br /&gt;
|v            = 0.77&lt;br /&gt;
|sv           = 0.65&lt;br /&gt;
|discoverer   = Michael Simkin&lt;br /&gt;
|discoverer2  = Noam Elkies&lt;br /&gt;
|discoveryear = 2015&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B37/S2378&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3-c/S23-y&lt;br /&gt;
|isorulemax   = B34cy6-ik7/S234ceiz5ekn6-ck78&lt;br /&gt;
|synthesis    = 112&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|viewerconfig = #C [[ LOOP 114 GPS 19 THUMBSIZE 2 ZOOM 10 ]]&lt;br /&gt;
|apgcode      = xp114_y1jjxo443aq4ozccxpdgx3cd0f811z8k8zyi4a4zy44s0cky6cczy2178nkica4xjjzy71y211&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Ocellus&#039;&#039;&#039; is a {{period|114}} [[oscillator]], being the second-smallest example of a [[relay]] construction using [[p6 thumb]]s allowing all oscillators of periods 90 + 24n to be constructed with 92 cells. It was formerly the smallest known p114 oscillator, until the discovery of [[caterer on 44P38]] in {{year|2022}}. It uses [[Michael Simkin]]&#039;s reduction of [[Noam Elkies]]&#039; 180-degree [[reflector]].&amp;lt;ref name=&amp;quot;post131000&amp;quot; /&amp;gt; A [[glider synthesis]] for this oscillator was found by [[Jeremy Tan]] on September 5, 2021.&amp;lt;ref name=&amp;quot;post135568&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[p60 glider shuttle]]&lt;br /&gt;
*[[Gallus]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post131000&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Thread for your unsure discoveries&lt;br /&gt;
|p      = 131000&lt;br /&gt;
|author = Matthias Merzenich&lt;br /&gt;
|date   = May 28, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post135568&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Synthesising Oscillators&lt;br /&gt;
|p      = 135568&lt;br /&gt;
|author = Jeremy Tan&lt;br /&gt;
|date   = September 5, 2021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkCatagolue|xp114_y1jjxo443aq4ozccxpdgx3cd0f811z8k8zyi4a4zy44s0cky6cczy2178nkica4xjjzy71y211}}&lt;br /&gt;
* [https://mlp.fandom.com/wiki/Ocellus Ocellus name origin]&lt;br /&gt;
&lt;br /&gt;
{{symmetry|osc=turn180}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Noah%27s_ark&amp;diff=133510</id>
		<title>Noah&#039;s ark</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Noah%27s_ark&amp;diff=133510"/>
		<updated>2023-07-17T04:10:30Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Puffer&lt;br /&gt;
|name         = Noah&#039;s ark&lt;br /&gt;
|pname        = noahsark&lt;br /&gt;
|c            = 16&lt;br /&gt;
|bx           = 15&lt;br /&gt;
|by           = 15&lt;br /&gt;
|dir          = Diagonal&lt;br /&gt;
|p            = 1344&lt;br /&gt;
|s            = c/12&lt;br /&gt;
|discoverer   = Charles Corderman&lt;br /&gt;
|discoveryear = 1971&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B3/S23&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B3/S23&lt;br /&gt;
|synthesis    = 6&lt;br /&gt;
|synthesisRLE = true&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|viewerconfig = #C [[ HEIGHT 600 THUMBSIZE 3 ZOOM 24 AUTOSTART OFF ]]&lt;br /&gt;
|apgcode      = yl1344_2_1118_c2aaaf958f8f412c06554ab3e40b8749&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Noah&#039;s ark&#039;&#039;&#039; is a diagonal [[puffer]] that was found by [[Charles Corderman]] in {{year|1971}}.&amp;lt;ref&amp;gt;{{CiteLifeline|vol=4|pages=page 3}}&amp;lt;/ref&amp;gt; It consists of two mutually stabilizing [[switch engine]]s and is thus an [[ark]]. Its name comes from the variety of objects it leaves behind - in particular, every 1344 [[generation]]s it produces 42 [[block]]s, 40 [[blinker]]s, 22 [[beehive]]s, eight [[loaf|loaves]], four [[glider]]s, two [[boat]]s, two [[block on table]]s, two [[long boat]]s, two [[ship]]s, and one [[beacon]].&lt;br /&gt;
&lt;br /&gt;
A {{gliders|3}} [[synthesis]] of a [[switch engine]] discovered by [[Luka Okanishi]] in March {{year|2017}} allowed for a {{gliders|6}} synthesis of Noah&#039;s ark.&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:360px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Noahsark_debris.png|thumb|left|200px|The debris left behind every 1344 generations]]&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname = noahsark_synth&lt;br /&gt;
|position = center&lt;br /&gt;
|caption = 6-glider synthesis of Noah&#039;s ark&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 ]]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Occurrence==&lt;br /&gt;
&lt;br /&gt;
Noah&#039;s ark appeared in the b3s23/G1 census on [[Catagolue]] on March 11, 2021,&amp;lt;!-- Soup k_whpDpLvVnhD6514919052 was found on 2021-03-11 at 09:31:48 UTC and is owned by rliston@gmail.com --&amp;gt; and later appeared in the b3s23/C1 census on May 22, 2021.&amp;lt;!-- Soup k_iP5HhqhHJUKi2177402 was found on 2021-05-22 at 01:23:19 UTC and is owned by kaarel.toomet@gmail.com --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_n.htm#noahsark}}&lt;br /&gt;
* {{LinkCatagolue|yl1344_2_1118_c2aaaf958f8f412c06554ab3e40b8749|format=linear growth}}&lt;br /&gt;
* {{LinkWikipedia|Noah&#039;s_Ark}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|diagonal2}}&lt;br /&gt;
{{natural}}&lt;br /&gt;
[[Category:Patterns involving switch engines]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Montana&amp;diff=133509</id>
		<title>Montana</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Montana&amp;diff=133509"/>
		<updated>2023-07-17T04:08:12Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: Restore the stub and notability template as neither issue is solved&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name         = Montana&lt;br /&gt;
|pname        = montana&lt;br /&gt;
|c            = 34&lt;br /&gt;
|bx           = 12&lt;br /&gt;
|by           = 10&lt;br /&gt;
|p            = 5&lt;br /&gt;
|m            = 5&lt;br /&gt;
|h            = 13.2&lt;br /&gt;
|v            = 0.58&lt;br /&gt;
|discoverer   = Scot Ellison&lt;br /&gt;
|discoveryear = 2011&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B378/S02378&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3-k/S23-i&lt;br /&gt;
|isorulemax   = B2n34qtwz5ein6n78/S0234eiqtw5-eik6-i78&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|animated     = true&lt;br /&gt;
|apgcode      = xp5_69d2c0cs0ssz2596078jo&lt;br /&gt;
|viewerconfig = #C [[ GPS 2 ZOOM 20 LOOP 5 ]]&lt;br /&gt;
}}{{stub}}{{notability}}&lt;br /&gt;
&#039;&#039;&#039;Montana&#039;&#039;&#039; is a {{period|5}} [[oscillator]] that was found by [[Scot Ellison]] in June {{year|2011}}.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
{{LinkCatagolue|xp5_69d2c0cs0ssz2596078jo}}&lt;br /&gt;
&lt;br /&gt;
{{Sparker|p=5|strength=weak}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Mickey_Mouse&amp;diff=133508</id>
		<title>Mickey Mouse</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Mickey_Mouse&amp;diff=133508"/>
		<updated>2023-07-17T04:04:17Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia, hopefully no illegal implications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stilllife&lt;br /&gt;
|name             = Mickey Mouse&lt;br /&gt;
|pname            = mickeymouse&lt;br /&gt;
|c                = 26&lt;br /&gt;
|bx               = 10&lt;br /&gt;
|by               = 7&lt;br /&gt;
|fc               = 40.2&lt;br /&gt;
|rulemin          = B/S23&lt;br /&gt;
|rulemax          = B378/S012345678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin       = B/S2k3knqry&lt;br /&gt;
|isorulemax       = B1e2-ae34-aw5-y6-ik78/S012345678&lt;br /&gt;
|synthesis        = 8&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|apgcode          = xs26_69p6o8gzcijc321&lt;br /&gt;
|pentadecathlonid = 26.487575&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Mickey Mouse&#039;&#039;&#039; is a {{slcells|26}}-[[cell]] [[still life]]. Its name was given to it by [[Mark Niemiec]]. An {{gliders|8}} [[synthesis]] of this still life was found in {{year|2021}}.&amp;lt;ref name=&amp;quot;message848391126394208297&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the most common 26-cell still life in the symmetry it has.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;message848391126394208297&amp;quot;&amp;gt;{{CiteDiscord&lt;br /&gt;
|author  = Ian07&lt;br /&gt;
|date    = May 29, 2021&lt;br /&gt;
|channel = cgol&lt;br /&gt;
|id      = 848391126394208297&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_m.htm#mickeymouse}}&lt;br /&gt;
* {{LinkCatagolue|xs26_69p6o8gzcijc321}}&lt;br /&gt;
* {{LinkNiemiec|bits-lg.htm|patternname=Life Objects 26 Bits and Larger}}&lt;br /&gt;
* {{LinkWikipedia|Mickey_Mouse}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|orthogonal2}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Meatball&amp;diff=133507</id>
		<title>Meatball</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Meatball&amp;diff=133507"/>
		<updated>2023-07-17T04:02:27Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name             = Meatball&lt;br /&gt;
|pname            = meatball&lt;br /&gt;
|c                = 38&lt;br /&gt;
|bx               = 11&lt;br /&gt;
|by               = 13&lt;br /&gt;
|p                = 7&lt;br /&gt;
|m                = 7&lt;br /&gt;
|h                = 32.6&lt;br /&gt;
|v                = 0.90&lt;br /&gt;
|discoverer       = Charity Engine&lt;br /&gt;
|discoveryear     = 2022&lt;br /&gt;
|rulemin          = B3/S23&lt;br /&gt;
|rulemax          = B3/S2378&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin       = B3/S23-c&lt;br /&gt;
|isorulemax       = B34eq5j6cn7c/S234cew5ceikq6-c78&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|apgcode          = xp7_ok4miewm9azk4q11sjr8a6z01&lt;br /&gt;
|animated         = true&lt;br /&gt;
|viewerconfig     = #C [[ ZOOM 27 GPS 3 LOOP 7 HEIGHT 480 WIDTH 480 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Meatball&#039;&#039;&#039; is a {{period|7}} [[oscillator]] found by [[Charity Engine]] on May 28, {{year|2022}}. It bears similarity to [[38P7.2]] in terms of its ability to produce [[spark]]s, while having a slightly smaller [[bounding box]].&amp;lt;ref name=&amp;quot;post146196&amp;quot; /&amp;gt; It has been used to reduce multiple [[glider gun]]s, specifically [[period-21 glider gun|p21 gun]]&amp;lt;ref name=&amp;quot;message980246232322670612&amp;quot; /&amp;gt; and [[period-49 glider gun|p49 gun]].&amp;lt;ref name=&amp;quot;message980248018651578398&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its discovery led to the creation of multiple new [[LCM oscillator]]s which were the smallest oscillators known for their respective periods.&amp;lt;ref name=&amp;quot;post146202&amp;quot; /&amp;gt; However, it has since been beaten out in this regard by [[34P7]].&lt;br /&gt;
&lt;br /&gt;
Meatball and 34P7 have different profiles; while they are mostly interchangeable, there are some situations where one gets hit later on but the other doesn&#039;t. When either could be used, 34P7 has a smaller population, but meatball has a smaller bounding box.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post146196&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Oscillator Discussion Thread&lt;br /&gt;
|p      = 146196&lt;br /&gt;
|author = Tanner Jacobi&lt;br /&gt;
|date   = May 28, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;message980246232322670612&amp;quot;&amp;gt;{{CiteDiscord&lt;br /&gt;
|author  = Tanner Jacobi&lt;br /&gt;
|date    = May 28, 2022&lt;br /&gt;
|channel = cgol&lt;br /&gt;
|id      = 980246232322670612&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;message980248018651578398&amp;quot;&amp;gt;{{CiteDiscord&lt;br /&gt;
|author  = iNoMed&lt;br /&gt;
|date    = May 28, 2022&lt;br /&gt;
|channel = cgol&lt;br /&gt;
|id      = 980248018651578398&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post146202&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format = ref&lt;br /&gt;
|title  = Re: Smallest Known Oscillators to p106 (and Beyond)&lt;br /&gt;
|p      = 146202&lt;br /&gt;
|author = David Raucci&lt;br /&gt;
|date   = May 28, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkCatagolue|xp7_ok4miewm9azk4q11sjr8a6z01}}&lt;br /&gt;
* {{LinkWikipedia|Meatball}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|180degree}}&lt;br /&gt;
{{Sparker|p=7|type=dot|strength=strong}}&lt;br /&gt;
{{seminatural}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Gourmet&amp;diff=133506</id>
		<title>Gourmet</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Gourmet&amp;diff=133506"/>
		<updated>2023-07-17T03:51:53Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name             = Gourmet&lt;br /&gt;
|pname            = gourmet&lt;br /&gt;
|f1               = Shuttle&lt;br /&gt;
|c                = 66&lt;br /&gt;
|bx               = 20&lt;br /&gt;
|by               = 20&lt;br /&gt;
|p                = 32&lt;br /&gt;
|m                = 8&lt;br /&gt;
|h                = 6.3&lt;br /&gt;
|v                = 0.60&lt;br /&gt;
|sv               = 0.60&lt;br /&gt;
|discoverer       = David Buckingham&lt;br /&gt;
|discoveryear     = 1978&lt;br /&gt;
|rulemin          = B3/S23&lt;br /&gt;
|rulemax          = B368/S23678&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]], [[HighLife]]&lt;br /&gt;
|isorulemin       = B3-cekq/S2-n3-ky&lt;br /&gt;
|isorulemax       = B34cekwyz5ak67c8/S234cejknwz5-cjny678&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|animated         = true&lt;br /&gt;
|apgcode          = xp32_wg4cx178kc0c4gozwdl8y0kksy1ggoz311y82lmzw31460652sgx641&lt;br /&gt;
|pentadecathlonid = 66P32.1&lt;br /&gt;
|viewerconfig     = #C [[ GPS 4 ZOOM 14 LOOP 32 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Gourmet&#039;&#039;&#039; is a {{period|32}} [[oscillator]] that was discovered by [[David Buckingham]] on March 4, {{year|1978}}.&amp;lt;ref name=&amp;quot;hickersonoscillators&amp;quot; /&amp;gt; In terms of its {{cells|66|text=66 cells}}, it was formerly the smallest known period 32 oscillator until the discovery of the [[p32 honey farm hassler]] in {{year|2021}}. It consists of four [[cis-boat with tail]]s and four [[aircraft carrier]]s [[hassle|hassling]] a [[pi-heptomino]].&lt;br /&gt;
&lt;br /&gt;
Despite gourmet&#039;s similarity with [[Tanner&#039;s p46]], the latter was not discovered until 2017.&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|style=&amp;quot;margin:auto;width:320px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Gourmet gen1.png|framed|left|Generation 1 reveals that the object being hassled is a pi-heptomino]]&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname = gourmet2&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 GPS 4 ZOOM 14 LOOP 32 AUTOSTART ]]&lt;br /&gt;
|caption      = An alternate form of gourmet using [[beacon]]s and [[snake]]s instead of aircraft carriers&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname        = piportraitor&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 GPS 4 ZOOM 8 LOOP 32 AUTOSTART ]]&lt;br /&gt;
|caption      = An alternate stabilization of this oscillator, named &#039;&#039;&#039;pi portraitor&#039;&#039;&#039;, found by [[Robert Wainwright]] in {{year|1984}} or {{year|1985}},&amp;lt;ref name=&amp;quot;hickersonoscillators&amp;quot; /&amp;gt; using welded [[heavyweight emulator|heavyweight emulators]] instead of stable catalysts&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|pname        = popover&lt;br /&gt;
|position     = center&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 GPS 4 ZOOM 8 LOOP 32 AUTOSTART ]]&lt;br /&gt;
|caption      = Another alternate stabilization, named &#039;&#039;&#039;popover&#039;&#039;&#039;, found by [[Robert Wainwright]] in August {{year|1984}},&amp;lt;ref name=&amp;quot;hickersonoscillators&amp;quot; /&amp;gt; using [[blinker|blinkers]] and [[loaf spin]] catalysts&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[PT8P]]&lt;br /&gt;
* [[Pi orbital]]&lt;br /&gt;
* [[Tanner&#039;s p46]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;hickersonoscillators&amp;quot;&amp;gt;{{CiteHickersonOscillators}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_g.htm#gourmet}}&lt;br /&gt;
* {{LinkLexicon|lex_p.htm#piportraitor|patternname=Pi portraitor}}&lt;br /&gt;
* {{LinkLexicon|lex_p.htm#popover|patternname=Popover}}&lt;br /&gt;
* {{LinkCatagolue|xp32_wg4cx178kc0c4gozwdl8y0kksy1ggoz311y82lmzw31460652sgx641}}&lt;br /&gt;
* {{LinkPentadecathlonObject|66P32.1}}&lt;br /&gt;
* {{LinkWikipedia|Gourmet}} (name origin)&lt;br /&gt;
* {{LinkWikipedia|Popover|name=Popover}}&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|osc=turn90}}&lt;br /&gt;
[[Category:Pi-heptomino hasslers|032]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Baker%27s_dozen&amp;diff=133505</id>
		<title>Baker&#039;s dozen</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Baker%27s_dozen&amp;diff=133505"/>
		<updated>2023-07-17T03:48:34Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: Name origin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name             = Baker&#039;s dozen&lt;br /&gt;
|pname            = bakersdozen&lt;br /&gt;
|c                = 39&lt;br /&gt;
|bx               = 25&lt;br /&gt;
|by               = 11&lt;br /&gt;
|p                = 12&lt;br /&gt;
|m                = 6&lt;br /&gt;
|h                = 36.3&lt;br /&gt;
|v                = 0.89&lt;br /&gt;
|sv               = 0.41&lt;br /&gt;
|discoverer       = Robert Wainwright&lt;br /&gt;
|discoveryear     = 1989&lt;br /&gt;
|rulemin          = B3/S23&lt;br /&gt;
|rulemax          = B38/S2378&lt;br /&gt;
|rulespecial      = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin       = B3-ky/S23-cejk&lt;br /&gt;
|isorulemax       = B34ceikqy5-acik6-an7e8/S234cekqtwz5-cinr6ein78&lt;br /&gt;
|synthesis        = 20&lt;br /&gt;
|synthesis2       = 16&lt;br /&gt;
|synthesisRLE     = true&lt;br /&gt;
|plaintext        = true&lt;br /&gt;
|rle              = true&lt;br /&gt;
|animated         = true&lt;br /&gt;
|apgcode          = xp12_2hqz037133zccw6q4wi6zy1oogtozy4bh8&lt;br /&gt;
|apgcode2         = xp12_mtexgj3znsoxji3xs112ogggz121x11y21&lt;br /&gt;
|pentadecathlonid = 39P12.1&lt;br /&gt;
|viewerconfig     = #C [[ GPS 3 ZOOM 16 LOOP 12 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Baker&#039;s dozen&#039;&#039;&#039; is a {{period|12}} [[oscillator]] consisting of a [[loaf]] [[hassle]]d by two [[block]]s and two [[caterer]]s. The original form (using {{period|4}} and {{period|6}} oscillators to hassle) was found by [[Robert Wainwright]] in August {{year|1989}}.&amp;lt;ref&amp;gt;{{CiteHickersonOscillators|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It can be stabilised and welded in many ways. A caterer can be used in 2 ways, one way is also suitable for the [[jam]]. A [[mazing]] would work, and two can be stabilised next to each other. Two opposite ones can be stabilised with two [[bookend]]s (shown below as bookend on snake). [[Eater 2]]s also work,&amp;lt;ref name=&amp;quot;post17836&amp;quot; /&amp;gt; and the eater 2-stabilized version of this oscillator was synthesized with only {{gliders|24|text=24 gliders}} by [[iNoMed]].&amp;lt;ref name=&amp;quot;message833368982559785021&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin-left:auto; margin-right:auto; width:300px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|viewerconfig = #C [[ AUTOSTART GPS 3 LOOP 12 THUMBLAUNCH THUMBSIZE 2 THEME 6 ZOOM 12 HEIGHT 320 ]]&lt;br /&gt;
|pname        = bakersdozen2&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = A 37-cell variant of baker&#039;s dozen&lt;br /&gt;
|}}&lt;br /&gt;
|-&lt;br /&gt;
|{{EmbedViewer&lt;br /&gt;
|viewerconfig = #C [[ AUTOSTART GPS 3 LOOP 12 THUMBLAUNCH THUMBSIZE 2 THEME 6 ZOOM 12 HEIGHT 360 ]]&lt;br /&gt;
|pname        = bakersdozenreactions&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = Several ways to stabilize baker&#039;s dozen&lt;br /&gt;
|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==In other rules==&lt;br /&gt;
&lt;br /&gt;
Baker&#039;s dozen can function without external supports in some [[Isotropic non-totalistic cellular automaton|isotropic non-totalistic rules]] suppressing B3q birth, such as B3-q/S23:&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|rle = x = 11, y = 4, rule = B3-q/S23&lt;br /&gt;
4b2o3b2o$2obo2bo2b2o$2o2bobo$5bo!&lt;br /&gt;
|position = center&lt;br /&gt;
|viewerconfig = #C [[ THUMBNAIL THUMBSIZE 2 GPS 3 LOOP 12 AUTOSTART ]]&lt;br /&gt;
|caption = Free baker&#039;s dozen in B3-q/S23&lt;br /&gt;
|apgcode = xp12_33w657w66/b3-qs23&lt;br /&gt;
|style   = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Twirling T-tetsons 2]], whose stable form also uses the eater 2-assisted loaf spin reaction&lt;br /&gt;
* [[Popover]], using the maze-assisted loaf spin reaction&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;post17836&amp;quot;&amp;gt;{{LinkForumThread&lt;br /&gt;
|format     = ref&lt;br /&gt;
|p          = 17836&lt;br /&gt;
|title      = Re: Thread For Your Accidental Discoveries&lt;br /&gt;
|author     = Tanner Jacobi&lt;br /&gt;
|date       = March 11, 2015&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;message833368982559785021&amp;quot;&amp;gt;{{CiteDiscord&lt;br /&gt;
|author  = iNoMed&lt;br /&gt;
|date    = April 19, 2021&lt;br /&gt;
|channel = cgol&lt;br /&gt;
|id      = 833368982559785021&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_b.htm#bakersdozen}}&lt;br /&gt;
* {{LinkCatagolue|xp12_2hqz037133zccw6q4wi6zy1oogtozy4bh8}}&lt;br /&gt;
* {{LinkCatagolue|xp12_g88e1u8xggz0113w30g89hzy5pq1wcc0c88gzya178711|patternname=Baker&#039;s dozen w/ eater 2s}}&lt;br /&gt;
* {{LinkCatagolue|xp12_cqsy066xetmzfpgx357xosnz353x33y0121|patternname=Baker&#039;s dozen w/ short keys}}&lt;br /&gt;
* {{LinkPentadecathlonObject|39P12.1}}&lt;br /&gt;
* {{LinkWikipedia|Dozen#Baker&#039;s_dozen}} (name origin, meaning a count of 13 which is one more than the period of this oscillator)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|osc=turn180}}&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Diuresis&amp;diff=133502</id>
		<title>Diuresis</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Diuresis&amp;diff=133502"/>
		<updated>2023-07-17T03:39:45Z</updated>

		<summary type="html">&lt;p&gt;GUYTU6J: /* External links */ LinkWikipedia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Oscillator&lt;br /&gt;
|name         = Diuresis&lt;br /&gt;
|pname        = diuresis&lt;br /&gt;
|f1           = Shuttle&lt;br /&gt;
|c            = 66&lt;br /&gt;
|bx           = 44&lt;br /&gt;
|by           = 27&lt;br /&gt;
|p            = 90&lt;br /&gt;
|m            = 45&lt;br /&gt;
|h            = 121.51&lt;br /&gt;
|v            = 1.00&lt;br /&gt;
|sv           = 0.42&lt;br /&gt;
|discoverer   = David Eppstein&lt;br /&gt;
|discoveryear = 1998&lt;br /&gt;
|rulemin      = B3/S23&lt;br /&gt;
|rulemax      = B3/S23&lt;br /&gt;
|rulespecial  = [[Conway&#039;s Game of Life|Conway Life]]&lt;br /&gt;
|isorulemin   = B3/S23&lt;br /&gt;
|isorulemax   = B3/S235e6ei&lt;br /&gt;
|synthesis    = 20&lt;br /&gt;
|synthesisRLE = true&lt;br /&gt;
|plaintext    = true&lt;br /&gt;
|rle          = true&lt;br /&gt;
|animated     = true&lt;br /&gt;
|apgcode      = xp90_4r4yb4r4z4r4yb4r4zzy03d8ey1e8d3zz0oydoz1u1yb1u1z161yb161&lt;br /&gt;
|viewerconfig = #C [[ THUMBSIZE 2 ZOOM 10 GPS 10 LOOP 90 ]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Diuresis&#039;&#039;&#039; is a {{period|90}} [[oscillator]] consisting of two [[bookend]]s being [[hassle]]d by oscillators or stable [[catalyst]]s. The original oscillator was found by [[David Eppstein]] on October 11, {{year|1998}},&amp;lt;ref&amp;gt;{{CiteSummersPattern|name=jslife|accessdate=March 14, 2020}}&amp;lt;/ref&amp;gt; and was hassled by [[pentadecathlon]]s. With a minimum population of {{cells|66|text=66 cells}}, this is still the smallest known form of the oscillator in terms of cell count. Later that same day, [[Dean Hickerson]] replaced the pentadecathlons with the [[still life]] arrangement. The form below shows two still life arrangements, one with the minimal population (left) and one with the minimal bounding box (right).&lt;br /&gt;
&lt;br /&gt;
The name is due to [[Bill Gosper]], who compared the bookends to kidneys.&lt;br /&gt;
&lt;br /&gt;
The combination of bookends in this oscillator reappear 45 generations later if two intermediate boats are removed. Therefore, there are many options to the sparkers and catalysts supporting this oscillator.&lt;br /&gt;
&lt;br /&gt;
{{EmbedViewer&lt;br /&gt;
|pname        = diuresisvariant&lt;br /&gt;
|viewerconfig = #C [[ WIDTH 600 HEIGHT 600 THUMBSIZE 2 ZOOM 16 GPS 15 AUTOSTART LOOP 90 ]]&lt;br /&gt;
|position     = center&lt;br /&gt;
|caption      = Diuresis supported by stable catalysts&lt;br /&gt;
|style        = width:300px;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* {{LinkLexicon|lex_d.htm#diuresis}}&lt;br /&gt;
* {{LinkCatagolue|xp90_4r4yb4r4z4r4yb4r4zzy03d8ey1e8d3zz0oydoz1u1yb1u1z161yb161}}&lt;br /&gt;
* {{LinkCatagolue|xp90_8k80u178cy8c871s6zwg85ligx6asy4gil9abgzw11da0hyah0ad11zw31pl91xca7y419lp13zy1gs26y862sg|patternname=Diuresis w/ stable catalysts}}&lt;br /&gt;
* {{LinkWikipedia|Diuresis}} (name origin)&lt;br /&gt;
&lt;br /&gt;
{{Symmetry|orthogonal2|osc=flip}}&lt;/div&gt;</summary>
		<author><name>GUYTU6J</name></author>
	</entry>
</feed>