From d17e26540f9a994a216e731d8b2f4c034a216357 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 22 Nov 2019 17:00:32 +0100 Subject: [PATCH] 2018: day05: part 1 --- aoc2018/input/day05.txt | 1 + aoc2018/src/day05.rs | 63 +++++++++++++++++++++++++++++++++++++++++ aoc2018/src/lib.rs | 1 + aoc2018/src/main.rs | 3 +- 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 aoc2018/input/day05.txt create mode 100644 aoc2018/src/day05.rs diff --git a/aoc2018/input/day05.txt b/aoc2018/input/day05.txt new file mode 100644 index 0000000..1ce3e0f --- /dev/null +++ b/aoc2018/input/day05.txt @@ -0,0 +1 @@ +ikeEKbBtoOmMeEuUjJTtTxXnNIlLHhPpuaAjganNAQQqqGJvVRrjiIJAaAIiSsavEeVPLUulpWwCLSmSsXxeEMslcQqLCcnNDHAvevVDdEVaSshOXxoGMfFmWPpwganNjJAbBduUIqRrQQqcCWwLxkgGKwIOaAeEoiWZzVvXagGAlkbBKiuUZziBbRrnNSseaAaoOAfnNFvcCVsSbiQqIBVvMmzLlZEiIQqIleEWjUueERrJNtTOonqQwRrgmwWMictTCIGrViECceIveETnksSzJjZKtfFTdDNzZOwWeEeEpPicpZWwzPCMmgGIomRrTtZiIzZGgzMtTMmRYFfyxXVvrKkrRRAaAaGAavVwWEeiIoOfFkKnNgrfgGbUuBZzSsieEeEIFuULHhOoLZzlXxuUcCfFGglSFDdgGoJjUuOfFfWwaAzZqQaAjzsSZXiIxJMSsOHhoQqmHhlLgGsgGiJnNjXxYKoOjJkJjGgmMyGgItYyIiOoGwFhHfiIWEbBeghHoOSsWwXxkWXxpZzzZoOfnNFGgPhHpPbBsaXxmMAjJSiiIHhIJjTtQxcCXqMgtTGmjJwWXxSTtOosFAavVZzPpRrAQqjMmjhHuUgGJJgAahHQyYqGprRPhHOBboSsKkxzZAaeEsiiIISnNGWwgJjLlSsbGjJEegBDdHhzZDdvVciHhIexXgGmMhHEegGNnEeHbBJjTthlLESseJSsxXaAjEHzZmMIihVhHJjpPJmFfgEpGgPMmeGfFpPhHwLlWLXrRcCEetSsjBbJKvVpPjJyYRreEzeEmMZmcCMgGTtIiuAsSaSsEetTUoIitZzTTSsWaAwtTjJzZVvXxIibBRrJjRkKruUEeHiTtrRoewWEUeEuQqcuGQqgtTURIVvdDFfirBLlbGgPpiItiITRrCHIihOUuAaWwuhHIigIiutnUuNwWTVrRiISsVvBbvVGgMWwFfSsmbBTjJtvsScsyYOofHhFhDdzZHYpPFfyiIupPUNnRlLwWCcrtTXdDEexIisSyYukKUwWSjJmNabBpPAnbBjspPSZzUMmnNfFfFuCZzcUuJHeZzpPugIiaADdGBGgfQqbBpPDMmdqXxQqMmQhHWwoOAapPmMwAauUPpWvmMPIidDoOHhcCyYpoMmOVvgGVpUwWnQqqQOfCcFoNuTCczZtJoOjVvwVvWyYuUXSslLzZTLltkKIBbyYAXxgGuUahHiXxQqKkxnuUiInNjJNTtPeEZHuoOUPpfFhsShHByYbUGgMmEDdelLuXxrRaAcFfCNnjeEJUuJjEwWezZrWYywRQFwPpWaAQqTtfqeEeEqQAaVvrztTZFfRsSaAcCBWbBwbnNWwRuUrOAaoZgGjjvVcCACcqGgQzZJGgrRjuUaPpCctTvVjJjJNnJkLcClWnNwLlIiKSsIdDijLtTnNlZLlzJKMmkoOSsPpaFfABbJRraAtTJjCceRrXxECcVveEIfFicCQqtTjtTuiIUJijJKoOrRsSsFfgGSEJKkXxtTssSOoWQqrRbBmMEeZnNzRrTqnNQtQMJjAyYkKPpamMmmMUuqSLdDzFmUuMEePpEhHcSsCefsxXVvKkxXSQPpcGgCkmMDdVWwiIvfFKqZMuXDdxUycCyYXPpxTxXoOAaWweXwWcCaAxIiZzEcpPCZzKkhcCHsnNtdDTSaQqsJjSAkKlLtYovvGgGgVcwWyYaAQmMqaAkKdDyYxXjJSsrRlLJbEeipkKbBPIBjgZPpzngGMMmwWmNvVGSsmMxmMFfXtUQquTpTtKkeEtTnJjcCeCcEBvVbNPppPPFfcyYCrZzvVBbsSEercCdDRHhGgoYIiUuDHhdsPCcpSpPbJjGAFfvVFfaoOaAgXxBaAbBuUfFacCxXrRRrGgAPpUulLnNOMmTtWEOoewFfHfbBsSFFfPTtpMmdVvWWwwDWwCckKVzWgGiImMwfFZbBmTtIiMfFcCKkJRsEegRrVyYvDdGUuIiqQSHhgGZzgGxXBbUuCjJcPprbBatTAXXxBUlLubSsxVvSsRrgGOvVozZTtdkKSsiIYyDiQqMxXMmnNveEVDXmoOMOoxsSDdIivVcrAaRCKkoOyuUfFYvVDdMOoBbItCcDdTXHhxXxiTtRrCcELllNnIizXxvVZloOPkKaAZzaApLlDsSdJjkTtKmMCoWwOjJcSswWlMxXzZeKkEmTtMVtTvlLDdmNnrRSxMmAaUujJXsaAwWUuolLlLmOqGgWgDlLdGurNnSaqsSQAWwsRzkKNuQqUHyYhkKnkKhHaAHhoboOBTqZzlgGVvmMvVRrPEXxertnNTykKYhgNnGHTNntYyjJAaRcCDWFfwiIgrRGHhPCcDdyIiXxYuvVPoOZzpMmxXhHcCUDdxXpPNMmnbDdExZaATtBbPpYygGzPpTtADdCcaCjJcXOoesSCcfzZFmMMUNOoRrwWCnNcsbBOowWSucClLFNsSZznJjLlfGRrzZdDUuaAgwWuUSeFfFfvvVVESsBbvVIiszZytTYLlJoOjUFVqQvfsSUjZzvVJHhFtKVvkTxXjJfbBuWfFwPpvVAXxaYcCyehHEYuUANXZzaAaXxAxjQqbbBTtBJomMbBOLdGgpPJSsjcCJjDdDlsSOoTtbBcLlOdDoVvnNfFCJrQqRjCcIiTVuUyYXxjAaJaAvtZPpzKQdDqknYyJjxXDdLllpcCPLTtkoOcAansmMXxSNQqCKPVvTtpUqQrRmCcUuWMLHhlmJjWNnwgGyIicCxqQXWMmZQqzOoXxYywzfFqQZGNnFfvVaAVvgOoTtNKxXkAaaAnTjJBbbvVWwBPpcCxzUuZCcIJjiTtTtyYYjJcCnNyXTOowWtpPxlLcClLXPKkpSsxXtQdDxuUXcxXClTtQqXxLwnNWZLlEJjeiIceEtTVvyWwhHglLzhakKlLLkKYwWKkyHTthAaOoeEyXSsedDXxENLlnHhxNnYYylgGEeAaAmxaAAMmaXMpVvoOMmLcClwIiHhAtTghHNnNnRrzEyqYyvVQUsVvUNnuSujQqJYkKiwWIygylLEttfFQqTHoOOhHDLldTtohTeECcMmbVvbBwWUNnKktRhHrYyicCIPvSsVtdDvBiIiIDRrqQdbAaeEHhRriRrFfIaJhLrRbYgGiIDsGmGgMgQqiISdobBOyqAaxXBbHPphZMmNnjJhHDdzPphHOozZzcCZpeEPFGgfTyYtXxzZWwHDdhIaAEVvAakKehHVvyhxXHbteEMmiITVkKjJIiqQwWDrwqqzZeEwOtTPpoOoIicCnNzsSZeEkKNnnNVXxSsfsSFJjvlLaAOozIijDVvdJRLlJZzoXKkxrRBbkTtpfrRrCcRaiIVvBbAudwEeOrRokKzBdDOfISPpsiSsdSPprRhGvlLUuIimMGgVvteNnwWETVZDdRxXFfVUyYPWwWaAYUuqQycZlaARnNreEwnNWZzaECHhceaFfAAXYpPOoyCIicxeELFPpzyGgLlWwRrwWPtEeWwTyYuyPpYCcoomdDpiIPMOyYOwWUhpPHzZptTIiLlXPpxeQqElucCULtTTtLRrlCcRMmuGgUnFfNQXxYyDpPuUzZpPdqEeuUqQSxXGgVzZvjDdJbRcRrCcCZzrfiIFIiBFvVNnCyBbYcfnEqQeSuUrRjJaBbEeRREerrhFjHWKkOoPpwlCctyYVRSsrviBbIVvPpTXxtAarnHhxXYyNdbBDuURjGgJNnaOLloAvHRrawGgRUVvRrcCuoyuUYOUBOoFfeiIHhwuUWxAawWNniIXEsSfFoOsSMmiIbBRrTtbavVAGlyqQYLuUpgGPSsUuwRraACcWPpsQoOqQqIoYSsPpfoOeEboOBbBDQSsqpNnPJMmjZzPpgVvDdGSsFqtTQgqpPhlLHVvDdPpiUuSrYyRuUsYynNzMQqmZEeLloXxOzMmZWgGPbBwWWhIbBvgGVpPFfMmmMdDfFKhHvXxVmXdgGAaDFmMgGOzZMmMmouUkKFVbBlZzLXxYwWkKyvDdfwWfsAaSsCCyYcvVtTERiIDAalvVKkcSsCKYylqQLKMmkUckKCEeAaukXxmThHaARrfpPFBbJPRrpFffFwWzZIiDwWzZnhsScCHoOgGhHhfRuEzZJjaAZzeURJjaArgLjJlaVvDdsSANnYLGglGZzgRlJjLLQqlNHGMmghnrrRXuQZdDOoeEuLpPlPpCcyYbBKpRrPHVvRHrRGgcRrEeuUCpPhrEeidDITtaHhATmMdDtaoOAFNLWyYSswewWEibBIMbQqBzgGZmrEKknsbBZzqgGfFeEkKQmMjJquCROUuqQNnABNnxXUTtEhHhHeGnxXNSsgGhfyHSshYTAaKkmrRPpqQMpPGgyOolihHIYsBbtbBTCcrLlRcCWwAVvaeESsSGaWNCcngoOGwvVoOMmDbGgBGgaAPpdKkiILFPKlaAaMmdDAcCLvVTqigGIbBwyYWOojHhMBTKkZzHAahVlvkKvBbVhjJfeEvyYRrwEGIigxiSyYsIXxoOXRdDrOBkKWLlwboedRrDvpGNngxXPkKDWwdJjfFZxXKkJAaEejzuMTcCttTzZmeEqhtTHhnNHzbBOoZuUDdCcaAjjJhHSswWepPEjJUuqeEgGKkQuaAUeZZzVvMmzGyYdYyZzgGeEUuqQLHMmhpPoOlDjMPpmNnHhJjJeEeWwvIgGiIHoOhTVvBHhdrRDdaAxXYEeeErRyqQCcBbDXdENyYiInYyvVBQqbeEWyxGgXYJjyYdDweGglTtYyLiIGLlIigPpQqSsqQevVxTOotXBbFfoWMmiIEeJjiAaOpPEeoINCWwsScVvKknrRwxMlLmOhHedDTtEOocCkKNnsSXLlkKxoXEnNTttTLgBbPpIiGlIDOodXxCcOoKkKkgeIkKdDdDqQguUOruUBXxbCNndEeDcbTtBiIdHDdXxOodBbNnDOZzoXlLYyxLoOlpPDJmUuBWMmsSHvVhbMmBwFszZSfNnmSIimXgGWwjJMAaxhHsSDdEbaABiIeNPpnvVXXjBbJNnxmUqXxoOfFDdDdFfMfFmHhWbBwVvDIWsSwiYzZIgYpPyGoJjkKQqEGgeoOogGiIDWzZwsOoVHJSoRflLpPpPGyYbyYafFAjkKJHeEOokKTeZzdDkKEwWxXkLlQaZmMwWBbiSTttvVTbyYpPbmJjMBDdBZztTspdBbXQqFfBbjpnHZblLBBbAngGaAvVrhHRxvIiVShHhHLmMlsvlLVXCcNnrRRJjaAUurNWwaOolBbLHNnubTtVvvmoWtTkKPyYZiGgIOhHozpaArzZQEdDxXJjerRkKqPxLfFsSkKRrlUQqDDWwdNnDddusSsptTaAALlavVPZJBeEJjGVGSsgvgqQrRSssSFfFfUHhuVLJrXxRAajOrROgGYyoqQKhHjJkoQqUsSulgGLlLljJLNnJfFjiCcIlsRrSUugGbQGgeELlPpKPpkvVQlLqqGqgoOHxXhDlLSGgfOoFJZUuzjGgJjZmMaAOIkKKkhcCHEeXxiFqaAQTYyFftfmqllLhHLQqFffKZmMzHhSsJjxpvVPXLlNnNCaAZzDdbBcBbNnjpcCtTPpwXxEejJWAarRNniqQLlIvKLlgGohsFZzlFfgySsKkTtYAapPcWmlafAaXxmpXxPMFfxkKwWHeEhoOUuICmMcCKkczUCpPEBbezZUubBcfKkFpfxXftWwTFFCDdNDdngGYycLlJjeEYMmyfNzZDdnxXmMTsNnSLSFfsfFlKkpwqQqQGHhgVvGgXNnVHpPhLDdenNEJjwVvWTtkKOoXVvxRUuiAaGJjrUvVGgyYICuUHcryJjSsYTxXRrtdDUuqUuJjQNQqbBNnGdYyDlLOOoIitetTwWsSNUYyungGEYuUyvVmMpPOoqQMZzmTItTtTijKkJYJjQRrqyxXOomPXxpvVoCcJjeEjJOBbZQqmzSsoOZSshRrjisLQqlUulPpTWwYVLlCVvcvkKyIiuUCaAnkrSsIiReECckvKwWvPpYyVGrRGggGgbBZzxXeEsSAKkvMkIBbiWwKoOmrRaeEcCoPYXjJxyRJTjTtJtSswWGfvVJbBjeYSsBbMmgGTtQqrRyEnNhHYpPynNYvyYAEeXUDdRFfhArRsSoOmMmMkDvVdTtkKGgjJrRWkKwpPsScagGACFfZzVvHrRhKNZilLVBgGfnDdNvdDVBbzUzZuclNqQuMAdDTtvNnvXxZzpPVZbhHaAjJlImPHjJhBTtxpPXzcEeVFCcAwWRrHhGgGSsgGAaZzJjcJjCQqVvWcCpqQPgGgeEvQHRyYtqQTnTXxoOvYyrRFfBbIiSsNiIQqnDdkKyYfFgGgGCcVrRQpDdYyJjmdDqqQQXxzZKeCcuUbBtyYrzlLTtZuyPpYAaUwWoORsFfSTZzYvBPqKkQVBbvphKNKknrRIikpSdDNVvUlLukKuUnqQEeEemaAMcCWXxxXwcmMrSsRAavVnYmMfgGFKkqTtrSsczZMmnoOMmNNnaACdEfFeDmfFGgXOoPpeOoeJjEEBbxbBdRrvOrRHqQVvhKkVcVOohHClLcvHGghNhHYyhHnNCcbBwtyYwLDdNLSslKkNQZzqxRqQXxjcAaCQNnqaAXxVPtIiTpwoOBawWAJjbwsvpbnNBLleEPJjnqQNLKbcdSsjxoOHhAQbBqeuUIbBiVvzhHQqIOovVkKyYiVbBvYyNzipPIgtarmsSMuIiKHhFfilLIXvVdKJjNBCcPMAIiuycoxXteEcCeFwWfFEefRgGrUutTEOoLlxXMmTpPOOoVvUJjuxXpPSsBWwwWDeEgGdmIiSscClLMxXLlDdlLbgyYGZzDkKhHnzVUxXuSsWKEeCQiTqQCctZzTmigkKrgfFGnNVdDvRcfVjAWwanXUqQuvVuUPSuUBsTtUuSbBqQonCQzeEAaFrpPRcCYZzyfNnLlswXxSDdBbDIZziokKeEceEEeCCcOOolGgyyfFYYLJjTActTCwWorRtoRPuYyNnnaAzZFfNxJjqQEwZzVvOTvVOogGwWtyAaiIYXxeEVvotUrRpoOJMcGgyYDdCjuUXxUudDJMmqvzZcCRrtTyAQqaoOYKUuGXxGgyYhHiIyhHYYyMGgmhtTIDdpPqQrxXRLlihghMmSMmsUueEUuIQqiOoAEeaHXHhxGegxXijHvXxsSOosSGzZSsgeHkOXxDZzjJflKvrkZzWwraArRbzZkKBrRttTTjJzeEZxXxXnNeybBZbBSszwfFWYgdDnmMRrhHTtCcWbSsBJjwYLlgGycMFfmjJFPpAaZzfEeoiIcCpPWwOAaWygGVEMmOCOozZceEiQqOoDdIGgNnnszbnYyNwWSiIXxIKkxXiKIioEeQqDdsSDdOIhHiFlLoOjBuUnYyvVqQuUYMmyRrVzZKCbiKiIVvPqQpjFfiIkUXSsMmRrXxBbjeqQCcBbEPptTrRsYoOymMKQNcCnOGgoKkoOOoDbBdBbSssSseeEUawDdGDdgWBbCcPpxpPXLlTrNqQnRmicCzZIHPpYGMNdDSsnbBmgxWwtTmoOMXLlIiQFyBbYlLfEecCJoOjFtaJbBLlxFfzGgEeaAZfQqyYFHIIoONnYyiihliMmIYyqQBlLRVDLlhTtLzxsSpHhKkLnPpNliITtvssSLlLlPpSlKkKHtThUueaRloGsJkKiIjfFyYcClZNnwgmMGiPYJjyxHharDdcCtTfFnNKkIvVuUNTtWUuwfFiIavVwWRVjxFclLCfMmyBbUuYUUWRrcCwqQfRBbBrRLlbUugGrrJjRuvVQWZzztgGTTyYtMmCWfOoYylhHUuLFYyBbtTnEuUeWEgGbBedynNYDmeEMtAaTRbBUuJjalqWsgIiGGgrRTtctTcCgGCxJLvcfkRrvVKFNfFnsSwWIxXicHrIrbAuUbBahPlJjJjWwAniIdDiGStTsNTPpMKBbkmhJzZYqtTQoOeETqxKkXjgXsqMmHhQOxLOSnNsVBmMPpGgjJjOjJoBlejJCckSsAwWVSsCMmWwOoyZzhgHhGZRrVvcwukcVvIitTNcCnCzZPpfFjJgGTaAtCjYyRTtwxXwWqQWeEEGgeVvgGKkboGgOJjIijJtXxTmGgLwKkgGeEiPtpnpPfEeFNmMHyYhWtefFEbBaAhHfIuUiYyYyJjvVvPpVbYyBAujFbiCBYZNnzyrBbUuVvRvVyAaLiIyYhYyHhHMAdDfgGHhBKkNRrnbGuUtPpxpHsShxndDJjoRrOIiAHhQqaZAaRWwrFQoZtcCNnvTtNnVTwWaAvzSuUuUoyYcCOlLZqqAnNwNvVnGMmoOgWmQFfquhHRsVvZzPpzZgGOolLLMCMmapglLaAvbEozZmMOeYAYyayBVDdGyfkdMmCzzZZFxdgWVZzvwdDgFfGAEeaMsLlSMmaUkSsMeVvlLEWsSbqrzZKkcCvVRiEeCcFfuUUuzhHoSvVslGaAgjFfJuyPpHFjlLJHSiIQqQGguzjvVJEGlZzdDfFLGgZtTzzCXxmxzpRiIroOTnpOoPggJCcjoOxPTtpagAaGpyoOYFjJfkiIrDcHhFTlLIioODRrSsdcCtfTtEtAaTIehDddaADHeEEiDuvDduUNnoOeWwESqsSNniITtIpPiZzWpSsPwUSZAazwbBcCtTgDdGlLagGhiIjWQACcuUTjNnuUIiyYHxnNokKOXlLSDdJjsUNnOLlouzZYyUuhrRypPiIHYyjJEeyWpPfGgFoOwYIqQwWwWbCcsdbBDPMmzZQFfXBbOoPpNFffiOoInGgwWAadDNFAaLlFUufzZktKjUCcFfoOuXgLlGpCgGPpcgKZznNkBGrRgwWTtbbOoztTMmhXFfLOoOkLsSlYyKoyiISsbeEPDdWBbwjcKNnLlZxJjXzZNnphDuwwWDuUdjfVvdDFxbBbFfSsiBbICcMmmSKksdDQqRqQrKaAkwGVmpyYPnNNdDnvckShcqhzZHkKQCHJjGkKrRnNjZzuqQowWOsSZzafFAVvZfFJjBrRbtrRdneECgGcMmKkdfpPlXxzbBACcaQRrjJqbBPpscCKkAVvwUuWaAfFmMkKqQCJJqQjbsSkxXdOqQhinNIBbJjHqQZzJxXMmpYLyFfIiBbyxjiSmMSssGgDkKdIGNnSiIgGFhNvVnHlyYsSPpsREmMrdDRWwwWDWaAnSsmnNMNwpAaPNndLlOeEIZzYyqQTfFyVvVvqQALNnWwlaXXlLkqVvQFyYPreIWGgwiGgZzusSbLlBIiTTtfAjwYrNnPpRlLgNyxlLXoNnYPpxXypyYAfqGgQBbEeEBtOPNnUeEHxWoEekaBNnvysWwRWPpPUupSuUmkKMDcSsbBrKrUdDElLjnbyGdDSscaPjJabBGgLPdDzZDdNnkKhHUjJuJIPpuUWnSszrRZyYNAfFXxakKNKkJLlkKXxjlNnjoPGuUrCrRIicCcROeWMfFJymYykmMKnvgGVNWmlLJjGgdiINnDFbBjQqYygGYWwyJVzZvpPOoXkbBKfFjJSCcCCcMmbBdlPpLDkKNnEecBbNglmMuUYyLGtGrRQqEegIiRuNnUkKbBkKPprGQqoGUEeupkKapPPpjgEeWYKkTtSWwsNnNnSYywQCTtcFfvmMVjbBJZzXBbHbBDdYyqwWtnNTQprRWCcnghHmMAaGLlzdUBNnTtbqbBCxXcBmWcCwGlEniUsJjfkKWPBEebpBbwdyYpPnNUujJaIuUiAMmWfqQWwFsSpPpQqpusStLRKAakrSsfBNnbbBFTiIvVbBuUIFqQfpfFPJjelLlLIGgJdrRvVZzdDGCUHhuFfweEWXZSNnsPAaGbBaKkZByVvYHjDxXyxlLXYFfHNnhMcxXMABNIinnawWAgQqKOkuUQqKvJQqsxXcCSjwWaPLlCvVFfcQqjTtFWNjJndmMDhgGYysIHiIfFjJlURruAMtIiQqruUEeDKkdVkKZTtgKCcZNnzHWwkAEMZjJzVvvMtTmfFcvVOnKkbCDKkpPHCcAbBjJLltYyYSsOyYvVouUofFhGwWbBAdDaZtTjJDoOdPpzEJjQXxaAJjFoOijVMiIqQwWgqaZaAzAaOnNocCczAaNnTttuUJjTZpvVfFXRrxKkfFOKklIiTthHlLoOXxFfLlxLlGglLuUSWvVRrwsgiIaAqbBzZPjbqQVzdZSHhszolodDTtOLJjxXskQdDsSOTtbuUejSscCJSsKkrXgMxwRrqoOeEEYyKzbuzTgXxZNnwPpWKkiZzIAQqXxMURrVMmWLbcniIxJJMmjjCcqQPwWwfpPyYoOFfgxXttYcCwXxWDZzcdDabYyzZBhuiIDdeJjCyEeYcYyBDdVkKvqqQTBHhbcwWCOgeEugGUDwmMkKJjiBCCoOKoOkXTtZvLYyjJZzlhHAarRVqKHhkMmyYiyYgqDfvOwuYyIAXxdsxqOuUuxmEeOohIBbQqUulIiyuUYTtJjwWUlhllLLEeLHhDCcIwWwWiLldauUAQqpmMxvcQqXPSspxAlJahCcJjHZzjUuFYyfZzHfINnxiILOoTOUasxXYyIXNnxiwWJvevBwWbVmMMZNnIFfUTHRrxqOcCmUqQCcuwHhWlLNnxXtOoTwWgeElZzLqXxQcnNGgdRZEKpfWwqdDFfYyRXxjJrGgaVvqSjQqHXxhJnKexXEQvVqkNeEpLlAaelLEKkXGGCcguUmMAagXxlLxULljrRRYyhHkICchHCYKkyJocCOjhcAaZJjzCqQJjRrPHOoBbrRIirKpPDdfFeKslWoOwtToVvtWwrXxaAMmRprZzEeqQrRDdTtoOkcRdaAxXDpFQqRjJqdHhFgcmSqQfFyYiIRiIytFmDhHRTWwLlSXxbBNnTBJHwLlTfefFHeryTNZWwzmMNgRzASbqpPkJjJDFEefPpeMmnNRWwEexXTtQRqbBvDdToOtVhHAKtTCDOooOdkKjfFetNnTAaEnTxPpbOAkKakKGMepPywVvWeaEQqedpFfvVuGgLlUyFKkfrGuiIQWxLlAaAJjLJhcCHpPjNSsTpPcCpDyEeYQAaqIiDdUoeEdhhYyJjHhHAadPpyYDjcCJVCXxXFfcCxclXxgGYySjJGgcCsClmBUnNumWwMzZEetTTBxXgGIbBiaJUkKcOMmyYqlLJjdCQhHpPCcqOocyYDbBjaAgGJWhHeEgGUuoOSzZszfFZVkKYykCaDdAcEejJHcwWChJsWHGgbBBbhjJwSjOodtTBbRpOIiRrNnNnVvIionNPGCbBcgPpQqqQoOBbbKkBhHnMmNGqQgeNnmLwWqVviSsyYjLeEhHGppPPkKgtIiWwaXQknNAacCKsvGgdpvdZCjPpVPpvJcfrLlfFMEeNnbzZGTCctFQqXxIqQiIypPYCcOoaANnXgxlLXkyaAYKGOoFfCVxXOovyYxeEnVGyYDTtKjJkhHlbwWfkKtDBWPpgGZzMyGgYcEejJQIiqxtlyLGbBetTNAaVvrRnEglhgGHQWYzZyCsSlJaASuUsIVvijaLYylPpAKdTXxtZOrlLqQAzwWZhJOSsVspBnNbEYAYyJjnBIoOideAaeEGtTzZeRYyrQHhGIPpigjBbyYQqQZzJjNnDUudJuUlRxRrNnbBOKkfPpPWwpbuUBkKzZnNiIPrXQYTsNnStgAMLltTmOoMwWcCmaGxXKsSlFfRrLhxAafFXQLlRrICjlLsSiIJdUjVvrRJMaAhnNvVbBbBjOQBElqtTQbBXHZpPUWwuzoOoyYJZgsSVHhECczHJwWANnKkAitTvKkUVsSvYoOOoIibaaoOVvHhVdDvAQqLlfscxXxnZzcCNLYyXxgElxXLdDYkcGNnBXxblLIizAyFfPaXvEeuWwLllGgDLlaWvVwIitTAdDHhEFjfiLmMlyYCaAeEcQiIDUudqIuUFxzkSszIiwyYWSTnNZOvVlnNtLlfzhAaHBSsbZzBNloxymMoLlstCZuhMrRgGzBbpPKkjJgGZVhnMaAaObQqznpPiiIFfmGPpOtToQqHCcipPcCIbBhNnaAbBKkaAgyYtPzTKkUuZzyZzeEYtiVvIeEDdiabBJjArRiHhuUlzZpVlvQqVqVvbBQXdDxLMmvfxXOQqFzOjJmwHyUVvoZzhHOoObBAjJahHPrKEekRAaZDvVrSsbBmgmMjqAPiILlnNpaCNodqKtTjPbBdDcCBgGgGxQqxXQiIHhGgqrRGynTtwWCcyKOokaYGgyAHhVfFgKkIGgODdGOEeaBYtTybeYyOojVSaedXxDwDdFfNIbqluUMpPmFdemSfSkzUufdvdSUuSsYUTJcCcKauUXDdDXxAEdmMgpBwWNJjQqezZEOkKoxrDOozttTTZdDdeEkdsKbBIyQwdCczZzZAHGgNrvGHhWOowZzknZzSacCAASQWwoOqBGWdDGgwpPEhHedVuMmlTvVtLJjPpUfMmhwWhHHkKSGjNZzqgGVlLVJtTNnjvyYvGwFfhPpHWTexXvVYZzVNPpEtBeEsXxnNFxXFfZBBQDYQvVEeqryYDdRyuUdqmRbBDhHifFYKEekyGgyaFuUjmMRrsoEcCuMAaZDaAudDkKUSpPsdzSswiIWsTtWwxruAaUhxXOoSRYyAaEerxXfFGoOgAOoaeEQoxhKkHhyuUvYvVqzlAlBlLbBbBzZMgaAGmMgGyOouBtTboONLuUYQIKkgGiqNIymMqXStigzKYyqSssXHvbBVbBAxaDdXtTJUJjuGkKAagvwWzZrAaXIixuQjJtrRTvmjJMJoOWyYpBbnNPgGrRgsSraSuoOUsGgnkVvRIjqQHhkcYyCodDOcCKQDdkvUiUdDBbkFZzfRAoOavPpzJjPpZSFuNHhbBnZJjoZAazmMOUucuZzeZRCcrzdFBwsVvTOoBbeKrRkSYExXvVpdcOoGjJgsGFfDdnZzNMcdTBbtDAEExXeyYekKqZzVkrhHIlqQFfyYeEtTMmmmMMPpVvcBkKuLkKlWwVzZuUZzmMlOoLGYygvXxfDdPDzzDdQqxvETtkJCczRXxRKwmMfqQFAmMzZaSdDsafXrRVsssPtRXWyYBbPSjJSssXmdDMDatTAdzZxpYMwWDdmsSsdDSynyYVvNnxOWFfBLCchHnNBbnzZRrJjPpcNnuUElLeCLPxXpnNhHxheEVOjZzjRrhHsScCaAyYLrtZGsAjJqKXxBbRYSNncXxacGgADdHhaCPcUfpPiIRrfFnxEetTNnxXCDdsrmMXwuUWYQalyghHLgjJGgmMJjEYaATtKkybIdDLyYlfFimiIGjJjrRsSDVvNngGkcpQfmMJSsVTLltLGMmvttSsUjJWwoOzXoOrcMmnTetJDaVvzZAdeoOeELlGeEgRLsoOqQQqAaVdeEQSmMPpAalLTPZzinIiNnuftgFfGTGgFEoUdDFfuIiOewbJkKjQqvmoOzZRrDdfaaAagGAmMFeDdEoiIORbBnNxXWwpPhvVIWwiHJmjJjmaAeEpPuUMVvVvpHOAwEynuPlzcHcMmIQqREeOoTWREIAXlLyYUuHXAnZzNkKMTtDdIimxnwWJpPveEQgUWwWHhIiwucVuUNBxEeIEeiCBbNzSgGbBwSsxJjKlEEeUUuzdDpBIibzuUZjiUuBHhbnYyFbBoOzZfYyDsSBbQqAabFfIiizmHhRZYHhDJjlgGSMmgRsyYSsWwcZSJjDAWwrwQqWRKkFUuMHhiOpmhHMLlPoKoZzETRruFRQqyYrEeTuUoOqHhiVvCcdDIQhmMjjEDdYHAcTOGCcgVvEnvRhHkfJjFFTTtlxXLlhLmMLlBMafwygGKkeyHCNnchqQqQfFrRYzZNlLnKwWQqWwnpDdfTXxrRVxXvWNfFjiIJnBDdrFpaAPKkFffGgxXeEpCIiEJjQqeuUcuUyCcyYRRwTRrhHhHuujqyYrRQRrwWzZYxSxXsXhdDvVhNnOoHLlrRBbqQVvuFftpPLdPgGpxvRlGgtmMjIRLSgNnTqQlJmMFuUdpEuUedDXjeGHMbnNqQtuUTComXIixXnZWwGgjJAauUnNsTEeZzXxtSsQqzZtyBbwpMmKknNiJSsjIiIHUqQuvVXlLBbxhFUuhHflyYkYyKbUQqonNOuBBbaAQqbeUpkKrnZLlnCryyYsSZIzpPZioOzMmEjXxVBfdKkxGSrBTtVsSqeEtTpDkKPWlPpdxwohztFIiWxIhNnvVBaAjmMtTJoXxanNAOAFuUfPptRXkETtecCKkdcCZsjTttqQWwVjJOoikKuwWjJGgUCiPpEeIuUoBnkaAKXKOokxNBbTtaAqpBbhHPpyYFjJoRrvVzPpFfsSsHfOokUuKFfFfAazyaAYFfZQtTtYyIUAyyYqAqXvOoTtYWwQqeEMmSsnkKEvUuoWMiwqTtjVxWLlJjwBqvSsOoqOMCcLSjASeiIEpPLBblUjwcClLnNBbIiWhXRaGSpPMmNajJAiIYyBKadDoTtOeBYKTPposVvQEwWeSllFbQqCppPvQqVnZdDzglyuUNXKkPMmModosSJmLlMJkIiYyonNsfFxoAXqgGQnNeEyMmwWBsSblLsSYdDvmMfFrPNnxXcgrRgwWcjJdDDdzxgYyGXqKkryVvNomMRquwWaAoJjJfhHFFNnvKkViIeLGOnNRrIibbBiigeDhPvXbSieGgZjiIJhGvVPpPPppmMePpFfxZzGgKRJjKegzKkhHYyQqGgqnAJtDdTXKSdTfvVCcFAathHtqQOoKcKLlFVpPvWIidDeHhEECcHjMZzrRMkKmDdsIzBgGLlCXyGekKIiLlExYyxQmqQCvdgCcjRhnTthHNnjJLNbhHszZwPLlBbxbBIcasSHhRrhHsCnNLmMlEeVvAaOqEeNncCjxXoOGMbgxfFveTtmaFyYNnnNkYynNTEetRrHdRrOohMmUqQtTeYLzQlBIKnNhHamMAKkkGexXbDKAozZOakYjjJHhuBqYHcnkKvIVvLDZzuQIiqUNnYEeTEiIQmMqsDEeYylLeEJjItEKmMptrRXaABbxfPvVpWwhUuHXxuyPFYVvyfpjJQqsSYdpgCHylvkKsSViNnIiTxXuUaAttPpEeUFfuAaOoJJjjBSsPPJjppbbNrIiRnNHhANPLlakKdpqfmyYOofjJIQqiuBbUFSsMquUyvVErIlJQGgJnNkKfHhVvEeJhBbdlFcjJCfRcGgKkPBRKCbBSADdayFeEKkiSPIfQYyqrUXKkRQpPpQpPujJUuJjqxwWOjbBIiAZzazZdDmMJmMoOlaeOoTXxPJjJjpbzFfZLEefFkKNpPTtaAnlBbrZzXxRFKZzQqkfNDdmvZPmgRrGipPpYWnNuGVSsvRXxMmSyYfFoHhVCjJlLnNmMbDjqQJdNkhqXxQnzuUnvViZzmztsSbMmmJHfffgGKvVJqQzGyqYQMmRwWrnNNnqFnNnNpaAqyYQIcwWCdDQzZJjDdSAaMWwkeETxvrRAdDXQqsSIiReEEjJeWwNnreEzhJGLFmjRxXMmOoLsSMcgGMmHhkdKkkKKLlowQPUfFmMWLdGQTIihSzszZyYVXNCZzclKkLPMmJjWwWRrDyYQKkyZToOuUeEHlddeEDDPpHQqBDMtTyXpPJpyYoOPjneEUIizGAkKagCuWDCMkKJdDjsFfiITRrqooOyKkyYYaYpPyYlLaoeEkiIxZkKrRzPLnJuBbyMdiRDpPzXxaNnKWlLGzZglLdVQdxxXPsSrRPphHTCctuwWAaafLgrNwWwJjWDcHndlLeEvdDVtCwLNjtRwaovqCyEewXxwdxXqyYKqcCRElHDSsdJRpaMGbBuFluULAaIrwLlwWXHhooOQbBpPYGgjCbBBVLlvSaRryPpYqHhWGgvcEeCKAeEaaAxXjownUUuyWjJwiSYyCrybTtBnpGuUumMHZzvVItTihlByYTtSsRrbaIlBPtTSmMvhHRrPKKfPpCQHYyvfPaAaArXxSTPfouUuUchHXUlTtoYyeaUucCGgcCUPIDdRGkAazZCnEbEeMmaAkRrAqFfpOiIoAGCcgIprRPhADvVdoSFiTtUIiuzZVvIRDdgGmgyJoCcOPpkeEGOoHhoOdDgLVoOzoiehOMfuUFmNlTtnNLloENeEzlgGVQXxwLKCcNnOoNnFDcCHIihzZdiDAWoOwackwcCsEzMjJJYsrrRRSyuULlAzKkFfZSzZyYpAaVAdpxIiOQqTQqjQqJawWQqZspJgGSsAkQqfWwFJjXxyYSgVtTvxXGQKkDdqscNnuXUNOicCIonpHefmMPpUuPJifFpffvcCwjJFbTtVeEvHhVPpCqQIyfFuUYfFzZDdyvrRUuqyYSsJqRrCcPpSsNnOBRHtHhNSeVvoYyzZviIKJjbBnNUpdMmqQXeEAajuUTvEJjeVSstusSRkKrIgGbBomMAaXxqaAQDdSsfAPpXEexaTNZkLiEQqEeUJlLjdDlXxHhjUuUGgTthqQHuaAXwesSLlWLBCcRnNbUuPpBLpcCDdPCCcFxXYQWxvVZBkfFjJSsfeTtEWwDdzZfgwWKqjnNJJCcVfFoOvQqYSsqQuUPpuyYsShDdHUbBpPsSxGghiIHwmMeYyEWXSHXxXJHhMEemmMjBbKOoqQmHyWwYhUugGLNjYzWGzZmZzgGDsFbtjJvVbQAaRrvGcWnNwjJQhOodDmbVvMuUmzRrGEeEelSnQqNaWwzZNhujJOWYywoSsNXxBpcCPzuUVEevGgZbWrRaAlEuUPpxXZeEzYsSygPpnNNnOWDaiIeSfBbFsEcCmAamCzZccxgIuUiGloWgZBEehHtYyAYZzugpoOPGIzZelTXxcCEncZzsSDdWwLgGUszEetTZvVOxdFlHhMmTPpthHWwmczPpmkFzZObJvzZVSsvSzZDxlLilnppPyPpYJjSsAcCjJaPpDytfRryKxXTLltNNnRrkKRrkpPMKkuUsHhNyYnPsKkKrhOoHbYyLCclQRZNJjnzWlAWLlLhLlsSSqQqIiqQHPmMHzZWFlLfwFhHCoWwJjtnNMvVHhmBMYhFfKrRNBbJjncCLkKGuOrRgGQqihHIoUfjHhJdDxZzXEamcbBqQHjcDqBrRbJjjVvAfkKMBIYyKJrReKsSkEYupPUhEezUUuCoOHpxXjmMFfeEJFbkDdUuBgOemZzJjsYyIiSYAqrpPVqQvMrRpRrSsDdeYyEfFPGgmljTTtOsSTtdDCwjqBbvcrHaAdZzImeEMlZrnEHhwbBWybjJDNnNYUWbZpPzBbBKFfFrRZkKzfkwxsSXbgGHhMmcYyuCACcinNXxidOqJjaAWbTDeEWiAPpaOoIMjIhHiBrRbLFrhczkguUGIFkJcCNnuMJZnnFfNNICNskAacvvVVIiurgQqGABvVbJjQqxlLlLBAaGNdKkSgGlLEDdeopZFfzZheUurdMsSDASoOgGPpaAvVOoHqQEDtmMpPTUudFfHKkaAhTteTtpRgGKfsScSsqQKvhACLlcqJjOoxjRNaAiFSXxayoTLlniMmmZzKTdDvmMVeDdPpLlkAaaAOoLFsQmSFWwJOoUuJEvdDeuKkIOPAaoOgqQuPBUuwFHIakKpMiWwImDpDhHzPprRxwWRrhOyYnYMmySJjEeggGtTLuUEwagdJZgrRrzochHaArOVxXIoOijpPpkkiOhHXvVEednOoTtLlfibIiYtNzZFgGMmJjQLlfsSjJPpxXDdFcjXxJCHLluCHZpiImMJLXnNClWwLRMmyMJSOosxBJkVvKKkTtxXuilnVvFuDdpaAGMqIikoOwMmCGolAfzZlWwZyqCIlkKTWwbPpzZNnBgGvVPQozJjoOCsScEHOoeETDEvySXxXrLltTvTtNbBuUnKQwnNLlmfFnkjJCtJJmMwWOTvVbjJBwJHoOBdbTlWwcnGQyVvoOGPideOuvcjJsTtJRrjSfFsSyInnLLllNUuZzSQPKMFVDwAaVvcrEeRCWBpgIrRASsIimMwWxqQHUujjJGDuUYYYyjVmiceXvbZOKdNpwWFfHbBEefFvVqysIPpinNgVvtomaINnqQyYzNeuKZfFzUuclPXFuUEcCpPkeWwTqJhSszVqZiIKdDmMkYMqQwWBbdVZzQqZDetTvwhZOoQqBbhNvJjWOFoKaAiMmQrDDpoOAqMiIHhuUdDrRmzwdZvHhdLueWwUoOuDNndBbEUleEnNncGaUQLapMmcnXxuUNsSTAiIKvbBVkrRHQqhxXLccCQCyuscYyntTGGXKtTeEYEIvVSsUufFKKVvaJjdDSImMZKtcCyYTUIiFExXHyYWwZeNnzZMkKwWoMmPBiqCcbkLTnEejyavVvLFffFlVAYJCBaTzbOCPEeyYRrWbBVvwUukKAMdSrQhWKtlLOoTwWbBgOoFSscaPlTzZgGNOoSMmTyYClEIieMmbKIihFgNVSsvnEeBVhqhHQEefFdVrRRGxXZzKkuUrRykXgPQHsSGgdDRQqpPpPrRrhHSsIxXvPppPqbBQVmRrzgydfFDMewPpybmMDOJjKkoOgGfKdDXxJqXdbBpFwfJjfFBbAaNKBsMIiyrXKcZGXpPOoOoomBdLZeGgZqutTpPUkHuURtWDdXRrlGgpuUPyVvAVkKFfszKaTtNLKhpOEezgIirSycCYsRCcbChHNfWRrwwzsjJTtSWNnabQMHhzZXxvPjkdTtUuamnskKqwWoCcSWAaATUsJJeGFQqVokSsKfFfAaLlOvVpYikKItTyqQXgBfwWaniPtTwEuUerRueEVWwmRzIyvVemMQKGnNOohdxfFlLqkvxkqQKBERaSTcpPCmpaAXxVWOouUnfQZjZNngGzWwxtJjQqBEszZCaIiAgbFOXcdqwWEemXHhtTxTtyYakMniIOAXiIiIxeFQqzcbBCriehrRHfJjTtBgxqQovCcaTthcbBIsSMmiMWwcRrvVuimjHBbKkhuWtOkKZxfFXzqurEPpjnTLGglauUpgMMmkzAMwsSWTaCaAcYyMmACrRHuDeAaUEHxgEesdWnAnEhppFfZzwWwUDcCLlbmdWwBnnbBKkNMwWdXxDJAPpazZWwdDvJjBLLldPeELlyCpZZBqdZziIVvkDKjJGgPtWwLmLaXxsnnNNsvbOKfrEeRFkrwlbnNcLlbBybqUuQBoBRCcZzCcIirNnfHMntTpPPpLfDdyYUaAXhSsHJDETtrRCJVkKvjlLWwYycIiOoOoXxpvBbSwhHWsBeUsJLcCpPQZzjdgdDpPdJdDQSUKViIfffpqQvbMmsJjMmYsSySOoxVFKzZAaMVUufVfPUuogulqQkvcyuljbKkJPEeErLFqYIyFfoOwlAPZtyYTJEelLjFfgHhGObbxXLliTSsMcQQqGxBbcCogGtTUucCcYIJmmrjdDSnHqQsSQzkSZPpAGXxgSRAMxDiIdyplKkLrWwWcFaulsyYvVdDbBERoQqrbXDDdyYmMddDIiTNIidEuUedetwfjlLdBIiQqAQUuiIhhkKVvAlYluULyphHqQRrRraAEEeeotMmKjyuUITttfNJjnxXJWwJjhEegbuHoLdvVmMUSsjJoOzwWiQzJRrwWleNqrHhRcCQnEorRzfBdDsVvtASEekVbvfmcZnNwZIiMmvVzBkKPprYynvVWovjJoKMpPcCLjcWwCIiVvJSsXjnRrNFHhfBVZUuNNnFfZdZUCQOiQTttTEjOoQqLjJPpibBYyhHnxTILgpHCcfyqQxXJjeCctApSsPVRrvFFffhPWwYyXxWhLLIxfFbBNdbBGRIdMmDiLlGnATWHhPsSyYZzlHlLhbBgXiIxNdMhJjdBxXbtxXrRoVVfFjJYqXdTNndDtfFlLiiSsIRrVxlLbhHaoUYyVvPpuUHhPpuslLzFWwYfguEgJiWwIjBxLlXijyFfynNYdDwUUuJbiIxXsTRyExWwaAGYFkuUyCkKrivJbBjdMOoFOtCcvaaAjoOzZJrWwjUXxaAuZzJHhhhzaAZHYFnqQKiIhBjqQQqJPppeVlAaTHhkKcnhHsbocCZuGgYCchHYylLggAvDdfsYldiiwfgbZzBpAbxNnAwWlWwlvVUuOxoODdXxTYuOoUBJTEcCffgguwfxRrXhHWNBLllowvzkhHiIkqmrRlWHeFIeEWOPgGEAasVYaAAapIiPdIiTteEEFNRwWkKQdDqeRlPptilFiKmiIZTtmzKkyJjPcvVQqrWYIiywiuDdImMiKiIMmokulLXHPPpoOqzZoHTjlmMezTtZQqpYDFfaeEFkKfdCcvcfFYyCUulkKLVJLlHhhzZehnCNaPOoOopxlguPiKbGGXyNnQptvzZxXTRrJcheEKFfpNneQqhHyRnNreEeECcLbiuEeUJKkMmjIHqrDXxlOJkKvVQmwWIPCFfLlTeQybBSyxXuWwSswEtgGTLlvrRVqSIuRUyOovSsenZwWwWLXgzUuJaLdAaByZSCqDgBbXxZKkzGoguUyYJjGFfOERIZvCdDchAaHyBiosBKghJyYxbWuHhrRwZxXLliUAoOouCqxrNFQqfwkBkKBsSxXbbwEtTcKkMmhqnQyYVwGnGfSBjJJGJjLlpdIsXxSfFeERtsnNVvZzbcNnVvGZXMDqRrLJvnBbrRmQByUuQPDdpHYOFDdhyOaRrrEegoOxZzmrqQfjJSsXxDdjWLlGgsTkKAaqaCznmhHCoOtSsSsTcMAkAdsaFfAzZSCSsGgPQvXpPwpbWwJWLlNKlzZPpOTuUtbBjaAWwJleYfwWTtFytTuPkPpNnWtTwKpowwWrRWOCyDdZmFTDdnTtNttTZzSTypBxXQqQgJjGwmyfNiIkKtJrCkAaAyYaTZzQLlqoFfDyTUuxFQqmwiDdIWfFLfUUmQaAboTjkDIikgGKtRDddDXUpPOtThSspDuUzZEeJwWHhYohHnnNvjJhHrmWlqTtFGKkCcOpJGHhgGvVYygGwjaBbMdzcrRTkwDdWzIXyYxSsEnNeiIRrCpoOqUCSsuULUIuUsSJIVqVbBImMxXaAigLGrLTQKCcGlgVvEeGqQDdxKmMkdOQsrYyRSqXzaAkHxXwQqWwJgnMGWwguSKkotThHOtTRENxWdMmHhywJRjONnoJjiEiIedpIwWlLiyyYFqoQVpPpCFwBbWgcCwpjLzZddIOoKbBnLQqloNnPpEAabBtyiIRbXGTtglYBmfFkdDAawDeEGUujJnNcClLnazwWZzwYjIhPyEhrRUUGseESByfFDRxokKFfOTyYhHtEdDTtFkKfSseImMiyLiIxXmeCcEkKfEeSsxZmMJjNhOAatcNARxXrReorROosSVvrRrZzROEWwWcWUfFuMHhwLzZFftTKKeQzHhcjJNkKrBLaKkAvSXfFWwjLhVIDJGgWwFpVhHSskKPoOpPhAaCcXxUIiVYGgQPNqbZcLewczNOolqlSPgGikENnvuVFVcCwWveglLpPRrytfFVCwaALibWjQqdDaEeAwbBJHrRhPWpPoWcjJjwSseFfcIlLcmhYFfyQaXGxXlOIsSxXEeLlLKkXAOLlnBbAoHkKaAlezMBbTtTNnBwWUuirRoFqKVDWdTCcVvqQBbCIixXZAJbuGglEeunHCmSstTTXGGJaiOocZpPrVRZzNdTvnNNQaeiIlDLldZzxXEewwILliWNTtnyzGiEeIgTtpSqQBuUfFkKiIKSHkmVJTxXJRYDAaZcCaEepLlGKiqgVWwvcCGToffFofSbMmIYyvCcVYQqHxpPXWtTJjuYWwFjojhnoxkCcKFfeEwWwkcCuZzPQpPpNntmMSrkIiNIIIiGgGjLlpBbZERrSsIGkyYKgMmisbBSSXTwWkmMHhitlWINnOoGgzZHYGgyGUpHkreETtTtnaShxnNMirkuNAvVnNPRdHpXxLysSBbfeoSjeyJEeSsDjgjoObBfHhBMHhHNnhbBmbFMzhXxjEqQNmiITEMvVMmmzQZXxzJjsRHtTrRhrhpbjMeEQszZXxIilYRAeRrxXLMZjJYywWzmlkKjoOhTtUuHCoOcOoKYzZdAxXfMLACDAaocCMXNnxepPzUsJSYlrYUSLFOACFfchzERrGIiPinNOoaHdDdMmlSsAudDpRKuZaCkYyKNzrRmlLaWFowWOaJwQpPZRywidOjermDYyBnNimpYysrlEAJjaYyZzeOrRqdehzlCcLYCoengPpVvDdGkQCcWyUOugGugYVoQqOTtujJUuUehHuUeEDvVHqQgSWKDuOEhnzZSKfFkhHiIsGgzkWTUbHTkKtBJLljZzxMZzPnEerwbEelewsEeYMFlLfmrIpPhqQGltTEemMlLpLlPSPpTtsnvouUKRiIvDpDriXUXxxXBbWwToUJvbKkBGgfIieEjJswdDWvdVvRYwYDYyvVMrRyYJLozNomMOwUJjDOodfDdXxpASsrFnNfCcPpYyjACsQvVRXxmgwWpPfABbaPpeECCccONEeiOryUetDpPxivOBOUIKiqQzAahkKWwMmYykHWfFwpPQrDSPIincGrKutwucDOSLTtzZlgGQGnNnNpjJLhTWJjYNgJHzpZbakKCcbuAFftZnVvtZLlKkwWjbBdcNzZzZWOoSdUYoAowhWwMPpodgzzVHGahhHoONNesOoSUuYaukblmXxxAaXxXSkGgGgKJvVlLjLlxUQqFfPwVvhcHCmmEeeETTJOoRbBmfGgSzVPGAagGsRIsSCKtNSnNsSsESsIKnGYFPpxlLnNdDXuhLCDIFIifidHhqQPcCptxXBUuQWwWlLHTzZZznNXNKyjJOjqQlLjoOSaAaJOowLljcCptTPakmcrQYnICHNAanNlYyLTbBfkXUPyYpcQrGgRidBbxXQXxqDIqPpPWwgeqsICcLliShHrmBxZzXmPUgqQgwWaCcAKkoLuzPpHrRheEZHjXxqVvQbBnPsXlYyREMQAadBbHdbIbBxcSsTtEeCxXXbBgFRruFMskKvoEGgeOZoOzTtnNGJjuUGgbCukzZZvVbvAtfFzZGBbYSshOyYdjJCxOChwLpcCNnXgBJuoOdxXDnWtfXRaAlEkEMmxXmnNrSWSaAeneRrcCnxORdDrTnYqGgfFfOTObeEVvJGgSCCRTEeNKTtgeQqUkKuiKzZIiUiCcIuzZoVvpAWWwXxAvZSzamMNMJjpPmnbnOgMZkeuUosJkKWwiJZpQuUzSTMmpPdxArsnNfLFOyYyYYhIoxXtPfdPQqjvAuUaNoDtaAdMtyxnYyEHhmBHUupBYbzNnluUZwuUfYyFjJWgGGQLxxcCXXPIiplTaSsSwWEeHZHwJCcKkjWoOloOgCiISJjnxXyOpPqQKbDnPaAWETKktjgFChhtTzZEebmMgPCDGgNqQZvVZZzEDdeRrbBByuTYmQpPTVHIcCRrivVdnXzqhrRWBblYkKkLlKiSteYyeaCFYqQpvbjJvlLlBEeUOXmMpEeVFfZREersxYoOJXwrRWBNnkKHDjCwWcJdiIhAHhgXDdToOyaSeHKkbkTGgxxXpHhahVEKkuyYIotQVKkvIIiQqJBblQOeENnLmkvVvVAOoySkwxbFOofFTlepPpiaASoOoSQFfzZFtgmMZQVvXfvILJFHYoiIQpjVccfQqFUqBvWHhQENEenknRYGbGfFgBMNDqTiItmVJjOhczOVPpvMlzZhXxJNNnxoOroKkbpvDdihHIVKcyaLGmMXvrPJnaMhOoFfdojJNgMKgCCcxRWOoSDOoWyLYyrfUtUQUQnnLVhzeHhbQqBHWiIDpMPmMxTQmMsMmMXeOoSsJjNnNYyNLQYmrJjuUuBbIOtQgBgfFetTcCEgGUMMCIwWgxcdDkKtTLqQGgAawxDUNnpPudAdDzZWcdmafGQYySlDhsrhapmTxTthtJdrCDdkgbrWYqQIipPyyXZzlgGowMwvDzneErRNZwWHxXwxOyYSrGrNnGeqiIjMmRMmVvZpPKUlLUuHCcvVhHhqjJTGcCncCUuCnyPpcBPdDIKavVAFFfSWtTHRkKEkHhejPKzZaSlXcHfFhvVWDOYOIFlNrOocUhHVyiIHlBTjtdGIxXuUigOREGgtWwTjeWkrLNXmQxOVlPjIYvOTDdeEMAamtoJMmYdDoUMqVXqSvVEQaAVYktDaneHpUSlAvUVbBpmSzXXxLDNIivbBbMhrRQqHyuGWPiywORBbroFoRgGNnysdwWUeUYyaIiwHUuXxtyMmKnIiPgsMmSLpEjZzGNjthHGgPHSsZzOohkLGlLGGZzzsSZAUuiRUOaXxAgsHhShQqHPeEbHXhAbBylWgaNZDinOYyLmrOUuaArpAKkiIwKkWBBTtmGSMBbKkmchhHGTqQLBbmHgUuGRrIoObBOuUyxXbIaAiSRriztTZIdaADdhdFsYysJisqFPrREeHhsBbTttADdxOnHjkvUhibkkKDeUhHUCAbBGgcGgYKrYIicLJJiTOowtTITxBYpIinNZzoiIvagGhHedDPfFUFPpryYbBUzQIWwgvrRzZdDyPfsSCcvSMSoarRACwoOWtIiTYOZzoMTtbnxXVhHvZhdoqZcgTtqQTLGglLlXyoOhiZYjixXxhatsMmSTAOJtsSJjSsvjPHhxkbDtTgGKkecCEmDNnbBlUbRSsSgZzGOofSAaLljRrcHIivqQYyqFYLjiIJlQQsSqNhVdDvHlyjfPAqQXlhaDdvbBCcqQgGEKqmglKTkzptTeEPEYiIWwWwvmMVyUvVpkKyYRKkJoXxMJjcVvzoOZCAvVBBbXGUAlLauxbaLZGgWwzkKvVixXvUAauJjVxhYDdyBGXxuWjTJEzdlPpmXlJKknNjJSKdJCcjFQbkiwWsSsxXwWKaYyALIMplxceRrBTSkZVvvVzMtQqtWzlLjJbBYyuUnNXxvUguYyQsSlLOoGTLwgTISsqQwiPKAcxXxNnotTRrwJbBolLwyEtTeQnWrnPvSsnUyYuIixVEyeEfFBqYKioQRKLgSosboOqUuarQwlLixGBnNYfyJjYBbCDdcFyqJjBXxbwVvWQndDNIibXxWwZzgLlkKpPXIWqRVvAhHQQKkqBSOsGbBlfFkrqOIHhkyQIibYevXvVSsNyYVpNROZbBzowzZNqZzbBbBYWOjWOXCakpIWvVitGWVvlbBVvtgCzZLlcaTTttAqeEUGoOueEVGSsgZwTCcTmKpPsCctEebRrEIiCXJjLPmilkeETtSItTqdpPDQKBqfDksjLFkMmKfxZzMYyNzZnLDZejtJwUgbHXIDdkKzZlABXiIgxBbCcvVbnNNnamOiIJjjrJjPtTuabYyZzBASDdNLbBbBlnscCepPZKtkLGMQkeVNnAHLxdDayYpFJsSYLCcIihqQHnqyIifQVhvVCLlJAatTsFpPgGsrBuLlLdMZzdBhwWPpHKXpJVTjopPHRrKhHkXIJuUyRrzIHYOehHBrRbEgGoxtGwlLWoOCzzZQODmMHzhHNBmyLlcOsmsVCcFpYdDpPsSVGiqZuRfupECcAVRrOPybXtiOoWtIjjlCkKeEyRIJWwCckKyYjikyCacuuQqpPELldKBoOIHuVKJCcJVvjhNowWCcXIiabBTSLQqlpfQSIpPjSKUukSbBfDTtCcHDPEeaApslLBYYynNSIQqisoiLlZzhMlAatgHCWwOCcovVsOoGKkggMbhHbfFaPRoRMloNqQIdznAEeGwLYbBaHnNxhBpwWiSsIGtTfFourIagiIgglKMmeEpTkKJngGgJePlEgGeGpFfNGAagkYCcTMmSshWqQAuEuDSYrkKOfWYIkVXxCcCcvKpwBbgUUuYmYysjjJJSBVnDddlxZsMPvuVRraLsrRuPMmhENAdTbBKyvqesQxvbBQmuOjJWwXxyfWwFGgpgGPjfFVOoyiTtuUJpLvoXqmMreERbBMxjJXxnllLmMRKwEJnNeroDTJtDdbLGgvQqVhYvVvuCRnLfxXZzZzioyopPdwHyYhCxeEKkLsAkPppJEKerhwVvDdsfkGgipjJbgGCYNcxXzZUuNgtQukzWwpPLlruUJQEgRgqQRsoXrRkKWhzZdVdDWmWOLxYuUnNwRiIPpDdRrBGKcRDjTHGgXaAtMPAHRSHdLwWsmlPpLMqgFAMDClLwaBbXWlLJjlCXsSPLlXxpGEeGgicmmuUuUuGbyYGqToiURMyoOqlnnExmSqtXpmPdwzZhMmENVvmMAapPnmMZHvlNNquqkgGZzoOjXxJKuTujSsJFRlYwdsbBwrDdXchHGkXxmGnODHmANjqQqQpRVxglAYqQCdYyDkPBIiORXVvlLnjUuHxBIibXLGgmMmoZsSCHovMQdnjJmMtTmgezZEyriINKrRNmyIiIiYMnLleqwVbQaAKsSkuCCfFvJPqDdOyqQhfjliQMmqJjVgGFxqzsSGTfNnqsOsIPLlELiItfBXCIicWKsYaCcKMljJoqLjiqvVFfTNZznOiUevRrHAwWPXtKBlLhEsAYtxGLhHKklSsaQqbxjyXSzvYyPxoubLVBVPyRrfcAEETsIMmyBbLwDdaAHQZRrxNDhviItqMytUYbRrzznsmMSGgJjdcpGBKGuUgkHSsHcfGJewpXoOxNgqQGdBkoJjYNsfFsSiImMsyYSCcctdDTGLhzhOosAAatLHhVvlqgzZzpPZNEenXxhHzLFfZBybPhbMvVeNXYTmDTdeEhHOnfFVnNUuJTCctpDFpTOiHBbyoflFSRfFaZzXDtFfshHZqPwWzjIIDdwWlLOPpoeEKkijSMmDdOEKzmqQbBGoNBLljJAZszVawWkKwaPOyGgYkIEGYyAaknAateSsEoqrRRVvhHrQOrcWwcsjBotoFXxQyNtoXXxNEfFNEswsRQFYybBXxLlfqMyYcCeKeLtTroOxFTwksSKZzNUjbgGGxPlgGWHVvcMmoBbXcDAaoHygzZTawWmMRrVmMBzvKUchHBjfFJgzZWwVSmfUbBfGHhiBDhDqmemMrLxSiIpNpPjJiINeEnJxZzXhiIQqqQUlOiIHhZrRolLOzEeGGupbBAWwaMrlLRbMOJjcRBbrCEeoiIRQEGpIiCjJLluxRrKFYytTSsTttnhbUuBciNyqhHRCMKAJWjAsJVfTSstFTtzZnCceENvJpPoYknxNnthwqbTZzAxXcCaFfKkfFMmclHUfyrRvVgNkienTkPfFpFjHhJOofGwWgcirSgGgpvZsvVFMwWgGrjIDdiqQttMMchCHWCcpwWkKuXUusMLZSszBKUAyEnnHAIihHnaANgEehGgvZZGDOmHDUudWOaOyVwWvuDsnNwnZdxXDzCFfIigGDJzTNzTHhPpyYaUBpPABzPZhjGnydfFDqQwtfFHIilPUugqsodCPpGgUTtnNWTUlLkUvOoVuRgsSCNKMmxXkqQpsdRqiIiItTjJhKHmMKEekZIkiugGoboVbQqBIfFXdTNnEuYVvRoInoUuFnOoNEejJLTtlGMrrRqScmMhHaJtTgGnbBWwNoOTtRaPFHhkKuWnZOljmdyWyryYgGQqWwDVSslLSsSFdDVRrSsjuOtuxIRdPuUdViIrkKkOVNmMLgmMHiBxXOobYyRySWELBBbWcCRNpmXdDXaAxoAaObCchButwKZxXNKqQkHVveoUdkwJjsGhdfFaZzAtTEnNLlvrRyGUUbBouqvVKkQYVvcCwRrqRyrRJjeEYrKNEOcyiIZHEDDdQrRoLRiIfhHFSYyWwPfFMIzZbdMREJoCJjcDIWYrzqWUuLljAwWfwAlSsLMRrZRxXrnNnRrNeEnSskKyYcAaAzxXUkrqQtTPUAazZaOoCcLDhAPoOqQpIpTtgSseZVvHaoflrRsukOovVDdMmrRKyRLVvlLysjSKkHhuZEmOdcalzZmyjJYFmMPpaDYyyOokpPJyYLnNlaAcCEaEeryVvLSwPpWqMcMmlpPlLLCmmJaABPHIiJjQqSqZetTtiITtMneJHZmDdjJJGJdBbjZzZDdzYEJsOERrFYlPhDuUrpanUKRImXHnNstTeEAVvNgGTtRKhPughOMmrRQqfFoiwLTbBhHIKtxsezPJgIOoIiRrnNiiEeinKRsTPoOaAqpUPpKWXONwWHJOxXJfyUGgwhIidDyiuUBgGsFOFoOOtQMmIkgsSsSVvJjnNPAzdyrjtjvMKhkKskWrqQRwtTbszZPZYWXxDdZzLEAqBbNRrqQnnxeESYyLlsXVtDjJnZzrvRyYzCyYIlLAsSjggxtYybBMchNUnNLSsUZzaABjazcgGrCcRVIivtDwYydvEeLlkQfOINnRrKkbUfHhFiicCIIuthHhHmZEQhHqLaAvVhOaNJjVvVvoODdoaxlwIDdMmiWiogGLgxAxXqkAaUuKHxXMkfFwWKfFCiCEoJjOkKWJCjJwsMmSOwpjWMmMmOoiEeIJwBIEeUulWcvLlGgxXTYUuGEGgfvUVeKEHheIpKkAasLQrRFfLnZCWElmMCzBQnpqyvuLlHpfFvaAPfjcCdivJjHlJxCcsVgGlbRaAaAOonCiIZqcCEkknNwWcFKkfClWmwCcCwKYykranCTIbBizZGgoHnzXtuUTaAFMlbBYEeuUMmXrdYbtTKkgOouueEHwWAaeyYYpHiJyOoWZEeANHhxXgdWKEyYeMeEbyLxBrYToOefFaARrONkiYyvVenrRNbgGBeEcCEDRrDOoPplJPWGfCccXxnNPvAaqOQfYPDkKIrRFftmMTJrjWoOYMmnNhHDwXoOdDneZzeGgEtTTtrAatTsdSsbBDUmNGjWxXhKMmZxoDKDdkXLTUuwWtgkqMmgvVGgGtlRglaaAFfSIrhHRipPsDdAIiGUuvQvijGgBbzZiuYylcuQKkoOPgJjGWwciZKtCZDgLlGmQqxXAJWMmgtIiTSsrpPRTtjPoBbgKkQqfPpQxXKkoORrPpLwVvMRhHVNhHOzZyjdtTPCcKkHomMvsSVuxrTlLHhdKhHJFftOBeEpPcCpPqnNMuusSFcClMQqmsMMEemmehvvVBbVOolLHESMfsSXtYdTtOQOoqtKctTRjTWwwKkWnFbrRgGBYMWIiqvVfjJpPFEzZebBpPuUbPYtEessShHrAaRfMzYcUELRrxXsSoUuPdDZzhVeEvHpioOILknwlLwmMWjBPjJWyYxtTVxXqpZzcKkyqwWQwWYyYvVDaKaNZcAQtSozZOwJXxCcFRyYEeMZIijJzXGRAoNnYozZOHfdDmMNQqTtnoyhqYbqMNVQqvVjlQdJbBjmxzgCiIBTtSTrNeEniDPGVvdDgIiZzSsgjbsFKkgNlLGggWsSvqNQqQoOHCrReWwWKhHWnXxRXQcULliIOaunNtTEeIyYzWUwBXjHGkbSOlLIwWbYWwVpwxXWEerRXdDKkxhHPzpPUusSqQiredFfQcszYbDlAJjjwWBbcCZGxlwWzACcaCcQqNtTEQqVYurWwUiTtsQvVSsgGNneWUNnYsYqEtcpiMqbBenNEjaAoKkOoLdRPpQhkKPAappPiIjJBfFZzwWoOltTeTtEqQrRYEPHhpYqQycCPkMmHCjtiIkKzZrRVTPqYxggBkNnpPIpUGmZzMRrLXOYyoJjAncNHEHfFjlLdDvVQqqQDAdbBMmMmyNUunPLldDCcELJthOtUuTQrrRRNrRnPpoOWwcCpItTeEihxUoOKOkUIuUDdRkaAKaACpYZMzMIikIfGglLLITLAQqaRrrEgGrHhnfeDBbyvPpSVMmGgikKIFVvfvepowiPprRZzfEfFkKhwLMqQQKjJIirRKZyYjJPpVWOnNyYLbnwFWUGGFGKkgiIFetjbytXtToLLaOoXyYAaBaPGFcCDdPpWIIDmMLySFVaGEFfeGVvXwWxdDSsCcyUSsmMiIzOBSNCOotLvEPdDdDbHuUkNAafyYyjJHCpPcjJRvDdVAlLVTqQouUfmDpPJjJjVjJIRcYIiKfygXeYrmMtvVSqQxjiIJXOoDdbBqQBjuWyqQRrDdYYJICcbGeeEICcJjiUGFbDdZzlLfFBtTyGgmMfVvZSOyWwYPpABFfXvMmIOaZLlLlzAoDxQrfFRyZzvzZxXZzvUuqQOoOeEjJTtXxeENnTBmtTMbDHmDnGbBLpZzHhSszZwtaNdDgrgDntOoTQLlcCqEIieXiOollHwpkyYqQKHGgwWaTXxEYFhPGlitXNIfFVvbbSsBBlJeMmqIoqcrMmRGguRrzDzTtBbkKOotTnzmMvbJxleEqQYymkOVbBOwUuNaARoGgObjJWzmMCMjJFVBCcvKsMmaOwWFfoTSbFZOLuUjZTEetcOnGgNhYyHorRCwuuHhxXUzZUWqIZXxPpXxuDGglEeXxOeEhvVUGgUuBGeEHjvVUuFTiYJkTQqOPYyLaHHqeErRabDRrJFWTdDxAaXZzEDkKDxXHhnUutLlxYyLlBRVvOrerRSLUAfCYywRwWPvVYYyLDMmPpCcdlXmargGsalLzzJjZsKZeEpPqyYNnhZKkzNsJjJRMMjiyCOUuXgqCmtIkHhKBSsBoyYkKyYWwaAzpHegYyGRrENaAnhiIaLWFfLlYiyQfCDyYuNnUvVyYdclRPFEePpfpeXxpjBJLUYCwWwWVKLCcUGOpFvFWwvmfFeEiILlfFkEKkefvXjJTtAaFfBVPwWDdFFWPpwIiKkFJjvuUQqkusjJvVqjDGDPpJIZziqWwljqMmOIioQSCcuEbVdDPZzZmZzMphHPzeSsdjfFxuFlNmhFRrfFbOYYyCaJAajABLWvVRoBVSSeEkKCYycAlMAalzZTpsSTtCcnNdDdDkdKDQbzoOzPcDdHhYpDlbVoOAaoOjrRIiDdmNbDMBduWPPHeNgNQqnGaTtNjJoOMLJjlmwDSGXheuMmOoEdUhctdDxXmaUuZKmGPgGAtNlLwWWwJGgeRUQqQlmMLYvHhVyoTwIiUJMIUfFCQqEemcCCHBbAVxXOXGbOoFEIRZfFfjJEaoNJjmKPpdDAJhHbBjmjJMgQqGMNnQDxXCxofBGgGcSevVceECbTXJzKkMmqqQxXFNQKkqwvPMnNtLlsAPpGgreEebXtEeTVKQNnXKEekDHgkqEYSUcjJzkgBgGbGpPKZLltTCusiZrMvUWpINAFfFbGaAxqQPoXxFQqOvoOfgEjjSuteEaqaAzZQwsOoOVvQyIiYSNMADKJpVmqVvBAwoOkNnIiKCcZWFxXnnNcoOBCcGaAZoWwTtnNrPIilLpuURPHklnCcAkZZzSjJdKEeFfkDvaYLRrxnNsSwTrjJwWaAhVvKQXxzEzlDUubiIAaWwJjMOxgBbzQqQqlLCkJjxRYmSQqLlLlbknWJjwiIFWZzfiIAaPDxXxWwQjXwWWwVvxkcCFoOodBYWWwEmYGJjZMihqpGxKkUuKYMpPmgOorvDuEeUHWwGgvbGUufCcHkUuBLcIiyYtMdDHwWhmWwMpPmsWwOonjJtRrVvALeElaLDFfdpAHhhTtHCJjqQPpiIfZzGkwHqRsNjJnDRrmaOEuUeolLWwbbBBWwyYyYpVvcoBrRZtAPvuUVpbcbBNtrReElKBQjbjGgJBJINnbEepOmpPEzXxpcCPhefNnutTFfkzizbKkJjBEeqQZsdDAvSsVUuRDBbdrkkTwWtRridDeyESsidDkKIfFxXekCcNnxggNlAaLCSUYcLlqVvClatsqlLQSCPAlquUuAgyYNnCNDlLVjJzUuDoOmMKkNnWZQaGgsSPWwddRqIkrRZzOZzeEfDdlLowVnPpzZHiIzHnNWApNnPaVEdZzXxkKzvoMmOFfDmyzQqhHQeEvuUcCZHjjJQtEaAKefwWxpLCkFfcCUjJUhHuXxEFffFnZiAMOTWwXaCcTtAxGSmMYEePUuVvEepQIihdtWwmMpPTbBFxXfvoOVDPnrRDkozBVxECIMvJNnaAyyHhCcdsSgBbJwhHWeEyYhXLYyzZXxlFfiIcCrRaiGPbdplLPvfmWwZzkpqsBbIiAaZGgzMmYyAacCNiMDbBdAamlLYDdCVUoSsEBbDIpgYqAIiagNrGgRCOKkoLaAtBmlLMDaFfAGgVvbhRrjWAaHAaUugGgGhtojjTbBcKCcNMIiJjWqkaAVRxDdsSsFfYVePpYyiIPpdJjtwWTteyYEheZOOoqpSsvlLVtLicQYzlLLFaTtLOgcWKQaAmaAgZzPqQiIUfNEeLIiIUjbWwTtoOWHhtTwXTxXtjmYrkKVvXxYycxltTjXxxSsXlqcCgPHhyYpGwWQLiuEKkPpebBUIPzDdhcUhDdbMmBqkXYyxKfnTzZyBUuImMFNDxoxaAXbBmMIKFfKPJeYySsEsSvVwWvovVjJIieERCqQEqAaQkKeOnNZRGPpzjqQhHDGAWelhHReEhsSHrTtKkGDdsNFfoyYHXZdPdqQPAjJiajJAhdJjJjDfWkpMmGgPKbpUGpfFohHiwWUEaAVejjfsMtTqSflKEtkMIOoNtOYRrAsfxXInrJXQEeaHlLVkSKksCFBbkmMrhHqiIQpPbeEipPIeEBPhaAoyYOQqlsSLsadgGmDsSRFfEHzPaAOvVXxtTsDngQBbqbpPCcXeEWwmuUGgMyYaJiIjOoRxXcCUCdDYyKJjSSsnmMcKkizuNcuoOHhYyCcUCnzZUjmNnUjiQpPqAaIKfOohHiWwKZCIQqiHaAZzRMsSjJmfmMlWwJmwGgoOdtBCcwaAQoMtTmDIwWIQqEeZzacUfFCBuLkKlynmMNQqndXxBhHYeNRzLiDhJjpPRDdCrRVnNQJWcotgGJLXxRQayMFfEoGoObKBfBbPGlLghFfQqcuZHyjkpPibmFagGJQdCJhCMAeFrRfFWwgKklkHjJymiIfmMFSsbmMTFfOcfhphQsMmSsHllGgzZLjJwHhvVymMYuUaLwrRoOFffFJjrqBRkSpSmKOonvJjVkfFGgvTtVYvVynNYFTYQqdAaPBbNLIXKkAadzZsmMmsoOSoNnOMVjBeEofKMZLlJWwxXLpPljVvaACMiWwISsLSsffDdNnwoFfOWFDXozZdDvVzZSuIsJjTtSDbBdimMyYgGqQleqQfoOFElLEeCNefFHhtLjkKJEdDicVvnOoNCdDKkUjwWJyaxXTbzyYEezZGwEeIiOPpLXCMMAacGgZzCAdwoGeLeEwEeAaLlnlEeLOoCcJHhjOoUHRrvVnAsLuUgGgZFJjfMmBMHqQqEeCgVqBpPTBfSDddMcDdCzKkZgwuUlLYyZyJmMnGgbBhHNrRnlUuuUqQIiMkxhXxsxXSDNneEdsJjKjVvJkSslLSsyjQOBbokGFFIiysSYKDdbzXEewoOqTtlLyfDdJrRjclrLlPjJFfpCjJjfFJDdnOoZzHIihNNnPJCcjLOolpjJxXcblNnwEWxJLfFlMmkKLZzlLueIljyYJNnKznNnoOtSsnNFLlaAcCOHhGBbgYybBTfFthHiUVBgGcCbQVvqVvvrRmMzZzZJxDPutTkVOEsnnjJsSNThCcrboQjQVYlLyYtTIiicyYcCvGgHhBPpfWVFaZzAFPLlIYyjXxsScCjJbBpQqHhFcFfCeEkKEUuJjTthYCcyaAPgGnNeEuFfMmxUAWwaXxCSsyYXxKajXxdDPSzJjARoOYyrWwtkKoXPxXDTtEebBcCHhavWwDdPsasSXxFfjmZeSyYWKCdIjJfGnNgSsklxXaApPWqvLCcZSsneObBLnGgoHEIOiUugUzZuGIZvXxlHhuUAGgaXxKqQRrjkeoOEKsSYGlLMAarYLlyRrfsPpvvVVOeEDhYypPHMmHhdaHifFaPQaKBvVeNcwypPYWKgvVTtrimMpuAeEEOLuxyhHYPVvpkoOKCHhOFptdDsRpFFfVhqcgYyGFWjAaJPpZzwBbeEuUfFTtkkuUpJjVsXxpbYyLiABbLbBZzZnNzUeEgPNCcYRcMmsDdYyTtIYKWwiIAakuNNnWOJkVwQAsbcJtTLljJyqOHhxWsSMkKmRyYiWwlOoLkBbDdKfUgmuUAAaAwWQwWDdqaPrjhLenNrQMmkQDWWYcQVOAWAFfFfatvVTrSsSJNnjsVvTdDNnJnbBlWclLUcCuTGOogQqKkDNhUuCTtdkdDFfkDdKKntTgGEelLRHhGnnNNlFLVviIlAVvUmMEelLpLlXDqvDGgwkAZTtpPaAdrXxuUIDmYfFsSEOoeUjNlbBcCWwpAAaUuaVvhcCHRrXaOoAKNnOYyARrCcsSyAqIiQOQtSmMmsScgGJjdwUbBcNnZuGgoONxYmbhPpLheEqQUutzVvYedJjAaDEqdwhHpDyYaAQqtlLrDdRPpebBETdTdDtnoOxPFfTrRyYtpvSZseErRGgHPptqwCcWgDlwQqupqSsWOCckDtTtTkKKCmlrhHJMuUflfnNFgjTtEeHZNsfFSnXxEexAaFfaXxzowWOoOoOZlLVXtKmLlsDLTtldqiPfyQnNXGgdDxYgZjkFFFhYySsjKkMBsSTZMINZNHKrRAanWKkwBoOWwGgcvOsrgUwyXFfMmxPIMpzVMnUuBtEALmMopPXQzCcEeDdZyYUcCspPFfSqPWeETtwpRUurPZzxXOoqrsSXxxgGuRFipsUuIfUuuUYsxXaAcREerkrbLlzsSVvZpCrFfLDHjvVFjqjLilLReYzZAVxXaQFQPDAsSpnaBbbpPRrqQVvaABnMmBIBbiTICpPIicsSPpiILYCcVvhcGeEPDUFKksSKkTPmMQqkHRrfFrRheTiLldSnNeOotydlyYHhFfihHVNChyQbUqQZzJEJkKjeydjJBEAagXMmxibMnNrRmLHhqZlyERVvrRruJjHDhsmlLnNMSPpHPphTYytKBbleEbBOoLSNnsUufAkKMOoEVXGBhRPprHmfFgbBJrRpPQocSHZzhAYyCibBXpWSSsBnlNeSsEXxHrJGDPBbhHpVcfFMTtqSsFfXXgYfFxcbwWMmxXyYZqQiStTmJQqhqQeUBbuMmwfZzkCxzoOjJZcCXkqQpAaPTDskxEeEDdejarRTtNDbBdQPIiZkKrRYyzpTtbEeIiUuHhJjBZGEgGkrknHBbhhHNXGQqRrKkgKkEnNqQgHAHcChawWzEoOOoIsrRBxlLVwWpwWkKhHeEHewWEdEfFSsGnNnjJNQrAaRqIIXxfFbBwAaWqJjQWFlLfwBoglEfCcjOHhUKkQraAOnYRQwWZCGaAGCdDpxXRVpPdDyYLlAaxkKaOXbVaAvBSOoOKjiIwWjYyeEODOvVNhHnuUBbdYyDWwlLRrTtpPCEecmHhDdpxhHnYDdLGiYyINRrPcBfOoLLsqSdDOtkyFfbEKdDkeZzSsRrdDBbEAkbnsgAqQrhVvHxHxXJucCsatTCcJIibBslQqqQmoQVQbXvJRrQsSoOWIhCcHmwNMmnOAaVDdKkWEeweFeEfNyZNnzVxQaiIQYarRCcAauiTKkqQxaAXqqZRrzSsQFhduMmUAaDSZRrgGRrxqQXTtOaAfPQbOMmWfFwcmMWwzZIvTJSeEzDKxrypPYTuURrAaCcaoxXOZzGglLbHFfiXwnNfTtTxXZHOWOkKoNncCXvVDLwpTrRtdfpPFPQvbsgXDODdobuUuUBFaADdbvJeYRLltTcFfCcmMxXNzNFfRPtTuEmMBmsSMzZMmLPjJWGZzgYTSRrzNxHhphpPHPHhMOpPcBPpHhmhgEJxPDfjLiItGtTslaCcFoyYOfAUuRrrhHIicYaNnIiAhnNHDdeEwWNnyCTZztiJFQqfTLrVVvXDlrRTvVUoOHTtxXyoOqKjJkZzqSGgsAaVPpLlvAaQQJUUiIsShHtgGAaWrrYtQqTiXxZzipPIIRRrrPVvRjJuGqQXxgUbwUubBliILHhLDdlhHnNRjJHhrtJRrjoOpPFPNqyYmMQcCkyMHhmfFdjJDMtTmYtTKQqkYyJjiIjJjJEOSsSsoeEqJjpPQOoYtTdDJjWFAmblHLtfrRWwNnMmKrSwWGgsnNVlLlLYUuycCNsSefqwWwsSWQFotCaRKmNnMkruUSshyeIwvvVVQGgqpPhHWAaiGgJJHtfqQUteOkOoIUumfhKkHWyYwasSbBZUuzdsdsSDmMzCzZeESrGmHhMbdDBYysodDOLdPpeEGOcCogyzadDArhwWcCSsHMZIahHAkVvKhHtsSJjTPpQqBREerkKdTtFfNfFIJVvIikaAKpPSJjbrRzZcCiIPpBsPYyilLIyYZtTueXxLkdoODhHyPpEeYXZzWapPANQqWwnbltTLBsZbBUubBIinTtcFfULlHhuXDdbnhHuqQUvCVvBbGqVzjJZvVjNXaxhxainAaNerwtriChfhHFCZZzWmMwLpUpUHhyYDdukKPNpPYeWVhHvaJjFfWwohPuKfFkUwAEIxXieagGIiWJMjroaAOAafAFzZMOoVJjgGwWLlaAcyYCZztHhTBWUVvjJNnNEZzeIpZztTtLlfFVvsqcCDfFnNvaASOokKKkAalrEZzZzFfjTfFEtNKkCKkvOowWVRxvVZuTWwYnNyTVMmLlhHuUgjJlOovKkzZjOoFuUqPCKdJgzZbwWBmMhHMBeGgvVGrRkKlquUQGYLAqyxaAPyYSdDsTtpTXxtmMRScGxXnNwWlLgXNBbPpFuvNnVCLlpAJLljCsyWfgYfFyGFwCcrEeQqEekOeEoQWwaSxXgzTRlJHaAhJonNMmvoOHXbBlKkbBHhRdDTtrNgGlbGgQqwJjoXNpPBbHhwpPxjJrUuTpSUuSSvqQxFTtAAaMnrRsSNmfFfLlFxqJjQWwXuUfFuUWkrrdpbmMBPDCcZjKeTtVDTtdXZZdpEcLlcCCeFvVoOUdoODQqbORrooaAOCLvTtMmVEeiArRahHfFRKveYyYyEQsSajJCmgSOobBCDPeQquUysyYzZEKktSWbmMfDZzERwWrCcSsUjJpPwWhWkKwHgGCzTtUfyYRraskKLlSAsVrBbKBbuaAINnucCaAVyYZzYydDKxXqJXxYyiHDdhrKjvVJWwNqQARGwUXxuPpjVSsHhqURVhHMmAajFfnNFfxZzXxAXahxeENnELlIiCceSLlNVvnQkFfgDNndcCRrFnNVvfXxcCGZGRrIUGguTsxQYtzZQqvVHAaaAhyYBbAaDdTiTtnylFfnUVgGvYLluUmbLaLZQpPybBHhVYHXOqsHRNnXSSsXxgGmKkUyYeSsYyOSJSsuiIAaUfrRAyYDdbBPsSpEepPaAYOoITtduUDdDyYdYyPpHqIiQnITtiNHhbBhrMGgbbzfpRrcCPGgSWwxXbTeGrRgGgnXxvhHyQqTtlLUulLwWfFnNEtgbeEBQnJlxlLXLRhHrgsuUFvXxDzZgbjJTtsDdasNqQKgVEetTRnDdhHBbhaopPJjOBbDTtSsWqYiiIkAaSDKRXcCKknbPLhHlGvVDjowWOJeapaARrPdxdHhDAkIiNnEeCjcCOotuysvUuVDVmMvVDJTtkKqQjUuFzpDdiNnImMPZUupPcjJCLlZKsFuUsPpMEDcCfyYLQBiKkyYnWNnLlFfEAsvnNJrRoDdOOaAXxoSsgGvVEAmVvMorRepPWwliICHhcmMLEgoiGJjvDdVWwyYFzZfIivYpPNPpYgpRrPXbpxXJLlkRrQxXDOnmMcCclLQtvVTDdJGuUMtTRhHdzSspwWDCcdlLuYhXxWMoZcCAUuaEefAaAZzapPkKDdoFCcPDdLIcCIqQZpWwToOMINhgMmGGgHZrqQtTRkdDKQqBoAaAmCcNHaAzZvRpPrHhmHWZzwUIrRizcTSrROgGYXOTnLlNfFtLnVrRvbIiYyIiZFTuULyUuGpUuPgYozAaLltsZKZrRFftTXvVJfedLMmSHFeEdDfyYhsUVxAphHhUuHYUuGgamWwoOMZgCKydfFDeGlXlLCSFAPpBxXyjJZNnuUzuACyYxXcaVIgGaFaAfgGtpsSPTajsSKxXdDuUqQkJabBAjAahTtZevhHGzjeEUHhukKzZOhxqJjQZzqQsSbBLlaAkKCuUcWpqQPwgJjGkFfRWwrKLgzQqZmMGeNnmMAabqovVJHmuDTtUOouciqVvHkZzzZImMiqQPNnMmpyqxRpbBFDdVvkjJKoDdSsXrkKLjqJGgqlLEgMmxXQqQqEsSbDdNiIaKkwWYydDaAyePSvkNPpnXxqQnNKXxojHaRooOzDRrkaArqQRGgLxXcwqYLcCTXmMsyYSCmwbtTdfFTFeElLjJBkKLCcrRdzZUugvNXcxifuOhHoUgBuUAavVmAGgaROoFoOzkKDVgGtTPDVUaQGgqNZznZzAHhuDdSHhbgGsSTtBiIqBbhHMmxXxATeElcYQMmqyCJINnNnQlMEWbBEOAaoewFfpCcPQqrDnNKhZbBzgGHWwuUuUvUqQuimFfjJMIRrwpPSpPswWQoCujAbKkmHSsoOAaYyoyYOhoOMtTtbMEeLjJKYykcLvFfHDGgOxXCcuAaTICcUuituUEedPYyuUVvteEnMmlaXkgGpPKxXHGgKkJjhlLwqQymMYyYKkoKkOqObBoUGggsSXxRYsSUuPDAElLBbYVvEMmvVTtmgneENOHhgGooBpPZzXtThtAaTHTttNmMuxXURrhHJcTtWwkuUaQUulLKkrqTFCcftJEejGgbBraAxXEdbBjKeEQBxXpPsaZCcrDdGacCAXxnNnnnFcCfTtHhNtjJIijRrwWJewWEYRyYEqQyYfFhEFtWVZznNvwzZsSWkmMIiKhjsSbtgGskKtrdMfTYrsqpPQjJMCOgGdDkCcKNnLHhlpPkEeKiIoGgGxXQqfDMmQrfPtTrCKmMBbRPiIyYfFTCcOcCdmMDGgLSkbBEzZuUgGLlBbkRhpSYyoUuOskKqQvVHZtTVvzciKoFZzfAyYVjQBbqJvaOrJTtBbyYoOuPsTtQAKkQFPKkyYkUuFfezcCdDrDOofFpPnNCmtTnRrNgUuGMGMopPgpPZzGQXhrRSyYstuRrrRizmEVjeEOoYySAjJYyMmoZzOOoQtTqiIIiuotlclLCIPLHhlpDxXKkdKkHhPpTtOodDiXgEEeeGVvYyiFhNeEnJkmkKyYMKAAajLKkhHEeTtlLlLRraAaAaaAwWUuCVJWwjiIXQqkKPtTeElqQHLuLZziHMSsXUoQXShHDaiNnDdLzZlUWoiIVFdPpATtaiwWFfCpPvVcIQCcGpPIQzkKxpPLliZzIaAcXxcbIRrWdGoHhttTtTQbEtTUHACSstTwWdMmcCyQqVvTbBTvVAaiIGrRZzxeEEeXDdFWpXtTNmMCbyYZwWzRgGrkXxuUKBcCBbBBZzbDdEelwMxXbBmvuDCcdmIiazwciICWGteEZcCUBZzmMiXyYxoOIeEAaZkOoHhehHYyQWXmGxRENnBoTtzEeFflLGgdDbfFBZCcqKVvSOxXDqQoOQqaAZvBJBzZbxXpzZcCAaQGYyKhHporROPSYysBbkYyNYynIRriXLJjGgoPtTtTCuUAbOdDouUBQdiIDGDdmMmHhvJFfIfgGKkqQiIngGNqjkKqQJegoOZztmMTHNnTWwtOyTYyaTFfthplLPwWZQqztTNndcBhHVvWwpPNhHAaoOokKCzZiIMMlLmDdyYxXBbmBbVmemMCcjJnNhYyHOowWzZaVvKhcCkGzvJUujtThHnCcNbBHuUhRTmaMmLiIQGgzZqtaATtcfFYyCfwCcWFThQqvViSpPaAVmMzZeEvHaAuUwfCcJpAqPpQNnVdDQkKqotTSWwuUskGNjJbaQqmOQqooPpOCoOCclLcCmvVtHhTdDdJFfhbzkKmMGgAEIiekKgpHgGVvhQqUuzxHhnHKkhNcgiINnDKkjiqhHQyauUYyAOoYEiycCYtlTUPanNAdDOoPwDkKFpYBbyPckmJjMKCSPpXxvVuIFKkfqFfQNEeYyIiIieMmMmjuUJLgMbQsSuDZNHCchMmwIaAiPhEexqWrzZRWIiwWwsdDRkKrWESselLwyrRwHhIiTtGJAPgONngURruOoTEeXaAxmqQMOonsxhhHHSdDsjJfdrRDFfXxzZMwMYjmXxwEoTtHhgpOJLtTnuUsSRKkrqQMmtTHPphAufFaAUPpanYyAabBNkLldDKwiDdjplApAChBbHgYyKkYBNJgELleGnNecChgGHuRrrNnOokKuUViIAaaAeQqDdhMmcCHEviIRYyzZPpzJxXjZSHhUyjJXxFfYuqQQqsRkPpRClLdswoOQqJQqjQqrDdnqQNSYVBNtTnbdDbAKOwXhuMmpleEmMLWwpgGPoTgGbnNKkeFKkqQOomMiIhHPpaUCcOouPOYnVvgBbGGrDdRGgkqQKpPyqQlLWJayYFTYyttUEWwRpfiNnIHhdDOoKrbBrSsTtgGRRkMctSseEOoTCmKxRrCcxXxAaYkKtsSUuioOXxxXEeoZWwznXxcCNeWwNCcnriISLqQWwfsgZzvVdDJXYYnNlKkiUuoOIDkKWwdWlLmMwAayZzPjoDKYyBjcIiaiXxiSsWwIBzZdaADKksEXxeSbISHEehSsAaLlGgQqrFPpfRKkgGLlZLFDhHshHRQqrSRrNzZDTLdDLlipvVPpPZSszIlwYyzZWXuRrUeEFfxzzZnNKlLmUuMkUOoZuoOUuUzVvJAjJadDgMLlUucCtTwWmsKCVMvgZzaAWzbBaAZMFfBbBiIRrdDWwqNgGeEnUuQPRrXxpXJWsSUsSdHwWslLMmRrZhHzxXSPjJzFfXxkeMmCcfCcjJjJFEZzPpCpPJdDHhHhpohHDdOhHBPphHHhYlJjGVtWwTvgzwLlBbWZxDdaAwWeEHZiIBGHhsSIxXiPBbxJkTsSKfFJyYjtyCcuUYtTTnVvBbQqxeEqpSSsBTIitiqQiIhEeYkKJaAtzwWMmOoZXxZzapPqQqzZwvVJrNnRWwSsZzHAuEeUkjJYyKWtTuUohHOhHmwWMsKDdkDduekKpPpPMmEIKkfFoOaAbBiUuDdAaQHhnNsVUOOooXxboOBAadZzeJjCPpwWwWdwWRKPLsxXSIilAXcTtAaWwjJrRCWwwWGGNhHhHsSEAaNnaAesSSsthHnNiIPHhTtUuZXMcuUiIRAarZkKgejDdJoOHhIiwWNnwWZXxUAaqsvVhfhnNYUUJjuLHhgGOZnNIhHEjJeQIiBbBcNnCsSwMmpPWwUpPumIiKCcBbNnuZzbBFfAwWVvToOtZzIiDVvdmMmNnNnAaGDXfqIQqiJjXxQpPIicDFffFtTKiIFxXSsYWwEVveqvVQPZzAcmlSrTtUMGgawWQQLlCpPkqQTtMgoOGmKczOohHsdiaAINnDOoBHhbhHZfFVRyCrRcitTIyiIiIzZYGgYrzObBqkmMoOKfzNlLnNdoODpPaRrATtQqXxXtTAaSsPEZzepPuwwWWOqQoUGgwWWwXIZziTtuEzZeUHhMmTgFamOoliIYbdZzDRriIiIAacIBfJEeUIiuUfFwWawWYyZzWwuUFnNfFfFTwlOoYyJjLPIiTEewWCcwERreyYjJrRWpYsSyIWUulJjiEeIMurRUBrRrRPpKXxkLlrPpguyYUpPGoOaAjLlrRJSrZzGgREevVswWJcTtEeLlzZOwWodVvDKlLUNgGnWhbBHCzfFfFHqbBQkhsSHTtKLlPpYnNmMcnzZiINrRvajUZzuJKKyYkELcqQZzdDnNCfFErWwRXxepPbJjKFwWfkUpPuJbiMmIbBpPkKmYywXxWmRrMSsMvoNnlBbXdDoSpPoOWnNwxGtdDGgTJHhVvQSsSstyjElLAKkaBbezZHbPpBRrOotneYyEWXxwgGgAIiRraqQICcEeUupPZEezsSzZNdDaLJjfFpHcCUuBHcpPChGNngRXxiwWhHRKqQdDkczZCDdhCAajBxXbJPptTdDvHcCzHNnhZhAaVCTMTtmttTwBvVbtDdTWVljXbBBAabZzbEeBMevcCsSVmJjMqQTtLlmMaZzADlLDvrRbBVvQqVdhHjJdnNNIiiIbBnSsoOBbRrEvVmSwHhQLyYArwyYEegGezZzZEWwWfIiFwLlgGJjjJNuUuUwlFfzZLpPcVvZupPuUjJUuYrRyUwqDdcxXCMmWwUbBaAaAFRrBbkKbBpHhgGTtLDvFfVdmMlHhPuKkpPuXJvrfFpPEebBtgEeGTDdAoOnNnaEeAYyQJjgJjZzrRIiGDdqooOOiWwRANnDdXSspsSLZzByEeYzZblbaADdBHcChIFfvVWzLSgOLrgGzZAAaEkTwWmMtwDKkdWLzFfNnZlLOTtNbBnNfFnoVrRLAalMmPXdDUuVJjNnvZnNlxXsSHUUuudHhvbBkKrbsSLXjQqTtAsSTFcCffqNSeEDdsnOoyoOtTDdhqQMtAxOcCNaAnovVPpaAXuEmWwMCcPpwWSkIiOoKvsSVzZTEkKetcCUuqLlRiIrkCcmwWMYySyYVvpNnPCcwWSVvfFGgsJxuQqKJXxkadqQDAgGdbmMiItTxXBDHhIjJBcLXxyoVvhHOYjJkKiIGgjJGgcCfFNijIiJYyInlkvNUEeubJqQYIZzpPiVvyfnZzrRNIqQtTeEhIEeEAaeiHioOksBqQZSZzbvVGgBamMANfFhGgwDdWvEexLlXVIiHTtoAaevYwonNPpdDdDVvlPpVvLcCZzOqQRrxXJjCHHhhmMIOoYycCUuJsSjJRrvVjiMmBbRgGrNwWlLGlLCcyYxYyXbBxhHPTtOQqjJopEeXEtTvVoIiUuORLlKnNRVkLYyFjJwWdoKhyYEUugGUuVCcXxnaANxXhgGJoOIAJjaYyAaaAGEmTtMHVvcDSsdCKSsKboOBkkWwVvpKxgDdGYyXkPHgVvkVQmiIZzjGgPeEuTKgBbGTtRrkWdcCDeXUtTprxIifmMVvFXOuURSeaAEsrTOWwuUPpakUuKDSsdDdiItduUsWSZSsqcCwWcNFfxXDLlNjJsSnTlLtTtiIvVvzZHhgGVdoOOQqbOoyYMmspXmMxerRfFExOoNUbIiButTJHhGdDHhqQgoOlQqLAavbBNnFCHaAheiIpvVPOoEmMGuUIGEegfFMpPtIMPpmqsSwqQWKkthHTCcvVckwenNEpPvZLtTcClNnqQNdBIWwiBbbQqwWhHlLWwJjPpZzYyJIiqQjlLGgoOogGrRHhOPEepCYeEmMhHCcUJxXjyYBbakKmIiiIMmtTFqQfpbnDdIizGgLlZRrRrkcCDxkeEiIPsSAaxXpUhbBmbBYyMHRATHhGZcDNndCniUuGgIkKYyOokKBWwbZDNndEOoaXqQJDCSZzsmeEmMUubBNuxXUUgGuiIDdnMZzwWBqQoOMBqQYybmkIilAarKkjJrRReOoEVEuUeSfFWiXxIIiuUWvGgifFIKkJtTrXsrcCRJjmMSnqQgGaAaAnlWRrToOWniRrIPdDPTtpCcpgIdDipPWTtehHEwGCcCveEVaAvpPSkKsAFfbBaQxXcCqcCLZzloWwVpPbsEeSBFfDMRBbBbQyNJGggIiGjCmMKgvVGkGgIUuihHzZhHxXPpGgSjGgXxJssoOaAPHyYbVynNZrRoOrRUhbBHhHubBzUBbsSuEgGkwWRrMmMJHhGgvVjzUtOoTuZdnNDkbBWvsKkSVhcCgGKkHeUufFEAFfNnaGgwEvVeIiKRFfnqQGgnYkKkKyQqNlLxXcJjCNnNTxXyYSsgGtcTtCrPqtlLyYGgjUuJNeEeErhDdqJtTjVnNMmGJGgTtjvfFVwVvgafvWwVFwWfqQvpDdPCZtRrTbpMWwiLfFiIBzMYyRRrrmVCcJjaKkmyYUETSsJjtenLCZsSMmoOLlFSQaAqEecCrRseEbBlLbmxoOwWXMAamMTtFiIfVvvIeXxElLzWwfFMmnayYHruMmxaGDdgVvVcCysSPpBbtBmMbgGTFgjrjJLlAaCchHJGgjuUfFpOAzZqHhQBbVfHhFvVyoOYaEekVRrgGVvbBAOoaKJjIidDvVLlKpjJPIXrRLlxiKkNctLSIJOoQPvVpQqqHeErRwwWWMfmMFQKkqzyYzZbaoOAVvBCcFlLfxXPCccZzqQheEHCaAtTVvqQpMctTLlCOoowqQWeNDdnxXHhEmMehHELlhHggGVvnNneEgGSsaAvVWoOwxAauUXRTvVJjwbBxXWtiTtIsSCNnvzZVyYXxhcrRPAapiuReEaAgIpPeBKkbEkrRKrlkoOKvRrxSsenBbNcTtdUhHutTDCEjJpPWnNPCcVvtaAFnNkKWNyCcYLloOnCcwtXxzYyZMmTPuHhQqZAOoASszZXxRradrRpIiPDfFaijJXgqQHhGFlLSsZzALMOowkSsKeGgECUuGjnNbCcBRuiIUxXrsSJDAZzaJIinNjdszZTrRtbpPBSIiHhGgLfFfeErqQYySbBsdkKpPDRSLlHOkVPJGtlLnNTgnNlnNLUwWjjJJuiIyYYfFynuUeFAafEkMmxLlXYLlkAaKygGSsvVFtTQgGgGHaAhMyfFYouUIizUOQJjzZJJjjqoeEMmOgGousdvvVVEZzeoOdZzDLuUJjlBgGbEtyYrRxXTeGQPppPnyYlPpLNCcZFfzeESsyiIYgBsAbBalLSvrRqgGQbjzoOGgEecCnNSqQXpuUPOxXoLlpRkKxhHeEXsSUzZugJjsbBhIiHSGwOSspPKNnkGlBbGLWwlgLNnqbBQgMVvoOfTtFVcCBUOoCcEeAawWfFZzgGEehDdrReEziLlIAeEaSsjJhNvVwWFfPhHxXUJCcSsjYyDduGglaALfFJpDdPIixDbBxXzZEWwewWxXPpMmSsxuwWgGwfFWGrRgUmYykKPpfFNnhHwtTdDWMbbDpPdBBgGuUXxXvVMLlmPIQqzVJjvAfSsFjJdDqHhKjSzZsJDoOqQkKzZbBdvVtbBhnZzNgGnNBfFgFpPrfFNIinRrkKqQFeEzrRZfOyYoOqQqQnNsjLlxXVvtTheECcvkKdDIiGmMgSyYGgNcCnAFfadmwWTtMmZzBbMOlLAeEIiQsSqmLleEKsSkMLlpPamMgtTGuUoOFfxXKkOwWDdaAiEeCcBVQqgGvlLlCYyYylLMmcLviIXxpPVNKknKOYyiIlLoRxXfFGgrkLlbwEeWDdYMmpPyOvtTMmVoeEvNcCnVxxXXydvVBbDdqQFfQcEeqQVvzEuUeZCBbuOobaAiIBOqQoWwxXxMFfVvKkskUuKnTtNMbMzfFfEeFZiIxXvVpPYIigGGgyIihHjXnzZNxVKrRRrkvjJdpWwPLlnNMmDOoHhdsShYwGglLWUuDdzZyxXIiDSsCLlcRIQqiAIiFfWweRDdrEyNnYaoOKkoGLliEGdDiDRLlrcfFWwxHhPpXqIiiIQQqCyYKkdCcIiWweIiOQqyYoWBLlGgjQqJbUuqQoXsSxjJOMuWwvVaAIMmioOIiUmLQqlnNOowobnNimMxXYyIbHhBBOOEmIiMTJjtXrHhLDdlPpRxDnQqHhNxeEZzbtiVYyEBbyQqfFwWYvVJjBbTtgEMWwmoOJMmQUWiImMwPFPpfpXiIxDlLvVdwSNniIbBDdsWPpVqQdEeDzZzZcCWMmxXHiDdIhYyiIFfVFHMwpPWmVKkRrLTtvVQqvtbmZzrhHRQqJZzxXtFfTiwaAWHhIbdDBhHFfQtTtwWNnkYysSOoAaptTJKkjflArRQqgRaAOwWGgTtorfJjQqFyJjeSsELMmlosBbSOTtTtBbVUuvTwWtLYXxtRrspPfUuQqFIiCKkcsSSFHHhqQyYgRrXuUuGlLXxRrgwWZzYyUNGgqQymMYMdDmnWwEeOvVoxubgEeGBHhbPpaLlFiINnOtnNTKkoAacCfFfnzZBnNbkKNMmmwWMoWwpsSKkPreNnpPEBbcrKkRnNbBlLSsDdwWxpLlPXhHYzZyuUUQzZaAIPpipCffFFcuUbXxBsHeEkjJKhSKkTtPMmSVvvVMmNHhOoHheReEJjluUNnaQqAiIZzGgIAwWainfqQyVvYTBgrRaAgGoOYyZzrRuUGbthESsZzpaMWwmAPpPedBbTtDllLLOoHaAVIivVsSpsStTPvhykKEeYkCcwHAaAahFIifWFIVvMmifkKWXiIxwjJIaEeFkKfAcCiXxWwzZUOoziAaIFfTtOTttTYytTolZzdyYDLqMmYyqKPpkWwUuQRmdDaAMrUXxxyoONnjrRJoCLlcUuOiIkKvqQVGzTtZrFHTtNbBdBbFftLlWwQqiITXxjtaCGgcoOLlGgAFfSNYynsYyoOUuCcMLypIiPYhHRrdXxhHwjJWwWlnNLNndDleELrrRtTQqHtTUuhRelLcvTJjtOooOAPpaaFfgGAVjJAaEenNEeyYKkmMSxVveEMktTigGtTSsFhHHhfHaATtgRrGqXxQMmvVXyYxxRrRrlLPpTtZzXFfQjfFJqPprRwGPpdQqDgLlpgcWwFfCJjGrRwbBtHhEmvVMeTrvVPpvVRDdIkzZsYyqQSKgGHXxhnNMmrZzRuUbLleEUuYqQyBQGfhHdqQFfFybnBjJbNEEemMeBOtThHsSHlvVUuLhUuCciwWVrRbBNnFfeEUEeujJkKlHvVlhHLLlVvhnNIizaAZUuLQqvXbBxSgpiIPuxjlLJcCmMGgXxXCcbGEegBrRrxXWAYyWwNnMmhdDVGggGWvVwEeDQmMqdHhnUuNcCxOorRXxXEXxeGgTqDdQJqQjUuVvnNLmMhNnUuJfHyZrRzWwfFYKkBmMgGFfbAsdDolMmyYIiLDRIirdgwWGOLlNsruwWyYizZhHIUZRbBrzlLEePzZMaqQAcCmyYpIiYZqAahHBXDdxbdDYnNyWAawcCwWUujJUQqEehHukKQfvVXxzZziINnBzZWyYwTtLlbCWwRtTdDNnrVvwgbuUssSSBaANneEtTxXSsdDEnNeGcCqCcQpMmbBzZuvEecvVEeGgLlCifFIrETtegGRfFrzmMvVgHNWwnsDFTtsyNnYSKkoyIgwWsSGfFiXxYFfrRtTbvgGOogGVNpPntTfFQqkKeESsKkZjJWFCcWwfZzcCDUWwIiHhFLyQTtUuqYNdDnBblhEeHlYZzyJPpGgwMmWQqjMUuhHmWwrReELTVvthHNnvzhHZVSsHIuUihWSshHNnwTtPKmMgGyYOjVvUyYBbUwWutGgTFMmfZUuzBbmMpPpPuaAoOpNWJjwUunxXPAUuacClLrZOosCcSEAazZeuUbBQqsSWQQgGfptTPBbFoOPmMpNNnBbbBnaAFfWJSxbBiIgmMGgGXsJHuUhjPpjAatQqTRnNCcLluUYyZzoONnWaAVTtvjJwrmoOMrSoOsQqRvOwWoMsGgSmNneEVAaRCOocdZzfFviIBQqmzZMYEeHhxXtyYNnTkKimMQBfFbcSsTtpPCxXDdBwWmMllJjiIpPLHzZuUvVOOnOorRHhNYyoqQuUCcgDXxdDdGorFfRqQjcCAVCdpPDcPpNniIKtiITCiIckfFTTtqdtTPpnNQqWwDmMntDdTeEoOVvmMNSsnNQfFPpplzZKkLgGjatTAoEeOJJjxXkPpEecplLPhHPppPKaAkAabByYCKTmMuyfLlmMtTFYtNOonTvcCBSsoObVtvVTIiBooObBVvuFfhHoOncCNUOYyuOoUuUeWwlKKkkLHhEpPpPeiIhHpPatqQTQqAnIOoiNjAahHDdJlbBMmLOlLoOoYVvGvVbbBBrMmWwDdRtjJTQqClLMmcYIiQqeNnaWwBbqQAlJjtThHLZOoGSsZzgzzZJjgHhGIiSsZBbdDhsSHGYGgyMmuULlJjNtTnapJjPWPHkKVptTPqQCcUQuUWwquJjvZlsSLGYkKhHQqPpJjlLyYnEeNzZCDdzvVMmyYEeAaqtHhtTIiJjTYJrkKRrRnNnNMmEewWHsShjwEejJcCZzEaAeMuZzaAyiIYAKwWROorNuUnkqrRQazfFZayWwdqJjQDGgjJfcmMoOCjJFrRlLGKkVvTtJjQqYygXxsSnLkBbKlnNumXxyYMnNqQmxgGkDdKRrXMmnNDdByYysSYmMWcCwpQIiXxzZqdklLKZdTcCLpPJjyYEbBelbBtDzrRfGgCcvVFuUyYpLlLtTQDdtyMmYxXpPtTHMmhiIOZUwaAzVvZQAaokKkVvKMOsDdYSspPYyyvPpnMmNVQNnqjJSASsapMmHhPRrLKksSLLbXxnNBRIireQtiITUPpjJuFfeEqtTmpPdaAHoOHSseESshheSsEmrRIBbTurRUpPtqzyYZbBGgQqQucCUMWZzwmvtTUuVDddDhAaHyYjvKkcCBIisSbXxhmMoOeEGzWwZgFfmMJjoTtGgFXUuJfFjaAxfyYycCaBmMPpqQbAOYnNyPpRFRrfTEetmMCVXxOeERrTKkiILlYypPXWwxtmBbuUmMswWSJBbYyjljXxgGJsSZxXnNzWwhHhHeEIiDvVdRrsPWoOwbBEepjJLlwhHizZISjjpPJCiHhIpPcnNKkuUCcDdIiekwWIiLzZkKlIJjCsSSscjBgGbRrJIizVCcviIvVEepPHhZzTtoOXxzNBoObpPnAaXxiIpPOXxgGbGgBoESseFTGOogLsSWyGgYyYwRniINrMIimlwWxXiIHhSsnaANmMCiIcteEiIcCaAerRbBfxAMmamMXFVRrvXxnNDdmMpPlUuLLUujJIilmMujJUkbBwWKJhuZzUHIiVvjjCcJEWTtpPsShqJjQJjiIZzHQqwaAbuUvKkhHhHVhHjJBXxbUcCeEQqZkWzZwKdDkKziSshHLlIEhbDdBbaYHhyABnNOonNIiNnXMmmMxMLlCzZDkKIYyfFinNbBvVvVdcCAaDdsSZwGgKkWzOOooAabBGgnNzQqbfFBHRruUVvhyuzDbBUuMmpPdZUnNQqYUuIiPpDdJjMmoOCcPpliIzDdZQMyYmjJuUoOqurRrRULKwWgGeEtTaEBbeHhAQquwNnimMIWUkZZYyIJfFjizGlLgJIuUijrRXxTDddDKkiItbOoBAaGgzOohHVrRnNZCcpPjJjJzDdvelLzpPZEDXxZzgGmMzZdZUQoOMmRiIdDrBbBbZdDpPgGeLlEzpEePoXxOqTtQqGEeOowNnNnQqiLlIzRKkrsSZqQyYWUePxXpEocCbgGEeuUzNnZmMmMBDbBfwWeEFZZzzYydDuUdmEKoOHhkWwRrwOoWSNnsMaAWlLwmeMIizFfMmQqwWZOUuAaMlLJoOnNjtTmsTttoOtvVTMOexPpXuUeEUwWulQqLEomTaAwWKkXfFxtTkKSEeEeUunBbUulLNcCrREerRuKnNqQknNEeRrSsUsSpPlLIJctTEepIiPZPpDdzCaAlLWgGlKqQkLwjUuyYgEeGuUYUhHTtuyntTIiIuUNniNwBbiIHhWESsehYyVLlvtvVOkKKkkTMmUutqQtTTqQbCcqQEeBMVvcCOocCmTRQqrtxpPlgGMtTOohHAaEevPpsSViIPpjvxXKAaIVLlvZzsSiSPpuvViIUoOjJsSOolUuXxLsJtkKslLiISTjTSkKsKktbByYkRrzBLlSsyYWmMQGgqwyYpPbZfFCsSXzZjFtTfJJjsSqQvVsSxVvSsXzIlLiZuUaAaLMmWwYyAGsSgaltTXxfvpWwPDQqsSwWdDdVamMxXAyYFSsdDfWwZzQqwiInNDdBbiItTsSKkOoyYvVGgJjHhKvTtVkKlLwWkNbBzZrSsrRdDRnKdVmMvhHFkKFfftTvVzSWwsUuvVZtTZTtmMzDGVmMvgsSghHkKpPdDwWGkMKkrRmpPihHJjIvVKFtYyTgGvnNVzZfYyIicCoiIDnNLUuldNnEUuMmefkQqAaKFaAgyyjJYCRrlLcYGgGqhHQOIjJfdDFiyYGDdeEGgoCcOgCcSsRjJwWoYyyYUuAEeDSAasSsaANnLldjJXxbBpEePxzZXTsfFStLuUcViIRrBbvCaAlJjqlLQdDaQKmMkBbpPBbIicCOoDLlQqjVvnNJWwdRrqgGJJjjLXxdDDdlXHhiIxZzPpLlSsELlegZzGpPHhjJRrOeGgEJjDbwWYFfysSBdU \ No newline at end of file diff --git a/aoc2018/src/day05.rs b/aoc2018/src/day05.rs new file mode 100644 index 0000000..706985b --- /dev/null +++ b/aoc2018/src/day05.rs @@ -0,0 +1,63 @@ +use super::Result; + +const INPUT: &str = include_str!("../input/day05.txt"); + +pub fn run() -> Result<()> { + println!("part 1: {}", part1(INPUT)?); + + Ok(()) +} + +fn same_type(a: char, b: char) -> bool { + a.to_ascii_lowercase() == b.to_ascii_lowercase() +} + +fn part1(input: &str) -> Result { + let mut res = String::with_capacity(input.len()); + + // tracks last character of string + let mut last: Option = None; + + for next in input.chars() { + match last { + Some(elem) => { + // if same type but different polarity + if same_type(elem, next) && elem != next { + // drop both elem and next + last = res.pop(); + } else { + // consider elem "safe" to push + res.push(elem); + last = Some(next); + } + } + None => { + last = Some(next); + } + } + } + + // add last character to string if exists + if let Some(c) = last { + res.push(c); + } + + Ok(res.len()) +} + +#[cfg(test)] +mod tests { + use super::*; + + const PROVIDED: &str = "dabAcCaCBAcCcaDA"; + + #[test] + fn part1_provided() { + assert_eq!(part1(PROVIDED).unwrap(), 10); + } + + #[test] + fn part1_real() { + assert_eq!(part1(INPUT).unwrap(), 10638); + } +} diff --git a/aoc2018/src/lib.rs b/aoc2018/src/lib.rs index 4110969..cc2f62a 100644 --- a/aoc2018/src/lib.rs +++ b/aoc2018/src/lib.rs @@ -1,6 +1,7 @@ pub mod day01; pub mod day02; pub mod day03; +pub mod day05; pub type Result = std::result::Result>; diff --git a/aoc2018/src/main.rs b/aoc2018/src/main.rs index c86e787..057a168 100644 --- a/aoc2018/src/main.rs +++ b/aoc2018/src/main.rs @@ -3,11 +3,12 @@ use std::env; use aoc2018::day01; use aoc2018::day02; use aoc2018::day03; +use aoc2018::day05; use aoc2018::Result; fn main() -> Result<()> { - let days: &[fn() -> Result<()>] = &[day01::run, day02::run, day03::run]; + let days: &[fn() -> Result<()>] = &[day01::run, day02::run, day03::run, day05::run]; let mut args = env::args(); args.next();