From cd5acc649c31f299f16ec1e205a752e19b908bc5 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Wed, 5 Dec 2018 10:08:04 +0000 Subject: =?UTF-8?q?[day05]=20done,=20na=C3=AFve=20and=20slow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day05/Dockerfile | 7 +++++++ day05/Makefile | 17 +++++++++++++++++ day05/entrypoint | 13 +++++++++++++ day05/input | 1 + day05/part1 | 27 +++++++++++++++++++++++++++ day05/part2 | 34 ++++++++++++++++++++++++++++++++++ 6 files changed, 99 insertions(+) create mode 100644 day05/Dockerfile create mode 100644 day05/Makefile create mode 100755 day05/entrypoint create mode 100644 day05/input create mode 100755 day05/part1 create mode 100755 day05/part2 diff --git a/day05/Dockerfile b/day05/Dockerfile new file mode 100644 index 0000000..5e0a8b7 --- /dev/null +++ b/day05/Dockerfile @@ -0,0 +1,7 @@ +FROM ruby:2.5-slim + +WORKDIR /opt + +COPY . . + +ENTRYPOINT ["./entrypoint"] diff --git a/day05/Makefile b/day05/Makefile new file mode 100644 index 0000000..07dec9a --- /dev/null +++ b/day05/Makefile @@ -0,0 +1,17 @@ +DAY = 05 + +.PHONY: run clean push + +run: build + docker run -it --rm aoc2018day$(DAY) + +build: part* input + docker build -t aoc2018day$(DAY) . + touch build + +clean: + rm -f build + +push: build + docker tag aoc2018day$(DAY) advent.4574.co.uk/aoc2018day$(DAY) + docker push advent.4574.co.uk/aoc2018day$(DAY) diff --git a/day05/entrypoint b/day05/entrypoint new file mode 100755 index 0000000..8982d21 --- /dev/null +++ b/day05/entrypoint @@ -0,0 +1,13 @@ +#!/bin/bash + +if [ -x part1 ] ; then + echo -ne "Part 1:\n\t" + time ./part1 < input +fi +if [ -x part1 -a -x part2 ] ; then + echo +fi +if [ -x part2 ] ; then + echo -ne "Part 2:\n\t" + time ./part2 < input +fi diff --git a/day05/input b/day05/input new file mode 100644 index 0000000..7de7072 --- /dev/null +++ b/day05/input @@ -0,0 +1 @@ +bBCRGgrwgKknNGWnNWUuwHoeEtTOvEeVhYZzrZJjFfzNnpPHtTgGhNtTxBeEbxXqVvwWhjJHQuUnNXGgvsYySOPphHKaAkoXxVQtTqQJmMjqVvzZHhOodDhHocHhbFfBHhKkGwWghCcHnNCvVOztTTQqtLlvVZzsSZnOuUfFiIHBbbBoEeOfFhHpPhDHwWMmgGhAaJUujqQMmdKkoRDdoOrNnReEUigAazZfFOFforyYOOoOooPpfWwFRqQFfiEeVvIVvGlLbBIGgroORqpnNPQoOohbBHOkNnKaASJkSsLlfFKwWjJgxXGuUMNnmYWsSOCcowywWvVyGNnQEeqgYxXyOZzoaAVvUoOQquSsyiIPpNnZzCcNnYsDKkdShebBEfCcFdcCuUDmMHDdWwLfFzZIilYIUubZrRYyzBiPpxXfLlFPpjBMmPfFeEpmfXxFMbQqTtuUsSVvJjxtCcTXHafNnFlLAlLVGgNnoMIiLlmOLqQnNoDdOlgPpGvVWwknNWwKQqKkiITtnNiIVvrsSrRuURvpPgGeENnzZKkPpLlqQLlSswWjJlOoaAxBbXkKSAaGgPbBxXpkkKqhHQqHhXxQQuUqKwgkKGEeWwFfCIictnSNnsqQNuUbHwWhBlWwvVYyeERrLwWTnNcCzZtThwWHLlSFfNfFXxEoOeQqnsaAUujJhHfFsSWDdgcCjsSsSJoOGQOoqOoDDdIidvFfuYyUVzbYyBsPpSsSEesufFUSUAatTgGSsuSLqQEelCcRrRrsMmowcZzKkcYyCbBCNnWwYWwGgzRrZNEerRsLXxluUSPprnNOoSsRYyRrnFZXxzfSsmMrQqFfOWwIiOTtHGghuUooQXrRxqRXBbxGCcDdgTLuUXxZCczlPpiIpYyZzPCctxtTXuxXFfUwWwWbBFHhZDdzmMCcusRreESfFUfFXiIlgGLsScpPCxAnNaOTwWuUmMtowWIzZSsZmMlLzyqQYiwWlLjJsSfsEtTejJSppPPxUuXgGyFpBbHWwhfGKkXwWxhsSHgFPKkIihkmMKJjHcCiIzzHfFqQOohgGkKZXxyYBbZBbafmgGMaAsSXxFWwSsSAhRPprMmbBmkKMHaTtPNnpIiyyYbBYWwstTjGLlgJOgGLlokgDdTtGhHKxXQqAtoOUuZzTJjinNSsqQqQILZzaAcNnCVvRJjJxXgGjrPpDdtTXxaAIvVgGiWwllLIiEeEecWwRkKtCcTrvVXKklPpLxlLyuUYVKpPqwWNnQkkKvlLVvnNOOLloRrkKvVEeoAAaCcsSHAahAaFQqfwGbBUugWarRdNQZzqoeEOQwhHWqWgGkKmMwNfFnLlTzZtoOZzvVcCvVuLlUQqsnNSnDJjbLlBvVWwPmMpaLjJlhHrRAeAaEDaIiAmMSFfsdeEfaAFqQfFXZrRzcDIipPoOdMFbBfeEmzZlLoOdaADLltTQMmCcqQqYybBvVWLlJjwXxkKVweUuEzZlqQQhHLlqpbBPLGgoGgOoObvVByGgYWWwmFRrBbYyrRnNxUMmhHuXfBbEeMmKkYtkKjJrRtTRrBwWbTpkvVaAKYyoeEOlLPQRrjJqSsfVwWvnNeESBbsFYybcCBMrmMRmNncCLlCKkcAJcCjKkaDuNkKnMmBbOLlRroBbvVWYqQywWwhHcdDCGgWEewyUrRuYRrlLWVvwLlzZGBBbPyhLRrlMmpPHYMmAapPzZRrJsSRrUubuJsGgSGghOoHjAagGUVvFfsSblKkLBfgGSMmsSsFWiqWyxXPpPpxXYZzoWwkKOwcFTtjSsJfCbBxXrDQqdFQqfRVvHvgGnNVhkKpbBVvbBVvPIFfpPFJJjJjjlLoOmMnqyYQNfHSslLqQoVvOUAauhkKOoChHkKcHhbPpaAzZvVBhHirRcFftTtTCxXyYUuxXbwWBtoOiIYkZzeEKTtEBbenNCcIAaoOjJiKkxXrBbZzQXxqREeoUuOvZzVeEyNYRryqQJjkKpPeEpPyYpDeEdPnUMmusgGSvqQVKkeiIEGeEJjDdirDdsAaxzcCZaXoOLlxAUJjrAafFRbNnBEejJuWNnHhnXxEwWebBNNeEnSsBbwYyRVvrnXxUuIHhDdPphyYLlRQqrHoOvzZIyYiVfTtVmMWAVeEvawvRrIiFPkKpIMmiKkElLoOevvVcCRrsLlGgKzZLbGgBDdlzZkeESHlLhUCHhcMnNBbJjUuesFfSqQEfFRrjJkKaTtAaAGgOoViBbHhrRKkHhIZzZzeErRfSAaSwWPkKpsCNncIipPejiIJxXQzZqEzMoEeiIKkHhjJOlVjJHhvSsUueELKknNtWwTmRrZfFkJjQqKWwzPpSFfIisjJlLuYyUwWZAvVeYyEcCSyaADdlLYlSfHhFCcnCcNsAaLLlYyzZiIkKfFWbdDiIByYGgwaAQqkfFKbIEeiKkHhKkBKkshHqYSssSyzZlLQCaAAacFqQgPGgpGfaJjoiIRrOteEwWOoTtDbBdiILlLlPpVnDSsdXxNDsFfMlLmSdAaRraAMoWwOUucjJtoOTfFCmTgGNnOFfoEetZxOoXUusSZzXxoOnGgNzOobBOyYgPpGIsSiuUDdeeEHhdjJDviIDBbLlaAdwWyqQYJYHhqQvVOoOoLlIiTtzZYySlLsySsjndDNUuunNkyYKUVfGEwWepPgFUuaALlHJjMmAqQaVoONnvyYTtovOHULlYyuhHmxXMiIhXxZzdDXFfxDdSYysRTtPpcCBcCyYbNnrIHpVNnvkcCKodIVvidDDQqKkHkKuTtUsvVSpFfPVhHvLlkwWKDcUuCsSAaFfNndYyNnazZAhhHkKIiHiIcChHwWxXBbMmKkyYIsLlnNEevFxqQXFdDoOiIVvGgfxXEeEbLiIlKkeEodeFfEoOTzZtLOolDSsOZtTzCcLeaAEPHhplwWmKkTtMUuSOosUuRtTrsSFXpPxvuUAaVSspPQqnNoOFwWaZzSsvtTVaLhHlVvApPhSvVkvJsSjdfFGgrRDANwWjJVNnXHhxvgGGgKtUuAaThVJtTlLXxDdsSpPjpxXPvHdheEHGZzMmgNeEYjVvYyiSXZTtLMmlzxWwksnNSKhPpHkKAaAuaAUbZzBHhXxBbAaHhajxdDEeXJgGlZGgKkzRrYyxmMAXxaSsmvVMNnoOHhXwlKkurRULWZzOoQqqQJjOuUobBFqQEyYefkzYyIiZKEAabJjBWwnNeHhhzZNnHsSJqIibOrMmVQyYqbBhcCALlKkCcrTtRaHxXvFCcfMmRBESsqqQQeeEiIblTtmCZzcMXtTxDdeEqQLJjoHQkKPpBVYyvbalLyYGgFZoOzYyAqQCcxfFXaAGIoOHhisSpPgCuQqNSsdDxXmMnVNnNnvezZEiIVNnXxeEvLwBegkKeEGEbWboOZzaABmmMwWMpPKkAiIIfFxXksSTtRVaAnNvwEeZGgSszzYoOMmyGCfFcgnNoOjNnJrRoyYdaAxVvXDeEVvKkOLvqIisSHhcCQbBzNEUueuUzQMGggPpGmqDdREepPzZiQqIrgGDdZlGgmMLIiBBbbCcxXneEjOoDdJZFfBrRbeECcIiYaAXCkJbhHBjJjumwWMFfNQqnXxoOrtTxtTXOoRUFLkKvVGgdYyyeEYDsSVjJJjwVWwRrCcVeEsSzZvcCeEXxvfFWqzZQCmMgmMGONnoCcSsBbDbBHhdqzjJHLlhXxZSsQGgQNniIGgAamMXxCcyWwHFfsSyBZhlLHGgRrsdDSzRiIdDwWtThHhHlLxXrxnNXbYKkUAaRWwWwKkaAwWEEeErReVvgGlDpPtToOowNJjnbsSBIipPWpPOPRrpxoOXAaQXxCcqYydCEyfFYecwcQLlqRrhHbSLfFluUsShdDHzZgRlLrGjJpPRrsScVvCDdovTQqtsSaAPpjAaKkcFfhlLUuiInNHiIPpbDMNxXTtzZnskiIiIMmKmMrsSgGRnNnKkNSpPoxXZzOopOoPRrzsSYyZOukKaACTbBtcUVKlLXCcKkxUWwuBJjaAvsqQSdJjZzgeEeQqZzoOMmwWNnkjXwyNnYtTMmXAaWwsSoUZzuwJjOcAaColCcdDOjJAaoUQOoqoOteEURrjgvCcxXFfJjFfVQoOqhvVHxXGvVwzRrZmuUMCaAcwzZWmaAMXQqtBbNnSaMmpPcqQCyYAsaKQqkGgXxEdBKkbDTwWMmMmteXxhHJUxXkKMmTtujBTmMoOWwaQqAnNYytuUcjJHMmhCRVvrjRvVrPIipKkyVvYtTUuLiXxItTNniRrIGFAaLlfyYaAknNKONnoglgLlrlpsSPUuLeEQqldEemMFyYfgpPGmPptTjJKHZpPjJzQRrqfmMYypPutTdDwWUluUQqIiyzkKZMmUuadDyYHhFfJjHYyYjJyhlFfLpHLDdkFfvVWwnNEqQeRrKIOoxXZyYIwWqQqQizpiIAaOMmxXaobeEBbBaElLwWesSAOASyYsPpwBLlIisSuUAuUeEwJjWaSQqLlsWwoZghHGiyYSsIDJiIjrRaQqAIOEeFFfKkmMQqeEJjsnDdNwWNnJjpAaPStaRrbBAuEekKUMZzmlbBLTwWfPvVpjUuAaPpRrWwJoEeLljPpIiIsSEfFewWfFaARrQXRrxunNUuOoZZoOlLIFfQqgGXoONvqQaSsWXWzZztTKkZwoOpTMMmmPgdDGpMwOaAqdDQBTtbBjvVTQqtJTGKSsRVvrkgtqQtTfPpFDdzZeEOozZWwImkAVvaQcCqYmMpJjIipPeEWwdDGTNNSsLlnnmpPizZIMAaLlHfVdDvFhlLQrXxRAaQqsSqaoOAkZwfMzZljJLiZmbBxXfFgNhzZHquUQYyTYyXxTtSsZzuUtPyRrFJPpjvcUuGgCRhHrVFqQfXaqQFtOoTvVHhIilLXUPpufFxFfBlLbUpgfFGffFIikabBASLDdAaHhMmwUuWogGSsCTtUJjaAuBpPsSlLQqKbBwWkKiILlDdqQBbJjklYfDdFEeOMmEebBBCFfhLlMmZzHUurwCNtTGzcSsCfFTtZAaeDdhSRpPrslGgLHEzZXSUusVvWfFPnNgqQGzpPOopCxXqaAQqEeQcixzZfFXLDdlHhIwnNWPgGzZfFyJjIjJTeEtoSCcNFvlLVIuUMAxEekKXKZqOoOoKeEMmkxgGdAvVdDaHhHHhhdDoIlNcCnrRLiMmvVAaCchvMmUusTtbqQOEeIiTtaAVvUjJKkuUzZljJVvcxmMoOVGgvFROcCzZoYZzyrcCpyyYGlLszZrReECcYyMRWwrmSgyjJYDbBbBoOHhdYZziunNtTUXOEeoWOocChIiyYwWHYDdyTjsSJlSVPpSiLauoOiIUyNnXbBrRtgGTOoxJjPpHhYjoOEeyYRrSskKnNDMmddDjdDJTaABbbBddfFBbLlDRrvVWwiIDsKkStOomrCcuURMWwAaXxZzTtIdaNnANnmMlLDiinCcaANwyYWwXQqkKpPiIFfknDdtTalLyYTeEhfFhrRHHqxXCcjJQNntdwWhmBbMHAawTEetEemdDQqMEmMJsIicpUuPvvrRVQEeqVWbBwfuUFCRrGoOWARraxXnNwqQUulWMIiNnmmMmAasSIiXxsOlnYyNgGHhLPpWwoPpUufFeTtuaAUEiKsSkRoOlLZzpPrVvvVkKAaJbiIFfqlLQqQhhHVvMzAaAaMmkwfFtNnWYSsyHhwcCTtbQqWMmCcFfieEIwujJKioxLQqDdljJXFffMmFbBVVvvBbOPEenNlLIgGBjJbBEnNebiJQqMmVvuUjJjivwQFfqtgIJjvANnkKQqgGIiIoOuUiQBbqUuEeabxtzZIiGgTXuURrBimMIEATtXxaLNnYYyIivVYIFcCxSsXpmMtTpPPfGMmNCcngWZpzZPaPANnRrkKQcCvMNnUuJjmaAWnOcCzZoTdDtUuNuGgUwVvfeEFVqQpNjJgGnPiQqJdDiIQaAqYyAaLlIuxXUieoOieBXxbvVBbrREIIioHhOUJjuQZlLCuUcYGgGGDdjjJnNJbBDXbBdDfFxgyrJCczdJjDHVaAuUvlIinNLSswWSshPpozZOolLtTpPGkKEqQPGgadDAFcCFfFfWwfOofFplLRdNnDbBrcVvKCUucAmMaZzKkEoOFfVRrjmpPMXhHwpPnNdDmMWGJjSsmNVvuUwWBODdoFfTtbnMgxQLlUuqQGgshHMXxJKTtFUGguKkMmqQfIexdDvyYieEIOoVvoGgOVGgvJjHUHuUBbSslPprRhhOoLxrRXlNnCcHRcJpFfeEzZPasYFjJokoDdOqQKXxhHKkAanukKEeQYGYygoOynQIiqNFfCBbcgSsWdDMmwGFOXOZWwzkuUKoUkYXxyTjhvwWuZzHgGmCcMrRsSbBhMCcYnpwWPHhFfiJjmMIoRSsreqQEOmsSRrSsMOEeafFlkHhLtTlKLWwACzEOTtrHhxwRmMrWlLkOoOUzwrebcGgvVfdRrDFZzIJjiiaAeEImMmMdDzZzpPZuMmFfuUqQePKkNnDdpEzZtTecCEShHSssbBUuRrdDbPnNpbBfFJAamYyMjHhuUBAKkaSxXbBseECcSpBzpPSsGghBbrRUuxXsSOrRoSnNnjJOqQgMmGyyRjJToOCcMmivVIOotXXCcxlXxcxoOXlLnNIWPbBxdDuUyYXpxXEhvVzBodDxXHMdDAaJNnhHjkOHhoLlInNoOiNBbErAaFBbQqwvVOopAaaAzhJjyYjJUuvwWwWDdspVvZFfDYoOpRryqQiIYPqQOonqQNevVoieEIVHXxqQhPWPsSIKkdQqkKzZotTbdDBOTtcmMCDFcQxXbBrxXRJrJvVjRGLvJHgcCGkXXxxZzKgGWsSlLwhQOnNqQVuUvoaUuABbQZzSsPZmMGNnzcCZgfsSHhsSVvFWwztlLljyfFOWWwwosAXIixaHoRrOcJjbPpcCRwWwWzOIlLifUvVuQyxbBIHhFWwfkBbKMmQqiubacCABUyKgzuUZGkZziIUJzZuhQqjJMvVuUMmUuDdgUuYgiIGMmwWlnNnOoNeEbEeBPFVvQqfGgqoOXMHhjJZzcYZocCXUuxkKHhfsSFhnNmgGfdDFqjJLeEeEnuKkVvuXeExeEoOrRWoOJjnNJMmjbUsyAaYMbBQqwzZHhWhHcCJcCyMkCcdzZDsSPCbBcXkKZzyYDdxcCRrqQfkqQKHhsSVvWwZAyYfFirYyqyYsdjbBrRiHSslhHxKkXLFfcCpPHcChZHXZmMzpDdPYydDxZyIiYtTCSFfnNsckCUKkuuwXxWjqNnjJmyYMnNfFHhQqQDRrsSIpPiTKkFIeEPELlyYeNdRXqQeExHzZuUDdpKkzVvZygfFhYyOmMaAGOaSsrRAQnsSnNXxoKJfFjkDdxsHsShPpSHmMEBbDdkUuooOOCcjJKMIimXOoxIiMmphHPUPpGgsShHQIVDdGPbBRNnrSmMwBbbBWQseEyeEeOoEIjkKQUudDbhHhHBdDTsEemWwfAatLlMmAaeEdDYeEycLlCzmMZdLcChhwTHhtwWoOmMWFNWwnHhtTGzTtpMmkyNMmnoOQhHqovSCSsckfFPTtHhBbKkoOwKqQiKktTLloXxOVvRcqcCaAEeCcWwTttToYyMClPwRXxzZhfyADJjDqXxYSsyQzZaAiIdJhHtTEmMPVvdbmSJEAhHHtTBdDbpPegGEOolLXNnySsqQPIiuWwhmZzMefJjppPjJjJxdDyHKkcZzLlCzZYeEyRrHhtOojJcClLtobQKkLlqQvVvWwCcVCcqgroOCIicZYJjBbcClLTPRrLFmMfgZpPzsIiZsSlLrRLtTtYyTSNzZnzxXZRDdrOoxWwXrRGgNnknNKNnSySBAapPttTAnNaLllTjJCcrRAzRrZXPpxvVHYybBhjJaSsbxWwXqJoBbOqYyMmbTtqEeHnNJtCkKrqQRcUPpTttaAiIoOKkTdDQHhMIiwtBbvYQqyXxlFfLAKkJjdDUCIiUGgTnNzZtuEekkqQzZvhHXKkRrSssSxtwjqQJuUTlrRaBbXxAbzZBRdOoDXUuLlxvVHhrLfFlykKXxWwgMMlPpYyLtqQToEemkKpPBbMcLlBvVfmMWZUuSxXSPpwbCcFJEifFwWBbJGgRmMrZzGCXmMxVxXngGnNLlYMJjmQxfFXnNMeMmiIlLEZzmqSsyPpwWXoOSNGgyWYywPpnNXJjUuxavTorRwuUWqrLlsPpSgGOEWbBwegfaAHhkKuBbYyyOoHhYgCcmtTUiIfqRrRrsSpPjEegGJtySEDFFIiffmMFbTtsXxSVvBUtkKjgGEeJddkKVnMzZmtTLlwiGTtiIGgcTEetCTeEtdoOgOmMoMmdDkKdDUuVvzyYdyYBbDZGyaAYJjfFMmEenOglLGADpPxXdXFfqxXWbNnoDuUyYAEndeEDvVNADdaWwRxOWwgGocCTjJUBbjJNnNnPJtpeEkKPgpPGtAUuhHCcNnaiIPWwpTmASsQqKTtkYNZzntTHhczdDOoqDdQsSZOoCHyYhkKlLmMHhvqQMmVaAYyytTwzBaADmcCGsHhtcCwWrgGRDeZpyYPUfFuJzqlLlLXxQnNZfHceECOohpyYPFZiqHhoCcUeEnNYylLulLzIiZTvVtzfFZAZwhaAHuPkKlsSnwWNLmNnrRBbuBEwSjJsWKkvVxKAzZaIFXDdxSZPpxXzsMmuUfcFfCDdFfjPwWUIiuIiBYEjJqQeMmgNnZDHCchdONKkociLJfORrIiodDFVvNdYJjzAbTtJjBDKkdbByRrYaqfFQGcCBbPpglZjZwWKkzvVJHPphlYyJOxmMmutPplLKxCiIBDdbcgTtqmlLMCbLlZzMmlLGLlIigBwKoOGIhHoOaAyVYyvhnNpPYZzyfFtTKkYfnaANTtFKkHUqQAawWyEsSURGgrobiEeAXxaFGAaTtjhaApPXdDECcmMqQcCQqHhoXxEeXaAthHTIiKkzBbuUNnXxGgjJZgqDyYrRtXxtuUWgGwogdTtrRBgGXxMmiIWwgGLMYymlnYyNYnvViWwvQqVvdDZzViIAacCxXNnSGgAbBrRasnYcTtNnnkKRrFcJjrAaRdDygIhHiGYkXqQmMOocCnNSsXxRrolLqgsbBJjAaSlseEfFkjQqQqjRrJBULcClbBZzrRGmMwWgubJOotTzlLBrRbNIinZGkKCcgqqQwWAWeEozZOQqaADdBHhbdDSyYswaxnNfFxhtTVvnNuVvnLlNSThHurEeRUlCcqQbBLmMEenNoOxSfFskKxgmMGXxgaHuUDdkPHhppPeuGgICcxXOWVlUubBJUuxXjFfEezUubkKYLbAaBlypPhWCcwQKkqBqSYynyTtqUuQYioOIEeYyoOFLlzdrRLBRXxziIZSFfsSsjONbbBLdCcIZziFfLpIiPIPhiIHaAALlrRYyansxXmMpPQqYZWwzOwxXdDUOotpPIiwPpzZvVPBxDfQqdAaDzaAZAaFrTtvVmMuOmMVvQqmEpXxPkKPgGpeGghNnaAFGDQmaAZzIiMwWquULDdldJYyjUuDdEexXaAnKkNtgWeEvVwaUunNGjwEonNOeNnrRWBsSWwaqDdjJQkKEeYOovAaVyIKXxmKjxXMiOoGgxXKkIuUxoOVvXgacCFHBbhrRoOffIFfipKkPDueEFfIwQqIZzuUipSsPWIqQiDRXBrRlLTttvVBbTbltTLZzxBbRoOtTZTBocCckbByxXYfFfKmMjJlLkFXxJjTtjEehYQFczZJjCRKDNbBnoOdAaiifFeEftHvVbQqBbTXxteEeEtpPTtzpPkKFXQqGgZTtiyYIPpIiQumMnNKvVKkkwrRKyuMmUQqhHVvYJjdnXxSsndDZJjzJiIWNdDnwZzxjWFxXfFfVvwfLlCKOokcRrUuHguUSsGhHmpPJtbBqQczZCJjTvVjCccCWwWVvwPparRAZFfzckKvVCRrJAaSKkuGjJSsgAaZjPpZWwlLzJzfFjedDECnNcJkKkKaAoOkrEzkAagGURruQbpEePjMhRrHMcFfLloONnruURcCoOnNFfmMnqiyhHuxXFfYyUGLlgzUTtEHhYOUulZSsjJrBZWbBwrHhnYysuUSZpGeYAtTnNCVuyYyYLAaltnPpNPSstInCcgGNnkVxXvcXxwWxXrRJDdrxqQGgGJcZbDdBzpPyKNwWnqXxQRrJJVvysPpSxlLXPpVzZiISuLlodDAacCVwAaWDbBbBowWGgOtyYTdTtXLlxRiIfoOogGguPpaTtYyQQqGgcoOzZgXxzZgBbGdiIDGLAaMmPplFfvlnNLcCVBwHoOhmMWUudPpzZWwDduUIiZzrRnNVOOoHObsDdfaiIAOWGgwocAaKiQqIUuzZgyGGnNRSdTtlnLlNLmKDkyYhHRgGrcCKzZINnilMmmMZzmMLVvAVvadLUuVyYvxZNnhOoSsGgQhHEeqWcCOowDdRUujJjJWiVtXzZEeWVvdsSSGyUuYsSqkaAKQgWwXxpPcCWTtqQdDSseEYhXMmxJbBjdDlTQiICeEuUDdeESuxXUJjqQRebiXxIzZDdBbzZaAOolLyYgGBbAqQFIifFeXjlVvLwzBbWMgGwWnRrZzNSsaAsSVvvVnSslLAaUuyOxAXLxRYxXzsSZWwzJjisSZzyTXzsSpPwWSsYXvVOoxyalvVjJLeEKkcCOorRrbrUuRBFfsGpjJXVitTLlIqnLlNAhHFftToOFpPnNqQnURrutNnVvxXdAaDyyYpPuHLoOcZnNhHzgGvVPaVvAtTQMrHhQqXxhrReJjNjCUucEeJsKksaJrRjewWoiIrnNRbBmMuUhHXxbBuDdgGCcUlLyDwWuUrqQvlLRqQqQzvVkYyOneENgvVLBDGgVbZzAjJXNnCwWcVvhHUuFVvfxXpqQElLTEeBXxbtoOleVvEFZzhHVuUvfMsiVwcCKCcKIiKkKkWwtpPTtTmSsMyYXxMdDmDdhHaATtdcCwWLqQjJNRXxEBlLfSsoOpGgdDsSzMpPmbBcMmYxXqQyJMmPphHdoOteEKkTzhHTtiIZaOoDdwWKKktVWwznNvVZNnDdzwWjJZhHTtlLgWwGZzgRbBwWdDyYFcCgGJkKtTjTtgzOdDxEeXoNnxXkKvViIuohkKOvVSspfNJjBbjpPpPjJpQqsSPFfMyZOoinNIbBVvuAgGaDQtPpGgHhJjeEpNbAuUNnmMopsSKkPGgqQgGqQLzZlSyYsvVOlMmLvVNnvaAmtrGQiiIIPncHhBbCuUwTHfBbFkGgKaLjJlAwPphHgPIiOoYyqprReEMFfpPlLmWxXwhRoOlfFLZzlLmMrKkPiYLlyXxtTIpzcCEdYyxdUEeuBbnnvVNZzPpNsSGgkKvVPnNaAaATPqpPGgXCcxWwQvIoOikKSnNsUcdvVDyfwWgGFLVvyGvVCctTOohFfSsoLlOtNnIiNnFERraAejsYyfFbtTByYTtSsSEeqQHdDgrPpkKptTtCptTPclEeLMmvbBBbXxSscCQqKkeEkLlHRrAxXDlKeEkLNTkKEVEHDdheEMmjJxXxqQaiMmvUOouXxVGpKkvanTtvokZzKLlvVHhXxHwhsYyvVVkKvAavVWTtIiwSChHfFcSsuUiTXxtpIiDdzZJwWoOjRBPRJjrKhrxrRneWwcQqoGKklZJjjJLXLlCpPSscgGzZqQyYFfqPHTshHbBSIjJAMmsaACcEnSuUPTtqDdWZkYyKznwwWeEkFJkXZzkKnFfoOhgsKkSFmAaMdmlWTtgGofFnoOdmMfFDzKkZNrROxyYXVvnNwZrRzLMmmMIahHunDrqjuUJGgvVGBLlVvbgYjkgbBGKdDIVgGvZzZYYBWTtwxKkcClPEepMmwbSINnglLGiIinrbVvSpcCQINbkKzyYZmMmMcHhDTtWwnbGgFQqcCTZcrRQwGgkFAafDEDTkKpPVzZiCQqesWwSFzZfFkluUQVvNnBbwbBNhKWjJQCfFcNvVmMnqpOoPZSRHxwWpPXstTSaKBbPpkAzZgkKGoOiILlMCPkqHhQlbBbBrbPnNUuHXxhnJNnjosSscyYiFftTOPWcCZzLlmtTlNaAkKiInDduUymUudJjcmlNkKMmnlxKkLaAlXREeUeEhnNbMCcmbeQWfFwhHrRBBbjsSJTLlWwTtjJPeRrOovVbBEmMwtTuUvxYMFfemMEvMmVMmvBbVSsmnzZluCcGGgEegGoPYypSnNqtIfFuUOlLcLlCdLOnfFNUuRRrcsEedDShHRYyjJNnZzvQqhHIJjizZWwGgNnQqAaBbiIFwWIifVxLQpAxXaAqrtcCTRtoOAaeqIiGZzaAgYmbwWBFLqyvpNnPMfFWHaRJjmCkKcMrSsYyAtWfzZFsSSsDeEeLyYdDgyYwWyYtkKToCBNneESEeuUAkNuEdIiDeytITtiDZiOoIzdYPzmbBMUuhHGgqQEeZiIPyoOEeQoOUnzZVvsSkKNhHcCcChWwMdRLlrJYoOtTyWGMKkgkKZEezUuGmfUusSTtFbTAaZBYyjJNnZzTtoODduUvVIiBbbBxXhoOQqgPLnaoOArrkKRZzYyiIzZUUEeutIiwWTFfFfBbuuSsKkHhOpxwWeEaAAasCOoUufFRJjIiHjMkKaIiOoAqORfFWwOVvonhHYyNWLlfWfFwVveRJopPnNOqQeEUEedaNnLtTjgGebBjJGytUuAioaHzEJwtUvVuUufFPpsIpPHhiyYSsSzZGgxcCXsrNqQndDRNnSwVczZvVTmMTlLLsSMmPrRWCnDdKkNyYfFcHPoJFOoJjyhuUHdxXDwWpYgbhHvLlrRxXbBaAVmMnNOoINzZMOGgUoOuohjJHyCcYyAaTtYWGgwoOQPpqUuUwWoWnydoOMmmMLlzxZzpPNNnZzMrRJdjpmMPoOyYvVTIIiifqQeEtnHhNTEwGRrvVPpXCVzKuUbRrUsSjTJUbWEewmMKkgUeEpxIPdUuwWwWDBsWwhIiHmLlMRriIXdrPpResSLBOoVafTtSGgstTqIfFiTtDdYyltTLrfFRIizhHzeEdDQGgvVqzZdDlTtFfRFvnNJyYjTEedvVDkKtmSWwAlAaLaxCcKuUjJfFOashGwYyWjJuIiSsJjAaqezmMCcZEKkQUWwFUSsuCclXxIiCrRsScaAxaZEuxXXxVvYygiXxyssiUuLRGyCcFfKkeEHEehTtSIVKTtkqQryYWcCpPgQWwCceuhjJFfaAytpPoOTLlBHhboiIPoOFcdDCSMmKLDMCIiTteDCeiIrRkKSGEegcqQyYQqzCcEeZCtTjLJjlJeEsEwouwWUWvVqJIvVmQuUqMCcsSeBbwuUOoitTNkQuEpPjhBbHAaSsbMMEeIiMmmXQFgGEDddoODsRrSrRMdDpNnPPLyJZKkzhwiIpzZxXRGOOkCcAaAahxPpxeJDdxXbBSfRPjkKJzDdHhcLwWwJjPOqCsScSsiUuIUuQyLlEInNnXxFfHgaAGhAIfFPuXxiIkKpetThGgOXxszsSZSuUiWwLlIkKbccOsSMgJjxzOCcUuoZXOoGmocCCFfJjjJBbHhaAFVvNneIicTWwpPtnbiIaABXiIxUuEeQqIAngVtTBbcEzmfFZzDdYyfNnOqDdweuAZzwWeTZMmLisSOhHPBxXpPAxycoOCYqvVBbjJjJpDAadDIJjHhTVUuvtTKAaHhSsYyXxSyiDdWBFuUCcfFRrqrRLoAefFWRrkmzqQZuuUTZzTUuZGgeEWuYfNnZkIPobUlxLTmMvVGnNcLuIOodykWEewZzKRrDnNdpISsicCKkWwPYDitwKkmFuQhuNnFfsSOvVfsCPgGEeJjpcZzDdggYnNfklKkpPbukeeEeEEkdkmMHxXoNnOhUNZzzqQqQOoSsffbBIeEVvFfcCjJkblLodZdtTesSEvVpGpaAzGBsSbKgGGBvZMUuPfFnEkXYyxfFdYPDhJjEjIiIdphHPCSxCcGgFJjcCDsSgWXtTuUXxPpvvgYeEyGLNnuKguUdDQBbIFdDEKkexXweUoWwrReEHhUDduOuUpXgroPUPZTtmvdvcCVUuDgdamOYjJtQqVWJjWwwKknNgxLFYEeFZfDQqdbyYBFzfaAfFeElyYgoOLlfxXAaQqFjgGSdFcCbqQwADUbdDjpPJBVvQjJIMrbBQnPcCSspxXNgwkKeTthgGaAVATvwWDMwWsSVvvVmAjkaAuUKJKLTYySsgGtlnVzBVvbXRrKDfzZFqdDQYySCcaNmwWMBuPWwuUivVsSNWuUdTCUuXTtxcLxXZzlvaALwAaWIMtRrbOGVvCcAaxsSUrQGgqFaSsBbfsHpPxjVvOoCcJrRXQbBEeqwWXkrRKuEeIiHhUEjJDdDdsSRrMzZuDdLHfFhjidHIihnNBvkKVbxXCbKfMmHhMqWoORSWwiLcPXbNnMgGmSJhHBbjmMLlsBJvfFKprRHhsSpAassSyYIiokKyqQYPqQNnjutUHIibcxNnIScCsiusqOxioOmMLlUuYydKfvXnoXQRukKrEeWwRTtOLDMhHZznwWUuCcNCzZcbZfFJAayYeVvErlhWwhHIiEYjZXlfFLDEsSRoOrBTtbkQlJjWwlLXxisnNcvNnEcPTAaTtEekHhiLlrRsKbBSsRXxiuKJzXYyNntyGgikVVhlTBfSsjBbBbJFABbNnZzTJjUnNuVvtkKJjIcrRrRrWwAaQqqQRHGdDhHvVfFvBiWwqOUTcmMKoqiIXDdgGxUpPuQnNBEoAaNlxXGgBmVOovUNnujJMWfFedDWNHaAeAfTtAsSPpvVSXqUMcXSHpFmkKyjmkTLgZdDzHEqsLlSmxIPuiLBblIrJoOIiWUNhHFffsSAaFSvzZIcCbXMynQYSsnNyMOosRTBbAayMmVAHlvWGgDdwfFESMunNUpmMBbPWcsSBhHonPpNDKkdKKFfIiiIkzJUujxvEeFxnfFAEvzZVsSMvVmeaxXNCnNcXfuUgMjcCJkKhHOoNxXjJncwmVXcCxvsuFfeeRIHhjJhAaHiXxOsQyYKFkaAAaUuvYRfFraAyVbmWvCHhbMmBbBAAaAaacVTtoOwoRPJfFMmZzZwnRoOlLFfsSqSQmbMmRmMWNUnzzZjtEehzJrnNqwIiehTtOHhoKSrRirgGXuHWvVkfIUPpgVvGbUuXYyQXlLgGNtVMJjtXoJWRrAZzHeENjSsgVvGslLkEVOovpPepQqqSsPDkNnuUcvvVVXqFfIOoipPFWwfQjLlPAOoKLlkxpmAaMPIyYgGWqQXxpPCcLKkrWwOoRfjpJjHCcJPrRmZAaqTkUnzZxuaAkkjtIKKYCtTAacjeWsSwSsELcYOoqFfOZKkaAiIqrGgOAaDBbFfdQqCcoOWOowxgGjJSlLxrEenCGOyKkaAYogcsEuxXxDdaAmxXcCbWyYDYynPpNnNnKkHBUuWFdcCDSskCDlTtLFfUaXlLYysSUuPLRrCnzxGgGSpCccCPjJIhPpHDSsMGgHxkKiIyqZzQvALlaJcgEKkvVrXxIzEeZeQqlcfFCzZNIxoiVvWwmMZrRLlRDdrzGggYONHEeNVKkvnQRrqYyXGUXmMlStrRaZJtzZAaTlLDduUeEXvaAVxSLgGXxFBeqjJwWUuQFoOhHUqQPpuslPlBbtcCTFfvEeVWeEKAysSnNlLMmVPLUTkKBbVrrBbRsAawTLpTtHlCqQqQaeEslsCcaFfAFfSlIkvaFJvVfWrRHbndoOZTtwWzwWsWTtPjiIJRLlrDVcCKrwWsJjpNbBnVvMSsDdHhrRzZmEeFfKmNWSRrsOfbarxSZbBoOHKkwWwWfUutAPpNnpxXPUndgYRbFzZfsSDUTtBbiAkKaXfFxIGfeEFZzauUugfFckKGiIaABYynlLJoesLDVINnPpIiaxXapMgLhJjJjXtTrRanNADduUxYyFsjJtTqyCzZzhHInpPyRrYNNKRrjJAHhLlayVvYkIHhivigwWrJjIEeMlbQFmzjKkJdQUuGghqAaQHqMlLmMWwVduUBbubBCbBaAAQNnqzUuZafmVhGOsScMmClLQGkEeKhHrREhOmZKvHUuyYhVAaVZztfvOoxRrjxmFfFrVvWhHwXxgGINBIiigLlGbBIusKkIbHhBlLlPpvVFfLYyiDdSIijJMmjJZlbptTPeEmMiVvYNnyfoOiEeIayYADDdfFeEQqYRJldIivAaznidDyYIFwWbBNWIZPMyqQxAarNnZurZGgDdigVuUBbUuxlLXqQtnzZcajJfFexWnNyGgKkiRrUieCcvVEPLlQMmjJsjJZzSqFsAwWwWQqBBDzHhzguPpGdDbBGdeTtmPBbplpDdBiOPMmpYyMeEwWtoOfHSsOKklkKJiJjdqQhZznJCHuUwWiXVLllLdDZzZhzaAffFGgFiIiDUgDFqQBbfdKCDdyYoObSUuvMiImVMmAsUaAKkJrRPIzXxZiAaAVXmMQqqXSKGdDDjJdVfFFKkWwMmfNzZZzfoywWYbRtTroOHfFPsmMirBFfYLlYyoOHHhehUWdDwzZCcqZzfFkKTtfLbVTtaUnNdCJjchjJwGqSBrnNyEyAiIaeMisaAQyYodDOgBzhAqQBbaAJjRropvVqGhlVeEvVvHVjuqSXxsfFlLoaKkVvZzzZlaQLlqSdDsnJjmLfFMIiFfADdaXJjxVvpXLlxfFOWwyjgDJjmRdOHbBnNUNDipPmMQjJTTrxqQanNPfFpDdfjJwBYveEVvmMVlLJjqWUukrWiIBDWwdqQgXIUutzmvrmxCGqQlvVtIiTwWjJeKkNPJVvTLHhmMTqQtltAzwDKbpPBZznVvtTNsSNnGgtToOHhIRriOCmIZFoOfziMcibfbtTqkkKKDXuCcUxdJjBpXxuPpxOXxoOGgZibBNnEexXxWzcAavaOOJjiRotTOEemeyYzZlHhgGoOPptTFfbBqGzZlLgiIjaAJbBeEjJQQHXxmlWwwNKkFfybBYEeUKNZeEjeiIYyETtsSxHwWkKhQfFqXqcvhHVwWKowKkDIGnQzZqTTmjvRrMmVJQAPpadDqMHhmOoBLdDlbJzZjNbBqQOVvYrKfFgGsSgGpAkKnZzyYMufFIbBIzqQZSyzZGguUXxYyYQpPEesSuUHhuUugvjJfFSbtluzrgsSGEevVRZUoORBbrDdxMmPpFfkCLltTcKMmrkcFfnlLsTtSeCccCENyYqohHHhXxOkGWgGwVvqeNxXkKnEnCpPHjlmtTMLJlLhGgKnfNqQgGhFfoHhAlLpPmCRSscZzJNZnNzNcKVbXxxCcqQxEeJjDbBdDsoFXxEYyfFevVedaARJmRcnntTetWroOmfbbfHhFBzlpmEeYWwfsSFyYsuUjnhiIWwFplnNjJSfJjyWwYeBkKbJaUJjeEspPSzqQZVLlJIijMQwXIgeEpmYtJjKLlDPpjJRrdJuQqrRUKmMkMkKUcCtTKkequkyYKTtUjJHCnNwWzWGRFLlYcdkeIiEsSvZpSFjmMJFfjAaaARDSKGwWihHzZercCWGZiDdRrIQkNbqUjJujSIAXxUuAacCLSsyNLlnNpPBfqmWaGBKkiIBKzAaJAqIivNhHKkTHhaBnOJwKPgbNfakKBbdDdDAnUyidDdMjeIYBbnlLpHhDJpPFfwVvoGgpbfNqDuVviqannoUurWwzZNjjJQagSsGmOoBbMDdXrRitTQhHPpmEeqQrxFfXCdIiDmWwmNSsSHuUrgDdGpdzAawxSiIxXmMsnNXZlyqZlkKBbdLpHxXbWsScCWbdyYDTtFpPVJjaRrdDiIhHwWxdpPaNntjJgXWwxwWQEdDjZlMNnpseEhHUZzuhHODUPAYrRHPGeEgydVNlVfsSwLlXxsSSTtWZGjfUorfkTtfsgZnfAPrRpJDaAyYdyeZuXxsSaviOorsICEeciGeHRSrRVQlLIiQqcCYybswWsUNnuVuqQSRiIQqKkVvYWYixXKVhHjnNOoNLMwWmVfFvJnNVvjPfYyFxXxQqBbXfCmMXoRnNOoGJuUnHhWMCGgdcQqCRrbDdeEFfqoORwWLrjJptcCscsatHrRXxDdoOhKktxkPpKcaEyFfYfrRjJlLsYjJnNgGyYHhUueIeEIOoZzZFEEeYwkGpJancCWMmwgnhrBbRHNAmgmrRaczsKkUBIibpnNXVlOonNLaciIXMGnwgYWwsMzZnNmhHrkHhPLdDbTFOoOvVGMmzGCBWwXIixoONSdbvkNCPySsaAPpbBevwXxAiINsSnaqGhVvSuUsgfALFfqdDiawWKAWtxPrdbOeEOooYiIPMTxXrReEGlLKHhOoyYVvyYxXkxXTYfGUubcCoASszQqZBBAYyIODdLzhHFBDdboOWOoqQmLleEdZtvVrDheYyoOuUdXxgGpPvxjJXfFjJuFEeffFzZyZzZPpzYyYgMiIJfmMuqQSsgyMfpPFmtTPpjJGgBeDnNvVdJjKiZmxXKkMhHgGPpdLHhmgGQfqsRGQtTLpLxXNIinYyWwzZwKsQqTUKsSndlBDDqgGeGLoOjrrRZZeEIYpqgGoOQgcpziEepDdxxjJXJjAaRrfFgGnYCsSckKJAaPphRQVgCtTcSsRrHFAKIPpqyTAatnWwjKkkLlKzBbzOoIiZuyYlSsLGgHWKQqfFCckMXGgdDyGKcCeNsSTEekERrVveEaKemMEkZUJQqjZqVGgfFvQiIpxsRrDRrddQqXEeMKFaAavVxPOfOofmMFGLlpPzZrPdDNiDZQcJjCwOonupGBnNjKkOoVqMyYolrtKkRfsmBEeSseiIIlkPpYnFfNuUFUTtalssSoOviIgKgGPpVMtzrhHRZPpgeEedGgvIbBqwfFTUwWDXxGoCnCcvVNFpGqQSFcCYJZZzzwWZUuggdIiDuLrRfAooIqIiWjJvtwWPpTPpeWwXPdDWTtgEiReaAEVBJjuTWvVwnkmqLChYUssxXQIRrQqGLlRKkJgHeQEGgIsSzUuzZAadGCmYwFqsSlLOrTfzZmMAnCyYcHRKmMcCkrhWwCcafFKkAkKnhHNlWQxVncCEeRYVsSaAqrRxXJOxIpPeEYyjJjJueYyMnWVviTtVuUxXFbvmmWwnByrRUuXaAsVwAafFkKNMmuUnwWPpovrRvgnxyJjoSkiJjWwJMyiOHhIXxHnNmMNsrRpqQnfFPpeaAmwtTwmFfhgcCHhTRrirvVHdhBlLbDoObhmGgLDHFfhFfvYbBPpFfCcZzZqIJeEjicCyYQznSsNytcVvpFfInxXMUifSsmuTMtTLvdnNhHYyxxXdBbqQxXzAyxjbBDdLlAaoOvVaXqQPmMBbmVZCcRUueLyYZzleEaAiJodDCcItVZztTvmsThAazYWwmZbBsfLsSvYRjSsEeJBbKxpbsSpPtJzZjxqNnFfLqAawWXxvDHhceEJjjMfFGlnZyqQYvUiIuVFaNxWWkHUCJjCUuqQOJvUdcaAyYUvoCVzZQZzqlLwmQFuUxvmVkmMaAiIUHtcOTaEfFMmtDsRhwXxKIRryYiUuWvPpeqtZzzdXFHTYyGdgcJjHwWPpkRrKlLkPiXxhHZzCnNKkcPpjSOLYSsSqsbjFfwsSDeEuUeEsSNCATzcPFfipbLqqwrWzQPpBeaAMCJiIuOjdiIAcCalrjSnPDxNpbBWwzZEeBVrCGXJncJTlibBXuUqQDdKfFAahjJapUuKmhCLlRrcnNHYVvyQqKkVHTEetlRHhIizSXFkKZrRzDdfbBybcCkKUcCAMmkxXOhHxiIwWJTttzXxZXTuLlFfulLyYqQgcCGJZTCxTtdyYaZEeQiIPaiIQLltdEbBhtbBJjSYiSsIysLltPwKQqHhkHFKFfvtMytKEMqIgAvVmMcruUFfuUGgRCwIiRKAfLMAPpahHmGBugxAupfOoFkuIiXcrnNAapPcRrCFfPpRcQHygdrlXEDTwfFgZeSknmQmMxNuUnCvVtzZCchHJTtkhNyyLyLdDlHhXAaPpfPpxCRGSsbVvADpiIPdPsrOmMoEeRSpmMmYbBxeEHaJqcCQDkKamIhHiUxRrrRbCcBCtTAORxbEYQqySaILliBPwieETtCcGnBTjsSFFffsSvauovhHVTrRrzEDRrnNwGmMwWTtPmMZsSzPpSxiIxKyYPUMiIzQiNnAaPpQqtQZFfdlLFRrbBjPpqQmcCcjrsEeyYSVzZwBEUoOcCNbvjUuiFUjJNnbBJyxRnLiIOHrRngSsIitfFTUDIiduNLVvNQqrPmMpfAHGgTllBKkbGXxQDOoTpPCSsaCezZvVVGjuxfFGgcabBANnTtCeQqErBhVvObBogkbBhgeSUeJeeViIpFMhBWlwWVTzZDzGgOeACdfFqkVfSdYEeEGgPpGaMmAUunrRNFfnNcMJjXxmDRbpPgSDIitQlLFfleoVpPSjJQvVjJqsxXmMkOoKvcCOyUCcMmeEBiICPpDFfdcpFBbghJtTMfEeJjWexXFLlHcChtTUuPpVvViXGrYRPprRPpUxQqCEegXelmMfFJbBDaTtAsSdAaDcCLlskGcSbwWdDmUueninNtjVgnBeQchHCLaNnADdyYyOtTJqQjwIiWNkJjBtTUXoOZzxbAylLAtwSbBCBaAAanwDdWNHhBbrjJiCTxoowfQqRrAaFUiRrIVvkwYyWMNnKkFuPQqptVUudSpWEPpewjJvMCEruUReohEeEedSqGLvtzZagjaRhoBbNbBoOcKkBqeLhRrHlrvVRSKaAoPJtaAhHOiVHmdDEvtTVRredDNWkMmeEDiuoOlHhLFflLyYpPvAwWfFiIFWIiwRQTtLcUuCvyFfZKaAkBlcrvFOorbBStTBQtxXjpPQqvVJDdPpztTLlJjZMDtTdTJXyUxzvDdgJIoOiTtjUuuAJRrjaXxSlxtTXHhHGclodrbHhBHhhCwqdgxXVvVBbjJvdDsFQBpliTtGslLQCdnNDmfFvMmVnROmMCrRcdBbkQqsSVvlOozZLxHSRgGOoxCcAAtyYTXUFfeElcvLGrRgtmKHIQqEeZzQZzqBgZPnNkDdiIKCkKXkKSWiVxXAbytkYyuDdYGWqdUuaqQBnGoDdnkEeKgBbgzZGWwByXxqhUqaAQycKfpPFkYjMIKYyBbsSjJTaZRrzAaJPPSVvVuIijsQaeYvNtrRFQBhPiHRFlQXIaPyYywWNWsShHRyYbVXZhMIWhdQqEenpPzpApPwWrRJkHhUVvBbLGzFfFZTYNnCZzkjJipCcCzYGgrRGuUgyKTxFlLnNpfqkwWrsSRNnWWwxFmcCcyxoZzOhHIiRMbkKBmaAriwWbMYkzbBpPdFffsGVvehvRyOMzGaRXxrNiIkKktUuGgDCAXxaznPRrnNZyCcYVRrvMZTtPzgEetTqQRwWuACFfzoSukKzvVZziperTOZzCTDwAaMlLlLiIlLWwGFEBKoEuUdDeQWwOohHqEWKLlnWwiPpwWQPpVYaAMSonVvNqFfuibgaCdIeFfpPZrRkzZKKKJjEvaAcCDHhzvuDcGNneEgCdfFZpPzrRBbXzCcenNMXxuOoqpEVYzZSQiFfbmoOKRrkkKhjycyDdkKkKxCcusLwYYydDMmmoiIHvCcVsjDLlKCqpPnnuBdDoLiKtKErolQqbdDRUuvYyOojJNYsOolsYxkKTSViTtNtMfAYCcKbsSjEnRPpYNsStTWwqQoJqQnNfWwFjHhOdDpdJIkTZzkKbsLJltTqQKvjghyYMNLlwgoNnvVlJjELlLvVwMmXxXkKWwGKBrQKkcMHhuyXxtkrXfwWiWSuUHPpRDaUnNHiIlNsSCcbySyHhzZYwhHTtxyMuimMcYnfFNdbwWCaPpARwlUuMJjzZMOYySJwzmyYLqtBDBbHZMKkwpPWQzZhHnNhXPccGZzjwWYBCcSHafXaAxFYyCOsSDOodVhHFfvUurRiheZqQuUuUUGUPSWKvdRrVvCYglNBcxXUYtiIxeqFfUjJQPUGFfguaUuAzZPBgGskRrjprYymBbjLHhioOkeMmjpzmpDooayJKCUFjshHnNSXwWeEzQdbQqFswCYyHhKErvTiIsSgGmibcCjjJwWRrjXsSxbCcBXLldvVDBbkZVvKkzKeOdDZhtTQCcphkKqYAajwyYAjjsCfFqxFfcotaAzBbZozKycOuvbVlLtnyYWgruyOolSzrJpjJPcUhLlmqOopPQVQqAcCutqQlLxHhXRRrRIrXYqQyHpxTCicGgCiSyrTewxRUVvuVHKlkKIHhLliHhLWuKkPUuUzdDjlzKRLlqIiQxBsRMrBbqfnoOuUSuGgUsqYmjJEHqXKkrIirRJiEeYvcCeEWzqaTlEhHjTOtPPpmRFUTKrLlsNvFLRwWnDaAxcCoMmtiFPpUodXxOUuoRZzBbIoOsSkKiSrRkmVKEekUyXyEjzZzsSRrRNhTcCardDhHOolLipWwrRuUeGgjJSKjJUxjaAVqyPyWwyYmHHVvkFfHIhYHhyUrSOXxomaAkjqQJfKWtTdaviezpPveBzZpuVWbiIDdKgGbtnNExTtXYEeyFoaHszlyYiTtOoSaATvVxOocIWwGRDdxDuUvVdAZblPNZTtvYCchZBXDdACfqkEqTtyLtmKkZzMmROLEUuelrfmMgVvIpPyYhHoZzOERxXLktoOkKoOwNtQqDdULluiIiumVvzZMLlhHgGTTCoaoOttvYlWwLbOooihbBwWbPBZWRPycGPSsLliCcCMxmQALrRhSszuUjaNnIiOhqPplhHfObEUPMmTtLlLtpPTddyAHfFsQylLVvCWRVvIyYPwnIXBbxdPPLlrHAXxarRAKkdIGSlMqgAaojcCQqJOecQqXQkrjSoOsJiIMOphVeEvHITNNnnSsEdDchekKPqxXFrCsSUucRfzFqDozGTCcRrWFcCbMYumNiwaadDwQheuPJNnkJcZJjYyiWwTtJjbdUuEwrRaAQcCnAiDGgdyYFdjJhtcCERenNgkqbGjJnwSsWNePkKNvOrcCRoKpPeEzBzZbZcCdLlYyEZKkpGlubmIGgAWtUuCcYyTtFtsBlaALNnSunueEUIvEUXulttTRrcCszpjhqQHJPTtPEgGebBATtuUxUutTUZzCxXcYyRxtlFxbduQlLmMzCcfFFfAaCcFpSUqTPzrGRrgRZteYnwxuUGlnUFUqmMxXQAaufbwUsBAcGeaHPpzQqlxqFGXvSsrKkPpaAbbQYZbBrlNgGnVvyYmrQvcCwNDdnKVMQqmLlvfiIeEHhoyYDdqQUgoOliKfFSklBAkKdDNFxqQJLlkKNEDddxXDwVveEhGAatbZYCHxuLlQGrYqfRRndjJWmMZzFEnndtCuNqGXxkKcCgMJolLbqSsBAaiyfyYTfFpVxpPiSNnPpbBbhhEnNmJjqlnuhMPpZzEemwgLqZgOVAWSgeIicFwfFKkYZaWBbBbwkeEKQKjLOIGwyPZsmUueERrYXmJuRgCcNBQqAatILgGZgkKRIwXxpuUfeEJxjWKkLjJExCcihldbNCLWUuzrfwWserphIKVvVQQoJxwWkKXyYOHWAhIgMRrKKUKSVqQjKEqVBgGtdVvHhVmDpmMPfROMKUhpcCqBbGZEMmFlsSMlwaAtWEtOXJvmlnCcCcNLwWlQqXQIiPRrIiDdIVnyEHhexXYEeBqQtWktGgTbBVGBzcCVvwKkskKuLlovoOVHwWuWDddDdaAMGzMaAlWUXUlxVbqWshqQUEeuoRWwrrMmRbXxNNdqBPdtToDFfPdxHfWwFmWAzjBqsZknvafRrDdqoOrhXxHRkKQrRKztTGFDdJlzZLVvMQIqNWyvVYKoeoOXZDIlkKAGeWaAHBCYYyycbhisgchJLiIrdfqQEeFdjSsBOtbBTOoVUuQsaAYysRrtTqQXxMmJYZzNIutAaTrRlnbeEBNLUBiUubiIBIJyAaYjkKXwhOIisuiwffaEAhAodRrhHDVvGmJRrjpPbNSPsWSsFfdAaisuWklFDdiuXxUKnqyDaAkKQaAqnBJkVbBYrhUuHRUucCcxmmGgGeOTGKtibBEMUtTumZNNbbyYGrRLAacWwsSxZfzZtTgvskhHNnbBJNOGhHfrDdfjJMmMaQOoPpjJdeJHMYklLkOLeEAdzLsSxXkKyWwmMcJHEgVrcCDHhsbvVBhHVjevwaUeEXwAwCYZWwGCmMFvKkeEVfGPcCpzqpCcnXYvHhVyYKBdZSBCTTeErRttKmRrLDSWkBsSKXIBwgGRjAszvKxyLuOnNMTFOynMUumWSswoXxlLrVwpCcPmrTOpQHEgGxQeHzREFfeLHUBtTSsgyYkyWSsuCcgXxkNdFfpIiiaAOwSIispAzktTCclLagcgdPpSsJlXBbxaDdxFFDdHhzWHhwZunNUkKaETtciqSZzsnGguDuWwgjAaoOJxjJJjaXxvVSBxwKERrVVOFfdXxoOVgGcCKOzHcWXszuUMmZrUORHoCSxCtTTZxXKQqzugGKqQkhXSnaAfiGgoWwoMrBEjJAALlSmNdlRIilMAoPCcuUpOchQMcsjJfFQqmMdDSCyYkdDhRVvSmdDMsImDdetTUppPAJJkKexqRdbLqmFfMAcVrRvpPKkrcswPCWuUcAOnNuUKOoeEkpBxXOCPpLPqUQTkzhWwAaHkCGgYMuHhtneYyWCcjJjvVJQPpDdZOnBnafFQNpqjtAGldDmAavFuFJjrVbBvKoLTwRryfcdYIiPXPpXqxsErMjpsJWsSwWwaIYkfScvVdDjJlgPpGRqxqQxAaVQxPoDdRqgiBqQeEJyYUuBZFfkzeEgSseOHRKwyYoOoFOhzBgGtTbZSsmMIYyiTxodkiAnNiIQtTVGyvVvVBPpBctTtiIWiEecWXxNWQnNIiGIYyvgGVYUOebYORZbBJZWnNQoOqYbIEUPpueVBqcCIxTtuJMaqhwSsqZzXxQWbPLwntVMVvPVDgghHUuGtpPMTNHNmMKMeHhdDMmRreEBbEmknhntaAmTKkdSsDsSdDGdvpmwWvTNsXGgDdxkNnkKKxXSlZzLWlwWpBHQAZGgzmjUTdDtXicCQuUbviBywTqQtBCcbzjzoOFfroyBEouyigqwnwTtCIhHwoWwODxXdTCbPpvVYywKkdMmvVDWbvVxXYgvqaaAIKDOXtpPHoRrfOWkrhEeowWEGZKSszbjYyvVbIGQrOpXAwWaqvXXQrLjJjJCsFKkKyiAjSPJAamcCReSXQxxpyDFfCKuUkFYWtwWlOkFfQpYMmyPqRpPfTkKZztUfVMLgZzvyYVawWTsSJQPnqANbNVSsXxvoziIqsSEefFwENTUOomycKZVvKoOtqqQuOoQplpPrRSrRscobGuUgPKkDdoaCwcpWSCRpRKkrPCpxnNXPaQlDKkdQqBDNnrQXXxCcEjjaPubkKBEMivGgGgVBMmbBbaAkKrHKZzzZmqHCamnNTtLrLDnMsyYahHaebRfFnNmmMOWwOIcCFHhNsxHUZKRrkmRrMJjkztgGWwcXscOqQqKkQhrouRSxwChZoknNvfFxXWwDdDovsSvQqwWekWXbsAXGaALlUdUNAamMAaQISsCelLAffXALFfjDJjGCGAOoKkKZaPWoIPDnKvVGaACfFcUwYKTtvdUuoODVGbuhlEerZhEqbBQqXRrehUuqPotRVvDdMWvROMmNdEeDYbBogGftmlLoURrlpPYXLgGlkVZSENZzneamNnMJrxGgGgXWbixkbKwsdlNyYnMkTtcbsRfFzZrzDbkyCcqQxVDdzeEZvNPIHhitTQZgcgnNzyVfFvcWMCcmHlqQLKkDmMdhaWxLluAWsSVEJlTtLvNEengGbBSMmdRvGehjCYEeSsOoOoxXlZDawWlovVKWgGwCcjJKymhjElLDOoqAfzZFPpmjJFRFgYyonBbjUuKSVqQGFdMyCcYLlmDzHhLIileEXpPClsSbBgBBUunnzeITkgtdDoEgMMXCyvKjbNdYQNkIuGgUfLKwUStTIDtTCcwSpsCcnBpPvVPpSsMgZznNkKsSOmMaHaekKFfAFFWIUSoHWxyYbtTinZzDdtTyjhHSSSsqEOoevojJfFbJHhBbDDRZzbRrEeBljHFfCGSIwxXEgoOnTtFfNaiILidzxxXOoEOkwnQiqmhHiIjfgZvVkFaAAVAaRrNKzaASgGbBDdQYyNnbJZawkKMfFfFhXDpdOflyCeYyEcaKkAdDYLFDpbQpPDngGnNnBTtOcCHSwQBjJvXLuuUxKkuwlGgLLmZYXuUxygmcCMmaEeIiAGgDwUhOUSWZqPOopQbgvdDtXDdFfxTKEiIewTbNvipqxLMVjxoTVxXvIiewTnNLlWLmSsLfezgJjQPHukKkmorFdMvDTbvxXQeSskJvskuwWyYkkNnmuRrUGgIgGiGiHawSshovVjOqqxXnNvkiZzHPRESFsSRZwlBbcnBSsDLFfmMHIXelpPwJrRXbBsSjFPWirGzlCcqQiTtWbBwTiIbnGrRrUjMxsSypOBboMSzpYWgiolOoJkqAzyMmzVvZDdUubBWfCEGFfswoOavvVoGzQWwlGWHUNvVLQxXMeHtTHBiIsIXvPtFYDdISsbQGgBlLOJjjgGmuUQnUcTDNNsSefwDNrrFQLlsjJSyRgqtTUXhcyzdDnKkNBIiTggGHWoOrRePGgpnjXTCctTtTtXUulLxfHvVhnabLKskILGeEuzRrZOoOiIyYnOousSUNiIFkcZzCWVCcCcqRIiMlLLRzyHsOoShOoqBWBbwWhHwBRVxgfQAawWXMKknNkKmYyLZhAEgCaCcbxXSuPpWBuNLcCgXWYyaAlDdqQLUuNzZGgyJJjjrRETKkzZptXxXxQsOoSuYysJfFXxhZQqzHLljXxPfVvZqUDBoOXfJjLTQqQqXkKruXKknSsNapgGZSTLUyYxXxuAaNneViNUslLbSTfTwKkaiMBULkUuKgPuUpPLNAanlznNeCcDpPkVnpEjJvVgBQKYyGEreTHeEDfIaNqQqvVWwWeDBFfFfIzCjKjpHhpPUEHqWAAWInMUywWVviImBKkfwSstgZOdQfZQaApEHCsSetiPoDdmRcxXiQqICBLlbyYKqqQEeCcCcxCEGQmLsgiDmMahRaVfFvAppDgGiNWpirwcYqSgGdUuDhaYDDlpuedDBoFUvVZzMmuLEADrRdaeQHoAJVvZHlakQqKqAaMDmMdXmcIplLgCYCcprwzbpBpPHIrROByjJVTTAOcttbBUIJjAaDdTnkKWoOTjJKRrFfjJtTlreiGFRorMqQTlYdDVvQeLxXlKjrRJQIWwiFcBbawWDdxJMmjbwWzHDdynNVznWwpLBzeEaQqCcXrgivjJVCzZXtsIDaAdLPcCpZShAwWOfeTBkBwXxvUnNXxKkwWjJPyYbEZzVZEIVAYyeEDRrwkeESsFKMsRwWuHQqAaXeExiMmhKDdhhMYaApYQvJGgXukUyYusEPOoIoOiIIiRALlCctHKksTtMmSnrTtZZzvkKVGgJeYxYuvMKwWsxdXYyxDXrpPDpPOuGrRgwWwWfITfFNlLJjnOXYydIiNrlfaAVnqQSRktpPufrMpOoTotJeLlLtNnAKLlwWkQZwUuLluUVyIjRxsSQhLleMyQNFQRmrSbXMmrXxkZLeTtEJZubBpLCclUwrRkhveErXDdWEDdtRYsIcCzZIVvcDdFfAazZttTXPhSsxRirrTUaXxvEeMLrRlmbBRVvrrDsSoOHhdRMHuCjaLlyYAdDRZsLYetTEUQqBbRzZGLlwNTvtTBsRrSVnVvQqNUDdoCnNYkyYZOTYaAyOCXFfjJQcSkKOoJeEuEeZzUJaWJyQHKRrJjdDkvVvVPqIiQuwWUcCqHzoExJSsJBIIiMtVXSsmMxReJjLlkzZpfFzgGCcZPcWSfBDqjJZgHhGNnxJFhHfuUfucTWwtklmMLjYAiIOgGOeuUEdPwWRwWrMZPJaAVnNvlLEKvPpVIBoOpPbuUlRrJMRPJKSbcCpvVpCQqcqjJuQqeEQOfFoEXxXiITEeOoYywWyuCvIKkiVbnLGZzyFeEXxfcFfDVvVBbkOowjuUJsfFpugSsuzEHIocAhHmMhsbyJHhgCCpxHgGzZqmzhdbTQlMZbBWSsjsoDzpIiPOGgoZdlLVvmnNhHmLWrXxcBDbBjJlLyCIUmQqYXCcWsYBBbrRnaALaAheEuAdrhswZzUuVvIqQFRfFLhVvFfHLlLllrxRKTYUXxmJjyYCrRqRbfBbRrFkgxWgGleLZzOPpGWnsPpSMObBoSsfQDdCcqFmmHGJVkrRLjlSBtzJjZKijDPnylLrNbBeJBfFTxXpPtkyaFmNrRUunVOoRNnrNnvTfFejJOMQjJkKWwqmoyYZzEnqkKQmMsSIvkKstBbXyBbSLCcSDdyTtjJfFnVrBgGLORFfekTXxkIsMmBBbbbBSlOuUOobUNNzZQcktTdJQqbBShOMLlyWjJlSUXYCfFYDdaAJHMBIqsylLvePDdQMmUTtmnuUNEZaAxUCcuRrUVZHqQhdVpPKkehHkIiPpkzEkFtTfKiDcAaApPGYyBIUtTQOdUWwuDTNUuntNnsmlFcCzZfLyUuvqNnvVINkwcCeAaOkbcCefxXgmWdtcZzKkotRtTbBEDVvdRMUumrLlPmMwWWwpPIZbBUsOwWZxXcaLlWwUrGOoZpzcChmMHmzLlpNZTtcCcdsSMSsmgGQqTpPKnAJjgZmoYrVCcHEQqiIgGgSFDRzZMmrZKytTmRrBJjIrcCcMmndDYyNCRfMmcCFIiXYCMIifXwEerRKpPQFPfNnXtkZzOoYYydDyUuZvVcfFPItTRrKNuUnqQcAaytzfZaAglRjJhHruKrRrRjaUuPZNxHGghXDAaHwimHzxvBrdDwdDnYzZpAKkixnNqLfPjJprhIpHYybqfcCTnAaVyEAqSJUvsbBMmuUppjAfALkKlaAaFtkiGKuUkgmJmMyKpPGgZzPpkJjuUOoCkWwKZzYuHQYbckKCGeESsNOgNbATtDQwgsSyUSsKTYBavIwsZzxMmcpzGISsibihkMeEJjPpTltTVCLeEaAFfuxaaMmWwXKUuKkkSiIkKrRsHhrshjwWJXAalOoLtTKDRrorNFfMcrRqtTZqQzSgYyILhHPbqfSGgGDQAaWfFcHRdDDOLChHgxXvVhlLleEjlLVvJLLiIHhsUGwWVZjJXuYxjuUtOoxXmcNnCPpTqbsRfeEzZVRCLbKkzYVvVlVvqrfaNnVlLmMQqnNUIdaAKwrRnWwDYydMhvIoSsTjpOkWwsEQbCnAaaACcNnOHkKrAnNJpPGhHjJATVlTtgyYQsDIipPHOcMmmVPsDvTHhHbBhUfmKRrHhuaAveEVWOOXtcIRbcsWTaYvVaBubKnCrRcPpoYlvVqEbNGvbBfFiIJTIEeuUNEMkKUuBsCgTtKSdPeEpjLExPpGcCcXurwWZzyRgxIvfEwpPFmjHGfIizZPbuYEyTtYLqTdsAaGBUurdxXiICgeyDsFvKQDcaEoZdmMcCtGgvWwLwbHmfPvEEUNnujEusEDdGHKGHbRVvXUJgvECKkccAcmMnNtPuUpgfFGdzZqgLLNnthcCXxaFQqREqQwWZlsSLzenoOlnmBbMYNnghHgGGyGNlLholAaNrXYjuRrlLfIJpKkPVBnuLlebWOovfQqegGSsEFoOCccrRCsLlSRJCMQqJfDzqTIqZSsmupkNDdnXXhHwxUuXmMubBUWwOoTtWsnNrjJRvVrRpjJnNgWdeZRtOUAVZzsSJtbNgIpoOPWTtNnpqBbQbAsVvZzUupPcMmCgGerRBXrzZoKkacXTtJMmjuMYyAdkKjKkFfAhXgGpPlLyMGnNguUVvwSsVvWlLDaoOAdgGafFCcBahHAgrcXEeFEePpxuYyUYzZlCcYUuYnHKkKVvjTvjJVhHctsRVvwWkKrjJSTXqMNKsEzVUUuuwWvGWTtJjtdbejJAaEnAXgGxaxpPXmMXxNBRrexLRDFftTGuUYhqCuUbBHhCwWxUKPUeEDdHhaXGUbglnNFhsSBbzZHakKkrWrRcaAXxeECmMamMhHGiQjJmVvevuMmPpUzxXZPppPXxdDVkAaTYmTdDRrjJVSsAMmMmakfnNZzhWNnpgGTLlTHeDTHhqCcAZzpqzADXctHMmhzjiIyJjYUttTwWlLTmMUniINJjtxjJTpPjXoKPpabBuBYUuxsTZbBsSztoSsmCcMxkOoKqQXOZyYhHruULnNhvMoOktTPAHkuLlUqQaAgGxGgILtjCAaNjxcCgcRvbPnXRrLldiIpNsuUJRLDNnJhHcCoUjOocmEbUuqZwYyQqRaALlWQQlBPIqQpCZtyYaGPpgcnTtdWJVvGgBSQHhsRryEelmnNMosJIpNHhnKzZhCGDgtAPpahfxDZMmqDdQPpvVTQIiEVwkWOqQUVvuoHvVrWwaAuUSdTuIiUeAtoCGgThuHhoOKvMVSfVvFjaAJsXucCYydWwDaAUfmMqMQqmMWLlvcrROVufFCDuVjocMGgVvmJQqjcRrXxuhKwwXnAfzNLgmHhJHmMhEeCdVQlQXVvTvcCVBjJeEPXkbBryVlFSAaEMmezcCMyhkKDRrdHZHWwiItSSsiPpLluUIMRrTiOFfjIrRESsrzvMpCcCmMckKxIiHhAJXVvYaZDXDVlWLlwmVvtYyUMpPWkKwFIumpPxfFXNIiuUiZzPrRCTLlVdlMvVHJjBdUuHDhkhHKRmMmMItGHMWWMENiWwIPSnhioIYmjIKsOdnNDMmYCcXhHHhNGVpPoYyOVOWvnNSFfJjxYbNwWMMVXxEeBfvIwNmoOEUJjleELfFiXxXojTtQvzZyrNvVvXqwLnpHhPNaANaFtRhHNmMnnOoFNnfNoxXgpPdfFDhHGQnNFffWyMqQcgDfFkKZieHhqEhGjrgyYuUYyiqSSsSuybrRBHclQMKNtUbnBebmMBEHtThbBlpPLbNvQaAqrKkIyrRYenNGaAwpXxxEJjtaAMmTVwQvVinNOZzLFflOaFAaKkOoIilQqUcHpFfYgGyHlIiGxXZzZzPpUuRhHwWraAFQqmMmBbNnMfgLhPhCGGzmdDdDMAajyfwWsgPfcOSsgdyAaYGUuguCctWQiKkRlLrOoVDECcCcqQfFfFhXxHGPpTmnNlGgJjLvBbaAkGVSLAuYyfynNMmsUuSKLiFfEFfyYBbRrZzbMSfFFrMmTRLbBOmQvWwgNIiLlnGLlZzwWHhKkJbgPUGgrRNWqzQuUqdInpRpvXxLKklVPguUMmrRFoDdYypXAfkmkOoKBbxXxDoOvVScCXPozxXJjZzmMuzAeoOKtnzZEkgEeYrRxmluXxULwhlLhMmHLlUJjsSZvXLlxiIVJNrRnNYQwfFcCWikaiIAafgbBGIihyOoYGvqrHjcCyNaADdiIPpXPIZPFfCGPyvVizzVvRjJJkKlgErRQAaddbUupPLDNkugGtSAakQuUqWlPlqgryYSQFqMlhHFfLUuaAlDzIBbkuUPpAaNnEbYGyeEYUQqMmFznTtNZjmGgGQqxXgGMmSsxXvVUMmVDEwWYyMmsSHfFdRTzDJjMwkKmMJjuUPXxpUuWwuUiIfZlopPiabAiIabcClLaOBgLlFyvVLltgNTttTtTnEeDdtmjEeJpyBDhHfFRpXTwGgfFtTaVvmMkAEeILlvVPpQhHlajJFbBGUuSlLsHgqQsSSEeuUsqQTCctQkKkmMOoKWEnNeVEgGQqSsYpcnKVBDaAnNDyYdrRmMscHhCnWtFfMmTwmMbcNEengZYygoGgpFfoOAaPftBlpKRSRJjEerKsYydDSrvnpeEPeENVRjJmMkyAcCaDGguUpPdHhGjJhHWtTzZNgDdmxuUCpPJjAvxPuKkShHZCAaAsXxrRSMGMaGNYvVyAjLlvVPBbglYyLKWyefuUziBbiXxZeEzEYyyWwScCFeBbQqAClLXTIOoiKlLLlCckTAIiSCBbyYUuAatsSTSTPJjKkRwWllLrQcCByYDdDcmwlhHLNjLlZzgrVvrROcCxcpPFpgGltTncCYyJIivkIOoywzZyoOMzZmlLrsUlLvSSBIilLqdDvsrRrhEnNgSRIHhVAUzEYDdjPpEeIivVaFNzXxGSSVYyvsUIiuFeEKFwpPWRQqDdOuFJgGgRVvrpPzwTxcKkCsSXIiVUuvtjJsTtiIpPJoOjWDdHhFGgvFfLdDnzZvDYphyapueEdoANnhHaqQXxZzSPmLzJZzeqXxCcGPpTFfwWXxAuUDlLXAcCvfYwWvVzZNEenyBwQqwBhPlDLzQYLTtzWIiZDPRhsnMMAacRtTMJjuUOoguUGNnqIxGgqQSsADdYyEeqJnBJjImMibRhHhAZzaGkKgHONNAqOxWwXoQYyQXxXxIUdQYynFBPOWjdHhgGPkKcCjJNyiEJqKkQRrmDIYuGgNFnBjJCckKYyGpkfFWjoNbvVAtnVyMmYQqQajZWwkbbfFgAwMQFfFSsbhKkHnYlEeaXxiZzhHHimMIhsJcCQGgBnKMmrRxxXjJXqzgLlwREqQIgPpfuUFnNksdrJfVfQqWbBAawVvPpKkQqFvsPzVKkKIiDCyfrgLlwZcJjhJjgNnGQEumMmjWwkJjGgTyMPGcpCcPoyYOCixnGgNWqmeEGgvzZuAjgGEFsLUYyuPfHeEIiDdNlLTRrtcCJSyYUuEEKHhFfkFpPfDdJjeLlWwegGWwymMMPLZsJjQqSBFMmMWwRwTEFfsStTpTtmMPeEsSNNCECcerXxIiMjrfFiIDxXEeEMeEmfsSOSdhcCHeEXXBJjyYvkCrRBeEoOZzbNnnnjCrcMaOHtGgTnFNksSxOolLXnNDdcdAaqQcCAaMmOoDNvVQDdgmMKFfMmQCKRXaAoOpPgGLTzpPZtTBsEejJhHKHdDhkVGUqsiSsHhiVvUmLlNaPsyYSgXgGlLkKxGkRyoiIqQnKkMTttJpPjbBtqQbBNgidWuuUUOkInNiftTFCQyYwWJHhznkugdDGnWGgZzLMVvpgGPhqaARrqQLEuHhdDUMrIKkoKkoHhAKMmkVCZgGJjPpkKwXiUupRJSsjrPIIzfPpLFflFNnoXUTbBOotkKPbtTLlQBHWwhFQqvVjJmMBXxIotNnTkmpPMdWoOZajpmMnEmsSMEePpXXSsxxLzZOoXxYyRbBsSrvVgcXMziIZRVMKkCcZTixGbwRKQqWAnNaduUrCcRYyQqDwwQybWFDWpPktTKwdMQqmAhHXRttCcqIdnuhiIcCoDrMgGdGJSdDsYoPBzOoZQqAabmBbcClMNALAOQUoOJvwWhLHgQPOaoOHZbFNnjJfGeEqiCcISRrImTbBtEYeOoYRZzbsQGgdQqDgoYyOWbHhNnVvBHDuAvBiIlFQnNqQMmhHGJjftKkTFgqQvVOouHBbHhERjJZzrhybRISphBAabBOFnvgVvksiIoDdOxXxQIiTHJjhLltxvafFzZpGgYyjlLuSaIisZIizBckGCcudIZHzXBbxvnNqQxIhdKkNnVIivDNnHhcjNHjJDISsjKkSsLoyYFMmfhFTmonCcbBuUIiNIbPeELMTtEDBbhHgDdBbtTFbmMBfgUjJGZGgZLTXxtldbgcCGQqbiIxXaSfzZprRIuIYwXEACNTLlEeMOosSmvGIzRUVvzaAqQXxhHDdRaAXWwqoRroRrOBboOnNOQRrGgqQYPpmfFpVLlvSszEeiwnflGgLZznNlXxSsLNZVAaqQzZPpDtTZzhzZwWmMNnHLjryiSsIdQqFIBoObBpPLfFzZzeEkKTtRrnNUFfmMQqLllLbniKkgQqGRrRfIiuUNnjJMXJXkKVFTvkpPyYzZzHfFGgfFhMoHegqzZogHvcyYCEwWmMesStTMFcUDvuUbBUumDvVZMdDfoOdDAaqVvCfFcBQqwWqQnNSsrRLmNniRGqQRrUSsuIRrVniZkKcYHhQoOHhNnOoSfwWHQXxqlGmPEwSsWeCcAAivdlSEOkKyYRroOjqQIiNbgCGUPoObBppPFIifEezZXxpLvVdDlPTtnmiIMNXxHhAJjSxXsRrgudRrBryGDNugPprRGhHgGyYaTFyMmrRsSYhzsXMmRRrAXxBFownFfMmvVMkYNWwuUdDyYnyCoOcYYyyFfKkPSRNCcnoUuOkvdsSUupwSZzhcqQCHwfFWDNBYyAanNDvVsSdhwKiIvVkPpFPpnNNnjfnXxNAVKizZLLSzBbZBbAFfcLrRhbBTtMmPlmMwWCctzZWSRwWvZztAauWwlpClLcvYakwJFfjLHhpLSftcCTbBWwdDEbflqQsuUgnNyYGjzATsLxugxhnoyGhHmNAaDdncCMgGIQqrRPpOXnNinLEikKrRRBbLlBbWweGCjVlLYXhmrRvPpVdteETBbisgXrRZNcqQlpxAudcKUZZzzuoOFzZffwbBbhNdwBMOoemPkKeEppPMbBEeEGsSgXUbBeSEeNRwkKcCsSWvVXsXQqxyfFVvYtTyYXTtRrFfohHRQsSzoQvVyaAsoOYySClJyGgqQkkiNGgIinTJKKUXvKkVNLluKwWrRtQAazMpjOpPSsozZhPJFZzKklweEyYipexXkKYyUuEPwCcWXapJxleELCxXHhKeExXRrbBGfFgdpeEoOQPbBKEeXxZzUuSoOJoOmTZztMnhZzaNnqQYaAywDdfFeEjOHhxTmvTOonxqCcgGxBujJiFKoORrasSnNAwhUxRoOWLlNnwhHiIrRIskHEoOCcjJaAWmMHlLhpPoOQMmDdjJRjRrZHuUTJjJZGgNubBnwrWSswXxBMqsQKkmMrPphVvHNWzNnaBbMmAiIOojzZUdDuRrpriIIiOMBlLKzZfkWwhHyYxyGgYBbVvXqUuSbBorAfFacCMeEmYyEErRUVvtTEmZzMepPSMWCmMmBbGEeVXhHZkObCxXwmqQsyYeVkKLhavYtrSmYSsTtyqNYNniImxhHHhBipPVsnurRTtwjRCcUpeElXxLiXMmxXMZVvgGzQeiaAIhGltKMJRrYvVnwWRfuUMmFpPrNMfEecCPhsPpxCgGmDdGglLaAuQxsSsaFmsSKkMYyaEMmAbJjBnNahnwEwDzoOZdbFfGkKrRgwWvVBbDdLlkKLnOfFeJQqOojNnlLpPJjbUeEiIuOOokwWCtuTtkKoQpPtTIbVgGgrRhChlLHiPIilLpLlTrRtTtaaAbtzlLZoOLtTHsSrRvvaAUudDYyKQqxXvVIoOYrRPZzpZzTMmxXmMtTxZiIjkUIrpPkwWWwSrRzZnNIKtpCeayYAVCwWSjSsJItTJGgjLqcVJjvCSsUuKguUQqJgGjbBGedkeEKpPxzJyeHLRsSeEjtTzBmdlfFoUSsGgrqCciIZzjJxONxoOVFgEehHQPpAaoOqcCGkfFDIOTtoXxiIbrIibOoBtTAaRBXoKkQSUIiXCBhuTdyYDUJhUuHpxXovVOOdDPMmpSCcRTtnoONrqtTRrrRQPPkfFVEeDEedjxpCYylIbBQquUstTzZBbrIieEwQmFkBcSsDZzIJliIUmexbBhSFQqhHAfFmMfRuKkXgoBTomMMmOgGmilVbBZztLlVvDwdrRDzNnZnOMmIpUbnCcAsXxJjdpPiqQIkwRrWxhHZvnNTtirRINKkkqYyQKkGjJgGgaCcdVPptDdavnNHEWOoGqRJjmJjiquEeQqdeEaWBWwffFDsbBHhJRrmMNnHhgGbeEzZqLluUpdDPwWQXxBZzNnhUuHtTwWGLHhMmSsyEeflXGYyvbBPpTyojJMoOAbBvVDSsGVMzBbpzZBWcCFfwbupVvOBbCcsShHRGxuUPWwYyxXuEWuUfiTUuoOteEZzqSsGkUkKlVTmMtVBbPpxwGdPpfuUNnXPpPpscvVDiJeAaaAHdpyDKeNpwWmzVgUPpuGbgkgZjJaxXAPgPDzcCDOBKNniPfFpFjzZJFBDdbZnuKKWwkPpyYVvDKKwWUgGBLVvKFpPyGGSFoAaUHsSWwqIiUhHfMCcWKkvVLlgGTqQUaADFbBfdlCgsSYyEetKklXTsStLuBzZWwOpiHhKyYzuUkdYyDsSKFykKUwziHhIOoQqtlLMmSsTWwtYytUIizijkKGgJlLIzZLlrRjJZMBbeEDdaASgGshHKLlwSPpsxXkYQqUTsStuyKEWwaOlQFfaAfQqbwiIFfIYEQqeyYsFMmfktTtLlHKkhyYKjDdJgGntTNkidPrRQXapPWwbpxXoIlzibCnNcahLldDsSHABcCIeEHpeEQqxXHOohaAPkKMsXxSmhCctEBbOoaUuUEWlLQoFxXMUuIiZyYeCvGNaQqiIiJjNWwCfvOoVdgGIipnNPcRrGGggGgxXCjJjKkJDCcHcAInNSsiaChFEfoOCBQQqcPpCqoHEPUUuGgpifFaNieYpPoNIiGgmVvEeIzZiJjGgGgMniIqQpWlCZprFkKsmMpPgGZhHzZzKkjEXeEXFfrRoOaACcHsSKvVvVrRooIiWwgOorPWNncCHoOBbcCjnNYFflpcpPCPpUuLlYIiyeEDwWdOomeOOooGgfqrRxldDLpPmzKkZcCHhIiBJBbeUqvVKnIOBoOtTbBIiHhuUwYyQqWXrCcRzZxbHhoWEPpidDWwiKkIcCjQIibBwOWGgSsuUcdEbBDdcgGmeEdlkRAaeEJjrzZIisfnNUuhHBwWMmuKkUxXbpOChHcreEReEYPBbpHwkKmMWUZzyYfFEkKVvyXxYCcqXxrRqVvQTtGvVlLwRvisqTtWwQYOogWwgVjJjJtTvGrlIiICcSSYHhIJjGJjiItQqlsRrSpPLNaAhHCcnJjTUefFTtzAXgGYyLBOobfgQSsGgqHCcSAuUzmaAMZEerRaXxvViIAmMokXdDJjYysJjNnMvVVMBbmJjfrsSLZLlZyYcCCclkXxiIJjKyYqQLQYyFNniIAGgvbyKkYWwlECccCboOCcBDgGCcBuUIiXcEeCxbxPpvZtTQqzVxXmMoOmIiPpxrRXLLllniINMDswWSvVdSbRreExXNXnNxnCcCcMmJjHhpYyiAaXPuGrRBEeujtYmkKMdDyJuEeOozRRJjruUrlLGgZBEeOBbokZOovXxcxVvOoNnBlLbgWeFtTtwWJyYnNaADZzKkfFjmnoeEhHvVhHOhHXDdKkZgYyPpJjUuGCcDsAaSFfYNwOYyYvVyubVwWvBwWGgcoOCUZzumniCcAaBgGZzGRryFeEfgGrRiIPyYzZYxXzZflLNnjOphwpHhvWwVltcCPpstTSHhUBbutCvqNnQvVWUjoOJcCuTWjrNnlLRJoOjbhHBeZhTtALVbJWwjBkqIiIiQyYKvNnlOIaKkZzTmMYgEJlADujrJjEFwroWwyVCcvYtTDdEeQqQhOoTtHaArRmeEJiIkLXxlKLlZaQqAzhrDduNnAagGUcCcSXPlLoArRIisSaSsyuZzUYBwWbURNnbBaAWwOoUuNsSlxXwWbBTBbtpGHshsKkSHHhSBbtTRrbSJjfFszAPpatCckKBgwDDdyYtlLTDdddEeDhHMmQqjeEYyDmUuHcCAzZauqYpmMhHmiIMpBbyIihHDdTPQldDLlLbBqtTpTtYJyYjUnKapPOgGosbVvcOGWwjDdJlEBbbBBSqvVzZpPEeQsbdvVwiITcChwmVYQJAaRrjLlLllEefMyWwQzhHZFfhHAaEtTTJyYjQEeDIiQqHhxXdAaMmaUuPqlFfXrCFfrHhodEeDdDRLlromvVMAwWaOxaANnXSpPoOPpslDoXiIxSPpnNsieERmMNnrxXnNpPtTTSsfHhFkKQUuUlLusPpOgUOoLqQNQdDOoqDdyXZzVNnaAvHhVYyPpNnHLKklhWptbqEBkKkKzZBHAauXxFfrnNkegGEKNyYkmMKntOoTLmMsSLMCVQYyLlqvDMfFeEYCcLEeMGPpbOoBgwpoHheEeEFfICSPVSsvpOfFXxNKkphHByYRllrfFRLgUuYUrRmMuyGLLKkUBbuKpcmhEeVvBbrQqKksfFzVqDdQvwkHnWqLaAQhgnNGDdHqKjJuUfEehHEcIXxmsSMiIIivtFfdedBbaAgGEeKWqdDIiCzwwWWivVtTjJZzjJZzHhItfBgGPpNsVvpPSdCHcCsShvJjJDdjjJVEeBnTOotGgiqPkKpPwWrRsPpBKkRNslLbBqQBWnNMmHhDdBbLXbwWyyzMmeEkUuwWhgGHKqQiGgJyQREgGaAeXxdIiNwWTtUAipPcCMDSsUufFhHfGHNFfpPxxXKFfjfKZzLlPSBbsSspWpPNwvVxXQBbSEEeesnNpsNeKkSaiMGgmMmzZtUIiupPKkOohpsyYSjJQxlzLgJjosSOdDzIiFTtfFfiIZMmOClLENrRMmXRrYydDRhoOHHgGsSkpbraAGgPVvItrRTJNnjHzZzZWnNhLVcNnCpYyPvOoWwHhoOcCiITtpPlpPwWcYyCOVNQqAVgIiGUuPbyYBgoOIIiAXRrNnePfFpveMFfdDCcAcCaIUunNipqQyIiYBbhHPmuUWwDdaAtXxmMndgHhIDdiGgGwWeEAqQODdaAoaUmMkXSsxBbKuiIaFfDdihHSKksIWwBbhhHKEebBoBbOVCLhHlcbBEeTPaBbATtHhRGkjJKcChnNJNsSnfTXqQxvVJjoOcgGRrVvCHteLlEwRrWTgYOoEehHlYBbCubIiBaSsALaAlVptzZpMSsmBbZzXxEedDVvJjDEeXDeZqQHMmVlLEeLlMmvbBzjJZPwWQpRrGKKkkWhxXgIiGIOdDkKjJlLIcCioitdDWNnGgNpilLIqAaBbgRoQqOTnNMLKklVAzuUZroORaPXxpAZCcOozadYyDwWJUujzZaNnBnPUubBTqPMmpdxXXFfEeAaxzZruURmMcCUEejJzYmuUHhwWUuJnFtTIiPpPoEeDdHOUivVISsZUuGTDdttDdTJjJjfcCwWTtrTtuUgGKUukkVvKcGgCGvTXxEejJkruURAWwDHhjmMCZPGFNndxXDfcCjJZzgFbernDdvVKkPoOplnNDYykkWvWwVvICcSWwLGtTgRruUlmQqBGgbFfLHhBbePxaBvYvVjJydbxXlvVGoOoKZvHhVbPpSGgsBIirbBVRGNngdcwWCsSNnYJRrFgGfjOgGQqZzLlJaiIBbAjEbIiBtTPtTpBbWwnNzXxZAcEfFeCSxXSDdFfnEHRkKmqpCnNlpPhrRUmMQqUuAaYTNxXfaAdDacCQRrvxYVvyRrPgdDwWCcSbiIBRjCcJDdAZxkKtYIZyrXzAieExXIaZlxYydDakmMKXoYXxaOoANqQPpTtLlIiiIHhmwuULBblZWEeJxSsGRrUPpuglLEmGgNKknEeMVvfaGgFfBHsShEYyrgGsOoueEUCrRwWTTttyYAxXaAYyaceHMmhmnNMEsScqtLHyDdwNdDYynsQqDwkUuKxTvIRrwypPYrRrHpPeEoOkKlLzXQFfqUIiulDhUhHzZyYZzuHlKPpAaoLbBloOOkTtHhsSLTtdkMwWiIDsfFkKrggvVQqPRrQqrRpMmYGkCqQFSsPpTtMmcCSShHssSBomMhovoOJqjJQpPoZZztTzOjmMDbCMmqSsheEHAUGOAaPpFrinMmNIxXvgGfFZzXxOUZzsvNVvnBbccCCYIzZiUeEuZzjKkpQqPyYjbBpnNSsKkPkYCXxOoiIxiIRrKkyNnPpYXjEeyYgXCcRyYjMmzZEeAaCbBtqwWQTNntTTtKiINQqhaAHpPiTpsSRriIaAGgFfTUtTymMTtYHBbhvcayEhHXxgfFzZzZPeTtigGIigGIEzaOoApPNjJwWaAXtTxRznNbRzIiLozkKZygGeuZdDMmEeThHtnkKNPpYIMmDdTtHhQqQssSSqQKkNDdhHkhHKCiICsScLlzZgGmJwWplLPBqKZegGRKdDxnNXHhUsLljEAaRreuLlLlUMhlLFQJjqiIJAaXgGjoprRPONXxgGMmaAFfHRrhMmNCcDiYyktTUuKQqIAaNnRrWwiImMYykPpKkGgWKEekUlLAaqmMNsPpSBbnzxlZzLfnNZTsSqQaTmMtABhpPrRrRTFIIkfJjhHFrfqQqymJhHjXGgxMOosSLlHfFgGzZtTMmJKeXxqQEeEYqQMNXxnmpPyCWwObtVOovzoOgGSCcWwMOomsSsOorrqQdmMQoOqiXsSxUjJWwXxhHpYZzvVyPDdDddcCFZzAXxGLlEeDdDdmPpJkMkZziRrzZAhuUDJjdlLnqQNHbJzZVEevfFXxcCTtgHPphUuAVvGagGATgfrpPYyRqQyYHjDdJMyYoUDdTtiIRDdnNdVvXNnhPGnNaAgpfwWFHmjBbVvJMEeirRRrwWIuUbpBWwIyrRpPyYYibSsWwWSsTuWoQBbqEewWyCcRrMmSzZNdtTxXyYaADLNnlGnNrFYEmMeyfRgezZEpPAaCZzcpdDWwilDpPUuESszZbBcCEerRrRqTtQelBnorMmRwWJJjrblDiPpIKkZfNJjaAsQbqQbBFfaiIAbBHtTBZLmMSskKWweEIicCvwGgsAlLaSEAaeggKkGGOooZzhHFfiUEbJjBKhAGXbBLlSsjhHJYyoNnmbBMLlOwWXtzZhHOoKKkkRrqQgGsUrRHgGQqXeEwWCcXQGgNnKkjEeJnNKnNzZXxSXrRLlxjJeaAELlYlLyYyVvLGMmXxQOxIUuiKJnNjvVCSsfNCDdyNWwINygFfhHTtNneEGbDdPpDeEgGGOTTuUPNnpnNIiCcdQGxWwOIIiJjIiFfBBbKkbBoOrRbiIiepWGgwUuEePAaxgGsSHUuSseHhEJgfgGDoOdFfIGgQqmMBWwOkKFfmjJMNnSsgGrRuWwVvYyeYuhnNtTfFyRrRrHKZDXxduUquUjJQJXxCcjzkjJzZYiuUgDerREdLlkLldDEeWcQoOUuGXlLkxXTLAatTlgGiIUMXqQohHPpjLuonNOUeEzLNnfjJTGgVEevtFZnNjHhJjJjJmQqkKMmMqQnNyDntTIijuUlICusSUcCyXFfXxxtTYObBFfFftTnoPiIpPpzLcClGsSEmMegVvGlLJDdjTtjyYJyyBbYoOrRbsSpJiSrVvFfRHhKyTtYDdkskAaVvSsXzZebUbBEeMrRLluUDTtdYyDduUVLluURrvWwyYuhHbBUeEeVvEPvVpUuIixXUupLRrvVlsSUAUuTxXtaWgqQGVUuvbBzjJvVBbaDdLlOdDQqLlqXxQYyZzcPpCFHpPhfUuQoOIzeCcEbBeEjBeEbzELldRrTWwyYpPSyYNnuUgtTcCbBMdMmbZWUTtRrtTusSkKcCaMAaOoTjpPpIibEewTtGgWwWxXButXrHheKcQNnqCbBeEWwgGVvVsSqQOovQqKKkkkadOyYWwCcBtJjyYTwPpQWRpPrwZzxYRrmLlDdMFfDdyayKkGtTgQEeqBblLYkPpJjKeEoNDgILirFfRBbmMIlDdKkWAaXxBbNvDlLDTiIunNLlUufdbeEBeszZBbyYYWHhwOoaOoAmMbtTBTfFRrwfFWxXvVQqpEePQFuMGUhzQAaqpPZdDdDHLlYyHhwKkWFiINnGrRTtzGFfXxOLlKkogRrZRrcCzZYOoyUugGoRQOtVAYFwWHXxhdDENneAaSgGsWRrMmfFwqQSsLlfpPiKkInsrRpyYnNLlPAaxtTNBbNnHhJjSsvhHNnTLleEhHhHtcuUgjDdrRFfoLlOttTTnNaiIAtTBbqGgQICcejfBWmMEeEcrRCeqQsxXQqNnIisSxXsCorROclLzwpYyVvPFXFfIixPpHhbCOtNnTBbfFmmMfFnNmwWLxXlGgGGAagUuAdDaAaZzLlgGQMmqQqITtiYLQqtRrWoOMwGgWmUuTEeVKQoOqdKkDKFfcuaEelLxXVQqAawWuUMmTWNnSsmOlLtTtTobBHOoIibNnADdacCHhoPtTpqQOByaAdDYhVvuUMmpHgGMmLtTCclVvdDtThPqFVvfuaOoATeEPpufFUPpjhkwWKzZzZorROQXTtxKEhHeqNnNnQsSyYkBhHFfQDdQqnNxXAxqQKkXauUpaAmMPwWjEeMmbBQBtLjJeEQNnqaAzZTbsGgdDYsbuULlPpsSUuIYyiBcCsSsFpPTtfgGlzSGlptyzoOJPdzZDpMmwWjRzaJjAZGBOTvVTtTqNntTQhXxhHYXsSPMnNmIiaAFhHEzZHUPcCpMmptAaTYeEpXxPjaAAaBbCcxHhFfoOLlHhXJEQcCqexDduUhdDTCcCctakKeEejsUuMmMBDkKZzppOoyYPgDdfFHbBhSsGejvVRrsSdfsSxXRrFMaAKkmDCcdjJaTtYpPfdoOhZzHDQqFxnNDdLlXFuUjJBbXxHrWpLvPHhpVNncpPmOQMvwWVIiRfFroOmCrDdIWwBGgbZzXxkqQCcOocCWNnqQMKkTuUtJjlLmpKsQqVOYKPRrZeEgHfFhUgGXQqxjbBJuQqVvIBbiCqQcfpjJDdPHHiIjJkKgQqGlIiHhDBbdDcZzCIiBbTFMkKLlYyLligGIUdDuDdSgPpDdpPGtBPphHKkanNAbKkqJiYShHqscVvrVvcCcCRCIibBpgaoJjNnOTtAMeEmeEviquIiaJiIjAuiIUQqsSeqnNTtQFCcfhYybBXOUBbCcuPpGNnOogGTtrRgvwWFfVNreNaAnNnERqoOogoKkHPpSszxXZkKGaLlxXtTTtxXxXASQqoOtTCcctAaTCssSYlLPIihrOoRrDHhnpNnfGgCcFWwrRzZLliftLlDIiddrRJmtlLrGgoORTeNnEiIeEKTpPxXtdDkMrRUWwuUcKVmMvUuIiIizXEeiIAaHhgGTtDdTtxhdDdDzQqIitTsShIoOAPpagjNnZzJVvDJjIidqHhQCcGCcJAaDSQqQajJAQBbqRILlzQGgqHhCcZBbazHhdDkKDdFNgGntTtTplLKmYRrjFgGffHhJjJjFuULtyYTlfoERCcrlLeOFPpyqzZUuQYBbmSsCcqIJjiQaASsjJSFfVaAvqXxQuvVFyYfBwBBzZbBuUGgOoOEeolLJjbbUUNsBRrbSsYytTSsofFOSlQMHWwOfFzcTtCsSyCaAmxnNJjQpHnNnHhNhLYJjtTIRrtTixXyyGwWKkoOQGBbgqLlmHIiUjuYXqQEeYyjJYsSwPpWwWqFoZrBvYyAaVCUSsuhSZpMmPzsEeJjfFdDrUuRvVSJjYZzJPvGgVpYyeELTumMUBbaAzZpqBgGbquUjVkKtTAalCcDIidgkzZfFKjRrqCdzZDeErUuAaRQKcCkqvVEtTefipwpuUjJlqQLNrRnvWwaADnNdBsSuqQUuUVvzZPpXxbOpGmMgqQbBPdGkKIFfimMyLlYgDEAaeGgEydzBVvbPjJSeEwWxXVqQrRNnHZPIiLqQVvVvlWAKkdDaawWzZQqosvVkKSmMOAfRejJniIKYycqBbQCHhnNtTzZQHAahUaJjoOAiQqqKkbeEBQIOoZzZzuqqbBQfFmajJIiAhgCcGWwwbHJGZzgXxjhXxBcCJiIjSsTJvzZvVpPVGgjQqPptXxkKuUWAaOqQPpVvdDbRlLrEeZjgGJvVoOHeCcXxwCzZcLEelThHQqJjtiLvVlHfFIihCgGLVvxdOoiIDpPnNkKrYYbBoczSsZjoOJyYCNsVvRrhbAaIRFfrVpPvaPpAkKiBHHqaAyaAXxYYyQXxYCcycKkCcCMMmmSsZbiIPsLxOoXHEecCYyhlUqQCcCBEvVeEKkRWZuokKqMPpmQKSsmMXuUyYwWwWbBQCcqZzFfoORfFoVvaAaAeZcoSsGYygmqQARraMNYCcyysSmQqgTtGhHUVHHhJtoODdUZzHhuKuMmUuxofFGgWwfqUZzeEMmNFfoOGgOfwWySDhHdApPNnDdjUgGuCrZzpRrZMmJuUjzDdCcPUEeuHQqLhuhWwXvyDdYMmCcVMmxWwpPFfVuUXGgEHhaAHqQcCGgKkulLhHqLlQfaAFUhgGpPiJjrRMfFmxXRXxgGIirCcrRhSTDdtsiImMHxXkjBbmSUVzZPpvDducCTtqXEhHmMeNnfFeEvCcVQqRriIJjXdIiDYeEyFfxbBrRxoOJvaAlLeSsrReEEeoOtTVQlLqvkYyCkKevVPpXeECRrcxgxXNsSfEeFnOHSshZPpAaPpbBxXjYyRJAahwWYyHaoYyOXxAbuUBTtjYeEDdaAGXxTaAtiIYKcCkydggyzqOSsoKDdYyjiItTJfJjJrRjFkqQfFEeEjIqrDdtTaOoAlLCcSxXKksRWwJjajJpiIVXxMmvARrJjElLPpCcezzdDZNnwsSmMiyyAalzZCcOouXxUKKkBbkLubBiWwXxIpgGPqQUroORmMlGgewWOFfYvVyoVgGgGiDdwWGTPpPpIiWhHcDdCrRBPpyzHhZlPpLYbHhVkbBKklLKOXxbBdDtTNUYyunoXxVzKkqNnoOQAaZvsWwSJjIgzAaZGpZzIQgGkjJKXxqiNlLEentTHfFhKRrUukRoOrHUuhIkHhMmSslLXxpPCcUfFXxBcCjJPpTWKcCZmeEHEdDeAaBJdDjaAUuyYjrEeDdiJjLlxXPIipIWwqQLlCcRqQIKkBbSDdMyYgIiGwLdDTtbByYZzhHglSsvVDiIdgGLrRwcCcEsSeYYyyCEeKkWSjaArvVJjAaTtOoRHhdpPiIDeWmMCyYcFfNncChwWHDAJtTZzjBbNPUupKWwmMxRrWIwWjJmMISIisilLUuBbhHVYyKFfpSsPIikgSsGvCcfFJNnwbBWASsWwHVvhTtqQlIsvshHhHLpvVwSsWPWwtTZJjzkfFaAKoOrFfeEtTXFfxzmCcOoMuUZvVRBbtwHhxXcqeENnQtTCxgGIiIeUuEeEBbhHmgLllLzvVZGGgMcgGEeCdDPaAwfFWDdblLBAafvVXLlCCwWcXHhxrRVvLRruJLliIjMphHbBPmmMoBSKkhHzZeHhEOoMmVHFfLwWTtbBlIoiUsSuIaAsSOsSIRrijJBhHbfFSsEeiODXTtQvuUVzkzZnFfxXMmNRrMitTIChHWNnwNnCcKkcmamiZzlLEeiIjJFfVvfQSshHYyhswWcCSiIxyYXHqRrWVvwOPeZzEpobIiEZzeBgGNnuUnsrRrROiXNnhJjHitTIxTtTSstiIKkLlYrRfNnRLlOorDdFOoaAZcCpaApPaAGMYyfFBbMmXtTkKxCcmoOzlLiIZvVgwWzFfZwVxXBbjHhJZzfFWwtTjJDFfduUsSYyJjSsveEFfxHhtTghHhHScCsrRBbLlGmMCclsSLgncHhRrcENneCWROocbAayYoyLMBbwRwWrZzmbBtTlLMWrRWwlLLllLNnUsWqQjJwSlLujAaJmwWbAMmacPeEpOldDdOoTtVvfFDtTUusoUuOnNKdrRDFUNnYyurqQRZiIzPuXxfAxrwEeWGgRrYyQvVGgqMmZOouUzRqQAaboHhOsSBZAazaAQqSsbmMbBBvValLEeAfYjJBnQqNTtFfbXlLXuUxxddDDphHnGEeFfgGMzIoSsiIAaUvVuGgTOosSwWOotdDOuoONnUQqmFoOWoOzKMvVDdkvVQOoqKLDdUugGlXxmtFfTtgQqNnrRPiIfFmLlrRMwnNRTtaArIiZzjJSsWfyYFKkyjJKRrPBEebNrRnGgGlLzZgcCcCTwWcCnNtWwpMeESWwsGgcCWwQqgGiuUboVvWmtRQqIivbBVwWrsBbSrRGuUgPVvVvxWwNnwjJJjseAaEaAVvSVvAVKkKOLlwWoknWwiIBbcCAVvZzakgGKpPxvbSsBBOoFfBbbHzZRrhvVVpPiUMmujJzzDEedUNnKYyIiFfNnoUuOVgGvgIilnNSsaAmMLqQGhHkquUWwtTfKkFicCZzJiSsfkFQAaqfGfFgKFBbyYIiDddzEeaAziIZOlLjJmMdDVvtuUTZUuZzFfdWwDzmMXxbIBbiiIQqnNqQsSWHhaAjhHJxXRsSrEjJeoPNnstiIdDTaASlLBFpPnTtNfbdDrReBbQqJjIiOofFEePsSpHMmhHhfFeELlcCEiJjUuiCcIljJQqhPAIiPpYgGFBbfMvVbBgGuUmpPLDSsdjjJeEbEepPgGBJFdkKDgGBbhHEehwWkyYMkixXIKeENnPgoOGXxpfdDFDgGLbBRGhJjHTtnNjJyYJrROogSxXsDBbdGLlFfOobAFfTxrRBbzeEZWSsJDdBbcCuvVbrRvVWwBTHIihaAxRrXPFfnSsCcNuhGgHKkgGHhtEeTLFfWOxeEEyYVvejJWxJaTVJmMjgGvAaJXxjrRtVvAKgGFpPiIfVvEcCGIiceECtTDVcSsFfeErmMRKkCjSsJbGgkJdDIiYMmhHFfzZQqnNXxyjvtTmdWwPpmMIiLvVhHlWwjJVKMmkvZzdDDdTtTtYyZzweEWBrRXxeEuUbBCDdsSoOxaAzVvZjJXKkJVvVLldDrRmMOQqsOoBRpqPpaAQsHhSGxXiIgPiPFfdDpIFdDUuxXIiYyfmgGtTMdOoDrjhHJplLlLXZzxbYyBPtTLMmlCBbWPpBbSsnNwWTteELPvVpPmMBbuUpePpdDGgrmMmMuhPaAzZwWpXxEediIDYnNWwrRPHVvhprdDFiyYIJbBIijTtfFPpmMulLlmMLUDcCwWIidNnvCcVfOPpcDjJdCoRZDtVvTdzZztTqlLAadXxDOoyYHUuhyYdKkQqdDDofFOlLsSyYMaATtAacXxCmcdMmDvlBfFbneEtdDLmMBbXxkHhKuUqPpQlRrCcnRrpPNTMmIiNfzZxXJGgyTtYyeEBEebwWYEAaAaRrtTCcNnBbejvVKcHhSsDdxtTmMTtQjJqMmyzZVtyYTPpXWwxbBELlllLcCLelIDdiWSsrRwiIDMmdxBbXZnNyYfFeHhUuExXWrYyKvqQVeEiamuJjUMRrxXlUcryYRafFZzFffJHhdDjaAVvQqySyYsYFEZAaSszefAkZzKqhJXxpPjAaBNguUGnQAbBagJjGPpIygKkGjJnamMMmSsAfFNQbBqYMjMIimYEesSgGyJmipPsFfSjzdDZJnPpNcCeEnNTtnPOopByYbHhNDdjNnoOFfWwnkAawWKNLIisIiJjIeNndDPpTBbtelLEjJYyEvVUuZzcCjGaAGggSsyYJKZzkaAhOoHiIgYdDytTnNGJyFWwflLfFnXxCGgfFpPPpGgcrRtGgTiIrmtTMRpzZPmoNncCOMbBSSskKseEOoJjpPOodDwWsHhSMmNWwlGWwguULnDWYyJjRrCcjJOonNiIwkneEEeBcCbTCcQqtaBbYyFwWfrRnNVejJEKejJEzrRZsfFlTteIiELHvVfcCFNHhmMtTnAPpBapPAbKkchHWceEtTCwCLOohHlsZIictTCzSfYyAWwaRuUZzrAadDgGtTJmMPpjUFfDdPpJjDdBbusqQIfdDFVvlLiSeNnEfODdmMorRBeTtfrgtfFTGkWwKRfFjJFfYyzZBQquUMmbBbsSHqQhVXxzZvVyYTtuUUtTCcLnNluScCLlDdcCiigGHhTtISsHTUuthrRFYyhjJHfnNHfFhRriINnMTtaAmhCcbByYlLZhHzgGouUkKgeEGOvyqQtTYUuHhBbuUVOqkPpbBaAKQXxhHHqQhHhoOfFeLlOopPKkEPhEegGWnNPpPTtoOhHpWfiInNMmFnXxNwJjuXsSxUwRrioVxaAXtTHnNhmrReEMTtWwIbBiDdOFfdHhuUDUHhuoOhiIbyYBZzllsSLLEoviIbBVvxXQVvqTlLAsYybBSmMFfcjJCNntGgTCvPpVmSssSMckKpPQqVrRbBHhuUYnNiIyvroORbKvVEcjJlYyLOAaiIodDCxNnYyYyXMEemMmzcCZJVvuiIUySsdDYjNnQqtTCpPcwWitTISsUsSufFdDarRAedtSsTDIvViRrkQZzqnNfhHFwxXWBcCvVfjQqyXxYyYMmuGgJdDdDjhHfFUyYBAEeabJFjJZzaOoWkKpPwyBbYLfFliIsFvqQCcmgGuHhXxNFfEMmeBgeEcRrCGGIigbxXndDVGZzglKkLiCVvEegGczZyfFYcWmMXxZQqzwCNTauUnNATOdyYcCDoPpzNnZtTnNyYwvmMkKTtVBbGgWufFUugGdDkrRKUczZjJJjjzZLMmLllJaAGgrcCRcCiIUuCtQCtTcFfwWqQnPpNvKkVxrRMmjJjJXUCcukerREyYdDKqthHHPsSpVvaAhPpgGKkiXxIVwWSsvXUuxXgtTBbnNYyGpPSrQqReEeErRRPpcCIgTYyDdXxsZOozSYyLlQInNwsSZzznNZfFqQBbpPJjBFkKzZYyfrRiqIiQINnjSspAaKkiIsSbgkKqQpPGXxuzZdCcEeDkKgGwWUCcRlCcLrXdDRrxJMAmMamMWwmvVjjJUukLlZIFfWeEwiGgNngGbgGBzxJjXBBcClLgGsSSsbIpPiEebJBbjKyYDkKdgUEepPcCcCXxhVvgGGxpPPpXgHbuUxYyXMrRmtTrOMmoRwWedDajJyYAVgGRrvaAVvuUExXBVvnNUufAaFOoQLlqcCOofFkKeTtEjJdBkKbOiIxXMnNtrrrRrUuHhRRaARRrTmoaNnAhHadDSlLiUuIdQqqQDsCEeQqcAyEIhHiDdKkeXxEHMwWmhlLRZPpzrHheEHhHhGBqQbOogpPeGNnguUvrRSzZFfsYygGnRcCrqxZzXsSzRrZgLlGQoONChHWwxUjJuSsRYyLpPlmMurRPpXxqQQkKqXEexyyYeEzZYAGgPpkKwWakKnNoOjxIHhiXJAeEaJEeGgdxBbXDjpPULlrZzjLlgBHhbDxTtXdGtTOoJSVvoOmMfFsZBbxXMiIaAeEmhhHHYeENsSEenHhyMmYSkKMmsySuEenDdrRYyNvfGLlgFVJjUeEeRqLlQPpDaAdQqFfrwWmMEbBsgGzdDIiSsEXxeCcQaAMmvVqjEenwgGWNZzYyJFfnNCeEtNnAoOOoaTOowWQqfyYxXgKkGxZKkzXdDhgGtTHoTtQqwWOaPpdDAgdrnNRDkJjKQLbBVvlqXPgGtTFfpUMmhNAanHuQqMwUuWEeTUutuUmxnNGGiIgotTOvVaMmABbXTtxgXxgGyYeEQUuqCczZTtGDAadfFyNnYmCcMjJLlWLiIFfABbaRrImAaMEeHhafFAIishHDiIdCaAbBcmAarRLCclLloOKkqQMxOKkPpoXSbBSdDtTsXxhHcCyBbNnTtgnNGrRYiEevDfFRrdAaWrRaAwnyYTtNdNnDVlTtObpHNnhPnNVvWYyNnMwWmUukKSEZzesEZFfJPpjzltNnTLiLlIOwWfFjJoeKCckwIjVvJANzZiUqQuImMnavViBqQQCcMmqAaWwWwbBZsLSsDqQYdDyWcCwdvVhEetTpPQqEeIiNxXGgjJnfFKUuJJjjLAazZlkwXxVvNndDWJZzFfjNrRnQqlLrCcHhWwRdDLlWkKZCYyBbYycznbBiIBbNkKwmIipPAaKyYBbRrkmMaAjrRJMVvsfbBFjubxXBUPpJCWwkZzKYPpdDSEessdDSVyYvZqQzUIiuYNnNnyYyyMmcuVvCcCevVExXcUiIKPpkXrRxlLTtHhuYNnfFQqyKkzZWwGcAeEaCnNQBUPpnNudDjEeqQJbqOoaAwWZzXxgqmMzZDZzdQHnNxXwWrRSPpshzZfFNVvuhHUiInjJjJFZzfrRnNPpiIeEmeEMmMjpPQqJmMKCckSHctTCSsSshcwWCSssZIizHhyTtktFfTRrzZJjRrKLtuUgxXGTdDlSsKFytTYmMjbBRrLlJfBbWwuWwXjJoOnNdDyYVvxUCAoOackKvVhYyHImWwMiLFfclLClIjJRrJjKkhHiNnYyTVvBrRbjwWKkRrCcxXynNIiLluUYcCBbFfJoOtatTAOokUcCIiPpuc diff --git a/day05/part1 b/day05/part1 new file mode 100755 index 0000000..4761380 --- /dev/null +++ b/day05/part1 @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby + +input = gets.chomp.chars + +l = input.length +loop do + i = input.length - 1 + loop do + break if i < 1 + + if input[i] == input[i-1].swapcase + input[i] = nil + input[i-1] = nil + i -= 2 + else + i -= 1 + end + end + input = input.compact + if input.length == l + break + else + l = input.length + end +end + +puts input.length diff --git a/day05/part2 b/day05/part2 new file mode 100755 index 0000000..b71d84e --- /dev/null +++ b/day05/part2 @@ -0,0 +1,34 @@ +#!/usr/bin/env ruby + +input = gets.chomp.chars + +units = input.map(&:downcase).uniq +lengths = {} + +units.each do |unit| + polymer = input.dup + polymer.delete_if {|u| u == unit || u == unit.upcase} + l = polymer.length + loop do + i = polymer.length - 1 + loop do + break if i < 1 + + if polymer[i] == polymer[i-1].swapcase + polymer.delete_at(i) + polymer.delete_at(i-1) + i -= 2 + else + i -= 1 + end + end + if polymer.length == l + break + else + l = polymer.length + end + end + lengths[unit] = polymer.length +end + +puts lengths.values.min -- cgit v1.2.1