title: Peel away the layers - Cops

text:
# Question
Title: Peel away the layers - Cops
In this challenge, robbers must crack cop answers by finding out which languages the cops used.

This is the **Cops** thread. For the Robbers' challenge, see here

Cops, you are to write a program, which, when executed in a specific language, does one of the following:

1. Outputs one of the 5 phrases below
2. Outputs a piece of code, which when executed in a specific language (not necessarily the same language as the first program), does either point 1. or point 2. This may be either a function or a full program, and should output in a reasonable method

That is, the first program should output the code for the second, which outputs for the third, and so on, until the final program outputs one of the below phrases. If any of the codes uses non-ASCII characters, you should output the *bytes* that represent the program, not the characters.

None of the programs may be longer than \\$65535\\$ bytes long, to keep it somewhat sane.

**You may repeat languages**, but the languages you choose should all meet all of the following criteria:

The phrases you may choose from are:

* `Game Over!`
* `Greetings!`
* `Code Golf.`
* `It's Done.`
* `The Last 1`

Despite being a possible interpretation of the initial task, you may *not* write a program which simply outputs one of these phrases, to avoid the challenge being to similar to an existing challenge. Your submission must use a **minimum of 2 languages**

In your answer, you should reveal the following information:

* The number of layers your submission has (note "layers", not "languages")
* The initial code that will output all following layers (but *not* the language this code was written in)
* The final outputted phrase

The robbers will be attempting to guess the languages you've used for each layer. Each robber must crack your entire submission for it to be a valid crack.

Note that a crack is valid *even if the languages are different*. So long as the robber's languages, in the order they state them, produce the specified final phrase, the crack is valid, even if the languages are not the same as yours.

If your answer has not been cracked within 14 days, you can claim it as safe. You should reveal the languages used and the codes in said languages. Note that your answer is not safe until you've revealed the languages and code and robbers can still crack your answer until then. The submission which is safe and uses the **least amount of distinct languages** wins!

## Formatting

Cops, please format your original answer as so:

```
# <N> layers

    <code>

<Final output>

---

```

And, when cracked, please edit in the following format (underneath the `---`):

```
Languages used (in order):

- [<language 1>](<link to interpreter>), outputted <output>
- [<language 2>](<link to interpreter>), outputted <output>
...
- [<language N>](<link to interpreter>), outputted <final phrase>

---

<anything else>

```

and you should edit your header to read

```
# <N> layers, cracked by [<robber>](<link to robber's post>)

```

If your answer is safe, edit this into the title, along with the complete list of intended languages. **Your answer can still be cracked until you do**.

Good luck!

# Answer
> 10 votes
# 2 layers, safe!

```
"D0Up0IZUnnnnnnnnnnnnnnnnnnnUU5nnnnnn3SUUnUUUwCiudIbEAt33wwWt0GD3wwpDDGDDDGpDDwGGtpDt33333sw03333sDDfBDKgGQskWwQ" "1 gfnY ruG" '" +\

```

Output: `The Last 1`

This one will hopefully stand for a bit longer.

Hint: Both languages are available on TIO. That's only \\$681^2\\$ possibilities to try!

---

Solution:

> Foo followed by Bubblegum.
> The idea here is that the Bubblegum string is printable ASCII but also a valid DEFLATE stream. The solution was zipped with ascii-zip, which was originally designed to exploit the Rosetta Flash vulnerability but has also found esoteric use in CTFs, such as PlaidCTF 2019 Potent Quotables. The first layer is also valid CJam, but this is a red herring. The `1 gfnY ruG` is also designed to mislead; in fact everything after the last `1` can be discarded.
> Note that Bubblegum meets Code Golf's definition of 'programming language', but only on a technicality.

# Answer
> 29 votes
# 840,527,321,220,386 layers, safe

```
D'`Aq9\n[;|FyDUv4tc+OMLKJJHZG4~ffT@RQ>v{)LxZponm3qSongled*bJ`_^$bD`_XW{[Z<RWVUNr54JONMFKDhH*)E>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bDZ_^]VUyYRWPOsS5KPIm0/EDhH*)?>b%A@9]=6;492V6543210/('K+$)"Fg%${z@xwv{t:xZputm3TSohmlkd*bJ`_^$baZ~XW\UTx;QVONMqQ3IHGLEihBG@?cC%;@?>7[;:9870v.3,P*p.-&J$j"!E}eBz!x}vu;yxwpun4rqji/gfedcb(`H^]\"!_X]V[ZYXQuONMLKPOHlLEJCBf@(>b%;:^>=}|Y9876/SR,1*/.'K%*#"!Efe#z@~}v{zyr8vuWsl2ponmlkdcb(`H^]\"!_X]V[ZYXQuONMLKPOHlFKDhHAF?cC%$@9>7[54927654-Q1q/('K+$#Gh~%${z!x>|utsxq7uWmrk10nmledihg`&Gcb[`_^W{[ZYXW9OTSLKPImlFKDCgGFE>=B;_?>=6;:981U54321q)M-,%$#G'&}eB"!x}v{zyr8pun4Ukj0hmlkdcba'Hdcb[`_^W{[Z<;QPUNMLKo21GLEi,+GFE>=aA#9>7[;:9870v.3,P*)(-&J$j"!E}eBz!x}vu;yxZpo5VUkpoh.ledchg`_^$bDCYX]VzyS;WPOsSLKPOHGk.JCHGF?>b%A@9]=6;492V6543210/('K+$)"F&}|{Abaw|{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y9876/.R,10/('K%*#G'&}eB"y~w=^zyrwp6tVUkpoh.ledchg`_^$baC_^WVzZYRWVUNrRQP2HGFjJIBfF?DCB;_?>=6;4X2765.R21qp.-&J$j"!E}eB"!x}v{zyr87unmlqj0QPfkjchg`&Gcb[`_^W{[=<XWPOsS54JOHlFKJIBA@E>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNr54JONMFKDhH*)E>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`Y^WVUySXQPUNMq4JONMFjDIHGF?>C<`@9]7<543870T4321*/.'K%*#"!E}$#"!x>|{ts9qpon4lTjohmf,Mibg`_^$baC_^WVzZYRWVUNrLQJINGkK-CHGF?cC%;@?>7[;:981w/4-,PO)o'&%I)i'~%|B"yx>v{t:xqYun4rqpohg-ejihg`&Gcb[`_^W{[=<XWPOsrq4JONMFjDIHGF?>C<`@9>=6Z:98705.RQ1*/.'K%*#"!E}$#"!x>=u;yrwpo5mrk1onmfejib(fe^c\"Z_X|?UZYRvPOsSRKJIHl/KDCHAFE>C<`@"8=6Z:9yx0543,P0)o-,%$H('&fe#z@x}v{zsr8Yutmrqj0Qglkd*b(fHdc\"C_^WVzZSXQPOsSRQ3IHGLEiCBA@?cC<;:^>=}|Y9876/.R21*p.-&J$j"!E}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@9>=<5Y98765.-Q1*/.'K%*#"!E%|#"y?}vu;yxZputm3TSohmlkd*Ka`edc\"ZY}@?UZSRvVO7SLQPIm0/EDhH*)?>b<;:?8\6;492V05.3,10/('K+$)"Fg%${z@a}|uzs9wvuWsl2ponmlkdcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJCHA@?cC<;:^>=}|Y9870T4-21*/(L&+$)"!E}eB"y~w=uzsr8vuWsl2ponmlkdcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJCHA@?cC<;:^>=}|Y9876/.R,+Op(-&J*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBfF?DC<`@?>=6Z:9yx0543,Pqp.-&J*j('&}C#cy~}|{zs9wvuWsl2ponmlkdcb(`e^c\"`_X]V[TxRQVONMLp3INMFjD,HGF?DCB;_?>=6;4XW765432+*N.',%I#('~D$#z!~}v<zyxqYun4rqpohg-ejihg`&Gcb[`_^W{[=<XWPOsrq4JONMFjDIHGF?>C<`@9>=6Z:98705.RQ1*/.'K%*#"!E}$#"!x>=u;yrwpo5mrk1onmfejib(fe^c\"Z_X|?UZYRvP8TSRQJONMLEiCBA@?cC<;:^>=}|Y9270/.R21*N('&%I)i'~%|B"yx>|u]s9qYun4lkpi/gfedcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJCHA@?cC<;:^>=}|Y9876/.R,10/('K%*#G'&}eB"!x}v{zyr8pun4Ukjong-eMiha`&dcbaZY}@V[TxXWVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDCYX]VzZSXQVOsS5KPIm0/EDhHAF?c=<`#">76;4X8xw/.R21q/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y9876/.R,+Op(-&J*#i!&}C#"y~w=uzsr8vuWsl2ponmlkdcb(fHdc\"Z_^]V[TxXWVO7SLQPIm0/EDhHAF?c=<`#">76;4X8xw/.R21q/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U/4321*N.'K%*#"!Efe#z@x}|uzsr8vuWsl2ponmlkdcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|{zyr8vo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDZ_^]VUyYRWPOsS5KPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P0)o-,+$H"'~}$#z@x}v{zsr8Yutmrqj0nPfkjc)Jf_%]b[!_XW\UyYRQVONMLp3INGFEiIHG@(>b%;:^>=}|Y9270/.R2+0)('K+*j(!E%|B"yx>v{t:9wvonsl2SRhmlkd*bg`&^Fb[`Y^]VzZSRQVOsSRQ3IHGLEiIHGFED=aA#9>7[;:981w/4-,PON(L,%*#"!E}$#"!x>|{ts98vuWsl2ponmlkdcb(`e^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,P0)o-,%$H('&}|B"baw|{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y9870T4-21*/(L&+$)"!E}eB"y~w=uzsr8vuWsl2ponmlkdcb(`H^]\"Z_XWVzZ<XWPOsSLKPOHGkKJIH*)E>bB;:?>=6Z:98765432+*N.',%I#('~D|#"!~}v<tsr8vuWsl2ponmlkdcb(`e^c\"ZY}@?UZSRvVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0Qmf,dc)gfedcbaZ~^]VUTSwWPUTSLpJOHlFKDCgGFE>=B;_9876;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=6;:981UT4321*N('&J*j(!Efe{"y?}_uzsr8vuWsl2ponmlkdcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJCHA@?cC<;:^>=}|Y9876/.RQ1*N('&J*j(!~D|#"!x>|uzyrwpo5mrk1ongf,diba'eGcba`_X|V[ZSXQuONMLKPOHlLEDIHG@dDCB;@9]7<5492V05.3,10/('K+*)('~D$#"!x>|uzyrwpo5mrk1onmfejib(`edcb[Z~XW\UTx;QVONMqQ3IHGLEihBG@?cC%;@?>7[;:981w543,P0)o-,+$Hi'~%${z!x>|utsxq7uWmrk1Rnmle+cha`&dcbaZY}@VzZSRQVONr5KPIm0/EDhHAF?c=<A:?>7[5:3876/St,10/(L,+*#i!&}C{"!x>|{ts9wvunVrk1onmfe+cKa`_^$baC_^WVzyYXQ9UNSRKoO1GLEi,HGF?DCB;_?>=6;4X2765.R,1*/('&J$j"!E}eB"!x}v{zyr876tslk1Rhmf,jihg`e^$\aZ_^]V[TxwQPUTSRKJnN0/EDhH*)?>b%$:?>7[;:32V0v43210/.'&J*)('~D$#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y9876/.R,+Op(-&J*#i!&}C#cy~}|{zs9wvotsrk1inmlejib(I_dcbaZYX|\[Z<;QVUNMRKoO10FKDhBG@?cC%;@?>7[;:981w543,P0)o-,+$Hi'~%${z!x>|utsxq7utVlkjoh.fNdc)a`edcb[!_XW\UySwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#"y~w=^zyrwp6tVUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#zb~w|{t:xwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`e^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,P0)o-,%$H('&fe#z@x}v{zsr8Yutmrqj0Qglkd*b(fHdc\"C_^WVzZSXQPOsSRQ3IHGLEiI+AF?cCBA@9>7[54927654-Q1q/.-&J$)"!Ef|{z!x>|utsxq7utVlkjoh.fNdc)a`edcb[!_XW\UyYXWPUTSLpJImGLKDCgGFE>=B;_9876;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDCYX]VzZSXQVOsS5KPIm0/EDhHAF?c=<`#">76;4X8xw/.R21q/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y9876/.R,+Op(-&J*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDCYX]VzyS;WPOsSLKPOHGk.DCHAFE>b<;:?8\6;492V05.3,10/('K+*)('~D$#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eBz!x}vu;yxwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|{zyr8vo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDCYX]VzyS;WPOsSLKPOHGk.DCHAFE>b<;:?8\6;492V05.3,10/('K+*)('~D$#"!x>|uzyrwpo5mrk1onmfejib(fe^c\"Z_X|?UZYRvP8NSLQPOHGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9wvon4lTjohmf,Mibg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_9876;4X87w/43,Pqp.',%I#('~Dedz@~}v<]yxwpo5mrk1ongf,dcbaf_%]ba`_XW{[Z<RWVUNrLQJINGkjJIH*)ED=a;@9]=}|Y9270/.RQ+0)('K+*#G'&}eB"!x}v{zyr8vunsl2johmled*Kg`&Gcb[`_^W{[=<XWPOsr54JOHlLEJIHGF?cC%;@?>7[;:981w/4-,PO)o'&%I)i'~%|B"yx>|u]s9qYun4lkpi/gfedcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bDZ_^]VUyYRWPOsS5KPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nPfkjc)Jf_%]b[!_XW\UyYRWVUTMLKoONMLEDhHGFE>=a;@?8\<549870T.-,+*N.nm%$)"Fg%|{z!x>|utsxq7unVrk1ih.fejib(IH^cbaZ~^@VUTSw:PUNMLpoINMFKDhBAF?cC%;@?>7[;:981w/4-,P*p.-&J*)"'~D$#"y~}|u;yxZponm3qSihg-,+cha`&dcbaZY}WVUyS;QVUNrqKPONGkK-IBGF?cC<$:?>7<;4981Uvu-2+Op(-&J*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#c!~wv<zyr8vuWsl2ponmlkdcb(`_%]\[!Y^]\Uy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#"y~w=^zyrwp6tVUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#zb~w|{t:xwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`e^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nPfkjc)Jf_%]b[!_XW\UyYRWVUTMLKoONMLEDhHGFE>=a;@?8\<549870T.-,+*N.nm%$)"Fg%|{z!x>|utsxq7unVrk1ih.fejib(IH^cbaZ~^@VUTSw:PUNMLpoINMFKDhBAF?cC%;@?>7[;:981w/4-,P*p.-&J*)"'~D$#"y~}|u;yxZponm3qSihg-,+cha`&dcbaZY}WVUyS;QVUNrqKPONGkK-IBGF?cC<$:?>7<;4981Uvu-2+Op(-&J*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#c!~wv<zyr8vuWsl2ponmlkdcb(`_%]\[!Y^]\Uy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@9>=<5YX210T43,10/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1ongf,diba'eGcba`_X|V[ZSXQuONMLKPOHlLEJCBfFE>C<;_98765Y9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBA@E>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBf)EDC<;_98765Y9yx0543,P*p.',%$H('gf|B"baw|{zsr8Yutmrqj0nmleMib(`edcb[Z~XW\UTx;QVONMq4JINGLKDhHG)(D=a;@9]=}|Y9876/S321q)M-,%$#G'&}eB"!x}v{zyr8vunsl2ponmleMib(IH^cbaZ~^@VUTSw:PUNMLp3INGFEi,HAF?cC%$@9>7[54927654-Q1qp.-&JI#"!~}Cd"!x}|{t:xZponm3qSihg-kdchgf_%]\aZ_^]VzZSXWVOsSRQPON0/EDhHAF?cba;:?8=6Z:9yx0543,Pqp.-&J*j('&}CB"baw|{zsr8Yutmrqj0Qmf,diha'_d]\[!_XW\UySwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBfF?DC<`@?>=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}|u]s98vuWsl2ponmlkdcb(`H^]\"Z_^WV[TxXQuONMLKPOHlLEJIBG@d>C<;:9]=<;492V0/.-Q10/('K+$H('gf|B"baw|{zsr8Yutmrqj0Qglkd*Kgfedc\"Z_XW\UyYXQuONMLKPOHlFKDhH*)ED=a;@9]=}|Y9876/.R21q)M-,%$#G'&}eB"!~}_uzs98vuWsl2ponmlkdcb(`H^]\"`_XW\UZSwQVOTSRKoON0/EDhH*)?>b%A@9]=6;492V6543210/('K+$)"F&}|{A!aw|{t:xZputm3TSohmlkd*Kgfed]#aZ_XWVzZYXQuONMLKPOHlLEJCBf@(>b%;:^>=}|Y981U5.-,+O/.'K%*#"!Efe#z@?wv{zsr8Yutmrqj0nPfkjc)a`ed]\"C_^WVzZSXQPOs6LKoIHMFEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*#i'&}C#"!x}|u;yxZponm3qSihg-kdchgf_%c\aZ~^]VUZSRv9ONMLKJIHl/KDCHAFE>bBA#"8\<5:3810T43,10/.'&J*j(!~Dedz@x`|uzyxwp6nmlkjong-kjibJ`_^$#aZB^WVzZSXQPOsSRQP2HGFjiIBfF?DCB;_?87<;:3W765.-Q1q).'K%*#"!Efe#z@x}|uzsr8vuWsl2ponmlkdcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|{zyr8vo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X87w/43,Pqp.',%I#('~Dedz@~}v<]yxwpo5mrk1ingfe+iha'_d]#D`_X]VzZSRQPtTS54JImGLKDhHGF?DCB;_9876;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@9]7<543870T4321*/.'K%*#"!Efe#z@x}|uzsr8vuWsl2ponmlkdcb(`e^c\"`_X]V[TxXQPtTS5KPIm0/EDhHAF?c=<A:?>7[549870T43,+O).'&%*)(!E}$#"!x>={tyrqp6tsrqji/gfedcb(`e^c\"`_X]V[TxXW9OTSLKPImGkK-IBGF?c&BA:?>=<5YXWxw/.R21q/.'&J*j(!E}${A@x`|uzyxwp6nmlkjong-kjiKg`_dc\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|{zyr8vo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#zb~w|{t:xwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`e^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,P0)o-,%$H('&fe#z@x}v{zsr8Yutmrqj0Qglkd*b(fHdc\"C_^WVzZSXQPOsSRQ3IHGLEiCBA@?cC<;:^>=}|Y9270/.R21*N('&%I)i'~%|B"yx>|u]s9wvonsrk1i/mlkdcb(`e^c\"ZY}@?UZSRvVO7SLQPIm0/EDhH*)?>b%$:?>7[;:32V0v43210/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1ongf,diba'eGcba`_X|V[ZSXQuONMLKPOHlLEJCBf)(>=<`@"8=6Z:9yx0543,Pqp.-&J*#(!~Dedzy?}_{zyxwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=<;4X8765.R21*/.'K%*#"!E%${A!xwv<]yxwpo5mrk1ingfe+cba'_d]baZ~^]VUTSw:PUNMLpJOHlLKDhBAF?cC%;@?>7[;:981w543,P0)o-,+$Hi'~%${z!x>|utsxq7utVlkjoh.fejiha'_d]#D`_X]VzZYRQu8NMq4JONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBf)EDC<;_98765Y9yx0543,P0)o-,%$HG'~%|B"yx>|u]srq7onslkjongf,jiha`&dcbaZY}WVUyxXQPUTSLKPImGkK-IBGF?cCB;@?>7[5{3276/.-Q1q).'K%*#"!E%|#"y?}_uzs9wvuWsl2ponmlkdcb(fHdc\"`_^]\[TxXWVOTSRKoON0/EDhH*)?>b%A@?876Z43810T43,10/.'&J*j(!~Dedzy?}_{zyxwpo5mrk1onPle+ihgfeG]#aZB^WVzZSXQPOs6LKon10FKDhBG@?cC%;@?>7[;:981w543,P0/(L&%$)(!E}eB"!x}v{zyr8pun4rqSonmf,dcba'Hdcb[`_^W{[ZYXW9OTSLKPImGFKJIHG@dDC<;:^>=}|Y9810/.R2+*N.',%I#('~D${"!~}v<zyxwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlFKDhHG)(D=a;@9]=}|Y9270/.R2+0)('K+*)i!&}${Abaw|{zsr8Yutmrqj0Qglkd*Kgfedc\"Z_X|VUZYXQuONMLKPOHlLEJIBG@dc=<A@9876Z43810T43,10/.'&J*j(!E}${A!~}|u]s9qp6Wsrqpohg-kdiba`&%$bD`_XW{[Z<RWVUNrLQJINGkK-,BGF?cb%;:^>=}|Y9876/.R21*p.-&J$j"!E}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#c!~wv<zyr8vuWsl2ponmlkdcb(`_%]\[!Y^]\Uy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eBz!x}vu;yxwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`e^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,P0)o-,%$H('&fe#z@x}v{zsr8Yutmrqj0Qglkd*b(fHdc\"C_^WVzZSXQPOsSRQP2HGFjJCHA@?cC<;:^>=}|Y981Uvu32+0)Mnm%$#(!E}eB"!~}|u]s9wvonsrk1i/mlkdcb(`e^c\"ZY}@?UZSRvVO7SLQPIm0/EDhH*)?>b%$:?>7[;:32V0v43210/.'&J*)('~D$#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBA@E>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBf)EDC<;_98765Y9yx0543,P*p.',%$H('gf|B"baw|{zsr8Yutmrqj0nmleMib(`edcb[Z~XW\UTx;QVONMqQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/('K+*)i!Ef|{z!x>|utsxq7uWmrk1Rnmle+cha`&dcbaZY}WVUyS;QVUNrRQP2HGFjJIBfF?DCB;_?>=6;4X2765.R21qp.-&J$j"!E}eB"!x}v{zyr87unmlqj0QPfkjchg`&Gcb[`_^W{[=<XWPOsS54JOHlFKJIBA@E>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|{zyr8vo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#zb~w|{t:xwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`e^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fe^c\"Z_X|?UZYRvP8NSLQPOHGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDCYX]VzZSXQVOsS5KPIm0/EDhHAF?c=<`#">76;4X8xw/.R21q/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=<;4X8765.R21*/.'K%*#"!E%${A!xwv<]yxwpo5mrk1ongf,diba'eGcba`_X|V[ZSXQuONMLKPOHlLEJCBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fe^c\"Z_X|?UZYRvP8NSLQPOHGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_9876;4X87w/43,Pqp.',%I#('~D$#z!~}v<tyxwvo5m3Tpohmlkd*bg`&^F\[ZY}W{[ZYXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>v{t:xqYun4Ukpoh.lkjiha`&dcbaZY}WVUyS;QVUNrLQJINGkK-CHGF?cC%;@?>7[;:981w/4-,PO)o'&%I)i'~%|B"yx>v{t:xqYun4rqpohg-ejihg`&Gcb[`_^W{[=<XWPOsrq4JONMFjDIHGF?>C<`@9>=6Z:98705.RQ1*/.'K%*#"!E}$#"!x>=u;yrwpo5mrk1onmfejib(fe^c\"Z_X|?UZYRvP8TSRQJONMLEiCBA@?cC<;:^>=}|Y9270/.R21*N('&%I)i'~%|B"yx>|u]s9qYun4lkpi/gfedcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=6;:981U5.-Q1*/.'K%*#"!E}$#"!x>|u;sxwvonm3Tpohmlkd*bg`&^F\[Z_^]Vz=SXQPUNMq4JONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvotsrk1inmlejib(I_dcbaZYX|\[Z<;QVUNMRKoO10FKDhBG@?cC%;@?>7[;:981w543,P0)o-,+$Hi'~%${z!x>|utsxq7utVlkjoh.fkdiha'edc\[!_XW\UySwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDCYX]VzZSXQVOsS5KPIm0/EDhHAF?c=<`#">76;4X8xw/.R21q/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=6;:981U/4-Q1*/.'K%*#"!E%${A!xwv<]yxwpo5mrk1Rnmfkjiba'e^$bD`_XW{[Z<RWVUNrLQJINGk.JIHAF?c=<A@?>=6Z43810T43,10/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_9876;4X87w/43,Pqp.',%I#('~D|#"!x>|{tyxqpo5mrqpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|{zyr8vo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDZ_^]VUyYRWPOsS5KPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P0)o-,+$H"'~}$#z@x}v{zsr8Yutmrqj0nPfkjc)Jf_%]b[!_XW\UyYRQVONMLp3INGFEiIHG@(>b%;:^>=}|Y9270/.R2+0)('K+*j(!E%|B"yx>v{t:9wvonsl2SRhmlkd*bg`&^Fb[`Y^]VzZSRQVOsSRQ3IHGLEiIHGFED=aA#9>7[;:981w/4-,PON(L,%*#"!E}$#"!x>|{ts98vuWsl2ponmlkdcb(`e^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,P0)o-,%$H('&}|B"baw|{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=<;4X8765.R21*/.'K%*#"!E%${A!xwv<]yxwpo5mrk1ingfe+cba'_d]baZ~^]VUTSw:PUNMLpJOHlLKDhBAF?cC%;@?>7[5{3276/.R21q/('K+*#G'&}eB"!x}v{zyr8pun4Ukjong-eMiha`&dcbaZY}]Vz=SXQPUNMq4JONMFjDIHGF?>C<`@">76;4X870/.R21*/.'K%*#"!E%edz@a}|{tyxqp6tVUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/.R21*N('&J*)('~D$#"!x>|uzyrwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFj-,HGF?>b%;:^>=}|Y9876/.R,+Op(-&J*#i!&}C#c!~wv<tsr8vuWsl2ponmlkdcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_9876;4X87w/43,Pqp.',%I#('~D|#"!~}v<;yxZputm3TSohmlkd*Ka`edc\"ZY}@?UZSRvVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H(!~%|{A!x}|u;yxZponm3qSongled*bJ`_^$bD`_XW{[Z<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-,+0/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X87w/43,Pqp.',%I#('~D|#"!~}v<;yxZputm3TSohmlkd*Kgfed]#D`_X|V[ZSXQuONMLKPOHlLEJIBG@d>C<;:9]=6|:3Wxw/.R21q/.'&J*)('~D$#"!x>|uzyrwpo5mrk1onmfejib(fe^c\"Z_X|?UZYRvP8NSLQPOHGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=6;:981UT4321*N('&J*j('~Dedzy?}_{zyxwpo5mrk1Rnmfkjiba'_^cbaZ~^]VUZSRv9ONMLKJIHl/EDIHA@?cC<;@98\<5:3810T43,10/.'&J*)"!E%|#"!~w=uzyrwpo5mrk1ongf,dcbaf_%]baZ~^]\[ZYXQuONMLKPOHlLEJIBG@d>C<;_?8=6;4X810T43,10/.'&J*j(!EDedzy?}_{zyxwpo5mrk1ongf,dcbaf_%c\[!_X]V[ZYXQuONMLKPOHlLEJIBG@dcb%;:^>=}|Y9270/.R2+0)('KJ$j"!E}eB"!~}|u]s9qYun4lkpi/gfedcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}|u]s9wvo5VUkpoh.ledchg`_^$bD`YXW\UZSw:PUNMLp3INMFjD,HGF?DCB;_?>=6;4X2765.R2+0)Mnm%$#(!E}eB"!x}v{zyr8vunsl2jonmf,dihg`&Gcb[`_^W{[=<XWPOsr54JONMFKDhBAF?cC%;@?>7[;:981w/4-,P*p.-&J*)"'~D$#"y~}|u;yxZponm3qSihg-,+cha`&dcbaZY}WVUyS;QVUNrqKPONGkK-IBGF?c&BA:?>=<5YX870v.3,P0)('K%*)"'~Dedz@~}v{zyr8vuWsl2ponmlkdcb(`H^]\"Z_XWVzZ<XWPOsSLKPOHGkKJIH*)E>bB;:?>=6Z:98765432+*N.',%I#('~Dedz@a}|{tyxqp6tVUkpoh.ledchg`_^$bD`YXW\UZSw:PUNMLp3INMFjD,HGF?DCB;_9876;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=<;4X8765.R21*/.'K%*#"!E%${A!xwv<]yxwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_9876;4X87w/43,Pqp.',%I#('~Dedz@~}v<]yxwpo5mrk1ohgf,jibgf_%]b[!_XW\UyYRWVUTMLKoONMLEDhHGFE>=a;@?8\<549870T.-,+*N.nm%$)"Fg%|{z!x>|utsxq7unVrk1ih.fejib(IH^cbaZ~^@VUTSw:PUNMLpoINMFKDhBAF?cC%;@?>7[;:981w/4-,P*p.-&J*)"'~D$#"y~}|u;yxZponm3qSihg-,+cha`&dcbaZY}WVUyS;QVUNrqKPONGkK-IBGF?cC<$:?>7<;4981Uvu-2+Op(-&J*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#c!~wv<zyr8vuWsl2ponmlkdcb(`_%]\[!Y^]\Uy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?87<;:3Wx05.-,+O/.'K%*#"!Efe#z@x}|uzsr8vuWsl2ponmlkdcb(`e^c\"`_X]V[TxXQPtTS5KPIm0/EDhHAF?c=<A:?>7[549870T43,+O).'&%*)(!E}$#"!x>={tyrqp6tsrqji/gfedcb(`e^c\"`_X]V[TxXW9OTSLKPImGkK-IBGF?c&BA:?>=<5YXWxw/.R21q/.'&J*j(!E}${A@x`|uzyxwp6nmlkjong-kjiKg`_dc\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|u]srq7unmlqj0QPfkjchg`&Gcb[`_^W{[ZYXQ9UNSRKo21GLEi,+GFE>=aA#9>7[5{3276/.R2+*N.',%I#('~D$#z!~}v<zyxqYun4Ukpoh.lkjiha`&dcbaZY}WVUyS;QVUNrLQJINGkK-CHGF?cC%;@?>7[;:981w/4-,PO)o'&%I)i'~%|B"yx>v{t:xqYun4rqpohg-ejihg`&Gcb[`_^W{[=<XWPOsrq4JONMFjDIHGF?>C<`@9>=6Z:98705.RQ1*/.'K%*#"!E}$#"!x>=u;yrwpo5mrk1onmfejib(fe^c\"Z_X|?UZYRvP8TSRQJONMLEiCBA@?cC<;:^>=}|Y9270/.R21*N('&%I)i'~%|B"yx>|u]s9qYun4lkpi/gfedcb(`H^]\"Z_XWVzZ<XWPOsSLKPOHGkKJIH*)E>bB;:?>=6Z:98765432+*N.',%I#('~D|#"!~}v<tsr8vuWsl2ponmlkdcb(`e^c\"ZY}@?UZSRvVO7SLQPIm0/EDhH*)?>b<;:?8\6;492V05.3,10/('K+$)"Fg%${z@a}|uzs9wvuWsl2ponmlkdcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=6;:981U5.-Q1*/.'K%*#"!E%|#"y?}vu;yxZputm3TSohmlkd*Ka`edc\"ZY}@?UZSRvVO7SLQPIm0/EDhH*)?>b<;:?8\6;492V05.3,10/('K+$)"Fg%${z@a}|uzs9wvuWsl2ponmlkdcb(`H^]\"Z_XWVzZ<XWPOsSLKPOHGkKJIH*)E>bB;:?>=6Z:98765432+*N.',%I#('~D|#"!~}v<tsr8vuWsl2ponmlkdcb(`e^c\"ZY}@?UZSRvVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H(!~%|{A!x}|u;yxZponm3qSongled*bJ`_^$bD`_XW{[Z<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-,+0/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X87w/43,Pqp.',%I#('~D|#"!~}v<zyr8vuWsl2ponmlkdcb(`_%cb[Z~XW\UTx;QVONMqQ3IHGLEihBG@?cC%;@?>7[54381U54t2+*N.',%I#('~D|#"!~}v<t:xZputm3TSohmlkd*hgIe^]#[Z~XW\UTx;QVONMq4JINGLKDhHG)(D=a;@9]=}|Y9876/S321q)M-,%$#G'&}eB"!x}v{zyr8vunsl2ponmleMib(IH^cbaZ~^@VUTSw:PUNMLp3INGFEi,HAF?cC%$@9>7[54927654-Q1qp.-&JI#"!~}Cd"!x}|{t:xZponm3qSihg-kdchgf_%]\aZ_^]VzZSXWVOsSRQPON0/EDhHAF?cba;:?8=6Z:9yx0543,Pqp.-&J*j('&}CB"baw|{zsr8Yutmrqj0Qmf,diha'_d]\[!_XW\UySwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBfF?DC<`@?>=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"y~w=^zyrwp6tVUkpoh.ledchg`_^$baZ_XW\[ZSwQ9UNSRKoO1GLEi,HGF?DCB;_?>=6;:981U54321q)M-,%$#G'&}eBz!x}vu;yxwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`e^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,P0)o-,%$H('&fe#z@x}v{zsr8Yutmrqj0Qglkd*b(fHdc\"C_^WVzZSXQPOsSRQ3IHGLEiCBA@?cC<;:^>=}|Y9270/.R21*N('&%I)i'~%|B"yx>|u]s9wvonsrk1i/mlkdcb(`e^c\"ZY}@?UZSRvVO7SLQPIm0/EDhH*)?>b%$:?>7[;:32V0v43210/.'&J*j(!~D|#"!x>|uzyrwpo5mrk1ongf,diba'eGcba`_X|V[ZSXQuONMLKPOHlLEJCBf)(>=<`@"8=6Z:9yx0543,Pqp.-&J*#(!~Dedzy?}_{zyxwpo5mrk1onmfejib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJIBGFE>b%;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwW9OTSLKPImGkK-IBGF?cCBA@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_?>=<;4X8765.R21*/.'K%*#"!E%${A!xwv<]yxwpo5mrk1ingfe+cba'_d]baZ~^]VUTSw:PUNMLpJOHlLKDhBAF?cC%;@?>7[;:981w543,P0)o-,+$Hi'~%${z!x>|utsxq7utVlkjoh.fejiha'_d]#D`_X]VzZYRQu8NMq4JONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBf)EDC<;_98765Y9yx0543,P0)o-,%$HG'~%|B"yx>|u]srq7onslkjongf,jiha`&dcbaZY}WVUyxXQPUTSLKPImGkK-IBGF?cC<$:?>7<;4981UT4321*N('&J*)('~D|#z!x>v{tyxwpo5mrk1ingfe+*b(I_dcbaZYX|\[Z<;QVUNMRKo21GLEi,+GFE>=aA#9>7[;:981w/4-,P*p.-&JI#G'&}eB"!~}|u]s9qvon4lTjohmf,Mibg`_^$baZ_XW\[ZSwQ9UNSRKoO1GLEi,HGF?DCB;_?>=6;:981UT4321*N('&J*)('~D$#"!~}v<]yxwpo5mrk1ongf,diba'_^]b[Z~XW\UTx;QVONMq4JImMLEDhHA@E>=a;@?8\}54381U54321q)M-,%$#G'&}eBz!x}vu;yxwpon4lkpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|{zyr8vo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@9]7<543870T4321*/.'K%*#"!Efe#z@x}|uzsr8vuWsl2ponmlkdcb(`e^c\"`_X]V[TxXQPtTS5KPIm0/EDhHAF?c=<A:?>7[549870T43,+O).'&%*)(!E}$#"!x>={tyrqp6tsrqji/gfedcb(`e^c\"`_X]V[TxXW9OTSLKPImGkK-IBGF?c&BA:?>=<5YXWxw/.R21q/.'&J*j(!E}${A@x`|uzyxwp6nmlkjong-eMibgfe^c\"!_^]\[TxRWVUNrRQPON0/EDhBfF?DC<`@?>=6Z:9yx0543,Pqp.-&J*#(!~Dedzy?}_{zyxwpo5mrk1ingfe+cba'_d]baZ~^]VUTSwWPUTSLp3INGFEiIHAF?cC%;@?>7[;:981w543,P0)o-,+$Hi'~%${z!x>|utsxq7utVlkjoh.fejiha'_d]#D`_X]VzZYRQu8NMq4JONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDZ_^]VUyYXWPtTS5KPIm0/EDhHG@d>C<;_98765Y9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fe^c\"Z_X|?UZYRvP8NSLQPOHGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBf)EDC<;_98765Y9yx0543,P*p.',%$H('gf|B"baw|{zsr8Yutmrqj0Qglkd*b(fHdcb[!Y^]VUy<RWVUNr54JINGLKDhHG)(D=a;@9]=}|Y9876/S321q)M-,%$#G'&}eB"!x}v{zyr8vunsl2ponmleMib(IH^cbaZ~^@VUTSw:PUNMLp3INGFEi,HAF?cC%$@9>7[54927654-Q1qp.-&JI#"!~}Cd"!x}|{t:xZponm3qSihg-kdchgf_%]\aZ_^]VzZSXWVOsSRQPON0/EDhHAF?cba;:?8=6Z:9yx0543,Pqp.-&J*j('&}CB"baw|{zsr8Yutmrqj0Qmf,diha'_d]\[!_XW\UySwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDCYX]VzTYXWVOsS5KPIm0/EDhBfF?DC<`@?>=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}|u]s98vuWsl2ponmlkdcb(`_dcb[Z~^]V[ZYRvPUTSRKoON0/EDhHAF?cb<;_?8=65Y9yx0543,P0p.'&%$H('&%|{"y?wv{zsr8Yutmrqj0Qmf,jiba`e^$bD`_XW{[Z<RWVUNr54JIm0/EDCHAe?DC<;:^>=}|Y9270/.R2+0)('K+*)i!&}${Abaw|{zsr8Yutmrqj0nmleMib(`edcb[Z~XW\UTx;QVONMq4JONGFjJIBA@E>bB;:?>=<5Y3810T43,10/.'&J*j('~Dedz@x`|uzyxwp6nmlkjong-kjihgIed]#D`_X|V[ZSXQuONMLKPOHlFEDCBf@(>b%;:^>=}|Y9876/.R2+0)('K+$j"!E}eB"!~wv<tsr8vuWsl2ponmlkdcb(`_dcb[Z~^@?UZYRvPUNMLpPON0/EDhHA@?cC<;@98\<5:3810T43,10/.'&J*)"!E%|#"!~w=uzyrwpo5mrk1ongf,dcbaf_%]baZ~^]\[ZYXQuONMLKPOHlLEJIBG@d>C<;_?8=6;4X810T43,10/.'&J*j(!EDedzy?}_{zyxwpo5mrk1ongf,dcbaf_%c\[!_X]V[ZYXQuONMLKPOHlLEJIBG@dcb%;:^>=}|Y9270/.R2+0)('KJ$j"!E}eB"!~}|u]s9qYun4lkpi/gfedcb(`_%]\"C_^WVzZSXQPOsSRQP2HGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}|u]s9wvo5VUkpoh.ledchg`_^$bD`YXW\UZSw:PUNMLp3INMFjD,HGF?DCB;_9876;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bDCYX]Vz=SXWPONMq4JONMFjDIHGF?>C<`@9>=6Z:98705.R2+0)Mnm%$#(!E}eB"!x}v{zyr8vunsl2jonmf,dihg`&Gcb[`_^W{[=<XWPOsr54JONMFKDhBAF?cC%;@?>7[;:981w/4-,P*p.-&J*)"'~D$#"y~}|u;yxZponm3qSihg-,+cha`&dcbaZY}WVUyS;QVUNrqKPONGkK-IBGF?c&BA:?>=<5YX870v.3,P0)('K%*)"'~Dedz@~}v{zyr8vuWsl2ponmlkdcb(`e^c\"ZY}@?UZSRvVO7SLQPIm0/EDhH*)?>b<;:?8\6;492V05.3,10/('K+*)('~D$#"!x>|uzyrwpo5mrk1onmfejib(fe^c\"Z_X|?UZYRvP8NSLQPOHGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bDZ_^]VUyYXWPtTS5KPIm0/EDhHG@d>C<;_98765Y9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fe^c\"Z_X|?UZYRvP8NSLQPOHGFjJCHA@?cC<;:^>=}|Y981U5.-210/(L,+*#G'&}eB"!~}_uzs9wvunVl2pinmf,Mibg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9wvon4lTjohmf,Mibg`_^$bD`YXW\UZSwWV87SLKoO1GLEi,HGF?DCB;_9876;4X87w/43,Pqp.',%I#('~D|#"!x>|{tyxqpo5mrqpi/gfedcb(fHdcb[!Y^WV[TxXQuONMLKPOHlLEJIBG@d>C<;_?>7<;:3Wxw/.R21q/.'&J*j(!E}${A!x}|u;sr8Yutmrqj0Qglkd*)gfHdc\"C_^WVzZSXQPOs6LKoIHMFEiIH*)?>b%;:^>=}|Y9270/.RQP0).-&J*)"'~D$#z!~}v<zyxqYun43kpoh.lkdcb(`H^]\"`_X]V[TxXWVO7SLQPIm0/EDhBf)(>=<`@"8=6Z:9yx0543,P*p.',%$H('&fe#z@x}v{zsr8Yutmrqj0nmleMib(fHdcb[!Y^]VUy<RWVUNrRQ3IHGLEi,HAF?cC%$@9>7[54927654-Q1q/.-&J*j(!E%|B"yx>|{zyr8vo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X816/St,10/(L,+*#i!&}C#cy~}|{zs9qvo5VUkpoh.ledchg`_^$bD`YXW\UZSwQVOTSLpJONMFjDIHGF?>C<`@">76;4X87w/43,Pqp.',%I#('~D|#"!~}v<zyxZpo5VUkpoh.ledchg`_^$baZ_XW\[ZSw:VOTMq4JONMFjDIHGF?>C<`@9>=<5Y38765.-Q1q).'K%*#"!E}|{A!~}_uzs9wvuWsl2ponmlkdcb(`e^c\"ZY}@VzZ<XWPOsSLKPOHGk.JCHGF?>b<A:98\<;492VC

```

Final output: `Game Over!`

That escalated quickly.

---

**Solution**

> Safe despite some valiant efforts (particular credit to @Sisyphus and @DomHastings). It's now clear I could have got away with using only two languages instead of four!
> You probably don't have time to run every layer so here are the first seven and last seven. Note that version-dependent Ruby code is used so both links will likely break if/when TIO's Ruby is updated.
> **Layer 1: PHP**
> Just a (cheating) quine. The purpose of this 'invisible' layer is to mask the simple alternating pattern of Layers 3–840,527,321,220,386 by giving the false impression that after Layer 2, an *odd* number of layers remain.
> **Layer 2: Malbolge**
> This layer, created using this generator, was a last-minute addition. It serves two purposes:
> 1. *Obfuscation.* Layer 3 is easy to crack even without knowing the language (as noted in @Dion's comment). I wanted some protection against this first-glance weakness.
> 2. *Red herring.* A cracker stuck at Layer 4 (missing the `-rprime` flag) might wrongly guess that there is code in another language hidden in Layer 2.
> **Layers 3, 5, 7, ..., 840,527,321,220,385: bitch `-c`**
> The bitch layers don't do any real work; they simply spit out the next Ruby layer. The (implementation-specific) `-c` flag activates character I/O. I chose bitch for its simple ASCII-code-based character I/O and because it is relatively unknown/unpopular on CGCC (only used in four previous answers).
> **Layers 4, 6, 8, ..., 840,527,321,220,386: Ruby 2.5.5 `-rprime`**
> The Ruby layers rely on obfuscation, the nasty version-dependent practice of calling methods *by index*, and the even nastier 'feature' that the default method indexing is disrupted by loading certain libraries via the `-r` flag. Specifically, the `-rprime` flag (which loads the `Prime` library) alters the `methods` array for objects of `Integer` type, inserting `:prime_division` and `:prime?` at indices 20 and 21, respectively. Thus, by including calls by index to `Integer` methods with index greater than 19, the code is made to break if executed without `-rprime`.
> The code works as follows. The hex integer `0x5f40c10f01b74eafa17c9` is \\$7197109101327911810111433\\$ in decimal, which is the ASCII codes of `Game Over!` concatenated. The prime factorisation of this integer is \\$3^2\times29\times173\times347\times1093\times420263660610191\\$. Each of these prime factors, except the last, appears in the first line of Layer 4 (\\$3\\$ and \\$1093\\$ are expressed in hex; this is a red herring). Call the last integer in the first line \\$n\\$, so \\$n=0\\$ in Layer 4. The code tests whether \\$3^2\times29\times173\times347\times1093\times{}n=7197109101327911810111433\\$. If so (as occurs only when \\$n=420263660610191\\$), the integer is broken into an array of ASCII codes (basically via `7197109101327911810111433.to_s.scan(/1?../)` in de-obfuscated form), converted to characters, and printed. If not (as occurs for all \\$n\<420263660610191\\$), the code prints itself, with \\$n\\$ incremented by 1, as a bitch program. This program is simply a string of ASCII codes sandwiched between `#` and `/` characters.
> *Why `-rprime`?*
> No methods provided by the `Prime` library are actually used (the prime factorisation was done separately), so why `-rprime`? The original plan was not to increment \\$n\\$ by 1 at each iteration, but rather to replace it by the next higher prime. This would have added another level of frustration to any cracker who stumbled on the `-rprime` flag because the required execution time would have gone through the roof. I gave up on this approach because I was unable to calculate the required number of iterations (i.e. the number of primes \\$\le420263660610191\\$) in reasonable time!

# Answer
> 13 votes
# 33 layers, cracked by HyperNeutrino

```
i=496;a=     0
print('gREETINGS!'.swapcase()if a==447775else'i=%3s;a=%6s%s'%(i-16,a+(int(1/2*2)*int('syd0s6ncczl7ka1ioletm9t1atoqjq2awpshwfxcorai94tcmzim91j2zzq2c08wxjmfmzr0x9euhjojhltjpay0g8t1o78y83a',36)>>i&0xFFFF),open(__file__).read().strip()[14:]))

```

Final output: `Greetings!`

Hint: Python.

---

Solution:

> This uses Python 2 and Python 3 to encode a Subset Sum problem. `int(1/2*2)` is `1` in Python 3 and `0` in Python 2, which allows you to pick whether you want to include or exclude a number per layer from a packed list. With strong parameters, subset sum is NP-complete. However, the subset sum has weak parameters (~16 bits per number for 32 numbers) so it can be solved by many methods.

# Answer
> 8 votes
# 3 layers, Cracked by Aiden4

```
class Main:
  print(
"""class Main {public static void main(String[] args) {String a="ɗefine";char c=10;String z="pɼint";char d=23;String y="⁸fẇ×ịṛs⁷";String e="";char x=90;String b="⁺°`¬²ịĿ°£Oḋ®ẋṄ¢¦";String w="⁸Ḷ⁸Ŀ~ʋ^ḋ*Ẓ>{S";String i="return";String n=" ";String f="Game";String s="main";String t="def";String k="#";String u="ƈlass";String m="Іt'ѕ Dоnе.";String o="¨";String g="ƊƝƤƬƲȤɓ";
    if (""")
  print(((1 ^ (29 * -54) + 23 & 103) / 3))
  print(">")
  print(302 - 67 + (2 % 590) | 930 - 123 * (-169))
  print(""") {
      System.out.printf("73----T---|---111-T   T46%c      |     /     |   1%c 39-  1      %c    |   0%c/   %c 1       |   1   1%c|    -6      /    1   |%cL115----    |     0  /%c        %c   8     L76%c         3  6%c          2-J",10,10,92,10,92,10,10,10,92,10,10,10);
    } else if (""")
  print((65 % (59 - 20 * 24)) / -193 * 134)
  print(">")
  print((624 & 13 + 3012) / 23 * 9)
  print(""") {
      System.out.printf("%cm=%cIt's Done%c;print %c$m%c;", 36, 34, 34, 34, 34);
    } else if (""")
  print(12345 * 4 / 910 - 2 * 401)
  print(">")
  print((1 + 3 / 3) % (24 - 36 * 90))
  print(""") {
      System.out.printf("Flexibility speaks for yard%cairport announces all lies%cring a ring a rosie%ccaesars sat bad%csay %cIt's Done.%c%cAmerica is great",10,10,10,10,34,34,10,10);
    } else if (""")
  print((393 / 91 * 56) - 12 * 78 + 192)
  print(">")
  print(67 | -123 + 21 * 34 - 193)
  print(""") {
        System.out.printf("You are done%cSay %cIt's Done.%c(It really is that simple!!)",10,34,34);
    } else if (""")
  print(154 % 91 * 10 + 345 - 2)
  print(">")
  print(89 + -920 | 65 * 2 ^ 12)
  print(""") {
      System.out.printf("4@abƤḞ⁹%dỴ !Ṙȯ/ṣƥA^?rCs>Y|°ỵ4$m(0a+4r  /ZÐæ⁽e)D1ṖÐ,Ḅ Ḃ &ẉ1ɗḌ¢ġʋḞṬŒ$c “¢¤ƲgṖḳ®[⁾»",29,10,90,3,102,11,1234,95,666);
    } else if (""")
  print(10203 / 192 + 182)
  print(">")
  print(12 - 45 * 69 | 3)
  print(""") {
      System.out.println("YoucAnTryTofIguReoUtwHatThislaNgUagEiSButyOUwoNtBeaBleTobEcaUseiamToOpoWeRFulmWahAHaHaAnDhEreIssOmefilLeRteXtCOmmeNTcOmmeNtCommenTpRInTLpAreNcAPeitSiNGLeQsCaPeDonEdoTrpArencoMmEntCoMMentCoMMeNTfOOBaRyAbBaDabbadAbBAdOOcAnyOuFIndoUtTHEsEcREtBUrIEdINtHIsMEaNInGLeSStEXtNOYoUcaNTbEcaUseIhaVetHepOweRofNopUncTUatIoNandilItERaCYoNmySiDEbyeByePPl");
    } else {
      System.out.printf("%s"+e+"ẊD.%1$s",o);
    }
  }
}""")

def main(Main:Main):
  Main=Main

@main
def mian():
  Main=main(Main())

```

Outputted phrase: "It's Done."

This is a pretty easy one to crack, but here's a hint anyway - at least 2 of the languages can run on the JVM. And choose your version carefully.

> Okay, it's cracked now, so here are the possible branches:
>
> * Python 3 + Java + Perl 5 - prints "It's Done" (no period)
> * Python 3 + Groovy + Perl 5 - prints "Іt'ѕ Dоnе." (wrong Unicode chars)
> * Hypothetical Cython 2 version (or other Python 2 version that allows type hints with `:`) - imaginary 2-D language
> * Third branch in layer 2 - TrumpScript program that outputs "it's done." because TS is case-insensitive.
> * Fourth branch in layer 2 - Rockstar program with correct output but never reached
> * Dotty + Java - nonsensical Jelly-ish program
> * Sixth branch - oOo Code, never reached
> * Last branch - Husk, never reached

# Answer
> 5 votes
# 4 layers, cracked by Sisyphus

```
"/-G^A_:;aT$e}qz\"7\"y^&'7T|-q3ZO@,]GN6==3g4U^Y)S_L7:fVp6_4'!s,a8IUK1[ Sp.)Ae)/P%ZY&D*K>j6feVfN1Fky,Vl2Z'?ie%\"<f,nv\\VS&T^e]5ZP}j!6/AivE` 0>9x<DdQL# kdzrz~sSO\"7[&U"{32-}%95base
3base{'
    '1/=}%

```

This isn't a serious answer by any means, but it was fun to make.

Final output: `Code Golf.`

Hint: Love is a great mystery, but I couldn't really explain it.

This was cracked quickly.

# Answer
> 4 votes
# 2 layers, cracked by *@Sisyphus*

```
,322,241,245,241,245,313,245,241,241,315,245,241,245,241,315,245,245,245,245,245,245,315,315,245,245,241,241,315,313,245,313,245,245,315,241,241,241,241,241,315,245,245,315,245,241,245,315,322,241,245,245,245,245,245,241,315

```

Output: `Greetings!`

---

EDIT: Solution after being cracked:

> I thought it was fun to try some languages I've never used before, since printing text to STDOUT is pretty straight-forward in most languages.
> The first language used is μ6 `-a`, for which the leading `,` will take some integers and encode them as a nested tuple. The integers are in base-6, so `322,241,245,241,245,313,245,241,241,315,245,241,245,241,315,245,245,245,245,245,245,315,315,245,245,241,241,315,313,245,313,245,245,315,241,241,241,241,241,315,245,245,315,245,241,245,315,322,241,245,245,245,245,245,241,315` is actually the list `122,97,101,97,101,117,101,97,97,119,101,97,101,97,119,101,101,101,101,101,101,119,119,101,101,97,97,119,117,101,117,101,101,119,97,97,97,97,97,119,101,101,119,101,97,101,119,122,97,101,101,101,101,101,97,119`. These are the codepoints for the characters `zaeaeueaaweaeaweeeeeewweeaawueueewaaaaaweeweaewzaeeeeeaw`, which we can output with the argument flag `-a`.
> The second language used is evil, which is generated by this Python program (second method). Here, `z` resets \\$A\\$ to 0; `a` increments \\$A\\$; `u` decrements \\$A\\$; `e` weaves the 8 bits of the binary representation of \\$A\\$; and `w` outputs \\$A\\$ as character with this codepoint.
> Try it online in μ6.
> Try it online in evil.

# Answer
> 4 votes
# 4 Layers, сracked by Sisyphus

```
1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+=A1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;A;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;1 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+;

```

Output: `The Final 1`

# Answer
> 4 votes
# 2 layers. cracked by Sisyphus

```
//"/pr/in/t('C/o/de /G/o/lf./')"#ec/ho/'C/o/d/e/ G/o/l/f/.'#con/sole/.l/og/('C/o/d/e/ G/o/l/f/.')#g))#:jd@#$%6a

```

Options, options...

Output: `Code Golf.`

# Answer
> 4 votes
# 2 layers, cracked after 18 minutes by Sisyphus

```
printf("Code %s." % "Golf") # Python doesn't use printf?? (Of course I know what Python uses. (print))
# ^ The letter i. Superb letter. Seriously, it's one of the only two letters that can be a word by itself.

```

It outputs `Code Golf.`

This will probably be cracked very quickly.

# Answer
> 4 votes
# 5 layers, Safe

```
#include <iostream> \/\/ "sgnitreeG"<._@
/x/zzzz//z/mmmm//m/nnnnn//k/p
//h/
o//j/
/
xznjkxmmmnnnnjkxznnnnjkxzmmnjkzmmnnjkxzmmmnnjkzzmmmnnnjkzznnnnjkxzzhjzmmmjkzzmnjkxzmjkxzmmjkxzmmmnnnjkzmmnnjkxxxxxxmmnnnhjxxxxxxxxzmmmhjzmmnnjkmmnnnnhjxmmmnhjzzmmhjmhjzmmnnjkxxmnnnhjzmnhjznhjzmmnnjkmmmnhjzzmmhjxxzmmnhjzmmnnjkxzzznnhjNever gonna give you up.... Never gonna let you down... Never gonna run around and desert you....hjzzzmmmnnnhjzmmnnjkxzzzmmnnnnhjzzznhjzznnnnhjt

```

Just a first attempt, so probably won't be too hard.

Final output: `Greetings!`

## Solution:

Layer 1: ///

```
#include <iostream> // "!sgnitreeG"<._@

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
Never gonna give you up.... Never gonna let you down... Never gonna run around and desert you....
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
p
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
o
t

```

Layer 2: Grocery List

```
echo u:,120#.inv 493675 1496505 1682621 1650191 1429778 1546144

```

Layer 3:

```
"!sgniteerGGc"bk,@

```

Layer 4: Befunge-98

```
cGGreetings!

```

Layer 5:

```
Greetings!

```

# Answer
> 3 votes
# 3 layers, cracked by Sisyphus

```
101;1111011;0000;11011111;{110000;11100010;11011110;00110;10111011;000110;10001;0100000;11011;000;11010101;0000010000;10100000;101101;0100000;1101111;0101111;}1001010;0000;100000;10110001;011001;011"00001101110100100010011001000;{111;011111;}1000\1101100;010110;110011;0\;110001;0111010;110010\10110;110001;0110000;\11011;0010;11001;011\11;0100000;11010100\;10110001;101110;1\001;001010;110111\0000;10110001;10\1011;0000;10100\000;0100110111\101101111111"@

```

The phrase to print: `Code Golf.`

Can you get through the binary hell?

# Answer
> 3 votes
# 3 layers, Cracked by PKmnQ

```
"D'`;#]8JIY4jEhw5uRQ+rpLo98*Z('D2CAdbx>+<)yxZpunsl2SRngfe+Lhg`_^$EaZ_^]V[TxXQ9UNrLQJOHMLEiCBAF?>=a;@?8=<54X876/4-Q10/o-&Jkj"75*1-"F&%edAbaw|{tyr8vuWVlkj0Qgfejib(`H^]#a`YA]\[TxXWP8TSLQJnHlkE-CHAeED&B;_?>=}|4Xy1U543s+O/o-&Jk)"75*1-"!&}C{c!x>|{zyxqY6Wsrqpi/mleMiha'HG]#a`_^W?[ZYRvPUTMqQJ2NMLKDhBG@?>b%;:?876;:3W10543,P0/on&J*)('&%${z@~w|uts9Zvutmlk1oQPfkd*bg`_%cbaCYX|\U=YXWPtT6RKoOHMFEi,HGF?DC<A:^>~6;4381Uv4-2+*Non&+*#Gh~}|{"75*1-"y?wvuzyr8vXWsl2ponmfN+Lbgfe^c\"75*1-"`Y^WVUySRWVOTMqQPONM/EiCHG@EDCB;_?>=}|49870/.R,1*N.n&%$Hi!EDC#zb~}|uts9Zpo5Vlkj0Qgfejib(`edc\"75*1-"`B^]VUTxXWP8Nr54PImML.DhHA@EDCB;_?>~<5Y9270Tu-,+Op.-&+$)"75*1-"Fg%|B"75*1-"!~wv<)"rooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo;

```

This probably won't be too hard, but good luck fighting through my unidomatic code. Outputs `The Last 1`

> Okay, it was cracked pretty quickly, but it did take two people to do it (see comments). The first layer is pretty straightforward, just a string pushed to the stack then outputted in \<\>\<. The second layer is Malborge that came from a generator posted by another user in this thread. The third and final layer is an abuse of rust's macro system so egregious that it won't even run on the rust playground. The macro I defined creates a function that invokes a macro based on user input. I then invoked the macro so it created the main function with an invocation of the print macro.

# Answer
> 3 votes
# 2 layers, safe

```
print "%s" % "Code Golf."
# Ss4iSBr_Z*YWTR>:wTC`^ 5
# x red herring `-~DqD|`<
# Xt1,i>-%qrFhK-`@eEw, ye
# uI' | g[Wt7BU3A)N<[LsHG
# >s}R"Ia:HF!s {k=)qxlo9h
# $ia;,t"-,]xO3?VDC]<,\:#
# G.-oHn9>.E%B,dx7db_Xs,Z
# H RU"%+70+<G^$n|GT,qR2L
# iB\7.n}-?w\&bF -r[6&G8>
# _}*c%<qWW~E$/M0UiW/A8'Q
# 5AJ"ineTc>g+c&PBS`dtU##
# 7`w-H3|kj3Oz4t<;4zyI72q
# 0jt}>,+=%;'{q837yZo)+ma
# 'a7Upv&<(VG.m}`l}2!]4YX
# ,M`jL>Xd%Igji\'cvim+fL]
# !;S4u&Gv+oT%|G,rHVt?%N<
# JkB*~M'&>er%W@TK7W% FxC
# Wikiq#k*MrX!c<&QkZ?36R.
# "GZu2E6p>qR&r'OF.f3,t0W
# R1`UHS%- B+<PkmnQ8ExK;t
# Le71:N>"(%05vtiPML$\_H.
# 003:W%<P<(3j4vhr-s3,L.W
# SJp`S ('![j,z>x#.cN6&(/
# |m(Bl[^(]<j,w={U$.6:-nm
# @}h[>]c+HbV 7:11mn&)xWi
# [%|&(<Y7V]Qq"a(1BlDs2dJ
# >(~ET7A4+g#b^jhP|G3i^:4
# %<fO}(fRpC_G6f?G0jm@w((
# (?pV{WF9'X-n76IcXE>!hWW
# VjNEAf.|97dvm4<Ph%MOS=X
# >o%y'k44eGzFJE5r^skEy]v
# Yg(mQf9Q.|&mTKHA<1kqBnJ
# WK%v_zXXANpS>~Od3Fl\hKl
# "g(;RkLx=,BT)JT[VXs<]'V
# %g>v[h(z]%)4e`&`P=6^Q__
# Z`^sV3/m'(<=T?{Z})TccNW
# {Cb>k]F?E>(\$IyZ+tS#i,#

```

Outputs `Greetings!`

It works in Python 2, but it doesn't output the correct string. There's a bunch of gibberish in the comments, but how could that be executed?

Also, just in case it's useful to anyone, here's the code I used to create the original gibberish.

## Explanation

The first layer is axo. In axo, string mode is different from other 2d languages, in that it can change direction, and do math with ASCII values. Also, `%` is down, probably because you'd be using `v` in your strings. I took advantage of those by hiding instructions in random gibberish.

Try it online!

Output: `"Greetings!"`

The second is Foo. You can tell I only put my effort into the first layer.

# Answer
> 3 votes
# 7 layers, was invalid

Code too long to fit in post

(65365 bytes)

What it would've been:

## Layer 1: Javascript (v8)

Try it online! You'll have to paste the code in 'cos I haven't found a link shortener that supports TIO links.

This layer is just something that doesn't prettyprint arrays, so Intcode's fine with it.

## Layer 2: Intcode

Code still too long, paste it in Here in the input box.

This simply prints the number for layer 3 by building it from base 1000.

## Layer 3: Golunar

Code still chonky

Corresponding BF

Run the BF

## Layer 4: Splinter

This is where I stuffed up. It was basically the output of the above program with some backslashes thrown in, but when running it through a converter, I forgot to escape them, so the program for this layer wouldn't work.

Anyway, next layer:

## Layer 5: Brainfuck

```
++++++++++[>+++++++++>++++++++++++++++++++++>>+++>+>+++++++++++++++++>+++++<<<<<<<-]>++++.>+.>++.>++.>+.>+.>----.

```

Try it online!

This outputs the raw bytes `5e dd 02 20 0b ab 2e`

## Layer 6: Vyxal

Try it Online!

When the above bytes are interpreted as Vyxal in the Vyxal codepage, they produce ``¬꘍ »₆.`, which decompresses to `Code Golf.`

## Layer 7: PHP

```
Code Golf.

```

A cheating quine. Try it online!

Anyway yeah, this was invalid.

---
Tags: kolmogorov-complexity, cops-and-robbers, code-generation, obfuscation
---


# Question
Title: AoCG2021 Day 6: Taxicab in a triangular city
Part of **Advent of Code Golf 2021** event. See the linked meta post for details.

Related to AoC2016 Day 1, Part 1.

---

You're airdropped near Easter Bunny Headquarters in a city somewhere. "Near", unfortunately, is as close as you can get - the instructions on the Easter Bunny Recruiting Document the Elves intercepted start here, and nobody had time to work them out further.

The Document indicates that you should start at the given coordinates (where you just landed) and face ~~North~~ East. Then, follow the provided sequence: turn right **60 degrees**, then walk forward the given number of blocks, ending at a new intersection.

"What, 60 degrees?" You think, and you look around. Then you realize the city is not quite like what you imagine; the streets in this city form a **triangular grid**.

Anyway, there's no time to follow such ridiculous instructions on foot, though, so you take a moment and work out the destination. Given that you can only walk on the street grid of the city, how far is the shortest path to the destination?

For example, if the instructions are `[1, 1, 0, 2]`, it means to:

* Turn right 60 degrees and move 1 block forward
* Turn right 60 degrees and move 1 block forward
* Turn right 60 degrees and stay in place
* Turn right 60 degrees and move 2 blocks forward

In the end, you end up at just 1 block west of the start.

**Input:** A (possibly empty) list of non-negative integers. If you encounter a 0, it means to turn right 60 degrees but stay in place.

**Output:** A non-negative integer indicating how far away the destination is from the current position, measured in triangular taxicab distance.

Standard rules apply. The shortest code in bytes wins.

## Test cases

```
[] -> 0
[1, 1, 1] -> 2
[1, 1, 0, 2] -> 1
[1, 2, 0, 0, 0, 2, 1] -> 4
[1, 2, 3, 4] -> 6

```

# Answer
> 9 votes
# Python 2, 62 bytes

```
p=q=0
for i in input():p,q=i+p-q,p
print max(0,p,q)-min(0,p,q)

```

Try it online!

62 bytes version suggested by loopy walt

---

# Python 2, 64 bytes

```
p=q=0
for i in input():p,q=i-q,p+q
print max(p,q,p+q,-p,-q,-p-q)

```

Try it online!

-3 bytes by Arnauld and xnor.

---

# Python 2, 94 bytes

```
a=input()
p,q,r=[sum(a[i::6])-sum(a[i+3::6])for i in[0,1,2]]
print max(map(abs,[p-r,q+r,p+q]))

```

Try it online!

# Answer
> 8 votes
# Pari/GP, 49 bytes

```
a->p=q=0;[[p,q]=[i-q,p+q]|i<-a];normlp([p,q,p+q])

```

Try it online!

A port of @tsh's answer. Make sure to upvote that answer as well!

---

# Pari/GP, 53 bytes

```
a->vecmin([normlp(Pol(a)*x^i%(x^2-x+1),1)|i<-[0..2]])

```

Try it online!

If we see the city as the complex plane, then the instructions \\$\[a,b,c,\dots\]\\$ will end up at the point \\$a+b\ x+c\ x^2+\cdots\\$, where \\$x={(-1)}^{1/3}=\frac{1}{2}+\frac{\sqrt{3}}{2}i\\$ is a root of the equation \\$x^2-x+1=0\\$. So we can convert the input into a polynomial with variable \\$x\\$, and mod \\$x^2-x+1\\$. This gives the destination in the form \\$a+b\ x\\$.

`normlp(...,1)` is the usual taxicab distance: `normlp(a+b*x,1)=abs(a)+abs(b)`. If the destination lies in the first or the fourth sextant of the plane (i.e., \\$a+b\ x\\$ where \\$a,b\>0\\$ or \\$a,b\<0\\$), this already gives the correct result. In other cases we need to rotate the destination by 60° or 120°. 60° rotation is just multiplying by \\$x\\$, 120° is multiplying by \\$x^2\\$. We try all possible rotations and take the smallest taxicab distance.

# Answer
> 3 votes
# Charcoal, ~~37~~ ~~28~~ 26 bytes

```
Ｆ³⊞υ⁰ＦＡ≔⟦⊟υ⁻ι§υ⁰⁺ι⊟υ⟧υＩ⌈↔υ

```

Try it online! Link is to verbose version of code. Explanation: Now another port of @tsh's original Python answer (the subsequent golfs don't apply to Charcoal).

```
Ｆ³⊞υ⁰

```

Start with an array of three zeros.

```
ＦＡ

```

Loop over the input movements.

```
≔⟦⊟υ⁻ι§υ⁰⁺ι⊟υ⟧υ

```

Update the array (note that the values are in reverse order from @tsh's version, allowing two of the values to be popped from the array, saving a byte).

```
Ｉ⌈↔υ

```

Output the maximum absolute value.

Alternative formulation, also 26 bytes, based on @GB's idea that the original array only needs a single zero and cyclic indexing will expand it to three values:

```
⊞υ⁰ＦＡ≔⟦⁺ι§υ¹⁻ι§υ²§υ⁰⟧υＩ⌈↔υ

```

Try it online! Link is to verbose version of code. Explanation:

```
⊞υ⁰

```

Push a zero to the predefined empty list.

```
ＦＡ

```

Loop over the input movements.

```
≔⟦⁺ι§υ¹⁻ι§υ²§υ⁰⟧υ

```

Update the list (this is back to the original order from @tsh's original Python answer).

```
Ｉ⌈↔υ

```

Output the maximum absolute value.

Previous 28-byte canvas-based answer using @Arnauld's adjusted square coordinates:

```
ＦＬθＭ§θι✳÷×⁴ι³≔⊘Σ↔⟦ⅈⅉ⁺ⅈⅉ⟧η⎚Ｉη

```

Try it online! Link is to verbose version of code. Explanation:

```
ＦＬθ

```

Loop over each step.

```
Ｍ§θι✳÷×⁴ι³

```

Make a movement in each direction in turn, but skipping northwest and southeast.

```
≔⊘Σ↔⟦ⅈⅉ⁺ⅈⅉ⟧η

```

Calculate the final distance as half the sum of the absolute values of the two coordinates and their sum.

```
⎚Ｉη

```

Reset the cursor and output the distance.

# Answer
> 3 votes
# JavaScript (ES6), 90 bytes

```
a=>a.map(n=>b+=n*~-(s="1221")[a+=n*~-s[d%6],++d%6],a=b=d=0)|(A=Math.abs)(a)+A(b)+A(a-b)>>1

```

Try it online!

---

# JavaScript (ES6), 63 bytes

Using the optimization suggested by xnor on tsh' answer.

```
a=>a.map(n=>[p,q]=[n-q,p+q],p=q=0)|Math.max(p,q,p+q,-p,-q,-p-q)

```

Try it online!

# Answer
> 3 votes
# , 62 bytes

```
function(x,p=0){for(i in x)p=p+i-(F=F+p);max(abs(c(p,F,p+F)))}

```

Try it online!

Approach based on xnor's comment on tsh's answer.

# Answer
> 2 votes
# Ruby, 58 bytes

```
->l{l.reduce(0){|s,x|[x+s[1],x-s[2],s[0]]}.map(&:abs).max}

```

Try it online!

Port of tsh's answer to Ruby

Starting with \[0,0,0\] encoded as (0), the first iteration of `reduce` will transform it automatically.

# Answer
> 2 votes
# 05AB1E, ~~16~~ 14 bytes

```
0ÐIv(2Fy+Š])Äà

```

Port of *@tsh*' top Python answer.
-1 byte thanks to *@Neil*, which also allowed a second byte to be saved

Try it online or verify all test cases.

**Explanation:**

```
0Ð            # Push three 0s, let's call these a,b,c
  I           # Push the input-list
   v          # Pop and loop over each item `y`:
    (         #  Negate the top item
     2F       #  Loop 2 times:
       y+     #   Add the current integer `y` to the top
         Š    #   Tripleswap x,y,z to z,x,y
              #  (after this inner loop, a,b,c is y+b,y-c,a)
   ]          # Close both loops
    )         # Wrap all three values into a list
     Ä        # Get the absolute values of each
      à       # Pop and push the maximum

```

# Answer
> 1 votes
# Python 3, 94, 90 bytes

```
def f(I):
 a=b=c=0
 for i in I:a,b,c=2*i-b,-i-c,-i-a
 return max(map(abs,(a-b,b-c,c-a)))/3

```

Try it online!

Old version

Uses barycentr-ish coordinates. Not 100% sure this is correct even though it passes all tests.

P.S.: I notice now that this is quite similar to @tsh's earlier answer.

P.P.S.: I've given up on this one; @tsh seems unbeatable.

# Answer
> 1 votes
# MathGolf, ~~14~~ 13 bytes

```
0∙êô,\ì+\?ß±╙

```

Port of *@tsh*' top Python answer.

Try it online.

**Explanation:**"

```
0∙            # Push three 0s, let's call these a,b,c
  ê           # Push the inputs as integer-list
   ô          # Foreach over these integers,
              # using 6 characters as inner code-block:
              #  (implicitly push the current loop-integer, let's call this y)
    ,         #  Subtract the second item from the top: y-c
     \        #  Swap the top two values on the stack
      ì+      #  Add the loop-integer `y`: b+y
        \?    #  Swap back, and tripleswap: a,y-c,b+y to b+y,y-c,a
          ß   # After the loop, wrap the three values into a list
           ±  # Get the absolute value of each
            ╙ # Pop and leave the maximum
              # (after which the entire stack is output implicitly as result)

```

# Answer
> 1 votes
# Rust, 101 bytes

```
|i|{let mut p=(0,0);for n in i{p=(n-p.1,p.0+p.1)}let(p,q)=p;vec![p,q,p+q,-p,-q,-p-q].drain(..).max()}

```

Try it online!

Port of @tsh's answer as well.

`error[E0658]: destructuring assignments are unstable` \>:(

# Answer
> 1 votes
# TypeScript Types, 397 bytes

```
//@ts-ignore
type a<T,K=keyof T>=T extends T?keyof T extends K?T:never:0;type b<T,P,N>=T extends[N,...infer T]?T:[P,...T];type c<U,L=a<U>>=[...L,...a<U extends U?L extends U?never:U:0>]extends[{},{},...infer X]?X["length"]:0;type M<A,T=[],U=[],V=[],F=0,B=1,N=[]>=A extends[infer Z,...infer C]?Z extends N["length"]?M<C,U,V,T,B,F>:M<A,b<T,F,B>,b<U,B,F>,V,F,B,[...N,0]>:c<[...T,1]|[...U,2]|[...V,3]>

```

Try It Online!

## Ungolfed / Explanation

```
// Filters a union of tuples for those with the shortest length
type Shortest<T, K = keyof T> = T extends T? keyof T extends K ? T : never : 0

// Increments numbers where e.g. 2 is represented as [Pos, Pos], 0 as [], and -3 as [Neg, Neg, Neg]
type Inc<T, Pos, Neg> =
  T extends [Neg, ...infer T]
    // If T is negative, remove one Neg from it
    ? T
    // Otherwise, add one Pos to T
    : [Pos, ...T]

type Main<Instructions, X = [], Y = [], Z = [], Pos=0, Neg=1, Travelled=[]> =
  Instructions extends [infer Distance, ...infer InstructionsTail]
    // If Instructions is non-empty
    ? Distance extends Travelled["length"]
      // If we've travelled the full distance of this instruction,
      // cycle XYZ, swap Neg & Pos (to reverse the sign of travel), and recurse
      ? Main<InstructionsTail, Y, Z, X, Neg, Pos>
      // Otherwise, increment X, decrement Y, and add one to Travelled
      : Main<Instructions, Inc<X, Pos, Neg>, Inc<Y, Neg, Pos>, Z, Pos, Neg, [...Travelled, 0]>
    // Otherwise, return the taxicab distance to our current position
    : Taxicab<[...X, 1] | [...Y, 2] | [...Z,3]>

// U will be passed in as [...X,1]|[...Y,2]|[...Z,3], so as to prevent merging in the union
type Taxicab<U, S = Shortest<U>> =
  // Concat the shortest with the second shortest and return their length - 2
  [...S, ...Shortest<U extends U ? S extends U ? never : U : 0>] extends [{}, {}, ...infer X] ? X["length"] : 0

```

# Answer
> 0 votes
# Wolfram Language (Mathematica), 49 bytes

```
Max@Abs@{s=Fold[{#2-#[[2]],Tr@#}&,{0,0},#],Tr@s}&

```

Try it online!

A port of @tsh's answer. Make sure to upvote that answer as well!

---
Tags: code-golf, hexagonal-grid
---


# Question
Title: AoCG2021 Day 7: Bathroom security goes wild
Part of **Advent of Code Golf 2021** event. See the linked meta post for details.

The story continues from AoC2016 Day 2, Part 2.

---

You finally figure out the bathroom code (on the weird diamond-shaped keypad) and open the bathroom door. And then you see another door behind it, with yet another keypad design:

For those who can't see the image above:

```
+-----+-----+
|\    |    /|
| \ 1 | 2 / |
|  \  |  /  |
| 0 \ | / 3 |
|    \|/    |
+-----+-----+
|    /|\    |
| 7 / | \ 4 |
|  /  |  \  |
| / 6 | 5 \ |
|/    |    \|
+-----+-----+

```

You're given a list of UDLR strings. Each string corresponds to one button. You start at the previous button (or button 0 at the beginning) and move to the adjacent button for each instruction, and press whatever button you're on at the end of each string. `U` means to go up, `D` down, `L` left, and `R` right, respectively. If there's no adjacent button at the given direction, you simply don't move.

Additional clarifications for some diagonal edges: For example, if you're at button 0, both U (up) and R (right) correspond to moving to button 1. The full set of rules are:

```
0, U or R -> 1  |  1, L or D -> 0
2, D or R -> 3  |  3, L or U -> 2
5, U or R -> 4  |  4, L or D -> 5
7, D or R -> 6  |  6, L or U -> 7

1, R -> 2  |  2, L -> 1
3, D -> 4  |  4, U -> 3
5, L -> 6  |  6, R -> 5
7, U -> 0  |  0, D -> 7

```

Any combination that does not appear in the table above results in no movement, e.g. `1, U` results in `1`.

If the instructions read as `["ULL", "RRDDD", "LURDL", "UUUUD"]`, the code is as follows:

```
Start at 0, U: 1, L: 0, L: 0 (nowhere to move) -> 0
Start at 0, R: 1, R: 2, D: 3, D: 4, D: 5 -> 5
Start at 5, L: 6, U: 7, R: 6, D: 6, L: 7 -> 7
Start at 7, U: 0, U: 1, U: 1, U: 1, D: 0 -> 0

```

So the code is `[0, 5, 7, 0]`.

Standard rules apply. The shortest code in bytes wins.

## Test cases

```
["ULL", "RRDDD", "LURDL", "UUUUD"] -> [0, 5, 7, 0]
["RRRR", "DLLUURR", "LDDRRUU"] -> [3, 2, 3]

```

# Answer
# JavaScript (Node.js), 66 bytes

```
a=>a.map(c=>c.map(c=>n+=9-((n-'RDL'.search(c)*2)%8*.4|0))|n%8,n=8)

```

Try it online!
> 8 votes

# Answer
# Ruby, ~~91 76~~ 74 bytes

```
->l{a=0;l.map{|x|x.bytes{|b|a+=321555525[z=a%8*4+b%5]-0xC45132A8[z]};a%8}}

```

Try it online!

### Notes:

* ASCII code of `U L D R` mod 5 is "0 1 3 2"
* `0x132A8C45` (or 321555525) is a bitmask: if the element in `a*4+b%5` is 1, then the button number must be increased by 1. If we shift the bitmap 12 bits to the right, a matching bit means button number decreased by 1 (and then wrap around with mod 8)
> 8 votes

# Answer
# Charcoal, ~~38~~ ~~37~~ ~~36~~ ~~34~~ 33 bytes

```
≔⁰ηＦθ«Ｆι≧⁺⊖÷⊕×³﹪⁻⊕⊗﹪℅κ¹⁵η⁸¦⁸ηＩ﹪η⁸

```

Try it online! Link is to verbose version of code. Explanation: Now inspired by @alephalpha's answer.

```
≔⁰η

```

Start on button 0.

```
Ｆθ«

```

Loop through each string.

```
Ｆι

```

Loop through each character.

```
≧⁺⊖÷⊕×³﹪⁻⊕⊗﹪℅κ¹⁵η⁸¦⁸η

```

The ordinals of the characters `DLUR` modulo 15 are `8, 1, 10, 7`. If you double this, add `1`, subtract the button number, and reduce modulo `8`, this results in a number which is less than `3` if the button should be decremented and greater than `4` if it should be incremented. The range `0..7` is converted into the range `-1..1` by tripling it, incrementing it, integer dividing by `8`, then decrementing it.

```
Ｉ﹪η⁸

```

Output the digit modulo 8. (This doesn't need to happen at the end of the previous step as there is already a modulo `8` operation in effect on its next use.)
> 7 votes

# Answer
# Pari/GP, 69 bytes

```
a->t=0;[[t=((t-i+=2)%8+3)*3\5+i|i<-Vec(Vecsmall(s))%15*2][#s]%8|s<-a]

```

Try it online!

Two observations:

* The ASCII code of `DLUR` is `[68, 76, 85, 82]`, which becomes `[8, 1, 10, 7]` when modulus 15, which in turn becomes `[0, 1, 2, 3]` when modulus 4.
* Going to the right, `[0, 1, 2, 3, 4, 5, 6, 7]` becomes `[1, 2, 3, 3, 4, 4, 5, 6]`, which is a part of OEIS sequence A057355: `a(n) = floor(3*n/5)`. There are many other sequences on OEIS, but this one seems to be the simplest. If your language has a one-byte built-in for the golden ratio, you may also use the sequence A060143: `a(n) = floor(n/φ)`.
> 6 votes

# Answer
# C, 126 bytes

```
f(s,n,c,l,z)char**s,*l;{z=48;for(c=0;c<n;){for(l=s[c++];*l;)z="10171020213322343545464577560766"[z*4-192+*l++%5];putchar(z);}}

```

Try it online!

Character ascii value modulo 5 yields:

```
U - 85%5 = 0
L - 76%5 = 1
R - 82%5 = 2
D - 68%5 = 3

```

In the string "10171020213322343545464577560766", each group of 4 characters corresponds to a key, and within such a group, the above numbers can index a specific character indicating the next key

Un-golfed:

```
//s: strings
//n: num strings
//c: string counter
//l: string character counter
//z: key number (as char)
f(s,n,c,l,z)
        char**s,*l;
{
        z=48;
        for(c=0;c<n;){
                for(l=s[c++];*l;)
                        z="10171020213322343545464577560766"[z*4-192+*l++%5];
                putchar(z);
        }
}

```
> 5 votes

# Answer
# Python 3.8 (pre-release), 115 bytes

Not even close to what tsh and alephalpha have created, but a nice straightforward python solution. I can save 5 bytes if I feed it bytes instead of str.

```
lambda l,y=0:[[[y:=[b'70345566',b'00125677',b'12334456',b'11233470'][ord(c)//7-9][y]-48for c in x],y][1]for x in l]

```

Try it online!
> 3 votes

# Answer
# 05AB1E, ~~32~~ 30 bytes

```
ÎvyÇv•”^'ζ–$!ǝá₃º8˜•8ôy5%èsè}=

```

-2 bytes by using the modulo-5 trick from *@GB*'s Ruby answer.

Outputs newline delimited. (Could have been 1 byte less if we would have been allowed to output the results with additional leading `0` for the starting position by using a cumulative left-reduce.)

Try it online or verify all test cases.

**Explanation:**

```
Î               # Push 0 and the input-list
 vy             # Pop and loop over each string of the input-list:
   Ç            #  Convert the current string to a list of codepoint-integers
    v           #  Loop over each of these integers `y`:
     •”^'ζ–$!ǝá₃º8˜•
               '#   Push compressed integer 11223470001256771233445670345566
       8ô       #   Split it into parts of size 8:
                #    [11223470,"00125677",12334456,70345566]
         y      #   Push the current codepoint `y`
          5%    #   Modulo-5 ([0,1,2,3] for "ULRD")
            è   #   Use it to 0-based index into the list
             s  #   Swap to get the current value
              è #   Use it to index into the integer, resulting in a digit
    }           #  After the inner loop:
     =          #  Print the intermediate result with newline (without popping)

```

See this 05AB1E tip of mine (*How to compress large integers?*) to understand why `•”^'ζ–$!ǝá₃º8˜•` is `11223470001256771233445670345566`.
> 3 votes

# Answer
# , 69 61 bytes

```
([:+/\#&>){0(],((8|]+]{(3 2 3#-i:1)|.~2*[){:))/@|.@,'RULD'i.;

```

Try it online!

* `(3 2 3#-i:1)` Generates the offsets for `'R'`:

```
1  1  1  0  0 _1 _1 _1

```

+ `|.~2*[` Rotate the required amount for `ULD`.
* `0...@|.@,'RULD'i.;` Prepare the boxed input for a single fold to calculate what we need: Flatten, append 0, reverse.

+ For the fold, we get the offset list based on step 1 above, index into that list using the current value (which starts at 0), add the result to the current value, and append the this new value to the running list. The current value is thus always the last item of the accumulator.
* `([:+/\#&>){` All the above gives us one long list of *every* intermediate value. So we take the lengths of each instruction block, scan sum them, and use that to index into the master list. This returns the final answer.
> 3 votes

# Answer
# Rust, 140 bytes

```
|i:&[&str]|{let(mut o,mut n)=(vec![],0);for s in i{for c in s.bytes(){let k=|n|321555525>>n%8*4+c as i32%5&1;n+=k(n)-k(n+3)+8}o.push(n%8)}o}

```

Try it online!

321555525 encodes movement information in its bits, both for increasing and decreasing the number:

```
+ DRLU -
0 0101 5
1 0100 6
2 1100 7
3 1000 0
4 1010 1
5 0010 2
6 0011 3
7 0001 4

```
> 2 votes

# Answer
# Whitespace, 179 bytes

```
[S S S N
_Push_n=0][N
S S N
_Create_Label_OUTER_LOOP][N
S S S N
_Create_Label_INNER_LOOP][S N
S _Duplicate_n][S N
S _Duplicate_n][S N
S _Duplicate_n][S N
S _Duplicate_n][T   N
T   S _Read_STDIN_as_char][T    T   T   _Retrieve_input_char][S N
S _Duplicate_input_char][S S S T    S T S N
_Push_10][T S S T   _Subtract][N
T   S T N
_If_0_Jump_to_Label_PRINT][S S S T  T   T   T   N
_Push_15][T S T T   _Modulo][S S S T    S N
_Push_2][T  S S N
_Multiply][S N
T   _Swap_top_two][T    S S T   _Subtract][S S S T  N
_Push_1][T  S S S _Add][S S S T S S S N
_Push_8][T  S T T   _Modulo][S S S T    T   N
_Push_3][T  S S N
_Multiply][S S S T  N
_Push_1][T  S S S _Add][S S S T S S S N
_Push_8][T  S T S _Integer_divide][S S S T  N
_Push_1][T  S S T   _Subtract][T    S S S _Add][S S S T S S S N
_Push_8][T  S T T   _Modulo][N
S N
S N
_Jump_to_Label_INNER_LOOP][N
S S T   N
_Create_Label_PRINT][S N
N
_Discard_duplicated_newline][T  N
S T _Print_n_as_integer_to_STDOUT][N
S N
N
_Jump_to_Label_OUTER_LOOP]

```

Letters `S` (space), `T` (tab), and `N` (new-line) added as highlighting only.
`[..._some_action]` added as explanation only.

Whitespace doesn't have lists, so input-strings are newline delimiter, with additional trailing newline so we know we're done. Outputs the digits without delimiter.

**Try it online** (with raw spaces, tabs and new-lines only).

### Explanation in pseudo-code:

Just like my Java answer, this uses the formula of @Neil's Charcoal answer:

$$a(n,c) = \left(n + \left\lfloor\frac{(((c\bmod{15})\times2-n+1)\bmod8)\times 3+1}{8}\right\rfloor-1\right)\bmod8$$ where \\$n\\$ is the previous digit, and \\$c\\$ is the codepoint of the current character.

```
Integer n=0
OUTER_LOOP:
  INNER_LOOP:
    Integer c = STDIN as character
    If(n == '\n'):
      Jump to PRINT
    c = c modulo-15
    c = c * 2
    c = c - n
    c = c + 1
    c = c modulo-8
    c = c * 3
    c = c + 1
    c = c integer-divided by 8
    c = c - 1
    n = n + c
    n = n modulo-8
    Jump to INNER_LOOP

PRINT:
  Discard newline c
  Print n as integer to STDOUT
  Jump to OUTER_LOOP

```
> 2 votes

# Answer
# Python 3.8 (pre-release), 83 bytes

```
lambda L,s=0:[[(s:=s-((2*"DRU".find(i)-~s&7)//3-1)%3+1&7)for i in l][-1]for l in L]

```

Try it online!

To determine the effect (forward/backward/no movement) of an instruction, this uses a lookup on the instructions `L,R,U,D` to rotate the keys such that the three keys which allow backward movement come first, the three forwards next and the two no-movement keys last. The key index is then floor divided by 3 and the three possible outcomes `0,1,2` mapped to `-1,1,0`
> 2 votes

# Answer
# Java 10, ~~115~~ 89 bytes

```
m->{int n=0;for(var a:m){for(var c:a)n+=((c%15*2-n+9)%8*3+1)/8-1;System.out.print(n%8);}}

```

Input as an array of character-arrays; output to STDOUT without delimiter.

-26 bytes porting *@Neil*'s Charcoal formula:

$$a(n,c) = \left(n + \left\lfloor\frac{(((c\bmod{15})\times2-n+9)\bmod8)\times 3+1}{8}\right\rfloor-1\right)\bmod8^{^{†}}$$ where \\$n\\$ is the previous digit, and \\$c\\$ is the codepoint of the current character.

*† The final modulo-8 could optionally be done later, which is what I do to save 2 bytes on parentheses.*

Try it online.

**Explanation:**

```
m->{                        // Method with character-array parameter and no return
  int n=0;                  //  Integer, starting at 0
  for(var a:m){             //  Loop over the character-arrays of the input:
    for(var c:a)            //   Inner-loop over the characters:
      n+=                   //    Increase the integer by:
         ((c                //     The codepoint of the character
         %15                //     modulo-15
         *2                 //     doubled
         -n                 //     minus the current value of the integer
         +9)                //     plus 9
         %8                 //     modulo-8
         *3                 //     tripled
         +1)                //     plus 1
         /8                 //     integer-divided by 8
         -1                 //     minus 1
    System.out.print(n%8);}}//   After the inner loop, output the integer modulo-8

```
> 1 votes

# Answer
# Perl 5, 84 bytes

```
$p=($p+(UR,R,RD,D,DL,L,LU,U)[$p]=~/$_/-(D,LD,L,UL,U,RU,R,RD)[$p]=~/$_/)%8for@F;say$p

```

Try it online!
> 1 votes

# Answer
# TypeScript Types, 215 bytes

```
//@ts-ignore
type M<T,P=0,A=[]>=T extends`${infer C}${infer T}`?C extends" "?M<T,P,[...A,P]>:M<T,[[1,1,7,0],[1,2,0,0],[2,3,3,1],[2,3,4,2],[3,4,5,5],[4,4,5,6],[7,5,6,7],[0,6,6,7]][P][{U:0,R:1,D:2,L:3}[C]],A>:[...A,P]

```

Try It Online!

## Ungolfed / Explanation

```
// Lookup table; first index is original position, second is 0123 or URDL, and value is final position
type Lookup = [[1,1,7,0],[1,2,0,0],[2,3,3,1],[2,3,4,2],[3,4,5,5],[4,4,5,6],[7,5,6,7],[0,6,6,7]];

type Main<Input, Pos=0, Code=[]> =
  // Get the first char of Input
  Input extends `${infer Char}${infer Rest}`
    ? Char extends " "
      // If Char is a space, add this position to the code
      ? Main<Rest, Pos, [...Code, Pos]>
      // Otherwise, consult the lookup table and continue
      : Main<Rest, Lookup[Pos][{U:0,R:1,D:2,L:3}[Char]], Code>
    // Input is empty return the code
    : [...Code, Pos]

```
> 1 votes

# Answer
# Wolfram Language (Mathematica), 76 bytes

```
Map[t=0;((t=⌊.6Mod[t-#,8]+1.8⌋+#)&/@Mod[2LetterNumber@#+2,22];t~Mod~8)&]

```

Try it online!

A port of my PARI/GP answer.
> 0 votes

---
Tags: code-golf, grid
---


title: AoCG2021 Day 8: Delivery Corrections

text:
# Question
Title: AoCG2021 Day 8: Delivery Corrections
Part of **Advent of Code Golf 2021** event. See the linked meta post for details.

The story continues from AoC2015 Day 3, Part 2. This challenge was kindly contributed by Wheat Wizard (Grain Ghost).

---

Santa is delivering presents to an infinite two-dimensional grid of houses. The delivery begins delivering a present to the house at an arbitrary starting location, and then moving along a predetermined path delivering a new present at every step of the path. Moves are always exactly one house to the north `^`, south `v`, east `>`, or west `<`.

However sometimes the notes giving the path have a few mistakes. Your job is to write a program that figures out how to correct these mistakes. We can't know exactly what mistakes were made but we do know that no house should ever receive more than 1 present. So we will just correct paths so that no house is visited more than once.

To correct a path we substitute a step with a different step. For example `>^<v` can be corrected to `>^>v`. Since we don't want to over-correct too much we will make the minimal number of corrections we can while reaching the desired result.

## Task

Given a string representing directions output the minimal number of corrections required before it visits no house more than once.

This is so answers will be scored in bytes.

## Test cases

```
>>v>>>vvv<<<^<v : 0
>>>>>><<<<<<< : 1
^^>>vv<< : 1
><> : 1
><>< : 2
^<v>^<v> : 2
^^>>vv<^^ : 1  (suggested by Yousername)
><<^<vv>>>>^^< : 2  (suggested by tsh)

```

# Answer
> 7 votes
# Python 3, 110 bytes

```
f=lambda a,v=[0],l=1:a and min(f(a[1:],[v[0]+1j**(ord(d)%11)]+v,l+1)+(a[0]!=d)for d in'^>v<')or(l-len({*v}))*l

```

Try it online!

Simply find out all valid path with same length. Seems to be \\$O\left(4^n\right)\\$. And it will timeout for any (not so) large inputs. Yet another `mod 11` trick from previous days.

Thanks Kevin Cruijssen for -6 bytes.

# Answer
> 5 votes
# Pari/GP, 118 bytes

```
s->i=#s;forvec(v=[[0,3]|k<-l=Vec(Vecsmall(s))%11],#Set(Vec(Ser([I^c|c<-l+v])/(1-x),m=#l+1))-m||i=min(i,#[1|a<-v,a]));i

```

Try it online!

Very slow. Loops over all the commands with the given length, filters out the correct ones, and finds the minimal Hamming distance.

# Answer
> 2 votes
# Python3, 291 bytes:

```
y=lambda j,n,m:{'v':(n-1,m),'>':(n,m+1),'<':(n,m-1),'^':(n+1,m)}[j]
f=lambda p,s=(0,0),c=[(0,0)],l=[]:0 if not p else(k:=((r:=y(p[0],*s))in c))+(min(f(j+p[1:],[r,s][k],c+[[s],[]][k],l+[p[0]])for j in g)if(g:=[[''],[u for u in'v<>^'if y(u,*s)not in c]][k])else f(l.pop()+p[1:],c[-1],[r]+c,l))

```

A rather unelegant solution, but non-brute force, with basic backtracking.

Try it online!

# Answer
> 2 votes
# Rust, 304 bytes

```
|i:&str|{fn d(v:&mut Vec<[i64;2]>,c:&[u8])->u64{b"^v<>".iter().take(c.len()*4).map(|i|{let mut x=v[v.len()-1].to_owned();x[*i as usize%3&1]+=1-(*i as i64%5&2);if v.contains(&x){u64::MAX-1}else{v.push(x);let r=(*i!=c[0])as u64+d(v,&c[1..]);v.pop();r}}).min().unwrap_or(0)}d(&mut vec![[0,0]],i.as_bytes())}

```

Try it online!

I really need some tricks that'd let me use closures recursively.

Nothing clever going on here, just brute forcing every possible move.

Ungolfed:

```
|i: &str| {
    fn deliver(visited: &mut Vec<[i64; 2]>, cmds: &[u8]) -> u64 {
        b"^v<>"
            .iter()
            .take(cmds.len() * 4) // stop if cmds is empty
            .map(|i| {
                let mut new = visited[visited.len() - 1].to_owned();
                new[*i as usize % 3 & 1] += 1 - (*i as i64 % 5 & 2); // same trick as day 1
                if visited.contains(&new) {
                    u64::MAX - 1
                } else {
                    visited.push(new);
                    let result = (*i != cmds[0]) as u64 + deliver(visited, &cmds[1..]);
                    visited.pop();
                    result
                }
            })
            .min()
            .unwrap_or(0)
    }
    deliver(&mut vec![[0, 0]], i.as_bytes())
}

```

# Answer
> 2 votes
# , ~~168~~ ... 121 bytes

Or **\>=4.1, 107 bytes** by replacing two `function` occurrences with `\`s.

*-many bytes thanks to @Dominic van Essen and @Giuseppe.*

```
function(s,a=combn(rep(5:8,l),l<-sum(s|1)))min(colSums(a[,apply(a,2,function(x)all(table(c(0,cumsum(1i^x)))<2))]!=s%%11))

```

Try it online!

~~More AoC than AoCG, but I'm posting to get things going here in .~~ The golf appeared thanks to @Dominic van Essen and @Giuseppe.

Input as a vector of character codes.

Brute force solution - generates all paths of length equal to input's length, checks which are valid (no intersections) and returns where the difference to input is minimal.

Go check also @Dominic's non-brute-force solution.

# Answer
> 2 votes
# , ~~202~~ 197 bytes

*Edit: -5 bytes thanks to bug-spotting & suggestions from pajonk*

```
f=function(s,n=0,`[`=sapply)`if`(any(s[function(x)all(table(c(0,cumsum(1i^(utf8ToInt(x)%%11))))<2)]),n,f(s[function(x)outer(1:(l=nchar(x)),c("^",">","v","<"),Vectorize(`substr<-`),x=x,sto=l)],n+1))

```

Try it online!

Already outgolfed by pajonk, but posting to keep things going here in ...

Non-brute-force solution, recursively makes increasing numbers of edits until a solution is found.

# Answer
> 2 votes
# Ruby, ~~140 ...~~ 120 bytes

```
->s{(0..k=s.size*4).find{|w|(0..k**w).any?{|q|z=s.bytes;w.times{z[q%k/4]=q;q/=k};([a=0i]|z.map{|x|a+=1i**x%=19})[k/4]}}}

```

Try it online!

# Answer
> 1 votes
# 05AB1E, 43 bytes

```
">^<v"©Igãʒ2Å0šÅ»®¦®¨‚sδkY0:+}DÙQ}.Lß

```

Brute-force approach. Generates all possible command-paths of the given input-length using the cartesian product, filters to keep paths where all visited houses are unique, calculates the Hamming difference of each remaining path with the input, and outputs the smallest one.

Try it online or verify some of the smaller inputs.

**Explanation:**

```
">^<v"            # Push string ">^<v"
      ©           # Store it in variable `®` (without popping)
       Ig         # Push the input-length
         ã        # Get the cartesian product to generate all possible paths of a
                  # length equal to the input
ʒ                 # Filter this list of paths by:
 2Å0              #  Push [0,0]
    š             #  Implicitly convert the path to a list of characters,
                  #  and prepend the [0,0]
     Å»           #  Cumulative left-reduce:
       ®¦         #   Push `®` minus its first character: "^<v"
       ®¨         #   Push `®` minus its last character: ">^<"
         ‚        #   Pair them together: ["^<v",">^<"]
          s       #   Swap so the current character of the reduce is at the top
           δ      #   Map over the pair using this character as argument:
            k     #    Get its 0-based index (or -1 if it isn't present)
             Y0:  #   Replace the 2 with a 0
                + #   Add it to the current coordinate-pair
      }DÙQ        #  After the reduce, check if all coordinates are unique:
       D          #   Duplicate the list of integer-pairs
        Ù         #   Uniquify it
         Q        #   Check if the list of integer-pairs are still the same
}εø€Ë_O}          # After the filter, calculate the Hamming distance of each
                  # remaining path with the (implicit) input:
 ε     }          #  Map over each remaining path:
  ø               #   Create character-pairs with the (implicit) input-string at
                  #   the same positions
   €Ë_            #   For each pair: check that they are NOT the same
      O           #   Sum to get the amount of differences
        ß         # Pop and push the minimum
                  # (after which it is output implicitly as result)

```

Minor note: `®¦®¨‚sδkY0:` will result in `[[-1,0],[0,1],[1,0],[0,-1]]` for `>^<v` respectively. So the `>`/`<` travel in the opposite direction: `>` travels towards the left and `<` towards the right. This is irrelevant for calculating the result however.

# Answer
> 1 votes
# Charcoal, ~~80~~ 78 bytes

```
≔⟦⟦⁰ω⭆Ｓ⌕^>v<ι⟧⟧θＦθ¿§ι²«Ｆ§ι¹✳⁻²⊗κ¹ＦＩ⌕ＡＫＶω⊞θ⟦⁺§ι⁰¬⁼κ§§ι²¦⁰⁺§ι¹κ✂§ι²¦¹⟧⎚»⊞υ§ι⁰Ｉ⌊υ

```

Try it online! Link is to verbose version of code. Brute force so each extra input character slows the code down by a factor of about 3. Explanation:

```
≔⟦⟦⁰ω⭆Ｓ⌕^>v<ι⟧⟧θ

```

Start a breadth first search of all positions with the same length as the input with no corrections yet, no steps taken, and the input converted into the desired path in a nicer format for Charcoal. (Even switching to `urdl` input would save ~~5~~ 3 bytes.)

```
Ｆθ

```

Loop over all the positions.

```
¿§ι²«

```

If there are more steps to take:

```
Ｆ§ι¹✳⁻²⊗κ¹

```

Output the steps so far on to the canvas.

```
ＦＩ⌕ＡＫＶω

```

Loop through available directions.

```
⊞θ⟦⁺§ι⁰¬⁼κ§§ι²¦⁰⁺§ι¹κ✂§ι²¦¹⟧

```

Increment the number of corrections if this step wasn't the desired step, and save that with the augmented list of steps taken and suffixed list of desired steps to the search list.

Clear the canvas ready for the next position or the result.

```
»⊞υ§ι⁰

```

Otherwise, save the number of corrections.

```
Ｉ⌊υ

```

Output the minimum number of corrections needed.

# Answer
> 1 votes
# TypeScript Types, 450 bytes

```
//@ts-ignore
type a<T,A=1,B=0>=T extends[A,...infer X]?X:[B,...T];type b<S,P=[[],[]],V=0>=P extends V?0:S extends`${infer A}${infer S}`?b<S,{">":[a<P[0]>,P[1]],"<":[a<P[0],0,1>,P[1]],v:[P[0],a<P[1]>],"^":[P[0],a<P[1],0,1>]}[A],P|V>:1;type c<S,N,T="",O="v"|"^"|"<"|">">=N extends[0,...infer M]?S extends`${infer C}${infer R}`?O extends C?c<R,N,`${T}${C}`>:c<R,M,`${T}${O}`>:never:`${T}${S}`;type M<S,N=[]>=1 extends b<c<S,N>>?N["length"]:M<S,[...N,0]>

```

Try It Online!

## Ungolfed / Explanation

```
// Increments a number represented where e.g. 2 is [Pos, Pos], 0 is [], and -1 is [Neg]
type Inc<T, Neg=1, Pos=0>=T extends[Neg,...infer X]?X:[Pos,...T];
// Decrements
type Dec<T>=Inc<T,0,1>

// Returns 1 if Str is valid, or 0 otherwise
// Implicitly maps over unions in Str
// Visited is a union of positions; it's initialized to 0 instead of never for byte-saving
type Check<Str, Pos = [[], []], Visisted = 0>=
  Pos extends Visisted
    // If Pos is in Visisted, return 0
    ? 0
    // Otherwise, take the first character of Str
    : Str extends `${infer Dir}${infer Rest}`
      ? Check<
        Rest,
        // Move Pos according to Dir
        {
          ">": [Inc<Pos[0]>, Pos[1]],
          "<": [Dec<Pos[0]>, Pos[1]],
          "v": [Pos[0], Inc<Pos[1]>],
          "^": [Pos[0], Dec<Pos[1]>],
        }[Dir],
        // Add Pos to Visited
        Pos | Visisted
      >
      // Str is empty; the string is valid
      : 1

// Return all strings where N characters are mutated
type MutateN<Str, N, Acc="", Chars = "v" | "^" | "<" | ">"> =
  N extends [0, ...infer M]
    // If N > 0, get the first character of Str
    ? Str extends `${infer Char}${infer Rest}`
      // Map over the Chars union:
      ? Chars extends Char
        // If this element of Chars is Char, don't mutate this character
        ? MutateN<Rest, N, `${Acc}${Char}`>
        // Otherwise, mutate this character and decrement N
        : MutateN<Rest, M, `${Acc}${Chars}`>
      // Str is empty, so we can't mutate N more characters; return never
      : never
    // Otherwise, return Acc + Str
    :`${Acc}${Str}`

type Main<Str, N=[]> =
  1 extends Check<MutateN<Str, N>>
    // If any of the strings where N chars are mutated are valid, return N
    ? N["length"]
    // Otherwise, check N + 1
    :Main<Str, [...N, 0]>

```

# Answer
> 0 votes
# Ruby, ~~197~~ ~~194~~ ~~192~~ 187 bytes

```
->i{c=[0]*(s=i.size);loop{*a=0i;b=i.bytes.map{|b|b%13};(c|c).map{|c|b[c/4]+=c};b.map{|b|a<<a[-1]+1i**b};a==a|a&&break;c[0]+=1;s.times{|j|c[j]/4>=s&&c[j,2]=[0,c[j+1]+1]}};c.count{|c|c!=0}}

```

Array `c` represents possible changes. Each element — one change such that `c[...] / 4` is the position and `c[...] % 4` is the change itself. The algorithm increments elements in the array until it finds the array that makes positions stay unique. Theoretical maximum of errors is the size of input.

Positions are represented by the array `a` of complex numbers. Conveniently `1i ** N` represents rotation, so we can just add complex numbers and push them to the array to see the path.

The trick with `b%13` as to have a rotating order of pointers («\<\>^v» is bad but «^\>v\<» is good). `mod 13` makes it so that:

```
"<v>^".bytes.map { |b| b % 13 % 4 } == [0, 1, 2, 3]

```

Examples added to the TIO. Thanks to G B for help!

Try it online!

# Answer
> 0 votes
# Wolfram Language (Mathematica), 107 bytes

```
-Max[Count@4/@Select[Tuples[Range@4,l=Length[s=ToCharacterCode@#~Mod~11]],0!=##&@@Accumulate[I^(s+#)]&]]+l&

```

Try it online!

There is a built-in for Hamming distance, but its name is `HammingDistance`, much longer than calculating it manually.

---
Tags: code-golf, grid
---