-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7c82c87
commit 4ac0ead
Showing
10 changed files
with
1,593 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
import re | ||
from functools import cached_property | ||
from math import inf | ||
from itertools import count, permutations | ||
from copy import deepcopy | ||
|
||
|
||
class Valve: | ||
def __init__(self, name, flow_rate, connected_valves): | ||
self.name = name | ||
self.flow_rate = flow_rate | ||
self._connected_valves = connected_valves | ||
|
||
@cached_property | ||
def connected_valves(self): | ||
return [all_valves[valve] for valve in self._connected_valves] | ||
|
||
def __repr__(self): | ||
return f"Valve({self.name}, {self.flow_rate}, {self._connected_valves}" | ||
|
||
@cached_property | ||
def distances_to_working_valves(self): | ||
num_valves = len(all_valves) | ||
distances = {self.name: 0} | ||
current_valves = [self] | ||
for distance in count(start=1): | ||
new_valves = [] | ||
for current_valve in current_valves: | ||
for connected_valve in current_valve.connected_valves: | ||
if connected_valve.name in distances: | ||
continue | ||
distances[connected_valve.name] = distance | ||
if len(distances) == num_valves: | ||
break | ||
new_valves.append(connected_valve) | ||
else: | ||
continue | ||
break | ||
else: | ||
current_valves = new_valves | ||
continue | ||
break | ||
return {valve.name: distances[valve.name] for valve in working_valves} | ||
|
||
|
||
all_valves = {} | ||
working_valves = [] | ||
|
||
line_re = re.compile( | ||
r"Valve (?P<name>\w+) has flow rate=(?P<rate>\d+); tunnels? leads? to valves? (?P<valves>.+)") | ||
|
||
start = None | ||
for line in open("2022_16_valves_input.txt"): | ||
match = re.match(line_re, line) | ||
name = match.group('name') | ||
flow_rate = int(match.group('rate')) | ||
connected_valves = match.group('valves').split(', ') | ||
valve = Valve(name, flow_rate, connected_valves) | ||
all_valves[name] = valve | ||
if name == 'AA': | ||
start = valve | ||
if flow_rate > 0: | ||
working_valves.append(valve) | ||
|
||
|
||
def calculate_route_pressure_release(start, route): | ||
route_pressure = 0 | ||
current_valve = start | ||
remaining_time = 30 | ||
for next_valve in route: | ||
travel_time = current_valve.distances_to_working_valves[next_valve.name] | ||
remaining_time -= travel_time | ||
valve_turn_time = 1 | ||
remaining_time -= valve_turn_time | ||
if remaining_time <= 0: | ||
break | ||
valve_total_pressure = next_valve.flow_rate * remaining_time | ||
route_pressure += valve_total_pressure | ||
return route_pressure | ||
|
||
|
||
greatest_flow_route = sorted( | ||
working_valves, key=lambda x: x.flow_rate, reverse=True) | ||
|
||
|
||
def nearest_route(start): | ||
visited = set() | ||
current_valve = start | ||
if start in working_valves: | ||
visited.add(start.name) | ||
yield start | ||
while True: | ||
next_valve_name, distance = min(((name, distance) for (name, distance) in current_valve.distances_to_working_valves.items( | ||
) if name not in visited), default=(None, None), key=lambda x: x[1]) | ||
if next_valve_name is None: | ||
return | ||
visited.add(next_valve_name) | ||
current_valve = all_valves[next_valve_name] | ||
yield current_valve | ||
|
||
|
||
greatest_flow_pressure = calculate_route_pressure_release( | ||
start, greatest_flow_route) | ||
nearest_route_pressure = calculate_route_pressure_release( | ||
start, nearest_route(start)) | ||
best_pressure = 0 # max(greatest_flow_pressure, nearest_route_pressure) | ||
|
||
|
||
def calculate_best_route(valve, route): | ||
global best_pressure | ||
# get the next valve options | ||
next_valve_options = [(name, distance) for (name, distance) | ||
in valve.distances_to_working_valves.items() if name not in route['visited']] | ||
if not next_valve_options: | ||
if route['route_pressure'] > best_pressure: | ||
best_pressure = route['route_pressure'] | ||
print(route['visited_list']) | ||
return | ||
for name, distance in next_valve_options: | ||
next_route = deepcopy(route) | ||
next_valve = all_valves[name] | ||
# travel there | ||
next_route['remaining_time'] -= distance | ||
# turn the valve | ||
next_route['remaining_time'] -= 1 | ||
if next_route['remaining_time'] <= 0: | ||
if next_route['route_pressure'] > best_pressure: | ||
best_pressure = next_route['route_pressure'] | ||
print(next_route['visited_list']) | ||
return | ||
next_route['route_pressure'] += next_valve.flow_rate * \ | ||
next_route['remaining_time'] | ||
next_route['visited'].add(next_valve.name) | ||
next_route['visited_list'].append(next_valve.name) | ||
next_route['visited_list'].append( | ||
next_valve.flow_rate * next_route['remaining_time']) | ||
# calculate the next step | ||
calculate_best_route(next_valve, next_route) | ||
|
||
|
||
initial_route = { | ||
'visited': set(), | ||
'visited_list': [], | ||
'route_pressure': 0, | ||
'remaining_time': 30 | ||
} | ||
|
||
calculate_best_route(start, initial_route) | ||
|
||
print(best_pressure) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
Valve EG has flow rate=21; tunnels lead to valves WZ, OF, ZP, QD | ||
Valve OR has flow rate=0; tunnels lead to valves QD, CR | ||
Valve VO has flow rate=0; tunnels lead to valves FL, OY | ||
Valve BV has flow rate=0; tunnels lead to valves AA, KK | ||
Valve OF has flow rate=0; tunnels lead to valves EJ, EG | ||
Valve YZ has flow rate=0; tunnels lead to valves EL, AW | ||
Valve EL has flow rate=16; tunnels lead to valves YZ, RD | ||
Valve EJ has flow rate=0; tunnels lead to valves YI, OF | ||
Valve FM has flow rate=0; tunnels lead to valves VX, FX | ||
Valve FL has flow rate=22; tunnels lead to valves VO, FH | ||
Valve QD has flow rate=0; tunnels lead to valves OR, EG | ||
Valve XC has flow rate=0; tunnels lead to valves UA, GV | ||
Valve WZ has flow rate=0; tunnels lead to valves FH, EG | ||
Valve AT has flow rate=0; tunnels lead to valves FX, OZ | ||
Valve MZ has flow rate=0; tunnels lead to valves UA, YI | ||
Valve WI has flow rate=0; tunnels lead to valves OH, WW | ||
Valve YD has flow rate=0; tunnels lead to valves OZ, WW | ||
Valve QX has flow rate=0; tunnels lead to valves OY, YI | ||
Valve AA has flow rate=0; tunnels lead to valves BV, ZE, PE, XL | ||
Valve VX has flow rate=0; tunnels lead to valves FM, GQ | ||
Valve VN has flow rate=0; tunnels lead to valves TU, OQ | ||
Valve RD has flow rate=0; tunnels lead to valves OY, EL | ||
Valve QR has flow rate=0; tunnels lead to valves QQ, OZ | ||
Valve CD has flow rate=0; tunnels lead to valves WW, RJ | ||
Valve VA has flow rate=20; tunnel leads to valve DE | ||
Valve RJ has flow rate=0; tunnels lead to valves CR, CD | ||
Valve UA has flow rate=19; tunnels lead to valves XC, MZ, KY | ||
Valve WW has flow rate=4; tunnels lead to valves YD, PE, WI, DY, CD | ||
Valve MC has flow rate=0; tunnels lead to valves ZP, XY | ||
Valve XY has flow rate=24; tunnel leads to valve MC | ||
Valve FH has flow rate=0; tunnels lead to valves FL, WZ | ||
Valve DE has flow rate=0; tunnels lead to valves VA, FX | ||
Valve DY has flow rate=0; tunnels lead to valves WW, YI | ||
Valve FX has flow rate=14; tunnels lead to valves DE, FM, AT, OQ | ||
Valve UU has flow rate=0; tunnels lead to valves AR, AW | ||
Valve OY has flow rate=13; tunnels lead to valves RD, VO, AR, GV, QX | ||
Valve CS has flow rate=0; tunnels lead to valves MG, OZ | ||
Valve KY has flow rate=0; tunnels lead to valves UA, AW | ||
Valve KK has flow rate=0; tunnels lead to valves BV, TU | ||
Valve GQ has flow rate=18; tunnel leads to valve VX | ||
Valve ZV has flow rate=0; tunnels lead to valves YI, LS | ||
Valve QQ has flow rate=0; tunnels lead to valves CR, QR | ||
Valve AW has flow rate=25; tunnels lead to valves YZ, KY, UU | ||
Valve OH has flow rate=0; tunnels lead to valves WI, TU | ||
Valve CR has flow rate=8; tunnels lead to valves OR, ZE, RJ, LS, QQ | ||
Valve TU has flow rate=7; tunnels lead to valves MG, VN, OH, KK | ||
Valve ZP has flow rate=0; tunnels lead to valves EG, MC | ||
Valve AR has flow rate=0; tunnels lead to valves UU, OY | ||
Valve OZ has flow rate=10; tunnels lead to valves YD, XL, CS, AT, QR | ||
Valve GV has flow rate=0; tunnels lead to valves XC, OY | ||
Valve PE has flow rate=0; tunnels lead to valves WW, AA | ||
Valve ZE has flow rate=0; tunnels lead to valves AA, CR | ||
Valve XL has flow rate=0; tunnels lead to valves OZ, AA | ||
Valve YI has flow rate=15; tunnels lead to valves QX, MZ, EJ, DY, ZV | ||
Valve OQ has flow rate=0; tunnels lead to valves FX, VN | ||
Valve MG has flow rate=0; tunnels lead to valves TU, CS | ||
Valve LS has flow rate=0; tunnels lead to valves CR, ZV |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import itertools | ||
|
||
tetris_pieces = itertools.cycle([ | ||
{(0, 0), (1, 0), (2, 0), (3, 0)}, | ||
{(1, 0), (0, 1), (1, 1), (2, 1), (1, 2)}, | ||
{(0, 0), (1, 0), (2, 0), (2, 1), (2, 2)}, | ||
{(0, 0), (0, 1), (0, 2), (0, 3)}, | ||
{(0, 0), (1, 0), (0, 1), (1, 1)}, | ||
]) | ||
|
||
jets = itertools.cycle(open("2022_17_tetris_input.txt").read()) | ||
|
||
for tetris_piece in itertools.islice(tetris_pieces, 12): | ||
print(tetris_piece) | ||
|
||
for jet in itertools.islice(jets, 12): | ||
print(jet) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
><<<>><><><<<><<<<>>><>>>><<<<>>><<<>>>><>><><<>>><<<<><<>>><>><><>>><<>>><<<>><<<<>><<<>><<<><<<<>>>><<>>><<<><<>>><<>><<><<>><<<<>><<>>>><<<<>>><<<>>>><>>><<><<<<>>>><<>><<>>>><><<><<><<<<>>><<<<>>>><<<<>>>><<>><>>>><<<<>>><<<<>><<>>><>><>><<<<>>><<<><>>>><<<<><<>>><<<<>><<<<>>>><>>><<>><>>><>>>><<<<>><<<>>><>><<><<<>>><<>><<<><<>><<<>><<<<>>><<>><>><<><>>>><<<<><<<<>>>><<<>>><>><<<<>>><<><<>>>><<<><<<<>>><<<>>>><>>>><<<<>>><<<<>><<><<<<>>><<<<>>><>>>><<<<><<>><<<<><<<<>>>><><<>><>>><<>>>><<><><<>>>><>>><>><<<>>>><<>><<><<>><<<<>>><>><<<<>>><<>>><<<<>>>><<<>>><<<<>>>><<<>>>><<<<>>><<><<<>><<>>><>>>><<>><<>>><<<<>>>><<<>>>><<>>><<>><<<<>>><<<<>>><<<<>>><>>>><<<<>>>><<><<<<>>><<<<>><<<<>>>><>>>><>><>>>><<>>><>>>><<<<>>>><>>>><>>>><>>><<>>>><<<>>>><<>>><<>><<<>><><<><<>>>><<<<>><<>>><<<<>>>><<<>>>><<<<>><<<>>><>><<<<><>>><>>>><<>>>><<<<>><<>>><<<>><<>>>><>><>>><<>>>><<<>><<<<><<<><<>>>><<<><>>><<<<>>>><<<>>><>><<<<>>><<>>>><<<<><<>>>><<<><<<<>><>><<><<>><<>>>><<><<<<>>><<><>><<>><>>>><<>>>><>>>><>>><<<<>>><>>><<>><<>>><<>>><<<>>>><<>>><>>><<<>><<<<>>><<>>>><<<<>><>>>><>>>><<<<><<<><><>><<<>><<<><<<<><<>>>><<<>>>><<<>>><<<<>>><<<>><><<<>>>><<<<>>>><<>><><>><<<><<<><><<<>>>><>>>><<>>>><<<<>>><>>>><>>>><<<><<<><<<<>>>><<<<>><<<>>><><<<<>><<<<>>>><<>>>><<><<<>>><>>>><<<><>><<<<>>>><<<>>>><<<><<<<>><<<<><>>><<<<><<<<>>><<<>><<<<>><>>>><<<<>><<>>>><<<>>>><<<<><<<<>>><<<>>>><>>>><<<<>><<<>>><<>><<>>>><<><<<<>>>><<<>>><<<>><<<>>>><>>>><>>><<>>>><<>><<<<>>><<<>><><<><<<<><<>>>><<<<>>><<<<>>><<>>>><<><<<<><<<>><>><<<>>>><<<>>>><<>>>><<<<>>>><><<<<><<><<<>>><><<<<><<>><<<>><<>>><><><<<>>><>>>><<<>><<<>>>><<><<<><<><><<<<>><<<<>>><>>><<><<<<>><<<>><<<<>><<<<><<<<><<<<>><>>>><<<>>><<<<><<<<>>>><<<>><<<<>>><<<><<<<>>><>>>><<>>><<>>><>>>><<>>>><>>>><<<>>>><<<<><<<<>><><<>>>><<>>><<<><>><<<<><><<<>>>><<>><>>>><<>><>><>>><<>>><>><<<<>>>><<><<<><<<>>><><<<<><>>>><<<>>>><>>>><<<><<<<>>>><<<<>><<<>>><<<<>>>><<<>>>><<<<>>><>><<<><<<<><<<<><<<<>><<><<<>>>><<><<<><><<<>>><>>><<><<<<>>><<<<>>>><<<<>>>><<<<>><>><<<<>>>><<<<>>>><<<<><<>>>><><<<<>>>><<<<>>>><<<<>>><<<<>>>><<>><<<>>><<><><<>>><<<<>>><<>>>><<<<>>>><<<<>>>><<<<>>>><<<<>><<<<><><<<>>><<<<><<>>>><<<<>><>>><<<><>><<>>><<<<>>><<<>>><<<<>><>>>><><>>><<<>>>><<<>>><>>>><<<<>><<<><<><<><><<>>>><<><<<><>><<<><>><<<<><<<>>>><>><<>>>><<>>>><<<<>>>><<<>>><<><<>><<<<>>>><><<>><<>>><<<<>><<<<>><<<>>><>>><<>>>><<<<>>><<<<>><<<><<<>><<>>>><<><<<<>>>><<<<>>>><>>><<><><>>><<<<>><<<<>>><<><<<<><>><<>>>><<>>><<<><<>>><>><<<>>><>><<>>><>>>><>>>><<<>><<<>>>><><<<>>>><<><<<><>>>><><>><<<<>>><><<<<>>>><<>>><<<><<<<>><><>>><>>>><<>><<<<>><<><<>>>><><<<<>>>><><<>><<<<>>>><<<>>><<<<><<<><<><><<<<>><<<><><<<><<><>>>><>><<>>>><<><<<>>><<<<>><<<>><>><><<<>>>><<>><<<<>><<<<>><>>>><><<<<><<<<>>><>>><<>>>><<<>>>><<><<>><<<><<<<>><<<<>>>><<<><>>>><><<>>><>>>><<<><<>>><>>><<<>>><<<<><>><<>>>><<<><<<>><<<<>><>>><<<>><<><<><<<<>>>><<>>><<>>>><<<<>><<><<<<>>><<>>>><<<<>>><<<>><>>><<<>><><>>>><<<<>><<>><>>>><>>><<<<>><<<><<<>>>><<<<>>><<>><<<<>>>><><<>>>><<>>>><<<><<>>>><<>>><<>>>><<<>><<<>>>><<<<>>><>>><<<><<>>>><<>>>><<>>>><<<><<<><<<>>><<<<>><<<<>>>><<><>><<><><<>>>><<<<>><<<<><<>>><<<><<>>>><<<><<>>>><<<><<<<>>><<<>>><<><>><>><<<<><<<>>><<><<>>><<><<<>>>><<<<>>>><<<>>>><<>>><<<>>><<<<>>><>>>><<<><<<>>>><<<<><<><<>>><<<<>>><>><><<<<>>><>>><<>>>><<>><<<<>><<<>>>><><>>>><<<>><>>>><<<>>><<<<>><>>><<>>><<><<>><><<<>>><><<<>><<<>>>><<<<>>><<<<>><>>>><<<>>><<<<>>><>><<>>><<><<<><<<>><<<><<<>>><>><<<<>><<><<>>><<<>>>><<>>><<<<>><<<<>><>>><<<>><<><<>>>><<<><<<<>>><<<<>>><<<>>><<<>>><<<<>><<>>><><<><<<<>><<<<>>>><<<<><<>>><>>><<><<>>>><><<<>><<<><<<<>>>><<<<><<<<><<>>>><<<><<<<>>>><><<<>>>><><>>>><<<<>><><<<><>>>><<>>>><<<<>>><<<>>>><<<><>><>>><<<><<<>><<><<<<>><<<<>>>><<<<>><<<>>>><<>>>><<>>>><>>><<<><<<>>>><<>>><<<<><<>>><<<<>>><<<<>>><<><<<>>><>>><<>>>><<<<>><<<<>><<<<><>>>><<<<><>>>><<<>>><<>>>><<<<><<><>><<<>><<<<>>><<><<<<>><>>><<<<>>><<<<>>><<><>><>><<<>>><<>>>><<>>><<<>>>><<<<>>>><<<<><<<<><>>><<>>>><<<>><<>>><<>>>><<<<><>>>><<<<>><<<>>><<<<><><><<><<>><>>>><<>>>><><>>>><<<<><<<<>><<<>><<<<>>><<<>>>><<<><<>>><<>>><<<<>>>><><<<<>><<<><<<<>>><<>>>><>>><<>>><<<><<>><<<<>>>><<<>>><<<><>>>><<>><<<<>>>><<<<>>><<<<>><<>><<<>>>><<<<>><<<>>><<><<>><<<<>><<<<>><<<>>>><<<>><<>>>><<>>>><<>>>><>>>><><>><>><<><>>><<<<>>>><>><<><>>>><<>><<>><<<><<><<<<>><>><<<>><<<<>>>><<<<><><<>>>><>>>><<>>>><<><<>>><<<><<>><<>><<<<>><<>>><<<<><<>>><>>><<<<>><>>><<<><<<>>>><<<><<<>>>><<<>>>><<>><>><<>>><<<<>>><<<>><>>>><<<><>><>>>><>>><<>>>><<<<>>>><<>>><<<>><<<>>><<<>>>><<<<>><<<<>>><<<<>><><>><<<>>>><<>>><<<><<>><>><<>>>><>>>><<><<><<>>>><>>><<<><<>>><>><<<><<<<><<<>><<<>><<<>><<>><<<<>><>><<><<<><<<<>><>><<<>><>>><<>><<><>>>><<<>><>>><<<<>>><<>>><>><<>><<>>>><<>>>><><<<>><<<>>>><<<<>>><<<>>><<<<>>>><<>>><>>>><<<><>>>><>>>><<>><>><<<<><>><<><>><<><>><<<<><<<>>>><<<>>>><<>>>><<><><>>>><>>>><<<<>>>><<<>><<>><<<>><<<<>>>><<<<>><<>>>><<<>>>><<<<>>><<><<><<<>>><<<<>>>><<>>>><<<<><<>>>><<><<<<>><<>>><<<<>>>><<<<><<<>>>><<><<><<>>>><<<<>><<<>>><<<>><<<<>><<<<>>>><<<>>><<<>><<<<><<<>>><<>>><<<<>>><<<>><><<<<>>><><<<<><><<>><>>><<>>>><><>>><<><<>>>><>>><<<<><>><<<>>>><<<<>>>><<<<>>>><<<<><>><<<<>>>><<<<>>>><<<<>>>><<>>>><<<>>>><<<<>>>><<<>>><<>>>><><<<>>>><<<>>><<><<<<>>><<<<>>>><<<<>>>><<<<>>><<<<>><<<<>><<<<><<<>>><<>>><<<><<<<><>>>><<<<>>>><>><<><<>><<<>>>><<<><<<>>>><<><<<<>>><>><>><<<>>><<<<><>>><<<>>><<<><<<<><<<><>>>><<<>>>><<>><<>>><>>>><<<><<>><>><>>><<<<>><>>>><<<<><>><>>><>>><<<>><<<>><>>><>><<<><<>>>><<<<>>><<><<<>>>><>>>><>><>>><<<<><<<>>>><>>><<<>>><<<>>><>>>><<>><<><<<<>>>><<<<>><><<<<>><>>><<>>><<<>>><>>><<<<><><<<>><>>><<<<>>>><<>>><>><<>>><<>>>><><>>><>>><<<<>><<<<>><<>>>><<<<>>>><<>>>><<<<>>>><><<<<>>>><<<<>><>>>><>>>><<<<>>><<<<><<<>>>><<<<>><<><<>>>><<>><<<>>>><<<>>>><<<><<>>><<<><<<>>><<<<>>><<>>>><<<<>>><>><<<>><<>>><<<><>>>><<<<>><>>>><>><<<>>><<>>><<<<>>><<<>><<<<>>><<<<>><<<<>>><<>>>><<<>>><<<<><<>>><<>><<<>>>><<<<>><><<<>><<<><<<<><<>>><<<>>><<>>><<<>><<<<>>>><<<<><><>><<<<><>>>><<>>>><>>>><<<>>>><<<<>><>>>><<<<>>>><<<>><<<<>><>>>><><<>>>><<<<>><<<>>>><>><><>>><<<<><<>>><><<<<>><<>><>>>><<<<><<<<>>><<<>><<<>><>><<>><>>><<><>><<>><<<><<<>>><<<<>><<>>><>><<<<>>><<<>>>><<<>>>><<<>>><<>>>><<>>><>><<<>>><<<>><>><<<<>>><<<>>>><<<>>><<<<><<>>>><>>>><>><>>>><><<<>>><><>>>><>>>><<<>>>><<>>>><<<>>><<<>>><<<>>>><>><><<<>><<<>><>>><<<>><<<<>>><<<<><<<>><<<>>><<<>>><>><<<<>>><<<><>><>>><<<>>><>><>><<><<<<><<<>><<>><>><<>>>><<<<><<<<>>>><<<<>>><>><<>>>><<<>><<<<>><<<>><<<>>>><><<<>>>><>>><<<>>>><<<<><<>><<<><>>>><<<><<><<><<>>>><<<><<>>>><>><><<>><<<<>>>><<<><<>><><<><<>><<>>><<<>><>><<<>>>><<<<>><>>>><<<<><<>><<<<>>><<<>>><<>><<<>>><<<><<<<><<<>><<>>><<>>>><<<<><<<<>>><<<>>><<>>><<>><<<<>>><<>><<>>><<<>>>><<<><>><<>>>><<<>>>><<<<><<<<><<<>>>><<><<<>><<<<>>><>>><>>><<><<>>><<<<>>><<<><<<>>>><<<<>>><<<<>>>><><>><<>>><<<<>><<><>><<><<<>><<<>><<<><<<<>><<>><<<<>><<<<>>><<<<><<<<>><<><<>>>><<<<>>>><<><<<>><<<>>><<<<>>>><<<><>>>><<<><<>>><<<<>><<<<>>>><>><<<<>><<<>><>><<<<>>><<<<>><<<<>>>><<>><>>><<>>>><<<>>><<>>>><<<<>>>><<<>>>><<>>><<>>><>><<<<><><<<>>>><<<>>>><><<<>>><<<>>><>>><<<>>><<>>><<<>><<<<><>><<<<>><<<<>><>>>><><<<<>>><<<>>><<>><>><<<<><<<>>>><<<<>><<<>><<>>><<<<><><<<<>>>><>>>><<<><>>>><<><>>>><<<<>>>><<><<>>><<<<>><>>>><<<<>>>><<>>>><<<>><<<<>><><>>>><<<<>><<>><>><<<><<>>>><<>><<<<>>>><<<><<<><<<>>>><>><>>><<<>>><<>>>><<>>>><>>>><<<<>><<>>>><<<<>><<><<<<><<<<><<<>>><<<<>><<>>><<<<>><<<>>>><<><<<<>>>><<><>>><<<>><<<><<>>><<<<><<>>><<<><>>><><<>>>><<>>>><<><<<<>>>><<<<>>>><<>><<><<>>><<<><<<>><<>><<<>>><>>><>>><<>>>><<<<><>>><<><>><>>><<>>>><><<<>>><<<><<>><<>>><<><<<<><<>>><><>>>><<<>>>><<<>>>><<<<>><>>><><<<>>>><<>>>><<<<>>><<<>>><<<>><>>><<<<>>><>><<>><<<<>><<<<>><<><<<>>><<<>><<<<>><<>>>><>>>><<<<><<<<>><<><>>><<<<>>>><><<<>>>><<>><<<>><<<>><<<>>><<<><<<><>><<<>><><>>>><<<>>>><<<>>>><<<>>>><<>>>><<<<>>>><>>>><<<>>>><<<<><<<<>>><<<>>>><<<><><<<<>>><<<><<>>><<>><<<<>>>><<>>><>>>><<<<>>><>>><<<>><<<>>><<<<>>>><<<>><>><<>><<>><<<>><<>><<<<>>>><<<><><<<<>>>><<>><>>>><<<<>>>><<<<>>>><<<<><>>>><>><<<<>><<<>><<>><<>><<><<>><><<<<>><<<>><<<>><>>><<<<>><<>><>><<<<>>><<<><>><<>>><<<>>><<>>>><<<<>><<>><>>><<><<<<>>><<>>>><<<><>><<<<>><<<<>><<><>><<<<>>><<>><<<>>>><<>><<<<>>>><<>><<><<<<>>><<><<<>>>><<>>><<>>>><<>>><<<<>>><<>>><<><<<><<>><>>><>>><<<<><<><<><<<>>>><<><<>><>>><>><<>>><>>>><<<>>>><>>>><><<<<>>>><>>><><<<<>><<<<>><<<>>>><<>>><<>>><>><<<><<<<>><>>><<<>><>><>>><><<<><<>>><<<>>>><<<><<<<>>><<>><<<>><<<><<<<><><<<>>><>><<>>>><>>><<><<<<>><<<<><<<<>><>>><<<>>><<>>><>>>><<>><<<>>>><>>><<>>><>>>><<>><<<><<<<><><<<>>>><>><<<<>>>><<><<><<<>>><><<<<>><<>>>><<<<>><<>>><<<>><<<><<<<>><<<<><<>>><<<>><<<<>><<>>><><<<<>>><<>><<<>>><<>>>><<<<>>>><<<<>>><<<><<><>>>><><<<><<<<>><<>>>><<<>>>><<<<><<<>>>><<<>>><>><<<>>><<><>>>><>>><>><<<><><<>><<<<><<<<>>>><>>><>>>><>><<<<>><><<>>><<<>>>><<<<>><<<<>><<>><<>><<>><>>><<>><<><<<>>><<<>><<<<>>><<>><<<<><><<>>><<<>><<<<>><<>>><>><<<<>>>><<<><<<<>><<<>>>><<<<>>><<>>><<>><<><>><<<><<><>>>><<>>>><><<>>>><>><>><<><<><<<<><<><<<><<<>>>><>>><>>><<<<><<><<<<>>><<><<<<>>>><<>>><<><<<<>>>><><<>><<<>>>><<<<>>>><><>>><>>><<<>>>><<>><<<<>><<<>>><<<>>><<<<>><<<<>>><<<<><<>><<><<<>>>><>>><>><<<<>>>><>><<<<>>>><><>><<<<><<<<>><>>><<>><<>>><<<><<<<><<>><<><><>>>><<<>><>><<<>>><<>><<<<>>>><><<>>><>>>><<<<>>><<<<>>><<><><<<>>><<<>><<<<>>><<>><<<>>><<><<<<>>><<<>>>><<<<>><<<<><>>><>><<<>><><<>>><<<>>>><<>><<>>><><<<<><<<>><<<<>><<<>>><<<<>><>>>><<><<<<>>>><<<<>>><<<<>>><<<<>>>><<<>>>><<>>>><<>>>><>><<<>>>><<<>>>><>>>><>>>><<><<<<>>>><<<<><>><<><<<<>>><<<>>>><<<<>>>><<<><<>>>><<<>><<>><<<>><<>><<>>><<<><<>>><<<<><<<>>>><<<<>>>><<<><<<>>><<<><<<>><>>><<>>>><<<<>>><<<><<<<><<<>><<<<>>><<<>>><<>>>><<<<>>>><<<<><<<>>><>><>>>><<<>>><<<>>>><><<<>><<<>>><<<>>><<><<<<>>>><<>><<<>>>><<><<<><><<<><<<>><<<<>>>><<>>><<<<>>>><<>>><>>>><<>>>><<><<<>>>><<<>>>><<<>>>><<<<><<>>><>>>><<<<>>>><<<<>>><<<<>>><<><<<>><<<>><<<><<<<>>><>>><>><>>>><><><<<<>>>><>>>><<<<><<<>><<<<>><>>><<<>>><<<><<<>>>><<<><<<<>>><<<>><>>>><<>>><<<>>><<<>>><<<<><>>><<<>>><<<>>>><<<<><><<>><<><<<><<>><<><<<>>><<<<>><<<>>><>>>><><>>>><<<<>>>><>>><>>><< |
Oops, something went wrong.