diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..ac80646
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,70 @@
+# Code style rules for enforcing the endjin house style
+# See: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
+[*.cs]
+
+# Core editorconfig formatting - indentation
+
+# use soft tabs (spaces) for indentation
+indent_style = space
+
+# Formatting - indentation options
+
+csharp_indent_case_contents = true
+csharp_indent_switch_labels = true
+
+# Formatting - new line options
+
+csharp_new_line_before_catch = true
+csharp_new_line_before_else = true
+csharp_new_line_before_open_brace = object_collection, object_collection_array_initalizers, accessors, lambdas, control_blocks, methods, properties, types
+
+# Formatting - organize using options
+
+dotnet_sort_system_directives_first = true
+
+# Formatting - spacing options
+
+csharp_space_after_cast = false
+csharp_space_after_colon_in_inheritance_clause = true
+csharp_space_after_keywords_in_control_flow_statements = true
+csharp_space_before_colon_in_inheritance_clause = true
+csharp_space_between_method_call_empty_parameter_list_parentheses = false
+csharp_space_between_method_call_name_and_opening_parenthesis = false
+csharp_space_between_method_call_parameter_list_parentheses = false
+csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
+csharp_space_between_method_declaration_parameter_list_parentheses = false
+
+# Formatting - wrapping options
+
+csharp_preserve_single_line_blocks = true
+csharp_preserve_single_line_statements = true
+
+
+# Style - expression bodied member options
+
+csharp_style_expression_bodied_accessors = false:none
+csharp_style_expression_bodied_constructors = false:none
+csharp_style_expression_bodied_methods = false:none
+csharp_style_expression_bodied_properties = false:none
+
+# Style - expression level options
+
+csharp_style_inlined_variable_declaration = true:suggestion
+dotnet_style_predefined_type_for_member_access = true:suggestion
+
+# Style - implicit and explicit types
+
+csharp_style_var_for_built_in_types = false:warning
+csharp_style_var_when_type_is_apparent = true:warning
+csharp_style_var_elsewhere = false:warning
+
+# Style - language keyword and framework type options
+
+dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
+
+# Style - qualification options
+
+dotnet_style_qualification_for_field = true:suggestion
+dotnet_style_qualification_for_method = true:suggestion
+dotnet_style_qualification_for_property = true:suggestion
+dotnet_style_qualification_for_event = true:suggestion
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..3396944
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,54 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just comment the entries below and
+# uncomment the group further below
+###############################################################################
+
+*.sln text eol=crlf
+*.csproj text eol=crlf
+*.vbproj text eol=crlf
+*.vcxproj text eol=crlf
+*.vcproj text eol=crlf
+*.dbproj text eol=crlf
+*.fsproj text eol=crlf
+*.lsproj text eol=crlf
+*.wixproj text eol=crlf
+*.modelproj text eol=crlf
+*.sqlproj text eol=crlf
+*.wmaproj text eol=crlf
+
+*.xproj text eol=crlf
+*.props text eol=crlf
+*.filters text eol=crlf
+*.vcxitems text eol=crlf
+
+*.json text
+
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+#*.xproj merge=binary
+#*.props merge=binary
+#*.filters merge=binary
+#*.vcxitems merge=binary
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..fa1aba5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,195 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+local.settings.json
+Configuration.json
+
+# Build results
+Drops/
+BuildArtefacts/
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+#build/
+bld/
+[Bb]in/
+[Oo]bj/
+
+# Endjin .d.ts
+Endjin.*.d.ts
+Vellum.*.d.ts
+
+# Roslyn cache directories
+*.ide/
+*.vs/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+#NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding addin-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# If using the old MSBuild-Integrated Package Restore, uncomment this:
+#!**/packages/repositories.config
+# except solution packages projects
+!**/Cms/Packages/*
+/
+# Windows Azure Build Output
+csx/
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+# [Ss]tyle[Cc]op.* <-- We want the stylecop config files
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+MSDeploy/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
diff --git a/AdventOfCode2018.sln b/AdventOfCode2018.sln
new file mode 100644
index 0000000..bee28a0
--- /dev/null
+++ b/AdventOfCode2018.sln
@@ -0,0 +1,37 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28306.52
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AoC2018.Solutions", "AoC2018.Solutions\AoC2018.Solutions.csproj", "{875441A6-700B-4CD1-BDEB-FF84A5ACFC47}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AoC2018.Tests", "AoC2018.Tests\AoC2018.Tests.csproj", "{40846808-9418-4723-A857-4580585942DD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AoC2018.Runner", "AoC2018.Runner\AoC2018.Runner.csproj", "{B3438CDA-5A64-451D-B446-F0778FD0F597}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {875441A6-700B-4CD1-BDEB-FF84A5ACFC47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {875441A6-700B-4CD1-BDEB-FF84A5ACFC47}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {875441A6-700B-4CD1-BDEB-FF84A5ACFC47}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {875441A6-700B-4CD1-BDEB-FF84A5ACFC47}.Release|Any CPU.Build.0 = Release|Any CPU
+ {40846808-9418-4723-A857-4580585942DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {40846808-9418-4723-A857-4580585942DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {40846808-9418-4723-A857-4580585942DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {40846808-9418-4723-A857-4580585942DD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B3438CDA-5A64-451D-B446-F0778FD0F597}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B3438CDA-5A64-451D-B446-F0778FD0F597}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B3438CDA-5A64-451D-B446-F0778FD0F597}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B3438CDA-5A64-451D-B446-F0778FD0F597}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {1940F7C8-FECC-4F11-8FEB-19EC03C47C37}
+ EndGlobalSection
+EndGlobal
diff --git a/AoC2018.Runner/AoC2018.Runner.csproj b/AoC2018.Runner/AoC2018.Runner.csproj
new file mode 100644
index 0000000..ccd34a8
--- /dev/null
+++ b/AoC2018.Runner/AoC2018.Runner.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Exe
+ netcoreapp2.1
+ ..\AoC2018.Solutions.ruleset
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
diff --git a/AoC2018.Runner/Input/day01.txt b/AoC2018.Runner/Input/day01.txt
new file mode 100644
index 0000000..2fdd637
--- /dev/null
+++ b/AoC2018.Runner/Input/day01.txt
@@ -0,0 +1,1021 @@
++3
++13
++4
+-2
+-4
++15
+-1
++6
++3
+-10
++9
+-5
+-7
+-15
++8
+-11
++19
++7
++6
++1
+-13
++19
++7
++13
+-18
++2
++6
++5
++8
++17
+-11
++14
+-10
+-7
+-9
+-9
++11
++15
+-4
++6
++13
+-18
++7
++4
++16
+-6
+-7
++14
++3
+-15
++1
+-9
+-21
+-2
++9
+-11
+-8
+-10
+-11
++16
++8
+-12
++8
++7
++1
++19
+-5
+-3
+-29
+-7
++11
++22
++14
+-13
++19
++19
+-6
++15
++20
++6
++9
++4
+-9
+-8
+-19
++14
+-5
++7
+-8
++17
+-4
+-3
++6
++14
+-16
+-18
++1
+-12
+-4
+-15
++24
++3
+-5
++11
+-16
++4
+-14
+-3
++6
++19
++3
+-23
++19
+-8
++21
++13
++11
++5
+-18
+-13
++21
+-14
++9
++21
++12
+-5
+-16
++14
+-13
++6
+-18
+-20
++27
++9
+-6
++18
++8
+-3
+-3
+-4
++8
++1
++7
++15
++13
+-2
+-4
+-16
++7
+-10
+-7
++12
+-6
+-1
++13
++2
+-6
++2
+-7
++6
++14
+-18
++2
++15
+-3
+-3
++5
++15
+-4
++19
+-14
++18
++1
+-2
+-5
+-18
++10
+-3
++15
++10
++17
++9
++5
++18
++1
++15
++9
+-14
+-3
++9
++6
+-9
++5
++3
+-10
+-15
+-12
++3
++14
+-6
++17
+-19
+-1
+-20
++1
++18
++7
++5
+-9
+-15
++4
++19
++6
++1
++14
++3
++3
++16
++12
++2
++13
++19
++13
+-9
++11
++1
+-8
++17
++2
++13
+-7
+-19
+-19
+-13
++19
+-2
++12
+-9
+-12
++15
+-9
+-17
++15
+-7
+-12
++8
+-6
+-19
+-7
+-12
++6
+-17
++22
++13
+-6
++4
+-1
++2
+-18
+-15
++18
+-1
++13
++15
+-19
+-19
++4
+-3
++11
++17
++6
++1
++4
++4
++17
+-5
++15
++10
++4
++15
+-13
++6
++9
+-12
+-20
++16
+-12
+-19
++12
++21
++6
+-12
+-20
+-20
++10
+-21
++3
+-21
+-15
+-11
+-8
+-18
+-2
++4
+-5
++4
+-15
++3
+-2
+-21
+-6
++3
+-17
++1
++4
++7
++19
+-10
+-8
++9
++13
++2
++11
+-33
++9
++4
+-9
++10
++1
++6
+-18
+-8
+-24
++7
+-23
++1
++11
++17
+-19
++1
+-13
++19
++16
+-15
++7
+-17
++5
++15
++13
++12
++9
+-7
++1
+-29
+-5
++42
++10
++19
++20
++17
++13
+-4
++1
++11
++5
++20
++23
++20
++17
++1
+-3
+-6
+-6
++28
+-24
+-19
++31
+-32
+-46
++11
++9
+-8
++1
++23
++34
++74
++20
++19
++1
+-13
+-34
++14
++6
++48
++18
++20
++5
+-15
++6
+-14
++17
+-11
+-24
++19
++15
+-17
+-21
++12
++2
++2
++2
++143
+-1
+-24
++52
++135
++8
+-13
++30
++192
++72
+-526
++60476
+-14
++17
+-16
++15
+-9
++11
++13
+-5
+-6
++5
+-4
+-8
+-10
++12
++19
++15
++16
++11
+-15
++18
++14
++1
+-10
++14
++11
++3
++13
+-2
++12
++13
+-8
+-14
++7
+-15
+-5
++15
++18
++16
++16
++2
++5
+-4
+-5
+-8
++14
++18
+-9
++4
+-16
+-14
++8
++4
+-5
++3
++11
++6
++19
++9
+-18
++12
++10
++2
++1
++1
++19
++15
++1
+-13
+-13
++6
++9
+-11
+-12
+-21
+-19
++4
++10
++18
++12
++12
+-1
++14
+-2
++1
++18
++9
+-15
+-16
+-14
++1
+-5
+-5
+-7
+-19
++8
++6
+-5
++23
++13
+-7
++12
++1
++6
++21
++14
++8
++17
++13
++13
++18
++16
+-3
+-18
+-8
+-1
+-8
+-1
+-2
+-18
+-9
+-8
++10
+-5
++2
+-18
+-16
+-4
+-14
+-12
+-17
++20
++15
+-1
++8
++7
++15
+-12
+-6
+-9
++3
++14
++5
+-4
++11
++4
++2
++11
++12
++11
+-8
++10
+-1
+-19
++12
++1
+-14
+-2
++19
++15
++14
++3
+-18
+-3
++9
++3
+-13
+-4
++15
++1
++14
+-3
++20
++13
+-11
+-4
+-11
++2
++16
++1
++2
++13
++18
+-12
+-9
++2
++17
+-13
+-1
++9
+-6
+-14
++5
+-6
+-10
++3
+-10
+-6
+-3
++7
++17
+-6
+-6
+-22
+-2
++9
+-17
++13
++13
++4
+-14
++5
+-15
++13
+-18
++8
++51
+-3
++9
+-17
++5
+-4
+-16
++29
++5
++1
++9
++19
+-16
++8
++18
++9
++13
++8
+-11
++8
++19
++6
+-15
+-12
++4
+-11
+-17
+-6
+-20
++17
++11
++17
+-14
+-10
+-10
+-18
+-10
++15
+-1
++15
++17
++13
++17
+-3
++2
+-1
++4
++19
++14
+-16
++5
+-10
+-13
++15
++20
+-10
+-1
++19
+-5
++4
+-12
++20
++17
+-15
++10
+-18
++16
++12
++5
+-12
++5
+-4
++20
++1
++4
+-3
+-15
+-18
++20
++7
+-2
++12
++3
+-1
+-10
++15
++13
++17
++8
++1
++7
+-11
+-8
+-8
+-21
+-19
+-21
+-9
+-15
+-14
+-16
++7
+-5
++22
++18
++14
+-10
+-21
++11
+-30
++5
+-6
++24
+-26
+-18
+-9
++1
+-5
+-8
++14
+-17
++9
+-1
+-2
+-20
++6
++7
+-5
++20
+-2
++15
++25
++20
++28
++15
+-32
+-16
+-2
++54
++15
++17
++18
+-8
++2
++20
++6
++7
+-10
+-6
++30
+-12
++36
++6
+-4
++7
++9
++14
+-9
+-1
++14
+-7
+-10
++18
++17
++3
++1
+-3
+-17
++3
+-11
++17
++3
++24
+-11
++15
+-25
++13
+-6
+-39
+-10
++17
++11
+-22
+-28
++5
++3
+-29
+-23
+-8
+-19
++8
+-22
+-17
+-16
++20
+-18
++10
++41
+-11
+-202
+-6
+-14
++11
++34
+-12
++487
++495
++60020
+-18
++2
++7
++7
+-8
+-19
+-16
++7
++10
+-2
++19
+-14
+-15
+-11
++16
++8
+-16
+-13
+-6
++12
++18
++15
++4
+-11
++20
+-4
++3
++9
++5
+-16
++6
+-19
++17
++18
+-2
+-2
+-9
++16
+-15
++2
++19
++3
+-10
+-1
++19
+-6
+-8
+-20
++19
++12
++16
+-12
++15
+-4
+-7
++4
++1
+-19
+-1
+-19
++1
+-13
+-17
+-13
+-17
+-11
+-19
+-5
++9
+-6
++18
++9
++4
+-11
+-1
+-3
++8
++13
+-9
++16
++20
+-1
++10
+-19
+-6
++18
++5
+-1
+-18
+-16
+-11
++16
++2
+-17
++4
++3
++18
+-13
+-25
+-12
+-17
+-18
+-10
+-12
+-15
++19
+-14
++6
++10
++14
++16
+-11
+-2
+-16
+-13
+-11
++9
++10
+-18
+-12
+-6
+-1
+-13
++17
+-6
++12
++2
++12
++9
++19
++20
+-11
++5
++13
+-9
+-5
++3
+-5
+-15
+-16
+-4
++8
+-14
+-8
+-8
++10
+-7
+-14
+-12
+-10
++8
++3
+-19
++20
+-15
+-18
++22
++14
+-6
+-16
+-2
+-10
++9
+-12
++4
+-12
++10
+-15
+-18
+-8
++9
++1
+-11
++8
+-121858
\ No newline at end of file
diff --git a/AoC2018.Runner/Input/day02.txt b/AoC2018.Runner/Input/day02.txt
new file mode 100644
index 0000000..3120fb1
--- /dev/null
+++ b/AoC2018.Runner/Input/day02.txt
@@ -0,0 +1,250 @@
+bpacnmelhhzpygfsjoxtvkwuor
+biacnmelnizqygfsjoctvkwudr
+bpaccmllhizyygfsjoxtvkwudr
+rpacnmelhizqsufsjoxtvkwudr
+bfacnmelhizqygfsjoxtvwwudp
+bpacnmelhizqynfsjodtvkyudr
+bpafnmelhizqpgfsjjxtvkwudr
+bpackmelhizcygfsjoxtvkwudo
+bmacnmilhizqygfsjoltvkwudr
+bpafnmelhizuygfsjoxtvkwsdr
+boacnmylhizqygfsjoxtvxwudr
+bpbcjmelhizqygfsjoxtgkwudr
+bpacnmglhizqygfsjixtlkwudr
+bpacnmclhizqygfsjoxtvkwtqr
+bpacnmelhczqygtsjoptvkwudr
+bpacnmelhizqywfsaoxtvkbudr
+apacnmelhizqygcsjoxtvkwhdr
+bpacnmelrizqygfsbpxtvkwudr
+tpkcnmelpizqygfsjoxtvkwudr
+bpacnmelhizqlgfsjobtmkwudr
+npacnmelhizqygffjoxtvkwudf
+bpacnmeehqzqygqsjoxtvkwudr
+bpecnmelhizqigfsjvxtvkwudr
+bpacnmelhizqysfsjoxtvkdfdr
+bpacnfelhkzqygfsjoxtvkwfdr
+bpacnbelvizqygfsjoxthkwudr
+bpacnoelhizqygfejoxtvkwudn
+bpacnmelhizqygfzpkxtvkwudr
+bpahnmelhizqyufsjoxmvkwudr
+bpacnmelhizqygfsnoxtvkwmmr
+bpacnmelhizqygfsjoatvkludf
+bpacnmylhizqygfsjlxtvksudr
+bpacnmekhpzqygysjoxtvkwudr
+bpacnselhizqogfswoxtvkwudr
+bpacnmelhizqprfsjoxwvkwudr
+bpatnmelhinqygfsjoctvkwudr
+bpacnqelhqzqygfsxoxtvkwudr
+bpabnmelhiyqygfsjoxtykwudr
+bpacnivlhizqygfsjoxtviwudr
+bpkcnmylhizqygfsjoxtvkwcdr
+bpafnmflhizqygtsjoxtvkwudr
+bpachmelhizqygfsjixtvkwudg
+bpacymelhizqygfsjoxtykwuar
+bpacnkelhizqdgfsjoxtskwudr
+bpacnmezhizqggbsjoxtvkwudr
+bpacnmqlhizqygrsjoxzvkwudr
+bpaczmelhizqyhfsjoxfvkwudr
+bdacnmelhyzqygusjoxtvkwudr
+bpacbmelhizqywfsjostvkwudr
+bpacnmelhihzygfstoxtvkwudr
+bpactmelhizqygfsjcxtvkwydr
+bkacnmethizqytfsjoxtvkwudr
+bpacnmalhizqydfskoxtvkwudr
+spacnmelbizqygfsjoxdvkwudr
+lpalnmelhizoygfsjoxtvkwudr
+bpacjmeghizqygfsjoxtviwudr
+bpacnmeqhizxygfsjoxgvkwudr
+bpacnmelhizqygosjoxtvkkuhr
+bpacnmelhiznbxfsjoxtvkwudr
+bgacnmelhizqygfsjbxivkwudr
+bpacnmelhizqygfjjowtvswudr
+bpacnmelhizqygfsjovtgkmudr
+bpacnmelcmzqygfspoxtvkwudr
+bpvcnmelhizqyvfcjoxtvkwudr
+bpacnmeahizqjgfsjoxtvkwukr
+bpacnoelwizqygfsjoxtvkaudr
+xpacnmelhizqygfsjoxdvkwedr
+mpacnmelqizqygfsjoxtvkwudx
+bppcnmelhizqygfsjfxtvkhudr
+bpacnmclhizqyhfsjaxtvkwudr
+opacsmelhizqygfsjmxtvkwudr
+bpafnmelhizqjgfsjoxtvkrudr
+bpdcnmilhizqygfsjoxtvkludr
+bpainmelhizqygfsjtntvkwudr
+bradnmelhizqygfsjextvkwudr
+bpacnmelhizqygfmsoxtvkwudg
+bpacneelhizqygvrjoxtvkwudr
+bpacnpelhizqygfsjoxyvkwudf
+bpacnmelhizqygfsqoqtvkwodr
+bpacnmelhizjyghsjoxcvkwudr
+bpacnmelmibqygfsjoxtvnwudr
+jpacnmelaizqygfwjoxtvkwudr
+zpachmelhizqygfsjsxtvkwudr
+bpacnmelfizqykfsjomtvkwudr
+bpacnmllwizqygfsjoxtvkwusr
+bpaynmelhizqygfsjoxtvowcdr
+jpacnmqlhizqygfsjoxtvknudr
+bpacxmelhizqyffsjoxtvkwugr
+apawnmelhizqygfsjtxtvkwudr
+mpacnmelhitqigfsjoxtvkwudr
+bpacnmelhhzqygfsjoxtvkyzdr
+gpacnmelhizqynfsjoxtvkwudm
+bnacnkelhizqygfsjoxtpkwudr
+bpacnmelfizqygfsumxtvkwudr
+bpacnmelhisqygfsjohtvowudr
+bpacnmelhimqygxsjoxtvkwudn
+bpscnmeliizqygfsjoxtvkwunr
+qpacnmelhizqycfsjoxtvkwndr
+bpacnmelhijqygfsjohtvkyudr
+bpacnmelhizqykfsjkxtvknudr
+bpacnqilhizqygfsjoxtvkoudr
+bpacnmelhizqzgmsjoxtvkwurr
+bpdcnmelhizqygfsjoutukwudr
+bpecnmeghizqygfsjoxgvkwudr
+bpicnmelhizqygfrjoxtvlwudr
+bpacnmelhizfygfsroxtvkwodr
+buacnmelhizqygjsjoxtvkvudr
+bpacnmelhixqykfsjoxtvrwudr
+bpacnmelhizqygvejcxtvkwudr
+bpacnmjlhizqylfsjoxtvkwuor
+qpacnmelhizqygfsjoxfdkwudr
+bpfcnmemhizqygfsjoxtvknudr
+bpacnmelhizqoffsjqxtvkwudr
+hpacnielhiqqygfsjoxtvkwudr
+gpacnmelhizqygfsewxtvkwudr
+bpacnmellizqylxsjoxtvkwudr
+bpacnmenhizqymfsjoxtvkmudr
+bpacnfelhizqygcsjoltvkwudr
+bpacnmelhqqqygfsjoxtvkuudr
+bplgnmelhiqqygfsjoxtvkwudr
+bpacnzelhizqygfgjoxtvnwudr
+bpacnmelhizqygfsjoktvknunr
+bpacnmdlhioqygfnjoxtvkwudr
+epacnmelwizqyjfsjoxtvkwudr
+bpacxmelhazfygfsjoxtvkwudr
+bpacnmejhezqygfsjoxtskwudr
+bpacnqelhihqyzfsjoxtvkwudr
+bpacnbelhizqyrfsjoxtvkmudr
+bpacnmelhizqygfsjoxtylwzdr
+bpacnmelwizqygfsjodtvkhudr
+bpacnnelhizqygfsjoxtwkwadr
+bpacimelhizqygfsnoxtvkwuor
+bpacnmelhizqyaasjoxtlkwudr
+bpacnmelhizqyeffjoxtvkwuds
+bpacnmenhizqygxscoxtvkwudr
+bpacnmelhidqygfsjowtskwudr
+bpacnmeliizqygfsjoxhvkwucr
+bpacimelhizqygfsjoxtvktuwr
+bpainmelhhzqygfsjzxtvkwudr
+bpacamelhizqygfsjogtvkwbdr
+bpccnmelgizqygfsjoxtykwudr
+bpacnmelhizwegfsjoxtvkwadr
+bpackmelhbzqygqsjoxtvkwudr
+bpacymeihizqyffsjoxtvkwudr
+bpacnielhczqygfsjoxtvkwudk
+bpacnmejhizqygffjoxjvkwudr
+ppacnmelhizqygfsjoxtigwudr
+bpjcnmolhizqygfsjoxtvkwndr
+bpacnmelcizqygrsjoxtakwudr
+cpawnmelhizqygfsjoxmvkwudr
+bwacnmelhizqygesjoxtakwudr
+bpacnmelhizqygfsjexsvkwddr
+bpaunmelhiuqygfsjoxtvkwtdr
+bpacnmellimqygfsjextvkwudr
+bpacnmerhizqygfsaoxvvkwudr
+bpacnmglhizqygfsjixtukwudr
+ppacnmelhizqygfsjoxtvkdudp
+bpacnmedhizqygukjoxtvkwudr
+bpccnmelhizqngfsjoxtvkwadr
+bgacnmeldizqygfscoxtvkwudr
+bpacngelhizsygfsjoxtvkwkdr
+bpacnpelhizqygfsjoxctkwudr
+bpacnmylhizqygfcjoxtvkwmdr
+npacnmelhizqygfsjoxtwkwuds
+bpaxnmelhizqydfsjoxyvkwudr
+bpacnhelhizjygfsjoxtvkmudr
+bpacnkelhczqygfnjoxtvkwudr
+bfacnmelhizrygfsjoxtvkwodr
+bpycnmelhizqygfofoxtvkwudr
+qpacpselhizqygfsjoxtvkwudr
+bpvcnmelhezqygfsjoxttkwudr
+bpacnmwlhizqygfijoxtmkwudr
+bsacnmelhikqygfsjoxttkwudr
+bpccnxelhizqyafsjoxtvkwudr
+bpacnmelhizqygfswhxtvewudr
+vpacnmzlhizqygfsvoxtvkwudr
+bpacnmelhihqygfsjoxtvkqurr
+bpacnmelhixqygazjoxtvkwudr
+bpavnmelhizqygfsjozpvkwudr
+bpacnmclhizuygfsjoxmvkwudr
+bpacnmelhizryufsjoxtkkwudr
+bpacnmelhtzqygfsjobtvkwufr
+bpacnmelhizqmlfsjoxtvkwudq
+bpaaneelhizqygfsjlxtvkwudr
+bpacnmelhxzqygfsjoxthkwuhr
+bpacnmeshizqygfcjoxtvkwude
+bpacnzqlhizqygfsxoxtvkwudr
+bgaanmelhizqycfsjoxtvkwudr
+bpacnmexhizqygfsroxtvkwudn
+bpmmnmelhizqygfajoxtvkwudr
+bpacnmelhizqylfsjoxtckwhdr
+bpicnmelhizqyrfsjoxtvkwudi
+zpacnmelhizvycfsjoxtvkwudr
+bpamnmkllizqygfsjoxtvkwudr
+bpacnmelhrzqyrfsjoxgvkwudr
+bpadnmelhczqygfsjoxtlkwudr
+bpacrmelhizqygrsjoxtvkiudr
+lpacnmelhizqygfsjoxtgkwxdr
+fpacnmalhiuqygfsjoxtvkwudr
+bpacnmelhizqygfsjixtvfwcdr
+bpccnmelhxzqygfkjoxtvkwudr
+bpacnmepaizqygfsjoctvkwudr
+tpacnmelhivqygfsxoxtvkwudr
+kpacnfelhitqygfsjoxtvkwudr
+baacnzelhizqygfsjoxtvkwudx
+bcycnmeghizqygfsjoxtvkwudr
+wpacotelhizqygfsjoxtvkwudr
+bpacnmsshizqygrsjoxtvkwudr
+blacnmelhizqygfsjoxtykwvdr
+bkacnmelhizqygfsjoxuvkludr
+bpacnmelhizaugfsjoxtvhwudr
+fpavnmelhizqygfsgoxtvkwudr
+bpachmelnizqygfsjextvkwudr
+bpacnmelhizqpgfsjoxtvkwldu
+bpacnmelhizqygfsloftvywudr
+bpacntelhvzqygfejoxtvkwudr
+bpacnmeldizqygfsjmxtvkdudr
+byacnmelhizqygfsjsxtvkwudh
+bpacnmellizqygssxoxtvkwudr
+bpacnmelhizqygfsjootvknuir
+bpacnmelhitqjgfsjoxivkwudr
+bpacnmelhazaygfsjoxtvfwudr
+bpacnzenhizqygfsjzxtvkwudr
+bpacnmelhizqypfsdoxtvkwuar
+bpannmelhizqygnsjoxtvkwndr
+bracnmeldizsygfsjoxtvkwudr
+bpacnmelhizwygfsjugtvkwudr
+bpatnmelhizqygfsjoytvkwulr
+upacnmelhizqygfsjurtvkwudr
+bpaenmezhizqygfsjostvkwudr
+bpacnmelhizpygfsjodhvkwudr
+bpacnmelhizqygfsjogtvkguwr
+bpacnmelhisqygfsjoxtpkuudr
+bxacnmelhizqygfsjdxtvkfudr
+bpacnmelhizqygfsjohqvkwudu
+bzacnmtlhizqygfsjoxsvkwudr
+bpacnmplhixrygfsjoxtvkwudr
+bpacnmelhizqhgfsjomtvkwudg
+bpacnmezhizqygfsjxxtykwudr
+bpacnmwlhizqygfujoxtzkwudr
+tpacnmelhizqygfsjoxkvpwudr
+bpawsmenhizqygfsjoxtvkwudr
+bpacnmelhizqtgfsjoxttkwuqr
+bpkcbmelhizqygfsjoxtvkwucr
+bpacfmekhizqygfsjoxtvkwuds
+bpacnmethizqynfajoxtvkwudr
+bpocnmclhizqygfsjoxtvkwukr
+zpacnmwlhizqygfsjoxzvkwudr
+bpacpoelhqzqygfsjoxtvkwudr
+bpacnlelhizqyzfsjoxtvkwukr
\ No newline at end of file
diff --git a/AoC2018.Runner/Input/day03.txt b/AoC2018.Runner/Input/day03.txt
new file mode 100644
index 0000000..1ff7bdc
--- /dev/null
+++ b/AoC2018.Runner/Input/day03.txt
@@ -0,0 +1,1311 @@
+#1 @ 258,327: 19x22
+#2 @ 553,11: 13x13
+#3 @ 619,175: 17x20
+#4 @ 965,962: 26x16
+#5 @ 389,618: 23x28
+#6 @ 232,720: 14x20
+#7 @ 548,695: 10x20
+#8 @ 149,242: 16x17
+#9 @ 628,301: 22x25
+#10 @ 229,298: 21x11
+#11 @ 315,784: 25x19
+#12 @ 557,444: 27x26
+#13 @ 510,120: 20x22
+#14 @ 616,929: 20x17
+#15 @ 779,957: 23x16
+#16 @ 576,682: 22x15
+#17 @ 16,205: 20x23
+#18 @ 954,514: 28x10
+#19 @ 238,149: 20x14
+#20 @ 353,669: 12x24
+#21 @ 70,916: 24x10
+#22 @ 264,505: 25x16
+#23 @ 559,307: 26x22
+#24 @ 52,959: 11x24
+#25 @ 713,889: 17x25
+#26 @ 746,433: 20x11
+#27 @ 117,775: 27x11
+#28 @ 925,830: 20x13
+#29 @ 456,760: 19x23
+#30 @ 88,39: 17x20
+#31 @ 851,79: 16x24
+#32 @ 330,230: 25x10
+#33 @ 743,816: 16x12
+#34 @ 518,637: 26x25
+#35 @ 267,330: 25x28
+#36 @ 745,665: 14x28
+#37 @ 627,965: 19x13
+#38 @ 278,558: 11x14
+#39 @ 742,755: 11x14
+#40 @ 638,758: 23x25
+#41 @ 766,736: 17x21
+#42 @ 675,276: 26x21
+#43 @ 679,841: 26x15
+#44 @ 748,43: 26x23
+#45 @ 961,273: 15x14
+#46 @ 361,955: 17x11
+#47 @ 192,552: 17x26
+#48 @ 874,580: 14x20
+#49 @ 672,284: 29x12
+#50 @ 470,772: 12x12
+#51 @ 260,350: 27x10
+#52 @ 855,96: 18x24
+#53 @ 725,302: 19x26
+#54 @ 646,826: 15x18
+#55 @ 902,116: 17x10
+#56 @ 251,767: 17x24
+#57 @ 781,274: 17x12
+#58 @ 284,168: 13x13
+#59 @ 808,592: 11x10
+#60 @ 497,656: 13x11
+#61 @ 230,279: 17x28
+#62 @ 557,324: 21x13
+#63 @ 447,213: 23x19
+#64 @ 333,55: 29x19
+#65 @ 618,151: 23x12
+#66 @ 514,584: 29x21
+#67 @ 496,832: 19x29
+#68 @ 791,909: 26x23
+#69 @ 889,104: 28x10
+#70 @ 156,263: 9x10
+#71 @ 590,904: 20x15
+#72 @ 45,307: 20x21
+#73 @ 714,305: 10x11
+#74 @ 893,437: 22x17
+#75 @ 134,482: 29x16
+#76 @ 360,352: 28x26
+#77 @ 530,302: 26x23
+#78 @ 171,895: 18x18
+#79 @ 876,371: 21x29
+#80 @ 84,835: 14x20
+#81 @ 978,486: 21x21
+#82 @ 900,664: 24x16
+#83 @ 807,267: 10x21
+#84 @ 104,792: 19x29
+#85 @ 55,608: 18x13
+#86 @ 25,623: 14x26
+#87 @ 711,878: 16x25
+#88 @ 357,315: 11x14
+#89 @ 90,170: 28x15
+#90 @ 377,81: 13x19
+#91 @ 154,261: 14x15
+#92 @ 551,287: 20x20
+#93 @ 871,690: 24x15
+#94 @ 193,681: 24x14
+#95 @ 549,568: 27x18
+#96 @ 400,832: 19x27
+#97 @ 411,476: 25x11
+#98 @ 909,90: 15x21
+#99 @ 418,358: 18x28
+#100 @ 466,213: 21x18
+#101 @ 293,183: 19x21
+#102 @ 430,402: 27x10
+#103 @ 424,60: 17x24
+#104 @ 657,906: 14x23
+#105 @ 326,650: 17x27
+#106 @ 886,105: 22x19
+#107 @ 454,399: 15x24
+#108 @ 185,415: 21x19
+#109 @ 645,789: 17x25
+#110 @ 649,889: 18x14
+#111 @ 824,149: 11x27
+#112 @ 948,282: 27x18
+#113 @ 632,645: 27x19
+#114 @ 530,545: 10x29
+#115 @ 43,961: 13x12
+#116 @ 709,758: 24x17
+#117 @ 480,942: 10x29
+#118 @ 289,208: 29x13
+#119 @ 277,928: 18x25
+#120 @ 503,832: 15x28
+#121 @ 126,109: 27x19
+#122 @ 369,106: 22x17
+#123 @ 620,137: 18x15
+#124 @ 268,978: 12x14
+#125 @ 180,553: 27x26
+#126 @ 71,419: 29x17
+#127 @ 21,958: 28x10
+#128 @ 661,826: 18x19
+#129 @ 922,56: 11x28
+#130 @ 735,89: 14x15
+#131 @ 486,271: 17x11
+#132 @ 760,69: 11x20
+#133 @ 328,665: 13x18
+#134 @ 53,71: 25x13
+#135 @ 60,178: 8x3
+#136 @ 64,913: 28x14
+#137 @ 757,367: 11x25
+#138 @ 60,247: 18x14
+#139 @ 418,224: 12x20
+#140 @ 899,48: 26x29
+#141 @ 393,633: 28x25
+#142 @ 868,142: 12x24
+#143 @ 83,900: 24x16
+#144 @ 312,942: 13x13
+#145 @ 136,104: 10x29
+#146 @ 674,780: 21x24
+#147 @ 133,932: 10x27
+#148 @ 267,827: 24x17
+#149 @ 545,344: 13x10
+#150 @ 760,897: 11x23
+#151 @ 242,660: 10x20
+#152 @ 802,758: 25x25
+#153 @ 919,55: 13x21
+#154 @ 850,317: 29x15
+#155 @ 55,176: 20x10
+#156 @ 278,852: 29x11
+#157 @ 931,318: 29x26
+#158 @ 74,351: 21x25
+#159 @ 712,305: 25x24
+#160 @ 605,363: 24x13
+#161 @ 719,887: 20x10
+#162 @ 730,172: 8x7
+#163 @ 468,572: 13x10
+#164 @ 541,74: 29x13
+#165 @ 402,206: 27x18
+#166 @ 310,147: 17x25
+#167 @ 243,145: 21x14
+#168 @ 441,640: 23x11
+#169 @ 680,331: 16x11
+#170 @ 22,446: 9x6
+#171 @ 685,327: 19x21
+#172 @ 52,872: 29x27
+#173 @ 723,39: 13x15
+#174 @ 522,799: 16x19
+#175 @ 335,529: 18x10
+#176 @ 663,304: 15x22
+#177 @ 921,704: 24x15
+#178 @ 874,492: 23x21
+#179 @ 810,939: 18x21
+#180 @ 119,80: 12x29
+#181 @ 780,446: 27x22
+#182 @ 295,32: 17x26
+#183 @ 341,833: 23x11
+#184 @ 115,773: 27x15
+#185 @ 752,644: 17x29
+#186 @ 767,636: 15x19
+#187 @ 296,211: 10x11
+#188 @ 474,347: 27x25
+#189 @ 593,333: 17x18
+#190 @ 859,571: 18x15
+#191 @ 434,404: 17x10
+#192 @ 803,621: 26x27
+#193 @ 737,39: 19x18
+#194 @ 245,301: 23x23
+#195 @ 457,478: 27x18
+#196 @ 450,939: 24x25
+#197 @ 918,64: 12x10
+#198 @ 679,921: 12x12
+#199 @ 549,615: 29x23
+#200 @ 874,415: 22x18
+#201 @ 232,280: 24x29
+#202 @ 729,379: 17x20
+#203 @ 813,740: 11x20
+#204 @ 659,216: 17x29
+#205 @ 303,899: 10x27
+#206 @ 934,694: 24x20
+#207 @ 185,621: 16x18
+#208 @ 856,708: 23x25
+#209 @ 799,914: 29x20
+#210 @ 890,702: 25x13
+#211 @ 517,104: 16x29
+#212 @ 981,593: 12x18
+#213 @ 807,56: 29x24
+#214 @ 57,464: 24x21
+#215 @ 356,831: 17x17
+#216 @ 55,420: 17x28
+#217 @ 29,583: 17x15
+#218 @ 740,868: 10x10
+#219 @ 793,643: 29x23
+#220 @ 255,573: 25x24
+#221 @ 738,897: 25x29
+#222 @ 859,823: 10x17
+#223 @ 427,211: 15x21
+#224 @ 882,476: 13x26
+#225 @ 374,969: 28x19
+#226 @ 138,478: 10x21
+#227 @ 58,623: 19x19
+#228 @ 436,238: 16x25
+#229 @ 590,907: 23x29
+#230 @ 950,508: 11x13
+#231 @ 969,646: 20x19
+#232 @ 470,473: 28x20
+#233 @ 976,604: 15x24
+#234 @ 808,53: 26x24
+#235 @ 71,260: 24x14
+#236 @ 841,81: 29x11
+#237 @ 944,963: 21x24
+#238 @ 632,235: 12x14
+#239 @ 768,494: 14x25
+#240 @ 788,437: 8x3
+#241 @ 474,164: 25x29
+#242 @ 93,903: 18x20
+#243 @ 235,752: 26x13
+#244 @ 478,414: 13x18
+#245 @ 294,930: 14x17
+#246 @ 932,897: 21x13
+#247 @ 300,916: 29x19
+#248 @ 762,98: 11x21
+#249 @ 746,629: 29x21
+#250 @ 279,179: 26x11
+#251 @ 426,338: 21x17
+#252 @ 859,811: 12x24
+#253 @ 722,751: 29x15
+#254 @ 55,253: 28x19
+#255 @ 739,434: 11x22
+#256 @ 61,309: 14x27
+#257 @ 669,273: 14x10
+#258 @ 413,506: 12x12
+#259 @ 47,812: 19x21
+#260 @ 846,580: 18x22
+#261 @ 281,841: 19x20
+#262 @ 761,360: 25x29
+#263 @ 245,972: 14x18
+#264 @ 637,266: 16x24
+#265 @ 167,304: 14x24
+#266 @ 438,331: 11x12
+#267 @ 525,912: 12x21
+#268 @ 249,139: 25x17
+#269 @ 956,389: 15x26
+#270 @ 153,977: 17x15
+#271 @ 226,692: 19x22
+#272 @ 717,894: 26x22
+#273 @ 100,838: 13x10
+#274 @ 81,113: 24x25
+#275 @ 231,150: 25x20
+#276 @ 882,200: 29x26
+#277 @ 890,380: 16x25
+#278 @ 655,893: 18x29
+#279 @ 125,481: 26x19
+#280 @ 975,198: 18x18
+#281 @ 332,332: 28x28
+#282 @ 902,352: 12x18
+#283 @ 123,904: 18x19
+#284 @ 38,447: 29x27
+#285 @ 142,34: 19x27
+#286 @ 513,810: 12x23
+#287 @ 270,494: 28x13
+#288 @ 940,409: 10x19
+#289 @ 656,8: 19x25
+#290 @ 436,263: 14x29
+#291 @ 344,694: 19x11
+#292 @ 541,838: 22x26
+#293 @ 910,958: 13x16
+#294 @ 870,224: 23x20
+#295 @ 483,431: 22x23
+#296 @ 170,402: 6x10
+#297 @ 549,116: 15x22
+#298 @ 901,689: 16x11
+#299 @ 84,344: 19x16
+#300 @ 60,293: 16x15
+#301 @ 724,473: 20x23
+#302 @ 693,46: 22x27
+#303 @ 616,62: 20x17
+#304 @ 857,973: 12x11
+#305 @ 688,201: 28x20
+#306 @ 14,790: 21x16
+#307 @ 304,441: 26x14
+#308 @ 272,623: 24x15
+#309 @ 746,139: 24x10
+#310 @ 218,844: 14x15
+#311 @ 837,881: 10x27
+#312 @ 643,14: 15x21
+#313 @ 366,487: 20x23
+#314 @ 487,720: 14x29
+#315 @ 526,534: 24x20
+#316 @ 348,883: 28x11
+#317 @ 646,93: 27x27
+#318 @ 739,805: 11x23
+#319 @ 946,619: 15x10
+#320 @ 778,77: 20x11
+#321 @ 150,845: 11x26
+#322 @ 952,671: 10x17
+#323 @ 910,418: 15x14
+#324 @ 404,644: 13x10
+#325 @ 21,506: 12x13
+#326 @ 93,493: 17x12
+#327 @ 19,618: 15x18
+#328 @ 505,736: 22x27
+#329 @ 526,953: 21x20
+#330 @ 485,794: 13x20
+#331 @ 515,977: 9x5
+#332 @ 889,373: 15x17
+#333 @ 532,536: 9x14
+#334 @ 431,353: 10x22
+#335 @ 846,794: 14x11
+#336 @ 946,677: 13x14
+#337 @ 670,110: 10x15
+#338 @ 889,322: 14x20
+#339 @ 311,23: 3x13
+#340 @ 51,663: 28x20
+#341 @ 925,828: 29x17
+#342 @ 177,376: 27x15
+#343 @ 384,620: 27x12
+#344 @ 338,394: 29x16
+#345 @ 744,933: 13x9
+#346 @ 665,21: 25x10
+#347 @ 533,588: 20x12
+#348 @ 115,425: 22x22
+#349 @ 823,400: 11x11
+#350 @ 38,351: 19x25
+#351 @ 548,278: 15x24
+#352 @ 27,234: 29x11
+#353 @ 125,93: 18x17
+#354 @ 262,867: 26x25
+#355 @ 223,867: 19x17
+#356 @ 10,556: 18x27
+#357 @ 631,849: 22x26
+#358 @ 529,878: 22x24
+#359 @ 276,292: 22x27
+#360 @ 882,678: 15x17
+#361 @ 828,743: 21x10
+#362 @ 729,522: 17x24
+#363 @ 836,75: 25x12
+#364 @ 221,875: 15x11
+#365 @ 507,247: 24x21
+#366 @ 331,733: 15x29
+#367 @ 766,746: 25x26
+#368 @ 426,205: 15x25
+#369 @ 357,181: 23x17
+#370 @ 461,549: 15x23
+#371 @ 673,322: 12x12
+#372 @ 295,586: 17x14
+#373 @ 58,819: 15x9
+#374 @ 484,957: 20x21
+#375 @ 676,497: 25x15
+#376 @ 929,32: 18x23
+#377 @ 157,783: 27x28
+#378 @ 462,465: 11x29
+#379 @ 701,24: 22x28
+#380 @ 196,258: 29x18
+#381 @ 159,234: 26x17
+#382 @ 487,279: 26x16
+#383 @ 483,804: 28x27
+#384 @ 348,683: 17x21
+#385 @ 806,815: 20x20
+#386 @ 625,234: 18x26
+#387 @ 744,562: 19x20
+#388 @ 362,708: 11x21
+#389 @ 444,587: 24x20
+#390 @ 435,411: 29x21
+#391 @ 969,188: 22x23
+#392 @ 332,786: 24x19
+#393 @ 659,969: 24x13
+#394 @ 424,393: 19x18
+#395 @ 972,484: 19x12
+#396 @ 963,242: 20x28
+#397 @ 664,630: 12x10
+#398 @ 567,72: 23x12
+#399 @ 935,200: 25x15
+#400 @ 750,568: 11x13
+#401 @ 775,113: 13x11
+#402 @ 687,441: 11x23
+#403 @ 623,335: 10x25
+#404 @ 542,946: 13x18
+#405 @ 503,59: 16x16
+#406 @ 578,846: 26x18
+#407 @ 380,261: 17x16
+#408 @ 462,208: 20x26
+#409 @ 548,329: 13x23
+#410 @ 858,722: 25x29
+#411 @ 368,722: 24x11
+#412 @ 970,671: 13x29
+#413 @ 326,701: 18x11
+#414 @ 74,22: 25x14
+#415 @ 456,85: 12x24
+#416 @ 696,79: 18x29
+#417 @ 942,745: 29x15
+#418 @ 906,491: 29x12
+#419 @ 700,813: 11x29
+#420 @ 250,296: 13x10
+#421 @ 465,52: 28x28
+#422 @ 147,538: 21x12
+#423 @ 360,300: 11x27
+#424 @ 942,248: 22x10
+#425 @ 819,708: 10x22
+#426 @ 745,563: 17x16
+#427 @ 393,608: 11x12
+#428 @ 116,526: 17x14
+#429 @ 470,155: 13x10
+#430 @ 357,534: 13x29
+#431 @ 330,962: 20x20
+#432 @ 462,4: 22x26
+#433 @ 853,807: 27x17
+#434 @ 671,971: 28x21
+#435 @ 537,4: 20x26
+#436 @ 656,324: 13x13
+#437 @ 90,822: 25x29
+#438 @ 764,355: 15x10
+#439 @ 61,978: 27x20
+#440 @ 520,194: 19x22
+#441 @ 553,293: 19x18
+#442 @ 654,264: 25x22
+#443 @ 368,182: 29x11
+#444 @ 433,613: 21x17
+#445 @ 727,68: 11x10
+#446 @ 250,457: 14x13
+#447 @ 289,122: 15x20
+#448 @ 262,922: 24x14
+#449 @ 824,657: 19x21
+#450 @ 786,265: 19x22
+#451 @ 900,457: 23x12
+#452 @ 148,975: 10x13
+#453 @ 44,59: 18x28
+#454 @ 82,753: 24x25
+#455 @ 298,860: 28x20
+#456 @ 145,106: 28x16
+#457 @ 160,511: 17x25
+#458 @ 579,673: 10x18
+#459 @ 412,728: 27x17
+#460 @ 440,340: 24x21
+#461 @ 548,214: 10x15
+#462 @ 27,754: 24x18
+#463 @ 135,86: 18x20
+#464 @ 840,729: 26x27
+#465 @ 9,613: 11x15
+#466 @ 862,380: 24x29
+#467 @ 142,927: 27x11
+#468 @ 570,414: 16x26
+#469 @ 946,509: 17x28
+#470 @ 81,426: 13x27
+#471 @ 786,434: 18x11
+#472 @ 899,350: 27x12
+#473 @ 105,502: 20x27
+#474 @ 238,758: 26x14
+#475 @ 420,601: 26x26
+#476 @ 646,810: 22x29
+#477 @ 343,259: 14x13
+#478 @ 676,974: 24x18
+#479 @ 951,259: 25x26
+#480 @ 219,781: 21x27
+#481 @ 601,64: 19x25
+#482 @ 647,903: 18x23
+#483 @ 832,908: 24x14
+#484 @ 177,320: 21x16
+#485 @ 312,929: 12x24
+#486 @ 83,437: 5x7
+#487 @ 540,333: 22x27
+#488 @ 936,895: 14x11
+#489 @ 936,698: 29x13
+#490 @ 217,809: 21x13
+#491 @ 188,895: 27x24
+#492 @ 635,204: 12x24
+#493 @ 484,820: 21x23
+#494 @ 133,583: 25x18
+#495 @ 129,426: 19x26
+#496 @ 316,937: 18x18
+#497 @ 303,440: 29x11
+#498 @ 967,662: 18x29
+#499 @ 970,51: 21x15
+#500 @ 90,833: 9x15
+#501 @ 440,430: 19x20
+#502 @ 657,117: 10x18
+#503 @ 606,372: 10x5
+#504 @ 57,870: 11x27
+#505 @ 940,663: 29x12
+#506 @ 360,582: 22x19
+#507 @ 810,88: 11x20
+#508 @ 626,668: 25x24
+#509 @ 392,266: 12x16
+#510 @ 919,290: 19x23
+#511 @ 922,221: 18x19
+#512 @ 804,532: 25x25
+#513 @ 558,467: 28x16
+#514 @ 438,970: 10x13
+#515 @ 162,322: 12x19
+#516 @ 101,267: 27x27
+#517 @ 752,347: 29x13
+#518 @ 693,751: 22x15
+#519 @ 753,101: 13x13
+#520 @ 559,948: 23x28
+#521 @ 36,581: 22x11
+#522 @ 457,637: 29x22
+#523 @ 421,419: 28x23
+#524 @ 289,810: 10x21
+#525 @ 31,600: 27x18
+#526 @ 48,298: 21x23
+#527 @ 428,194: 23x22
+#528 @ 745,77: 21x16
+#529 @ 764,493: 18x12
+#530 @ 523,124: 19x21
+#531 @ 762,936: 12x18
+#532 @ 925,74: 14x11
+#533 @ 684,936: 17x19
+#534 @ 230,175: 11x15
+#535 @ 331,442: 12x22
+#536 @ 929,945: 22x21
+#537 @ 274,966: 13x29
+#538 @ 96,418: 28x19
+#539 @ 445,961: 26x14
+#540 @ 451,198: 24x22
+#541 @ 607,359: 12x21
+#542 @ 467,484: 26x10
+#543 @ 229,392: 15x16
+#544 @ 472,371: 13x27
+#545 @ 733,813: 13x19
+#546 @ 58,594: 23x24
+#547 @ 954,588: 17x25
+#548 @ 283,301: 18x20
+#549 @ 29,203: 27x23
+#550 @ 440,68: 17x15
+#551 @ 14,738: 29x18
+#552 @ 379,694: 12x16
+#553 @ 666,126: 19x15
+#554 @ 858,560: 22x19
+#555 @ 939,87: 14x25
+#556 @ 429,707: 24x29
+#557 @ 675,908: 15x11
+#558 @ 790,821: 19x26
+#559 @ 370,469: 29x24
+#560 @ 109,122: 27x29
+#561 @ 526,358: 19x19
+#562 @ 297,282: 12x27
+#563 @ 530,927: 25x10
+#564 @ 3,189: 26x15
+#565 @ 657,755: 29x25
+#566 @ 580,419: 23x14
+#567 @ 392,633: 25x13
+#568 @ 408,481: 23x20
+#569 @ 243,965: 25x25
+#570 @ 477,69: 29x29
+#571 @ 814,923: 27x19
+#572 @ 896,68: 16x18
+#573 @ 968,582: 10x16
+#574 @ 787,767: 25x16
+#575 @ 569,668: 25x18
+#576 @ 134,847: 24x14
+#577 @ 210,447: 11x22
+#578 @ 427,266: 20x13
+#579 @ 210,305: 27x19
+#580 @ 811,694: 28x17
+#581 @ 6,32: 27x20
+#582 @ 44,241: 15x29
+#583 @ 32,749: 25x20
+#584 @ 468,277: 25x26
+#585 @ 569,952: 26x10
+#586 @ 954,736: 14x11
+#587 @ 797,233: 19x13
+#588 @ 300,577: 19x12
+#589 @ 228,110: 21x17
+#590 @ 480,763: 15x10
+#591 @ 345,838: 14x10
+#592 @ 329,253: 27x13
+#593 @ 271,287: 13x18
+#594 @ 874,131: 28x13
+#595 @ 520,243: 21x27
+#596 @ 940,226: 11x29
+#597 @ 1,931: 11x14
+#598 @ 874,562: 13x29
+#599 @ 325,175: 28x16
+#600 @ 728,891: 15x13
+#601 @ 785,625: 25x28
+#602 @ 125,920: 20x28
+#603 @ 276,116: 16x28
+#604 @ 655,965: 29x23
+#605 @ 233,230: 23x16
+#606 @ 874,850: 15x17
+#607 @ 621,454: 12x18
+#608 @ 738,10: 27x23
+#609 @ 908,493: 21x7
+#610 @ 271,410: 26x11
+#611 @ 734,135: 19x13
+#612 @ 591,883: 15x10
+#613 @ 151,722: 22x11
+#614 @ 485,829: 28x25
+#615 @ 662,482: 24x16
+#616 @ 392,613: 19x11
+#617 @ 45,137: 20x24
+#618 @ 949,145: 18x25
+#619 @ 674,134: 11x11
+#620 @ 157,120: 10x18
+#621 @ 491,935: 16x11
+#622 @ 39,881: 22x25
+#623 @ 632,183: 12x22
+#624 @ 398,293: 13x18
+#625 @ 434,69: 27x14
+#626 @ 70,633: 15x16
+#627 @ 667,639: 18x23
+#628 @ 552,695: 15x24
+#629 @ 385,153: 19x26
+#630 @ 750,85: 19x12
+#631 @ 968,877: 18x16
+#632 @ 759,948: 15x17
+#633 @ 901,324: 23x13
+#634 @ 753,709: 23x26
+#635 @ 788,663: 10x11
+#636 @ 270,158: 21x11
+#637 @ 908,72: 19x11
+#638 @ 204,216: 13x24
+#639 @ 241,461: 21x28
+#640 @ 791,76: 17x24
+#641 @ 199,727: 10x20
+#642 @ 553,139: 25x24
+#643 @ 53,666: 15x19
+#644 @ 55,326: 26x11
+#645 @ 286,583: 19x16
+#646 @ 897,320: 22x13
+#647 @ 116,494: 26x14
+#648 @ 342,32: 27x17
+#649 @ 545,307: 18x21
+#650 @ 933,188: 12x23
+#651 @ 592,473: 14x11
+#652 @ 948,426: 13x23
+#653 @ 468,296: 25x14
+#654 @ 716,276: 14x29
+#655 @ 326,645: 18x22
+#656 @ 263,621: 13x17
+#657 @ 970,57: 19x11
+#658 @ 751,564: 17x23
+#659 @ 411,204: 20x19
+#660 @ 831,366: 27x27
+#661 @ 70,367: 21x12
+#662 @ 636,824: 28x20
+#663 @ 848,568: 18x18
+#664 @ 508,846: 17x23
+#665 @ 762,142: 20x26
+#666 @ 846,104: 17x25
+#667 @ 37,3: 13x15
+#668 @ 505,826: 23x14
+#669 @ 617,653: 13x18
+#670 @ 829,657: 26x14
+#671 @ 666,65: 16x29
+#672 @ 580,841: 25x27
+#673 @ 221,441: 12x24
+#674 @ 231,390: 28x20
+#675 @ 497,846: 17x18
+#676 @ 449,581: 19x12
+#677 @ 525,632: 22x27
+#678 @ 875,485: 12x15
+#679 @ 840,789: 23x15
+#680 @ 651,302: 10x24
+#681 @ 410,801: 26x29
+#682 @ 918,67: 28x28
+#683 @ 738,587: 17x16
+#684 @ 237,523: 26x27
+#685 @ 360,835: 24x18
+#686 @ 36,238: 14x10
+#687 @ 135,101: 26x29
+#688 @ 711,296: 14x18
+#689 @ 222,699: 24x25
+#690 @ 905,331: 18x29
+#691 @ 801,78: 17x21
+#692 @ 943,680: 24x12
+#693 @ 103,456: 13x25
+#694 @ 678,587: 14x17
+#695 @ 559,705: 27x28
+#696 @ 294,817: 20x11
+#697 @ 532,783: 21x24
+#698 @ 209,827: 13x18
+#699 @ 64,40: 29x14
+#700 @ 443,959: 10x13
+#701 @ 589,886: 22x14
+#702 @ 635,815: 25x25
+#703 @ 673,911: 13x23
+#704 @ 491,959: 14x24
+#705 @ 459,317: 23x10
+#706 @ 491,822: 22x27
+#707 @ 534,670: 21x22
+#708 @ 401,367: 12x27
+#709 @ 342,37: 14x24
+#710 @ 692,724: 28x13
+#711 @ 365,291: 13x23
+#712 @ 111,674: 21x13
+#713 @ 373,573: 25x12
+#714 @ 545,965: 12x16
+#715 @ 454,6: 29x16
+#716 @ 263,426: 17x12
+#717 @ 631,862: 23x19
+#718 @ 927,673: 14x28
+#719 @ 770,688: 23x25
+#720 @ 70,269: 14x25
+#721 @ 271,512: 14x25
+#722 @ 433,749: 25x29
+#723 @ 918,404: 13x27
+#724 @ 529,762: 23x26
+#725 @ 684,593: 18x25
+#726 @ 314,627: 11x21
+#727 @ 853,81: 10x16
+#728 @ 261,513: 29x19
+#729 @ 892,705: 16x6
+#730 @ 654,796: 27x15
+#731 @ 935,598: 23x18
+#732 @ 365,515: 17x29
+#733 @ 761,574: 27x20
+#734 @ 868,969: 28x20
+#735 @ 594,341: 17x22
+#736 @ 803,754: 17x10
+#737 @ 967,484: 27x16
+#738 @ 84,631: 13x12
+#739 @ 195,141: 28x13
+#740 @ 227,736: 24x17
+#741 @ 235,494: 12x10
+#742 @ 563,852: 12x18
+#743 @ 700,314: 4x21
+#744 @ 129,207: 25x22
+#745 @ 301,905: 24x27
+#746 @ 572,116: 14x10
+#747 @ 575,935: 22x26
+#748 @ 443,21: 23x27
+#749 @ 105,271: 15x19
+#750 @ 827,885: 23x11
+#751 @ 439,585: 16x20
+#752 @ 822,399: 12x28
+#753 @ 638,817: 28x18
+#754 @ 725,170: 17x12
+#755 @ 775,445: 11x16
+#756 @ 1,11: 13x26
+#757 @ 967,399: 15x11
+#758 @ 374,194: 25x13
+#759 @ 521,733: 20x25
+#760 @ 356,810: 12x24
+#761 @ 570,935: 16x22
+#762 @ 730,830: 17x12
+#763 @ 310,885: 21x23
+#764 @ 811,690: 27x20
+#765 @ 930,403: 26x23
+#766 @ 400,495: 16x19
+#767 @ 911,677: 21x12
+#768 @ 703,16: 25x15
+#769 @ 70,245: 16x20
+#770 @ 118,518: 13x13
+#771 @ 686,455: 12x18
+#772 @ 600,648: 21x20
+#773 @ 77,404: 26x19
+#774 @ 16,179: 14x19
+#775 @ 308,950: 25x14
+#776 @ 610,322: 15x20
+#777 @ 939,204: 17x29
+#778 @ 271,882: 14x29
+#779 @ 539,700: 14x10
+#780 @ 858,601: 10x20
+#781 @ 395,816: 18x27
+#782 @ 350,234: 11x17
+#783 @ 945,520: 11x25
+#784 @ 18,516: 13x21
+#785 @ 305,194: 14x11
+#786 @ 72,324: 19x10
+#787 @ 367,309: 18x26
+#788 @ 35,145: 20x13
+#789 @ 711,821: 28x26
+#790 @ 823,40: 24x24
+#791 @ 215,121: 19x10
+#792 @ 513,885: 28x15
+#793 @ 765,87: 14x21
+#794 @ 95,179: 23x12
+#795 @ 496,813: 19x16
+#796 @ 860,850: 26x18
+#797 @ 204,706: 16x28
+#798 @ 429,621: 14x21
+#799 @ 310,320: 24x22
+#800 @ 630,110: 21x19
+#801 @ 714,50: 21x26
+#802 @ 462,553: 13x27
+#803 @ 452,10: 13x18
+#804 @ 869,575: 15x11
+#805 @ 519,544: 22x11
+#806 @ 758,906: 16x10
+#807 @ 147,49: 17x11
+#808 @ 19,546: 13x26
+#809 @ 141,433: 15x14
+#810 @ 688,390: 13x24
+#811 @ 929,611: 21x20
+#812 @ 724,15: 13x16
+#813 @ 275,501: 27x17
+#814 @ 417,260: 24x10
+#815 @ 833,888: 24x17
+#816 @ 481,309: 25x26
+#817 @ 6,942: 29x24
+#818 @ 636,811: 24x21
+#819 @ 199,939: 5x19
+#820 @ 69,358: 18x21
+#821 @ 221,805: 14x17
+#822 @ 255,568: 24x26
+#823 @ 486,554: 19x25
+#824 @ 490,860: 29x14
+#825 @ 679,976: 23x13
+#826 @ 297,20: 29x24
+#827 @ 496,797: 18x27
+#828 @ 152,118: 20x26
+#829 @ 646,277: 23x27
+#830 @ 565,291: 18x26
+#831 @ 434,932: 11x27
+#832 @ 117,22: 20x14
+#833 @ 639,800: 18x22
+#834 @ 760,683: 16x28
+#835 @ 250,941: 18x16
+#836 @ 176,714: 12x21
+#837 @ 958,314: 17x16
+#838 @ 913,30: 21x21
+#839 @ 878,493: 26x10
+#840 @ 545,745: 22x20
+#841 @ 302,630: 26x18
+#842 @ 364,177: 18x26
+#843 @ 279,682: 11x21
+#844 @ 348,370: 18x27
+#845 @ 551,961: 14x14
+#846 @ 691,919: 12x17
+#847 @ 966,955: 26x14
+#848 @ 728,392: 23x14
+#849 @ 298,930: 19x11
+#850 @ 242,944: 15x20
+#851 @ 535,668: 17x23
+#852 @ 554,105: 19x17
+#853 @ 529,559: 13x10
+#854 @ 314,742: 28x17
+#855 @ 635,321: 29x24
+#856 @ 537,842: 27x29
+#857 @ 315,282: 11x13
+#858 @ 15,3: 24x25
+#859 @ 955,424: 17x14
+#860 @ 630,470: 17x27
+#861 @ 507,934: 25x11
+#862 @ 422,359: 20x12
+#863 @ 781,484: 15x19
+#864 @ 769,77: 10x29
+#865 @ 388,277: 14x22
+#866 @ 682,764: 18x13
+#867 @ 170,869: 14x16
+#868 @ 796,842: 26x25
+#869 @ 498,232: 16x24
+#870 @ 640,772: 18x27
+#871 @ 141,89: 10x10
+#872 @ 294,158: 21x14
+#873 @ 698,312: 10x27
+#874 @ 892,408: 21x29
+#875 @ 843,805: 12x29
+#876 @ 52,496: 21x11
+#877 @ 689,776: 17x11
+#878 @ 256,762: 10x29
+#879 @ 744,584: 17x19
+#880 @ 510,369: 17x10
+#881 @ 943,242: 29x11
+#882 @ 688,217: 21x24
+#883 @ 528,648: 12x29
+#884 @ 217,258: 10x28
+#885 @ 811,447: 15x19
+#886 @ 844,797: 12x18
+#887 @ 913,207: 15x17
+#888 @ 824,534: 21x16
+#889 @ 77,768: 16x24
+#890 @ 139,473: 22x13
+#891 @ 355,51: 24x28
+#892 @ 201,544: 13x20
+#893 @ 449,15: 12x20
+#894 @ 831,218: 20x25
+#895 @ 798,126: 25x19
+#896 @ 772,475: 11x25
+#897 @ 641,785: 26x16
+#898 @ 276,393: 13x18
+#899 @ 487,319: 19x28
+#900 @ 675,952: 29x21
+#901 @ 468,753: 28x18
+#902 @ 535,376: 16x9
+#903 @ 39,898: 17x23
+#904 @ 99,629: 22x16
+#905 @ 806,446: 21x12
+#906 @ 597,333: 10x14
+#907 @ 916,680: 10x19
+#908 @ 297,502: 13x19
+#909 @ 414,728: 25x26
+#910 @ 607,642: 22x25
+#911 @ 724,9: 23x22
+#912 @ 637,266: 26x21
+#913 @ 880,429: 27x11
+#914 @ 707,289: 18x29
+#915 @ 402,625: 12x23
+#916 @ 297,40: 10x13
+#917 @ 470,220: 16x10
+#918 @ 89,628: 17x21
+#919 @ 785,748: 21x21
+#920 @ 981,482: 12x26
+#921 @ 789,645: 23x18
+#922 @ 898,691: 29x18
+#923 @ 630,922: 20x13
+#924 @ 19,444: 25x13
+#925 @ 377,695: 23x13
+#926 @ 119,12: 13x19
+#927 @ 941,593: 12x25
+#928 @ 280,511: 11x29
+#929 @ 454,116: 14x29
+#930 @ 681,915: 19x10
+#931 @ 202,565: 28x27
+#932 @ 306,934: 21x28
+#933 @ 837,120: 17x17
+#934 @ 761,514: 12x27
+#935 @ 656,112: 28x21
+#936 @ 470,486: 29x25
+#937 @ 572,635: 11x15
+#938 @ 139,108: 12x16
+#939 @ 352,517: 25x20
+#940 @ 696,339: 28x23
+#941 @ 914,85: 18x23
+#942 @ 161,522: 16x29
+#943 @ 869,823: 20x18
+#944 @ 451,333: 21x20
+#945 @ 921,699: 27x14
+#946 @ 637,312: 17x14
+#947 @ 632,177: 12x16
+#948 @ 34,606: 19x23
+#949 @ 316,345: 28x15
+#950 @ 101,841: 13x21
+#951 @ 506,655: 28x12
+#952 @ 375,282: 20x18
+#953 @ 397,612: 28x24
+#954 @ 680,894: 22x21
+#955 @ 18,701: 24x17
+#956 @ 120,10: 10x13
+#957 @ 30,805: 17x24
+#958 @ 309,659: 27x24
+#959 @ 153,716: 13x11
+#960 @ 54,180: 23x12
+#961 @ 530,955: 17x10
+#962 @ 959,734: 17x12
+#963 @ 168,400: 25x16
+#964 @ 186,558: 16x25
+#965 @ 454,85: 11x10
+#966 @ 597,643: 23x11
+#967 @ 439,427: 13x22
+#968 @ 813,243: 22x13
+#969 @ 135,900: 21x22
+#970 @ 846,745: 13x19
+#971 @ 871,385: 24x25
+#972 @ 521,642: 8x15
+#973 @ 604,353: 24x28
+#974 @ 234,756: 25x29
+#975 @ 435,952: 10x19
+#976 @ 459,207: 10x19
+#977 @ 977,487: 22x15
+#978 @ 463,571: 24x10
+#979 @ 216,228: 12x12
+#980 @ 198,115: 19x15
+#981 @ 155,469: 25x20
+#982 @ 419,605: 11x16
+#983 @ 197,936: 14x28
+#984 @ 518,561: 13x21
+#985 @ 556,951: 28x25
+#986 @ 316,446: 24x25
+#987 @ 271,194: 23x25
+#988 @ 844,694: 20x29
+#989 @ 977,651: 20x17
+#990 @ 232,777: 28x15
+#991 @ 722,42: 11x27
+#992 @ 903,340: 10x29
+#993 @ 857,557: 10x23
+#994 @ 858,575: 14x21
+#995 @ 97,496: 8x5
+#996 @ 508,98: 17x26
+#997 @ 71,401: 28x27
+#998 @ 941,717: 21x20
+#999 @ 486,748: 29x28
+#1000 @ 367,319: 22x13
+#1001 @ 63,671: 9x8
+#1002 @ 636,786: 29x17
+#1003 @ 602,645: 14x4
+#1004 @ 359,826: 16x23
+#1005 @ 799,73: 12x12
+#1006 @ 532,367: 23x28
+#1007 @ 656,823: 17x10
+#1008 @ 113,477: 21x24
+#1009 @ 273,812: 17x17
+#1010 @ 544,941: 15x23
+#1011 @ 226,181: 13x10
+#1012 @ 42,750: 10x22
+#1013 @ 940,489: 26x22
+#1014 @ 920,348: 12x16
+#1015 @ 400,818: 12x14
+#1016 @ 427,390: 24x29
+#1017 @ 26,238: 29x12
+#1018 @ 731,132: 16x12
+#1019 @ 687,971: 26x21
+#1020 @ 555,864: 14x24
+#1021 @ 759,345: 24x13
+#1022 @ 27,329: 18x23
+#1023 @ 683,948: 26x27
+#1024 @ 638,29: 28x23
+#1025 @ 574,64: 12x14
+#1026 @ 196,148: 16x11
+#1027 @ 107,497: 21x29
+#1028 @ 425,211: 19x28
+#1029 @ 437,593: 22x27
+#1030 @ 144,516: 28x28
+#1031 @ 28,601: 11x25
+#1032 @ 958,725: 18x29
+#1033 @ 777,648: 27x22
+#1034 @ 299,576: 16x10
+#1035 @ 6,916: 16x22
+#1036 @ 114,894: 16x19
+#1037 @ 265,683: 23x26
+#1038 @ 271,420: 10x20
+#1039 @ 204,106: 29x11
+#1040 @ 809,242: 23x10
+#1041 @ 158,848: 24x14
+#1042 @ 55,202: 29x13
+#1043 @ 405,220: 24x22
+#1044 @ 844,900: 15x16
+#1045 @ 558,269: 18x29
+#1046 @ 944,123: 18x26
+#1047 @ 561,754: 14x24
+#1048 @ 648,427: 16x11
+#1049 @ 957,204: 28x17
+#1050 @ 246,285: 21x26
+#1051 @ 463,398: 28x27
+#1052 @ 925,306: 22x13
+#1053 @ 286,630: 24x21
+#1054 @ 687,860: 10x18
+#1055 @ 178,479: 10x20
+#1056 @ 273,150: 19x20
+#1057 @ 26,686: 16x24
+#1058 @ 245,71: 28x29
+#1059 @ 140,794: 21x18
+#1060 @ 733,490: 27x20
+#1061 @ 661,574: 16x17
+#1062 @ 487,330: 27x13
+#1063 @ 787,621: 14x29
+#1064 @ 175,871: 5x11
+#1065 @ 286,512: 10x18
+#1066 @ 497,258: 16x28
+#1067 @ 56,296: 25x16
+#1068 @ 790,964: 22x27
+#1069 @ 345,360: 16x21
+#1070 @ 487,262: 17x19
+#1071 @ 813,130: 26x22
+#1072 @ 492,922: 11x16
+#1073 @ 275,150: 12x10
+#1074 @ 907,307: 17x28
+#1075 @ 417,822: 14x15
+#1076 @ 737,423: 20x21
+#1077 @ 183,610: 29x22
+#1078 @ 172,334: 28x10
+#1079 @ 231,265: 15x18
+#1080 @ 584,971: 10x25
+#1081 @ 863,802: 10x8
+#1082 @ 551,563: 20x21
+#1083 @ 612,208: 24x11
+#1084 @ 857,384: 12x15
+#1085 @ 698,767: 28x23
+#1086 @ 54,183: 12x26
+#1087 @ 391,555: 15x28
+#1088 @ 428,382: 21x13
+#1089 @ 908,69: 16x12
+#1090 @ 785,632: 16x22
+#1091 @ 51,654: 11x21
+#1092 @ 459,457: 18x17
+#1093 @ 352,369: 15x15
+#1094 @ 564,724: 13x25
+#1095 @ 420,706: 23x14
+#1096 @ 371,953: 18x15
+#1097 @ 131,8: 13x19
+#1098 @ 515,825: 25x22
+#1099 @ 660,828: 21x20
+#1100 @ 567,664: 29x11
+#1101 @ 75,479: 24x18
+#1102 @ 901,708: 27x12
+#1103 @ 170,468: 15x19
+#1104 @ 562,722: 16x14
+#1105 @ 746,554: 18x29
+#1106 @ 523,228: 27x22
+#1107 @ 505,930: 26x20
+#1108 @ 164,531: 14x23
+#1109 @ 451,71: 25x17
+#1110 @ 559,480: 18x27
+#1111 @ 567,320: 13x22
+#1112 @ 701,36: 16x16
+#1113 @ 357,114: 24x27
+#1114 @ 927,88: 25x10
+#1115 @ 622,744: 17x16
+#1116 @ 160,379: 22x19
+#1117 @ 320,188: 25x16
+#1118 @ 88,341: 12x13
+#1119 @ 590,321: 21x26
+#1120 @ 957,505: 24x23
+#1121 @ 901,677: 16x17
+#1122 @ 85,829: 18x26
+#1123 @ 651,580: 16x14
+#1124 @ 168,538: 19x28
+#1125 @ 930,250: 29x11
+#1126 @ 355,367: 21x21
+#1127 @ 861,800: 17x14
+#1128 @ 622,306: 16x16
+#1129 @ 543,951: 11x13
+#1130 @ 122,950: 16x11
+#1131 @ 264,695: 17x11
+#1132 @ 132,0: 26x17
+#1133 @ 971,300: 28x19
+#1134 @ 742,98: 20x23
+#1135 @ 807,370: 13x21
+#1136 @ 154,954: 18x28
+#1137 @ 803,285: 26x25
+#1138 @ 422,393: 14x15
+#1139 @ 513,572: 11x20
+#1140 @ 530,301: 16x24
+#1141 @ 633,177: 26x15
+#1142 @ 389,624: 15x26
+#1143 @ 911,83: 14x17
+#1144 @ 629,408: 23x21
+#1145 @ 769,692: 11x17
+#1146 @ 80,113: 23x29
+#1147 @ 811,912: 26x22
+#1148 @ 891,246: 10x10
+#1149 @ 731,877: 13x14
+#1150 @ 210,784: 10x29
+#1151 @ 233,647: 25x24
+#1152 @ 771,463: 15x20
+#1153 @ 450,117: 27x16
+#1154 @ 932,704: 18x16
+#1155 @ 792,915: 10x17
+#1156 @ 542,686: 24x27
+#1157 @ 335,704: 21x22
+#1158 @ 203,399: 14x21
+#1159 @ 911,460: 18x12
+#1160 @ 963,475: 25x26
+#1161 @ 291,514: 23x13
+#1162 @ 30,811: 23x13
+#1163 @ 947,274: 18x21
+#1164 @ 222,471: 22x24
+#1165 @ 443,588: 25x10
+#1166 @ 666,874: 28x21
+#1167 @ 518,828: 27x16
+#1168 @ 108,443: 11x21
+#1169 @ 446,539: 27x29
+#1170 @ 514,224: 25x22
+#1171 @ 258,91: 11x11
+#1172 @ 326,28: 24x12
+#1173 @ 253,550: 24x26
+#1174 @ 580,824: 17x25
+#1175 @ 766,705: 10x14
+#1176 @ 976,892: 19x17
+#1177 @ 806,955: 14x16
+#1178 @ 561,770: 15x27
+#1179 @ 819,136: 10x14
+#1180 @ 431,616: 20x27
+#1181 @ 676,979: 16x21
+#1182 @ 648,742: 16x14
+#1183 @ 650,106: 27x22
+#1184 @ 515,539: 18x13
+#1185 @ 22,952: 14x22
+#1186 @ 185,332: 23x22
+#1187 @ 155,769: 14x21
+#1188 @ 908,75: 26x10
+#1189 @ 849,229: 18x16
+#1190 @ 795,814: 26x19
+#1191 @ 346,233: 25x17
+#1192 @ 696,77: 22x10
+#1193 @ 213,437: 18x23
+#1194 @ 403,724: 17x23
+#1195 @ 35,503: 23x25
+#1196 @ 131,593: 11x15
+#1197 @ 41,894: 21x27
+#1198 @ 380,87: 29x13
+#1199 @ 786,759: 12x20
+#1200 @ 801,43: 27x26
+#1201 @ 465,412: 21x14
+#1202 @ 548,691: 26x22
+#1203 @ 812,235: 11x14
+#1204 @ 762,17: 26x14
+#1205 @ 897,241: 20x20
+#1206 @ 319,291: 11x29
+#1207 @ 88,800: 29x27
+#1208 @ 385,915: 17x26
+#1209 @ 113,10: 24x21
+#1210 @ 227,220: 24x26
+#1211 @ 728,821: 19x19
+#1212 @ 392,571: 17x16
+#1213 @ 157,983: 8x3
+#1214 @ 572,429: 16x29
+#1215 @ 393,348: 11x20
+#1216 @ 373,884: 14x11
+#1217 @ 905,711: 27x25
+#1218 @ 310,872: 12x12
+#1219 @ 194,322: 11x26
+#1220 @ 802,261: 13x18
+#1221 @ 543,284: 18x21
+#1222 @ 689,408: 24x20
+#1223 @ 544,148: 13x29
+#1224 @ 673,69: 21x13
+#1225 @ 810,368: 22x25
+#1226 @ 304,626: 23x15
+#1227 @ 793,73: 21x15
+#1228 @ 635,931: 22x28
+#1229 @ 303,193: 20x19
+#1230 @ 65,20: 27x26
+#1231 @ 497,253: 16x19
+#1232 @ 441,245: 6x13
+#1233 @ 482,973: 16x21
+#1234 @ 341,664: 17x27
+#1235 @ 299,193: 23x14
+#1236 @ 392,906: 16x28
+#1237 @ 711,715: 24x14
+#1238 @ 624,279: 18x16
+#1239 @ 855,298: 16x23
+#1240 @ 616,211: 13x13
+#1241 @ 268,675: 25x12
+#1242 @ 287,925: 16x15
+#1243 @ 184,561: 28x11
+#1244 @ 855,829: 27x15
+#1245 @ 446,241: 10x25
+#1246 @ 526,758: 18x10
+#1247 @ 776,260: 28x23
+#1248 @ 946,208: 26x12
+#1249 @ 762,707: 11x26
+#1250 @ 177,715: 16x26
+#1251 @ 737,72: 11x11
+#1252 @ 638,166: 12x13
+#1253 @ 347,956: 29x19
+#1254 @ 597,457: 26x23
+#1255 @ 194,552: 12x25
+#1256 @ 572,968: 16x23
+#1257 @ 347,60: 10x16
+#1258 @ 128,666: 17x16
+#1259 @ 334,232: 15x3
+#1260 @ 465,315: 15x23
+#1261 @ 738,533: 12x22
+#1262 @ 25,208: 27x27
+#1263 @ 431,71: 13x27
+#1264 @ 168,784: 23x17
+#1265 @ 848,386: 21x13
+#1266 @ 740,331: 15x24
+#1267 @ 513,743: 20x18
+#1268 @ 698,60: 10x20
+#1269 @ 56,816: 23x16
+#1270 @ 379,162: 18x22
+#1271 @ 194,694: 24x11
+#1272 @ 383,827: 20x11
+#1273 @ 435,600: 20x29
+#1274 @ 736,928: 27x18
+#1275 @ 583,832: 23x11
+#1276 @ 775,114: 19x15
+#1277 @ 549,348: 20x26
+#1278 @ 511,967: 29x25
+#1279 @ 39,885: 19x17
+#1280 @ 437,4: 15x23
+#1281 @ 752,17: 29x18
+#1282 @ 570,125: 19x10
+#1283 @ 898,955: 19x19
+#1284 @ 758,432: 17x22
+#1285 @ 797,588: 17x28
+#1286 @ 125,894: 14x23
+#1287 @ 56,630: 25x17
+#1288 @ 851,111: 11x14
+#1289 @ 642,806: 11x11
+#1290 @ 80,813: 12x19
+#1291 @ 633,952: 10x28
+#1292 @ 230,425: 12x17
+#1293 @ 867,811: 22x26
+#1294 @ 80,346: 20x25
+#1295 @ 713,338: 16x26
+#1296 @ 377,946: 26x28
+#1297 @ 274,335: 19x14
+#1298 @ 798,698: 22x18
+#1299 @ 149,195: 12x26
+#1300 @ 339,57: 22x20
+#1301 @ 652,225: 11x14
+#1302 @ 936,759: 17x29
+#1303 @ 162,489: 18x26
+#1304 @ 551,78: 11x17
+#1305 @ 606,914: 27x16
+#1306 @ 83,815: 5x13
+#1307 @ 139,844: 28x10
+#1308 @ 515,187: 29x10
+#1309 @ 320,358: 14x15
+#1310 @ 336,21: 19x16
+#1311 @ 420,598: 20x26
\ No newline at end of file
diff --git a/AoC2018.Runner/Input/day04.txt b/AoC2018.Runner/Input/day04.txt
new file mode 100644
index 0000000..1c482a2
--- /dev/null
+++ b/AoC2018.Runner/Input/day04.txt
@@ -0,0 +1,1057 @@
+[1518-07-03 23:58] Guard #2437 begins shift
+[1518-09-23 00:54] falls asleep
+[1518-05-08 00:02] Guard #659 begins shift
+[1518-06-09 00:52] falls asleep
+[1518-07-27 00:59] wakes up
+[1518-03-04 00:14] falls asleep
+[1518-10-28 00:45] falls asleep
+[1518-11-14 00:02] Guard #3011 begins shift
+[1518-05-15 23:58] Guard #1447 begins shift
+[1518-07-29 00:07] falls asleep
+[1518-05-20 00:14] falls asleep
+[1518-10-18 00:50] wakes up
+[1518-09-24 00:02] Guard #1901 begins shift
+[1518-10-31 00:20] falls asleep
+[1518-08-23 23:49] Guard #3307 begins shift
+[1518-09-19 23:52] Guard #2083 begins shift
+[1518-02-25 00:51] wakes up
+[1518-02-28 00:34] wakes up
+[1518-04-29 00:54] wakes up
+[1518-07-10 23:59] Guard #1901 begins shift
+[1518-10-01 00:52] wakes up
+[1518-08-01 00:49] falls asleep
+[1518-03-14 00:12] falls asleep
+[1518-09-03 00:15] falls asleep
+[1518-07-19 00:06] falls asleep
+[1518-07-22 00:03] Guard #1307 begins shift
+[1518-03-22 00:15] wakes up
+[1518-07-08 00:02] falls asleep
+[1518-07-06 00:42] wakes up
+[1518-03-26 00:58] wakes up
+[1518-05-06 00:21] wakes up
+[1518-06-07 00:55] wakes up
+[1518-10-14 00:37] wakes up
+[1518-10-18 00:00] Guard #1009 begins shift
+[1518-08-05 00:01] Guard #3307 begins shift
+[1518-10-27 00:58] wakes up
+[1518-05-27 00:42] falls asleep
+[1518-10-05 00:51] wakes up
+[1518-06-04 00:39] falls asleep
+[1518-06-13 00:21] falls asleep
+[1518-09-03 00:01] Guard #991 begins shift
+[1518-05-20 00:55] wakes up
+[1518-04-19 00:58] wakes up
+[1518-10-24 00:02] Guard #991 begins shift
+[1518-10-31 00:00] Guard #2269 begins shift
+[1518-05-02 00:00] Guard #2437 begins shift
+[1518-08-15 00:59] wakes up
+[1518-09-12 00:33] wakes up
+[1518-08-08 23:56] Guard #3323 begins shift
+[1518-11-04 00:16] falls asleep
+[1518-07-14 00:57] wakes up
+[1518-06-11 00:19] falls asleep
+[1518-04-06 23:58] Guard #1307 begins shift
+[1518-05-04 00:33] wakes up
+[1518-06-30 00:19] falls asleep
+[1518-09-14 00:00] Guard #3251 begins shift
+[1518-05-13 00:37] wakes up
+[1518-08-12 23:50] Guard #3307 begins shift
+[1518-07-14 00:18] wakes up
+[1518-05-26 00:20] falls asleep
+[1518-07-17 00:48] wakes up
+[1518-06-15 00:58] wakes up
+[1518-07-22 00:29] wakes up
+[1518-10-20 00:39] wakes up
+[1518-07-12 00:27] falls asleep
+[1518-03-17 00:14] falls asleep
+[1518-04-28 00:33] falls asleep
+[1518-06-12 00:55] falls asleep
+[1518-03-08 00:39] falls asleep
+[1518-09-05 00:28] wakes up
+[1518-05-23 00:49] falls asleep
+[1518-07-07 00:02] Guard #1447 begins shift
+[1518-11-18 00:56] falls asleep
+[1518-09-03 00:40] wakes up
+[1518-11-10 00:54] falls asleep
+[1518-02-23 00:00] Guard #3323 begins shift
+[1518-07-01 00:46] wakes up
+[1518-04-24 00:44] wakes up
+[1518-09-27 00:14] falls asleep
+[1518-09-26 00:04] Guard #2083 begins shift
+[1518-05-08 00:31] falls asleep
+[1518-05-03 00:19] falls asleep
+[1518-07-15 00:01] Guard #991 begins shift
+[1518-07-09 00:00] Guard #2437 begins shift
+[1518-10-10 00:20] falls asleep
+[1518-05-06 00:55] wakes up
+[1518-06-13 00:54] falls asleep
+[1518-11-06 00:26] falls asleep
+[1518-07-16 00:51] wakes up
+[1518-08-28 00:10] falls asleep
+[1518-06-07 00:35] falls asleep
+[1518-07-13 00:41] wakes up
+[1518-11-01 00:38] falls asleep
+[1518-07-15 00:14] falls asleep
+[1518-08-18 00:44] falls asleep
+[1518-09-21 23:57] Guard #991 begins shift
+[1518-05-30 00:50] wakes up
+[1518-09-30 00:47] wakes up
+[1518-09-07 00:05] falls asleep
+[1518-06-08 00:35] falls asleep
+[1518-03-12 23:53] Guard #1901 begins shift
+[1518-05-05 00:55] falls asleep
+[1518-07-21 00:48] falls asleep
+[1518-09-11 00:44] falls asleep
+[1518-10-24 23:53] Guard #1307 begins shift
+[1518-11-19 00:58] wakes up
+[1518-04-03 00:57] wakes up
+[1518-04-06 00:54] wakes up
+[1518-10-09 23:57] Guard #1447 begins shift
+[1518-09-19 00:54] wakes up
+[1518-11-10 00:58] wakes up
+[1518-08-26 00:42] wakes up
+[1518-09-11 00:53] wakes up
+[1518-03-18 23:56] Guard #2083 begins shift
+[1518-08-01 00:57] wakes up
+[1518-07-12 00:01] Guard #1447 begins shift
+[1518-10-12 00:34] wakes up
+[1518-05-23 00:59] wakes up
+[1518-04-16 00:51] wakes up
+[1518-03-11 00:04] Guard #1901 begins shift
+[1518-08-17 00:40] falls asleep
+[1518-10-21 00:17] falls asleep
+[1518-07-09 00:15] falls asleep
+[1518-08-01 00:01] falls asleep
+[1518-03-01 00:45] wakes up
+[1518-05-26 00:09] falls asleep
+[1518-06-03 00:04] Guard #3307 begins shift
+[1518-10-27 00:02] Guard #3307 begins shift
+[1518-10-13 00:01] Guard #991 begins shift
+[1518-05-04 00:26] falls asleep
+[1518-09-10 00:55] wakes up
+[1518-07-21 00:25] falls asleep
+[1518-07-02 00:45] falls asleep
+[1518-04-03 00:17] falls asleep
+[1518-10-14 00:32] falls asleep
+[1518-07-28 00:03] Guard #127 begins shift
+[1518-11-11 00:39] wakes up
+[1518-07-16 00:00] Guard #659 begins shift
+[1518-06-17 00:01] Guard #2269 begins shift
+[1518-05-17 23:53] Guard #3307 begins shift
+[1518-07-31 23:49] Guard #1831 begins shift
+[1518-03-30 23:59] Guard #467 begins shift
+[1518-10-23 00:40] wakes up
+[1518-06-25 00:35] wakes up
+[1518-04-27 00:44] falls asleep
+[1518-08-10 00:22] falls asleep
+[1518-05-29 00:50] wakes up
+[1518-10-09 00:11] falls asleep
+[1518-02-23 23:59] Guard #1303 begins shift
+[1518-06-12 00:58] wakes up
+[1518-10-12 00:28] falls asleep
+[1518-03-07 00:55] wakes up
+[1518-10-19 00:50] wakes up
+[1518-06-13 00:01] Guard #1307 begins shift
+[1518-10-16 00:52] wakes up
+[1518-04-26 00:23] falls asleep
+[1518-08-08 00:04] falls asleep
+[1518-09-14 00:42] falls asleep
+[1518-10-12 00:13] falls asleep
+[1518-09-20 00:20] wakes up
+[1518-09-14 00:57] falls asleep
+[1518-07-25 00:02] Guard #2437 begins shift
+[1518-07-08 00:56] wakes up
+[1518-09-02 00:04] Guard #3307 begins shift
+[1518-09-18 00:06] falls asleep
+[1518-10-22 00:01] Guard #3011 begins shift
+[1518-04-25 00:42] falls asleep
+[1518-09-02 00:57] falls asleep
+[1518-02-21 23:56] Guard #2239 begins shift
+[1518-05-10 00:29] falls asleep
+[1518-04-04 23:56] Guard #127 begins shift
+[1518-09-28 00:59] wakes up
+[1518-10-17 00:12] falls asleep
+[1518-04-24 00:01] Guard #1901 begins shift
+[1518-09-08 00:16] falls asleep
+[1518-11-03 00:47] wakes up
+[1518-11-04 00:55] falls asleep
+[1518-03-03 00:40] falls asleep
+[1518-10-08 00:57] wakes up
+[1518-09-14 00:32] falls asleep
+[1518-06-25 00:58] wakes up
+[1518-09-15 00:33] wakes up
+[1518-06-24 00:04] falls asleep
+[1518-03-15 00:36] falls asleep
+[1518-06-24 23:52] Guard #1447 begins shift
+[1518-06-11 00:36] falls asleep
+[1518-10-21 00:58] wakes up
+[1518-06-17 00:29] wakes up
+[1518-08-21 23:59] Guard #467 begins shift
+[1518-05-16 00:40] wakes up
+[1518-10-07 00:24] falls asleep
+[1518-11-04 00:00] Guard #2239 begins shift
+[1518-08-30 00:03] Guard #127 begins shift
+[1518-05-26 00:04] Guard #2239 begins shift
+[1518-05-08 00:52] wakes up
+[1518-07-31 00:04] Guard #991 begins shift
+[1518-10-11 00:00] Guard #353 begins shift
+[1518-09-29 00:38] falls asleep
+[1518-04-05 00:48] wakes up
+[1518-09-19 00:52] falls asleep
+[1518-07-18 00:02] Guard #3323 begins shift
+[1518-08-11 23:57] Guard #3011 begins shift
+[1518-08-07 23:46] Guard #1307 begins shift
+[1518-07-20 23:58] Guard #2083 begins shift
+[1518-06-25 00:12] wakes up
+[1518-06-12 00:17] falls asleep
+[1518-07-23 23:56] Guard #467 begins shift
+[1518-03-09 00:17] falls asleep
+[1518-07-20 00:35] falls asleep
+[1518-05-25 00:22] wakes up
+[1518-09-27 00:52] falls asleep
+[1518-09-21 00:54] falls asleep
+[1518-09-10 00:42] falls asleep
+[1518-05-02 00:19] falls asleep
+[1518-10-09 00:43] wakes up
+[1518-07-11 00:46] wakes up
+[1518-06-16 00:51] wakes up
+[1518-10-28 00:00] Guard #1303 begins shift
+[1518-06-30 00:39] wakes up
+[1518-10-14 00:48] wakes up
+[1518-11-06 00:37] wakes up
+[1518-03-17 00:00] Guard #1831 begins shift
+[1518-04-04 00:26] falls asleep
+[1518-06-08 00:18] wakes up
+[1518-04-23 00:25] falls asleep
+[1518-03-25 00:52] wakes up
+[1518-09-19 00:01] Guard #659 begins shift
+[1518-11-09 00:48] wakes up
+[1518-09-17 23:59] Guard #1979 begins shift
+[1518-06-01 23:50] Guard #2617 begins shift
+[1518-07-22 00:46] falls asleep
+[1518-08-06 23:58] Guard #1901 begins shift
+[1518-11-23 00:56] wakes up
+[1518-05-10 00:37] wakes up
+[1518-04-29 00:35] falls asleep
+[1518-11-13 00:02] Guard #1307 begins shift
+[1518-07-29 00:01] Guard #3323 begins shift
+[1518-10-30 00:02] Guard #3251 begins shift
+[1518-10-25 00:34] wakes up
+[1518-07-08 00:27] falls asleep
+[1518-10-16 00:30] falls asleep
+[1518-07-03 00:03] Guard #1307 begins shift
+[1518-10-16 23:56] Guard #2437 begins shift
+[1518-02-22 00:44] falls asleep
+[1518-07-25 23:59] Guard #1901 begins shift
+[1518-03-15 00:00] Guard #2617 begins shift
+[1518-07-07 00:58] wakes up
+[1518-02-24 00:59] wakes up
+[1518-09-06 23:48] Guard #3251 begins shift
+[1518-10-07 00:02] Guard #1979 begins shift
+[1518-06-05 00:10] falls asleep
+[1518-05-08 23:52] Guard #2269 begins shift
+[1518-06-19 23:57] Guard #3307 begins shift
+[1518-07-18 00:51] falls asleep
+[1518-02-25 00:10] falls asleep
+[1518-06-02 00:41] wakes up
+[1518-08-27 00:44] wakes up
+[1518-07-26 00:08] falls asleep
+[1518-10-15 00:10] falls asleep
+[1518-04-13 00:17] wakes up
+[1518-09-29 23:59] Guard #2437 begins shift
+[1518-11-05 00:37] falls asleep
+[1518-09-04 00:03] falls asleep
+[1518-09-26 23:59] Guard #523 begins shift
+[1518-11-09 00:30] falls asleep
+[1518-10-28 00:41] wakes up
+[1518-03-14 00:53] falls asleep
+[1518-05-29 00:08] falls asleep
+[1518-04-16 00:32] falls asleep
+[1518-11-21 00:16] falls asleep
+[1518-11-15 00:01] falls asleep
+[1518-08-23 00:52] falls asleep
+[1518-03-04 23:59] Guard #2269 begins shift
+[1518-05-16 00:19] falls asleep
+[1518-07-31 00:53] wakes up
+[1518-05-05 00:48] wakes up
+[1518-09-27 00:46] wakes up
+[1518-05-23 00:44] falls asleep
+[1518-09-11 00:03] Guard #2617 begins shift
+[1518-05-10 00:02] falls asleep
+[1518-03-30 00:37] wakes up
+[1518-04-24 00:58] wakes up
+[1518-06-20 00:57] wakes up
+[1518-11-02 00:34] wakes up
+[1518-04-21 00:55] wakes up
+[1518-08-30 00:34] falls asleep
+[1518-10-09 00:20] wakes up
+[1518-03-02 00:19] wakes up
+[1518-08-18 00:29] falls asleep
+[1518-11-16 00:42] falls asleep
+[1518-06-16 00:00] Guard #523 begins shift
+[1518-05-18 00:44] falls asleep
+[1518-09-05 23:59] Guard #2083 begins shift
+[1518-09-19 00:46] falls asleep
+[1518-11-16 00:00] Guard #1303 begins shift
+[1518-04-27 00:33] wakes up
+[1518-07-30 00:04] Guard #2437 begins shift
+[1518-08-24 00:54] wakes up
+[1518-03-10 00:43] falls asleep
+[1518-10-06 00:03] Guard #1979 begins shift
+[1518-08-10 00:02] Guard #2437 begins shift
+[1518-09-10 00:07] falls asleep
+[1518-07-31 00:29] falls asleep
+[1518-05-19 00:31] wakes up
+[1518-02-28 00:00] Guard #991 begins shift
+[1518-03-14 00:50] wakes up
+[1518-09-20 23:46] Guard #1901 begins shift
+[1518-06-26 00:17] falls asleep
+[1518-07-04 00:49] wakes up
+[1518-07-04 23:58] Guard #2437 begins shift
+[1518-04-11 00:55] wakes up
+[1518-08-05 00:49] wakes up
+[1518-11-01 00:49] falls asleep
+[1518-04-25 23:59] Guard #2437 begins shift
+[1518-04-28 00:27] falls asleep
+[1518-05-27 00:21] falls asleep
+[1518-03-14 00:58] wakes up
+[1518-07-04 00:39] falls asleep
+[1518-10-22 00:53] wakes up
+[1518-05-19 00:57] wakes up
+[1518-11-12 00:57] wakes up
+[1518-07-21 00:58] wakes up
+[1518-04-28 00:42] wakes up
+[1518-08-04 00:15] falls asleep
+[1518-10-24 00:27] falls asleep
+[1518-09-18 00:53] falls asleep
+[1518-03-19 00:44] falls asleep
+[1518-11-11 00:54] wakes up
+[1518-03-10 00:57] wakes up
+[1518-08-01 00:20] wakes up
+[1518-03-07 00:08] falls asleep
+[1518-03-09 00:53] wakes up
+[1518-06-13 00:22] wakes up
+[1518-06-29 00:54] wakes up
+[1518-09-21 00:05] falls asleep
+[1518-08-26 00:14] falls asleep
+[1518-04-23 00:54] falls asleep
+[1518-07-22 00:58] wakes up
+[1518-07-03 00:46] falls asleep
+[1518-04-17 00:29] wakes up
+[1518-06-22 00:34] falls asleep
+[1518-03-13 00:01] falls asleep
+[1518-08-11 00:58] wakes up
+[1518-09-01 00:25] falls asleep
+[1518-09-01 00:53] wakes up
+[1518-06-12 00:02] Guard #3307 begins shift
+[1518-05-01 00:56] wakes up
+[1518-04-11 00:04] Guard #127 begins shift
+[1518-05-29 23:59] Guard #2083 begins shift
+[1518-03-18 00:03] falls asleep
+[1518-10-05 00:04] Guard #991 begins shift
+[1518-06-14 23:57] Guard #659 begins shift
+[1518-10-28 00:15] falls asleep
+[1518-03-10 00:02] Guard #1307 begins shift
+[1518-04-15 00:21] falls asleep
+[1518-08-31 23:56] Guard #1447 begins shift
+[1518-06-22 00:57] wakes up
+[1518-08-24 00:59] wakes up
+[1518-09-08 00:46] falls asleep
+[1518-08-24 00:05] falls asleep
+[1518-09-09 23:56] Guard #1447 begins shift
+[1518-10-02 00:59] wakes up
+[1518-11-17 00:33] falls asleep
+[1518-04-19 00:34] wakes up
+[1518-04-30 00:45] falls asleep
+[1518-08-02 00:27] wakes up
+[1518-11-05 00:47] wakes up
+[1518-05-24 00:43] wakes up
+[1518-06-25 00:25] wakes up
+[1518-10-09 00:23] falls asleep
+[1518-09-16 00:51] wakes up
+[1518-06-29 00:57] falls asleep
+[1518-11-12 00:03] Guard #3011 begins shift
+[1518-07-14 00:00] Guard #3251 begins shift
+[1518-06-20 00:51] falls asleep
+[1518-11-04 00:32] wakes up
+[1518-05-19 00:00] Guard #3323 begins shift
+[1518-04-19 00:15] falls asleep
+[1518-07-21 00:44] wakes up
+[1518-05-30 00:23] falls asleep
+[1518-05-15 00:00] Guard #353 begins shift
+[1518-08-05 23:58] Guard #2269 begins shift
+[1518-09-15 00:52] wakes up
+[1518-07-01 00:18] falls asleep
+[1518-05-18 00:38] wakes up
+[1518-03-02 23:58] Guard #3307 begins shift
+[1518-09-23 00:58] wakes up
+[1518-05-20 00:35] falls asleep
+[1518-05-05 00:30] falls asleep
+[1518-09-23 00:44] wakes up
+[1518-08-25 00:03] Guard #3011 begins shift
+[1518-04-22 00:00] falls asleep
+[1518-05-10 00:24] wakes up
+[1518-06-27 00:43] wakes up
+[1518-03-05 00:45] wakes up
+[1518-11-19 00:18] falls asleep
+[1518-09-24 00:08] falls asleep
+[1518-06-29 00:10] falls asleep
+[1518-04-11 00:29] wakes up
+[1518-06-23 23:52] Guard #1303 begins shift
+[1518-04-20 00:13] wakes up
+[1518-06-03 00:40] falls asleep
+[1518-03-23 00:59] wakes up
+[1518-05-03 00:04] Guard #2437 begins shift
+[1518-11-11 00:19] falls asleep
+[1518-09-21 00:50] wakes up
+[1518-07-12 00:47] wakes up
+[1518-06-01 00:37] wakes up
+[1518-06-03 00:58] wakes up
+[1518-07-18 00:47] wakes up
+[1518-07-02 00:39] wakes up
+[1518-11-06 00:02] Guard #3323 begins shift
+[1518-03-02 00:02] falls asleep
+[1518-07-03 00:53] wakes up
+[1518-06-06 00:38] wakes up
+[1518-04-27 23:56] Guard #2437 begins shift
+[1518-06-28 00:23] falls asleep
+[1518-11-06 00:42] falls asleep
+[1518-03-27 00:30] falls asleep
+[1518-11-11 00:31] falls asleep
+[1518-04-20 00:24] falls asleep
+[1518-06-26 00:49] wakes up
+[1518-08-01 00:54] falls asleep
+[1518-05-03 00:40] wakes up
+[1518-08-23 00:57] wakes up
+[1518-10-07 00:44] wakes up
+[1518-09-20 00:04] falls asleep
+[1518-09-04 00:48] wakes up
+[1518-07-18 00:59] wakes up
+[1518-06-18 00:56] wakes up
+[1518-11-01 00:46] wakes up
+[1518-10-28 00:28] falls asleep
+[1518-05-04 00:01] Guard #2239 begins shift
+[1518-02-24 00:27] falls asleep
+[1518-04-30 00:02] Guard #127 begins shift
+[1518-09-22 00:45] falls asleep
+[1518-06-15 00:44] falls asleep
+[1518-08-16 00:45] falls asleep
+[1518-07-02 00:50] wakes up
+[1518-05-31 00:24] wakes up
+[1518-02-27 00:24] falls asleep
+[1518-07-30 00:20] falls asleep
+[1518-05-16 00:46] falls asleep
+[1518-05-25 00:00] falls asleep
+[1518-11-13 00:23] falls asleep
+[1518-05-22 00:00] Guard #467 begins shift
+[1518-04-08 23:50] Guard #1901 begins shift
+[1518-05-06 00:42] falls asleep
+[1518-03-25 00:43] falls asleep
+[1518-04-07 00:56] wakes up
+[1518-11-19 00:00] Guard #991 begins shift
+[1518-05-20 23:51] Guard #1901 begins shift
+[1518-03-10 00:51] wakes up
+[1518-10-12 00:38] falls asleep
+[1518-06-26 00:02] Guard #3011 begins shift
+[1518-09-11 00:17] falls asleep
+[1518-05-18 00:55] wakes up
+[1518-10-02 00:08] falls asleep
+[1518-11-05 00:00] Guard #3251 begins shift
+[1518-05-09 00:46] wakes up
+[1518-06-26 23:59] Guard #1009 begins shift
+[1518-06-27 00:14] falls asleep
+[1518-06-29 00:23] wakes up
+[1518-04-13 23:58] Guard #1307 begins shift
+[1518-09-13 00:00] Guard #467 begins shift
+[1518-08-04 00:35] falls asleep
+[1518-04-08 00:54] wakes up
+[1518-05-24 23:52] Guard #523 begins shift
+[1518-02-24 00:35] wakes up
+[1518-08-08 00:51] wakes up
+[1518-05-28 00:59] wakes up
+[1518-11-14 00:18] falls asleep
+[1518-04-09 00:32] wakes up
+[1518-05-17 00:46] wakes up
+[1518-11-03 00:28] falls asleep
+[1518-09-27 00:57] wakes up
+[1518-08-24 00:16] wakes up
+[1518-03-20 00:01] falls asleep
+[1518-06-16 00:42] wakes up
+[1518-08-14 00:22] falls asleep
+[1518-08-18 00:53] wakes up
+[1518-04-27 00:01] Guard #2437 begins shift
+[1518-03-29 00:00] Guard #3251 begins shift
+[1518-08-02 00:08] falls asleep
+[1518-06-21 00:26] falls asleep
+[1518-03-22 00:12] falls asleep
+[1518-11-10 23:58] Guard #1447 begins shift
+[1518-03-29 23:59] Guard #2617 begins shift
+[1518-06-09 00:18] falls asleep
+[1518-04-25 00:59] wakes up
+[1518-03-29 00:32] falls asleep
+[1518-03-17 00:25] wakes up
+[1518-04-10 00:07] falls asleep
+[1518-08-03 00:57] wakes up
+[1518-08-12 00:48] wakes up
+[1518-07-29 00:56] wakes up
+[1518-05-27 00:11] falls asleep
+[1518-06-21 00:22] wakes up
+[1518-04-28 00:30] wakes up
+[1518-06-08 00:39] wakes up
+[1518-11-01 00:56] wakes up
+[1518-08-18 00:36] wakes up
+[1518-08-17 00:51] wakes up
+[1518-06-22 00:01] Guard #523 begins shift
+[1518-04-13 00:13] falls asleep
+[1518-07-28 00:53] falls asleep
+[1518-05-14 00:01] Guard #1831 begins shift
+[1518-10-02 00:34] wakes up
+[1518-05-19 00:25] falls asleep
+[1518-07-14 00:36] falls asleep
+[1518-04-17 23:46] Guard #2269 begins shift
+[1518-09-20 00:33] falls asleep
+[1518-04-22 00:41] wakes up
+[1518-03-17 23:53] Guard #2083 begins shift
+[1518-08-13 00:03] falls asleep
+[1518-03-10 00:23] falls asleep
+[1518-03-30 00:08] falls asleep
+[1518-08-31 00:42] wakes up
+[1518-11-18 00:00] Guard #3307 begins shift
+[1518-03-14 00:49] falls asleep
+[1518-08-17 23:58] Guard #2083 begins shift
+[1518-11-14 23:48] Guard #1307 begins shift
+[1518-05-18 00:12] wakes up
+[1518-07-13 00:18] falls asleep
+[1518-08-23 00:04] Guard #3307 begins shift
+[1518-08-20 00:32] falls asleep
+[1518-06-14 00:16] falls asleep
+[1518-09-21 00:56] wakes up
+[1518-06-22 23:50] Guard #2437 begins shift
+[1518-09-23 00:39] falls asleep
+[1518-10-04 00:08] falls asleep
+[1518-04-17 00:27] falls asleep
+[1518-09-14 00:52] wakes up
+[1518-06-13 00:47] wakes up
+[1518-08-17 00:04] Guard #127 begins shift
+[1518-07-22 00:24] falls asleep
+[1518-09-09 00:57] wakes up
+[1518-07-13 00:01] Guard #2083 begins shift
+[1518-03-27 00:45] wakes up
+[1518-04-04 00:16] falls asleep
+[1518-11-11 00:53] falls asleep
+[1518-06-30 23:56] Guard #523 begins shift
+[1518-04-18 00:02] falls asleep
+[1518-10-25 00:01] falls asleep
+[1518-09-14 00:39] wakes up
+[1518-04-09 00:02] falls asleep
+[1518-03-10 00:54] falls asleep
+[1518-10-23 00:13] falls asleep
+[1518-04-22 23:57] Guard #1307 begins shift
+[1518-06-17 00:12] falls asleep
+[1518-04-15 00:47] wakes up
+[1518-09-05 00:50] wakes up
+[1518-10-31 00:45] wakes up
+[1518-06-21 00:58] wakes up
+[1518-03-16 00:51] wakes up
+[1518-07-25 00:43] falls asleep
+[1518-08-29 00:51] falls asleep
+[1518-06-28 23:58] Guard #1979 begins shift
+[1518-08-16 00:53] wakes up
+[1518-09-12 00:20] falls asleep
+[1518-06-29 00:48] falls asleep
+[1518-09-19 00:48] wakes up
+[1518-09-15 00:24] falls asleep
+[1518-03-01 00:26] wakes up
+[1518-08-24 00:57] falls asleep
+[1518-03-01 00:21] wakes up
+[1518-04-07 00:25] falls asleep
+[1518-11-23 00:49] falls asleep
+[1518-07-16 23:59] Guard #2083 begins shift
+[1518-07-08 00:24] wakes up
+[1518-05-13 00:19] falls asleep
+[1518-10-20 00:47] falls asleep
+[1518-05-27 00:26] wakes up
+[1518-09-03 23:46] Guard #1901 begins shift
+[1518-05-24 00:20] falls asleep
+[1518-03-06 00:17] falls asleep
+[1518-10-12 00:51] wakes up
+[1518-03-20 00:31] falls asleep
+[1518-08-02 00:48] wakes up
+[1518-05-12 23:58] Guard #523 begins shift
+[1518-09-17 00:06] falls asleep
+[1518-07-02 00:33] falls asleep
+[1518-06-06 00:16] falls asleep
+[1518-02-28 23:57] Guard #2239 begins shift
+[1518-04-13 00:22] falls asleep
+[1518-08-31 00:03] falls asleep
+[1518-03-06 00:00] Guard #1979 begins shift
+[1518-05-21 00:41] falls asleep
+[1518-11-07 00:12] falls asleep
+[1518-07-25 00:17] falls asleep
+[1518-06-09 00:53] wakes up
+[1518-10-30 00:06] falls asleep
+[1518-06-25 00:44] falls asleep
+[1518-10-22 23:56] Guard #2239 begins shift
+[1518-08-21 00:54] wakes up
+[1518-04-15 23:58] Guard #659 begins shift
+[1518-08-29 00:53] wakes up
+[1518-09-29 00:01] Guard #1901 begins shift
+[1518-03-18 00:56] wakes up
+[1518-06-11 00:31] wakes up
+[1518-11-20 23:59] Guard #1831 begins shift
+[1518-04-16 23:58] Guard #1447 begins shift
+[1518-02-28 00:15] falls asleep
+[1518-06-04 00:54] wakes up
+[1518-04-18 00:53] falls asleep
+[1518-11-16 00:59] wakes up
+[1518-04-08 00:03] Guard #2617 begins shift
+[1518-06-17 23:56] Guard #1447 begins shift
+[1518-05-06 00:04] Guard #1979 begins shift
+[1518-08-13 00:53] wakes up
+[1518-04-03 23:57] Guard #1447 begins shift
+[1518-10-12 00:00] Guard #3323 begins shift
+[1518-11-09 23:48] Guard #2269 begins shift
+[1518-07-09 00:51] wakes up
+[1518-11-02 00:27] falls asleep
+[1518-03-13 00:22] wakes up
+[1518-09-05 00:45] falls asleep
+[1518-11-17 00:00] Guard #2239 begins shift
+[1518-10-14 00:44] falls asleep
+[1518-09-25 00:06] falls asleep
+[1518-05-31 23:59] Guard #2083 begins shift
+[1518-05-10 23:57] Guard #127 begins shift
+[1518-07-31 00:58] wakes up
+[1518-03-23 00:04] Guard #2269 begins shift
+[1518-11-21 23:56] Guard #1901 begins shift
+[1518-08-27 00:17] falls asleep
+[1518-08-07 00:48] wakes up
+[1518-05-23 00:45] wakes up
+[1518-06-09 00:49] wakes up
+[1518-05-02 00:53] falls asleep
+[1518-03-05 00:37] falls asleep
+[1518-06-18 00:21] falls asleep
+[1518-05-31 00:45] wakes up
+[1518-09-06 00:38] falls asleep
+[1518-11-16 00:52] wakes up
+[1518-03-16 00:03] Guard #991 begins shift
+[1518-05-12 00:32] falls asleep
+[1518-10-07 23:58] Guard #2239 begins shift
+[1518-07-03 00:26] falls asleep
+[1518-07-28 00:48] wakes up
+[1518-05-28 00:14] falls asleep
+[1518-10-31 00:42] falls asleep
+[1518-09-11 23:59] Guard #991 begins shift
+[1518-07-17 00:20] falls asleep
+[1518-03-19 00:53] wakes up
+[1518-04-03 00:00] Guard #991 begins shift
+[1518-10-01 00:04] falls asleep
+[1518-07-03 00:31] wakes up
+[1518-02-25 00:40] falls asleep
+[1518-03-04 00:04] Guard #1307 begins shift
+[1518-09-18 00:08] wakes up
+[1518-11-06 23:58] Guard #3011 begins shift
+[1518-08-24 00:46] falls asleep
+[1518-06-13 00:39] falls asleep
+[1518-05-23 23:58] Guard #3323 begins shift
+[1518-05-16 23:57] Guard #3011 begins shift
+[1518-08-03 00:24] falls asleep
+[1518-05-03 00:58] wakes up
+[1518-10-06 00:53] wakes up
+[1518-11-01 23:59] Guard #2239 begins shift
+[1518-06-02 00:05] falls asleep
+[1518-04-28 23:58] Guard #127 begins shift
+[1518-07-27 00:02] Guard #1979 begins shift
+[1518-04-19 00:53] falls asleep
+[1518-08-04 00:00] Guard #1831 begins shift
+[1518-04-05 00:36] falls asleep
+[1518-03-08 00:49] wakes up
+[1518-03-26 00:51] falls asleep
+[1518-05-18 00:18] falls asleep
+[1518-04-24 23:59] Guard #3251 begins shift
+[1518-11-09 00:14] falls asleep
+[1518-08-25 00:27] falls asleep
+[1518-10-29 00:04] Guard #1979 begins shift
+[1518-02-26 00:22] falls asleep
+[1518-07-07 23:46] Guard #1307 begins shift
+[1518-09-30 23:52] Guard #1901 begins shift
+[1518-03-31 23:56] Guard #467 begins shift
+[1518-08-06 00:46] falls asleep
+[1518-11-19 23:59] Guard #467 begins shift
+[1518-04-15 00:03] Guard #991 begins shift
+[1518-04-19 23:46] Guard #523 begins shift
+[1518-07-10 00:30] falls asleep
+[1518-07-31 00:43] falls asleep
+[1518-09-07 00:51] wakes up
+[1518-06-18 23:46] Guard #127 begins shift
+[1518-04-08 00:18] falls asleep
+[1518-04-02 00:58] wakes up
+[1518-05-19 00:41] falls asleep
+[1518-10-18 00:37] falls asleep
+[1518-10-22 00:16] falls asleep
+[1518-06-26 00:36] falls asleep
+[1518-03-20 00:21] wakes up
+[1518-03-01 23:48] Guard #3251 begins shift
+[1518-09-08 00:55] wakes up
+[1518-10-08 00:44] falls asleep
+[1518-06-08 00:01] falls asleep
+[1518-10-05 00:24] falls asleep
+[1518-02-23 00:43] falls asleep
+[1518-03-23 00:37] falls asleep
+[1518-07-28 00:58] wakes up
+[1518-05-17 00:36] falls asleep
+[1518-08-11 00:06] falls asleep
+[1518-04-13 00:37] wakes up
+[1518-03-11 23:59] Guard #353 begins shift
+[1518-08-23 00:24] falls asleep
+[1518-04-19 00:50] wakes up
+[1518-06-05 00:54] wakes up
+[1518-07-31 00:57] falls asleep
+[1518-07-25 00:58] wakes up
+[1518-06-12 00:26] wakes up
+[1518-08-19 23:57] Guard #1009 begins shift
+[1518-08-15 00:51] wakes up
+[1518-02-27 00:01] Guard #1979 begins shift
+[1518-09-16 00:31] falls asleep
+[1518-06-20 23:46] Guard #991 begins shift
+[1518-09-14 00:59] wakes up
+[1518-04-21 23:48] Guard #1307 begins shift
+[1518-09-16 23:58] Guard #1979 begins shift
+[1518-03-11 00:59] wakes up
+[1518-04-13 00:02] Guard #3307 begins shift
+[1518-09-20 00:59] wakes up
+[1518-02-25 23:57] Guard #1901 begins shift
+[1518-10-02 00:00] Guard #1009 begins shift
+[1518-08-16 00:00] Guard #991 begins shift
+[1518-09-17 00:27] wakes up
+[1518-06-09 00:58] wakes up
+[1518-04-25 00:09] falls asleep
+[1518-03-17 00:32] falls asleep
+[1518-07-15 00:27] wakes up
+[1518-09-10 00:32] wakes up
+[1518-05-02 00:58] wakes up
+[1518-09-25 00:44] wakes up
+[1518-06-01 00:36] falls asleep
+[1518-07-16 00:40] falls asleep
+[1518-11-18 00:59] wakes up
+[1518-11-17 00:09] falls asleep
+[1518-05-01 00:30] falls asleep
+[1518-08-10 00:53] wakes up
+[1518-11-08 00:58] wakes up
+[1518-05-31 00:00] falls asleep
+[1518-03-15 00:42] wakes up
+[1518-07-05 00:58] wakes up
+[1518-03-27 00:04] Guard #2239 begins shift
+[1518-10-06 00:16] falls asleep
+[1518-07-10 00:54] wakes up
+[1518-04-12 00:38] wakes up
+[1518-07-05 00:23] falls asleep
+[1518-11-19 00:37] wakes up
+[1518-06-30 00:00] Guard #3011 begins shift
+[1518-10-27 00:43] falls asleep
+[1518-04-01 23:56] Guard #991 begins shift
+[1518-04-04 00:28] wakes up
+[1518-05-22 23:59] Guard #3307 begins shift
+[1518-05-06 00:06] falls asleep
+[1518-04-25 00:35] wakes up
+[1518-04-24 00:07] falls asleep
+[1518-07-05 00:35] wakes up
+[1518-10-26 00:02] Guard #2753 begins shift
+[1518-05-31 00:34] falls asleep
+[1518-10-17 00:55] wakes up
+[1518-04-19 00:49] falls asleep
+[1518-03-13 23:57] Guard #2239 begins shift
+[1518-11-21 00:46] wakes up
+[1518-03-22 00:04] Guard #3307 begins shift
+[1518-05-09 23:50] Guard #991 begins shift
+[1518-03-03 00:59] wakes up
+[1518-03-02 00:59] wakes up
+[1518-04-20 00:48] wakes up
+[1518-05-18 00:01] falls asleep
+[1518-08-02 00:55] falls asleep
+[1518-08-30 00:57] wakes up
+[1518-05-27 00:52] wakes up
+[1518-06-07 23:46] Guard #127 begins shift
+[1518-08-02 00:57] wakes up
+[1518-10-10 00:55] wakes up
+[1518-02-24 00:53] falls asleep
+[1518-04-11 23:56] Guard #1979 begins shift
+[1518-10-19 00:00] Guard #1979 begins shift
+[1518-09-11 00:29] wakes up
+[1518-05-27 00:01] Guard #1831 begins shift
+[1518-06-19 00:40] falls asleep
+[1518-05-28 00:00] Guard #3011 begins shift
+[1518-10-15 00:01] Guard #3011 begins shift
+[1518-06-07 00:00] Guard #2239 begins shift
+[1518-09-29 00:45] wakes up
+[1518-06-29 00:58] wakes up
+[1518-10-30 00:45] wakes up
+[1518-06-10 00:10] falls asleep
+[1518-05-09 00:32] wakes up
+[1518-05-28 23:57] Guard #3011 begins shift
+[1518-05-09 00:35] falls asleep
+[1518-10-09 00:01] Guard #1979 begins shift
+[1518-06-24 00:36] wakes up
+[1518-07-22 23:59] Guard #3323 begins shift
+[1518-11-06 00:46] wakes up
+[1518-03-16 00:16] falls asleep
+[1518-05-14 00:41] falls asleep
+[1518-07-06 00:00] Guard #2239 begins shift
+[1518-08-17 00:56] falls asleep
+[1518-07-02 00:02] Guard #1009 begins shift
+[1518-03-17 00:50] wakes up
+[1518-09-15 00:04] Guard #1009 begins shift
+[1518-06-14 00:03] Guard #3323 begins shift
+[1518-05-16 00:24] wakes up
+[1518-10-25 00:57] wakes up
+[1518-04-10 00:04] Guard #1303 begins shift
+[1518-05-05 00:56] wakes up
+[1518-06-03 00:46] wakes up
+[1518-05-05 00:02] Guard #1901 begins shift
+[1518-05-20 00:29] wakes up
+[1518-10-21 00:00] Guard #3251 begins shift
+[1518-11-17 00:19] wakes up
+[1518-02-27 00:48] wakes up
+[1518-11-07 23:57] Guard #659 begins shift
+[1518-06-11 00:01] Guard #2239 begins shift
+[1518-06-28 00:41] wakes up
+[1518-04-30 00:57] wakes up
+[1518-11-10 00:40] wakes up
+[1518-11-22 00:38] falls asleep
+[1518-04-12 00:31] falls asleep
+[1518-07-27 00:46] falls asleep
+[1518-04-07 00:48] falls asleep
+[1518-05-03 00:48] falls asleep
+[1518-05-07 00:39] wakes up
+[1518-06-26 00:30] wakes up
+[1518-07-12 00:59] wakes up
+[1518-06-03 23:59] Guard #127 begins shift
+[1518-10-15 00:41] wakes up
+[1518-08-05 00:17] falls asleep
+[1518-05-16 00:47] wakes up
+[1518-07-06 00:21] falls asleep
+[1518-07-26 00:29] wakes up
+[1518-07-19 00:48] wakes up
+[1518-10-29 00:49] wakes up
+[1518-09-22 00:55] wakes up
+[1518-07-20 00:57] wakes up
+[1518-08-15 00:00] Guard #2269 begins shift
+[1518-09-05 00:01] Guard #1307 begins shift
+[1518-08-02 00:02] Guard #2437 begins shift
+[1518-10-29 00:42] falls asleep
+[1518-03-23 23:54] Guard #1303 begins shift
+[1518-05-12 00:44] wakes up
+[1518-09-24 00:34] wakes up
+[1518-08-13 23:57] Guard #1447 begins shift
+[1518-06-16 00:48] falls asleep
+[1518-06-08 23:58] Guard #127 begins shift
+[1518-10-24 00:48] wakes up
+[1518-03-26 00:07] falls asleep
+[1518-10-28 00:23] wakes up
+[1518-07-31 00:38] wakes up
+[1518-08-27 23:58] Guard #1307 begins shift
+[1518-08-04 00:47] wakes up
+[1518-09-02 00:58] wakes up
+[1518-09-23 00:02] Guard #2617 begins shift
+[1518-02-22 00:19] falls asleep
+[1518-05-16 00:35] falls asleep
+[1518-10-04 00:51] wakes up
+[1518-03-27 23:51] Guard #1009 begins shift
+[1518-08-23 00:32] wakes up
+[1518-08-11 00:00] Guard #1447 begins shift
+[1518-06-25 00:22] falls asleep
+[1518-05-11 00:35] wakes up
+[1518-07-19 00:02] Guard #1447 begins shift
+[1518-09-15 00:42] falls asleep
+[1518-05-21 00:29] wakes up
+[1518-05-12 00:01] Guard #3011 begins shift
+[1518-08-29 00:27] falls asleep
+[1518-02-23 00:50] wakes up
+[1518-08-30 23:54] Guard #1831 begins shift
+[1518-06-28 00:01] Guard #1307 begins shift
+[1518-07-19 23:59] Guard #659 begins shift
+[1518-04-06 00:04] Guard #523 begins shift
+[1518-06-10 00:16] wakes up
+[1518-06-09 00:56] falls asleep
+[1518-02-26 00:58] wakes up
+[1518-02-23 00:31] falls asleep
+[1518-08-21 00:16] falls asleep
+[1518-04-14 00:58] wakes up
+[1518-11-10 00:05] falls asleep
+[1518-03-09 00:00] Guard #1447 begins shift
+[1518-06-23 00:04] falls asleep
+[1518-09-09 00:05] falls asleep
+[1518-07-05 00:50] falls asleep
+[1518-10-12 00:24] wakes up
+[1518-04-06 00:37] falls asleep
+[1518-08-02 00:42] falls asleep
+[1518-02-25 00:36] wakes up
+[1518-03-28 00:00] falls asleep
+[1518-09-25 00:00] Guard #2239 begins shift
+[1518-11-18 00:52] wakes up
+[1518-11-07 00:55] wakes up
+[1518-10-20 00:00] Guard #3323 begins shift
+[1518-05-21 00:46] wakes up
+[1518-08-20 23:59] Guard #2437 begins shift
+[1518-11-17 00:34] wakes up
+[1518-04-27 00:19] falls asleep
+[1518-06-10 00:00] Guard #3307 begins shift
+[1518-03-14 00:44] wakes up
+[1518-05-25 00:39] wakes up
+[1518-10-17 00:36] falls asleep
+[1518-11-09 00:02] Guard #523 begins shift
+[1518-08-09 00:38] wakes up
+[1518-09-26 00:53] wakes up
+[1518-03-01 00:25] falls asleep
+[1518-03-28 00:44] wakes up
+[1518-11-11 00:27] wakes up
+[1518-06-19 00:34] wakes up
+[1518-05-11 00:33] falls asleep
+[1518-05-26 00:39] wakes up
+[1518-08-19 00:30] falls asleep
+[1518-06-13 00:59] wakes up
+[1518-04-11 00:06] falls asleep
+[1518-06-05 00:02] Guard #1447 begins shift
+[1518-02-22 00:37] wakes up
+[1518-07-30 00:57] wakes up
+[1518-03-26 00:46] wakes up
+[1518-06-23 00:34] wakes up
+[1518-08-14 00:57] wakes up
+[1518-06-06 00:03] Guard #1979 begins shift
+[1518-10-03 00:02] Guard #467 begins shift
+[1518-09-15 23:57] Guard #1901 begins shift
+[1518-03-24 00:35] wakes up
+[1518-04-14 00:24] falls asleep
+[1518-07-23 00:45] wakes up
+[1518-04-11 00:50] falls asleep
+[1518-08-15 00:54] falls asleep
+[1518-02-25 00:03] Guard #1307 begins shift
+[1518-07-17 00:59] wakes up
+[1518-10-04 00:03] Guard #1831 begins shift
+[1518-07-11 00:32] falls asleep
+[1518-08-25 00:49] wakes up
+[1518-03-08 00:00] Guard #1901 begins shift
+[1518-11-16 00:56] falls asleep
+[1518-08-19 00:03] Guard #1009 begins shift
+[1518-08-12 00:27] falls asleep
+[1518-11-09 00:27] wakes up
+[1518-04-10 00:48] wakes up
+[1518-11-14 00:32] wakes up
+[1518-10-28 00:50] wakes up
+[1518-10-15 23:56] Guard #1901 begins shift
+[1518-07-14 00:10] falls asleep
+[1518-09-18 00:54] wakes up
+[1518-07-10 00:00] Guard #3323 begins shift
+[1518-08-28 00:31] wakes up
+[1518-06-21 00:05] falls asleep
+[1518-04-02 00:27] falls asleep
+[1518-10-20 00:33] falls asleep
+[1518-05-09 00:01] falls asleep
+[1518-03-26 00:02] Guard #1901 begins shift
+[1518-10-13 00:41] wakes up
+[1518-06-03 00:55] falls asleep
+[1518-04-18 00:58] wakes up
+[1518-07-25 00:20] wakes up
+[1518-08-04 00:30] wakes up
+[1518-05-30 23:51] Guard #2617 begins shift
+[1518-08-01 00:50] wakes up
+[1518-11-12 00:26] falls asleep
+[1518-04-21 00:00] Guard #991 begins shift
+[1518-11-14 00:55] wakes up
+[1518-07-12 00:57] falls asleep
+[1518-08-09 00:36] falls asleep
+[1518-08-19 00:34] wakes up
+[1518-04-23 00:30] wakes up
+[1518-02-22 00:54] wakes up
+[1518-09-26 00:51] falls asleep
+[1518-03-20 00:56] wakes up
+[1518-11-08 00:25] falls asleep
+[1518-11-19 00:51] falls asleep
+[1518-10-13 23:56] Guard #1979 begins shift
+[1518-04-07 00:36] wakes up
+[1518-05-25 00:28] falls asleep
+[1518-04-23 00:58] wakes up
+[1518-04-18 00:46] wakes up
+[1518-09-11 00:57] falls asleep
+[1518-04-27 00:52] wakes up
+[1518-11-18 00:35] falls asleep
+[1518-09-05 00:26] falls asleep
+[1518-11-15 00:58] wakes up
+[1518-02-23 00:40] wakes up
+[1518-10-02 00:37] falls asleep
+[1518-08-27 00:00] Guard #3011 begins shift
+[1518-04-13 00:49] falls asleep
+[1518-07-28 00:20] falls asleep
+[1518-03-04 00:47] wakes up
+[1518-03-24 00:04] falls asleep
+[1518-03-20 23:58] Guard #2753 begins shift
+[1518-11-14 00:45] falls asleep
+[1518-09-11 00:59] wakes up
+[1518-06-16 00:40] falls asleep
+[1518-05-27 00:12] wakes up
+[1518-11-01 00:00] Guard #1447 begins shift
+[1518-08-28 23:58] Guard #1307 begins shift
+[1518-05-21 00:04] falls asleep
+[1518-07-23 00:38] falls asleep
+[1518-05-02 00:49] wakes up
+[1518-03-24 23:57] Guard #2269 begins shift
+[1518-06-25 00:30] falls asleep
+[1518-08-02 23:56] Guard #3011 begins shift
+[1518-05-07 00:00] Guard #2617 begins shift
+[1518-04-26 00:57] wakes up
+[1518-04-21 00:19] falls asleep
+[1518-04-04 00:18] wakes up
+[1518-04-18 23:57] Guard #659 begins shift
+[1518-07-18 00:41] falls asleep
+[1518-09-08 00:40] wakes up
+[1518-09-28 00:33] falls asleep
+[1518-11-03 00:04] Guard #3323 begins shift
+[1518-08-15 00:26] falls asleep
+[1518-10-19 00:14] falls asleep
+[1518-03-01 00:10] falls asleep
+[1518-06-14 00:45] wakes up
+[1518-06-19 00:55] wakes up
+[1518-06-11 00:41] wakes up
+[1518-03-02 00:29] falls asleep
+[1518-09-18 00:40] falls asleep
+[1518-07-17 00:54] falls asleep
+[1518-11-13 00:33] wakes up
+[1518-09-30 00:15] falls asleep
+[1518-11-04 00:59] wakes up
+[1518-04-24 00:57] falls asleep
+[1518-09-06 00:40] wakes up
+[1518-10-20 00:59] wakes up
+[1518-05-26 00:10] wakes up
+[1518-08-20 00:56] wakes up
+[1518-06-19 00:04] falls asleep
+[1518-05-07 00:33] falls asleep
+[1518-10-31 00:21] wakes up
+[1518-04-13 00:55] wakes up
+[1518-11-22 00:42] wakes up
+[1518-10-17 00:20] wakes up
+[1518-03-19 23:47] Guard #2083 begins shift
+[1518-08-26 00:01] Guard #523 begins shift
+[1518-04-20 00:01] falls asleep
+[1518-11-23 00:00] Guard #3307 begins shift
+[1518-03-10 00:28] wakes up
+[1518-09-18 00:45] wakes up
+[1518-07-07 00:19] falls asleep
+[1518-09-23 00:14] falls asleep
+[1518-08-17 00:59] wakes up
+[1518-10-13 00:32] falls asleep
+[1518-03-01 00:31] falls asleep
+[1518-10-25 00:49] falls asleep
+[1518-08-07 00:27] falls asleep
+[1518-03-06 00:58] wakes up
+[1518-08-29 00:32] wakes up
+[1518-09-23 00:17] wakes up
+[1518-03-07 00:01] Guard #3251 begins shift
+[1518-08-06 00:53] wakes up
+[1518-09-27 23:56] Guard #3011 begins shift
+[1518-04-30 23:57] Guard #3323 begins shift
+[1518-03-11 00:13] falls asleep
+[1518-05-20 00:00] Guard #1979 begins shift
+[1518-03-29 00:47] wakes up
+[1518-09-08 00:02] Guard #127 begins shift
+[1518-09-08 23:47] Guard #2437 begins shift
+[1518-05-14 00:53] wakes up
+[1518-06-25 00:02] falls asleep
\ No newline at end of file
diff --git a/AoC2018.Runner/Input/day05.txt b/AoC2018.Runner/Input/day05.txt
new file mode 100644
index 0000000..13e348e
--- /dev/null
+++ b/AoC2018.Runner/Input/day05.txt
@@ -0,0 +1 @@
+xPGgpXlvVLLPplNSiIsWwaAEeMmJjyYfFWfFwpPqcCYvVySsAUuaCcDdHlLSshxKkMmXQnNKkrRptBbTqQEevKkkKVsSmMmMvqFfGFSsfZzgQTtFLlfsSFBTtbfbBiIAHhzZaVNbBOonsfFSBYGgRryvaAVTtbFfqaAEetqQUubBTyYAWwzZeENRrgGaAfFnNnpPJjulLEeUaQqnNJjQtTPTaqQAoOEerRtnVaALlhDdPpHvvVrRsFVvfsMcCvkPZzpKbBOofZzyYFzZsAjJavGgkKRrVwWSYygFfGLrRLlgGlVaAXZzHuULDpPdoOlhgGVoOKkVvaAhOoHIiBNnxsSXbBbvVFfvtTUvVlaALPptTGguPpjJFmRrMqjJOOqQZzooQRVvrKkpVvPOopPKKbBkYykYQqPpPpoKkOihHIECcJjeyvsSVpbBPGKkgfVvHhiIvGgViXxlLdDIgGKMCncCNcmfFDDdSsXxqQtTaAdenNdDVvPuUpVvtTZzEQqyoOvVTxXtbBnDdcCZWwrRzNaeEAlDZzeEdJlelLEzZhHhOoHYyKkLjWwNnLAjJaiHhIvhHHhEhHeSsSKksXxVvzZEevVzpliIRPprLPcOHhsSoRSsTtrlLCiISsJjMmZvnNoOVclLCVzZMmKhHkqWufFmMSmMkKsiFfoRrOIUozZyYNnSNnqQsTrRtSHhNniIbGgCcnNBxXSFYyWwfgFRrfaROorAsxXSGsSKBbkspPIeoOHhEiXxVvpPUfFuyYypPynNYpPSskdDKjJCeErRtxXTHIzjJZihoOZvoOGfFWwgVzCUuaXxAeEnBVvbNiIAaRdDxXrmMcgCyYceyYyYEEMmgWwGOoKkqQkeEVvGgrRJjrYyEeRKYyOPZzJjpooOcCrgGtTOoRNneHiIXxnNIQqzZiHhZgGZzyYeEuUOmMbZzUjaAJuPpBozZzlfFLiIphHsvVSvVUTtuDdPhPVDdPpvYyvDgGCcdTSstaHhcCHhAJgGLOOoaARVCclgGLvrsSolAPpUuaXxaAkoOPpeEzGgZcCjJHhKkKlYUuyMQIiqSiqQBbIsGLLGgvWwTtVlpyTtYgAaGPSeEfFsDdgGkVbBNnvQrLlRqYWwyEqQLlsSSVvstTghHGeKkKQqhHHhmMoYyhsSAaHdDuUKkOMmDdMmgGgQqRnNTtVvryYlDdrnNLlRUcCurRgGZuUWwMmbBTtjJzjJbBdDaAwWLjJKDpPpcCDdHhPRrhHRzjeEJZmMcNfVvlLvtTVSsxXFnVvTxtTKkjkAaKhzZxXfFHuBbkKTeEyrRcCYTtGgtuZDdjJzUUcSsCqQgGuUqUulLRrwWQeHOohSXxNnisSIWHhwiuUIfFVMxUaAuGdDgXmdHhDUuTFWwftbBvVKAakvrqQAayYWwRCcIvVijJhHrSNnsDaAdBbHLlhRPpAqZzQSsaQmOpPozQLlqhHZIDdisdDSyFpPfEJjeYowWhHrnNRRUuhHLeEdDlkKyYkKqQCcEexXifFIYfFqQyFzDdZcCorRgGzqQZDdzIiMmwWrRIIjJihlLHoOyYDzrRuUKbBvMmeEKkFffFsSVcYJuUjQqMHEeeEhbBYyucCfFGDdqQRmMHhhHqWwoOQTtrBhHxXCcbggGGpgGPgEecCYyEeEesSisSeOovVcwWCEIPJjnlLTtyYNLtfFHzZQCcqLlyxXYSqvGgVQzZsBvVDoOdlLbfFGxphHqQPHhmMdDGgHszjJZShXxXYysbBifrRFiIxcChIiHgGQqqvVbBEewWQxjJZmPpUuMzXlYyHhLXDvVBbdEsSexsSvtTrReEVnNmMTtXuKkjxXJMyYmZFfzUMmyVvTtFfYdDExEeXvVooOOjJTtCcUrRSwWsbBbhHtTBGVvgNDdnQqukKGgJOYHFfhKfFkSnNkKOoOohHsSnNsmmMMvVFGglHxXhLfFPsKkSpfyBbqQqaxXfpPZzbBCggGdDPlBbLaAZzKeEkYJiIemMtYyTlLjJEjXxsSyLlXxCckKeEuUZzrqQlLxXafFeEVvAiRrIRpmiRrFfbBzZvHhVICcoOMXxiWwNIinkkKBbgQqGPpLlKWhHwszZSQuUjKkfFJcZzCVvWeEYywtXxTjJzZkSsKfFeEcCrDhXxMmrRjUuOoYyJQDdqHwWMmLlOodqQMmqGCcgwWpJjqMmQKkPMmpPBbxnNzZyYySscTcCFftwWOeEoOobSsBSsOoaAGoOgRWwcQUWOokKwuTdUuDtYyYiJjYyIyquqaFfwWAQUZtKkTBbzndDXxjJLlJjyxWjJDdLlsSMmGgtiGgIqQpgGTtDdPClLAasyYFlLKoOkfMmFUuBEerRYyGflLFDdnNFfgFLlXJjxWHhwDOoOodOokKPpMmfoOzZupPUvVjJSBRrbYLlyuUNTXxnNtUuvVVvpPQqQqUuaqQAlLMBbHhxOfFozZJjXzZhHgqQEPpeVvSsEgGAaeUucCItTiLuUlGSsyYEeRrBbZiIAPpvRrhHzqEeQqvVBbGgIhHRXxrishHSQNnyYZzxXZpdDPVWXxwMvVmmMByYcCaAEebxXVvKfFlLcCcCkZzzQqGgFIifPpZNnjJMwsSWwRrWmvHosSOhVIibMmyYQqTtBMoOYOoSsZFKuUkKZzZzxXPpbqAanNNnQyYsZzShHUuGgSiIsYgGyeeECcsAadGgDOojqQGgSstTPpJSQRrGgUunNqpkKdDZzPhHkSsrRQwtTXyYxsSZzAaRcUgGvVufNSfFsnFCrXeogGWwQqlLOKbBuUkvWwzZUuEoOKkNneseECcwWwzbBWiIwDQqdAawWiIwWNnLiQDdqIAatTEOdDoeVkOopPKvQmbBKkvVbyhHYBWwbzZrQqRZDdhpCcOoXxnayYizZIFfANPKkeELKDdHhvyYVCckkvVKTAadDsSHhAjBbeQqEJpPaJjXxaAAFfXxRrVpuFWwWwfFoOZRrzPpxHJjhIqQiXfrRkKkKkNnLlKqhhHLNWWKkwwZznvOIioMwWXxeEmYyzZXcCxVZzmMUuPKYykKyYkpiIlSAaYcCyBCwDwWdWPpcbsghHnNbBsSMlLbBTpPtEeVuUZzfciICEmMMfFmlLeuwWoOnNUgGJjiybBCJZziZzAaIjQqhHCcaAcnGgjUuPpQqpPhXxHUjJuuxNnXUYyJCcLOoImMilBbLlkKGkKPwWEeuUzZHoOqQjJFfGgCckBbKzlwKpQqsSsSViIIirRvbBiZzIZiplxXLPTjnNJVpPyYvtDyYwqQWdYyarRxXDdALlIDdTtTcClZyYzvVRvVrLtmMkKvTDdxXtVqQlVvLPNnpoaAdDeELUwWuwxXWlOxXGgiaAITtgGyYuUzZdDynNYGwzZPkqQOoKklLxBbdQqDGyYgXKzHhRDhHdWzZwbBhvYyVHLHXxhlcaACIidDVbjJxeMmEXJBbtTjBVDdpPsNnSvrRbbBMmyoBbONnwWJTtOoQqIiVhsSHLlQqHhXxAoOHhTjCcJwWLltFfetTEFWwtTIyYiYyzZvVzZTOobchHCBQSiIsBbRDAamMJZzjoOJjyYIidHhQqOuUWwOovIiuUCcVoWPhHpwdDJjIvTufFUtWQqvVuUXxwtTiIVisqyYQiISHLjJGkKcCBAabhHiIKkWCcwpPcChfFHCnNlLcZSBbfFbBgwWzWwZaAZIizGcCmSsGxpNnPXQhHgGgGFfuJRraAjOouaUuTtAbRBbrjJlUtuUEeTCcwxXrROioZreOlnncKXxkCNKZzaAkpKkRcCrRVvrPNuULfCcxdZzDZvVCfFsUuSreFdDafFAfqQWPpTeINniEBArbBRaeJjEbZnNsSFflLzZztsPpEeBbwQqwWGgQqoOFfZzWnNSyYsXKkxWwKkkcCONnoNVvGgXxFuQqUkKfjJYyFeGgEcCnNFfLldyikbiIBhHKjOoJaAIYpPIMmHLlhibBIaJjyrRYbBjJAaASsVvFuUfTMNTtnnNmFfqQBbJOoCcXIhHgGCciTtSBMiImBYybxLgGlwWXNljuUJjJbBdDyYhHLQqxXmtTMwWqQnxXWwzSsmMkBbJjeRrsSEDdTtGAagXxKeEJjwuUDdpPdDWTCcKktjmMJjlLXybBYnNMmwoOfTtixXjJDduMmdzZJjclLqiIQciqQfjJvVFOJHhnNjUuoOoFfDdpkKPHbBhwWLYGvVgSXHsSFfxNnXhpvVAaSsFZtTFfzXoOxfUJjuYyRrYyqQvVSslLPMbYyBmpIiCdkTtKDcDmiIoOQxXBfSsFHhVtTvKcwWvVdDlOoHhuUQaTtAqLtTCkQXxEFfeoUunNHhtkKOobBEisSIetTWwTzrlLGgdDRiIelLmcOoSsYyzOoZPpdgGZzDenNEnyYXbBoUuOwHOYyplLPSsoUuSECdvPpcCVmvVLdDlDdoOUuRpPUYyurxXleKkeEEAaWwHhOoDrReXxEuULEelCNVvnjJIivVPpmwWeEAabBCcwZSwWsXxyxUuXYuUdXxoOhHhHggGIPpkKiNQqnSsrReRrEGXxrRfFgQqYyAZLllLzaAxbBNnXRrtTNcyPUumMIipSsTtYzOnNMmxXwVQsSvVqvJjVBbTtvoOQcCcCVvqWbmMBSkKsoOvVUCTtcuDxiTtIXxCcdlLDxXBFbBfbpPNfFnfFHhdDBkKowWObUUuuxOrRoDUuQqQHhHhBbqrRdiNnUuFfoOINEenNOAzZakoOhHJMhHmOoCcaAQIMmiqhHmDYwWdDjJXTtnNTnNpPtCcQqiInNnNXiYtWOYyNoOmRtVvlIiLIpiIPigetuqQUPqaAUrRvVugGuUsCcYySQzToOwgDdGaiIAWdeAaFfuUtuUequUQZzBbEpbBhHvVFfWpPXryoOYUcCASsauofnNFiHhInNKfFgGWwWVBSsbBbvMmWNnwQqDdnNDywWWNnwrveEVRgvVFfGgGfJKkjRgEeYyXxWRrwfFWhHwPIKCcsytTYyYAazXxTtEHheCjJQqoODWwgGdVahHAvcZgdDEhHuUSsYxXKkyXuGgUsGuUgLjJYRrsqJmMHhjQSfwWFrRaJKkRxXGglLrRDdHhIizZBYyJjbFfeEmvRPprXxYDdFfyrRMdDQqaAnNKsLpPjJleEctfTtFonNOVENnpnNZAaPjJhrREeVvbBCctEeIioOuKdDkXxYyJHfPpvVHlLAayaAYhVvZzFfFlWwBLlwWQqyYFPnNpPOopPoyYiIOpJpNiIJjkKnTcCEuVvtTtSsStjVjpPTCcfFteEtTxJjnxlLgGlLdDwWtLlrRTyIiYMmMmXmdDMDDddHhNuUvUuJjjJlLWAauUwmUppqQPAaHhtTUuwWJjYydXeELVNneuiqQkkaAaOoKtTkaQEyYeqAdDaTIiKqQkwWcCGaAQqUuIigGiIRrTLDVvCcdbBJIijhnNHsyYcChHmMSqQcCiIiDkgcCGOomMDkGIiwWSoOwdjJDLlsZYyzlLIkKivXxrRnNKkMmXmMPpkBrRoOIiHaAxbBXZrRoOzQqwWhXxbQHhqAoPBbZzQqCcpzFfJcCaAjuUzZZUuzqiIQwGgWjJWwFdDfQaAtTHlLFgGfBbBMmycqQHhSyYdMmyYmMgUuzZujJhvcnNCPpVPpHgiIGFHhOMmNnfFoGmMvIiHXzZDdnNZzxoiIBbIihUuDmMBbdXxXcCKkatTAzZFfmCUucTtUuhHCNnjeEoOVIbBjJbBXxYDdXxJjyzZNnVvApPpxXPfFtxXYBbKRrkyTjiQzOoEoOeSsLtTlZqyhxgGOqQTtOSaAskiWwqGlonNTtfVvvVFOLEegaXxAQRrJztTrROoQqZjZzZhHBHhbeXxYQqyxEEexXYYZzyFfDcKkWaAkKwwWOozZIiBuUTtxXoOAHhsSWLCcLlrSssPpSIbBlkYyXOFCcfxXlfFLOoMmuUohHOmMoGCcgSsJWwjDdLlcpCcPidDwcOoCVvLbpPBEebmMSDyYeEdnlcCHhPzZtOozZdDhkKHTWwZzwhHBbtDdinyYNjpPJccZzVvYyChHRrDGkKUuxXUuaDdwQqKuUkLleSsERrRxXnNTxXggGGnNmMSsmpPBGgyYFyiYymMnNeTkKcIiCkKELleLmMgKkcClnFfEeSsdKLmMlkHDdjJuUiPdoOLlBbXsSxbBojcCJmMOCcUxXnaikwMmMhcZYysiIHhRrCcZzxXnNyYbQqAajJUurRQuUutTkKUnaAJsSjXRrpPeHJjoOhYyEoOeEUeOFCLAaRrloOFyoOYfWwwSrRsWwWMiwWQqWwIlLmAaHhRriIOVvQvqQIiotTcCVChKcCsSbBkKkeEFfEePdUwWuDRSiIsCcJAbHhBeFLlfjkKJqVZtiNnPpiNJjnvVxWwSsXpPINnKEyYpPpPjbnNTtaAWfFwBtTvVJrReOoEcOmrNnRuUoUuLlnNcYdDMmcCDdLlAiBOoNnbcCZzbENneIiwWsSDgmMGkKwGgEeHxXhyMzZrMmRmnepoOdDPENIMmiZzYfFVvAnLloONhHaFPKkpHhdjzZJNKkcmMCsSKkLWwKkRrdDlQqHobddDlUuoajWwmhHMXxLLlnTpSsTtPtTtNeSNnsalLAEjBbGgatTAtTJjJDAnNkinmMNrRSsIkRrtZkKzBbMmVQDdqvmMuBWkEeEexXKwwPpzZYydxXyYxmoONcCKkRWNnwZzrljJLCVPpvaAtlLwkKWTcbFfBdrRguUVXdVMLlmvwWVMyeEYmHRuUOcAaCoGoOgyxiBbIXFfuUroAOaAcClLoaeEODdRVvrHCZUuzcDWdoOaAUuDOQquLOolUojJSsxXoGgOxMmiIDpPdGguUIidDIixXlLLlmVvpPHhQPaYyAkKptTXxXjJwLlrRPpCcWwZzqodDPtToOXxPporRMmHdDsSmMsHjJlCxXdyYDzvbBPkKpVvLEekKeEkSPpZzLlOVvHhCcosbBSJmsOoSNnNnPHhKkaVvZzoOoOaAeoOoAIiaUutTgVvGtTOhHGcCxOoexXKjJLlkiJqQjDdtTeqdDzQqAaGgZoOMmDyYdIisnyYnuUNWrTvVgLSsllLGgkCcTtoUugGOKGtCcZzKlLbAXUuWwrRxaexXEUuVqQvBYyYyrRzxXZvNNyYrsSRPpHhChpdDJjPIiKkHhrRHiISswCcWwXgKkcCGxUukaAKkKszfBbDdiICSsbBZzwicCjJIfqQbBFZzBbRrJVDoOdEevjuUyYTtwGBoqQSjJsgGObtDdEeVrfkgGKFUuMmNJjWwHnNtFfTsDdtSsTZxXzWwSYmCcMIiyhnkPpsSOoKNVwWGgvFUuOofSAHhlLaIiuUAVsSvcBbCVQficoOjJVvCBbUKkdDugGjJPkacCAgkMdDmEeLlSsKBbKkXevVEZFfbHheTvpPRjJdGasrRSJjAgTJjoObBUurRcWwNnCMmFQquUvbqQBymMYVsOEeozIiLlZkDSsZzEYyhDuCcxXUOUDduKjJgGzZhHkoddDsSjGzZggJcCSsbrqQReEBPKrRHhkeEpjIioOowWOAaoOkKhHqGiIkKjJdMkjhalLAHaAlLxvaluLljJLlVvrQqrPwWwWzQqXxkwWXxKZtSsTfFuxQqdDfHhFXpPFEembBbEqQeERCcDdxXaAPpsStuBAabGHhgwzZPpxipvVkKeEfoOjtCcFgGFfdnNoOKVvefFEBbHhkNTtKkrAaZzdDrbBRwwWyYMmdBbjbBfMInvVNEeGnNgiIdDDdRrUugxXTtScAaCsuJRrjHhpPUGKZPpzXjXxuWwUcdDCyfFCrRcoORrDQqDdBfSsscCaLliCgGPraivxXFfVIAJjRuUEDdepgGZyYzQNVzZvUkKZPxpPXGgRrpzwKsSlLkMmaalLmMDEelLcCTAuUfcCFoNvVnCcNcbrRSsRTtIiqeEeENnTRrdDkLlJMmjoqhHqQqmMQWBbwEqFaJjIiWwAbzZzCtTgGcqFtTfGgSswWAnhHNhaAHMKbByYKaAJEzmMdEbBeKkcjoOUTgGtuMmJNZznCvvTtQcCqVitFffFyhTtTtpZAdDaXqQxWwCvJzaAQqAauUZwGgWjjJnNDMmDdgEUaAsSaeEMmAubBFRrgGHqlGgLyYNnEiIrBbHhiIKktRrTRNgsIMmMZzmTtnWkKQOohHGgDdbBLlxXqwemjFvgGJjhDiINnHyeKeEmMaAxXhqQQAaqrRHtTMkKLbBlFfFMmfXhLQqzZMmtKSskDiIbBcClLdpPBbWECUuqQceLRrgqVvgGQezDdinJDdNPpRrAVvOoaZefsSsdDMmHGFCcfPsaoOAbBVePIgGYVaAOoAdDDTtdIiavAeeGgGpSscwWCYlLeEyexXIiEPKkeEdDAxRrXaGgsJvxhHHxXllLLhdDPiIUQlLSsqVvflLFVEXsSoJKkUWwukKjwWsNnrRsQqSStjJdDdDFfdcCAsvSsiMmIlLDfFuUIQIicCqtTRCnNcriVHKVvkhZedDERryYyYnNzSqQsTYiHhIXxiqiIgYyoIinQxOoXxiIXVvdDIwWmUuyyYAaJjYGgdDrRSsAZTtzDdaNYyDXxdxgGgcqyYmMlVsSwnNWQTtTtqvnNqQbBqJZziHyYNnCyYIJjBbDdBDdTzZtuldDLjbfrRQjJqFBUNnujmHhcIocVnNdDaAtTvCRrgaAGHhOBbsZoOPiIprRksSKLWwXxIioOdHiIGgLExyYXmOoInNiZzMeGgfFyYIiEgGaAPpVvIYJjbncCNBTtyErRAkKasSeoZzOMUuAmNWwWFAaYyiIfRxBboOQqeqQluUwzZTMmDHhNbBnzZcCHMmhPIsSiAapDNnqQcfXxxNnrRZzXTtCGmRrtKkTMZOKknWyeNdJtlLyYgGEDdsSsYyCciTIgbBgGGstefzZZzZzhIijcrRCTtboDdOQqWwWmMSsuuNkCcDdXxiIHoRMmrENneDdIiVvxUuohHUuOaOolGgYUuyJqQVKkVUGBbgMlLmTtwWWwYyTEdDeaANnNnRrBAavRrVbHhhbBiFZzfIHtMQWwVXqvTtRrVksSjJDRrPMmhnNaApPtAaXxnNqsSKMZcCzYyEjJedDBdDIKtEepPKkQqXxNdDnocGSsgVsmMVveESfUUuuFSvVgGrVvxXvVaFfiaAIkuTtUqQjMmkwRrQqkbBKxZztPbmJSsXpGgHhPnNcJjpdYyDyqTJjeeEdrRJjDXYdDxXAaFxglLfFmRreEvpPuUtBbUusSPfHhydDYfRrXxqVvQKkYsSyMSSssZbBMUuwBRrrRbiuURrRIxQqwpPKvVkWfFEFgGpPlGqyEebUuBqZzWEuUYEQdDqLUhKkHRrXCoOwypPJjOoFfzGgaAAaZuFoYygGGgWDIskKvDdwScGgXwPTwWthjhVAaAakKvnbrRXxysSiUXMmxiIxoOmMweoWyhrBbRVvHYvrcCiIkKZiIwVkKvZDdDCiutTUIoOIicdzkKzZhrRMmAaeQqkKBbSsOFfoVvEoOHGDmMKkdiJjuUUeTtimwWTJoOfSsFjWTtxXwuUuqfFiIQUhmMGgtTHllaAZzpLVOzZHxvhHtTdNnNdPwWLMNnRruUwPpWOogGVvDeEdnNzZkKkMmDdKnqQhFNYwWgGNqcYyZzRLlrpPkKsSLlLaAAaQsSVuVHhvjJUdVvDqHiUpsPpSKkNnyZDdAJjaYyYnZzKYyCcvNneEVwWTtdDkNrRXxaInNuxBOUUuuZSPpsSVHhPpjNnKjqQJuUCtTCcKuFfUNaAxMmgPpDdSEeszZGaAMrqQRvmONdDnpWwNnjJEePvGEewFwZzWjGgcCIiDkKXxmMGgcCZzkKdCcdDGGSobBvNnVKvVVqQUznlLZzZqQCzZvVmMaLlGgCcJjFMmfvVFsoOSuCcyIzvVqQrCcRNQGDRFfYGJkoDdZzjJToNQqSNnsnDpPdqQTNMmvVfFcwWqTtCDdqaAQGgWCctTxXCqeEFfVsSaAULrBblnNmMpxXZOozxXPRrSJfFqZzIiwWnYycClYfFrRSsjJyLRrnNFtCczakYyrkKgGCkKtTcTtQqhwjJjJftYyqQJvVjTTtFOVwWAWwaPbVvyYdDWwrRBoOJjgGRKkUvMmVurhHyYHuUBfySsYyYqrRwWQTtepmMQikZfFzrRIVwWjoOJhHPpuUawzZWbjqQJdiIDBfFAhSgfFYlLLhoHhOZzmMoOgGDyYdpPFKkpPgGuUfkKEJrgGUuCEecRJbCcBEuUevmMSsVJwWCchdpPDYyYtZPpNKIikSslLcCfGqQrRvVQYuUxYpPUUuzHhUuTfFxquRSsdEtlduUDtTMrjJRhHPvJjIaAQqilbwKrRAaFnuUVvNfYhjcCckKcCcbBCaACmEehHgGQqHBbDdhpPHhnNqQHhcCIizZEespPSyYtDIeBOorxBXxbJjXKkYyYegYyyCsHhEeSGkKgXxGdCOOOuUobBbnNBVvxXiIFjJxXjqnNkKOojRrSsJQXxDdrRBRWJjFTyYtfZzTMGqQeEFfNnRrRDPpRrITWwWFdgGDfnBbyYfFBbReEhHfDdUAaJjkKQvVzZcCquyYvzZRrMgsKWNnwkkKvVPpCcAaFcgRYyrGqfZzzZLlGqMPqQmbFxXaJkKjFgDpuUbBXxPdGTyYqWwQBAaUtTucFfCACcSsakLMDdykdDfFUuRkKtTvQsKPRuUcFfkOoPpLlWwmTtiIQqMbIiwWBPCmlLMqQVagGAZzaJsSUQqbXrRTtGOogxrRlJjnNxXBcCaAsSsvgxXGPpVYyqtTxdixzZXGpNmrRMvHhEeVFzgBbGZBbnOgkIQqiKFfgAadDGBcoOEeCbWLlKkwXoRrcFfHhYyfyYFGLIKkBeELNNnbnNBbBbztTZtTnNUuBSslcyYnTtEeNHhRrpmMPxWwXGwWokFYyomWwmxXzZOxdmiTpemCcZzHZzyYetTleELEhjJHsSLlvMneElLBZFaejJxXEKRKkMmAatTrciXMvVUumxByWwYVaArFiIsSSNSSIiPAgAaRrRXKZdApPaNnDkBbIiCZqBwcCWvVcbnrCcHIigMmgGAabRrBLlZdDZzhHzOPmMCccamLTtYyTJjWMGgCcCCDdZkKlLtTvVNNnnzBvYyGgPpPAasdHhcCfFsSXxqQYyOoxrIizZPxXtTdUuDUKkLuRrBbUluUISIisifhHqhHGgWwSDdsDVvwWTrRsStpEcCuxwRwSsYJjndDCuUcCoMmOIeEisSUuiuUfuBbYdDyHhLvJjxXvVVlUoOZOGBhBbHbLsSlBYyLaAlYyizjJRrsLxhHIiXcCxvdDjJVGgSLVCcvAalsxXPsSpBbXeiwxNnXsmMhVvHZpcjjJDPpXEcCexgERkZzKCNFfSAatNnTqQuOoCcUEeEeCcYPwWVvtdrRHhrRDkKVvNnQqoOIaAUuNeDCKGgkcQqAaJjmMKuxXzLGgRrvVvVPHhvVwWMwQrnsFYfFaAbDlDvVtXbBpPFfXxxaATnNuUfFhzbSVFfDCgqfFQpjJLlPynNoMmNNmMwWNQqsSDdnBbnYGSsjJgKOoPQDdsGgSqmMpBbkdDsShTDdtrROJvWwWpSsuUPwZMvVmzGgLlqQduhUuHYWmrfFnNyqQiiIIYkKRaBXTkKNubUWnNycaACCNSjkflLAdnRHhaANnqAxUuXMmaSTtsCcIiKkeEAjJaFBLlQPpgOlLsSrzYyEeeEzfFRRXyVoJjOvYtTPpBYzBDYyhAtGBbMmtTcfFZGfKkWwFWwgzIhZzFBGgxXxUaAiqQRzNLPgGUupBbGglTtcxXxvPGsIaKkmAaiBEBbnNhxBbZLlwLyYllspwWTEmMmMZmjJMKmXDdxvVHhDddkirRfxFfXrDdkkAalLvVUmnNHhCcrMjGnEeNSsgYybfSHhpqQUunNMEiRrIeEeqaAeEpqQGMmgVtTvPzZXdDxpaAPVVZzcCRiIIiryYQqfRcUUIiuohBMmRrfTZgtFvsScqSsgGQQOvBWmzZffFFtiIlEeoOUpPlvVLZjJHhyYxZtiIOotTHaAcPXxpCdcCDzZicCXVvGbhGgZOoHhWoOJjPfFBSoOsfIsSiEeFVWnNKTcCeExliIaAqNTtnPnOvZpAaHyYsSUuCcAVvYBbyaWsSSBbQqshBbgGTNntHiIHJoOjicfFYymMCIhkKuHGgQoOUzvVKbBKAacuUCAANjJvVnzZwMOkKhHnYiSsqsSuUUujHfFhsgGXxGWwOUapcNmMnTtYTtXYwglAagwYWwNBZzblEeLGTtgOrljJLOoxsNnQEslfFSsgRrExaAWwaAMxXPbBHdaPpmMjJeBbZzExXEezHRrNqOKkExrpZzPNoOnSsfFwMUFfCgPpGtEbVIiIkKoOiaAiZzBHnEuiIUxXQdDCbBcezsSZQqfodLlQoOkKdDDdiIyqQIaAkxtiXxaaAATnfFUuNVCctQqzZTnkKyesSOlLFfBbkVVeEXqYyYpkiILEEyYecCAhrRHHhYuQqUyxXFfaNnxXaAHlLBhHbBEqQRrMmetTWwbWwCEtLloKkOtxcCXTpPTecSuUppeEnOoNAaEUueCWDdwckOaysSMuUlskAGgaKXazZIBbHivVIHhtlMqQlGgLFqBbQVCcOhHMmOcLlnslLaASYyNCxtSsUuWCciCcSsmwWnhWkZzYcCWGgwQAaEePcnNaAtTpPNQqRrnUuIOuULlTtJaBJjNRsPBcCIGwNnWCsSGgxoOlDuBbqkKKkHdDgGeNnlLROLoOlXFSIisYynNSsNOjzoSTzZbBQfVaAvFxXiMuUbBOBIiLyfFIqQiiWwAaEFfuUCVLDdlvOOEpPgxXZzcwWeEnNhHCUcCUuAatnKkWwRriINUwlRrLWuwzRrZToOtWZggIiGmJjVvMSaAXiKeEkIxivVQqSLlslLSsQtTqXxtjLNnkKxNnzqQvVOoNxIivlLpdeFfExXDGHdwwWJjWnXgrRGqQlLxTtIiLlhRrMmVNNEeAQqaXBMcCfrWtFfNDdNSscIwDmMsYtDdTACOfFolUDdszHSseEOJevJxXjbGSsgTtSWwHRGglLXFfTtcCaAZKKNnVvEeQsRuvPplLfFTtHhyJjHhEzuUiIZYhSGgYVTaATTuUttfFLluUbZzBCngGUxwxTRrHmfFeEfWwVvrvDEMmuUuLHCwWYyNncJjHhOoRXxvsShHVrQqiICbBPpIpZjOIAaibFpPZtTKGMHhwAiIKsSsQzZliPuGgwjAWyYoOwFIAOoFgxbTHbBhtHhuUIiGTkcXNpPQqnLSsGDagGABbdSsKkNMmnzMNRrzFjJhHfIeEeEGgHhFfZzexLlXNZJrRkQWkiILlFfPCcJQqgFiDSWICaAObSMmsAatHhTaMjJkGbBvDdVgkeEhkLZfzxXnNaAlNnhMVvdFfbBHhgBwWeEbBbUucCWwbBeqQEyPpYFMmFFfhHLVvzZAGzbgGBSQqQvPqJjKAanZzwPIxXUHrRtJjaGgEesSgGIPsztpesSMmgGwWezlLnnNSsogGOTBCqFkKaHhSgGqlLGgNrVxXpbBbbaALgQqOoVCSslLPprgaZzHhgwUEeuDUKeEEekcuUAacwKdDHqQhVvsHmMtThIUWFfwEMdDGXxhZGcFuyAaYdDXVfFnnNmMnNXxpPpPVvAgGfFaNSsWtAapPTAaNqQZznyDPcyYJtUZzhDJIiKkjIifyYFtveCXxuUcCiYyxUuXcBoellNnWPpPpFfnLlNIUWXjikKRrCYycfFjqQkKWaZzQqbHhUalLAbCcBGhKwWkWlLcmMClUuLEeTtVVzBdKwsSWmjlLosSOKkBOogXbzRIYNnNNNHhnWwJHhfunVjJjnNDLlUeEilLSmJAZvVVvzaYzZLlyDdzIFfyVvVCchHgGQqevVEpPnNhrgGWhHwlLQqsDdSYxVvvXxTEbiIBePptlVvajJFfGgskKmlLeDHcCfFhtuknEomHhMmZbdDBtTLsdGqQXWVvwrRxggxXxqQQqXGxXkKInNBazDvVbBtaRrUmNnLiIgGrdjECiyGWLsSmeOuUoluvcCVcthHDMmIgGeRrMmXjYyQMJYyYDwwXxWhjCdFJjrzZpPhHpVvSsfeHhWGgMZzmbBlLHhUeEuHiIRDdqpPQkKliIKkpPQjlLyCmpPcIiUuQqjKwKYykDduUiEgGZpPtpeEPNnTlokRrKmMOyYQBYMZzyAaboOLZKfyYFXSaAmMYHhxXgZzGySgqbBgGoBJjbOkKYyaKfPpOoxXyUuVRrvYQqFmMeEYyWwmrRhivoCcwWOQaHhArRBEKkelLOodDRrgzZiIuBbUNnLfVooOVXxvOvAaRrBbFBbkXqQrKBEOoebkgyYKnNkuUWwGRoOsSTtKmZzAaoGguBNnBbmMVwvVPlgHFZIiSTtwWsxXXxUuWrRvLlUtTfhHUuSsIYReEUurCUPIgIzlLJjZiPwWeETthrUicWwJjFvLGPpDdcCZtTzhHcrcCRCfHhFlLMbtaAgiBDdlGJoOOoEeeVUbBKkMHjYywgQqGWveEpPCGgHWNnATtitTPQkkKKaAmxXdDMgGqRrmMKkprhHXxRCWwBqQdjJMBbiIOoSsCcSgvGgXSstdDTZzqfNnFQeETiuPpPpkyYnElDaPpyYAdsKpfOPpoUuJLludDCyYlxuUXeIhHXTZViIEecCviVvIzZzfZzsUuSNnqLXjJZUuNmMbBiInzxhwWpmXYynSrRxXgyjJYOopPGsaAxMmGQGNOSgeEMOEeEfoTtOlEeWNWwLlaRfMdDwIlLTxyYXBbWcyWAaXuUxszZSaoOAZjJBSkKsgbUuDDNKumYxXmNnLiNnFfIhRvzQZzjBKkbJmOVBbDpPdtTWYKdeEjJuePmMpOoVvDdbJjLlzZFwzlWuUwLnhHpPOomMcAxGLlOLdDsSlkKiZzwiZzTBEeqQbrRPplnSsNLUuBZxOBiIDdoOjJLlugyQgfjiSoBbOmMYeJEejrREZnNCczMJxSsbeEvVaVahHynNuNEeqQWtsSTbIAaYyMXiJjIRryYOoWsOpPPIdRAusEbpEcCrRrjJpPBYPpLUeEtfBbFrRZHoxKsSfFvFBbfVaAmMZzaAbByMtTGgQqZzTiItqMmxnqNXxknjkcCFDdJjVEeAmMbBSsavhvVHUCOoOJZpHlLvVhHHhPpQlLeKQLlqkQOouUkvVEeeESsHQVvZwWEezUVQAQqNlEHlLhewBYSDCUuNUuLlAQqKkBmQAVZWUdDyXxmTtYyRGgTGwWBKkGgHhhKkbBHGgCMkKmHMEemcxXoJxedDEXsSBqQRLlYyMGgmeERkXxzZUvDMnNJjmWwhlphsHAigNnSsRrNUQLcCbBkuHhgGtTUNpVWtKkTwivVIGdrFpWwPnLlMmFgGvVDMmqQdpleEaLlAfFKkwWLxXxXiIzsTYymCyernsBOAaobBRFfayYwwoOvSsSsVWNLYylnNHhFhvksHicpOcaegGHhevxyjjJaaAfPmOcivaqQfhAagGHEiKrRFuuedDfWwHhKVgdDvVUJjlLTtxgJhdDVhHhHyDdYVHhxAVvVDdvafFfFKUuTGRLqQRrMmrzQquUMmzZZkgGvNrRZWxHhXWmGoRraAxXOmMXqQKCfLVvzvVNnpPZlUuhkXukKUZzXbNnnAcdIGioOaAjHhpXxdDRruquUOlLoVTtvTRGRNgGLkKhHJzcUrqQRNcCnDrTsUzLloKmJjThnNPEeptTHUurVedcCMpPHhCcoOAaNMiILlyYOsSjJqQqQfbBMwtpPKjJkWwvVTCcDiIjEwfkWwLiIiNnBSkrkIiEejUqQiKkicTeEdDPPpBbhHpBbGZzgJaAMmUxCcPPlKkLKkjJKkzZUsSCXxhHcbkKmzYpPyCIiWwcZzSsUAkQYqQEfrWcVLlvyVutTUoJpPibSZzQqYdUukGgKKMQoOqaAwRrlLiIGHhkKxjJXXKQNnuUxhyYopUZzZzKIiYyFXxWwfKxXwWqsSuVvUseEMmGqFfGJAaPgxyhHYhquUQWwAAaXfFxEecJyZKkKqQdwxXWPppYCcyPqzbiIunxXfRiJjIebiMmYyABFIizBbEeDdZMoOmfgxTdoBdwcXxgNnxXOhHVynwWVjOBbVIiMmYggOiHhIbntCosSOsSGSsgGgUuIqoCaUuwaAPpWAchWaAgGwHOqsXKyPdHhkKcCDdCiIvxxXEgfmMFaDwWghHMmvrbtJjTINnlIAgGuRrLlUiIMmairxLaQQuUqQZvVzKhtTkVuUuUvKbBUulKXAKuUkaMGgmonZzOoUuXxyYGELlZmMlLWmPUuMmuUAaSiwGzgEwvcLlEeTtCYybZznSsNZiImMwXxWgxNnqQJDnUIbqsWDdqdJffEzZeQqEfCcFpPtKkTkiIUkqrRXywWwxmyYqQCjJBlJtuUoZjuQdlLdzkKEGgqQsmgGgKkZzxXkxlJjKkLXKdsSUuDEqDnUsSfEmtYyfQqmMhfFHCQpEvVeqQMDjhODtaBvVAJjadaQCcqVWwpPsNkKUqQJoOvzZSswWPpOozUijzZyzRQqsAxXQpPhDdDKkfiIFsoUSoCgWwwltreEOoRcCgGweEuUrVfsoVvaoCcONaMmaAFMhepXVnQqiIlLNtlLCvSUuIiskKZUuLqQrgGzuUVvspSalLDPpfFKDdkdrerXWwTMaAmvWtTdDhHwnUuNXJFfjyYIRrDNniIdZzoOXcQqczZxfFXERrheJjAPGgQqmMXLOolUulZzdqQalfGtduUPAUuAWzwWwHULIiluAbBavqQuMmguuNnyYUysqfUGgCUvZRwMmpjvVvKkiAaNmkOVPFQqiUhtTVVvvBbjJGbDwWdwkWIxhyaFIifAGTnwQxXWDfjFVvqFgXxdhHDGrRJjHvknNKkLVvlCpPcBjJrjJRrbBRhHZCkQJjqKtoDdPnCSnNsCcEjzhnYyEeKkNdDIUyFLosSkKOlBsSSKFKkKkVgQqRrMcClCVvhHcozlLXxXOoWwqQuOWwWmtTIiyYyaAPpYuOiepPEIoquUgGuRvVGTFfvSsVxPIirVvVKFMmVCIyZGJlLjwHmMctTldDJDMmFfuMMIHdLemRhHrSsrfYNEjcjHwWWHSGghZznNSsHDvVdWwBIiTuwWDaLlkKyYbBTERgANnaEelLzGghCaZAabBhTtLUGguDFRrGTtgfGzYyZzxgGXZgFfKQnGOoRrqQxXiItMhSIzZNniObvVvVRroRrqaAQBUvVdCtTcjJkKFFpCcCcbBlLPsSHhLnNzNTStPXIWwitCWlLNnweEcrkHhYPqQtTpXcKwFWqQxcCVulOmvDawWAzNcDvVdEWwQPpqWwjnuUIdDiCupUBbRoOrpPPvVpFLRcnLJjlqQTVhHAHfAncCNhHIiaoMmpuUApPaPADrpgwIBbMGgvzZVstTSmAtTivnmuEeZzUbBnDQfFSsqoOHhHHLvVlrOoRbBLSsUuUtThnNLUulMmHkKuGMmPqSwWwqEKkegeEODqYkMmKbjvRrfFYyVfFeFqQfWoOpPjzjPihXiHhPpHhWqdLlDrRKNnXxlvvVCuUcZaADdzUUaAuKkGiwxXYyCcWIuvQiXiEELEekbBzZKaEPZfdrKiIWrxXovVZZAZzxQquULeMjPHRXdqplLPqQQdkgejJxeEyYXYyIJJladTDoOpapEeslTtkmMYatwQqeEbgGgGsSPpbuBgFLOolSwEpRrENEWwteZCczPNnHRrjEeAafFSkKZzESOokUDAfFVvfwAaWIiUPpzgGuAantlHKiLDdnNXFXxfxbBoKdDkOSsHhSTMLURrTtucePRrmMPpoORrhHWwUTkzKRGYqhHQzcChOHkcyoOEjiQqnEegdDNnGOoRjdDpMTwaArSsWWwnzXZzAMmmMaDdxFqbBiIgGlEPpXZzpPDLkKVvlmPpobeaAfNkKDbnISDdYSsnNRrvOoToIZoVvGjxRrwVPpPpmPCAvjJZzAlCcMmYtXZWrVvWzMUIiVVfZzsSFQjJhHqQNRrkKKUOouIijMCcXxtCcrbTtCQqXeIiEDEedstDdHSsfvVTtZyYbHhHdDMTtovNWwPaXoGHyYFlLNjJJjnLlRrJssvVSniINScCEoeRrAWTtoOYKzVvdxRPZSDdsKqQacCcuHhCGgcHHsqiZzIKkJvnNjgUuGFUVvufoiCIBIkKRvVmtlBbeExEqoFUumMJHxcZhHJcdjbBJDwWdDZqsSXLJjuLzMZwGglVqSIimMkOgmQOCRrcCcnLwELltWUuYRuDtLlTsSeakipPYsSvVyIPpKGdVEenNvxhHXXgeECpiIqdDFxLGRraZzEfFeEeTzxQkwaAWsgGhHeCHhpvwYWDdPpuUgGWSsbBwtTwuNnNZzuEJjJNdDVvyVvYneEcaNnAZOBbmMpzXxWkKwOdizMTACuOiIoUQqXoOwyyZzJjUvkZhHpPkVtTnqmAaMyxSffJMmZbBrUuRuUCJjpPPcRXiISnEAaDdednqLlLOMmJnNWIuqqQYuUyZCclLzZfjJoXxORdpPaADQqrUnYxXjkKrAaRJNoOnJdDjyUuPAapXxNuBvzmfMpTfuUiNFNnmxoFBbfOcCDtmMTnmaQRqbrxOgGgGHiIUCcXzqJWvcCBhHfzZpPGqQbqQFLNHhIinNwWbtTxqQuUuUIdrpPRHHhRrRxlXtfFHhlzZxcgGxXGgxKkYqQdDyQxjJjuNnhIodwVfjJfFmYyBPpPoOwVIeEiezpbkBbaALBbWwllCvfSsdZOoJjWuDdUrRvVwlLzyYvYpPjJsSUiIfukuUfFmtTnfKFNZgHnPpvEezcbSHXxhsBihZzByYeHhUeuUVvJTtmyrVkEkbgDdwWfPnNfFppvVluTVLlhDdiIbBDbBqHCcCcKAWwXnCMkKoyjTKsSAtFfZoOziITtNmJQqTnNigkWuUTtwKYeDdECcVXqQdBbhHQsBWXxmMaDdtTSnyYOAQuJzUCweRrmKFrjxrNNfFnndYeEKkrpPlfFfaAxmMXxPCthHwbcCBEKLevGLNTDihkKIvQdnXcaAxXCVtaFleMDoOTtQqxXRpbBPRcQdyYZxFSsnNckwWQTQWwdDAafHnFNyCVvdRrDPWwwZeujJVvwBbWHhkRBVpPVoeEOPpPkKgGrLnLltlLTcCeYyQdgGjqSfBGgVkKTWQEnNuBbHLVvCcVzZJjNZzAkKVvcJjCcvifwIDdivtTAtNndDFwlOolLjJzAbvjNPxXuFYDdyDdrhtojCfFcuUUuoOTIjBbxxXXSbBCciZuxkJkKxNDdDNnbBeEdnRHuUsSbBTthHcPWhHsAaSZzZxAaiqzZfFjJeFxXrnWTtaAIiiScqQuQGgqQDrWwRlyPpYLtTEoBbOpPlLNrDsSdzoWwfEeQDdqsCcSEkeEBjIhHFssapPtTcxXlMhHmRrMmgRrOohHYKFfvlLmEeBnzJVRxTGHkkKKeEqRrSZPzGgGaAgZplIyqAamMVvWdddDDKrpdGCeEeVZWwyYzKrLLrWMLNRzAoOagiIAaGNPdLlKLENsRDGwVVgxXGdAuLlOOnDdLlaUSSssItTmwJVRfcKkCIimMxNnoUhGgSpPjwuceEeaKkrRSscCuUUcZPpSjjQBvFfSLlHtrRrpffZzLoSNACcnNTtagsrRSJPJTVqQvYyCqjJQRAaBblTVvpEetbBwWLHGZzLPvVtThHgGCqLzuJjUOCBbDHhHCaXmDsSMJvVAbqQUHhuQqdDGClLwDEedWOoIYwQbQcuJkmxXMKPUuchHyYhTxTtSsldRrkKDXqQEuMBTpPtJedStTjtTAwWvVLOQZElsSoSbTToJjtTkFYyAaZzOyVvVkdDKJKSCcIYtTzZhDPYTUuBboOcmvzzZmdhHGajteEQWwMmMmpPLJjudlLFfHnTxXzZSbSERrehbKkbdDgGElRKDcxQqXhnBJjQkbvVvqQuFDdfCctHwPSspsSMLxnQboInUAMNnLxPXxbBXTrgTqLluwZzqQWzbDdsSxXMguTjJstTioOdfFDIRAvhWwnGOzioOIJQqJGeEihTtVNnvfFtBbwWLxfFhjJHLFyuHKmjaHozLlZNnaFlLWwrtQybBkKerBbXiIgxXAQYxrRxkOqpPbBCcgedDxWvVhNpBbjJgGfpOoPjUqYjJxhHXtCdvBaAuTzZKpPJkKLFflIatJgGoOrmMRYgGPAJxRlLYrRUuiILpwQqcCgXxLqQvlYEQBTttRroOCOGPpJaAgDWxAmPhnQqNHfFRjEeGBbCQTtqlUuqQhHAaVqQnSsNvxXSsuJjURrMmxJjPWYywlLpFfuUwpLlHeJbBjVyYOokQBjzaABvVGIiSdDTtvVhCqSwrRRRrZzZzonuUNolZymhZqbTtTbBjJVvYyXxoGgzZDdXOhHfFoPwWponlLAUNlJbBjLYXAUuvsSOYypwsLFfNktkKwBbIioKtBtYyhiIkKHKkThLkjJFaAEzZjJlKMmkKXBJjmjJqGzfyWwnAkDaAseEUuTtwWsRcCFiINnjJIrsSLlrakfgGPpnTtMfcnaQygGRIiRWwWcKkflkKLBbYyFQUuqJjgGpPvLlBmFWwpPgGxRKQzuFBcwWRUfePbCcBAquUngGgBVcEiQUuPpDMmyxXYyqpwWiJOoNnwdNVvSLOaEiIqQezeEZHcQoPClLLuUlcuuqQOoVvsUVvRIVvWdDwwgGaAbXxIKyMmYeDOrRDrOyGgYaAuzLlNZzAMmpkasSQqNnAxCcXmycCgkZzKvVAYmwRUuKyqytAaDWCqoNiIKkSsnJoOTXIitrdDRhboDxaAaUuhzfJjQqDDdxhkrbhAaHJjuUGUlVzcMmKIJjiQRrqkdRYQTuZeBMqPvzZOrRMjdSCDEeVCcEEeULeEEwXxGgXhWeiMmIvVbBJjnsSEXpjJeEOocCXpMaAtTmPaQrOkKoRosXbBXxxCjJcmMNWwnlgeLQHcCCeETtcRrPzWwsXHjKkqRGouUOoFSTBbbTtBBjvOormMRDdOoVwSZasqsSJqQNVnMmepXFcCXMdDTHgfFrBJjEQNRrRrhHoOoQCDAaCcdygdRrsCUNwWnXwWxrRoBbiAaIkaYyTyAaZZhHDVmLuUtPpTmVxXLyYlLohmJQqXkziDpLSYAaynNuDdTtVvEeMmDcCNfFJLljZHhAaqQWwLlxLlWneErxgnNoNnsIzdtTjJUEOtFduUwWDyoSshLrPbVvoOEeHhvVyMmYSpzsSZPKiIbBkNnZzLItMzZhUuSsQqHfnLIilYLsmMmYyHhazcmUuswtsKkBbvuUJzKOofFaApEjJgGUBbXxeEuvSdDsxhHqQXVeeELubBjAFTtfaeEgGtEGzQQryWlLwQYoOcyvzZRXxratmdgGDdmMDMFfmAFiXxrRwTtzoshjJHSuuiodDOIyYWAYZudzrqujtTmFlNXxABbzZCcdNnQqgriIGkLlPpzdtjlLPWwkpJjBbawLlUYLzbRTrtTxiPoVGgWrRlndDNEMDRrEpSauLwYcCyWyYtjJTiKkIPpAOokSsKHMmwtkKoMvWUulLMmeEnNevMGCeYsSJjPqNDdnKkGwWakJPdhbzIZzFIiMXLlhhNmkCVvZMBEcCvaQXhHKBzpDJmcCMmMaAHhZLsShMmrkKRuHhRChNnHsxMJcwWDdFUuPpJWwHyYGqjzZnNcWPlgtXxjNSjfNcCjJnPklMXGgkEsSeKSdvVmMDrPiItTpDqQAAagPHxXqCcALlZTtkEGnOaqzHxXsEeSUMmRrzZgGMmQqdbrsIzcbBClaAHggpEsdDqQwWSHSRraADXHhhHsZpPndDdDllvHEhHehVMzcCkKZcMJiIAFPpxAaeUlBbbBzVcatHhpgihRwDhHrjJcmTvlMNCQqwmXxMTPpEdCqQcQrXxPQoOqpDlGgLkKIiXkvasSAVKhNxNnjzWwnNZVvLgGHhlzTULoQqJbedDZZyHhAPVvVnYxYSOeCPJdDdDpEWwenrRQGxXMOoZziCcIsaAIfBHhkrRSsYyhHCMzeAaeRvVqRGNnuJjUgrQFlLOWTHhjJuvVGSpDdYZIiXntTNcCAtTrRwikKiwWIzdDZqLZQqvVvIimRCQqnNqaZzgEzAhHcCkGIiaDdNNnmMSsmMrkpPcCKdfWZYZRrsFfwSFpAuvWRYNbCMgGmKIXFfkEXJTXFPUNzkaZzAKeLEdDPpVUKrKmMgpVuUnNpaeEgGzQYLloOpPpghFftaZFfVKapWPpwijYyJdZztXywWYxjSspPCAaJWSxcPpCXlLUhHuJVcsSCBXUuWUlLhQLlUTtOZODdLdwLhxnDCcdVXwlLoaoCtNHhKsSDdkKRykqvQqWUuUuyclfFLlFACzLtTlWKZpSHbaInbUurSsUuxCcXRJFJlRrLhigFmJYhHdvXlVliIvbHvaAdeXFfGhKWNpPnpPNttTttITtwWijeYysxXLGPvImmtnNDdTLimyLuSptqfFkIYKPMEWUApPaLRoYTHfFIMGgMyjPprJPpiyvVtFfTXxrRjhloOrkPpUdyqQsETLlqTrJjLQqvosSyYHhWYFCiaPfWwgGZzFpAIwPdOPhgUuXKkxbOpPuQAaqFQbBzZqUgMmBUrRxsSwlLUuTttHhTHOGgFGgfnRaAeEnqgGlsSPKCckYyVxXXcdDCxQqvpqQZftWhnSsWDtAlLaTgOoxnxVlurzZCcsSvhHVaApPmuzZuuUrHwXHPFlOzoJSufFPHAaiZZUWoOvMpcYwWOCUmMuqzbBZWJYyBbjaAzZpreEuUoeyKkcCSeEcmMFslLYykjJKWQyYBnpMOvlLFOrznEYPyrkwJuUjQhEhqSspPNnKfdksLaAVJfFWbUSDJJdNJoOTNxdTtEvVBXhTtwbeXkKPpuUYVNNnDYxUuoFyYMGVvQqOSOFWtORAaYqQfRXxrHhoOYYyOhrMKkSmMjJFdFfnBhynqmMiXYQqyxAouRnLxvVNnPSEOiZiIcBILKBbkLyYBdZzDDSkKHhHygvUltuUxTtCCcKXnOdIwWONnJyMOKPNlxZzpwdDwfSAHuUhCXxtTJsZrkbBjJxlRrUjJPlIjBbJxXMmjJizZRrETtUaAfFJjAJLvVFfVAuUbNnSAOENGToFfuhHgDVYyYmMaKkeQbdzZGgPIrbsmeEpPMMmLoOomxuWJNnFfcoYsSgGyxHhCjJttTxwowRmMzZrTJbBDlNVsiZOoAXJjKOOonIyYiwWRyYIaupGOPTWfjqQBJbBjKiICFfdHGzFNnssSCdthKSoyIUSUurhebMDdTtINnAsSsmaAQaGQqgAiCqdXZGsSUcHhItTkKKqpLszXgGxYlcCGEesvUHVyRaArPCAwwWKfgMnsiIXxQqmMUubtSOPVSZGXxgwPpWMzhMmqQbZzuUbTtYmWwMydtzFvVxXflTJvttTTPpDNThHIhJjHTzpcfojHAvbCBqCFIjJipPiGKAKkaSskgYoOuYeQhHCcSWTmnIZyhHainyGgZqQqQeVXfAzChHcZyYwDdZiIWwzOkIHyYnkkYdmhGPxVQXxqJjMmJjlSvHhJSFtNnWKEejfyYFAjJaWJMdgGDHpUWOocBbhPRYyZDafMTtAHuBWyNMlLfFepPsSbQqdDLADQPBrJjsxcVvlLOeEoxkWeEVJjvVMxXEVOhqQDdFamhHFXbPmRrsSSVYZFEeONnoQZeZgSsOodzKTtTmMpwWApMIurMHheKOEoOefFokEHHhPpAeEVvOuPRoYLIkKiQNgFnNKwMDdRNfFRrcKZhUiIUTgJNLxpnjJrKkjJiGkJbBzZMmjkKocCOgGNNLzZlXYLPoOANcGbWKhoRPprSZaAzLlzZuexmMVNnsLlSMmaBbFfAvXEvNhgbTkQPaAhnCcNnOoNcwnqyYkcAIGjcbRrMmdvaOFfogvuqrsdxywKLCCcVvFfMwMdLCcPaHboaAXIOWpPJjIDdQyxZvViMZzPpkRNnwbBRXLGgXzZHhqhUbJVvtTsSGIfFLdQuUqFfzTZJnNjzrRGgtHVRrFwJyFpPeWzZfcZMmEYztWlLvwWrlafPRouUOKVGpZznNPeJwbATyAadLRRWmFfMWTFgGqQERYyitBbgJjSRICQJAawWjwWORYsgReQSsnNqxYxXLlSKksObBVaAdfFDOowoOxfHhXxFUsZgtzZTgIyPrRUuFpPAafpyMsSrJphVbBwPIYQqmDvaDZpMmMnNmzZLJaCDQbzZpPWXWGgwXVRVMAasOFynRreBbPQqfZvgjiIJOoaAhTtaAKAakyoNnOBbIiJjVvVuVElcSsCmdDYyhuaysKmbDqQmMVFfTtGgXxnNodHhiqkiMmYRmMkbIiqLaUhiyYmXBbgGPwtTqYyQWpwWYyLlYbfkeiHIsSsSyLlVvVGmMXeQkHMGgGaAkvVWworZpPzmnSCFbAExaAuNzetvVTDmEWJoqmMhHYcCrcymTNDJroZfArRzZecaRrcCVkKzaLwAqAaQNlVvykDqQqlLlQxikzTwPNBbXxUuxXnprRWtnfXxDhaFaQqCHhDCctBeEknLnBhRrMzZiqQInLlHVmMoEeSsCzGLHOADuUkVvcCBbEhhQqHMvVTOvVRIEsjCcgGrEDvVdMmPpKJLuLBCJjcfTtsTUZUVdnUAgpcCPGcCaTYSsgGXInUueFzCVVtcCcZJyKaAdYYvAajmOEWTFEeJjfdhHMyZvVzWMvVmWTgbLlqQfcJhcJjFfCBbwWFDdvKBbKkkFFfDlLdfvVJdLkAtZzTbchHCcEWpibgWIYyjobBKtpUuxXZzPOadpPpPzZbSaMwEgaAWDUPpusVIQqiBaAlCUFRSCcUtVXxrRBbLlvICEnTUHhhsAavVSHctzVvZDaVvYyiMfjSsJFtTasOoSKkbPpUrLuHCchFvKNnCNnFdDGBhvVZlzZLzHbpPgfcNnkAaPpVfUlRubBBPMmZzpAfFmIUuVvYyjJAdxuUXTCyGgYutNeceEiTusrfdDucLbvSFfdwGeWmAGSsgsBDAoTkOsSJVLlvZIiziJjyYwGBIPlLweCBaKlDRrjVDdMbBPpmfHuUjCFqQBGtzZwmMwYmDnNtweoMJVyyDmNnMlLkYjXkKxzCGgTvvcZsStTfEbBNixSswWFfytuNDvuvVmVvMzFfBbuGgtLlSJjFblcCUKenMmNjJTtEkgGljbpPBkDdeRJSeirotmasSAqgGQHeKdaTtohVvoOlgRrZMmYycOvhNBbmHbNcClNKMmkKJrRjbnNTdjJcAfiIAHdFNFDhHdfZKvuUrRVIXDdqLQdKYLnSsaTtWlATmMtZvACEaFzORjdntfFMYCRQqyQEeOmGgMjwePpMdtEeTEZnUXeaBfcsNMROKgmhKqMmExGgQaAoOJjqgvYihIEhOoHKbBfFFByftTFWwxMIqQLlHuAlnNQBKryIKQIDOAavdBMkSIxXiYAUHMLhsMmSHUbfFBuevUvOoUVvuLloOYlLcCHlsRrLlSLGVzFpwWEvVNYcCfCcoSmvrvxFfWwgXxGxwCcBqdVvcAbBjloOPzdAVdcCMmyYMyiQqpWvHPjRlLmYmMsSyfPpFYYiGnDdNGzSuXWvoyXEraAGPpSyroqcQlLqirsGfFTRrTtIOorefEFfeMmtwwrrlDxXYtayAaYBWRrjZzEVZzvpPgvCckiIrpFALRVwWwTZyezOowWQqCFwEfYjWfSsSsvhJjZQAdDaqDligsSgGBbXxjBuHQxlxrWrKmIchHMmCtTzXYqiuUpPPpwnNoZzixOBhApNnNpPnlDmWmBbBbclkWYXDSRQUuhHUVZzGAVDBCJgiaCKQNWCHpqKtHhBGHBbnYmrRMyVUBbOzZoJiywWYIEejspPYyOHZvVzkwBgCnaplyxnngGKgICcRFWwfNYyQqPXlnjGtuuHlLaAzkPpCnrmWkfGnqlyOrRCcrHhpUYyoaQqpPhmRMmUimPIiaoOtTPtgGkSsZMxXmWwDGzEzqpPfzyvkpPuUKsnDdLlNMdDwWpBxfhHMAeEfHovebBPQqpmkKDdxXnNvwKXCXSTtRbpMmZEezqdaCclgGmMvVBEmnYtTwbUhaKkmFAdzrMmpHCXxwuiFfIPSRrFfsxXhmjwJPpYykLlyYwTucCUfsjVsLBbvkKXpgHMDLliIyKGgKNhiKoWDdVvxXdDyYaFxvwWEiLlIQqwWztTYNIAYzaAiNnNMMmYytwsZzoOqEyUyIfcQbzZcBVahJOFCsSPZtitndVjzZtLWwZTDrRBBUuYyXxZzHZaAmODdSsozEeWJjwsTtsSvppPosTBrRSEeNmGFkWacpYmMCcvhAaumMVdDSgLSsyXxQqQqZSlOoKkPewWEQkiCugzxDQcIagLlGAlLnNpPqMSaelLWgGwEimBEHRUusuiYONpPPpnskHTDVvcSfZghDJjckbJjCcJFoOwqQtpofFgPUAirvSsVrRNMmokxazrgGRISvnLdjtWOWXxQqXTczZQqXTTttWwOCjPpwUeEXMOlmMmMmMIiSBNnRiHhpDBqEAyQCcqvdSseEmCcMtTGgGUOtEegneoasBavljauewWLplPpLXxuLQqXKRzSfFUujctTXxasFWdDZzjJdDWPXLnCcpkomYjowWinNDlLoNxBkKPnNpbkcXTLuuUVGTtYiIhsdbllibCYyzIoTtespDdXlNrUOkKgGaEeIpPQKkNYHNsSnbDdNDbBfsmRHoyofFOFqQyroTwEefosoKkgmNlLndDvVeEfOrqQRXydnvyxmMEBjJWcCzZHxbuUWwenNDXntjnMYymDjOojdqQEesuogGUuOBwPpjvlSYyKDFiIkQHeHqSsHhWKRYpEeyeNZRofDdEGgeVomPZzeENrRbVvBbqkKwcCSfkKCsdDYGgEORPwQcoyAaCPfFmVwOMmouJmMjzzIXxRrbJjBfFhpUSssjnNOQqZoLfphMmxWhRUJrRjvVsLlSUMJjGgzZRULvXNXGdwxXNHwTFzkKEeLQNrmMNohGgWQqXSsubGufUkKoBzZbBGHpoyYDpWjJZzcfSsywOVVvlfgjJGyzEzZeZYFHhRtQteSDdFfYDuKRjJLHJWMmwbBYIjRyYJYmbBEemqQiIkKihtZzyOrluOowehHmpkyiKmMmMwWQTiIPsUlYBbMIlMMpPOoiVpglSTtEJTTTndaADwkeEHgxdDEYyMmDVhBVLvbBLxQqVDyGgjMfGIHTtjfHhAajUuOoBNzZZzdDbBiWwyYLlAgGBhsCcBbDQYxXyqdPzkwaAIiRrBZzbFfoOZcCcafBbLnNCYwHhVQKYroOkOolLnEeTcOAOWxXxvNIiXRrHlWUuSsDlozouqsSHuwxbvjTtsdDZGgzwpHhPjcJTDIVBbvPAkvzATHGPhHyqZJjAPGgvPGkRjJjgGeEJkuvCceUWwulEZnPpupfxFcCftjxeKxikLGSoOsglaALlcBnyFPpqfFQfrlXHhxLEewVjJwWNnUsSyYaPrFfRfsWcCSzyzwlLFDcRrNVtTvfFnCRlLnAgXxKaZenOxXodDmxXkTtKMNGAQcrMVPpxXOozlQkKtTZzBbiIIMmKkWauUAzZPpaYyTnNtxRKkqQrzPhHpyJjhHPszZgUTttwoqQfYyrEOoEWwZFfmceEKLlbFWwizZSsShHmgqqQPpNPGgjpcEBbosyXyNoOFfvpaNnYvVwWzzVqQvEBwiIWjOhHlutOoWwqQZJXnHXxPpxQqdmMdDRhHqDetWcnmLGgLhHlVFflLeEtMCRdWrHIGPTNnACvZxXhHZzLuEXfajIimCmLLuUNzSVvxdFfshTteobBOHhPGyYGhnNuULZJYyjiSRBDuQvVqhZQsSAoNgeKzaQhDdpvVGJbBjeElLaYydhHmMRkKsxmLKpNnFJzZsnJPpTGLpDdwFfoOCJQghEejKkfNnSsChHtTjmoOXSbBcrUVvHJjlzaAjdPZqQbjJkKkxqAVoOebmzcKMnfFHHGgxmfiZBHdDDpjKAgoOQpyEwWcgmVEuUwXxgGVCcmOQIikKqTSsWqQoOhalUAsPedmksSKeLwvOpIOoXRtrBZRruUlyuJjWAPKplLJTDZeEKgRZzGDanmMLfmMMJUQKeEzZknNbBNnRZDUzyJjawlLUUOZWIDxXdfUjJwWuMzHhZmaEeMTObBoOopPEeAPpVYCoOyqYHhRSsbBqXxqLlZgeTAauUKUOxFfXouBbRrkUgGuJBbUDdlzZeEPbDdZzvVBmMkZjFfVeQqaALsSrRlrRSTWZzSMCZAOokKMSlMmRrIiyNFsSmTilUuvVssZzSBpRlHOYPpkKfToeuDZPpiSaAOgGGXRNwXMmqRpPUuUurQAazHhqQdHhDNnndUAaoORraSsAslPyYdkKMmIZKxjNnMHOZzlvheNnEHMjJUulMvpsSPEedwWhcCHVvDdzDdzYtAKuyYUOxXnnCfFcNNucpPSRrDSsGYcqOnqebRzZGaAhtmmMFfxpPdhwWzZmFfMHKkDfxPEgGdDNvRroOwWEeUunjQDdSAZzzsiIWSmMsJboOtsOkKofOfFgRsSrrQJBbhBbxOPpoSZpPphnIiNqlEGMmLpaAPIiSOJjqAlLLlxSsHhnQlLqNGgPJjxeNatTApPWwEwyYHzZxWeluzZeRPprvcCdcsDJeyYEmoVmMpZPpzQmbEzUtqyrDVjJvCZZzvyYLfFugBRKZzzZIiHXhHDddFUuZHAPpUnNjJuXdOBNnHTxtWEewjOfFQdDcwgGdTYnNQYZzAaUukrWQqMyzYiIyZaGYMKPaUlufFULunZVvUoRbBdodpPEyUpPuaAYkiBWuUirnyyYYkKNqQuqQSUeEUUupOsSqCVJjmMvQQqLlqhAolsnDWaAjOaACcoIPQFMmfTtvhHVYdGgqIefFCvfOoCFOofcqQyYFbGNQapcCEFMmGgurCbWcCwfUZyYqrRkrXeEfMHhbVyYCQqwrrQqYqANqQCFmGgCcNFKARwWxXRfFijJfrSsSTtzZnNSHhdKhHaeENYTtFZgAaQMbxFsCcSfqQkRrXPpxLevViIfVvKlIiHcCbSvVsTkOWwHCPpchWcCTKnlSWPorRcCVaxynuaNOxOzZDdaAAcCaHhtBQzHMYTtzLOOrgGbBWsQcHLlsKWwkgvVbxXZJPpbqKvNnEYPpkKyhPWQqXnNLzZjJcgJrpMafFVvXxgGXwdGGgjgYcCyochHTbqeyxXLVlGaAWPlyrXjSsSsapyjTAiVvUujMmkBbIiFftUAawWiIJjwWbJCcjVDnNcTyQuJFPnHwXYyEGQoKXXyqaGTtBzZbxRFfEsSYqiIfFjJTRsSfWwAlLdDGgOhAMmdDJMvVkhUYRrflXleEwSsWTHIgjBbSsjYyZoVvgNwVvWmMQqCcHVpParStUGmBiIIiZUQtGRtxwWpXQqlBLlbmadDuNiOBqNXlmbBpPWhAaqQTUVBKqoObNYyHMmCdkIirLFfUueSshSQqsHBBHsPpBstqQNhXxDUlMmrRqnNTJAghHDnNqQMZEScCseVMCtyTtptTdscCSlGgUuLHIiyPhHqZzqQQpiskjYyuUvYofkKvaeEaUuAAVKOroORHhtkKtBsOxXfFLWwezqvVoFBaoMmVTtvOAbRrflaJsDEjbmUexdCcOoDRPprLXtHGgCpjGLlgUwWCqBqWyicgkKOoBaIijwOoWmdMxTEtAchdfFRrcJjoZeElEZzKkeQHhcCfFcmMZzjJpRrlAYyaghpPlBbTPQqpgGPyYtLPpqQrkKciIAuUatjpBXxbOojGnsgGOjJliFFYyffIFFPRThsVbwWAFsSOofaqFEeXxfEeJJszCxqYymMQXSsJjVvuuUcUuQqCeEmMAgaAGEdDCSsBbUWJsHHHNnhhuMmaAOHhjJXFfFrvjyYQquUaAWMhHUuiybBYuANozZomMUUuaMmDvSXPpAlLEeaxsvWgdrSneEfFMmYyelkDxXpnZrZmMSLlsznuiIUlQqmCcwgGRSslldDfFnNRkHhvEcgDPRRrkDTtOrRoYywLzZlQYSsieELYyzsQhgtlLXrtTvjZNbMlLVFMmfZWwzgGkyGuURrLStTsCRyYbSsgGBrAdaADScHBcCbhvVAauUbkKBCwWSfQMmqiJkKbTtKevVpPKkFoOOZnNOoRnelIiwWLdqUCsIlLyYwoONIZziRfEzYySsZQIXzEemoOMwBbpHhEeCvVYyhJjrXtbBTUujKXUzIBpPbsJitvvVVCcJOTHQqfFRfZzXtiITxUMmpnJVBaeEUuZuUeJjELWfZzNztcCTZnTLlaVWFIVPpCanvlhhHUeUuEePpqwtvbbBFgGshHQJHhcCkKDIwWSdviIVVvDsinKkNqErHhRNlRBbpvvbrKUEzWbMmBvkKVpcEeYnfNGghUUuuFEedDNnjYyJbBqtqKvVCaKkAfqcCQVvqQXzDqCwWrrVhHaArRvcCdmEQqLbBKkHhHhfAZhHzTvxKkNDqGPpgViJjHIdtBzZbndDllLcCgUuVEJjSAaslkKaAeEkeUJNnjuEeWmMTcpiINngGXFYyLfFRyDlLHfFhRXJRfkMEWiIUumMcukKkQqKZjUqaoNsAXxwPpbSqDUuzZVvxvyGnNIQqtjMnTaktJYOmcNxazZkhvVYyQdmHhHrUuRhMgGPpDdHvMUumtULPrRFGTXxtTtBKLlzZeKvRYMTfFDnNUudoOtjIiuUNyYtTnvVEufFHhEbYYyPpyHIjCZzMtTmcuUJwWCBbqQZVNhhHGznfkFNdMmdDDuDdUMKUFnNuLlyVCcdDEpPeDyYFVLlcLJjzZUuZzuUHhwWZzKBeEPuUZUuEvWpbMFVvvWhHFflLDrROYyiQqHLlUgGJXqQqXCbTtrRBXuUEQqeADdLlaLLlTxLXpDDddWwPyhQqHYrhDiiIODdoXlLBnlTtfFfBgzZUuFRrwWFfbZzVDdwjQZONnQqoxuhzZoXRBQrqAMYyNdUUuuXbBMfnCShHscIFxXzZynNKkFwWfuUtTXxYtRrPmGgFkKMZVbFzQekKEUiwlLjolQNjJDNsxwWrCpgFfGPtTpczZziIjFFsXYmMQQqNvKzKVuyYUueEYYWxuUcatmZIDaAoYyZPomMzCNQeRrqQEqnjeUxXiInaAUVyYvyjJBkKbWVPDvkKVdVXxvcZzErRaASCcKqVvXnNZFiIFfftJkKjxXAUuggGlXfQyYGgPcGdDxDgAEzZMmMmdUrywTcCFfSsegGiIWzZlNeEbBCcoqMGoRrKiIsQvsSLWzmTGgtZOoEelUlxtTsSRrQzsSCjmTtMzCXyYhTtjThHtsSfrRrROQDdeJjMmGgXmMLThlLHMaAribicIrROhHMOoGgPcCCcpmJVjQAYyLxXlacCShsShUCSsAkzprXDZZzkywqQbBaEUuOeVkKvbIiBjBcCbfhTtLlFfgYyJRYoCcCOoTtYycOyrkGiIAagKjfFOAaxApnVOmhaABKkzZzGgiIsaYyASFAahTSDfFPpkKDddmMxpPcbBBtTmMRTmJNnkfFnqvvuCcwWmZwkKkKRwzxcCxXTyLzZaVcCalLpPcpMSsvWXJgPpOziOwWtOoKnNkVfFyIyYisiNBdYqQyxXUunFnNEtTcCBuEeLlUPpOpPMEedoOxUuFfeLQfZNwRWtKkmcCAHEehacCPJrNIVvJeYCKhoHZyKkKkjJgaArkZeEKrRtuKkpEfFmuxXCcUMCjJlmUutscCYyOoSsQqIiOmMlLoFfYylIkhLKaAkTvzZVqQNEeWwsSUZLlSsHdDhuFasSpPduKNnsekKsDdJhpEKkThHeHhneBbPXxeTaAtWsWLldDTtwfGoOeEbUBBwWuUuUXxHhoTtOWTAyMmZHhzKLSPAPdgGtDzZAXxLjjiELlOoMmGKDDxrhHWwWwJvjOoJaAVjhpJmNnEcdDBbChHOoQqYyuHhUlQqXazzOJYyjRZzzZwkRDFxXzpeArRBsYIiySblXxeeIxIqVvVaHhARrUgvVuIhHaALliVYyLTIihRrHtkJjQwIxHITtpJpwWPZSuUsJjJZaDZzDddAzwiIEgGJRPprByWwAaZaAzQdBhHFffFMmboMljJLmGWwEFfeQWHhsQsSAapgllLvVXxdDhhdNMoOmMNVIaoOnNiWGPRdYyaSsUlLrDYGgylLzZdRuhHOAKkaWwFfFhaAUuDdaPwWvVpvPptdfCcFDfFNCrlfKkgYyLpPlGUusSHhqQuPUcOogGNJeCyYnZaSsFdDfTtAdgGIiVMoLlLpbBPUvVvMxXmMmkKXaNnrRKkAwdDfYcCLlfFEeyWkLlmcCMCxGhHgyKdHhDRBbTrRxeEppPTstnZAalffEeFfDubOBosIisSavVAHNnmTbBgNqgcCGkEeyYTtuUnYXxeEfFyNHhoOdlHzZzgGAcNnHGgZGretQqAdcClLUkKtbMXxmkKshvVwSshJCnNJtTenyFRMNnElDhWwimhHQqvVjJmUFgGfSsdjLChWjJgzYijlLJEecvfkvRQlSsDdLqpXtgrGgUQUyYMwcCoUxZOLmGGgvTtfFfpPksbfYqQuiHZJeAacNpRrOTuUczYhHybCcFfjpPPpJKVyYGghrXxRfuUQyYiIfOoJFdwqWmgGMNtgYHXiwKWkDUudKqyYQBMmgGvhHVYFfRrhHzqQZyIiggGHwWuSpQqPsIfpvoicsSpPCIpPKMnIVIivVJIiPWrzVujJcuFgGNnQSYUGUQqVQqhWWwZwauUapDpPTNngFSsLlLAfFcCRrZztTDLxiIdDpaEKkHeCEefFCxbBiRrxoOVuUttTxYyRERbBMVvmqQGgXxRrAsLlbBPSjJZRVwWvlwDdWzAaVVvzZKkcHhnNTvxPEuUepPEHhHnNmfKSlLsYykALaAaAlnAEeuUOslLSVvSFfDdFvRWSsqiIQdDSsTaALWGcOsuOSdHqaCcSrOoZYpPLlJGgwWWwIuKkYyZnNWwVgGpPJjiIjungyYmMGhHSviIVTtvALlDbATdKkXxqnNQoHJdmPFpPfOoqcFTMbBeFumMCcNdRrIieEpPQtTeiIzZGMSMlLmeuUZDDdesHhSEDqUJSszOXxTjLSsbLHKuUkhlcqQMXgGWwmMjJHhuUWhHYxMmQVvIicKMjiIJmkAaCKxXuKQqcwWCeQqFFjDQwSQBtFfBbTiuRrUueEXxNncCXxNKkPTtpsRrwWScCYydjXGzBVWeGgGZgCcWIsQZzqDrGgRdTxXHhEetpYyYyMwNnEevVzebZzBgGXxgEetTyYBblLNOVvVLlvxkSsoOLGgoKBbkOHfFIOoinNiIkezZkKERwWMmVvpPeErqPpqqQAlXRLtTinNcCBRJjVIiGdIiAGecCXVcyYFfJjDpYkxSjJnNtTQQicYQqVvyDxXdTNBLloGGyvoOpPvVoJvNlNnLGgIiwBbWYvoGkKpPCWDbODjJtiIJjXGtpPvVTrRbauUIBErFNThHPuFEeiIfUPppgRrGPptSsUIZzFfiDPpWwQqdaAKqQkAaVveElLBUuZFfQpPoODgaAgGGkHhrRtTzvVYXxXZzxuUrRCcjCaHCuUcQtTUuqTtXGpAajgQgSQxXkJjArRakuPwWOHjJFfhHXjYyUuJqkxgWmGiIgkZzdDDysBIjDdOvYOoJjZzYKkJjyCcCwRFeyqKyYauAazZZMyYBupjTtbBTtJpvVXuwWZwWzjGgxXZzGgPItTPpiptWwuUCxXIaegGEAyYzSHhbBsZHhIwWuJKRugHhGUDdgXxGGNngpPfFiIdDKcQqGgCvVsPpboODsSMmdDlLdIlKFWeJOoddDWmFnNEIRrieouUHhgGfVvGgLlYyAaFgGYxXJYQqyjymLlPpJjnBYhHybDTtdvVtTvVcCIiqbBQmDEvRaAtdDMkOZuoOStRdiIuCZjlRrUvVuPprRnNnrgrtVvCcQCXxcUPnNYyJIPpgiDCdDaYyNCcBGgxxSBbsKHFckYhHyEpPQqexdFfDGgEeKkgMwwznVKRlFfvVExRYyrdDoOGgtTiLbBlIXergvVtwWHhkIirHhRXvhHvMmHjGXYuUNnyuGvsSWwrRkFnNEfFUUkKBbmMfkIeFAVIsSuUcCRrCbgGhHBuUqQoMrRpFRrAJfFYtTXVpPhHEEACniINoPCIDdhSsSKVHzZfJjqQKknyYmSsMWANaAnhHrbSAarRNREvVYLlqQcPpiIMHVvhtMmRrTtSAaZlvVLPfOoNfRtWwyZSszYTcCDVvbBYoOyKkgvPnaLlAKlqdDunGIahnNSDdHXxPLHIidSsVurRKmMrrbjeEOChTtcbwWgtrMYuwzvuUHhaqMIibQqaaAncdsybWLwWnVaqvxXuiIqhMJjmKKkJjqtXxTEqhPZzgqeEQGzjocCuUcrRKJjkuTuUtRrfHhKJqQLlrRNRXxrRrLlKqQFfnQoOZzPXxoOfTtFgGpNjJXVvQeEmXDGgdaAeEeyYExYkIXxyYeEiXOkKhzLZztTNnleETqQuloOyZzbeERQqePBpPlLelLSULlZzarDGejEUNnoXxWwOugiGgFfpBboSIikKwWwxmiBOlLiIVvXGgxouUwnUYWwtTmtTMAqQvoBbFWwfogGIXhnNHxiOOABZzXjmyswVvWGgIJaAPpFbBGqYGUbnNoXzbxXtcCvVvVIPpzZWJHhjIfFaELleAhHLxWYywXVvPplHhogxXOoCcXaCNZWfBMmEUIhHihHDkywQrRqvoyYMqZVrHlMFfyMUknddBGVvbzrRwkTtKYCiIwLTtlKktirREeHhgGWmFrAxZzAalLXoOnwLSdDIisKkFlLeomGsowzZWpFfPngqBbgXNxMPHaASshHvvVVRsSrhHlQFWeEwtSzVvCcZJgxXGGgVvjoOsxFfHhicAaCFfELPkKpcqyRrYQUjAaFbBPkSzZLeZNbBnzNIihHwWoSsATWPpmMwtaDFfZzMmMmdOKVvrnNRhHUItxYyoOVGsIVvBcCbiyYvVOomDYybcGoVvOghHPmMpIzZmuUMawhcVpPJhQqXtTxZzmdDnNCTtcuIcCibBvEEejgLbBGgbIGbbBBTKkFfBiIXvVKVvYykxmglVfCeEipNnPrRIzZcCpPNnINniIuoOSsRWwlGgLHpGipucyiYyFQquCxXcVXxGgwIdDiKLVvlFfkftTFEezfhBbGxXLJjpWvblLGgUOhHPpoOZzMkEbBexWwKLjJlNnfrRWQXxqEDdefaAFwFlzZGjBbJRrmMNntPpTtTbqDnNdxFfXdDVIHqQrvVRMkBbszZwWJGgVFfvjSAaaAJjBbAQGfFQqMmsUuEdDesxgGOobBZXxzkzlxXBTtYIimjJyeEbJZzsSjqJjhHcCLzeGgIvVqQWkvVJoOCjJCcSsUuQqMuRrgHfFqQRrhGUcYKkuZzzZQqJjUJDdlLkKqLrhYyluyYULYywHhtTbBElLYyaAnNFOotgGObBoTKkPRrOpPotTkXxKRfLlFfDWwcJOqRrQoHdxXDWlLqQDXxddyjmQqqQYyYyqJMmxCcdoODVvbBlLFfIiuUEYyoOpPwrRIiWJjidHhTCULcbBCxXEMlwgYqumMBbpPYyUQIInNiMZzmsSegGeEvVEceRrqQPpJDRlMuATGTCyYcWwzZtgdjJZAbiSsCiIcdDDSlzsSMOeNKUTTkKEetzZLlUudFIifTttcCTEeyYEBbMIiPpSpPALjJVXyRHpPvYioOZNnvhHVRrjMsItTudFfJjJvdDNUlLFjnUDdunyiMmcCrWwBdtTDbZBxCcGbJomMhHOMkbmMBVAavBbDbZoORsSrwWqQvUgGubBqQztTZMmSsvYyFfwUuHghkKHuBAjJwXxJIJvVxPpwPpKlZzLLlkuiCciNnIwNnLLEObCIcENnVTyYdoOnNIRriHuTjCDdpzuUZJjdYDBbdLlwvQqDdmMxUgGfCgzHrRgmePrRpuKkigGSQqQqkWCjJrNPpZznRBbYyCSsudWGmMzZAGRQqcvGmMLlldDBBUQquPvfFRnQsAnNfqQQMmcgpPGbtyWwMmYNkKiIQyYcLbBlCqvVZEEsSZzPTZSJjVcCvpleEZzLisSAEhHeThRrrRWwjoOLlNnJuiKvVkpWNkQMmEeHhpVUuqQqsRKCckrGgoOZbnNwWBpPgOJjoLlWwaJjIilffsbBMmSGDCcgGmpPKEeQvVqkHLZBbaRrAFzdDeElKDdHKMmKJBbjPpnNmAVtTvBoUpPHMmVvhfFqQuqQEeoOsSciXtTxwsdIfGjpKwqKjaAzxXnEiZAtTvVanEemZAaVvKXxkTtgWwlxCFAaYykKfKtlLWwfFBbgTtBXuUGfcCaiuFJMmVvjfUgHhGOofaJWFfatoOTAUdDpILcCwCIicWBFfoBHhbObKEekqSkzZjJaCcpIiMmPpPWmguUkzfdDBxXtToJYyzPichlyYAaJjUeHhdfFHhlLEeVRvVFmMJSsjMgGhtXtQqJjTWXPjJphHuvBbpPqQVSsNctvyTdDtsPpHCgGcwWWwybBeYNnYOoSsyVUIirSqvVoOoOjVjJvJkkzDqSzZsDMmdQdSsejtTGgJEfFxrhsSsBqQVEpPjJjJjwWohvVZvVAaSuHhLcaNNnnmMyMmkqQYDdyzOoPpnPpNZKSdWiCSstJjTkKcCncCneExXTpPOsSoUuHhJzZjpPwRFCcJjHhHhmEeYycCbxpPnnEjkKJevHRrNlLDhgyYPlyYLVXnnNvVcCZpPkkKKJlLqQjzZXGglFfJTFeQqhfFHEHbBTtGgKkhRQqrfKwWrRsSWwkIcCDdfFBbAacCgEeGsqQGzTrRujJqQGeoopPceIYHhuUlIywWYQqiQqbompPwWLlBbIeEqILlitsONnZZzJonfkKxtTRroHhrEkKePdgFfGDpEdDhUukKQUdrRLFfXcgeEibpSrqQdDJjwTtWnbAjoKOocCkiCcCpUuqIaAiyoDdOsGgEeSKwHHhNMIwTXoZzaAociQqIufFKkUCvfmLTwWVgeEGvjJfFhjJiBbAnhMvVjJmHNxwWsmMSSLZDdzKkmQqYcCAsSoUuKlLPPshPpGRrBxXbgEoOcCRreoOelcCBSsbKPyQpPxtXxTvvbZzBKoWwEtTGMmEegkKHhFfYnNcCAsSJhHjaRrjJkKNLaBQKkkKqbAlvBTtbnNtywWYuUpPpPITQqoOXzZKiYqQYTtyqDOFEqlLWKkkKzZzRrZMRrXxmwmMdDLleNcChuMmDdUAabIKkeEvBFfTteqQSsRrRrToOcuDdmkKWNnRPpjJBbvVXesoOSTtUuoRrQnHhhZfFAgGDPphpuUmQqdDXkKnNeGLvVeExXSAaieEIeiIqNnUujJSBbUwWuKkoObBXRvVoGgnklLKOoYyGgSVdDLlGBbBbgZzvsnNLRJjBmMDdMmAarRDdbrlyWPpKCckbBDqQduUtTGFrRMmfaAoOLGWysSxyCPrLKkAabBoOlsSrRRANQqnuogYyCcSkKdfFDJLIOoiCcKklDdQpPHhJjIvVyjJNtToeEOoBbmoOZzWLliQqaAIaxlLQqXakkZuqhUBoOFfXxcKkCiISsDdbwhAoOKkwWaPzrRBXSseEuUxbVoQqNpQLXtLlkuUwRrvfJjXxSDdsFaAbFfpjJJjwOoEezHxXBgcCJjsSxIHhdqQDhTzXYyaAzXxuLOoCcwWnNTVvMwDdbVoqNnCYVvyIiSFfsVOVdDvofTGztFbiIMmOowWHOaAuCUurIiSsuUFVvIivdDvRpPdIkKiDrlLHaARrjJlLhnNeEBbfFQuUBbmSsPsFBJRrmRCvVRGsSgrpPcOowQqFfWMuKKRFIKDHhMfFkzetPSGgLDdgGWUuzcCXHeDtTdbIMARrIiiSgpVSsXCnZrIuXZzbycjkKJCYCcfaAKkHDXxdiBLlbNnCgXxTOoavVHVvuUdbZnfFNwWyiIRiIpbBgGPUusSrrhEeHRbXxBbiItUHhuIiTgGfFhHqHKoOtTkhQxrrZjJZRoGqbKkfaAEeQrNDaaAMCXqQxcmFyYKJsncRLlCRQqsSrcoOrAasSYwuBRrFfHDHhdhUntgGkKxbPzpPZpkKiIiItTAZzqQJAarRXxjMrRwBbyepPFfEYyZzwWrRTtUDdDVjoHfFyDdhHQqnqQGgAaHQqhOYGcUudCcvsCiIxXczZkKoDdOBZHwWEPDdpeYyPpwWdDmFRrfMjJYAayqKkQdtTLdByfSNeEjlLJwWRzZrRqfFWmFfKkOopEelZUktTqQdEeEndDrRKsSkiTpyELlhHeoOsncreaUuAGrJjRIidJChlLHPhHzSrRqlLsSXxzZQWQqIuajJAUkKwWlLEvDdVkWuUEewKlSzZOoZIYyzZbwWDdMmgrRozOoovVOUuFIcNwWOoyhcCHWrWcCjJXUpPrReXxWxXgGwPTlLhHoAoOaOUuuUtdiIQFFfNntLlaHhxXASsTupenNERMmXdDDSpdwgGWDSJjsNnrRrRVLlbBbccmwtUudDcClMTtACWwjJsSpPpLWwsSloWwrRSsCcRrGnNgGuUhgDdGPpRzZNPpBoKkOCbQzFfsKkDdSPpchHKxXzUUdDuuYyaAsSkxKkrRrNaAnXTtxGnNCcxXaaAOopdDOowWCcssSsnVvsfpPRvbeEIbBCkaADdxWDdNEenwRrKkEeXAZFfDtpPWwTdzGgOobBfEezZYyzbhHtTNmEtTecCqQVPphRBnNbryYMpPSsrREAaAaPtKkQqIRJjrsgpPGSMfFpfHhFMmVfFMmvVWIZtTzaAiwkKvBbPDnNdDQqWWwwhHXZzoHhCsScFIiXxfzZMWwHUuhMOSJjsySsYfKlLHhOweEdDWWwgCLbBNnnLllbiUXxulvVgCOMmgIiGqQUuxGbBAaGgoNmMfMmnPWwgnNIqsLlLlUJjuSQCcDXqQHzZgCcnNGHhhVvQSbLBuOfYyBbQsSqFXxojAgGvrRqdDQcvlLVxXpKGgEUuekGgKCrpXxMmkSLlNHFfVvhnqVrbBtTaAZjkcCKJEemijJIMzKYJjJjEeVXTtxAavmlCcKwWnPJjpNCcvVbqGwWgQSWwaloOLAstfAxXWwfWwBDdSsfFUuMqQpmQgFwWZzQCkKxGbBcCgWwnNAaXSsfSGmwWiIVFfFuUeiIEpPZzrpPTtNwaAuUGyYJjgeZzEfQTtqWwFTtAatiAaSMmGgoOsNndrtTsSQqgKkmwWXuUlLxmMlLAaHhCctXxwWwrRriIEeJjbfFOofFJMmqqLKklQQQqfOoCcWwoocDgSscYGEyRbEidTEJjebbBBjJWwMILlivVJHXxyFflxXPUGrdYyDcRrCUKkuNnoORgIiuIipjJPpLkqRrQWPpBzZpPLlLlLZzVDdpLlmsSNnuUiILTqQeMmCcsSmMDfFrIFfivnjJjJNtTjJiIjnNsSJVUGgQXZztDdZFfSsHhqrgGRQvOoxXSCcsVuGZqQxXzgEeNnSsyXERrdDDdqQWweMmVDdLltTvkyYKiIGgbBSsKkcUutTHhOoCuaAUkKyvdDVgvVGqkBbCcKiIvVxNnuUdeEDXglLFnPVvpzAaZzSspHhCcPHhPpXNnfFZzzZxjJaWwATFfbByHLljUuGjJzZuUguUfLlFBbOvVoPBbdDpjjlaALejJPpHTtQqCcRVvrlyeExXGHfMHhmgGFhvVsHMmviPpKIqRrPiIIiEFuUaxXwWAbhCcpvpvVPooOWBrRbHyYRKwhHWbBAZTfkKNhHwWkXpmMPKkxKQjsLUumoOMzZRlxbBXbBuvrfFRBEebQPpcwcbpeEPBQCPpgGrnNRntOHfFrCcRgGhtbiIBOdxXNnDgoOVvUujJGKjgyrdGgMmgqmMnRrZpPjvCcVXxeEJgEeSsGihHYcCUfAFfxYyXcziIuUoONZuJjzZvkOsgeEzZVviIBfFoObnNglxXwLlWFfIiLlJeEjFftTZzLLlIrkzZKRcaACiuUdpzZPVhHqwWQvqQDJPpfWgFfVBbNnoMVmXqNnRrAaQOonQqMLlmUukckJvszobXtTmMjJeEUiAVMmvyziIUoOuzZYPuICrRchTdDtbBTtXxQvHhbBQqGRrgAaqjJlOocfFCCbCcBQnyndDFvVffHNbxHhhHIiTtlLXMmBmqQlnSsIhHitTNBbHhpSsDnDVXIisShovlqQPEeLLdtTOoZoOzDoZzOtMIhHchzZHLlDdCEuoNnOIOozZgWwvVvVWzdDvVRSsVwWwbByrRYVvrRvVfFONnzZEtTEeWXDNndcCuLlrRoOpZzGgbBChHcPTtWzBbwWGFfgZUGguwIDdsSsSFfYLlsSrkKRzZBNUuVsSLGglSsnNvHJHpfFWeEjJxCMhHmMmRruUuonNrRjuUJOUXxSsgGPAaBbCcZzpsQqoOLlWVwWyLlIiYSxXidtrxXRTDKkDdkKdwwWUuOfUXXxxJwWOojYWQqOoOocNVvnwWxpPrRueEwWsPpYySFfwWBblKaAkjJZOVvozDdYaARCccCreEyRrARraepiIPoOjJHhEeRryUuwWeoOfFwkKGGggPpQYGgQgBbLFffhKkHkKeysSYGgQPpnNqXkKqQwWirzZCwacdDeECAOoWcTtgbBGeEIWwWmzmFHhsSFfsSFnNFYCcaAyfpwWdiIDTBbhHWwdDVCiItTcHhMgoOjJtRAnNlLarTGGXHhfgGlLyxESswWFftSQqsQYJjlrRLIiPCjJxiItTuUjxdDXMcCBUurRTtpTXEZzeaAYEeyWDdKMmJiDdIUuEeVvkKHhVvKVvAQKkqfuUxXFRWyYwvUudDVslLvCcZzVvwsSWCOTDdkzYKkyZibKkmZkcCKzOoQqrRvVkQQqpTtFfZzkKNnPpMmPnNTHWErReXxrRwpdToOoOtKpghuUsSHGLlwWPiITiItQxvdvKkVOoxnNXDqmuyYvvjqQvVhHLAXzZfFGgWwpPHhOKkmMKkhpPEeTtXxKngGVvUUEewBJUuZmMzxXHFIifdDFbBsSiIRqqQQruUEDKkdTyoOYSSsSsvVidsSrRcFfCPplLDVvZzNntJAAaajrnNRecCEISeTlLjZzXyYxDnEYUhHNAanuwfBbjJFNZzoEaAhHezgcpMDdmnNPHGguUhwWLlcCcCFCLlddtWvVLLsSlJjGgEXdDoOLwWjBbJjjCcJDdJWWwwlVvkKUurXOGEeIigoNiInVMmvxCcbWwBwnbMmbHhBBMaPpmyYvVrRiOAZzaogVvkKrRGWwZzWqQpPpPweHhybWwKdDkBzZLlNneEMsSxXmYlhTbBtxXDlIiONnozSGgfFPyYcjJCXxpiuKOokUCWvVwcCTtnbBNbHhBPpMMmJJYyTtrXxTtzZRUIibicusSUhIKkaAoOuUjQLyjJYQCsSGXsxXSnuVvUKkyYxXWAEeazZwXxEejLpaAPlMmbBhHAlLPpaSsJMwGrRGggXxpaAPWiPpUDdvVFfubBqNkKlxXeEeEDfFdirRIDdgGeEveEVpPCcrUpPlkKLuNnRjJmIiAnNtTaMDdbBLIiVvOGSsLloOaAQLlIwWyOocCtLzZlvdVmMSAaaDTORxXaRrArxevuzZpvVXcCIeEiVhHCaAcbBjSoKkDdOBbgEFQqfEaJjfYtwQqWTzZzZyFAcCyYjJarRqsSQywWilKkLpJjEQqmMdDaAvaASpEebBhHXPpsSxgqQUuhKkFfvVhHSxXmMYyFEzEenNJjazZAIWwhHSsWwZxkKiIXEyYeEKkGwIiWNncCAlLtyYTalzRrZbBVvcCuxXUHhwEwWeBnNbLlXxDTQqbBtrRgnNGdWwTVvdDlUuHxmkkKyYEYhkKsXxSKCckdzZmMHhHqQVFlLJjXxzZfUXAauURNnrxXxyYoOuMmVvmMHhfSsdeEDNnJrRMsSENnUueEMmNnWWwKNVvngGkkKwwWZzNQqivVQjJqtTYySGZzncpWwPCeuNnUFaAcCfQSsLxXefFELllqmMUujJHhhHQnNlmPwWpMnuUNRrEeVvAaLnNoOhfoOeGdqQVJjpPcbByYDdzrRPpRrHhfKhcCwWHFfQqjJkFPHZzYXZzjJeExpPTIVGgRrHRrOohUutWwTDPplNnLvVZejkvGgVyXxNEenHrRhNZzXxnwWWwYkNFfnmITtinIiNqQaGgQZqGgQRrBvkKvVJKkjVfiIQezZpPQOKkKqQoEAIiDdaGgYyoOeOtQKknhHNhHrjJfFBfFHWwCchCnOGgLljJadMmDtCcDdGgeEnNkCcKdAAmDdiIMZzKkWQquOoSsxXOogGXAaQqxoOhHEenNnqlLcIcCAlLHhtTzBbyYDdZfFtTzGgZYyEeSFPxXpaAgGbdWwSsyYYJpHgjJGhVvHhPEexyYMmkSsnRrLlNxXVVytTeEbBYTtiIAaQLlkKqjJOovveGgEfFIpPizZimFZzJoODDdJjWdGgDgGRnkDdByYbKDfuUQqTJwWFPIIiXWbzZByaAYwWxXUuIiSsUsCAOoWwaWwcSyeEYLlTWwlLreBMKkrRLlakKAfNnoOjJUiIpPCcrRQqvZzgGVwWpRnNRULAmMBzZPpbVWwXwWJRBbrEesSHKkhjJqQKmDrRAagjJkweEWKQuUGvVmAaMHpPhJvVHcCekKdbBKcCyFfAaAaYSftXxDkKrKeEcCWwMmkVsRrStEBmMovVMmdDOzxGMmKpgDdGHcChaAIrRFqbBbBdDsSBbQqDrCcRIIiqQiiIxXdvVvavVmlLMgZzsSEegGGTJjMHRrhmYJjyFftTtsfFSCcsnlLiOoIKkvwjJWgGmMOoRrVVvfYyrQqROoZzFRgGvTgxKBbNnkbxXBBbOoUXxubBTtgnNGXYyJjWSbBiIsWEecPpFZSsSzZWHhSeEJjJCcjsDdzZcnnVAakeERUunNQUuqRrwNSeEHhwWQqQRrEuUfFIdDBkKbNUungGoOwoOWQqlLEQiIqXgtTEApfFMiIjPDdpRrsOfFlLoWwKvVlByYbVmfFMMmZcvbBVIiTtLlLbBCcHXxoOhhpPShyLtTOolYOpOQiIWTtxjJJjTtyFfYAaAEeQqSszIiZaRvVUurvVvMmVYyqMYVtgcCGTvyXwAaqqQQdhdeEDCfFcRIiYoODdAarWwMmhnNjJJjeEpPICciMVcCvmhHGgvEevVDxvGDSkKsnMXDWlLwWbDCcdUPpmFdDfDdMbBRrTKTtUQquCczZlLTtiKkIEeKwobBOWadrRpPlHhJZfRrFzBbAOlqQLKkXxYyLSsMmIzZiDFfpPoOEeBOiIhIiOonDfOoOoqQDdWqQdBJjAaIayCVjJvyYOAalLoyYOnNAaFnNvVflLMowWLlNnKkjJKkKknNCiIekIZzwEeWjJiHRrhIeETiwWIOhHozDdvVvWwXxokxXKOQEbBajyYrqQpXNVvmMnxElgGTtLeGgiIHNncUuvDdbBOVqaTteEAwWUuQqQqGPpOogGgLlhmMhHHqQowfFHhWXxcBbYyfopPEEeuUuuUxNsSAaAzZUufFdDaKWwbBWwkqrTtRIZziiIgGCmMhHpPcKkBJjxEeDhbBHfFdAhHMmalLsoOIiSXyYSvVzoOlcCLUuhHWwCHxXWwhLlVOovWKkwHmdDWKmMIeEANOouDpmMaAIhldDlLLDCcNLvVcCcyhoOHYRrMmCIiGlbBXxtElLIYwWwWuUfzBbZTtgGbMCcqQtPpWgGkKwrWAaxXvVIiDhthlLgaAGHzZnNBbwWTHlCczhHFZzfCczZZMKkmqQXFOofxEeGQqgLdAgdAaCIiXKkcCZzxjYyTtJITiISwWscEeCWaAOotTzRrPpZtTlWwLmMpUuLtTtJjTNkKszZAMmaBtHcOhHLloCglLGcChTlWOohHzZIiITtCxLlPpfFtTKLiEeMmeEUlLdDuuUoTtnNOfFRlSswzZcGgCamMfMmFHhbIiCugGvVtTUuPXxpUBbjJwWzIiEeZdVCuUcvkKGgyXxIiXxhHzZEeeKkcCXEeEXxzXxYyjJseESIlLEeVvIiKohHxXBvVboOGgQHhqgGoNnQqXWbBwCcHHDdhRrYlLyYYgGyIJLAaXxlcCaYyisSDeEaAbBdMmoOvAaJcbBDdMxvVjJHDzZABbJFfIijatTdOcChqQjJPqOoQpOozZVgfzZXeExUAaUyYXbPpBxuBbMmWwGfFDgGZzbFfBuUsXxCDkKdYmMlbBEeLJjbhLlUuJjOoqZdDiItTOaeBbLlEhHJvVjXxKxvVVmUuxXMuUTtpZzPSUuWcCfFFuUfoOgTtGUuJjgGkAajJKTEetsAagKcCbBdOhHoKhtBbwWrRTHIiDddIltfoOFgWwtAAKKIUZkKzHjJduUDGgNnyYjJWwYdDyRrxGgpQgGqPmMVvXrRGgQqhKwnNWRUurbGgBaZQqRpPrzAeEkxXEvnNpcMmnNeECPdDRrlCcxVvXxDPMmvVNLKuUxXFfIiklnofFgGWwOPpdDGgyYpPsSYyuUhHTtFfOiIomOohHcyYCMoOhHmYZzyOgGaAOoYyohHMnNUuSfFsPxXpnmMNnGgLlNMmuwWZzKkZzMVzZqQcCjJRJjrWYHaAhVvywXvVaAMmMmHhUuJIiqQwuUWvJTssSHkvVKCchTUNAaDsDdbBSdnXxRresStNnPLljTtfbsSkKEejJLbBOoLCuUcaARrlDdXGNngxHtThkKhbBjZzugGUUTCsSgGckKHrRHhpbBzZzPeEeNLloOZzneEvrQqWwRyYNDdJjnRrTaAuUOiIocDdjJCNnCSgGDPGgpdkmLUulVngGNMgGrFfjAykKHhlLuUoOAaetTElSxeIHhiWwpPHzZwWjJaAhGzZSWgGIGpPgsSiLlEewcjJCUVvuBbAasSqAaQpPkuUUlLuKkXxEelLiNnMSsCcTtJjDdwWDdmBbIwWiyYDdpGrFYdYyNnDBhHdDOobdPsqQSKsSdDHhkgGZztTiDmMjvVJjJTtdIsSFfphHOowkGSsgOsSbBRxzZNnJjUTtuqQIiwvVBbJjVvfFEeNkKnoTtfFqfjJLlFQOtgGTPTEGgaACcHhDYytTtUuZlLHhpmuUMKkWwTlRrXxMaAmeEQqyYXxLWwEMwWwWmBfFDdbGiITQqriIBbMnbBYJjMmSsbByolLmhHMWwHwWhxKkXKOokkOoXxxXKwIiTyjJUWKkwuBbIxyYuUxytkKBbhHTdaABmLlwWMpPMyYTtmVveEbsMmSFfMMmcCzZjMhHmPpKuzZUVvkSQqsiIXxuUMmKuUSshyYrRHPpXxongGMmilksSKLYyovVOIXiIMmNnVvCGxXgVvrPpRpPcxXYFfyXdpPQqIioHoOqQhgNvVsSnGyYZAabBmPpyYzMmZGgwWMdDoOCnaeEGDfFziaAXYyxICcWMlLcEetTUHhUuSsuuUfiIVAavFNvVnrRLIiliIduUnNLDhEeHzZNnXxdTtMGjJWwgDcyYejJshfFMLlmPpWXxRryYxBrRbUuDRrhHdNUujAaJAdDaCxvVXxSsXsSMENnZOSsqYynvVNBbMyYEeDdhEeHmBbblLVvqeEYyOobBuUCcCcCjJcSjJsuaAUMjJyYRrdPMUumYJjyxMihHIHhkpPPpKeXoOxEIigKkGgGmaAsylwWMmIMmNnCIfFiCJjMcCmDYyUKRrkWwRrsShHIhHFWxNnPpuRrMMmmMUAaumXlLHhKSsvVSskxUkdDKqBbQpSstUuTvVokKOPkKrUuRgGJZvVtTbsbBvVUuHhhHxUWwiIhHFfKkumMjAatMmlLKkiDfdDLkKAaevVZzZzpVvGgboOBPEliInKiISTtXqnNQxBNnVvbWwBboOwERcnNzfFZzhFfHPrUUuuRpDDHhddRrXFNncCoEWwEeRzEeEOoCqQcTjJtUuKkFfeOZzRrIDdGZzkKgUpVvPGgvVHhuotTLlHAahAaOoxXlUuLYyBViouUOIvbPpWuUuROorUiIuLdDQqTtLlVvXxBOocCkjJKzZGgJjbBDdUDPpdBbjJHhUqgMTQqiIvVtRtTrsRrzUuhmMHvVHhglxXQgGjxXMmyLlYlLPpyYJqJfFjhgGsSxXrWwFfyYLlVvqdTtxXeEgGihHfFIIitTjJpPwWBbYySsbBrRDjJgGNnfFvxXgGfwWSsFSsjyYJVaAtxXfeEeEkKaNnUfFuvOosGgSjYsSaAnNBfFvrZPpwWnNTtSsgMmGgqQTtRrMmwPpSsWhRrvViEeIHhHHhqaAQGJjzkKppPBbPZpaAZzMmUuWgsVvmMcCgGLlbbdDBdEeGgDbvVhAaHdDGgBBlWprRPEewEsSYyEepPeEeLSrRuUIWwXxizsQpPkKqfFSeEUdDZlHhLNnzuPWwcCnNmMJjrRkWLqQJjYyixXvVIVvPpOcQqjoOiEeIeEJCoZhyYpgxUVvugjJGXbBkKLqQlETBuUbteUroOVvRBbiIdDZWwznNBGgDdsSbuNvVsSIieKiIGgjJdPoOpWwDyfFpPYIikdDTtpPEaUuAIizZUpPuYsSCcYyIFvNOoutTUfFyYHhWxXqQoyYOwaAvVyYKkngGJjmGHAaiICcSRApPJjeEaSsiIeIiEdDrsQHhWwKkYyuUscCFVvfSAwoOyYWaYyeEUnNCBbsLIilSvZNnzUuVuUpqQZzLlPcCsScpEBbNdDnegBbTtGPyOoYyYPvawDdWtJjlkKQlLKkhHqWwSsLlfjPpKkJFjJRrEeHvFfVEQKkqdDJjXLhHlTtJjxLlWtRrTIlLiZhJjiIHzwxXjJKcMyYmCCcHhksSLlenNWRrwScZzCDdsrqQRgGzPsSpBALlFfacCEzZOomMiIejGgtTJoOlLBbsSbzZpPBZzTtJWwjLSslbBMsqQSsqGgQGgSqlayYeEAQFNnfqhHJjPpAadDvEeVcCbBpPKgGoOkRQqrerREGwWfZzFeEgwmMZpPIiUWwuAazpbBvVqQPtTWStEeTvVaAskXRrxHhKbNnqQBIpPiebIgGasSACciEwOoSsWiIZzeBMcCmpCcPEFEefrRCZzcVqAaQJjvJjKZznaAaANAakoOPpbJjBDUvVudDdYsSyIiBbZWSAaAaHhValLAwWAavLlHxXheEeEVixXjJIEyYxXiIxkKwvVRrOorRWwWQlLqLlUusSJjbBhlLZgGzGgncPpCNjlXKkxLoORrJHnPVEekKvpNWqKvVTJjtEuiIUwWwWCcyYPWwpcCjiITtYcCyECceJjpnNPJBkhHfBbzkKMDHhdmJHhjtTFfyJjHhdUujyYXxJKkQqDMwWuUmmukKUZzjJuUHOoOoDdqQqQaAUuyYrHhRkKbBWwhazloiIhHRrOLPpDNnZZzLzgGZYNnqQylfFaAeEiICczdmoOLeElmMnWLlwvvrRVaAVPsSqQpuUzYyRrZBboOKkgGTNGgntMmssSbtLfmMFciICdDloOTfYyPpSNFfnWwiuUIBwNnAaWkZUuIiQqzKXxvoOtTmMbGgcTYydDRHtThrQqlLwAaalLALAalvVXYNnNPpuUKkNLlpPkKnhtTHtTXxlEnNeAHhaUuVAavLHhBbzTtFfZGBbaAJjvEeVxXZzgKHhkgpPxXPfFeEpGcCCDdDdreJjErRHhxBbzZXxXCaAyYclLDvPpVtTdCkDdJjKmmMlIiLMmMKkYXmMQVvXxUuREeJVvqQLlBVvZzbjOGgSSsoOsGgHheEdDoRtTrXxWoOwOjJoYyMmVvAaFBbfEeTtqKzZkIEepPNuUnEeGbBlLcFrEeREwWqhHQmOoMXxeAQPjJpJjCcoBbYypNYynWwIiaVvAcjJeEApPRrNnICcxXiaANnakKEehHRrgGCPoOsEeStTdfFDpPAaNnNIiTtZznPoOpiISsXxjIMpPmtcCTieIHhSlLgBbGglLLlheEtspPxXSTTrRlUDdupyYYyhHUNnFfpiIxXTMmtfXxxXFPeEmxXVKkfFvCcrWLVvlwRqRrQFfPVvFfFlLZzdDfpHhbBWwyxQqXZmMVgbBGvlUuLxXYyzAabBCkQqZqQiImRnNrRhcCHrMpPQIiHDdhqdqQMmigGrRIiTtlLZwWYyEPpekHOohVvKDdRfSspiIPZLlzFrNnmwWtTMnNrReXxifFIsSwuUWEOYyKrRkfrfcCFtTCcwNSsnWJOojOUXsSxBbjXxjJJuFfYMmCcyGtWwTbBLnNyYlOohHSsLlgSDdoOHhhHsMQqYytTHtTjJOoLlhKkowWUbBTtsWwSuNnLlxXrROcyYZfFzvVCZzHhqHhNeiIckKVvuUuJjiIJjUXxzZCEGHiIyYhgDsSHLlfFUuhrNnRaApAsSaPXxdkdDGgKzZntWwTkKbpvVuUGgPQcCqUHhuWwNnuUEelLYVvhHyBvGgVrRBbreEWwRsiIHYJjAIiatDdaATWwyOohEdmMDYyTtYyDdJKkKGgkXLFflwEeWUuGgfVqQvBbFYyeEtrRCTHhvVTtpPtdMmDiINnrHhQqfFrcCRdQqkCmMtTYyeEcGWwtTlgSrDdVvRsGgaARrOAaTtEjJQHhqeoWffFFuUwRJtTcuUCjruUmCcLjfFVhHXxrsSRnNuUVvaTtBnRrNiIbBbAxBbpPGuUgBbXbByYqQkKqQaDdALlIiprTtROoPwDdGbBpPIigWxCcCtTcImSsYyMJjuJjUmMpPtMmhHpPTGgjJpPaAcHhCiTfFEcCetVwWvKTtkKkiItKkIiyYQqOoTVxXgGJXsSxWwrREeJzZjpRoOrPnNjvoOqQruURNnhHmJjMKkXFOMmofFfNnbBZzJjpwWBbxXPYytTzZuUYEeyraARNnpKVSsvkFfVvAQnNqBbitTfFgmMGIoOPphHaTtTtMidDIWwRDdrRrcCvVqQqyYmeEMWeErRwcCXxBbryYKkRxXRHhmeEMmsSMSsruUFAFfmtTMabIilLFWRrwfkIiYyeEPpKfFGgFffFTtBaAQLEelPyVvYpXlLPpYyxqxXVgGwIiWkLlKfkKzZFZzwWVwWLlvvgUDduaAdWwDWDdwDdDqQdsSlLvVvVqQCcuUkKsSzZGjJoOfMOojJmlLjqQJjJQtTVvapPCcAJXxjXxerRhHESsmxJjnNWhHyYwXOoSsYyxXeSsxXZzZzLlhXxHEGjJgjiIJGhaAsbBvVeuUFzZfZzESgaZzAzzZvVZbAaBGtTHrGgRrRBhHnaANbcsxXSApPonNObmMBanNtTkKYWwaArKuUmMoOyYKkkbBWwfFRrRTtGgTpPeEtsWNNnnRroOjrRJwNcDduUCnORBbrGguUoZzsSsSUNnuAaPpIYysSiNnhHdDFfkKSsQCXxaAEUuecxrHkKMmhHaAhQqtxXaAOHGghZTtzoTFfOoiIcChHnNUmMuYyRJjdMmDPsSXxTtppPqQJjlLZCcHhqQgGzXPTtpMbBmqqQQAuUTdrRDnNxXWwtvVYyiIIigGOoVvYyHhagGZzKkqVvrlLdDROGgovVKpPkBbwWOotTOrRgGWwHhfFKkgTtGWwNnwiUiIuIQDdKkSsSsYQOoVvHhaABbsSDGguUsSCzZcIxXidziYyrrRRIqrRGgQWwMjJmFfZJjnNhqQmiIYyAaMhnNHiInNMyqQkKIGgiYQXxqoOTpPtmyAaYpPqcbBCQqXxpPQExXexXiIHLzZSswWlLlJUugGjoOrRJjqYyrxXRkoObFfDdBWwKkkKnBgGUubsSNqQpkcCKgGPdDgfFGxuUmCcfFmMSBLlDdPRrkzZKIigGfNiInFYyGtTbBgnsSzZhHoONgOoGbBTFfrRzZFfgQqGyYmsSMtnNCwpPWwWrQqRcoOBbhnNHjJpTtTtdbBfFSsDEebfFLlBbmGTtgMHhaAhHS
\ No newline at end of file
diff --git a/AoC2018.Runner/Input/day06.txt b/AoC2018.Runner/Input/day06.txt
new file mode 100644
index 0000000..55d6ab2
--- /dev/null
+++ b/AoC2018.Runner/Input/day06.txt
@@ -0,0 +1,50 @@
+194, 200
+299, 244
+269, 329
+292, 55
+211, 63
+123, 311
+212, 90
+292, 169
+359, 177
+354, 95
+101, 47
+95, 79
+95, 287
+294, 126
+81, 267
+330, 78
+202, 165
+225, 178
+266, 272
+351, 326
+180, 62
+102, 178
+151, 101
+343, 145
+205, 312
+74, 193
+221, 56
+89, 89
+242, 172
+59, 138
+83, 179
+223, 88
+297, 234
+147, 351
+226, 320
+358, 338
+321, 172
+54, 122
+263, 165
+126, 341
+64, 132
+264, 306
+72, 202
+98, 49
+238, 67
+310, 303
+277, 281
+222, 318
+357, 169
+123, 225
\ No newline at end of file
diff --git a/AoC2018.Runner/Program.cs b/AoC2018.Runner/Program.cs
new file mode 100644
index 0000000..ed77b3e
--- /dev/null
+++ b/AoC2018.Runner/Program.cs
@@ -0,0 +1,36 @@
+namespace AoC2018.Runner
+{
+ using System;
+ using System.Diagnostics;
+ using System.IO;
+ using System.Reflection;
+ using AoC2018.Solutions;
+
+ public static class Program
+ {
+ private static void Main(string[] args)
+ {
+ int day = int.Parse(args[0]);
+ int part = int.Parse(args[1]);
+
+ ISolution instance = SolutionFactory.GetSolution(day, part);
+
+ // Load the data
+ var locationUri = new UriBuilder(Assembly.GetExecutingAssembly().CodeBase);
+ string location = Uri.UnescapeDataString(locationUri.Path);
+ string locationDirectory = Path.GetDirectoryName(location);
+ string inputFileName = Path.Combine(locationDirectory, "Input", $"day{day:D2}.txt");
+ string data = File.ReadAllText(inputFileName);
+
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ string result = instance.Solve(data);
+
+ stopwatch.Stop();
+
+ Console.WriteLine(result);
+ Console.WriteLine($"Result obtained in {stopwatch.ElapsedMilliseconds}ms");
+ }
+ }
+}
diff --git a/AoC2018.Runner/Properties/launchSettings.json b/AoC2018.Runner/Properties/launchSettings.json
new file mode 100644
index 0000000..f991d3b
--- /dev/null
+++ b/AoC2018.Runner/Properties/launchSettings.json
@@ -0,0 +1,8 @@
+{
+ "profiles": {
+ "AoC2018.Runner": {
+ "commandName": "Project",
+ "commandLineArgs": "5 2"
+ }
+ }
+}
\ No newline at end of file
diff --git a/AoC2018.Solutions.ruleset b/AoC2018.Solutions.ruleset
new file mode 100644
index 0000000..21992e0
--- /dev/null
+++ b/AoC2018.Solutions.ruleset
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AoC2018.Solutions/AoC2018.Solutions.csproj b/AoC2018.Solutions/AoC2018.Solutions.csproj
new file mode 100644
index 0000000..97a6af7
--- /dev/null
+++ b/AoC2018.Solutions/AoC2018.Solutions.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netstandard2.0
+ ..\AoC2018.Solutions.ruleset
+
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers
+
+
+
+
diff --git a/AoC2018.Solutions/Day01/Part01.cs b/AoC2018.Solutions/Day01/Part01.cs
new file mode 100644
index 0000000..63ae21a
--- /dev/null
+++ b/AoC2018.Solutions/Day01/Part01.cs
@@ -0,0 +1,13 @@
+namespace AoC2018.Solutions.Day01
+{
+ using System;
+ using System.Linq;
+
+ public class Part01 : ISolution
+ {
+ public string Solve(string input)
+ {
+ return input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(x => int.Parse(x)).Sum().ToString();
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day01/Part02.cs b/AoC2018.Solutions/Day01/Part02.cs
new file mode 100644
index 0000000..9e04ddd
--- /dev/null
+++ b/AoC2018.Solutions/Day01/Part02.cs
@@ -0,0 +1,32 @@
+namespace AoC2018.Solutions.Day01
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+
+ public class Part02 : ISolution
+ {
+ public string Solve(string input)
+ {
+ int[] items = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(x => int.Parse(x)).ToArray();
+ var seenFrequencies = new Dictionary();
+
+ int i = 0;
+ int currentFrequency = 0;
+
+ while (true)
+ {
+ seenFrequencies[currentFrequency] = true;
+
+ currentFrequency += items[i];
+
+ if (seenFrequencies.ContainsKey(currentFrequency))
+ {
+ return currentFrequency.ToString();
+ }
+
+ i = (i + 1) % items.Length;
+ }
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day02/Part01.cs b/AoC2018.Solutions/Day02/Part01.cs
new file mode 100644
index 0000000..66a0b87
--- /dev/null
+++ b/AoC2018.Solutions/Day02/Part01.cs
@@ -0,0 +1,19 @@
+namespace AoC2018.Solutions.Day02
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+
+ public class Part01 : ISolution
+ {
+ public string Solve(string input)
+ {
+ IEnumerable>> boxIds = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.ToCharArray().GroupBy(c => c).ToList());
+
+ int exactlyTwo = boxIds.Count(x => x.Any(c => c.Count() == 2));
+ int exactlyThree = boxIds.Count(x => x.Any(c => c.Count() == 3));
+
+ return (exactlyThree * exactlyTwo).ToString();
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day02/Part02.cs b/AoC2018.Solutions/Day02/Part02.cs
new file mode 100644
index 0000000..38e7ff5
--- /dev/null
+++ b/AoC2018.Solutions/Day02/Part02.cs
@@ -0,0 +1,33 @@
+namespace AoC2018.Solutions.Day02
+{
+ using System;
+ using System.Linq;
+
+ public class Part02 : ISolution
+ {
+ public string Solve(string input)
+ {
+ var boxIds = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
+
+ foreach (string outer in boxIds)
+ {
+ foreach (string inner in boxIds)
+ {
+ if (outer == inner)
+ {
+ continue;
+ }
+
+ var differences = Enumerable.Range(0, outer.Length).Where(x => outer[x] != inner[x]).ToList();
+
+ if (differences.Count == 1)
+ {
+ return outer.Substring(0, differences[0]) + outer.Substring(differences[0] + 1);
+ }
+ }
+ }
+
+ return "Failed to find a solution";
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day03/Claim.cs b/AoC2018.Solutions/Day03/Claim.cs
new file mode 100644
index 0000000..b0e2d7e
--- /dev/null
+++ b/AoC2018.Solutions/Day03/Claim.cs
@@ -0,0 +1,33 @@
+namespace AoC2018.Solutions.Day03
+{
+ using System.Drawing;
+ using System.Text.RegularExpressions;
+
+ public class Claim
+ {
+ private static readonly Regex ParserRegex = new Regex(@"#(\d*) @ (\d*),(\d*): (\d*)x(\d*)", RegexOptions.Compiled);
+
+ public int Number { get; set; }
+
+ public Point Position { get; set; }
+
+ public Size Size { get; set; }
+
+ public static Claim FromString(string input)
+ {
+ Match matches = ParserRegex.Match(input);
+
+ int x = int.Parse(matches.Groups[2].Value);
+ int y = int.Parse(matches.Groups[3].Value);
+ int width = int.Parse(matches.Groups[4].Value);
+ int height = int.Parse(matches.Groups[5].Value);
+
+ return new Claim
+ {
+ Number = int.Parse(matches.Groups[1].Value),
+ Position = new Point(x, y),
+ Size = new Size(width, height),
+ };
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day03/ClaimExtensions.cs b/AoC2018.Solutions/Day03/ClaimExtensions.cs
new file mode 100644
index 0000000..3a5191b
--- /dev/null
+++ b/AoC2018.Solutions/Day03/ClaimExtensions.cs
@@ -0,0 +1,23 @@
+namespace AoC2018.Solutions.Day03
+{
+ using System.Drawing;
+
+ public static class ClaimExtensions
+ {
+ public static Point BottomRight(this Claim claim)
+ {
+ return new Point(claim.Position.X + claim.Size.Width - 1, claim.Position.Y + claim.Size.Height - 1);
+ }
+
+ public static bool OverlapsWith(this Claim claim, Claim otherClaim)
+ {
+ Point claimBottomRight = claim.BottomRight();
+ Point otherClaimBottomRight = otherClaim.BottomRight();
+
+ bool overlapsX = (claim.Position.X >= otherClaim.Position.X && claim.Position.X <= otherClaimBottomRight.X) || (claimBottomRight.X >= otherClaim.Position.X && claimBottomRight.X <= otherClaimBottomRight.X) || (claim.Position.X < otherClaim.Position.X && claimBottomRight.X > otherClaimBottomRight.X);
+ bool overlapsY = (claim.Position.Y >= otherClaim.Position.Y && claim.Position.Y <= otherClaimBottomRight.Y) || (claimBottomRight.Y >= otherClaim.Position.Y && claimBottomRight.Y <= otherClaimBottomRight.Y) || (claim.Position.Y < otherClaim.Position.Y && claimBottomRight.Y > otherClaimBottomRight.Y);
+
+ return overlapsX && overlapsY;
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day03/Part01.cs b/AoC2018.Solutions/Day03/Part01.cs
new file mode 100644
index 0000000..47c2de3
--- /dev/null
+++ b/AoC2018.Solutions/Day03/Part01.cs
@@ -0,0 +1,31 @@
+namespace AoC2018.Solutions.Day03
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+
+ public class Part01 : ISolution
+ {
+ public string Solve(string input)
+ {
+ var claims = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(Claim.FromString).ToList();
+
+ var locations = new Dictionary();
+ const int yOffset = 1000;
+
+ foreach (Claim claim in claims)
+ {
+ for (int x = 0; x < claim.Size.Width; x++)
+ {
+ for (int y = 0; y < claim.Size.Height; y++)
+ {
+ int target = (claim.Position.X + x) + (yOffset * (claim.Position.Y + y));
+ locations[target] = locations.ContainsKey(target) ? locations[target] + 1 : 1;
+ }
+ }
+ }
+
+ return locations.Values.Count(x => x > 1).ToString();
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day03/Part02.cs b/AoC2018.Solutions/Day03/Part02.cs
new file mode 100644
index 0000000..215f479
--- /dev/null
+++ b/AoC2018.Solutions/Day03/Part02.cs
@@ -0,0 +1,34 @@
+namespace AoC2018.Solutions.Day03
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+
+ public class Part02 : ISolution
+ {
+ public string Solve(string input)
+ {
+ var claims = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(Claim.FromString).ToList();
+ var overlaps = claims.ToDictionary(x => x, _ => new List());
+
+ foreach (Claim outer in claims)
+ {
+ foreach (Claim inner in claims)
+ {
+ if (outer == inner || overlaps[outer].Contains(inner))
+ {
+ continue;
+ }
+
+ if (outer.OverlapsWith(inner))
+ {
+ overlaps[outer].Add(inner);
+ overlaps[inner].Add(outer);
+ }
+ }
+ }
+
+ return overlaps.Keys.Single(x => overlaps[x].Count == 0).Number.ToString();
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day04/Part01.cs b/AoC2018.Solutions/Day04/Part01.cs
new file mode 100644
index 0000000..38dd1e9
--- /dev/null
+++ b/AoC2018.Solutions/Day04/Part01.cs
@@ -0,0 +1,77 @@
+namespace AoC2018.Solutions.Day04
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+
+ public class Part01 : ISolution
+ {
+ public string Solve(string input)
+ {
+ var timeRecords = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(TimeRecord.FromString).ToList();
+ timeRecords = this.SortAndPopulateGuardNumbers(timeRecords);
+
+ int[] guardIds = timeRecords.Where(x => x.GuardNumber.HasValue).Select(x => x.GuardNumber.Value).Distinct().ToArray();
+ var guardMinutesAsleep = guardIds.ToDictionary(x => x, _ => new int[60]);
+ DateTime[] uniqueDates = timeRecords.Select(x => x.DateTime.Date).Distinct().ToArray();
+ DateTime currentDate = DateTime.MinValue;
+ int? currentGuard = null;
+ int minuteLastFellAsleep = -1;
+
+ foreach (TimeRecord current in timeRecords)
+ {
+ // Have we changed day or guard?
+ if (currentDate != current.DateTime.Date || currentGuard != current.GuardNumber)
+ {
+ currentDate = current.DateTime.Date;
+ currentGuard = current.GuardNumber;
+ }
+
+ // Has the sleeping status changed?
+ if (current.Activity == TimeRecordActivity.FallsAsleep)
+ {
+ minuteLastFellAsleep = current.DateTime.Minute;
+ }
+ else if (current.Activity == TimeRecordActivity.WakesUp)
+ {
+ // Record the minutes they were sleeping and reset.
+ for (int minute = minuteLastFellAsleep; minute < current.DateTime.Minute; minute++)
+ {
+ guardMinutesAsleep[currentGuard.Value][minute]++;
+ }
+ }
+ }
+
+ // Now we know which minutes each guard was asleep... find out which guard
+ // slept the most
+ var totalGuardSleepTime = guardMinutesAsleep.ToDictionary(x => x.Key, x => x.Value.Sum());
+ IOrderedEnumerable guardsBySleepTime = guardIds.OrderByDescending(x => totalGuardSleepTime[x]);
+ int sleepiestGuard = guardsBySleepTime.First();
+
+ int guardMaximumMinuteSleeps = guardMinutesAsleep[sleepiestGuard].Max();
+ int guardSleepiestMinute = Array.IndexOf(guardMinutesAsleep[sleepiestGuard], guardMaximumMinuteSleeps);
+
+ return (sleepiestGuard * guardSleepiestMinute).ToString();
+ }
+
+ private List SortAndPopulateGuardNumbers(List timeRecords)
+ {
+ var result = timeRecords.OrderBy(x => x.DateTime).ToList();
+ int? currentGuardNumber = null;
+
+ foreach (TimeRecord current in result)
+ {
+ if (current.GuardNumber.HasValue)
+ {
+ currentGuardNumber = current.GuardNumber;
+ }
+ else
+ {
+ current.GuardNumber = currentGuardNumber;
+ }
+ }
+
+ return result;
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day04/Part02.cs b/AoC2018.Solutions/Day04/Part02.cs
new file mode 100644
index 0000000..c4c971d
--- /dev/null
+++ b/AoC2018.Solutions/Day04/Part02.cs
@@ -0,0 +1,79 @@
+namespace AoC2018.Solutions.Day04
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+
+ public class Part02 : ISolution
+ {
+ public string Solve(string input)
+ {
+ var timeRecords = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(TimeRecord.FromString).ToList();
+ timeRecords = this.SortAndPopulateGuardNumbers(timeRecords);
+
+ int[] guardIds = timeRecords.Where(x => x.GuardNumber.HasValue).Select(x => x.GuardNumber.Value).Distinct().ToArray();
+ var guardMinutesAsleep = guardIds.ToDictionary(x => x, _ => new int[60]);
+ DateTime[] uniqueDates = timeRecords.Select(x => x.DateTime.Date).Distinct().ToArray();
+ DateTime currentDate = DateTime.MinValue;
+ int? currentGuard = null;
+ int minuteLastFellAsleep = -1;
+
+ foreach (TimeRecord current in timeRecords)
+ {
+ // Have we changed day or guard?
+ if (currentDate != current.DateTime.Date || currentGuard != current.GuardNumber)
+ {
+ currentDate = current.DateTime.Date;
+ currentGuard = current.GuardNumber;
+ }
+
+ // Has the sleeping status changed?
+ if (current.Activity == TimeRecordActivity.FallsAsleep)
+ {
+ minuteLastFellAsleep = current.DateTime.Minute;
+ }
+ else if (current.Activity == TimeRecordActivity.WakesUp)
+ {
+ // Record the minutes they were sleeping and reset.
+ for (int minute = minuteLastFellAsleep; minute < current.DateTime.Minute; minute++)
+ {
+ guardMinutesAsleep[currentGuard.Value][minute]++;
+ }
+ }
+ }
+
+ // Now, for each guard, find the minute they slept most during
+ IEnumerable<(int GuardId, int MinuteWithMostSleeps, int MaximumTimesAsleep)> guardSleepiestMinutes = guardMinutesAsleep.Select(x =>
+ {
+ int maximumTimesAsleep = x.Value.Max();
+ int minuteWithMostSleeps = Array.IndexOf(x.Value, maximumTimesAsleep);
+ return (x.Key, minuteWithMostSleeps, maximumTimesAsleep);
+ });
+
+ // And find the guard most often asleep on the same minute
+ (int GuardId, int MinuteWithMostSleeps, int MaximumTimesAsleep) guardMostOftenAsleepOnSameMinute = guardSleepiestMinutes.OrderByDescending(x => x.MaximumTimesAsleep).First();
+
+ return (guardMostOftenAsleepOnSameMinute.GuardId * guardMostOftenAsleepOnSameMinute.MinuteWithMostSleeps).ToString();
+ }
+
+ private List SortAndPopulateGuardNumbers(List timeRecords)
+ {
+ var result = timeRecords.OrderBy(x => x.DateTime).ToList();
+ int? currentGuardNumber = null;
+
+ foreach (TimeRecord current in result)
+ {
+ if (current.GuardNumber.HasValue)
+ {
+ currentGuardNumber = current.GuardNumber;
+ }
+ else
+ {
+ current.GuardNumber = currentGuardNumber;
+ }
+ }
+
+ return result;
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day04/TimeRecord.cs b/AoC2018.Solutions/Day04/TimeRecord.cs
new file mode 100644
index 0000000..86b8e61
--- /dev/null
+++ b/AoC2018.Solutions/Day04/TimeRecord.cs
@@ -0,0 +1,39 @@
+namespace AoC2018.Solutions.Day04
+{
+ using System;
+ using System.Globalization;
+
+ public class TimeRecord
+ {
+ public DateTime DateTime { get; set; }
+
+ public int? GuardNumber { get; set; }
+
+ public TimeRecordActivity Activity { get; set; }
+
+ public static TimeRecord FromString(string input)
+ {
+ var result = new TimeRecord
+ {
+ DateTime = DateTime.ParseExact(input.Substring(1, 16), "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture),
+ };
+
+ string log = input.Substring(19);
+ if (log == "wakes up")
+ {
+ result.Activity = TimeRecordActivity.WakesUp;
+ }
+ else if (log == "falls asleep")
+ {
+ result.Activity = TimeRecordActivity.FallsAsleep;
+ }
+ else
+ {
+ result.Activity = TimeRecordActivity.StartsShift;
+ result.GuardNumber = int.Parse(log.Split(' ')[1].Substring(1));
+ }
+
+ return result;
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day04/TimeRecordActivity.cs b/AoC2018.Solutions/Day04/TimeRecordActivity.cs
new file mode 100644
index 0000000..409734c
--- /dev/null
+++ b/AoC2018.Solutions/Day04/TimeRecordActivity.cs
@@ -0,0 +1,13 @@
+namespace AoC2018.Solutions.Day04
+{
+ using System;
+
+ public enum TimeRecordActivity
+ {
+ StartsShift,
+
+ FallsAsleep,
+
+ WakesUp,
+ }
+}
diff --git a/AoC2018.Solutions/Day05/Part01.cs b/AoC2018.Solutions/Day05/Part01.cs
new file mode 100644
index 0000000..9f5c43a
--- /dev/null
+++ b/AoC2018.Solutions/Day05/Part01.cs
@@ -0,0 +1,13 @@
+namespace AoC2018.Solutions.Day05
+{
+ using System.Linq;
+
+ public class Part01 : ISolution
+ {
+ public string Solve(string input)
+ {
+ string result = PolymerReactor.React(input);
+ return result.Length.ToString();
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day05/Part02.cs b/AoC2018.Solutions/Day05/Part02.cs
new file mode 100644
index 0000000..8573db8
--- /dev/null
+++ b/AoC2018.Solutions/Day05/Part02.cs
@@ -0,0 +1,21 @@
+namespace AoC2018.Solutions.Day05
+{
+ using System.Linq;
+ using System.Text.RegularExpressions;
+
+ public class Part02 : ISolution
+ {
+ public string Solve(string input)
+ {
+ int bestResult = input.Length;
+
+ // TODO: What can we learn about the Visual Studio Concurrency Visualiser
+ // from this code?
+ return ParallelEnumerable.Range('a', 26)
+ .Min(c => PolymerReactor.React(
+ Regex.Replace(input, ((char)c).ToString(), string.Empty, RegexOptions.IgnoreCase))
+ .Length)
+ .ToString();
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day05/PolymerReactor.cs b/AoC2018.Solutions/Day05/PolymerReactor.cs
new file mode 100644
index 0000000..9aca712
--- /dev/null
+++ b/AoC2018.Solutions/Day05/PolymerReactor.cs
@@ -0,0 +1,40 @@
+namespace AoC2018.Solutions.Day05
+{
+ using System.Collections.Generic;
+ using System.Linq;
+
+ public static class PolymerReactor
+ {
+ public static string React(string polymer)
+ {
+ bool changed = false;
+ var current = polymer.ToCharArray().ToList();
+
+ do
+ {
+ changed = false;
+
+ int i = 1;
+
+ while (i < current.Count)
+ {
+ char first = current[i - 1];
+ char second = current[i];
+
+ if (first != second && char.ToUpper(first) == char.ToUpper(second))
+ {
+ current.RemoveRange(i - 1, 2);
+ changed = true;
+ }
+ else
+ {
+ i++;
+ }
+ }
+ }
+ while (changed);
+
+ return new string(current.ToArray());
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day06/Part01.cs b/AoC2018.Solutions/Day06/Part01.cs
new file mode 100644
index 0000000..29446fe
--- /dev/null
+++ b/AoC2018.Solutions/Day06/Part01.cs
@@ -0,0 +1,53 @@
+namespace AoC2018.Solutions.Day06
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Drawing;
+ using System.Linq;
+
+ public class Part01 : ISolution
+ {
+ public string Solve(string input)
+ {
+ var points = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(PointBuilder.FromString).ToList();
+
+ // Find the extent of the board that contains points
+ var topLeft = new Point
+ {
+ X = points.Min(x => x.X),
+ Y = points.Min(x => x.Y),
+ };
+
+ var bottomRight = new Point
+ {
+ X = points.Max(x => x.X),
+ Y = points.Max(x => x.Y),
+ };
+
+ var ownership = points.ToDictionary(x => x, _ => new List());
+
+ // Theory: if we find the grid that contains all the points,
+ // then calculate the ownership of every cell in the grid,
+ // then assume any areas that touch the edge will be infinite, so we
+ // should discount them, then we should get the answer.
+ foreach (Point gridLocation in topLeft.BuildRangeTo(bottomRight))
+ {
+ Point[] closestPoints = gridLocation.FindClosest(points);
+
+ if (closestPoints.Length == 1)
+ {
+ ownership[closestPoints[0]].Add(gridLocation);
+ }
+ }
+
+ // Now get all the points whose areas don't touch the edge of the grid.
+ var pointsWithBoundedAreas = ownership.Where(x => x.Value.All(p => p.X != topLeft.X && p.X != bottomRight.X && p.Y != topLeft.Y && p.Y != bottomRight.Y)).Select(x => x.Key).ToList();
+
+ // Now work out the size of the area for each point
+ IEnumerable areaSizes = pointsWithBoundedAreas.Select(x => ownership[x].Count);
+ int largestAreaSize = areaSizes.Max();
+
+ return largestAreaSize.ToString();
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day06/Part02.cs b/AoC2018.Solutions/Day06/Part02.cs
new file mode 100644
index 0000000..bac6df0
--- /dev/null
+++ b/AoC2018.Solutions/Day06/Part02.cs
@@ -0,0 +1,46 @@
+namespace AoC2018.Solutions.Day06
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Drawing;
+ using System.Linq;
+
+ public class Part02 : ISolution
+ {
+ public string Solve(string input) => this.Solve(input, 10000);
+
+ public string Solve(string input, int targetDistance)
+ {
+ var points = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(PointBuilder.FromString).ToList();
+
+ // Find the extent of the board that contains points
+ var topLeft = new Point
+ {
+ X = points.Min(x => x.X),
+ Y = points.Min(x => x.Y),
+ };
+
+ var bottomRight = new Point
+ {
+ X = points.Max(x => x.X),
+ Y = points.Max(x => x.Y),
+ };
+
+ var pointsInRange = 0;
+
+ // Theory: if we find the grid that contains all the points,
+ // then calculate the ownership of every cell in the grid,
+ // then assume any areas that touch the edge will be infinite, so we
+ // should discount them, then we should get the answer.
+ foreach (Point gridLocation in topLeft.BuildRangeTo(bottomRight))
+ {
+ if (points.Sum(x => x.ManhattanDistanceFrom(gridLocation)) < targetDistance)
+ {
+ pointsInRange++;
+ }
+ }
+
+ return pointsInRange.ToString();
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day06/PointBuilder.cs b/AoC2018.Solutions/Day06/PointBuilder.cs
new file mode 100644
index 0000000..efbbeb9
--- /dev/null
+++ b/AoC2018.Solutions/Day06/PointBuilder.cs
@@ -0,0 +1,18 @@
+namespace AoC2018.Solutions.Day06
+{
+ using System;
+ using System.Drawing;
+
+ public static class PointBuilder
+ {
+ public static Point FromString(string input)
+ {
+ string[] components = input.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
+ return new Point
+ {
+ X = int.Parse(components[0]),
+ Y = int.Parse(components[1]),
+ };
+ }
+ }
+}
diff --git a/AoC2018.Solutions/Day06/PointExtensions.cs b/AoC2018.Solutions/Day06/PointExtensions.cs
new file mode 100644
index 0000000..1a73699
--- /dev/null
+++ b/AoC2018.Solutions/Day06/PointExtensions.cs
@@ -0,0 +1,33 @@
+namespace AoC2018.Solutions.Day06
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Drawing;
+ using System.Linq;
+
+ public static class PointExtensions
+ {
+ public static int ManhattanDistanceFrom(this Point point, Point other)
+ {
+ return Math.Abs(point.X - other.X) + Math.Abs(point.Y - other.Y);
+ }
+
+ public static Point[] FindClosest(this Point origin, IEnumerable points)
+ {
+ (Point point, int distance)[] distances = points.Select(x => (x, x.ManhattanDistanceFrom(origin))).ToArray();
+ int closestDistance = distances.Min(x => x.distance);
+ return distances.Where(x => x.distance == closestDistance).Select(x => x.point).ToArray();
+ }
+
+ public static IEnumerable BuildRangeTo(this Point start, Point finish)
+ {
+ for (int x = start.X; x <= finish.X; x++)
+ {
+ for (int y = start.Y; y <= finish.Y; y++)
+ {
+ yield return new Point { X = x, Y = y };
+ }
+ }
+ }
+ }
+}
diff --git a/AoC2018.Solutions/ISolution.cs b/AoC2018.Solutions/ISolution.cs
new file mode 100644
index 0000000..700acc5
--- /dev/null
+++ b/AoC2018.Solutions/ISolution.cs
@@ -0,0 +1,7 @@
+namespace AoC2018.Solutions
+{
+ public interface ISolution
+ {
+ string Solve(string input);
+ }
+}
diff --git a/AoC2018.Solutions/SolutionFactory.cs b/AoC2018.Solutions/SolutionFactory.cs
new file mode 100644
index 0000000..f054bec
--- /dev/null
+++ b/AoC2018.Solutions/SolutionFactory.cs
@@ -0,0 +1,16 @@
+namespace AoC2018.Solutions
+{
+ using System;
+
+ public static class SolutionFactory
+ {
+ public static ISolution GetSolution(int day, int part)
+ {
+ string className = $"AoC2018.Solutions.Day{day:D2}.Part{part:D2}";
+ Type targetType = typeof(ISolution).Assembly.GetType(className);
+ var instance = (ISolution)Activator.CreateInstance(targetType);
+
+ return instance;
+ }
+ }
+}
diff --git a/AoC2018.Tests/AoC2018.Tests.csproj b/AoC2018.Tests/AoC2018.Tests.csproj
new file mode 100644
index 0000000..d2c3a7e
--- /dev/null
+++ b/AoC2018.Tests/AoC2018.Tests.csproj
@@ -0,0 +1,27 @@
+
+
+
+ netcoreapp2.1
+ ..\AoC2018.Solutions.ruleset
+ false
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AoC2018.Tests/AoCTestCases.cs b/AoC2018.Tests/AoCTestCases.cs
new file mode 100644
index 0000000..27c562b
--- /dev/null
+++ b/AoC2018.Tests/AoCTestCases.cs
@@ -0,0 +1,48 @@
+//
+// Copyright (c) Endjin. All rights reserved.
+//
+
+namespace Tests
+{
+ using AoC2018.Solutions;
+ using NUnit.Framework;
+
+ public class AoCTestCases
+ {
+ [TestCase(1, 1, "+1\r\n-2\r\n+3\r\n+1", "3")]
+ [TestCase(1, 1, "+1\r\n+1\r\n+1", "3")]
+ [TestCase(1, 1, "+1\r\n+1\r\n-2", "0")]
+ [TestCase(1, 1, "-1\r\n-2\r\n-3", "-6")]
+ [TestCase(1, 2, "+1\r\n-1", "0")]
+ [TestCase(1, 2, "+3\r\n+3\r\n+4\r\n-2\r\n-4", "10")]
+ [TestCase(1, 2, "-6\r\n+3\r\n+8\r\n+5\r\n-6", "5")]
+ [TestCase(1, 2, "+7\r\n+7\r\n-2\r\n-7\r\n-4", "14")]
+ [TestCase(2, 1, "abcdef\r\nbababc\r\nabbcde\r\nabcccd\r\naabcdd\r\nabcdee\r\nababab", "12")]
+ [TestCase(2, 2, "abcde\r\nfghij\r\nklmno\r\npqrst\r\nfguij\r\naxcye\r\nwvxyz", "fgij")]
+ [TestCase(3, 1, "#1 @ 1,3: 4x4\r\n#2 @ 3,1: 4x4\r\n#3 @ 5,5: 2x2", "4")]
+ [TestCase(3, 2, "#1 @ 1,3: 4x4\r\n#2 @ 3,1: 4x4\r\n#3 @ 5,5: 2x2", "3")]
+ [TestCase(4, 1, "[1518-11-01 00:00] Guard #10 begins shift\r\n[1518-11-01 00:05] falls asleep\r\n[1518-11-01 00:25] wakes up\r\n[1518-11-01 00:30] falls asleep\r\n[1518-11-01 00:55] wakes up\r\n[1518-11-01 23:58] Guard #99 begins shift\r\n[1518-11-02 00:40] falls asleep\r\n[1518-11-02 00:50] wakes up\r\n[1518-11-03 00:05] Guard #10 begins shift\r\n[1518-11-03 00:24] falls asleep\r\n[1518-11-03 00:29] wakes up\r\n[1518-11-04 00:02] Guard #99 begins shift\r\n[1518-11-04 00:36] falls asleep\r\n[1518-11-04 00:46] wakes up\r\n[1518-11-05 00:03] Guard #99 begins shift\r\n[1518-11-05 00:45] falls asleep\r\n[1518-11-05 00:55] wakes up", "240")]
+ [TestCase(4, 2, "[1518-11-01 00:00] Guard #10 begins shift\r\n[1518-11-01 00:05] falls asleep\r\n[1518-11-01 00:25] wakes up\r\n[1518-11-01 00:30] falls asleep\r\n[1518-11-01 00:55] wakes up\r\n[1518-11-01 23:58] Guard #99 begins shift\r\n[1518-11-02 00:40] falls asleep\r\n[1518-11-02 00:50] wakes up\r\n[1518-11-03 00:05] Guard #10 begins shift\r\n[1518-11-03 00:24] falls asleep\r\n[1518-11-03 00:29] wakes up\r\n[1518-11-04 00:02] Guard #99 begins shift\r\n[1518-11-04 00:36] falls asleep\r\n[1518-11-04 00:46] wakes up\r\n[1518-11-05 00:03] Guard #99 begins shift\r\n[1518-11-05 00:45] falls asleep\r\n[1518-11-05 00:55] wakes up", "4455")]
+ [TestCase(5, 1, "aA", "0")]
+ [TestCase(5, 1, "abBA", "0")]
+ [TestCase(5, 1, "abAB", "4")]
+ [TestCase(5, 1, "aabAAB", "6")]
+ [TestCase(5, 1, "dabAcCaCBAcCcaDA", "10")]
+ [TestCase(5, 2, "dabAcCaCBAcCcaDA", "4")]
+ [TestCase(6, 1, "1, 1\r\n1, 6\r\n8, 3\r\n3, 4\r\n5, 5\r\n8, 9", "17")]
+ public void Tests(int day, int part, string input, string expectedResult)
+ {
+ ISolution solution = SolutionFactory.GetSolution(day, part);
+ string result = solution.Solve(input);
+ Assert.That(result, Is.EqualTo(expectedResult));
+ }
+
+ [Test]
+ public void Day06Part02()
+ {
+ var solution = new AoC2018.Solutions.Day06.Part02();
+ string result = solution.Solve("1, 1\r\n1, 6\r\n8, 3\r\n3, 4\r\n5, 5\r\n8, 9", 32);
+ Assert.That(result, Is.EqualTo("16"));
+ }
+ }
+}
\ No newline at end of file
diff --git a/AoC2018.Tests/Day03/ClaimTests.cs b/AoC2018.Tests/Day03/ClaimTests.cs
new file mode 100644
index 0000000..f467f47
--- /dev/null
+++ b/AoC2018.Tests/Day03/ClaimTests.cs
@@ -0,0 +1,19 @@
+namespace AoC2018.Tests.Day03
+{
+ using AoC2018.Solutions.Day03;
+ using NUnit.Framework;
+
+ public class ClaimTests
+ {
+ [TestCase("#1 @ 1,3: 4x4", 1, 1, 3, 4, 4, 4, 6)]
+ public void CreationFromClaimString(string input, int expectedNumber, int expectedX, int expectedY, int expectedWidth, int expectedHeight, int expectedMaxX, int expectedMaxY)
+ {
+ var claim = Claim.FromString(input);
+ Assert.That(claim.Number, Is.EqualTo(expectedNumber));
+ Assert.That(claim.Position.X, Is.EqualTo(expectedX));
+ Assert.That(claim.Position.Y, Is.EqualTo(expectedY));
+ Assert.That(claim.Size.Width, Is.EqualTo(expectedWidth));
+ Assert.That(claim.Size.Height, Is.EqualTo(expectedHeight));
+ }
+ }
+}
diff --git a/AoC2018.Tests/Day04/TimeRecordTests.cs b/AoC2018.Tests/Day04/TimeRecordTests.cs
new file mode 100644
index 0000000..546b56d
--- /dev/null
+++ b/AoC2018.Tests/Day04/TimeRecordTests.cs
@@ -0,0 +1,39 @@
+namespace AoC2018.Tests.Day04
+{
+ using System;
+ using AoC2018.Solutions.Day04;
+ using NUnit.Framework;
+
+ public class TimeRecordTests
+ {
+ [Test]
+ public void CreationFromStartsShiftTimeRecordString()
+ {
+ var result = TimeRecord.FromString("[1518-11-14 00:02] Guard #3011 begins shift");
+
+ Assert.That(result.DateTime, Is.EqualTo(new DateTime(1518, 11, 14, 0, 2, 0)));
+ Assert.That(result.Activity, Is.EqualTo(TimeRecordActivity.StartsShift));
+ Assert.That(result.GuardNumber, Is.EqualTo(3011));
+ }
+
+ [Test]
+ public void CreationFromFallsAsleepTimeRecordString()
+ {
+ var result = TimeRecord.FromString("[1518-11-01 23:58] falls asleep");
+
+ Assert.That(result.DateTime, Is.EqualTo(new DateTime(1518, 11, 01, 23, 58, 0)));
+ Assert.That(result.Activity, Is.EqualTo(TimeRecordActivity.FallsAsleep));
+ Assert.That(result.GuardNumber, Is.Null);
+ }
+
+ [Test]
+ public void CreationFromWakesUpTimeRecordString()
+ {
+ var result = TimeRecord.FromString("[1518-06-09 00:52] wakes up");
+
+ Assert.That(result.DateTime, Is.EqualTo(new DateTime(1518, 06, 09, 0, 52, 0)));
+ Assert.That(result.Activity, Is.EqualTo(TimeRecordActivity.WakesUp));
+ Assert.That(result.GuardNumber, Is.Null);
+ }
+ }
+}
diff --git a/AoC2018.Tests/Day06/PointExtensionTests.cs b/AoC2018.Tests/Day06/PointExtensionTests.cs
new file mode 100644
index 0000000..5d46568
--- /dev/null
+++ b/AoC2018.Tests/Day06/PointExtensionTests.cs
@@ -0,0 +1,49 @@
+namespace AoC2018.Tests.Day06
+{
+ using System.Drawing;
+ using AoC2018.Solutions.Day06;
+ using NUnit.Framework;
+
+ public class PointExtensionTests
+ {
+ private static readonly Point[] Points = new[]
+ {
+ new Point { X = 1, Y = 1 },
+ new Point { X = 1, Y = 6 },
+ new Point { X = 8, Y = 3 },
+ new Point { X = 3, Y = 4 },
+ new Point { X = 5, Y = 5 },
+ new Point { X = 8, Y = 9 },
+ };
+
+ [Test]
+ public void FindClosestWithSingleMatch()
+ {
+ var testPoint = new Point { X = 2, Y = 2 };
+
+ Point[] closest = testPoint.FindClosest(Points);
+
+ Assert.That(closest.Length, Is.EqualTo(1));
+ }
+
+ [Test]
+ public void FindClosestWithExactMatch()
+ {
+ var testPoint = new Point { X = 1, Y = 1 };
+
+ Point[] closest = testPoint.FindClosest(Points);
+
+ Assert.That(closest.Length, Is.EqualTo(1));
+ }
+
+ [Test]
+ public void FindClosestWithMultipleMatches()
+ {
+ var testPoint = new Point { X = 1, Y = 4 };
+
+ Point[] closest = testPoint.FindClosest(Points);
+
+ Assert.That(closest.Length, Is.EqualTo(2));
+ }
+ }
+}
diff --git a/stylecop.json b/stylecop.json
new file mode 100644
index 0000000..6c38a55
--- /dev/null
+++ b/stylecop.json
@@ -0,0 +1,20 @@
+{
+ // ACTION REQUIRED: This file was automatically added to your project, but it
+ // will not take effect until additional steps are taken to enable it. See the
+ // following page for additional information:
+ //
+ // https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/EnableConfiguration.md
+
+ "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
+ "settings": {
+ "documentationRules": {
+ "companyName": "Endjin",
+ "copyrightText": "",
+ "documentInterfaces": false,
+ "documentExposedElements": false,
+ "documentInternalElements": false,
+ "documentPrivateElements": false,
+ "documentPrivateFields": false
+ }
+ }
+}