ConwayLife.com - A community for Conway's Game of Life and related cellular automata
Home  •  LifeWiki  •  Forums  •  Download Golly

Prototype / demo for a (weighted) collision search program

For scripts to aid with computation or simulation in cellular automata.

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » March 10th, 2014, 1:16 pm

At least my recipe generating code is now working ...

See attachment "demo.rle.gz" for a sample of a not-so-perfect LWSS seed and the reaction chain that creates and then uses it.

I've run the R1L0 search up to an Level of 20. I had to abort it somewhere half way thru COST = 20 because my computer started to disobey me ...

The 595 seeds found are in new_samples.zip - there were only some 5 or so northbound seeds which emitted the ship to the right side of the seed. None of them with a clean output lane. Maybe someone finds something I overlooked.

The search has visited jsut below 40 million reactions. There has been one pentacathlon and a few thousand pulsars in the results (plus millions and millions of P2 and still lifes of course).

EDIT: there are plenty of funny seeds in there...
At least one using a pulsar ;)
.....................*..........
.....................*..........
.....................*..........
.................**.............
................*.*....***......
................**..............
.....................*..........
.....................*..........
.....................*..........
................................
.......***...***................
................................
*....*....*.*....*..............
.**..*....*.*....*..............
**...*....*.*....*..............
.......***...***..............**
..............................**
.......***...***................
.....*....*.*....*..............
.....*....*.*....*..............
.....*....*.*....*..............
................................
.......***...***................
Attachments
new_samples.zip
(28.34 KiB) Downloaded 218 times
demo.rle.gz
(4.54 KiB) Downloaded 190 times
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » March 21st, 2014, 2:01 am

Minor update: I was able to finish the R1L0 search for a COST of up to 21.

There are some 79 million reactions in my database using about 22 GB for the DB and another 55 of untestet reactions stored in temporary files.

I'm currently runing COST = 22. I don't expect this to finish before ... say ... thuesday.

Going much deaper will probably be increasingly painfull (the search space grows exponentially ... something like 1.5^COST).

I attached the seeds I found ...

BTW: theese are the candidates for northbound edge-shooters (based on the fact that the ship is emitted to the right of the *target* of the *final* reaction:
#P 0 0
#C reaction: 770479
..............*....
*.............*....
.**...........*....
**.................
..........***...***
...................
..............*....
..............*....
..............*....
...................
...................
...................
.................*.
.................*.
.................*.
...................
.....**......*.....
....*..*....*.*....
....*..*....*.*....
.....**......*.....

#P 200 0
#C reaction: 2702867
....**.
....**.
.......
.......
.......
.......
.......
.......
.......
.......
.......
.......
.......
.......
.......
*......
.**....
**.....
.......
.......
....***

#P 400 0
#C reaction: 27650533
*.......................
.**.....................
**...................**.
.....................**.
........................
........................
........................
........................
........................
........................
........................
.....*..................
.....*..................
.....*..................
........................
........................
........................
........................
........................
........................
........................
........................
.....................***

#P 600 0
#C reaction: 29264547
*.......................
.**.....................
**...................**.
.....................**.
........................
........................
........................
........................
........................
........................
........................
........................
....**..................
....**..................
........................
........................
........................
........................
........................
........................
........................
........................
.....................***

#P 800 0
#C reaction: 34247222
....*.........
.....**.......
....**........
..............
..............
**............
**............
..............
..............
.........**...
.........*.*..
..........*...
..............
..............
..............
..............
............**
............**

#P 1000 0
#C reaction: 46496270
*.............
.**...........
**............
..............
..............
..............
.....**....***
....*..*......
.....*.*......
......*.......
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
........**....
.......*..*...
........**....

#P 1200 0
#C reaction: 46597966
*.............
.**...........
**............
..............
..............
..............
.....**....***
....*..*......
.....*.*......
......*.......

#P 1400 0
#C reaction: 53531605
........*...........
.........**.........
........**..........
....................
....................
....................
.............***....
....................
..................**
..................**
.**.................
*..*................
*..*................
.**.................
....................
....................
...***..............

#P 1600 0
#C reaction: 57192930
*....................
.**..................
**...................
.....................
.....................
.....................
............***......
.....................
..................***
.....................
........*............
........*............
........*............
.....................
....***..............
.....................
........*............
........*............
........*............
.....................
.....**........**....
....*..*.......**....
....*..*.............
.....**..............

#P 1800 0
#C reaction: 65543133
................*....
................*....
*...............*....
.**........**........
**........*..*....***
...........*.*.......
............*...*....
................*....
................*....
.....................
.....................
.....................
.....................
.....................
.....................
.....................
.................**..
...........**...*..*.
...........**...*..*.
.................**..
.....................
.....**..............
....*..*.............
.....**..............
.....................
...............***...

#P 2000 0
#C reaction: 73273393
*...............
.**.............
**..............
................
................
..............**
..............**
................
................
................
............*...
...........*.*..
...........*..*.
............**..
................
...............*
...............*
...............*
......**........
.....*.*...***..
.....**.........
................
................
..***...........

#P 2200 0
#C reaction: 73722710
....*...............
.....**.............
....**..............
....................
....................
..................**
..................**
....................
....................
....................
................*...
...............*.*..
...............*..*.
................**..
....................
...................*
...................*
...................*
.**.......**........
*..*.....*.*...***..
*..*.....**.........
.**.................
....................
......***...........

#P 2400 0
#C reaction: 76229025
........*........
.........**......
........**.......
.................
.................
**...............
**...**..........
.....**..........
.................
.................
..............**.
..............*.*
...............*.
Attachments
samples-21.zip
(73.82 KiB) Downloaded 199 times
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » March 21st, 2014, 9:49 am

oblique wrote:Minor update: I was able to finish the R1L0 search for a COST of up to 21.
...
#C reaction: 770479...

These look good -- assuming all of the intermediate targets are really out of the way of the upship lanes, anyway. Do you have an easy way to dig up the full recipe for these? I'm interested in the two-object LWSS and MWSS seeds, for example (2702867 and 46597966).
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » March 21st, 2014, 2:05 pm

dvgrn wrote:
oblique wrote:Minor update: I was able to finish the R1L0 search for a COST of up to 21.
...
#C reaction: 770479...

These look good -- assuming all of the intermediate targets are really out of the way of the upship lanes, anyway. Do you have an easy way to dig up the full recipe for these? I'm interested in the two-object LWSS and MWSS seeds, for example (2702867 and 46597966).


(Why am I not allowed to attach file types like ".rle" or ".pat ... :( well I have to ZIP 'em anyway ...)

I have a not-really-automatic (but fairly easy) way produce those recipes:
The recipes them selves are here:
edgy-recipes.txt
(7.5 KiB) Downloaded 200 times


You'll find a "Start with reaction xxx" line at the start of each new recipe.
The reactions mentioned in above file are:
edgy-start.pat.txt
(2.73 KiB) Downloaded 203 times


As for "not really automatic" here is how my generator currently works:
770479.zip
(63.44 KiB) Downloaded 216 times

The .raw file is the output of
./recipe test/31c240_simple.cfg 770479

I removed the #C lines to make golly happy and stored that as 770479.pat
Then I looked up the reaction 261 mentioned in the "Start with" comment and connected it to the output of the first rake (look at 770479.rle).
If you generate up to something like generation 18900 and then slowly to 18949 you will notice that the rake which is about to hit the target will actually hit it TWICE. This demonstrates a problem with the "just paste it in" approach ... I would have to paste a complete *stream* of the target, not only one.

There are currently at least this issues with my generator:
  • The ship parts (rephaser and R1L0) are hardcoded in the .c code
  • The generator should fill in the targets (including intermediate ones!)
  • The offset between trail and targets should be customizable.
  • There is a clear bug when hitting not-P4-compatible targets with a high lane number (recipe.c does not account for the "pregap elimination" in pattern.c::tgt_collide()

EDIT: just noticed I picked a rather unfortunate example. The very same reaction which I mentioned in the text above would not only hit the target twice if there is only one target - it also sports a nasty spark that will hit the site below it, if you give a whole stream of targets ... Look at 770479-multi.rle for generation around 19000.

In short this seed is completly useless in a 31c240 context.
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » March 27th, 2014, 5:48 pm

Just for the fun:
x = 24, y = 22, rule = LifeHistory
A$.2A$2A$8.A5.A$8.A5.A$8.2A3.2A2$4.3A2.2A.2A2.3A$6.A.A.A.A.A.A$8.2A3.
2A2$8.2A3.2A$6.A.A.A.A.A.A4.2A$4.3A2.2A.2A2.3A.A2.A$21.2A$8.2A3.2A$8.
A5.A$8.A5.A2$13.A$12.A.A$13.2A!

A pulsar based 180° OTT.

Found with the "no COST" variant of my script (while debugging memory leaks :( )

There are variants of this - like pulsar and block as a target.

BTW: how deap can glue reach into this? 9 gliders?

I have a massive problem in trying to reach beyond 100 000 000 finished reactions in my DB.

The real problem are the targets. Just rebuilding the database to COST=21 after a crash takes about two DAYS. Mostly for inserting those 50 mio targets (I can't really avoid having an unique index on the rle string, can I?)

It's a frustrating situation: I can't keep all the targets in memory because that would easily mean some 3-4 GB just for the 50 million I already have found. I don't have a reasonable way to guess the next target (because each reaction MIGHT completely alter it, or it might just remove some block or reposition one blinker). So I can't see a clever way to implement some cache either. Nor do I think I could conjur up some faster way to store-and-find targets on disk then by using a database. (besides I don't like to give up the DB approach: using SQL for questions like "are there any P7 in the results" is way easier then sifting to Gigs of normal files).

The reactions themself are comparably easy. They don't contain an indexed string. And they are basicly "store once, then just check if known".

I'm pretty confident that I will be able to reach COST=22 or even 23 ... but I am very sure, that I will never get past anything like even 25.

EDIT: By using a more compact representation for patterns and a more efficient way to calculate the generations I might gain about one level. Probably not more then 2.
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » March 29th, 2014, 1:35 pm

oblique wrote:BTW: how deap can glue reach into this? 9 gliders?

I have a massive problem in trying to reach beyond 100 000 000 finished reactions in my DB.

That's right. At least, I don't recall that Paul ever managed to get a P2 Glue search to run past 9 gliders -- or if he did, it was by adding artificial constraints (such as a very low maximum diameter for intermediate targets) that didn't produce very interesting results.

The old Glue 1 search allowing only stable targets made it a good bit farther, to a maximum of 12 gliders. Obviously the branching factor for that tree was a lot lower.

But for most slow-salvo construction purposes there really isn't any reason to require stable intermediates -- it's maybe just slightly more convenient, since it would allow all slow-salvo gliders to be the same phase. If someone were still trying to figure out how to build a replicator out of (for example) p30- or p46- or p60-based circuitry, maybe that would be an interesting search tree to explore again. But for the moment there's nothing like that on the horizon.

oblique wrote:The real problem are the targets. Just rebuilding the database to COST=21 after a crash takes about two DAYS. Mostly for inserting those 50 mio targets (I can't really avoid having an unique index on the rle string, can I?)

I can't think of a workable alternative offhand, at least not without designing your own custom database system. But I'm no expert on the ins and outs of MariaDB / MySQL; no doubt there are lots of clever tricks that I don't know. Glue2 made extensive use of hashtables, which I think was a fairly successful attempt to address the same basic problem.

oblique wrote:It's a frustrating situation: I can't keep all the targets in memory because that would easily mean some 3-4 GB just for the 50 million I already have found. I don't have a reasonable way to guess the next target (because each reaction MIGHT completely alter it, or it might just remove some block or reposition one blinker). So I can't see a clever way to implement some cache either. Nor do I think I could conjur up some faster way to store-and-find targets on disk then by using a database. (besides I don't like to give up the DB approach: using SQL for questions like "are there any P7 in the results" is way easier then sifting to Gigs of normal files).

Hmm. Might it be any use to just keep in memory just a hashtable of all targets? Seems like that should be safely under a gigabyte for the foreseeable future.

You could at least get a quick answer that "this has never been seen before" for (almost) all of the new targets; the overhead would be when you have a match according to the hashtable, but want to double-check that it's not a false positive before you store the new reaction. Depending on the hash function, that case might even be nonexistent, or rare enough that you could worry about it only in a separate optional cleanup pass through the database.

(?) [Fair warning: I'm not absolutely sure that I know what I'm talking about here.]

oblique wrote:EDIT: By using a more compact representation for patterns and a more efficient way to calculate the generations I might gain about one level. Probably not more then 2.

That sounds about right. It's encouraging that you're getting usable results inside your current limits -- maybe not as perfect or clean as might be wished for, but good enough.

Have you built in any options for constraining the size of the intermediate targets, beyond the "must fit inside a width-31 stripe" requirement, either by population or by bounding box? At various times Paul Chapman has tried customizing his Glue search code to do things like progressively reduce the allowable semiperimeter of targets -- on the theory that a small *WSS seed constellation is of more general interest than a large complex one.

That seemed to allow Glue to reach a level or two further into the tree, while only pruning off relatively unproductive branches -- large messy targets, which mostly only ever get turned into other large messy targets with equally huge branching factors.

Seems like the next step is to re-run a search using a wider range of rake types -- and then just take the best reaction that shows up, and build a complete 31c/240 spaceship with it. It looks to me as if I could put together a working model in something under a week at this point (if I had a week free, which of course I don't at the moment!) It's just a matter of choosing a workable front end for the upship recipes that are available.
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » March 30th, 2014, 2:38 am

dvgrn wrote:
oblique wrote:The real problem are the targets. Just rebuilding the database to COST=21 after a crash takes about two DAYS. Mostly for inserting those 50 mio targets (I can't really avoid having an unique index on the rle string, can I?)

I can't think of a workable alternative offhand, at least not without designing your own custom database system. But I'm no expert on the ins and outs of MariaDB / MySQL; no doubt there are lots of clever tricks that I don't know. Glue2 made extensive use of hashtables, which I think was a fairly successful attempt to address the same basic problem.

Writing a DB system of my own would require me to beleive that I could make a better job at that then those who are designing theese professionally. I'm just not arrogant enough for this :lol:

As for using hash tables: there we come back to the size problem. At least we would need a pointer (8 bytes) and a binary representation of the pattern (rle or sizeX,sizeY,bitsoup) and the hash value. All implementations I could think of would require THREE pointers (one for the bucket, one for linking objects that are sharing the same hash and one pointer to the pattern).

dvgrn wrote:Hmm. Might it be any use to just keep in memory just a hashtable of all targets? Seems like that should be safely under a gigabyte for the foreseeable future.

You could at least get a quick answer that "this has never been seen before" for (almost) all of the new targets; the overhead would be when you have a match according to the hashtable, but want to double-check that it's not a false positive before you store the new reaction. Depending on the hash function, that case might even be nonexistent, or rare enough that you could worry about it only in a separate optional cleanup pass through the database.

Hmm. Keeping just the hashtable in memory would mean some 32 bytes per entry (hash value + 2 pointers, one DB key). Thats roughly 1,5 GB for my 50 000 000 targets i have already found.

You have some point there with only having to check for collisions with known objects. I have tried to build a nice hashing function using stuff like size and period or lenght-of-rle or first few chars of the rle ... alas there always was some mayor imbalance leading to some hash values having hundreds of thousands of pattern to check.

On the other hand: that would still require to store the pattern in the DB (which seems to be getting rather expensive).

dvgrn wrote:
oblique wrote:EDIT: By using a more compact representation for patterns and a more efficient way to calculate the generations I might gain about one level. Probably not more then 2.

That sounds about right. It's encouraging that you're getting usable results inside your current limits -- maybe not as perfect or clean as might be wished for, but good enough.

Have you built in any options for constraining the size of the intermediate targets, beyond the "must fit inside a width-31 stripe" requirement, either by population or by bounding box? At various times Paul Chapman has tried customizing his Glue search code to do things like progressively reduce the allowable semiperimeter of targets -- on the theory that a small *WSS seed constellation is of more general interest than a large complex one.

The only constraint I do HAVE implemented is bounding box. But I am currently very lax about it:
PRUNE_SX = 35
PRUNE_SY = 28

So event 35x28 is allowed as a (intermediate) target. Sometimes those monsters are reduced to a few blocks by a single glider ... but yeah - I probably could cut down most of the tree by using say 20x20

dvgrn wrote:That seemed to allow Glue to reach a level or two further into the tree, while only pruning off relatively unproductive branches -- large messy targets, which mostly only ever get turned into other large messy targets with equally huge branching factors.

Seems like the next step is to re-run a search using a wider range of rake types -- and then just take the best reaction that shows up, and build a complete 31c/240 spaceship with it. It looks to me as if I could put together a working model in something under a week at this point (if I had a week free, which of course I don't at the moment!) It's just a matter of choosing a workable front end for the upship recipes that are available.

I'll let my level 22 search finish while working on implementing those other rakes ...
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » March 30th, 2014, 7:55 am

oblique wrote:You have some point there with only having to check for collisions with known objects. I have tried to build a nice hashing function using stuff like size and period or lenght-of-rle or first few chars of the rle ... alas there always was some mayor imbalance leading to some hash values having hundreds of thousands of pattern to check.

Have you had a look at Golly's built-in hash function? I haven't used it much, but it's rumored to avoid overlaps fairly well.

int GSF_hash(int x, int y, int wd, int ht)
{
    // calculate a hash value for pattern in given rect
    int hash = 31415962;
    int right = x + wd - 1;
    int bottom = y + ht - 1;
    int cx, cy;
    int v = 0;
    lifealgo* curralgo = currlayer->algo;
    bool multistate = curralgo->NumCellStates() > 2;
   
    for ( cy=y; cy<=bottom; cy++ ) {
        int yshift = cy - y;
        for ( cx=x; cx<=right; cx++ ) {
            int skip = curralgo->nextcell(cx, cy, v);
            if (skip >= 0) {
                // found next live cell in this row (v is >= 1 if multistate)
                cx += skip;
                if (cx <= right) {
                    // need to use a good hash function for patterns like AlienCounter.rle
                    hash = (hash * 1000003) ^ yshift;
                    hash = (hash * 1000003) ^ (cx - x);
                    if (multistate) hash = (hash * 1000003) ^ v;
                }
            } else {
                cx = right;  // done this row
            }
        }
    }
   
    return hash;
}

oblique wrote:On the other hand: that would still require to store the pattern in the DB (which seems to be getting rather expensive).

There I can cheerfully admit complete ignorance. Add data in batches? Start a new database table now and then, or a table for each initial target, or a table for each initial-target-plus-two-gliders? Or just reduce the bounding box to 20x20, and come to terms with the fact that you might not find quite everything that could be found.

This looks like a case where you'll still find 99% of the good reactions, while avoiding looking at 99% of the biggest time- and memory-consumingest branches of the tree... and in this case I don't think the missing 1% of good reactions will be a big loss!
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » April 9th, 2014, 2:34 pm

(had a slight cold last week, so I have not been too active ..)

dvgrn wrote:
oblique wrote:You have some point there with only having to check for collisions with known objects. I have tried to build a nice hashing function using stuff like size and period or lenght-of-rle or first few chars of the rle ... alas there always was some mayor imbalance leading to some hash values having hundreds of thousands of pattern to check.

Have you had a look at Golly's built-in hash function? I haven't used it much, but it's rumored to avoid overlaps fairly well.

At a first glance this seems to perform very well: I reimplemented/adapted it for my needs and ran it accross all the 85 million targets from my (now finished) COST 22 search. It has a collision rate of less then 1% (which is excellent, since their are only some 4 billion differnt possible hash values, because I used 32 bit unsigned ints ...). The maximum number of collisions for a given value were just 4 patterns with the same hash ... again this is a great value.

dvgrn wrote:
oblique wrote:On the other hand: that would still require to store the pattern in the DB (which seems to be getting rather expensive).

There I can cheerfully admit complete ignorance. Add data in batches? Start a new database table now and then, or a table for each initial target, or a table for each initial-target-plus-two-gliders? Or just reduce the bounding box to 20x20, and come to terms with the fact that you might not find quite everything that could be found.

This looks like a case where you'll still find 99% of the good reactions, while avoiding looking at 99% of the biggest time- and memory-consumingest branches of the tree... and in this case I don't think the missing 1% of good reactions will be a big loss!

According to the docs about mysql, batching the data together should be an improvement.

My COST 22 search ran at something like 250 completely handled reactions per seconds ...

I figured that do not really have to store every phase of every oscillator that shows up (most results are P2, naturally), that will save 40% of targets-to-save while making the C part a few percent slower (as it has to re-generate oscillating targets instead of just fetching the rle ...)

I'm currently redesigning parts of the DB schema, implementing the other forward rakes of your 31x240, so my next version should be somewhat faster and finally capable of make use of theese alternative rakes.
Last edited by oblique on April 9th, 2014, 2:58 pm, edited 3 times in total.
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » April 9th, 2014, 2:54 pm

As for the results a MAX(COST) = 22: see attached ZIP.

The are the usual 4 stamp collections of W S N E travelling *WSS

And there is a prove-of-concept of a ship tail solution - just run shiptaildemo1.rle to generation 35500 and then watch two westbound MWSSs eating away two rows of the track.

For the record: at 22 the first P8 and P4 begin to appear in the results: a few Figure Eights and a Mold.

In total it handled about 140 million reactions and found 85 million different target pattern as a result (not counting anything that has been tossed out for producing unwanted gliders, exploding or not settling fast enough).
Attachments
results.zip
(128.5 KiB) Downloaded 186 times
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » April 9th, 2014, 3:02 pm

If you'd like you could have a look at the parts I extracted from here and here.

I reformated and rephased them so that a new version of my recipe generator should be able to stitch them together ...

The file names might look rather strange at first sight but they are meant to contain any information I need to know about a ship part:

For example: R1L0_o-21x0_delta270_f554x11.rle means:
(Split at each _ ...)
  • R1L0 (rake firing at lane 0 using one set of base reactions ("rephasers"))
  • o-21x0 -> offset for combining with other parts is (-21,0)
  • delta270 -> add the next part 270 cells south
  • f554x11 -> the fired glider currently is at (554,11) after applying the offset above.

The trail/track used by my set of parts is in T_o0x0_delta31.rle
(Offset is (0,0), next part follows 31 cells south - no kidding! 8) )
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 9th, 2014, 3:27 pm

oblique wrote:... there is a prove-of-concept of a ship tail solution - just run shiptaildemo1.rle to generation 35500 and then watch two westbound MWSSs eating away two rows of the track.

That's not just a proof-of-concept -- I'd call that a completed 31c/240 back end. Just have to add a couple of rakes to make the interchanges on the right side, and the stopper blocks on the left:

x = 821, y = 6040, rule = B3/S23
101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b
2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$
810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o
108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$
808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b
2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808b
o5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b
2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5b
o$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b
2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$
808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b
2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808b
o5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b
2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5b
o$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b
2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$
808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o
108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$
808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$
810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o
9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o
114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo
2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o
108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$
808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b
2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808b
o5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b
2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5b
o$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b
2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$
808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b
2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808b
o5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b
2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5b
o$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b
2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$
808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o
108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$
808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$
810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o
9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o
114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo
2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o
108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$
808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b
2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808b
o5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b
2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5b
o$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b
2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$
808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b
2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808b
o5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b
2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5b
o$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o108b2o88b
2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$808bo5bo$
808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o114b2o
108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$810b3o2$
808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o9$101b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o8$
810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$810b3o
9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o
114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo
2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o
108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$
808bo5bo2$810b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b
2o88b2o108b2o114b2o8$810b3o2$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808b
o5bo$808bo5bo2$108b3o699b3o$108b3o$107bo2bo$107b3o$108b2o3$636bo$635b
3o$217b2o108b2o88b2o108b2o105b2o2bo$217b2o108b2o88b2o108b2o105bo3bo$
634bob2o$99b2o533b2o9b2o$99b2o8b2o534b2o$109b2o4$644bobo163b3o$97b3o
545b2o$96bo3bo544bo162bo5bo$96b2o3bo706bo5bo$96bo4bo706bo5bo$97bo3bo
545b2o$647b2o$98b2o2$808bo5bo$808bo5bo$808bo5bo2$101b2o540b2o165b3o$
101b2o540b2o8$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o
524b2o$109b2o524b2o4$810b3o2$808bo5bo$808bo5bo$808bo5bo5$694bo113bo5bo
$692bobo113bo5bo$693b2o113bo5bo2$101b2o540b2o165b3o$101b2o540b2o8$217b
2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o524b2o
2$216bo$215b4o307b3o$214b6o4b2o298bo3b2o280b3o$103b2o108b2o4bo3bo2bo
299bobo$102b2o100b2o17bobo3bo292b4o2b2o5bo4b2o266bo5bo$104bo98b2ob2o9b
o5b2o5b2o289b2o5b2o2bob3o3bobo43bobo219bo5bo$202bo4bo7b2o8bo3b2o291bob
o3b2o2b2o4bo3bo43b2o220bo5bo$201b3o3bo18b2o295b2o7b5o4b2o44bo$200bo4b
2o7bo318bo2bo$162bo37bobo10b2o323bo$163b2o36b2o10b2o$162b2o644bo5bo$
808bo5bo$808bo5bo2$101b2o114b2o308b2o114b2o165b3o$101b2o114b2o308b2o
114b2o8$327b2o88b2o123bo$327b2o88b2o124bo$541b3o2$109b2o98b2o324b2o98b
2o$109b2o87bo10b2o324b2o98b2o$198bobo$198b2o$163b2o$162b2o646b3o$164bo
$808bo5bo$808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$101b2o114b2o
308b2o114b2o165b3o$101b2o114b2o308b2o114b2o7$333bo$333bo$333bo80bobo$
413bo$325b2o7bobo73bob3obo2b2o$109b2o98b2o114b2o4bo2bo2bo72bo2bo5b2o
114b2o98b2o$109b2o98b2o118b2o3bobo72bo125b2o98b2o$223b2o105b2o76b3obo$
222b2o184bo$224bo182b3ob3o$408bo3bo397b3o$409b3o$410bo397bo5bo$808bo5b
o$808bo5bo$323b2o96b2o$323b2o96b2o$754bo$752bobo$753b2o53bo5bo$808bo5b
o$808bo5bo2$101b2o114b2o108b2o88b2o108b2o114b2o165b3o$101b2o114b2o108b
2o88b2o108b2o114b2o12$109b2o172b2o50b2o72b2o224b2o$109b2o171b2o51b2o
72b2o48bobo173b2o$284bo174b2o$460bo$458bo$459bo350b3o$457b3o$808bo5bo$
808bo5bo$808bo5bo5$808bo5bo$808bo5bo$808bo5bo2$101b2o114b2o108b2o88b2o
108b2o114b2o165b3o$101b2o114b2o108b2o88b2o108b2o114b2o6$602bo$603bo$
601b3o2$371bo$138bo230b2o$109b2o27bobo194b2o33b2o37b2o224b2o$109b2o27b
2o195b2o72b2o224b2o2$379bo$380b2o$379b2o429b3o2$808bo5bo$808bo5bo$808b
o5bo5$808bo5bo$808bo5bo$808bo5bo2$101b2o114b2o108b2o88b2o108b2o114b2o
165b3o$101b2o114b2o108b2o88b2o108b2o114b2o12$109b2o224b2o72b2o224b2o$
109b2o224b2o72b2o224b2o4$810b3o2$814bo$814bo$814bo5$808bo5bo$808bo5bo$
808bo5bo2$101b2o114b2o108b2o88b2o108b2o114b2o165b3o$101b2o114b2o108b2o
88b2o108b2o114b2o17$810b3o2$814bo$109bo704bo$108bobo703bo$107bo3bo$
107bo2bo$107bo2bo$107bobo$808bo5bo$808bo5bo$635b3o170bo5bo$634bo2bo$
217b2o108b2o88b2o108b2o105bo3bo171b3o$217b2o108b2o88b2o108b2o104b2obob
o$633b2ob2o$99b2o533b3o8b2o$99b2o8b2o534b2o$109b2o4$98bo547bo$97b3o
544bobo$96bo2b2o544b2o$95b3o2b2o$96bo3b3o$647b2o$98bo548b2o3$810b3o2$
814bo$814bo$101b2o540b2o169bo$101b2o540b2o4$808bo5bo$808bo5bo$808bo5bo
2$217b2o108b2o88b2o108b2o281b3o$217b2o108b2o88b2o108b2o3$109b2o524b2o$
109b2o524b2o13$693bo116b3o$694b2o$693b2o119bo$814bo$101b2o540b2o169bo$
101b2o540b2o4$808bo5bo$808bo5bo$808bo5bo2$217b2o108b2o88b2o108b2o281b
3o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o524b2o2$215b2o310bo$
214bo4bo307b3o$213bo5bo4b2o299b2o2bo$102b3o108b2ob2obo3bo2bo$102bo100b
4o15b2obo4bo290b5o8b3o3b2o$103bo99b2ob2o8bo6bobo5bo289bo3bobo2bobob3o
2b2obo43bo$201bo2bo2b2o7bo7b3o2b3o289b2obo3b2obo5bo4b2o42bobo$201b3o3b
o7bo10bo296b2o10b3o3b2o43b2o$200bo2bo2bo6b2o317b2o2b2o$163bo36bobo12bo
$164bo36b2o10b2o$162b3o645b3o2$814bo$814bo$101b2o114b2o308b2o114b2o
169bo$101b2o114b2o308b2o114b2o4$808bo5bo$808bo5bo$808bo5bo2$327b2o88b
2o391b3o$327b2o88b2o122bobo$542b2o$542bo$109b2o98b2o324b2o98b2o$109b2o
88bo9b2o324b2o98b2o$197b2o$198b2o$162b3o$162bo$163bo8$810b3o2$814bo$
814bo$101b2o114b2o308b2o114b2o169bo$101b2o114b2o308b2o114b2o4$808bo5bo
$808bo5bo$808bo5bo2$332b3o475b3o2$412bo$325b2o8bo75b2obo4b2o$109b2o98b
2o114b2o3bo2b2ob2o71b6o4b2o114b2o98b2o$109b2o98b2o118bo5bo72bo2bo123b
2o98b2o$222b3o104b3o76bobo$222bo190bo$223bo183bobob3o$407bo5bo$409b3o$
409b3o3$323b2o96b2o$323b2o96b2o$753bo$754b2o$753b2o55b3o2$814bo$814bo$
101b2o114b2o108b2o88b2o108b2o114b2o169bo$101b2o114b2o108b2o88b2o108b2o
114b2o4$808bo5bo$808bo5bo$808bo5bo2$810b3o4$109b2o171b3o50b2o72b2o224b
2o$109b2o171bo52b2o72b2o48bo175b2o$283bo175bobo$460bo$459bo$457bobo$
458b2o$458bo7$810b3o2$814bo$814bo$101b2o114b2o108b2o88b2o108b2o114b2o
169bo$101b2o114b2o108b2o88b2o108b2o114b2o4$808bo5bo$808bo5bo$2o806bo5b
o$2o599bobo$602b2o206b3o$602bo$370bo$139bo229bo$109b2o26b2o196b2o32b3o
37b2o224b2o$109b2o27b2o195b2o72b2o224b2o2$380bo$381bo$379b3o9$810b3o2$
814bo$814bo$101b2o114b2o108b2o88b2o108b2o114b2o169bo$101b2o114b2o108b
2o88b2o108b2o114b2o4$808bo5bo$808bo5bo$2o806bo5bo$2o$810b3o4$109b2o
224b2o72b2o224b2o$109b2o224b2o72b2o224b2o9$812bo$812bo$811b2o$812bo$
812bo2$814bo$814bo$101b2o114b2o108b2o88b2o108b2o114b2o169bo$101b2o114b
2o108b2o88b2o108b2o114b2o4$808bo5bo$808bo5bo$2o806bo5bo$2o$810b3o7$
805b2o$804bo2bo$804bo2bo$805b2o3$635b3o$635b3o$635bo2bo167b3o4b2o$636b
3o174b2o$636b2o180b3o4$109bo$108b3o106b2o108b2o88b2o108b2o$107b2o2bo
105b2o108b2o88b2o108b2o$109b3o$99b2o544b2o$99b2o534b2o8b2o$635b2o2$2o$
2o99bo709b2o$99b2o709bo2bo$100b2o544b3o162b2o$645bo3bo$644bo3b2o$644bo
4bo$97b2o545bo3bo$97b2o$646b2o157b2o$804bo2bo$804bo2bo$805b2o3$101b2o
540b2o$101b2o540b2o$806b3o4b2o$813b2o$818b3o5$217b2o108b2o88b2o108b2o$
217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o524b2o2$2o$2o809b2o$810bo
2bo$811b2o6$805b2o$804bo2bo$804bo2bo$805b2o3$101b2o540b2o$101b2o540b2o
$806b3o4b2o$813b2o$818b3o5$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o
108b2o3$109b2o524b2o$109b2o524b2o2$2o527bo$2o216bo308b4o280b2o$217bob
2o299b2o4b6o278bo2bo$208b2o6b2o2b2o297bo2bo3bo4b2o108b2o168b2o$157bo
48bo3bo4bobo4bo293bo3bobo17b2o100b2o$158b2o44b2o4bo3b3o5b2o290b2o5b2o
5bo9b2ob2o98bo$157b2o45bo5bob2ob2o4b2o292b2o3bo8b2o7bo4bo$204bo2b2o3b
2o7bo296b2o18bo3b3o$108b2o95bob2o5bobo314bo7b2o4bo$107b2o422b2o10bobo
37bo221b2o$109bo421b2o10b2o36b2o221bo2bo$582b2o220bo2bo$805b2o3$101b2o
114b2o308b2o114b2o$101b2o114b2o308b2o114b2o$806b3o4b2o$813b2o$818b3o5$
203bo123b2o88b2o$203bobo121b2o88b2o$203b2o2$109b2o98b2o324b2o98b2o$
109b2o98b2o324b2o10bo87b2o$545bobo$2o544b2o$2o579b2o228b2o$582b2o226bo
2bo$581bo229b2o3$168b2o$167b2o$169bo$805b2o$804bo2bo$804bo2bo$805b2o3$
101b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o$806b3o4b2o$813b2o$
818b3o4$412bo$412bo$329bobo80bo$332bo$325b2o2bob3obo73bobo7b2o$109b2o
98b2o114b2o5bo2bo72bo2bo2bo4b2o114b2o98b2o$109b2o98b2o125bo72bobo3b2o
118b2o98b2o$333bob3o76b2o105b2o$2o335bo184b2o$2o330b3ob3o182bo289b2o$
333bo3bo472bo2bo$334b3o474b2o$228b2o105bo$227b2o$229bo$323b2o96b2o$
323b2o96b2o$805b2o$804bo2bo$804bo2bo$805b2o3$101b2o114b2o108b2o88b2o
108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o$806b3o4b2o$813b2o$
818b3o9$109b2o173bo50b2o72b2o50b2o172b2o$109b2o174b2o48b2o72b2o51b2o
171b2o$284b2o175bo$2o$2o285bo523b2o$286bo523bo2bo$286b3o522b2o6$805b2o
$804bo2bo$804bo2bo$805b2o3$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o
114b2o108b2o88b2o108b2o114b2o$806b3o4b2o$813b2o$818b3o3$143bo$143bobo$
143b2o2$374bo$375b2o230bo$109b2o224b2o37b2o33b2o194bobo27b2o$109b2o
224b2o72b2o195b2o27b2o2$2o364bo$2o362b2o445b2o$365b2o443bo2bo$811b2o6$
805b2o$804bo2bo$804bo2bo$805b2o3$101b2o114b2o108b2o88b2o108b2o114b2o$
101b2o114b2o108b2o88b2o108b2o114b2o$806b3o4b2o$813b2o$818b3o9$109b2o
224b2o72b2o224b2o$109b2o224b2o72b2o224b2o2$2o$2o809b2o$810bo2bo$811b2o
6$805b2o$804bo2bo$804bo2bo$805b2o3$101b2o114b2o108b2o88b2o108b2o114b2o
$101b2o114b2o108b2o88b2o108b2o114b2o$806b3o4b2o$813b2o$818b3o12$2o$2o
809b2o$810bo2bo$811b2o3$635b3o$635b3o$635bo2bo$636b3o166b2o$636b2o166b
o2bo$804bo2bo$805b2o2$109bo$108b3o106b2o108b2o88b2o108b2o$107b2o2bo
105b2o108b2o88b2o108b2o$109b3o694b3o4b2o$99b2o544b2o166b2o$99b2o534b2o
8b2o171b3o$635b2o3$101bo$99b2o$100b2o544b3o$645bo3bo$644bo3b2o$644bo4b
o$97b2o545bo3bo$97b2o$2o644b2o$2o809b2o$810bo2bo$811b2o3$101b2o540b2o$
101b2o540b2o2$805b2o$804bo2bo$804bo2bo$805b2o3$217b2o108b2o88b2o108b2o
$217b2o108b2o88b2o108b2o$806b3o4b2o$813b2o$109b2o524b2o181b3o$109b2o
524b2o11$2o$2o809b2o$810bo2bo$811b2o3$101b2o540b2o$101b2o540b2o2$805b
2o$804bo2bo$804bo2bo$805b2o3$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o
108b2o$806b3o4b2o$813b2o$109b2o524b2o181b3o$109b2o524b2o2$529bo$218bo
308b4o$217bob2o299b2o4b6o$208b2o6b2o2b2o297bo2bo3bo4b2o108b2o$157bo48b
o3bo4bobo4bo293bo3bobo17b2o100b2o$158b2o44b2o4bo3b3o5b2o290b2o5b2o5bo
9b2ob2o98bo$157b2o45bo5bob2ob2o4b2o292b2o3bo8b2o7bo4bo$204bo2b2o3b2o7b
o296b2o18bo3b3o$108b2o95bob2o5bobo314bo7b2o4bo$2o105b2o422b2o10bobo37b
o$2o107bo421b2o10b2o36b2o228b2o$582b2o226bo2bo$811b2o3$101b2o114b2o
308b2o114b2o$101b2o114b2o308b2o114b2o2$805b2o$804bo2bo$804bo2bo$805b2o
3$203bo123b2o88b2o$203bobo121b2o88b2o$203b2o601b3o4b2o$813b2o$109b2o
98b2o324b2o98b2o181b3o$109b2o98b2o324b2o10bo87b2o$545bobo$546b2o$581b
2o$582b2o$581bo3$168b2o$167b2o$169bo$2o$2o809b2o$810bo2bo$811b2o3$101b
2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o2$805b2o$804bo2bo$804bo2b
o$805b2o2$412bo$412bo$329bobo80bo$332bo473b3o4b2o$325b2o2bob3obo73bobo
7b2o392b2o$109b2o98b2o114b2o5bo2bo72bo2bo2bo4b2o114b2o98b2o181b3o$109b
2o98b2o125bo72bobo3b2o118b2o98b2o$333bob3o76b2o105b2o$337bo184b2o$332b
3ob3o182bo$333bo3bo$334b3o$228b2o105bo$227b2o$229bo$323b2o96b2o$323b2o
96b2o$2o$2o809b2o$810bo2bo$811b2o3$101b2o114b2o108b2o88b2o108b2o114b2o
$101b2o114b2o108b2o88b2o108b2o114b2o2$805b2o$804bo2bo$804bo2bo$805b2o
5$806b3o4b2o$813b2o$109b2o173bo50b2o72b2o50b2o172b2o181b3o$109b2o174b
2o48b2o72b2o51b2o171b2o$284b2o175bo2$287bo$286bo$286b3o6$2o$2o809b2o$
810bo2bo$811b2o3$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b
2o88b2o108b2o114b2o2$805b2o$804bo2bo$804bo2bo$805b2o$143bo$143bobo$
143b2o2$374bo431b3o4b2o$375b2o230bo205b2o$109b2o224b2o37b2o33b2o194bob
o27b2o181b3o$109b2o224b2o72b2o195b2o27b2o2$366bo$364b2o$365b2o7$2o$2o
809b2o$810bo2bo$811b2o3$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b
2o108b2o88b2o108b2o114b2o2$805b2o$804bo2bo$804bo2bo$805b2o5$806b3o4b2o
$813b2o$109b2o224b2o72b2o224b2o181b3o$109b2o224b2o72b2o224b2o11$2o$2o
809b2o$810bo2bo$811b2o3$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b
2o108b2o88b2o108b2o114b2o2$805b2o$804bo2bo$804bo2bo$805b2o5$806b3o4b2o
$813b2o$818b3o9$108b3o$108b3o$107bo2bo$2o105b3o$2o106b2o701b2o$810bo2b
o$811b2o$636bo$635b3o$217b2o108b2o88b2o108b2o105b2o2bo$217b2o108b2o88b
2o108b2o105bo3bo$634bob2o$99b2o533b2o9b2o158b2o$99b2o8b2o534b2o157bo2b
o$109b2o693bo2bo$805b2o3$644bobo$97b3o545b2o$96bo3bo544bo160b3o4b2o$
96b2o3bo711b2o$96bo4bo716b3o$97bo3bo545b2o$647b2o$98b2o6$101b2o540b2o$
101b2o540b2o2$2o$2o809b2o$810bo2bo$811b2o3$217b2o108b2o88b2o108b2o$
217b2o108b2o88b2o108b2o2$805b2o$109b2o524b2o167bo2bo$109b2o524b2o167bo
2bo$805b2o5$806b3o4b2o$813b2o$818b3o5$694bo$692bobo$693b2o2$101b2o540b
2o$101b2o540b2o2$2o$2o809b2o$810bo2bo$811b2o3$217b2o108b2o88b2o108b2o$
217b2o108b2o88b2o108b2o2$805b2o$109b2o524b2o167bo2bo$109b2o524b2o167bo
2bo$805b2o$216bo$215b4o307b3o$214b6o4b2o298bo3b2o$103b2o108b2o4bo3bo2b
o299bobo$102b2o100b2o17bobo3bo292b4o2b2o5bo4b2o264b3o4b2o$104bo98b2ob
2o9bo5b2o5b2o289b2o5b2o2bob3o3bobo43bobo224b2o$202bo4bo7b2o8bo3b2o291b
obo3b2o2b2o4bo3bo43b2o230b3o$201b3o3bo18b2o295b2o7b5o4b2o44bo$200bo4b
2o7bo318bo2bo$162bo37bobo10b2o323bo$163b2o36b2o10b2o$162b2o4$101b2o
114b2o308b2o114b2o$101b2o114b2o308b2o114b2o2$2o$2o809b2o$810bo2bo$811b
2o3$327b2o88b2o123bo$327b2o88b2o124bo$541b3o$805b2o$109b2o98b2o324b2o
98b2o167bo2bo$109b2o87bo10b2o324b2o98b2o167bo2bo$198bobo604b2o$198b2o$
163b2o$162b2o$164bo$806b3o4b2o$813b2o$818b3o9$101b2o114b2o308b2o114b2o
$101b2o114b2o308b2o114b2o2$2o$2o809b2o$810bo2bo$811b2o2$333bo$333bo$
333bo80bobo$413bo$325b2o7bobo73bob3obo2b2o384b2o$109b2o98b2o114b2o4bo
2bo2bo72bo2bo5b2o114b2o98b2o167bo2bo$109b2o98b2o118b2o3bobo72bo125b2o
98b2o167bo2bo$223b2o105b2o76b3obo392b2o$222b2o184bo$224bo182b3ob3o$
408bo3bo$409b3o$410bo395b3o4b2o$813b2o$818b3o$323b2o96b2o$323b2o96b2o$
754bo$752bobo$753b2o4$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o
108b2o88b2o108b2o114b2o2$2o$2o809b2o$810bo2bo$811b2o6$805b2o$109b2o
172b2o50b2o72b2o224b2o167bo2bo$109b2o171b2o51b2o72b2o48bobo173b2o167bo
2bo$284bo174b2o344b2o$460bo$458bo$459bo$457b3o$806b3o4b2o$813b2o$818b
3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o
114b2o2$2o$2o809b2o$810bo2bo$811b2o$602bo$603bo$601b3o2$371bo$138bo
230b2o434b2o$109b2o27bobo194b2o33b2o37b2o224b2o167bo2bo$109b2o27b2o
195b2o72b2o224b2o167bo2bo$805b2o$379bo$380b2o$379b2o2$806b3o4b2o$813b
2o$818b3o9$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o
108b2o114b2o2$2o$2o809b2o$810bo2bo$811b2o7$109b2o224b2o72b2o224b2o176b
2o$109b2o224b2o72b2o224b2o175bo2b2o$812b2ob2o$811bobobo$810b6o$809bo4b
o$808bo4bo$808bo$807b6o$808bo9b3o$809b3o$810b2o7$101b2o114b2o108b2o88b
2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o2$2o$2o809b2o$810bo
2bo$811b2o15$109bo$108bobo$107bo3bo$107bo2bo$107bo2bo$107bobo3$635b3o
170bo$634bo2bo169bobo5b3o$217b2o108b2o88b2o108b2o105bo3bo168bobo$217b
2o108b2o88b2o108b2o104b2obobo169bo$633b2ob2o$2o97b2o533b3o8b2o164b3o$
2o97b2o8b2o534b2o$109b2o698bo5bo$809bo5bo$809bo5bo2$98bo547bo164b3o$
97b3o544bobo$96bo2b2o544b2o$95b3o2b2o$96bo3b3o$647b2o$98bo548b2o7$101b
2o540b2o$101b2o540b2o6$808bo$807bobo5b3o$217b2o108b2o88b2o108b2o278bob
o$217b2o108b2o88b2o108b2o279bo2$2o809b3o$2o107b2o524b2o$109b2o524b2o
172bo5bo$809bo5bo$809bo5bo2$811b3o9$693bo$694b2o$693b2o2$101b2o540b2o$
101b2o540b2o6$808bo$807bobo5b3o$217b2o108b2o88b2o108b2o278bobo$217b2o
108b2o88b2o108b2o279bo2$2o809b3o$2o107b2o524b2o$109b2o524b2o172bo5bo$
809bo5bo$215b2o310bo281bo5bo$214bo4bo307b3o$213bo5bo4b2o299b2o2bo281b
3o$102b3o108b2ob2obo3bo2bo$102bo100b4o15b2obo4bo290b5o8b3o3b2o$103bo
99b2ob2o8bo6bobo5bo289bo3bobo2bobob3o2b2obo43bo$201bo2bo2b2o7bo7b3o2b
3o289b2obo3b2obo5bo4b2o42bobo$201b3o3bo7bo10bo296b2o10b3o3b2o43b2o$
200bo2bo2bo6b2o317b2o2b2o$163bo36bobo12bo$164bo36b2o10b2o$162b3o4$101b
2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o6$808bo$807bobo5b3o$327b
2o88b2o388bobo$327b2o88b2o122bobo264bo$542b2o$2o540bo268b3o$2o107b2o
98b2o324b2o98b2o$109b2o88bo9b2o324b2o98b2o172bo5bo$197b2o610bo5bo$198b
2o609bo5bo$162b3o$162bo648b3o$163bo12$101b2o114b2o308b2o114b2o$101b2o
114b2o308b2o114b2o6$808bo$807bobo5b3o$332b3o472bobo$808bo$412bo$2o323b
2o8bo75b2obo4b2o390b3o$2o107b2o98b2o114b2o3bo2b2ob2o71b6o4b2o114b2o98b
2o$109b2o98b2o118bo5bo72bo2bo123b2o98b2o172bo5bo$222b3o104b3o76bobo
398bo5bo$222bo190bo395bo5bo$223bo183bobob3o$407bo5bo397b3o$409b3o$409b
3o3$323b2o96b2o$323b2o96b2o$753bo$754b2o$753b2o4$101b2o114b2o108b2o88b
2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o6$808bo$807bobo5b3o$
807bobo$808bo2$2o809b3o$2o107b2o171b3o50b2o72b2o224b2o$109b2o171bo52b
2o72b2o48bo175b2o172bo5bo$283bo175bobo347bo5bo$460bo348bo5bo$459bo$
457bobo351b3o$458b2o$458bo11$101b2o114b2o108b2o88b2o108b2o114b2o$101b
2o114b2o108b2o88b2o108b2o114b2o6$808bo$601bobo203bobo5b3o$602b2o203bob
o$602bo205bo$370bo$2o137bo229bo441b3o$2o107b2o26b2o196b2o32b3o37b2o
224b2o$109b2o27b2o195b2o72b2o224b2o172bo5bo$809bo5bo$380bo428bo5bo$
381bo$379b3o429b3o13$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o
108b2o88b2o108b2o114b2o6$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o
107b2o224b2o72b2o224b2o$109b2o224b2o72b2o224b2o171b2o5bo$807bobo5bo$
807b2o6bo2$811b3o13$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o
108b2o88b2o108b2o114b2o6$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o$
808b2o5bo$807bobo5bo$807b2o6bo2$811b3o4$635b3o$635b3o$635bo2bo$636b3o$
636b2o4$109bo$108b3o106b2o108b2o88b2o108b2o$107b2o2bo105b2o108b2o88b2o
108b2o$109b3o$99b2o544b2o$99b2o534b2o8b2o$635b2o2$808bo$101bo705bobo5b
3o$99b2o706bobo$100b2o544b3o159bo$645bo3bo$2o642bo3b2o161b3o$2o642bo4b
o$97b2o545bo3bo159b2o5bo$97b2o708bobo5bo$646b2o159b2o6bo2$811b3o4$101b
2o540b2o$101b2o540b2o8$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o
3$109b2o524b2o$109b2o524b2o2$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o
$2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o4$101b2o540b2o$101b2o540b2o
8$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o
524b2o2$529bo278bo$218bo308b4o276bobo5b3o$217bob2o299b2o4b6o275bobo$
208b2o6b2o2b2o297bo2bo3bo4b2o108b2o165bo$157bo48bo3bo4bobo4bo293bo3bob
o17b2o100b2o$2o156b2o44b2o4bo3b3o5b2o290b2o5b2o5bo9b2ob2o98bo169b3o$2o
155b2o45bo5bob2ob2o4b2o292b2o3bo8b2o7bo4bo$204bo2b2o3b2o7bo296b2o18bo
3b3o263b2o5bo$108b2o95bob2o5bobo314bo7b2o4bo261bobo5bo$107b2o422b2o10b
obo37bo223b2o6bo$109bo421b2o10b2o36b2o$582b2o227b3o4$101b2o114b2o308b
2o114b2o$101b2o114b2o308b2o114b2o8$203bo123b2o88b2o$203bobo121b2o88b2o
$203b2o2$109b2o98b2o324b2o98b2o$109b2o98b2o324b2o10bo87b2o$545bobo$
546b2o260bo$581b2o224bobo5b3o$582b2o223bobo$581bo226bo2$2o809b3o$2o
166b2o$167b2o639b2o5bo$169bo637bobo5bo$807b2o6bo2$811b3o4$101b2o114b2o
308b2o114b2o$101b2o114b2o308b2o114b2o7$412bo$412bo$329bobo80bo$332bo$
325b2o2bob3obo73bobo7b2o$109b2o98b2o114b2o5bo2bo72bo2bo2bo4b2o114b2o
98b2o$109b2o98b2o125bo72bobo3b2o118b2o98b2o$333bob3o76b2o105b2o$337bo
184b2o284bo$332b3ob3o182bo285bobo5b3o$333bo3bo469bobo$334b3o471bo$228b
2o105bo$2o225b2o582b3o$2o227bo$323b2o96b2o385b2o5bo$323b2o96b2o384bobo
5bo$807b2o6bo2$811b3o4$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b
2o108b2o88b2o108b2o114b2o12$109b2o173bo50b2o72b2o50b2o172b2o$109b2o
174b2o48b2o72b2o51b2o171b2o$284b2o175bo$808bo$287bo519bobo5b3o$286bo
520bobo$286b3o519bo2$2o809b3o$2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b
3o4$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o
114b2o6$143bo$143bobo$143b2o2$374bo$375b2o230bo$109b2o224b2o37b2o33b2o
194bobo27b2o$109b2o224b2o72b2o195b2o27b2o2$366bo441bo$364b2o441bobo5b
3o$365b2o440bobo$808bo2$2o809b3o$2o$808b2o5bo$807bobo5bo$807b2o6bo2$
811b3o4$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o
108b2o114b2o12$109b2o224b2o72b2o224b2o$109b2o224b2o72b2o224b2o2$808bo$
807bobo5b3o$807bobo$808bo2$2o809b3o$2o$808b2o5bo$807bobo5bo$807b2o6bo
2$811b3o4$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o
108b2o114b2o15$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o633b3o$635b
3o170b2o5bo$635bo2bo168bobo5bo$636b3o168b2o6bo$636b2o$811b3o3$109bo$
108b3o106b2o108b2o88b2o108b2o$107b2o2bo105b2o108b2o88b2o108b2o$109b3o$
99b2o544b2o$99b2o534b2o8b2o$635b2o3$101bo$99b2o$100b2o544b3o$645bo3bo$
644bo3b2o$644bo4bo$97b2o545bo3bo$97b2o$646b2o160bo$807bobo5b3o$807bobo
$808bo2$2o809b3o$2o99b2o540b2o$101b2o540b2o163b2o5bo$807bobo5bo$807b2o
6bo2$811b3o4$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o
524b2o$109b2o524b2o11$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o99b
2o540b2o$101b2o540b2o163b2o5bo$807bobo5bo$807b2o6bo2$811b3o4$217b2o
108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o524b2o2$
529bo$218bo308b4o$217bob2o299b2o4b6o$208b2o6b2o2b2o297bo2bo3bo4b2o108b
2o$157bo48bo3bo4bobo4bo293bo3bobo17b2o100b2o$158b2o44b2o4bo3b3o5b2o
290b2o5b2o5bo9b2ob2o98bo$157b2o45bo5bob2ob2o4b2o292b2o3bo8b2o7bo4bo$
204bo2b2o3b2o7bo296b2o18bo3b3o$108b2o95bob2o5bobo314bo7b2o4bo$107b2o
422b2o10bobo37bo224bo$109bo421b2o10b2o36b2o224bobo5b3o$582b2o223bobo$
808bo2$2o809b3o$2o99b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o163b
2o5bo$807bobo5bo$807b2o6bo2$811b3o4$203bo123b2o88b2o$203bobo121b2o88b
2o$203b2o2$109b2o98b2o324b2o98b2o$109b2o98b2o324b2o10bo87b2o$545bobo$
546b2o$581b2o$582b2o$581bo3$168b2o$167b2o$169bo$808bo$807bobo5b3o$807b
obo$808bo2$2o809b3o$2o99b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o
163b2o5bo$807bobo5bo$807b2o6bo2$811b3o3$412bo$412bo$329bobo80bo$332bo$
325b2o2bob3obo73bobo7b2o$109b2o98b2o114b2o5bo2bo72bo2bo2bo4b2o114b2o
98b2o$109b2o98b2o125bo72bobo3b2o118b2o98b2o$333bob3o76b2o105b2o$337bo
184b2o$332b3ob3o182bo$333bo3bo$334b3o$228b2o105bo$227b2o$229bo$323b2o
96b2o$323b2o96b2o$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o99b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o163b
2o5bo$807bobo5bo$807b2o6bo2$811b3o8$109b2o173bo50b2o72b2o50b2o172b2o$
109b2o174b2o48b2o72b2o51b2o171b2o$284b2o175bo2$287bo$286bo$286b3o6$
808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o99b2o114b2o108b2o88b2o108b
2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o163b2o5bo$807bobo5bo$807b
2o6bo2$811b3o2$143bo$143bobo$143b2o2$374bo$375b2o230bo$109b2o224b2o37b
2o33b2o194bobo27b2o$109b2o224b2o72b2o195b2o27b2o2$366bo$364b2o$365b2o
7$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o99b2o114b2o108b2o88b2o
108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o163b2o5bo$807bobo5bo$
807b2o6bo2$811b3o8$109b2o224b2o72b2o224b2o$109b2o224b2o72b2o224b2o11$
808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o99b2o114b2o108b2o88b2o108b
2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o163b2o5bo$807bobo5bo$807b
2o6bo2$811b3o17$635b3o$635b3o$635bo2bo$636b3o169bo$636b2o169bobo5b3o$
807bobo$808bo2$2o107bo701b3o$2o106b3o106b2o108b2o88b2o108b2o$107b2o2bo
105b2o108b2o88b2o108b2o279b2o5bo$109b3o695bobo5bo$99b2o544b2o160b2o6bo
$99b2o534b2o8b2o$635b2o174b3o3$101bo$99b2o$100b2o544b3o$645bo3bo$644bo
3b2o$644bo4bo$97b2o545bo3bo$97b2o$646b2o6$101b2o540b2o$101b2o540b2o2$
808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o215b2o108b2o88b2o108b2o$
217b2o108b2o88b2o108b2o279b2o5bo$807bobo5bo$807b2o6bo$109b2o524b2o$
109b2o524b2o174b3o17$101b2o540b2o$101b2o540b2o2$808bo$807bobo5b3o$807b
obo$808bo2$2o809b3o$2o215b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o
279b2o5bo$807bobo5bo$807b2o6bo$109b2o524b2o$109b2o524b2o174b3o2$529bo$
218bo308b4o$217bob2o299b2o4b6o$208b2o6b2o2b2o297bo2bo3bo4b2o108b2o$
157bo48bo3bo4bobo4bo293bo3bobo17b2o100b2o$158b2o44b2o4bo3b3o5b2o290b2o
5b2o5bo9b2ob2o98bo$157b2o45bo5bob2ob2o4b2o292b2o3bo8b2o7bo4bo$204bo2b
2o3b2o7bo296b2o18bo3b3o$108b2o95bob2o5bobo314bo7b2o4bo$107b2o422b2o10b
obo37bo$109bo421b2o10b2o36b2o$582b2o4$101b2o114b2o308b2o114b2o$101b2o
114b2o308b2o114b2o2$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o201bo
123b2o88b2o$203bobo121b2o88b2o389b2o5bo$203b2o602bobo5bo$807b2o6bo$
109b2o98b2o324b2o98b2o$109b2o98b2o324b2o10bo87b2o174b3o$545bobo$546b2o
$581b2o$582b2o$581bo3$168b2o$167b2o$169bo7$101b2o114b2o308b2o114b2o$
101b2o114b2o308b2o114b2o2$808bo$807bobo5b3o$807bobo$808bo2$2o410bo398b
3o$2o410bo$329bobo80bo395b2o5bo$332bo474bobo5bo$325b2o2bob3obo73bobo7b
2o386b2o6bo$109b2o98b2o114b2o5bo2bo72bo2bo2bo4b2o114b2o98b2o$109b2o98b
2o125bo72bobo3b2o118b2o98b2o174b3o$333bob3o76b2o105b2o$337bo184b2o$
332b3ob3o182bo$333bo3bo$334b3o$228b2o105bo$227b2o$229bo$323b2o96b2o$
323b2o96b2o7$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b
2o108b2o114b2o2$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o$808b2o5bo
$807bobo5bo$807b2o6bo$109b2o173bo50b2o72b2o50b2o172b2o$109b2o174b2o48b
2o72b2o51b2o171b2o174b3o$284b2o175bo2$287bo$286bo$286b3o12$101b2o114b
2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o2$808bo$
807bobo5b3o$807bobo$808bo$143bo$2o141bobo665b3o$2o141b2o$808b2o5bo$
374bo432bobo5bo$375b2o230bo199b2o6bo$109b2o224b2o37b2o33b2o194bobo27b
2o$109b2o224b2o72b2o195b2o27b2o174b3o2$366bo$364b2o$365b2o13$101b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o2$
808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o$808b2o5bo$807bobo5bo$807b
2o6bo$109b2o224b2o72b2o224b2o$109b2o224b2o72b2o224b2o174b3o17$101b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o2$
808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o$808b2o5bo$807bobo5bo$807b
2o6bo2$811b3o8$635b3o$635b3o$635bo2bo$636b3o$636b2o4$109bo$108b3o106b
2o108b2o88b2o108b2o$107b2o2bo105b2o108b2o88b2o108b2o$109b3o$99b2o544b
2o161bo$99b2o534b2o8b2o160bobo5b3o$635b2o170bobo$808bo2$2o99bo709b3o$
2o97b2o$100b2o544b3o159b2o5bo$645bo3bo157bobo5bo$644bo3b2o157b2o6bo$
644bo4bo$97b2o545bo3bo162b3o$97b2o$646b2o6$101b2o540b2o$101b2o540b2o8$
217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o2$808bo$109b2o524b2o
170bobo5b3o$109b2o524b2o170bobo$808bo2$2o809b3o$2o$808b2o5bo$807bobo5b
o$807b2o6bo2$811b3o8$101b2o540b2o$101b2o540b2o8$217b2o108b2o88b2o108b
2o$217b2o108b2o88b2o108b2o2$808bo$109b2o524b2o170bobo5b3o$109b2o524b2o
170bobo$808bo$529bo$2o216bo308b4o280b3o$2o215bob2o299b2o4b6o$208b2o6b
2o2b2o297bo2bo3bo4b2o108b2o165b2o5bo$157bo48bo3bo4bobo4bo293bo3bobo17b
2o100b2o163bobo5bo$158b2o44b2o4bo3b3o5b2o290b2o5b2o5bo9b2ob2o98bo165b
2o6bo$157b2o45bo5bob2ob2o4b2o292b2o3bo8b2o7bo4bo$204bo2b2o3b2o7bo296b
2o18bo3b3o266b3o$108b2o95bob2o5bobo314bo7b2o4bo$107b2o422b2o10bobo37bo
$109bo421b2o10b2o36b2o$582b2o4$101b2o114b2o308b2o114b2o$101b2o114b2o
308b2o114b2o8$203bo123b2o88b2o$203bobo121b2o88b2o$203b2o$808bo$109b2o
98b2o324b2o98b2o170bobo5b3o$109b2o98b2o324b2o10bo87b2o170bobo$545bobo
260bo$546b2o$2o579b2o228b3o$2o580b2o$581bo226b2o5bo$807bobo5bo$807b2o
6bo$168b2o$167b2o642b3o$169bo7$101b2o114b2o308b2o114b2o$101b2o114b2o
308b2o114b2o7$412bo$412bo$329bobo80bo$332bo$325b2o2bob3obo73bobo7b2o
387bo$109b2o98b2o114b2o5bo2bo72bo2bo2bo4b2o114b2o98b2o170bobo5b3o$109b
2o98b2o125bo72bobo3b2o118b2o98b2o170bobo$333bob3o76b2o105b2o285bo$337b
o184b2o$2o330b3ob3o182bo289b3o$2o331bo3bo$334b3o471b2o5bo$228b2o105bo
471bobo5bo$227b2o578b2o6bo$229bo$323b2o96b2o388b3o$323b2o96b2o7$101b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o11$
808bo$109b2o173bo50b2o72b2o50b2o172b2o170bobo5b3o$109b2o174b2o48b2o72b
2o51b2o171b2o170bobo$284b2o175bo346bo2$2o285bo523b3o$2o284bo$286b3o
519b2o5bo$807bobo5bo$807b2o6bo2$811b3o8$101b2o114b2o108b2o88b2o108b2o
114b2o$101b2o114b2o108b2o88b2o108b2o114b2o6$143bo$143bobo$143b2o2$374b
o$375b2o230bo200bo$109b2o224b2o37b2o33b2o194bobo27b2o170bobo5b3o$109b
2o224b2o72b2o195b2o27b2o170bobo$808bo$366bo$2o362b2o445b3o$2o363b2o$
808b2o5bo$807bobo5bo$807b2o6bo2$811b3o8$101b2o114b2o108b2o88b2o108b2o
114b2o$101b2o114b2o108b2o88b2o108b2o114b2o11$808bo$109b2o224b2o72b2o
224b2o170bobo5b3o$109b2o224b2o72b2o224b2o170bobo$808bo2$2o809b3o$2o$
808b2o5bo$807bobo5bo$807b2o6bo2$811b3o8$101b2o114b2o108b2o88b2o108b2o
114b2o$101b2o114b2o108b2o88b2o108b2o114b2o11$808bo$807bobo5b3o$807bobo
$808bo2$2o809b3o$2o$808b2o5bo$807bobo5bo$807b2o6bo$108b3o$108b3o700b3o
$107bo2bo$107b3o$108b2o3$636bo$635b3o$217b2o108b2o88b2o108b2o105b2o2bo
$217b2o108b2o88b2o108b2o105bo3bo$634bob2o$99b2o533b2o9b2o$99b2o8b2o
534b2o$109b2o4$644bobo$97b3o545b2o$96bo3bo544bo$96b2o3bo706bo$96bo4bo
705bobo5b3o$97bo3bo545b2o158bobo$647b2o159bo$98b2o$2o809b3o$2o$808b2o
5bo$807bobo5bo$807b2o6bo$101b2o540b2o$101b2o540b2o166b3o8$217b2o108b2o
88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o524b2o7$808bo$
807bobo5b3o$807bobo$808bo2$2o809b3o$2o692bo$692bobo113b2o5bo$693b2o
112bobo5bo$807b2o6bo$101b2o540b2o$101b2o540b2o166b3o8$217b2o108b2o88b
2o108b2o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o524b2o2$216bo$
215b4o307b3o$214b6o4b2o298bo3b2o$103b2o108b2o4bo3bo2bo299bobo$102b2o
100b2o17bobo3bo292b4o2b2o5bo4b2o$104bo98b2ob2o9bo5b2o5b2o289b2o5b2o2bo
b3o3bobo43bobo219bo$202bo4bo7b2o8bo3b2o291bobo3b2o2b2o4bo3bo43b2o219bo
bo5b3o$201b3o3bo18b2o295b2o7b5o4b2o44bo219bobo$200bo4b2o7bo318bo2bo
271bo$162bo37bobo10b2o323bo$2o161b2o36b2o10b2o596b3o$2o160b2o$808b2o5b
o$807bobo5bo$807b2o6bo$101b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b
2o166b3o8$327b2o88b2o123bo$327b2o88b2o124bo$541b3o2$109b2o98b2o324b2o
98b2o$109b2o87bo10b2o324b2o98b2o$198bobo$198b2o$163b2o$162b2o$164bo2$
808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o$808b2o5bo$807bobo5bo$807b
2o6bo$101b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o166b3o7$333bo$
333bo$333bo80bobo$413bo$325b2o7bobo73bob3obo2b2o$109b2o98b2o114b2o4bo
2bo2bo72bo2bo5b2o114b2o98b2o$109b2o98b2o118b2o3bobo72bo125b2o98b2o$
223b2o105b2o76b3obo$222b2o184bo$224bo182b3ob3o$408bo3bo$409b3o$410bo$
808bo$807bobo5b3o$323b2o96b2o384bobo$323b2o96b2o385bo$754bo$2o750bobo
56b3o$2o751b2o$808b2o5bo$807bobo5bo$807b2o6bo$101b2o114b2o108b2o88b2o
108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o166b3o12$109b2o172b2o
50b2o72b2o224b2o$109b2o171b2o51b2o72b2o48bobo173b2o$284bo174b2o$460bo$
458bo$459bo$457b3o2$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o$808b
2o5bo$807bobo5bo$807b2o6bo$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o
114b2o108b2o88b2o108b2o114b2o166b3o6$602bo$603bo$601b3o2$371bo$138bo
230b2o$109b2o27bobo194b2o33b2o37b2o224b2o$109b2o27b2o195b2o72b2o224b2o
2$379bo$380b2o$379b2o3$808bo$807bobo5b3o$807bobo$808bo2$2o809b3o$2o$
808b2o5bo$807bobo5bo$807b2o6bo$101b2o114b2o108b2o88b2o108b2o114b2o$
101b2o114b2o108b2o88b2o108b2o114b2o166b3o12$109b2o224b2o72b2o224b2o$
109b2o224b2o72b2o224b2o8$815b3o4$2o809b3o$2o$808b2o5bo$807bobo5bo$807b
2o6bo$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b
2o114b2o166b3o20$109bo$108bobo704b3o$107bo3bo$107bo2bo$107bo2bo$2o105b
obo701b3o$2o$808b2o5bo$635b3o169bobo5bo$634bo2bo169b2o6bo$217b2o108b2o
88b2o108b2o105bo3bo$217b2o108b2o88b2o108b2o104b2obobo172b3o$633b2ob2o$
99b2o533b3o8b2o$99b2o8b2o534b2o$109b2o4$98bo547bo$97b3o544bobo$96bo2b
2o544b2o$95b3o2b2o$96bo3b3o$647b2o$98bo548b2o7$101b2o540b2o170b3o$101b
2o540b2o3$2o809b3o$2o$808b2o5bo$807bobo5bo$807b2o6bo$217b2o108b2o88b2o
108b2o$217b2o108b2o88b2o108b2o282b3o3$109b2o524b2o$109b2o524b2o13$693b
o$694b2o$693b2o2$101b2o540b2o170b3o$101b2o540b2o3$2o809b3o$2o$808b2o5b
o$807bobo5bo$807b2o6bo$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o
282b3o3$109b2o524b2o$109b2o524b2o2$215b2o310bo$214bo4bo307b3o$213bo5bo
4b2o299b2o2bo$102b3o108b2ob2obo3bo2bo$102bo100b4o15b2obo4bo290b5o8b3o
3b2o$103bo99b2ob2o8bo6bobo5bo289bo3bobo2bobob3o2b2obo43bo$201bo2bo2b2o
7bo7b3o2b3o289b2obo3b2obo5bo4b2o42bobo$201b3o3bo7bo10bo296b2o10b3o3b2o
43b2o$200bo2bo2bo6b2o317b2o2b2o$163bo36bobo12bo$164bo36b2o10b2o$162b3o
4$101b2o114b2o308b2o114b2o170b3o$101b2o114b2o308b2o114b2o3$2o809b3o$2o
$808b2o5bo$807bobo5bo$807b2o6bo$327b2o88b2o$327b2o88b2o122bobo267b3o$
542b2o$542bo$109b2o98b2o324b2o98b2o$109b2o88bo9b2o324b2o98b2o$197b2o$
198b2o$162b3o$162bo$163bo12$101b2o114b2o308b2o114b2o170b3o$101b2o114b
2o308b2o114b2o3$2o809b3o$2o$808b2o5bo$807bobo5bo$807b2o6bo$332b3o$811b
3o$412bo$325b2o8bo75b2obo4b2o$109b2o98b2o114b2o3bo2b2ob2o71b6o4b2o114b
2o98b2o$109b2o98b2o118bo5bo72bo2bo123b2o98b2o$222b3o104b3o76bobo$222bo
190bo$223bo183bobob3o$407bo5bo$409b3o$409b3o3$323b2o96b2o$323b2o96b2o$
753bo$754b2o$753b2o4$101b2o114b2o108b2o88b2o108b2o114b2o170b3o$101b2o
114b2o108b2o88b2o108b2o114b2o3$2o809b3o$2o$808b2o5bo$807bobo5bo$807b2o
6bo2$811b3o3$109b2o171b3o50b2o72b2o224b2o$109b2o171bo52b2o72b2o48bo
175b2o$283bo175bobo$460bo$459bo$457bobo$458b2o$458bo11$101b2o114b2o
108b2o88b2o108b2o114b2o170b3o$101b2o114b2o108b2o88b2o108b2o114b2o3$2o
809b3o$2o$808b2o5bo$807bobo5bo$601bobo203b2o6bo$602b2o$602bo208b3o$
370bo$139bo229bo$109b2o26b2o196b2o32b3o37b2o224b2o$109b2o27b2o195b2o
72b2o224b2o2$380bo$381bo$379b3o13$101b2o114b2o108b2o88b2o108b2o114b2o
170b3o$101b2o114b2o108b2o88b2o108b2o114b2o3$2o809b3o$2o$808b2o5bo$807b
obo5bo$807b2o6bo2$811b3o3$109b2o224b2o72b2o224b2o$109b2o224b2o72b2o
224b2o9$813bo$814b2o$813b2o6$101b2o114b2o108b2o88b2o108b2o114b2o170b3o
$101b2o114b2o108b2o88b2o108b2o114b2o3$2o809b3o$2o$808b2o5bo$807bobo5bo
$807b2o6bo2$811b3o12$635b3o$635b3o$635bo2bo$636b3o$636b2o3$816b2o$109b
o705bobo$108b3o106b2o108b2o88b2o108b2o286b2o$107b2o2bo105b2o108b2o88b
2o108b2o$109b3o$99b2o544b2o$2o97b2o534b2o8b2o164b3o$2o633b2o$808b2o5bo
$807bobo5bo$101bo705b2o6bo$99b2o$100b2o544b3o162b3o$645bo3bo$644bo3b2o
$644bo4bo$97b2o545bo3bo$97b2o$646b2o6$101b2o540b2o$101b2o540b2o6$816b
2o$815bobo$217b2o108b2o88b2o108b2o286b2o$217b2o108b2o88b2o108b2o3$2o
107b2o524b2o174b3o$2o107b2o524b2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b
3o12$101b2o540b2o$101b2o540b2o6$816b2o$815bobo$217b2o108b2o88b2o108b2o
286b2o$217b2o108b2o88b2o108b2o3$2o107b2o524b2o174b3o$2o107b2o524b2o$
808b2o5bo$529bo277bobo5bo$218bo308b4o276b2o6bo$217bob2o299b2o4b6o$208b
2o6b2o2b2o297bo2bo3bo4b2o108b2o168b3o$157bo48bo3bo4bobo4bo293bo3bobo
17b2o100b2o$158b2o44b2o4bo3b3o5b2o290b2o5b2o5bo9b2ob2o98bo$157b2o45bo
5bob2ob2o4b2o292b2o3bo8b2o7bo4bo$204bo2b2o3b2o7bo296b2o18bo3b3o$108b2o
95bob2o5bobo314bo7b2o4bo$107b2o422b2o10bobo37bo$109bo421b2o10b2o36b2o$
582b2o4$101b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o6$816b2o$815b
obo$203bo123b2o88b2o396b2o$203bobo121b2o88b2o$203b2o2$2o107b2o98b2o
324b2o98b2o174b3o$2o107b2o98b2o324b2o10bo87b2o$545bobo260b2o5bo$546b2o
259bobo5bo$581b2o224b2o6bo$582b2o$581bo229b3o3$168b2o$167b2o$169bo7$
101b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o6$816b2o$412bo402bobo
$412bo402b2o$329bobo80bo$332bo$325b2o2bob3obo73bobo7b2o$2o107b2o98b2o
114b2o5bo2bo72bo2bo2bo4b2o114b2o98b2o174b3o$2o107b2o98b2o125bo72bobo3b
2o118b2o98b2o$333bob3o76b2o105b2o285b2o5bo$337bo184b2o283bobo5bo$332b
3ob3o182bo285b2o6bo$333bo3bo$334b3o474b3o$228b2o105bo$227b2o$229bo$
323b2o96b2o$323b2o96b2o7$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o
114b2o108b2o88b2o108b2o114b2o6$816b2o$815bobo$815b2o4$2o107b2o173bo50b
2o72b2o50b2o172b2o174b3o$2o107b2o174b2o48b2o72b2o51b2o171b2o$284b2o
175bo346b2o5bo$807bobo5bo$287bo519b2o6bo$286bo$286b3o522b3o12$101b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o6$
143bo672b2o$143bobo669bobo$143b2o670b2o2$374bo$375b2o230bo$2o107b2o
224b2o37b2o33b2o194bobo27b2o174b3o$2o107b2o224b2o72b2o195b2o27b2o$808b
2o5bo$366bo440bobo5bo$364b2o441b2o6bo$365b2o$811b3o12$101b2o114b2o108b
2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o6$816b2o$815bob
o$815b2o4$2o107b2o224b2o72b2o224b2o174b3o$2o107b2o224b2o72b2o224b2o$
808b2o5bo$807bobo5bo$807b2o6bo2$811b3o12$101b2o114b2o108b2o88b2o108b2o
114b2o$101b2o114b2o108b2o88b2o108b2o114b2o6$816b2o$815bobo$815b2o4$2o
809b3o$2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o3$635b3o$635b3o$635bo
2bo$636b3o$636b2o4$109bo$108b3o106b2o108b2o88b2o108b2o$107b2o2bo105b2o
108b2o88b2o108b2o$109b3o$99b2o544b2o$99b2o534b2o8b2o$635b2o2$816b2o$
101bo713bobo$99b2o714b2o$100b2o544b3o$645bo3bo$644bo3b2o$2o642bo4bo
161b3o$2o95b2o545bo3bo$97b2o709b2o5bo$646b2o159bobo5bo$807b2o6bo2$811b
3o3$101b2o540b2o$101b2o540b2o8$217b2o108b2o88b2o108b2o$217b2o108b2o88b
2o108b2o3$109b2o524b2o$109b2o524b2o2$816b2o$815bobo$815b2o4$2o809b3o$
2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o3$101b2o540b2o$101b2o540b2o8$
217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o
524b2o2$529bo286b2o$218bo308b4o284bobo$217bob2o299b2o4b6o283b2o$208b2o
6b2o2b2o297bo2bo3bo4b2o108b2o$157bo48bo3bo4bobo4bo293bo3bobo17b2o100b
2o$158b2o44b2o4bo3b3o5b2o290b2o5b2o5bo9b2ob2o98bo$2o155b2o45bo5bob2ob
2o4b2o292b2o3bo8b2o7bo4bo267b3o$2o202bo2b2o3b2o7bo296b2o18bo3b3o$108b
2o95bob2o5bobo314bo7b2o4bo262b2o5bo$107b2o422b2o10bobo37bo223bobo5bo$
109bo421b2o10b2o36b2o224b2o6bo$582b2o$811b3o3$101b2o114b2o308b2o114b2o
$101b2o114b2o308b2o114b2o8$203bo123b2o88b2o$203bobo121b2o88b2o$203b2o
2$109b2o98b2o324b2o98b2o$109b2o98b2o324b2o10bo87b2o$545bobo$546b2o268b
2o$581b2o232bobo$582b2o231b2o$581bo3$2o166b2o641b3o$2o165b2o$169bo638b
2o5bo$807bobo5bo$807b2o6bo2$811b3o3$101b2o114b2o308b2o114b2o$101b2o
114b2o308b2o114b2o7$412bo$412bo$329bobo80bo$332bo$325b2o2bob3obo73bobo
7b2o$109b2o98b2o114b2o5bo2bo72bo2bo2bo4b2o114b2o98b2o$109b2o98b2o125bo
72bobo3b2o118b2o98b2o$333bob3o76b2o105b2o$337bo184b2o292b2o$332b3ob3o
182bo293bobo$333bo3bo477b2o$334b3o$228b2o105bo$227b2o$2o227bo581b3o$2o
321b2o96b2o$323b2o96b2o385b2o5bo$807bobo5bo$807b2o6bo2$811b3o3$101b2o
114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o12$
109b2o173bo50b2o72b2o50b2o172b2o$109b2o174b2o48b2o72b2o51b2o171b2o$
284b2o175bo$816b2o$287bo527bobo$286bo528b2o$286b3o3$2o809b3o$2o$808b2o
5bo$807bobo5bo$807b2o6bo2$811b3o3$101b2o114b2o108b2o88b2o108b2o114b2o$
101b2o114b2o108b2o88b2o108b2o114b2o6$143bo$143bobo$143b2o2$374bo$375b
2o230bo$109b2o224b2o37b2o33b2o194bobo27b2o$109b2o224b2o72b2o195b2o27b
2o2$366bo449b2o$364b2o449bobo$365b2o448b2o4$2o809b3o$2o$808b2o5bo$807b
obo5bo$807b2o6bo2$811b3o3$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o
114b2o108b2o88b2o108b2o114b2o12$109b2o224b2o72b2o224b2o$109b2o224b2o
72b2o224b2o2$816b2o$815bobo$815b2o4$2o809b3o$2o$808b2o5bo$807bobo5bo$
807b2o6bo2$811b3o3$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o
108b2o88b2o108b2o114b2o15$816b2o$815bobo$815b2o4$2o633b3o173b3o$2o633b
3o$635bo2bo169b2o5bo$636b3o168bobo5bo$636b2o169b2o6bo2$811b3o2$109bo$
108b3o106b2o108b2o88b2o108b2o$107b2o2bo105b2o108b2o88b2o108b2o$109b3o$
99b2o544b2o$99b2o534b2o8b2o$635b2o3$101bo$99b2o$100b2o544b3o$645bo3bo$
644bo3b2o$644bo4bo$97b2o545bo3bo$97b2o$646b2o168b2o$815bobo$815b2o4$2o
99b2o540b2o166b3o$2o99b2o540b2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o
3$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o
524b2o11$816b2o$815bobo$815b2o4$2o99b2o540b2o166b3o$2o99b2o540b2o$808b
2o5bo$807bobo5bo$807b2o6bo2$811b3o3$217b2o108b2o88b2o108b2o$217b2o108b
2o88b2o108b2o3$109b2o524b2o$109b2o524b2o2$529bo$218bo308b4o$217bob2o
299b2o4b6o$208b2o6b2o2b2o297bo2bo3bo4b2o108b2o$157bo48bo3bo4bobo4bo
293bo3bobo17b2o100b2o$158b2o44b2o4bo3b3o5b2o290b2o5b2o5bo9b2ob2o98bo$
157b2o45bo5bob2ob2o4b2o292b2o3bo8b2o7bo4bo$204bo2b2o3b2o7bo296b2o18bo
3b3o$108b2o95bob2o5bobo314bo7b2o4bo$107b2o422b2o10bobo37bo232b2o$109bo
421b2o10b2o36b2o232bobo$582b2o231b2o4$2o99b2o114b2o308b2o114b2o166b3o$
2o99b2o114b2o308b2o114b2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o3$203b
o123b2o88b2o$203bobo121b2o88b2o$203b2o2$109b2o98b2o324b2o98b2o$109b2o
98b2o324b2o10bo87b2o$545bobo$546b2o$581b2o$582b2o$581bo3$168b2o$167b2o
$169bo$816b2o$815bobo$815b2o4$2o99b2o114b2o308b2o114b2o166b3o$2o99b2o
114b2o308b2o114b2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o2$412bo$412bo
$329bobo80bo$332bo$325b2o2bob3obo73bobo7b2o$109b2o98b2o114b2o5bo2bo72b
o2bo2bo4b2o114b2o98b2o$109b2o98b2o125bo72bobo3b2o118b2o98b2o$333bob3o
76b2o105b2o$337bo184b2o$332b3ob3o182bo$333bo3bo$334b3o$228b2o105bo$
227b2o$229bo$323b2o96b2o$323b2o96b2o$816b2o$815bobo$815b2o4$2o99b2o
114b2o108b2o88b2o108b2o114b2o166b3o$2o99b2o114b2o108b2o88b2o108b2o114b
2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o7$109b2o173bo50b2o72b2o50b2o
172b2o$109b2o174b2o48b2o72b2o51b2o171b2o$284b2o175bo2$287bo$286bo$286b
3o6$816b2o$815bobo$815b2o4$2o99b2o114b2o108b2o88b2o108b2o114b2o166b3o$
2o99b2o114b2o108b2o88b2o108b2o114b2o$808b2o5bo$807bobo5bo$807b2o6bo2$
811b3o$143bo$143bobo$143b2o2$374bo$375b2o230bo$109b2o224b2o37b2o33b2o
194bobo27b2o$109b2o224b2o72b2o195b2o27b2o2$366bo$364b2o$365b2o7$816b2o
$815bobo$815b2o4$2o99b2o114b2o108b2o88b2o108b2o114b2o166b3o$2o99b2o
114b2o108b2o88b2o108b2o114b2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o7$
109b2o224b2o72b2o224b2o$109b2o224b2o72b2o224b2o11$816b2o$815bobo$815b
2o4$2o99b2o114b2o108b2o88b2o108b2o114b2o166b3o$2o99b2o114b2o108b2o88b
2o108b2o114b2o$808b2o5bo$807bobo5bo$807b2o6bo2$811b3o16$108b3o$108b3o$
107bo2bo$107b3o706b2o$108b2o705bobo$815b2o2$636bo$635b3o$2o215b2o108b
2o88b2o108b2o105b2o2bo172b3o$2o215b2o108b2o88b2o108b2o105bo3bo$634bob
2o170b2o5bo$99b2o533b2o9b2o160bobo5bo$99b2o8b2o534b2o160b2o6bo$109b2o$
811b3o3$644bobo$97b3o545b2o$96bo3bo544bo$96b2o3bo$96bo4bo$97bo3bo545b
2o$647b2o$98b2o6$101b2o540b2o$101b2o540b2o2$816b2o$815bobo$815b2o4$2o
215b2o108b2o88b2o108b2o282b3o$2o215b2o108b2o88b2o108b2o$808b2o5bo$807b
obo5bo$109b2o524b2o170b2o6bo$109b2o524b2o$811b3o12$694bo$692bobo$693b
2o2$101b2o540b2o$101b2o540b2o2$816b2o$815bobo$815b2o4$2o215b2o108b2o
88b2o108b2o282b3o$2o215b2o108b2o88b2o108b2o$808b2o5bo$807bobo5bo$109b
2o524b2o170b2o6bo$109b2o524b2o$811b3o$216bo$215b4o307b3o$214b6o4b2o
298bo3b2o$103b2o108b2o4bo3bo2bo299bobo$102b2o100b2o17bobo3bo292b4o2b2o
5bo4b2o$104bo98b2ob2o9bo5b2o5b2o289b2o5b2o2bob3o3bobo43bobo$202bo4bo7b
2o8bo3b2o291bobo3b2o2b2o4bo3bo43b2o$201b3o3bo18b2o295b2o7b5o4b2o44bo$
200bo4b2o7bo318bo2bo$162bo37bobo10b2o323bo$163b2o36b2o10b2o$162b2o4$
101b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o2$816b2o$815bobo$815b
2o4$2o325b2o88b2o123bo268b3o$2o325b2o88b2o124bo$541b3o264b2o5bo$807bob
o5bo$109b2o98b2o324b2o98b2o170b2o6bo$109b2o87bo10b2o324b2o98b2o$198bob
o610b3o$198b2o$163b2o$162b2o$164bo12$101b2o114b2o308b2o114b2o$101b2o
114b2o308b2o114b2o2$816b2o$815bobo$815b2o3$333bo$2o331bo477b3o$2o331bo
80bobo$413bo394b2o5bo$325b2o7bobo73bob3obo2b2o386bobo5bo$109b2o98b2o
114b2o4bo2bo2bo72bo2bo5b2o114b2o98b2o170b2o6bo$109b2o98b2o118b2o3bobo
72bo125b2o98b2o$223b2o105b2o76b3obo398b3o$222b2o184bo$224bo182b3ob3o$
408bo3bo$409b3o$410bo3$323b2o96b2o$323b2o96b2o$754bo$752bobo$753b2o4$
101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b
2o2$816b2o$815bobo$815b2o4$2o809b3o$2o$808b2o5bo$807bobo5bo$109b2o172b
2o50b2o72b2o224b2o170b2o6bo$109b2o171b2o51b2o72b2o48bobo173b2o$284bo
174b2o350b3o$460bo$458bo$459bo$457b3o12$101b2o114b2o108b2o88b2o108b2o
114b2o$101b2o114b2o108b2o88b2o108b2o114b2o2$816b2o$815bobo$815b2o2$
602bo$603bo$2o599b3o207b3o$2o$371bo436b2o5bo$138bo230b2o436bobo5bo$
109b2o27bobo194b2o33b2o37b2o224b2o170b2o6bo$109b2o27b2o195b2o72b2o224b
2o$811b3o$379bo$380b2o$379b2o13$101b2o114b2o108b2o88b2o108b2o114b2o$
101b2o114b2o108b2o88b2o108b2o114b2o2$816b2o$815bobo$815b2o4$2o$2o$815b
o$803bo3bobo5bo$109b2o224b2o72b2o224b2o165b2o4b2o5bo$109b2o224b2o72b2o
224b2o164b3o$802b3o$803bobo$804b2o14$101b2o114b2o108b2o88b2o108b2o114b
2o$101b2o114b2o108b2o88b2o108b2o114b2o2$816b2o$815bobo$815b2o4$2o$2o$
807bo7bo$806bobo6bo$807bobo5bo$808b2o7$109bo$108bobo$107bo3bo$107bo2bo
$107bo2bo$107bobo3$635b3o$634bo2bo$217b2o108b2o88b2o108b2o105bo3bo$
217b2o108b2o88b2o108b2o104b2obobo$633b2ob2o$99b2o533b3o8b2o169b2o$99b
2o8b2o534b2o168bobo$109b2o704b2o4$2o96bo547bo$2o95b3o544bobo$96bo2b2o
544b2o160bo7bo$95b3o2b2o704bobo6bo$96bo3b3o704bobo5bo$647b2o159b2o$98b
o548b2o7$101b2o540b2o$101b2o540b2o8$217b2o108b2o88b2o108b2o$217b2o108b
2o88b2o108b2o2$816b2o$109b2o524b2o178bobo$109b2o524b2o178b2o4$2o$2o$
807bo7bo$806bobo6bo$807bobo5bo$808b2o4$693bo$694b2o$693b2o2$101b2o540b
2o$101b2o540b2o8$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o2$816b
2o$109b2o524b2o178bobo$109b2o524b2o178b2o2$215b2o310bo$214bo4bo307b3o$
2o211bo5bo4b2o299b2o2bo$2o100b3o108b2ob2obo3bo2bo$102bo100b4o15b2obo4b
o290b5o8b3o3b2o265bo7bo$103bo99b2ob2o8bo6bobo5bo289bo3bobo2bobob3o2b2o
bo43bo219bobo6bo$201bo2bo2b2o7bo7b3o2b3o289b2obo3b2obo5bo4b2o42bobo
218bobo5bo$201b3o3bo7bo10bo296b2o10b3o3b2o43b2o220b2o$200bo2bo2bo6b2o
317b2o2b2o$163bo36bobo12bo$164bo36b2o10b2o$162b3o4$101b2o114b2o308b2o
114b2o$101b2o114b2o308b2o114b2o8$327b2o88b2o$327b2o88b2o122bobo$542b2o
$542bo273b2o$109b2o98b2o324b2o98b2o178bobo$109b2o88bo9b2o324b2o98b2o
178b2o$197b2o$198b2o$162b3o$2o160bo$2o161bo$807bo7bo$806bobo6bo$807bob
o5bo$808b2o8$101b2o114b2o308b2o114b2o$101b2o114b2o308b2o114b2o8$332b3o
2$412bo$325b2o8bo75b2obo4b2o395b2o$109b2o98b2o114b2o3bo2b2ob2o71b6o4b
2o114b2o98b2o178bobo$109b2o98b2o118bo5bo72bo2bo123b2o98b2o178b2o$222b
3o104b3o76bobo$222bo190bo$223bo183bobob3o$2o405bo5bo$2o407b3o$409b3o
395bo7bo$806bobo6bo$807bobo5bo$323b2o96b2o385b2o$323b2o96b2o$753bo$
754b2o$753b2o4$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o
88b2o108b2o114b2o11$816b2o$109b2o171b3o50b2o72b2o224b2o178bobo$109b2o
171bo52b2o72b2o48bo175b2o178b2o$283bo175bobo$460bo$459bo$2o455bobo$2o
456b2o$458bo348bo7bo$806bobo6bo$807bobo5bo$808b2o8$101b2o114b2o108b2o
88b2o108b2o114b2o$101b2o114b2o108b2o88b2o108b2o114b2o7$601bobo$602b2o$
602bo$370bo$139bo229bo446b2o$109b2o26b2o196b2o32b3o37b2o224b2o178bobo$
109b2o27b2o195b2o72b2o224b2o178b2o2$380bo$381bo$2o377b3o$2o$807bo7bo$
806bobo6bo$807bobo5bo$808b2o8$101b2o114b2o108b2o88b2o108b2o114b2o$101b
2o114b2o108b2o88b2o108b2o114b2o11$816b2o$109b2o224b2o72b2o224b2o178bob
o$109b2o224b2o72b2o224b2o178b2o4$2o$2o$808b2o5bo$807bo2bo4bo$807bo2bo
4bo$808b2o8$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o108b2o88b
2o108b2o114b2o11$816b2o$815bobo$815b2o4$2o$2o$808b2o5bo$109bo697bo2bo
4bo$108bobo696bo2bo4bo$107bo3bo696b2o$107bo2bo$107bo2bo$107bobo3$635b
3o$634bo2bo$217b2o108b2o88b2o108b2o105bo3bo$217b2o108b2o88b2o108b2o
104b2obobo$633b2ob2o$99b2o533b3o8b2o$99b2o8b2o534b2o$109b2o4$98bo547bo
$97b3o544bobo$96bo2b2o544b2o$95b3o2b2o714b2o$96bo3b3o712bobo$647b2o
166b2o$98bo548b2o3$2o$2o$808b2o5bo$807bo2bo4bo$101b2o540b2o162bo2bo4bo
$101b2o540b2o163b2o8$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$
109b2o524b2o$109b2o524b2o7$816b2o$815bobo$815b2o4$2o691bo$2o692b2o$
693b2o113b2o5bo$807bo2bo4bo$101b2o540b2o162bo2bo4bo$101b2o540b2o163b2o
8$217b2o108b2o88b2o108b2o$217b2o108b2o88b2o108b2o3$109b2o524b2o$109b2o
524b2o2$215b2o310bo$214bo4bo307b3o$213bo5bo4b2o299b2o2bo$102b3o108b2ob
2obo3bo2bo$102bo100b4o15b2obo4bo290b5o8b3o3b2o$103bo99b2ob2o8bo6bobo5b
o289bo3bobo2bobob3o2b2obo43bo229b2o$201bo2bo2b2o7bo7b3o2b3o289b2obo3b
2obo5bo4b2o42bobo226bobo$201b3o3bo7bo10bo296b2o10b3o3b2o43b2o227b2o$
200bo2bo2bo6b2o317b2o2b2o$163bo36bobo12bo$164bo36b2o10b2o$2o160b3o$2o$
808b2o5bo$807bo2bo4bo$101b2o114b2o308b2o114b2o162bo2bo4bo$101b2o114b2o
308b2o114b2o163b2o8$327b2o88b2o$327b2o88b2o122bobo$542b2o$542bo$109b2o
98b2o324b2o98b2o$109b2o88bo9b2o324b2o98b2o$197b2o$198b2o$162b3o$162bo$
163bo2$816b2o$815bobo$815b2o4$2o$2o$808b2o5bo$807bo2bo4bo$101b2o114b2o
308b2o114b2o162bo2bo4bo$101b2o114b2o308b2o114b2o163b2o8$332b3o2$412bo$
325b2o8bo75b2obo4b2o$109b2o98b2o114b2o3bo2b2ob2o71b6o4b2o114b2o98b2o$
109b2o98b2o118bo5bo72bo2bo123b2o98b2o$222b3o104b3o76bobo$222bo190bo$
223bo183bobob3o$407bo5bo$409b3o$409b3o$816b2o$815bobo$323b2o96b2o392b
2o$323b2o96b2o$753bo$754b2o$2o751b2o$2o$808b2o5bo$807bo2bo4bo$101b2o
114b2o108b2o88b2o108b2o114b2o162bo2bo4bo$101b2o114b2o108b2o88b2o108b2o
114b2o163b2o12$109b2o171b3o50b2o72b2o224b2o$109b2o171bo52b2o72b2o48bo
175b2o$283bo175bobo$460bo$459bo$457bobo$458b2o$458bo$816b2o$815bobo$
815b2o4$2o$2o$808b2o5bo$807bo2bo4bo$101b2o114b2o108b2o88b2o108b2o114b
2o162bo2bo4bo$101b2o114b2o108b2o88b2o108b2o114b2o163b2o7$601bobo$602b
2o$602bo$370bo$139bo229bo$109b2o26b2o196b2o32b3o37b2o224b2o$109b2o27b
2o195b2o72b2o224b2o2$380bo$381bo$379b3o3$816b2o$815bobo$815b2o4$2o$2o$
808b2o5bo$807bo2bo4bo$101b2o114b2o108b2o88b2o108b2o114b2o162bo2bo4bo$
101b2o114b2o108b2o88b2o108b2o114b2o163b2o12$109b2o224b2o72b2o224b2o$
109b2o224b2o72b2o224b2o7$810b2o$810b2o3b2o$809bo$810b2o3b2o$810b2o2$2o
$2o$808b2o5bo$807bo2bo4bo$101b2o114b2o108b2o88b2o108b2o114b2o162bo2bo
4bo$101b2o114b2o108b2o88b2o108b2o114b2o163b2o22$714bo$712bo3bo$711bo$
711bo4bo$2o709b5o$2o3$101b2o114b2o108b2o88b2o108b2o114b2o$101b2o114b2o
108b2o88b2o108b2o114b2o22$594bo$592bo3bo$591bo$591bo4bo$2o589b5o$2o3$
101b2o114b2o108b2o88b2o108b2o$101b2o114b2o108b2o88b2o108b2o22$474bo$
472bo3bo$471bo$471bo4bo$2o469b5o$2o3$101b2o114b2o108b2o88b2o$101b2o
114b2o108b2o88b2o22$354bo$352bo3bo$351bo$351bo4bo$2o349b5o$2o3$101b2o
114b2o108b2o$101b2o114b2o108b2o22$234bo$232bo3bo$231bo$231bo4bo$2o229b
5o$2o3$101b2o114b2o$101b2o114b2o22$114bo$112bo3bo$111bo$111bo4bo$2o
109b5o$2o3$101b2o$101b2o!
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 12th, 2014, 6:20 pm

dvgrn wrote:Just have to add a couple of rakes to make the interchanges on the right side, and the stopper blocks on the left...

The stopper blocks are trivial, but building an interchange on those exact columns [+/-31N] is a little trickier. I keep calculating the required adjustments, and then carefully making those adjustments... and ending up with not quite the right final location. An interchange built in the wrong place results in misaligned MWSSes (see attached).

The math shouldn't be too terribly difficult to sort out. I'll see what I can do to come up with a minimal solution for any pair of colliding gliders on any given column, using the current rake toolkit. Further bulletins as events warrant...
Attachments
back-end-biblock-misaligned-interchange.zip
MWSSes are generated three rows too high
(33.93 KiB) Downloaded 178 times
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 13th, 2014, 10:26 am

oblique wrote:As for the results a MAX(COST) = 22: see attached ZIP.

The are the usual 4 stamp collections of W S N E travelling *WSS...

It's an impressive collection. Oddly enough, there seem to be usable MWSS recipes in the N collection this time around, but no workable HWSSes:

#C reaction: 46597966
x = 14, y = 10, rule = LifeHistory
C$.2C$2C4$5.2C4.3C$4.C2.C$5.C.C$6.C!

EDIT: These two HWSSes look really good, but the blinker closest to the output lane is unfortunately in the wrong phase -- at least for 31c/240. I haven't thought about whether this might work for a 17c/45 Caterpillar sibling:

#C reaction: 73273393
#C reaction: 73722710
x = 254, y = 59, rule = LifeHistory
9$19.C203.C$20.2C202.2C$19.2C202.2C3$33.2C202.2C$33.2C202.2C4$31.C
203.C$30.C.C201.C.C$30.C2.C200.C2.C$31.2C202.2C2$34.C203.C$34.C203.C$
34.C203.C$25.2C193.2C7.2C$24.C.C3.3C186.C2.C5.C.C3.3C$24.2C193.C2.C5.
2C$220.2C2$21.3C201.3C!

Here's a larger group that I just sorted out of the N patterns. For some of these I strongly suspect that intermediate targets will get in the way of the upship stream, but I haven't gone and looked up all the recipes. Will be more careful to keep track of all the reaction numbers next time.

#C N upships with (possibly) clear lanes, MAX(COST) = 22
x = 1072, y = 150, rule = LifeHistory
302.3C2$300.C5.C174.C$300.C5.C173.C.C82.2C$295.C4.C5.C173.C.C82.2C$
85.C73.C136.2C90.C79.C12.C167.C$86.2C72.2C133.2C5.3C84.2C78.2C179.2C$
85.2C72.2C227.2C78.2C179.2C19.2C218.C$238.C431.2C219.2C$10.C228.2C
649.2C$9.C.C69.2C68.2C85.2C155.C77.2C7.2C$9.C2.C6.3C59.2C68.2C3.2C
237.C76.C2.C5.C2.C582.C$10.2C144.2C237.C77.2C7.2C583.C$234.2C146.2C6.
2C503.2C4.3C147.C15.C$5.2C83.2C142.2C145.C.C5.C2.C85.C10.2C403.C2.C
154.2C8.2C$C3.C2.C4.3C75.C.C72.2C214.2C6.C2.C84.C.C8.C2.C403.C.C79.C
73.2C8.C2.C4.3C$.2C2.C.C83.C73.C.C222.2C85.C.C9.2C405.C81.2C82.C.C$2C
4.C3.C6.2C147.C62.2C12.2C54.2C171.2C4.C174.2C322.2C84.C3.C$10.C6.2C
210.2C12.C.C53.2C171.2C87.C91.2C412.C$10.C233.C317.2C503.C$561.2C$93.
2C213.2C74.2C596.2C4.3C$93.2C213.C.C72.C2.C594.C2.C$309.C74.C.C178.3C
414.C.C$385.C597.C3$670.3C395.2C$1062.2C3.C2.C$1062.2C3.C2.C$1068.2C$
898.2C$897.C2.C155.2C$898.2C155.C2.C$1056.2C2$1066.3C93$297.C$297.C$
282.C14.C$282.C$282.C2$278.3C3.3C2$282.C$282.C7.C$282.C7.C$290.C3$
286.2C$286.C.C$287.2C2$274.C$274.2C$273.C.C!

[The one at the bottom with two spaceships going off in opposite directions is just a curiosity -- reaction 140759384 -- not likely to be useful for anything, I think.]

I sorted all these out by hand, by panning across the recipes in a LifeHistory view, while muttering to myself, "no red in the lanes -- upships on the right". So I might well have missed a few good recipes. Is there code written yet that will confirm that an upship stream won't hit any of its recipe's intermediate targets?

EDIT 2: Some of these results can be adapted into seeds with fairly impressive clearance -- it might even be worth building some seeds one object at a time, either with a slow salvo or with colliding forward and backward streams, to do difficult constructions on the edge of a helix:

#C HWSS seeds with 15-cell clearance from lane to seed objects,
#C and 13-cell clearance from lane to leftover ash.
#C From reaction 112918098 in sample_S.pat
x = 98, y = 31, rule = B3/S23
6b2o5b2o$6b2o4bo2bo69b2o5b2o$13b2o70b2o4bo2bo$92b2o3$16b2o$5b2o9bobo
76b2o$5b2o10bo66b2o9bobo$84b2o10bo$2bo$obo$b2o8$10b2o$9bobo$10bo6$73b
2o$72bobo$74bo!

It might be possible to build seeds like this using slow salvos from forward rakes, but of course the cost will be completely different:

#C medium-clearance low-spark LWSS seed
#C reaction 23069961 in sample_S.pat
x = 11, y = 21, rule = LifeHistory
4.3C2$8.C$8.C$2.3C3.C2$10.C$10.C$2C3.2C3.C$2C3.2C4$8.2C$8.C.C$9.2C3$
6.2C$7.2C$6.C!
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » April 14th, 2014, 1:26 pm

dvgrn wrote:
dvgrn wrote:Just have to add a couple of rakes to make the interchanges on the right side, and the stopper blocks on the left...

The stopper blocks are trivial, but building an interchange on those exact columns [+/-31N] is a little trickier. I keep calculating the required adjustments, and then carefully making those adjustments... and ending up with not quite the right final location. An interchange built in the wrong place results in misaligned MWSSes (see attached).

The math shouldn't be too terribly difficult to sort out. I'll see what I can do to come up with a minimal solution for any pair of colliding gliders on any given column, using the current rake toolkit. Further bulletins as events warrant...

My current - almost usable enough to run first tries - multi bakerake version of the search has a notion of "state" ... currently it's expressed in a lane offset between lane 0 of the pattern and lane 0 of the track. In other words: state = 0 means that a R1L0B rake will just hit the bottom left edge of the bounding box of the current target.

One of the unfinished problems is the value of this state at the start of the search.

If you would find out that there are only some possible values for this state after the creation of any of theese targets that would greatly reduce the search space (currently I'm trying to allow any combination of state, rake and starting pattern at a fixed cost).

Another problem with this notion is that I probably would have to make different adjustments for forward and backward rakes (an reaction that moves the construction site diagonally NE would not alter the state for the backrakes but it woult alter the state fwd rakes).

So for implementing both types in one search we'd basically have to track either both "states" individually - or the (dx, dy) offset between track and site (mod 31).

(Searching for recipes with just fwd rakes would be easier to implement - I'd just have to replace the parts and the bullet, and it *should* work about as well as with searching just backrakes).
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 14th, 2014, 3:22 pm

oblique wrote:My current - almost usable enough to run first tries - multi bakerake version of the search has a notion of "state" ... currently it's expressed in a lane offset between lane 0 of the pattern and lane 0 of the track. In other words: state = 0 means that a R1L0B rake will just hit the bottom left edge of the bounding box of the current target.

One of the unfinished problems is the value of this state at the start of the search.

Okay, so then state = 1 is the next lane, which will also hit the current target -- but state = -1 (or state = 30) would presumably miss it?

It should be easy to translate my current investigations into those terms. I'm working toward a simple parametrization of the possible locations of any constructed object, relative to the block trails, using collisions between gliders on backward lane B and forward lane F.

oblique wrote:If you would find out that there are only some possible values for this state after the creation of any of these targets that would greatly reduce the search space (currently I'm trying to allow any combination of state, rake and starting pattern at a fixed cost).

There are definitely initial targets that are more expensive and less expensive, depending on the exact location. But with twelve different fore+back rake combinations (even assuming nobody comes up with more variants) there will be relatively few targets that need more than (say) two dozen rephasers total to construct, and also relatively few that need less than half a dozen.

As an example, below I've attached a much smaller spaceship termination than the one I posted earlier on the 31c/240 thread. It can still be tightened up a bit more, but this is pretty good. I've been looking at packing rephasers a little closer together -- it's certainly possible, especially for longer chains:

#C 5 mutually suppressing rephasers, 3 shorter ones in the middle,
#C using about as much space as 4 standard-height rephasers
x = 801, y = 2512, rule = B3/S23
126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b
2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o
114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o
108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o
88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o
108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o
114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$
126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o
114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o
108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o
88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o
108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o
114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$
126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b
2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o
114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o
108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o
88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o
108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o
114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$
126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o
114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o
108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o
88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o
108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o
114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$
126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b
2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o
114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o
108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o
88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o
108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o
114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$
126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o
114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o
108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o
88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o114b2o
108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$126b2o
114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o30$
126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b
2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o
114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o
108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o
88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o
108b2o88b2o108b2o114b2o30$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o
114b2o108b2o88b2o108b2o114b2o6$668b2o$667bo$127b3o537b3o$126bo3b2o520b
o13b3o7b3o$125b4ob2o3b2o514bo2bo10bo10b3o$124b2o2b3o3bo2bo517bo6bob2o
3bo4bo4bo$125bobo6bo2bo512bo4bo5bo7bo4bo3b2o$126b2o5b2ob2o516b2o5bo6bo
9bo$134b2o526bo11bo2bo$651b3o10b3o3b2o3bo$670b2o$670bo4$126b2o540b2o$
126b2o540b2o6$139bo$140bo$138b3o101b2o108b2o88b2o108b2o$242b2o108b2o
88b2o108b2o2$651bo$134b2o514bo9b2o$134b2o514b3o7b2o17$126b2o540b2o$
126b2o540b2o8$242b2o108b2o88b2o108b2o$242b2o108b2o88b2o108b2o3$134b2o
524b2o$134b2o524b2o17$126b2o540b2o$126b2o540b2o7$552b2o$352b2o88b2o
106bo$241bob2o107b2o88b2o104bo3bo$235b2o4bo2bo303bobo2bo$60bobo173bo4b
o310b2o$60b2o72b2o101b3obo305b2o111b2o$61bo72b2o101bo2b2ob3o301bo7bo2b
o101b2o$237bo3bob3o315bo$239b2o311bo8bo$548bobobo8bo176bobo$551b4o3bo
180b2o$548bo3bo186bo$224b5o320bobo$225b3o$226bo20b2o$246bo2bo6bo291b2o
$246bob2o4b2o292b2o$247bo3b5o$251bo2bo$248bob4o$249bo$248bo2$126b2o
114b2o22bo285b2o114b2o$126b2o114b2o23bo284b2o114b2o$265b3o3$199bo324bo
$200bo322bo$198b3o322b3o2$352b2o88b2o$352b2o88b2o147bo$590bo$590b3o$
134b2o98b2o324b2o98b2o$134b2o98b2o324b2o98b2o9$439bo$438b3o$213bo223b
2o2bo$211b2o228b2o$212b2o224b3ob2o$359b2o78bo2b2o$359b3o76b3o$358bo2bo
79b2o144bo$126b2o114b2o113b2ob2o79b2o109b2o34b2o78b2o$126b2o114b2o113b
2ob2o190b2o33b2o79b2o$358b2ob2o$361bo72bo$358b3o73bobo$359bo74b2o7$
350b2o$134b2o98b2o114b2o8b2o72b2o124b2o98b2o$134b2o98b2o124b2o72b2o
124b2o98b2o$349bo$348bobo$351bo$346bo3bo$345bo4bo$344bo2$349bo$346bo8$
126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b
2o9$obo$2o$bo$134b2o224b2o72b2o224b2o$134b2o224b2o72b2o224b2o$798bobo$
799b2o$799bo14$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o
88b2o108b2o114b2o12$134b2o224b2o72b2o224b2o$134b2o224b2o72b2o224b2o9$
153bo$151b2o$152b2o2$416bo$414bobo230bo$415b2o231b2o$647b2o$126b2o114b
2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o20bo67b2o108b2o114b2o$374b
obo421b2o$374b2o421bobo$799bo3$b2o$bobo$bo4$134b2o224b2o72b2o224b2o$
134b2o224b2o72b2o224b2o17$126b2o114b2o108b2o88b2o108b2o114b2o68b2o$
126b2o114b2o108b2o88b2o108b2o114b2o67bobo$739bo3$61b2o$61bobo$61bo22$
678b2o$677bobo$126b2o114b2o108b2o88b2o108bo115b2o9bo$126b2o114b2o108b
2o88b2o107bob2o113b2o$551bo3bo2b3o$121b2o428bo5bo$121bobo119bo307b2obo
bo$121bo115b2o3bob5o301bobobo4bo$236bo2b4o2b4ob2o298bobobob3o$235bobob
2o2b3o305bo3b2o$231b2ob2o431b2o$225bo4b4o3b3o329bo95b4o$225bo4bo8bo11b
3o314b3o94bo2bo$225bo5bobob2o13b2o3bo311bobobo87b2o3b2o4b2o$232bobo2b
4o7b2o3bobo311bobobo85b2o2bo3b3o3b2o$239b2o6bobo5bo291b2o19b3o86bo2b3o
2bob2ob2o$130bo105b3o7bo4b3o291bo3bo19bo87bo4bo4b4o$129b3o101b2o2b2o6b
o6bo290bo5bo108b5o$128bo2b2o102bobo8bo296bobob2o111b2o$127b2o106b3o9b
4o291bo4bo$126b2ob3o130bo279bo4bo$126b2o2bo129bobo279bo4bo$129b3o129b
2o281b3o$127b2o$127b2o113b2o308b2o114b2o$242b2o284bo23b2o114b2o$528bob
o$135bo392b2o$133bobo$134b2o482b2o$617bobo$619bo$655bo$352b2o88b2o211b
obo$181b2o169b2o88b2o211b2o$181bobo$181bo$134b2o98b2o324b2o98b2o$134b
2o98b2o324b2o98b2o7$216bobo$216b2o$217bo3$582bobo$583b2o$583bo$434bo2b
2o$438b2o$126b2o114b2o193b2o113b2o114b2o$126b2o114b2o308b2o114b2o$433b
2o2b2o$359b3o77bo118b2o$359bobo71b4o120bobo$358bo2bo73bo2bo120bo$358b
3o$358b3o$241b2o116bo2bo$241bobo115bo$241bo120bo2$350b2o8bo$134b2o98b
2o114b2o9bo72b2o9b3o112b2o98b2o$134b2o98b2o124b2o72b2o124b2o98b2o$445b
3o$445b2o3$349bo$348bobo$348bob2o$351bo$348bobo$349bo7$126b2o114b2o
108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o54b2o52b2o114b2o$497bob
o$499bo3$301b2o$66bo234bobo$64b2o235bo$65b2o3$734bo$134b2o98b2o124b2o
72b2o124b2o98b2o73b2o$134b2o98b2o124b2o72b2o124b2o98b2o72b2o17$126b2o
114b2o108b2o88b2o108b2o114b2o$126b2o67bo46b2o108b2o88b2o108b2o114b2o$
193bobo$194b2o3$595bo$595bobo$595b2o5$134b2o98b2o124b2o72b2o124b2o98b
2o$134b2o98b2o124b2o72b2o124b2o98b2o5$156bobo$156b2o$157bo2$412bo$410b
obo229bobo$411b2o230b2o$643bo2$378bo$378bobo$378b2o$126b2o114b2o108b2o
88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o12$134b2o98b2o
124b2o72b2o124b2o98b2o$134b2o98b2o124b2o72b2o124b2o98b2o17$126b2o114b
2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o67b2o$
736bobo$738bo3$62b2o$62bobo$62bo22$677b2o$126b2o114b2o108b2o88b2o224b
2o6bobo$126b2o114b2o108b2o88b2o109bobo112b2o8bo$550b2o2bo4bo$550bobo6b
2o$122b2o119b2o304b2obo2bo4b2o$122bobo117bo2bo2bo300b2o9b2o$122bo119bo
b4ob2o300b2obob5o$237b3o3bo2b2o2bo305bo2bo$236bo2bo9b2o305bo2bo$225bo
9b2obo329bo96bobo$225bo3b3obo18b2o289b2o22bo2bo94bob2o$225bo7bob4o13b
2o314b3o93b2o2b2o$234b2o3bo10bo2bo293bo20b3o88b3o7b2o$235bo2bo10bo2bo
285bo120bo8b2o$235bo2bo9bo4bo284bo4bo3b2o110bobo6bo$235b3o9b2o3bo286bo
bo5bobo110b2o$130bo117b2o291bobo4b2o$129b3o117bo11bo280b2o4b2o117bo$
128bo2b2o126bobo281bo2b3o119bo$127b4obo127b2o284b3o118bo$127bo4bo$128b
2o2bo$129b2o111b2o285bo22b2o114b2o$242b2o285bobo20b2o114b2o$134bo394b
2o$132bobo$133b2o2$617b2o$616bobo37bo$618bo37bobo$352b2o88b2o212b2o$
352b2o88b2o$182b2o$182bobo$134b2o46bo51b2o324b2o98b2o$134b2o98b2o324b
2o98b2o6$217bobo$217b2o$218bo3$581bobo$582b2o$582bo$435b2o$434b3o$434b
o2bo$126b2o114b2o190b2ob2o113b2o114b2o$126b2o114b2o190b2ob2o113b2o114b
2o$433b2ob2o$434bo$435b3o119b2o$359b3o74bo119bobo$359bo2bo195bo$358bo$
361b2o$242b2o113bo3b2o$242bobo112bo$242bo116bo$350b2o7b3o82b2o$134b2o
98b2o114b2o8b2o72b2o8b2o114b2o98b2o$134b2o98b2o125bo72b2o124b2o98b2o$
446bo$445bobo$444bo$445bo3bo$349bo95bo4bo$349bobo99bo$349b2o$349bo96bo
$348b2o99bo$348b2o7$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o
108b2o88b2o108b2o114b2o$497b2o$496bobo$498bo2$67bo$65b2o235b2o$66b2o
234bobo$302bo2$733bo$734b2o$134b2o98b2o124b2o72b2o124b2o98b2o71b2o$
134b2o98b2o124b2o72b2o124b2o98b2o17$126b2o66bo47b2o108b2o88b2o108b2o
114b2o$126b2o64bobo47b2o108b2o88b2o108b2o114b2o$193b2o3$596bo$596bobo$
596b2o6$134b2o98b2o124b2o72b2o124b2o98b2o$134b2o98b2o124b2o72b2o124b2o
98b2o4$157bobo$157b2o$158bo2$411bo$409bobo229bobo$410b2o230b2o$642bo2$
379bo$379bobo$379b2o2$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o
108b2o88b2o108b2o114b2o12$134b2o98b2o124b2o72b2o124b2o98b2o$134b2o98b
2o124b2o72b2o124b2o98b2o17$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o
114b2o108b2o88b2o108b2o114b2o$736b2o$735bobo$737bo3$63b2o$63bobo$63bo
22$126b2o114b2o108b2o88b2o109b3o112b2o6b2o$126b2o114b2o108b2o88b2o107b
5o112b2o5bobo$557b3o117bo$550bo7b2o$550bo3b2o3bo$123b2o118b3o305bo2b2o
bob2o$123bobo117b3o2bo303b6o$123bo119bob3obo303bo3bo2bo$236b3o8bobo
309bo10bo$231b2o5bo11bo312bo4bo2bo93bo$225b2o3b4obo14b2o310bo6bobo93b
2o$224b2o4bob2o4bo10bo2bo291b2o23b2o93b4o$224b2o12bo10bo2bo290bo2bo15b
3o96b3o3b2o$225b3o10bo10bo3bo284b3ob2ob3o113bo5bo$226b3o3bo2bo2bo10bo
2bo285b2o3bo2b3o112bo$230b2o4b2o10b2obo288b2obob2o2bo112bo4bo$248b2o
10bo281b12o110bo2b2o$258bobo285bo5bo112bob2o$130bo128b2o286b2o117b2o$
129b3o416bo2bo$128bo2b2o416bo$128bo401bo$129bo112b2o286bobo19b2o114b2o
$133bo108b2o286b2o20b2o114b2o$131bobo$132b2o3$657bo$616b2o39bobo$615bo
bo39b2o$352b2o88b2o173bo$352b2o88b2o2$183b2o$134b2o47bobo48b2o324b2o
98b2o$134b2o47bo50b2o324b2o98b2o5$218bobo$218b2o$219bo3$580bobo$581b2o
$581bo4$434b3o$126b2o114b2o189bo3bo114b2o114b2o$126b2o114b2o194bo113b
2o114b2o2$433b2o3bo$435b3o$556b2o$555bobo$359b3o195bo$359bo2bo$358bo3b
o$243b2o113bobob2o$243bobo113b2ob2o$243bo106b2o8b3o81b2o$134b2o98b2o
114b2o82b2o8b2o114b2o98b2o$134b2o98b2o198b2o124b2o98b2o6b3o$670bo$669b
o$446bo$350bo94b3o$130b3o217bobo91b2ob2o$130bo219b2o91bo$131bo310bo4bo
b2o$442bo4bobo$348b2o93bo4bo$348b2o7$126b2o114b2o108b2o88b2o108b2o114b
2o$126b2o114b2o108b2o88b2o108b2o114b2o2$496b2o$495bobo$497bo3$303b2o$
303bobo$303bo2$608b3o$134b2o98b2o124b2o72b2o124b2o48bo49b2o$134b2o98b
2o124b2o72b2o124b2o47bo50b2o3$190b3o$190bo$191bo11$193bo$126b2o63bobo
48b2o108b2o88b2o108b2o114b2o$126b2o64b2o48b2o108b2o88b2o108b2o114b2o3$
597bo$597bobo$597b2o4$548b3o$550bo$549bo$134b2o98b2o124b2o72b2o124b2o
98b2o$134b2o98b2o124b2o72b2o124b2o98b2o$250b3o$250bo$158bobo90bo$158b
2o$159bo2$410bo$408bobo229bobo$409b2o230b2o$641bo2$380bo$380bobo$380b
2o3$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o
114b2o7$488b3o$490bo$489bo3$134b2o98b2o74b3o47b2o72b2o124b2o98b2o$134b
2o98b2o74bo49b2o72b2o124b2o98b2o$311bo16$126b2o114b2o108b2o88b2o108b2o
114b2o$126b2o114b2o108b2o88b2o108b2o114b2o5$428b3o$430bo$429bo3$370b3o
$370bo$371bo18$126b2o114b2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o
88b2o108b2o114b2o3$368b3o$370bo$369bo3$430b3o$430bo$431bo20$126b2o114b
2o108b2o88b2o108b2o114b2o$126b2o114b2o108b2o88b2o108b2o114b2o$308b3o$
310bo$309bo3$490b3o$490bo$491bo22$126b2o114b2o4b3o101b2o88b2o108b2o
114b2o$126b2o114b2o6bo101b2o88b2o108b2o114b2o$249bo3$550b3o$550bo$551b
o22$188b3o$190bo$132b2o55bo52b2o108b2o88b2o108b2o$132bobo107b2o108b2o
88b2o108b2o$131bo2bo531bo$124b2o4b2o2b2o474b3o52b2o$124b2o4b2obo476bo
52b2obo$611bo58bo$135bo526bo2bo4b2o$135bo527b2obobo2b2o$662bobo2b2o$
131bo530bo2bo$662bo$133b2o528bobo$134bo529bo$133b3o$122b2o548b2o$122b
2o548b2o7$126b2o540b2o$126b2o540b2o4$128b3o$130bo$129bo2$242b2o108b2o
88b2o108b2o$242b2o108b2o88b2o108b2o116b3o$670bo$671bo$134b2o524b2o$
134b2o524b2o44bo$707bo$705b3o3$84bo$83bo$83b3o10$126b2o540b2o$80bo45b
2o540b2o$79b2o$79bobo3$710bo$710b2o$625bo83bobo$242b2o108b2o88b2o108b
2o69b2o$242b2o108b2o88b2o108b2o70b2o3$134b2o39bo484b2o$134b2o40b2o482b
2o$175b2o9$239bo$238b3o$237bo2b2o$237bob2o$239b2ob2o$236bo5bo316b3o$
140bo96bo4bo315bo$126b2o11b2o97bo2bo316bo2bo106b2o$126b2o11bobo98bo
318b2o107b2o$235bo323b2o$234bo323bo2bo$234b3o324bo88bo$558b2o90b2o$
649bobo3$352b2o88b2o$352b2o88b2o2$550b2o$134b2o98b2o314b2o8b2o98b2o$
134b2o98b2o324b2o98b2o2$549bo$548b3o$547bo3bo$546bo$545b2ob2o3bo$548b
2o$545bo6b2o$546b2o5$200bo$199b2o$199bobo$126b2o114b2o308b2o114b2o$
126b2o114b2o308b2o114b2o$590bo$590b2o$589bobo4$443bo$443b2o$442bobo$
442bobobo$442b2ob2obo$134b2o98b2o121b2o90bo110b2o98b2o$134b2o98b2o114b
o5bo2bo87b2o111b2o98b2o$357b3obo72bo$349bobo5bo3bo72bo$350bo10bo72bo6$
348b2o96b2o$348b2o96b2o2$260bo$259b2o$259bobo3$126b2o114b2o108b2o88b2o
86bo21b2o114b2o$126b2o114b2o108b2o88b2o86b2o20b2o114b2o$496bobo30bobo$
496b2o$497bo2$472bo92bo$302bobo165bobo90b2o$303b2o166b2o91b2o$232bo70b
o$231bo2bo$234b2o82bo$232bo3bo81bobo$134b2o96bo2bo82b2o40b2o72b2o124b
2o98b2o$134b2o97b2o125b2o72b2o124b2o98b2o12$615bo$616bo$614b3o3$126b2o
47bo66b2o108b2o52bobo33b2o108b2o114b2o$126b2o46bo67b2o108b2o52b2o34b2o
108b2o114b2o$174b3o230bo3$392bobo$393b2o$393bo6$134b2o224b2o72b2o224b
2o$134b2o224b2o72b2o224b2o17$126b2o114b2o108b2o88b2o108b2o114b2o$126b
2o114b2o108b2o88b2o108b2o114b2o12$134b2o224b2o72b2o224b2o$134b2o224b2o
72b2o224b2o!

It turned out that a 0B+21F collision can make interchanges at column 16 (mod 31), which means that only two rephasers need to be added between the rakes to get the required column 9 (mod 31) position. There may still be a better B+F rake pairing, but I wouldn't bet on it.

The really lucky thing was that the interchange showed up in exactly the right row -- at least I don't think that the math made that inevitable... In general it can take up to 30 rephasers to align a slow-salvo rake with the leading side-puffer that makes the initial target, and there aren't really any shortcuts if you get an unlucky placement.

oblique wrote:Another problem with this notion is that I probably would have to make different adjustments for forward and backward rakes (an reaction that moves the construction site diagonally NE would not alter the state for the backrakes but it would alter the state fwd rakes).

My feeling is that slow salvos using both forward and backward rakes is too big a can of worms to open for the moment. All-forward and all-backward slow salvos are actually going to be significantly more efficient on average, because the rakes can be packed tighter together. When you have a backward glider stream, then a forward stream, then another backward stream, you have to build in a lot of vertical space to make sure the streams don't cross. Or if they do cross, that changes the collision order -- but whether they cross is dependent on how far away the target is. To me, at least, this all looks like a big unnecessary headache right now.

The really interesting generalization, if and when we ever get around to it, will be to hit targets with all possible simultaneous pairs and/or singletons of forward and backward gliders -- i.e., everything that can be made by appropriately spaced forerake-backrake pairs, at a reasonable distance from the block trails. The branching factor of this tree makes the current slow-salvo search tree look tame by comparison, but by the same token, it should be possible to construct seeds with a much lower total cost.

EDIT: Very likely a few four-rake combinations will happen to produce clean glider outputs on new lanes, which would count as fairly competitive new rakes. It will be tricky to find very many of these without some kind of search program, though...!
Attachments
back-end-21F0B+2Reven.zip
Complete termination for 116:110:90 block trails
(34.18 KiB) Downloaded 190 times
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » April 15th, 2014, 12:42 am

dvgrn wrote:Okay, so then state = 1 is the next lane, which will also hit the current target -- but state = -1 (or state = 30) would presumably miss it?

Not quite. State = -1 would rather be 30. And above some 10 by 12 a glider on lane 30 would easily hit the target.
But you should not mix lane and state. The state indicates the lane a L0B would use , yes. But you could reach any other lane from a given state - you just have to add rephasers and/or use a differnt rake.

dvgrn wrote:It should be easy to translate my current investigations into those terms. I'm working toward a simple parametrization of the possible locations of any constructed object, relative to the block trails, using collisions between gliders on backward lane B and forward lane F.

I'd like to see them, when you're ready.

dvgrn wrote:There are definitely initial targets that are more expensive and less expensive, depending on the exact location. But with twelve different fore+back rake combinations (even assuming nobody comes up with more variants) there will be relatively few targets that need more than (say) two dozen rephasers total to construct, and also relatively few that need less than half a dozen.

Two dozen is about as deep as my search will ever reach ...

dvgrn wrote:It turned out that a 0B+21F collision can make interchanges at column 16 (mod 31), which means that only two rephasers need to be added between the rakes to get the required column 9 (mod 31) position. There may still be a better B+F rake pairing, but I wouldn't bet on it.

The really lucky thing was that the interchange showed up in exactly the right row -- at least I don't think that the math made that inevitable... In general it can take up to 30 rephasers to align a slow-salvo rake with the leading side-puffer that makes the initial target, and there aren't really any shortcuts if you get an unlucky placement.

My feeling is that slow salvos using both forward and backward rakes is too big a can of worms to open for the moment. All-forward and all-backward slow salvos are actually going to be significantly more efficient on average, because the rakes can be packed tighter together. When you have a backward glider stream, then a forward stream, then another backward stream, you have to build in a lot of vertical space to make sure the streams don't cross. Or if they do cross, that changes the collision order -- but whether they cross is dependent on how far away the target is. To me, at least, this all looks like a big unnecessary headache right now.

That was my impression too.

dvgrn wrote:The really interesting generalization, if and when we ever get around to it, will be to hit targets with all possible simultaneous pairs and/or singletons of forward and backward gliders -- i.e., everything that can be made by appropriately spaced forerake-backrake pairs, at a reasonable distance from the block trails. The branching factor of this tree makes the current slow-salvo search tree look tame by comparison, but by the same token, it should be possible to construct seeds with a much lower total cost.

This search space will explode very quickly, I bet. And each pair will need plenty of space, as you mentioned above.

EDIT: on the other hand ... the original caterpillar salvos for LWSS and MWSS are build by just two pairs of back+fwd rake gliders - even if theese are not "edgy" enough, it is very promising.
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 17th, 2014, 1:42 pm

oblique wrote:
dvgrn wrote:It should be easy to translate my current investigations into those terms. I'm working toward a simple parametrization of the possible locations of any constructed object, relative to the block trails, using collisions between gliders on backward lane B and forward lane F.

I'd like to see them, when you're ready.

Here's a first draft, anyway:

Suppose you want to build interchanges. You can build them with any backward rake combined with any forward rake, but the location will vary. Adding two rows of blocks between your chosen rakes, with no other changes, will move the construction location away from the block trails by 31 cells.

Adding just one row of blocks actually changes the relative colors of the two colliding gliders, so you'd get biblocks instead of interchanges.

You can also add any number of rephasers between the two rakes. Each rephaser reduces the distance between the two rakes by 9 (mod 31) -- so for each pair of rephasers you add, you can subtract 9 (mod 31) from the construction location. Think of the construction location as the number of blank columns between the rightmost block trail and the left edge of the constructed object.

Blank columns before interchange with 2N rephasers between rakes --
all values are modulo 31:

       Backward lane 0   Backward lane 7  Backward lane 19  Backward lane 26
       
Forward    11                10               27                15
lane 0

Forward     8                 7               24                12
lane 6

Forward    16                15                1                20
lane 21


Blank columns before interchange with 2N+1 rephasers between rakes --
add 11 to previous table:

Forward    22               21                7                26
lane 0

Forward    19               18                4                23
lane 6

Forward    27               26                12                0
lane 21
       Backward lane 0  Backward lane 7  Backward lane 19  Backward lane 26

There are some obvious patterns; for example, replacing a lane-M forward rake with a lane-N forward rake seems to reduce the number of blank columns by (N-M)/2... but if (N-M) is odd, you have to add 31/2 [and a rephaser] to get back to an integer again, or you'll get biblocks instead of interchanges.

If you want to build something besides interchanges, just build the 0B+0F version and measure the number of blank columns. The number in the upper left corner might be 12 or 13 or 10 or whatever, instead of 11, and all the other values in the tables will change by the same amount.

So I guess we could say that the delta value for interchanges is zero. Anyone feel like compiling the deltas for all the other List 1 and List 2 initial targets?

oblique wrote:Two dozen is about as deep as my search will ever reach ...

Well, unless you try a run with a highly constrained search space, anyway.
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » April 17th, 2014, 5:32 pm

dvgrn wrote:
oblique wrote:
dvgrn wrote:It should be easy to translate my current investigations into those terms. I'm working toward a simple parametrization of the possible locations of any constructed object, relative to the block trails, using collisions between gliders on backward lane B and forward lane F.

I'd like to see them, when you're ready.

Here's a first draft, anyway:

Suppose you want to build interchanges. You can build them with any backward rake combined with any forward rake, but the location will vary. Adding two rows of blocks between your chosen rakes, with no other changes, will move the construction location away from the block trails by 31 cells.

Adding just one row of blocks actually changes the relative colors of the two colliding gliders, so you'd get biblocks instead of interchanges.

You can also add any number of rephasers between the two rakes. Each rephaser reduces the distance between the two rakes by 9 (mod 31) -- so for each pair of rephasers you add, you can subtract 9 (mod 31) from the construction location. Think of the construction location as the number of blank columns between the rightmost block trail and the left edge of the constructed object.

Blank columns before interchange with 2N rephasers between rakes --
all values are modulo 31:

       Backward lane 0   Backward lane 7  Backward lane 19  Backward lane 26
       
Forward    11                10               27                15
lane 0

Forward     8                 7               24                12
lane 6

Forward    16                15                1                20
lane 21


Blank columns before interchange with 2N+1 rephasers between rakes --
add 11 to previous table:

Forward    22               21                7                26
lane 0

Forward    19               18                4                23
lane 6

Forward    27               26                12                0
lane 21
       Backward lane 0  Backward lane 7  Backward lane 19  Backward lane 26

There are some obvious patterns; for example, replacing a lane-M forward rake with a lane-N forward rake seems to reduce the number of blank columns by (N-M)/2... but if (N-M) is odd, you have to add 31/2 [and a rephaser] to get back to an integer again, or you'll get biblocks instead of interchanges.

If you want to build something besides interchanges, just build the 0B+0F version and measure the number of blank columns. The number in the upper left corner might be 12 or 13 or 10 or whatever, instead of 11, and all the other values in the tables will change by the same amount.

So I guess we could say that the delta value for interchanges is zero. Anyone feel like compiling the deltas for all the other List 1 and List 2 initial targets?

You mean: anything (from your lists) can be build fairly efficiently in about any location?
I have to look at this more deeply.

dvgrn wrote:
oblique wrote:Two dozen is about as deep as my search will ever reach ...

Well, unless you try a run with a highly constrained search space, anyway.

Well: I have somehow finished the code for using differnt rakes - mostly at least.
My current run with R1L0B, R2L7B and friends is somewhere in the COST=15 (allready some 80 million collisions and around 1600 or 1700 *WSS seeds ...)

The recipe generator does not quite work out for the new database structure (some offset when placing the initial target, some errors in the calculation if a rake should be delayed or not ... so maybe I have an error in my reactions and will have to rerun this ... but it looks quite nice.

Once me bugs have gone where they belong, and this search has been run to some level like 18 I think I'll try allowing only smaller patterns ... 10 by 15 or so.
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 17th, 2014, 10:37 pm

oblique wrote:You mean: anything (from your lists) can be build fairly efficiently in about any location?
I have to look at this more deeply.

Fairly efficiently, yes, for placing any List 1 or List 2 object in any chosen column (sufficiently far away from the block trails).

But there's still an increased cost for some columns over others. I'll run through a quick example:

The 0R+0F pairing puts interchanges on column 73+31N -- add two rows of blocks between the rakes for every 31 columns you want to add. 73+31N is 11 (mod 31). To get an interchange on a different column, we just look up the mod-31 value of the target column in this list:

0, 22, 13, 4, 26, 17, 8, 30, 21, 12, 3, 25, 16, 7, 29, 20, 11, 2, 24, 15, 6, 28, 19, 10, 1, 23, 14, 5, 27, 18, 9, 0...

For example, to get interchanges at 188 blank columns to the right of the block trails, just calculate 188 mod 31 = 2. 2 is next in the list after 11, which is where we're starting if we're using 0R+0F rakes. So we just have to add two rephasers between the rakes to get to 2 (mod 31). To get interchanges at 210 blank columns, we'd add four rephasers (210 mod 31 = 24), and so on.

Of course, the table says we could get 24+31N blank columns by using a 19B backrake combined with a 6F forward rake instead -- no need for any rephasers at all. So the cost table ends up looking more like this:

Total R (rephasers and rakes) for side-puffer interchange construction:
            2     3     4     5     6     7     8     9    10
-------------------------------------------------------------
(0B0F)      11          2
(19B6F)                       24
(26B0F, also 19B21F)    15          6          28
(0B+6F+1R)              19
(7B0F)            10
(19B21F)                                  1
(26B6F+1R)                          23         14          5
(19B0F, also 0B21F+1R)  27
(7B6F+1R)                     18          9
(26B21F+1R)                                    0
(0B0F+1R)         22          13
(19B6F+1R)                          4
(26B0F+1R, also 7B21F+1R)     26         17
(0B6F)            8           30
(7B0F+1R)               21
(26B6F)                       12*        3           25
(0B21F)                       16
(7B6F, also 19B0F+1R)   7           29
(26B21F)                                 20

*12 (mod 31) can also be done with 19B21F+1R, but that's 2R more expensive...

Forerake and backrake costs:
1R: 0F, 0B
2R: 6F, 7B
3R: 19B, 26B
4R: 21F
5R: ??

So nothing costs more than 10 rephasers to build, and 9 and 10 rephasers are only needed for 25+31N and 5+31N blank columns, respectively.

Let me know if the table isn't legible, or if any mistakes show up. It's more organized than it looks -- I've kept all the column values in the same order as the full list above. If anyone wants to try building a few of the side puffers according to these specs, and see if it produces the predicted number of blank columns, I'd be most grateful...!
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 18th, 2014, 2:02 pm

dvgrn wrote:
oblique wrote:You mean: anything (from your lists) can be build fairly efficiently in about any location?
I have to look at this more deeply.

Fairly efficiently, yes, for placing any List 1 or List 2 object in any chosen column (sufficiently far away from the block trails).

One more thing that I didn't mention at all in my last message: the cost calculation so far only applies to getting an interchange or other object onto a particular column. From there, to get the object onto the right row, or lane, or "state", it will be necessary to add some number of rephasers to put the block trails into the correct relative phase to be able to start a particular slow-salvo recipe.

If you're really unlucky, you'll have to add 30 rephasers; the best case is not having to add any, as in the spaceship back end that I posted a few days ago. So the side puffer itself will only need ten rephasers at most, but post-construction rephasing might need three times that many.

It definitely seems to be worthwhile to start slow-salvo searches from the cheap end of the rephasing spectrum! I'm not familiar enough yet with how starting targets are defined in the sscs config file (or rather, start-targets.pat or equivalent) to be able to explain clearly where a cheapest-possible search should start with a given target object. It depends on which rakes and rephasers were used in the side-puffer, of course.

More specifically, I suppose it depends on which backrake was used, and on the total R-value for the whole assembly. You could substitute any forward rake that works to produce the target object, and if the same total number of rephasers and rakes is used, the target should still end up in the same state (right?)

One last clarification: in the table in the previous post, I started a new line whenever there was a cheaper way to build a side-puffer to reach a given column. But there are lots of other ways to get the same result: instead of starting a new line, you can put the next column-mod-31 value on the same line at a cost of +2R. In many cases this alternate construction may not need as much rephasing, so the overall length may be shorter than the "optimal" side-puffer.

Here's a version of the table to show this wider range of options. Again, I haven't handled the rephasing question at all yet. But any interchange side-puffer on this table takes no more than a dozen rephasers, so presumably it would be a good place to start a slow-salvo search. It should be possible to figure out locations and costs for all the other possible targets by adding some delta value to every number in this table:

Total rephasers and rakes for side-puffer interchange construction:
       R =    2    3   4    5    6    7    8    9    10   11   12
------------------------------------------------------------------
(0B0F)        11       2         24        15        6         28
(19B6F)                     24        15        6         28
(26B0F, also 19B21F)   15        6         28        19        10
(0B+6F+1R)             19        10        1         23        14         
(7B0F, or 19B21F)  10       1         23        14        5 
(26B6F+1R)                       23        14        5         27
(19B0F, also 0B21F+1R) 27        18        9         0         22
(7B6F+1R)                   18        9         0         22
(26B21F+1R)                                0         22        13
(0B0F+1R)          22       13        4         26        17
(19B6F+1R)                       4         26        17        8
(26B0F+1R, also 7B21F+1R)   26        17        8         30       
(0B6F)             8        30        21        12        3
(7B0F+1R)              21        12        3         25        16
(26B6F)                     12        3         25        16
(0B21F)                     16        29        20        11
(7B6F, also 19B0F+1R)  7         29        20        11        2
(26B21F)                              20        11        2

When I next have some free time, I'll start working on delta values for all standard targets -- unless someone else beats me to it, of course. And again, the above table almost certainly has a few errors in it somewhere; please think of it as a work in progress, and send me bug reports.
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » April 30th, 2014, 12:32 am

Here are some current results of my search (using all known backrakes).

The search space about doubles for each new "level".

It's currently about to finish level 16, which has been running for about half a week.

By now it has try some 200 000 000 collisions ...

My recipe generator still is not bug-free. Sometimes it get's the delay between two rakes wrong, hitting the next target in the wrong phase of that pattern.

Attached are all seeds of COST <= 16 and one (working) recipe with COST = 16

sample.zip
(82.72 KiB) Downloaded 187 times


144832073.pat.gz
(49.96 KiB) Downloaded 182 times
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 30th, 2014, 10:22 am

oblique wrote:Here are some current results of my search (using all known backrakes).

Great! Yesterday I worked a little bit on getting a good 31c/240 front-end candidate sorted out, so an actual spaceship could be bolted together once the good recipes showed up. Looks like some good recipes are showing up, so now I'm officially late with my part of the work.

I like this seed a lot, actually --

x = 7, y = 21, rule = B3/S23
4b2o$4b2o14$o$b2o$2o3$4b3o!

-- because you don't even have to build it with a slow salvo. Might be just as cheap to build the block and blinker with separate forerake/backrake pairs. The next question is how many gliders it takes to clean up the leftover mess... though really what we'll want to do is shove the junk around to make the next block and blinker.

oblique wrote:Attached are all seeds of COST <= 16 and one (working) recipe with COST = 16

I take it you mean that this is a sample of a working recipe, not that it's the only working one with COST = 16? Very few of the seeds in the north group seem to be transparent to the upship stream, but I'm finding a few here and there. Do you have code to check if the intermediate targets interfere with the *WSSes? (I think I asked this already, but missed seeing the answer if there was one.)
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Prototype / demo for a (weighted) collision search program

Postby oblique » April 30th, 2014, 3:01 pm

dvgrn wrote:I like this seed a lot, actually --
x = 7, y = 21, rule = B3/S23
4b2o$4b2o14$o$b2o$2o3$4b3o!

-- because you don't even have to build it with a slow salvo. Might be just as cheap to build the block and blinker with separate forerake/backrake pairs. The next question is how many gliders it takes to clean up the leftover mess... though really what we'll want to do is shove the junk around to make the next block and blinker.

This seed is pretty cool, yes. But it does leave plenty of mess ... and partly in the very lane of the resulting ship ...

dvgrn wrote:
oblique wrote:Attached are all seeds of COST <= 16 and one (working) recipe with COST = 16

I take it you mean that this is a sample of a working recipe, not that it's the only working one with COST = 16? Very few of the seeds in the north group seem to be transparent to the upship stream, but I'm finding a few here and there. Do you have code to check if the intermediate targets interfere with the *WSSes? (I think I asked this already, but missed seeing the answer if there was one.)

That's just ONE example, yes. The point is, that it's one of the few patterns I had tried which actually worked, because the intermediate steps happened to not interfere with each other and my recipe generator guessed the correct "DELAYS".

BTW: delays.

Good news: I found and fixed the errors in the recipe generator.

Bad news: one of the errors was in the search itself - thus I had to discard everything and restart over.

As for checking for interference: currently the only way is to use the recipe generator - at least I seem to have finished it ... alas you'll need the database for this (a few GIgs for COST 16), and I don't have the upstream bandwith to put it anywhere.

Edit: Current ETA for finishing the re-run: sometime next week.
oblique
 
Posts: 122
Joined: July 16th, 2013, 1:30 pm

Re: Prototype / demo for a (weighted) collision search program

Postby dvgrn » April 30th, 2014, 3:44 pm

oblique wrote:This seed is pretty cool, yes. But it does leave plenty of mess ... and partly in the very lane of the resulting ship ...

It's not in the upship lane, it's safely behind it -- won't get in the way at all. We'll just have to see how many gliders it takes to whittle the junk down to a couple of blocks (or a new block-and-blinker). Really this should be done with a search also, but I can approximate for now.

EDIT: Cleanup doesn't look too bad, really -- three gliders will get you down to a couple of nicely-spaced blocks:

x = 53, y = 81, rule = LifeHistory
.A$2.A$3A12$.A$2.A$3A16$.A$2.A$3A25$51.2A$51.2A14$48.A$49.A$47.3A2$
52.A$52.A$52.A!

Or four gliders would clean it up completely, of course, but I'd like to leave the blocks to build the next upship stream with, maybe.

oblique wrote:Edit: Current ETA for finishing the re-run: sometime next week.

Sounds good. Maybe I can sort out a reasonable front end by then. Anyone else want to contribute a candidate?
User avatar
dvgrn
Moderator
 
Posts: 5820
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

PreviousNext

Return to Scripts

Who is online

Users browsing this forum: No registered users and 1 guest