diff --git a/input/day05.txt b/input/day05.txt index 410cf15..a5a9581 100644 --- a/input/day05.txt +++ b/input/day05.txt @@ -1 +1 @@ -dabAcCaCBAcCcaDA \ No newline at end of file +rpSsrRAaPgGTgGtfFoOUuRqQFhQqvVcCHzZJvbBVYydDjKkquUtTQLzZlIvVPlLOopLEelWSswzZdDbBLAPqQpaiIlOmkKeQqNnQgGzZqEJjgeDdEcCSsyYpfFPSsAzZMmhHwWmMTtaKAakAkiIKfFLWwljJzZIifFaGMHZzswWdrRDSptTNnfFRXxrxXPIwWibBeGeQqEgASsaEAaXVvrRYymMOoxOoLcRrClOFfvVocCaADdIiYNxXIoOGgUHCchuEtTeRrsSSpPOorRoOMIiPoOtTpmuTtUHhBzZbstTXxixXctrDdRPUufFVvTRraAkKkKgLlGtSBbspnNbBOGgopPtTORrohHTXJjpPQqwPprRjJWSsxSsPpbcCBSsTtfcCXMLZzlLlmxSnNRrsqWVvuUwFfQbmMIivgGVXGqQgxGgBBbVMmrRtTpPyYvQgcCGyDdYqlLFdJoOjDcnNCFpPFffpRrtTPCLSQqhHmMsgGlMmPaAMmUdDBbTiIoOkKtFfqQWpPoiIOwbwWmzZZaaAApPAlLamwWVvMzcCMQuFfUqzZlJkKjLogIiGrROrRCcJBvVbMmjsHhSzZFfHhpjtTJeEPoTaAtOAxXalLZzbBlLHhPpgfFGvKEeaAkVAaGgGPwWpgACclPpsSLapPQqXfFxBnjJVvNIDdWwIijJiSGgHnNhOoPpHfxXFiIOHhtTTtoZzhwWkYyiIJAaKkrbBbRZJjzryYgGBRjQoOqAaWwFfNkDdKLlBbncCgGKHYPpPEepZzyTUnNGguduYyNuUQqnAaUCcsSDgGOouUqrRQtZzhFfStTeEssSbvViIBjyYJeENnfFYcxXCuUPpPlLiIppPOotVyYvTeEbCcBaAmMtTwWRCHhcLlvVNnjJrZzlLDdbBaAtgGFfdOoONnoMpPmDdGdDeEgSsBbQqEeUmMuDTfHQoOqtTCuUchebBEPvVpouUbBOXxvVzZEHhVvyYYySsetiIThHQqEsSAaVNnLlnNAwHhAIiXxaNnaAWaBEeHhSsMmpPtTbusfFaASWwULlKkLlvsiISrReELlqQcgGucJjCsDdSUZrRkKzmzZmMHXxbcCBcCvVhliJjILuUhsnDdNSHpPIMmVvivRiIrVVvSsyZzXxBbWqAaQwjoOJqQYoOAaKNFfUumMvVzZnrRwUuSspJjPWNxXUunLZzlXrRcyYCSlmMLXxORlLrooiIHhOOorrRcCRSswWMjJdDsSKkTtiRrIeEWwmXaAWwxAMmdDaszGgKjKplLPUgGukzZJwWhNnHkZdTtzZzfFZgGSsDtTCYWwlLJeEjLlyRTtKeEicFfCizZvjGgOPpoJVIotTOfFIiZztTPpsSZqQTMmNeEBbkMmpPbBYEBbOMkSswWbBxBboOXKcCmObXQqmMxpPBoopOoDdOoXhHCMmcxkLlKCJjQqcCcGSsgJWwjKkWwTQqtZdDnNzBzZTFfHTtYyqQhtkKZcCzsSbrxXRpPPpBmMShHsGVvGoOggbpPIiKWwFfXvVxTvcChHVdDtmoOMZTqQeEtHgGOohzZgwWGoOwWNnzqocCCcqQdDRrOoNnmEDdLlpPwTTtzZQfFVvqbBIitwkEeKWQquUuUvuOoZzNnUtFZzfTuUeENMmbBBbUhHyyrRjJYZGwWANnPpagLlzYPwWIipfXljJLQQqXxqpPuUIiPGgpxFwkKhHLlWHhvVVoOShHsFsSffFlLBbHhIigGMoAPpahhIixXFfHYyJjOoyUuYRrWZznaAQqlLNfkKdDTtFnNPpHhfMmtTFLuUoOlyYaaAAzGgFfypPeEqQYMfVZFoOzZgGftThHzahuUHAvBhHbDdgmyYMjJwMmWGNJjnpPTKkvVPpoOtUnNFfuKbcCBkgGBbDdZlLwWYaPVvpdDAyYyGFfgzfFdDyYqiIQuUXxVvNfZkKkKzFnFsSLsoTtOSRrMmVveElRriIoSsBbiZzjJkKocHhPBbbBpCIisSBbtTcXxZzjJaAaAvVCrgGOoRhfFACcamMjZpPlLyYXRrOoNcCnwWMmxWwnNmMkKbBDoOiIMmdfUuRBbbBuIiFVXWwDdxsSvfUrFhHqQUurbBRyRzMmZrkKGPpuUhHVvSsgAnWwLuUlNuPpUeEQhiIhHHqFfPLlcCpWwaVkxXKMmvwWxXOcCjJpJjPoYqQBbGEegEJrYrRyFfAaRdAaXfFLlrRwWxDhHNnLlRkHhcCKcvVOBJjNLlnbQqcBbCJwWhHjHWwUuDdNnpsSPdDhoOERretTpoOPhHWoORrwygGYHnLzZGgHnNrFfdDAasgGIiSmFfMaAhHjJbBbBpPGQqgnNkKlLkeEGKkDdgNnnNKSskbBhHKkKepPJjEhrRDrJjRrRMmkKsOoqQJjKkSSEefFsNnyabDdBNgGnFwWOSsoAaMjJmeEtTIFfcacrRrHhRCKkBkKbkKFfhHvRrVwWVvYfFZlLrRBPpbzIioOKMmpoOPOlLpPoZzTtSKksHhAauUgGKksXxsQqvmMFOUMmGgMmubBxxXHuUAajJnNvVLBblhUuXdDwWhCcHhHShHsgGvVKkkyYKkRrdDYyfSIsSbBiAaNbFfHXxpPhBnAaXDqQdXvVxXGRWwrgxxgGeEkKaAFNnYyVvqOoDrpPpPRBbfFfoKkOCnFOofWwNcGsSrRUEBbAemMWPpBbRrZzYIiMmSrRsyPpxXbBwWwWwELlFTtzZkjNnJKffeiIEFnNHhJjqQWwLlrjJRRGxXjJaOobBAjJgpPGPpaFLlfAYySsjJRrXxsSmMdDzyeEDrRUXxzmvVMgBbtTTtGZmMueSxXsDQqdkKuEeWwEeUUucKkBbCGgjZzIfFeEOeHhEMmcCFfWwvpPVjJdDVvcmgcCGpPBbMnNCosrRzZIiLlJjFgGfUuXEzlLZehHxASsazZKTmMtkWFZzfDdwWSMmsuUulLonAaZzNmhNnHmMMfFkKFFfMmOMmuUwWjJIiYRryoXxoaAODBbhHnNUXxjoQqDdAadZzDjTtJbBuUbwWBzwOsSxXobeeEEeeEVhHKkvEsSLlOobBUuQvVqvVJjiZzxXrRCcGIiWwqxukKUoOvVzXxvVINTtnJjZOoKKkvVkWwzMCGNnyoOJYyUujLlnNYyYtTnfFrgGyYdZjJzBbsSRrlpPyKkYKkkOWwepPEoKFEecalLsStTiIoOrRBbSXMYyIiHhmxsFfcEeCvVjJOnNEenNqQdTtgGcCGgDWDdWwkKIyHhYeEvAXMmUuhHDmpPfFMVcySsYCcCvdKLldDYyGgPbWwBfFzZPppkbfXxFOOgGoQqTTttocCBfFEzKkuvVUchHCicCBbEeIhHZElLeETQzZzEUEeuHhZlLzehFfxXPpHuUZiZCUuqQuUcAawWLCcnNwJjzZWlzMGgxXmVJjZoOzmMvOogRSahHHhARjJPpjvVCcpfFPtTtTSlUlLjJZKkzuLtTfFsVvAarRkeEKJYrHhRywWxXyYbRrBKkGjJONFfoFfOAHhayYccSsCUulLsjMmAaMmzTBbtZkNgGnklLKlRZzrhHmQqIZzikKnTtUuJjNwWnwPFfpWKkNMUNeEtTHhaJjhHbBAqQbXpPzZeExqQTtHhvyYVsZIJrRjgGiDdZSAaicYFfyCIreERWwsEeDIfFpSiIswoOWdDPVviQqcCNXJjPpxFeEfXnNoOCsIiltfFTLAapPStHhdRrNnbbBBeEulLZxXzIiwWNnNOogGniIqQUsScNWwwWXVvxHhhHnuYoMmkzrCJtTjqVvQBPOWRrXoOxbBEHiOoQqmUuMAaidmMXxhXgrfFRGWwxHrRalIiLRrBbgGgGAAaCqhHQFfcCcHhHKkhCLljJcRtTkKZkKBbzIhbBHgXxuUGEezZiCtTcrFtNnqQTnNfDRwUuWrGKkgPpCgCcGjJcNnbmHhMiIyYtTSEesIiFiwWIRrCjkSGgiIUuHhzVvZaVltTLvZzIisSCAWwTtauUcHhAFzZTtFFoeEGNngNnxXfFOHWwiICczbBZLlCIicgGhiIXzZeyYEnNoOlLxiQqAaqQWHhCcaALufFUlaABbsSuvVUMhHmpkKPwCVIfDdFCxXsSkKrRcivEiEectOoVvTpOoTtPFfwWUyAaYcCuBDdMLTtAQqqQcLlCalACcpPDduUaFfKYyIiHhWyYtAZzaTpJjBXbBxdRrALOCyxXUurRWwtTYcgGocCDAalLivVkKnNfFfFJzZiKkpPnNIjIOoKkdKvVKksSIifsSFrRAaZzGgXBbfqEeQesSEFhHHhByYUuUubBgGuUqyYruUfGgFqQIbBUuRQqqVvgGKdDknVvNnhHMmsSihOIfFisSoHIjOoXxDdJDgGyYPpemMETNnOotbbQMmaAwWqTwWfFQqtuUDdCcHgGEeGxDdKkGAagDxXauUAXgGxVxXAeElMAaCcmOpaAPnNoLonNneEJjxXNRTtxXrZCvjJVQqGbxXBuULjJJjsSIilvVWiIwgCcCStwWVvoYmMynnJjNyYNnKbBAYyYZzXxyaAawOLlorHhuURXxvPpUuVBuUDdbVsBLNYynlYybIiGOYydzZznWwLlRrNZCEPpemMcEeHhmeEXDdDdJjCcxhemMPvVBOobpSsEjLZzlcSsCrRCcNnQqdDVRwWgGyYrTtONZzeEntPpHhkKaOoLQqtTiIgGcEeCPpVBbFfPpnNXxvwWPpLlPmMIiNbBnuDdwWxXURKjLlJkSsWeaAEwcozZOCNqjJuodDQqnFfNAaOUyYOFRdDrfZzRvVSsFfKVviILlkWwXKLlbBkTdDLfFExxXCAacsgGSAxXABbaaaAtQqAactLbBaehHEAkKQqiIDdNnExZcUukRrMmpPalEkOoKebYcCyBkKgAaUuPHhpWwFftmMTkKLlGRrPzZpIidlLtTfFfFDUuZsSvUJjsOoSuOoOoVvViITFftcCKkwcmIBxXbJjrjJjQqTtJnNOoRrRSjJPoOpHhGyhwDdWGgHRcCpTtoCcORrsbBZzQoaAOfeEFoOFfqRrKCaAcoKklLjJbYyBZzAzTtXbBJjzZxXQHhYXxHxXhgFfGypPpPCCcZzhHzLlyYaAAhHDdMmNnQpPlLqhiJjIKUZzucCkKKLLllkWwkMlLuUmlqQaAajJgvVGAaAQMmSuUsLlUuqtTImMBbvVxXzIibBUuwvVrRWoOlLOoNNnIinpPXxdyAajsShHVvlLJxXaAlLXFkKfIWwixWLlkKuUwXAaMmMmiUuGgIaGhjJSoOsZuUtTbBZkKEeHdDiXPpxRrLJjlIzZNnbrPBbIGgWJjwGXxyYgipNnfFeETtYyFPfFiOoIPYyppaAPELljJYygZzKkGeykMBbmJjzMmEekKlvXxVLArSDdzZqcCWJjwlLQsyAabBLlYfFvVrRPlLtTpFvVXxqISZzsdDisSLlSsFpvVMmDFfSsYVtTvwWxXiwWhwNnWHvyYVIiFfUsSuorRNfFQqAAOovVabBaVvYOkKogGNSsnUQqCcbBuUukKNiIAKkyxXYIiVvvHhVedmbBfFMDaAMXxmRrCcPpoVvAmMlcCLhHqQNDddDntTuUaJEexXlLOHmMHvVRLlraAhAsSahNJjnGXvVyYNnxDdzZoDdOgiTttLkcCgCTnAaPpbBPLlcvVCCcrRGRrbBgMBbWSlLswDdxBbIqQeEaKkgEYuUyLuUoOrRmMXEexfFfAsSfFAasSXxdMmMmPpoJjlLFfWwiIOfQwHcwQqRrWChFfWXtTxqGEzvVrKkSsRRoYyOrOTtoUcPpCNnVvuFGgPLMkEevVFffFKrwWnNZzeERTttTmlpbBoVvYjfLVvlFsTtSJvaALlWwpPhezBbZLUuOTtolKcCkPnJwWjkKrUuQqRKkgprYyPpRtTPOojJiLlIIcCNnAadxXDrLlGgVvAkKqQiwdOoqQZCctTbBzZzmMtTufFJjdlLeEzZXxZtTZzPuUDaAcCdrRFflLZzzZBbjUvydDYyYHhriJQqeEUBbGgYyQqvVHhdXxEelzZaTiIyYFftAlyHhDdDdhHBbYKCtTcdDosSOFfHhILliUtTuaAIiZzrRwkiIOotvVTNnmJjsVKkuSvVsUiIvsStTSsSBbMICczZrRJPpjjOoEHnnHhZLlODNndozDdDdRrfFZzNyYzPKeEXxkAJjjUuJaMBbJdKkDVhHJjvjNnjBbtTXxSSsAaWSswAacXHnNhZlOolLLXxrREePOovQqVItTsZzLlxZzoolLAaVvIRrGGgEeffFVvIAaiTtpPrRbsSLuGEXsnNYKkypPSzZJNncCHhjNnyoOpPYHQqKuUkAaStApqQJjPDdaTthHeVvcmeoOEMJjmGxjAatTBVBbcCixQqXIiIuURrcRNrRnrjJmMKkTtsrRTyoOYtSlSsLvVUumqQMYtrhNWwIigGAaqQhzXlaARipyYQqqQyWwYTtIiSbBFfiWwerRWwEHQqhoOhtTgGPpnBqQbNvVZzZgGVdDVPYyLlpvRrcCdlLPpJmMIDFzZflDmMdpPxXYymhHMyyYXxcCYfVoObBPZqQyYzpndDNvihRrLlHCYycbBcCItTSsudDWwdpPDKlLuUkWwKkHhiAadydAaDVxmMRZCczrecKJhHKUfWwpPBMpPNnNZbBzrVeCcgGEFfDTtdJjDAaMJIiiIjmddmMDDqLlAaQuRuUsnNSrTtQqQjJmrDdxXVvUgQYybBdYyMsSmfhRrHSsLlhqQFQqfHhLljmMJAavAwDdrnaANRWaAVUulLLZzcgGCiEeLeJjESslbBqQdDbaGgbBbdDWwBAIiNnXxgGITWwtKkgGTtiiITteWLlBbwpPXHhxyVveECckaAKWWwcDdLkKHhhHrRNnlLrQAaqbBRHhlRraAKkFiIfCLlLlTtZFfzFfLmMjJmwWMnmMNMmxDIideEkNnKKkXlLMmlLRrlhJyxXsSYjcYyiIRyYrCaAzNnJjCczalLLlkKAhBbHUuaALlcCOmMtTrRKSsknEjJZPpzKKKdDkNnTtHxXhkjJdQqDKGgxXgZvWwVvnMbBmWwSaAlPpOXxHLlTtgGaAeHhEinNqjPpJAanNQIQqSsgGzZlftTFLyYdSmsgKkXxGlSQdqQDoLsSjJlgGQyYCcMxXjzAlLauUgIimoaxXkNnQqtbRoOrxwzZWjJXypPMmmMLlYfIiFtNnlLYrRyGLhHlgaAvrfFRpPWwjAaAaJAhHqWwZzsSCgGcQgGVYyvOoNnDUuBLGgEQqBbcCfFPpZkhHKqLlLlsNwsyYSWIiTtsNnSMaAVwWvmfxXqXxFlIiEeuUuUvggGSsuvVzZiIvIzZIiiyqQYnPpNRdDkUKkuKplLVKyvVYkmrfFRmMcCtKkTMYyqdmIimCcMOaAgGNFfOoNKknLlRrdYyEeDmYyuUXGyYgvfFVEdaAGloOLoQqXWjJWCcOsqoOrRNnfFZgGzHaAusNfFnSVyrRYvdfFEehHFPpAaMmIiyaAYOQFoOUuEtTehMmHJjELleNYqLlQQaaAAqywWnoOkKbEeDdpPpPAaSwLeElGoOjJiIDdMGgRrfQqheZzEHqQDdSsxpPdkKMmQHhrWwYJjkbPpBKgNBbnnNZZzTtziHhHhVGgeByYbwReEoOVlLnpPrsSutTUZnNkRfFSsxXJjFfXxHhSFfCcsuRJjrhRrHUqWBbfFmMJDdxmmMvVMrRsiIfFTtpPWwfFSKkXYyvWDdDdHfFHjYyaAJftoHbBQqBbEeYiIQMebhHBxXFHSsfFNnjBniiIHyYMmJtTfFlcCLEersSPpzZghHEeGSAsSasKRrzZAafFRrmaAQKkcCqbBuUFANrUulLRnaPrRHhwqDdQwWBOoJjbJjxXMmWMmaIixNCcjJnXdDsSlEeAAaEeSsaQqLoIrDdRYvVZzrRESsbDdBlQMmqLwqQWJjJNnVvvVlgdDNkKTtnKkWwyyYYsARpPuUHhramMKWwYyYyDdqQXWwxCcYycCEeEMXxmhHgbBnwWhHbDdGgOoBWYywNSsQqflLFNtOojIuUiVhkSsYyKSLlCcsHWwAAaGgPpAbbBBpPbZTtGQqdnLlNgGCcUuxzdTtXIiQqxDZXUuEjNqQeMDdZzTtTeEzuUsyKkhHYSHhbzZYyqQWXxxXwqQpXxPVRrGgtTrrRYytTCcRWFfeEhHwIiaACcOozZiLPpGgYXlLxtjdbBsyfFCsSweEPpdDtduUDTOoOYyoWcrRwkKbBzZGTtTtIiVTWwSsUuVMkJjKMtsSyYkyfFSsYAiPpGbLOWOHiIhoLlgGqPcCpEeCjJQqcjqQJqZpgGqQgwWGhHPeWUMmiSsXjjhHJdDJCpcCPpPCmHhMcOZzCtCKkcIJjiNnTheEHqjhxutTMagGJbBjfFfDdOUOoRmiIeMmEMGgYWwOPfhHtTFoOpDdoWEesRHNkKnhIisWwCcDdSAaJjrkmMKCcOvjJuURrvtyYyYwWdDqRfZzFrQCcTtTBLlRrRrbGgVeGggGEuTtjJUPplxXFfLUuVyGeKbBqQqQkiIrRCsSsSsEeScRrjJYlLyUuEFfQZuUBbzgmWsSwBnNbMzZlLZSsdNkFZzooOFgCcKkGwuUWEeoOfXpPxsSqHYyejJEhHUuTtSsQqNnhyYliISstTciupPXxPFfpUZzDdFxsSvwWsSZzKIivVOSkTtuUuQqRrhMoEeCcOeJjEmHClLccCAalLGgHheEvINniVIxXdmbQLlifFYyIuUHuhHtTMmUWPpxHOoNsSxHcuUCOJxSfiITtFsXjmUuDdarRkQqKFUuUQqufKCcoOkOVIivLnORrOoofFRTFvViIfyYEOKkJMmEtTejoPFYyPoOIiBbCFfxbBXhHqQcfIgGmMVviqQAaFAOVvSOoEXmMkKaPLlpAvVlzZLfFxVYIJpPPpjiFfyveHRIuUrsSOoPWwpqQSRrsJaAjLIiliiKpKkPkLDdqIOGcIQvVXWwUuaALMmlIGcCzqrRqHxqQVYbByeMsSmEvWhHwVQqveYyUuElLSsXoOoORrrRhQZGWwgzQlCcRrWwFfdOoDKkAeEnNbBMmTtauUDYqHhHhAaIaXPVvVAaPVvyoOYnDCcsgPSspaAKkGBmWwMXcMmCxvVXZzvVSnNUSsOxXoQqRCcSseBbwWNVvjJPpnbBOyeJjKgTgGvVXoObOoxcCXBxhUuezqVvHEMmeafFAlzZEelLLicnHBbQqhHKxXkAadDAEepPytTrVvczZUOouCRsSfBPpHhrUuYyqQuUehuaAJxXjjJeEJrRiIiLAaVvJJhHjErpeEXSsSzrRZMmNYCcDMmdvVyWwUupgGAVfSvVKkmgGCcbBkLlorRhHDdOfJExIzZigGykfyYSezZEhFfUcCkrRKSsnNtTTrIiRturIiDpPmMYydNKkZgGHhOGgobBJjsKkFfSjJjJOXxpPCxXchHSjrRcCJsssSEeimMIXxSGguCcUfFGgbBWwEeiMmFYiHhPpItTaAvwFMmfWMmEeWwGvkKSsVysSwGgdeEDvrRVWzlGgLbisSESsNJjPEeWwOoUFfuppPSsZzgAaGtTfFPuUIcCpgRrUuCcufWwWDdLlGCcgdkyYKDVviMmIewWiIQqoxpPBbRkKrXOCcIDdMmOcRrriIjJbBcFLoGgOSoOsAayYcXzZapPHYOoMJjmjtTCfFbljJIiOoyYsSLNyYjqlLQJaApayYIzGkKgZdzNQqpPPcCpnZaroRTaAoOtEeuDdUvVbBsbKkBEeNgGnraACcMmHhyEOoTtyYebBDiIjJALDWQqMXBbxmfcXIjJuYYyUeExNXgJjhHGZzZKkeEWwSoOykqQKEeoOjtxXzZLIilTVvaWxXwqxXlLXxvmheEeHhENnJjWwHTGgtUuLvVlhoOHRXphHPdDZgGzYIPlKeEmMFxXfBBbbMmKAaSsRfFrcCxXKrRkkKKJjkACcayfOWwSTCUuXxvVuWuFfUwSsDdWwGgCYycRsSXxaAAahHjuwQqWtTZVvDGgHIiFfXEeMTtmBbxQqyYPOyYCyYFfEeQcIfFNQqnNePpTtEeEbXxBCYyspPScsSnuUispPSCQynNZTYqSsoOQCMDdnlLhOoHjJMmwWHMpDjJdPfqDGrRgvVvhsSHFfrRUrxFfXgGiIutXxNXxnTfFURvVwWqQugbBbBFfcMHhwwWDuUNnHSsfkKJjFqQOoIyMmPpYJjitToORrhrRoyYSsmhHMZzeEeEcDJuZzNjJnRrlLHzIWXxiIwiNnZNYyRreEqBbbBAabBQoORFtTffFNnrprUXxloOlBwWPDBMbBnOkKKkouUtTVvNIRriwWcsSCAJjAtTFPpyWwUuYNnFpLlPfLlseEpPkKddDDPHhhHSOpPOwWQLlyNnYeeWwEoOrRUlLuOoiIfFEgGbYyBNEennNZOrRoYjJmQqhraLmVvMqeEQyYeiwTgGtKoOVvlLkHhDRNhvcnkFfKBbVvVeEiJjIvNCAdXxCcDFeCnYuUGWwHvVhbBWpPtxXLNnKkzZwWpgGPCycCYQLydWgvNqQnrxsvVbdEeDdDBRJWwjFfQYsNLlnoqCNncMhHlokKOSnxXNsgDXpPMzsSrJNOonjcwGggGZzWdfEOnsSNVYyvDdaKkAAaUuGkBbKnhhHatTyYAKksSmMmXVvEeOTtoYPpKkUuSsyxFfXbTtLlxXBmSZrLlRXxYHhydEWEewzZaALJjHhlejmonNNLqQTtUuPjJCcEejPvrRVvVjdSQqJjsDkIZQPpVaxeElLZmLrRlIuUqSNnsQjHhQMmqMmgGJiGjVvFpPfOGXxoOUZzuZzUuovVzpPZPdEFfDYyderRCcAafpPpPAaFgjJlnNTOotYyXAagHlLlcFfCFfVsSdDxXAavVjqwaAZzWDAaiIYyhHbDphHPrRGtTiQqLSsTMQndDJjCXxDdlcCvVwsSNnEdWwvwrdAaDRKBlLiIiIxXHhRIiquUQBCTtcsfRrjpWwPmuwszZqtVvmmaNSsnJjAqQLBbhHlJkWaXxZxhvVlLHIiNngXxdVyYvDntBbXcCYynNdDUriIRYySnSeEKOjJVVvveTtYDwWeXxoOfFtCcAaiHxXKGlLgFfFsSegsCcVzsSOoZQnPWhHtTwpNiIpHzZhcEeCRsSrBbqQdDhHzmMbFSSkKstTQFfcHhCiBbIrAaPNnIipvVqgGQxXRStTilUurRkhZfYyWwbiIHiIqUsSrRQPLEiIeJjigGoOcPpCoOEelkKAaLhvnNaBbGgAEeVjwWQjkKJZEaAOovVUiImMukKEezzZCcrRLRrlvGgsddDmdWJjwQJVvXGCcQqvpPVBSsWKWwkXxUuTtLeIsSTOovkoOqQOiICbzZiaWwAINvVYyjEevkaAKEeVJuUVJjvKkntjWNnrREekRrjJoOQqKVqQAoLlCSVvsccfDdaAfFZuNgGPpnKhOXxoVvxuoWwOtTCcdQqXdxXYygLnNUuqQlHqQeETGjJPbhgGEVuUfZzzcCPpcSCaAcbBsVaAaPwcCWpRrJNnjjhHHnAaYywlLcCWNtloOLFfHOZmMIgswCJjeXxcohHjkKQqhHiIiFayYtZhdDDZsBguUdeEidDkuSoLWwEaAlLUMmPpPlLQzbBTtcCtTkKSpxOoVvtTGgymFoOWwEcCbBtuYSBhHbiIsPpuWlUetgGvVTiIlLYxXUTdOaoOTvQqVmQqMsYyjFXxHhIjJkKiwLlCcEeMZPpMxXmZsSsSPCUtTbBpVvPucvVwGTpPOotuUHgGlHFWwrNgoKYykPUivVIupOeEFkrvmMyYVabRRNPEsmMzZuUUeWwWCcrseEBRrbVvxXmMaAFMnsTSsSUaAaAMLOoYbnNiqQXxrRMmaXLlxMxXOXlyRrYcihVvUmMuUuHLyVqKkfFyAZuUfFzMmXZzKkWgMcnpPQaAvLAaIilVuxpXirRbGDdmMMCBbcBIAaiXLlpjJGQWwsyLljtFfYuUSJsSjsALaAKkUuSsmgGgpPEeHfFhjJfwWFJYaAkKNWwJjnyjCqFfdDMmLlFZzfqQoAaOTLlDaqIirjIiJPpzgfFZzeKkuQqVvGgUSsafhyYVKkRaArQVvFfqbnJJXsSxauUjaACMmyYxXDNqmrGgDdvUuWwOyxXzUaHEeuWTEegeEPKkpGtTQUuxDjJxlLhHtGGPiuPpOoUuUbBAMUofkrRlLyzZejiIWwQbBJjEiMgSsGPvQzZKkmMKTOnNoqNHiIxXPpZVvzhnaArCWwxXccCRARQqiILUlLHNtCseFCcfNnBbNzZVgGvyQXxIiUAvbBHhBnNRoOrxLLCkKqQGdDPXoOxxyYXtTSFhbBbdDFfUUuumMJjrRniINiFfNmEebTHheEeqnNhQqwWrTtNqaAQjTtIyYdhHtjXxNnhGgxXpoOPhHTtoOaEiEeqQcIeErZzPOzjBbJZDdYHhXxyLcyYbBOoqQuiIUBbnRXbFMmhgGIiATQmkQqKMqCYwWwAauUgGhHWlOAaQqICcqRZzMmrfFHIiaoOCcAeMnQqNYOqkSZzslHgGhinNJjNEeLloOWwnNoGHhyYlLgGgaeGypnNPYMoiImMrRAaHhMtTmuNeLpPAaqQWSsGowWOyYsBAmeEcNnRTqgzBSsbNzZJjbBJjnBXxqWQHhgkKGeEkiIKYXWwOCcUuaIfqQwPpsoWwFftTqQSbHhOovIOtklQqGgSbBfFyHhYSnbBbBIRbsQqpFLlTtpPdEeDxYyXxXWaAvVsJjTtjFZzfNnqQuUmRjQcsSDdACNFlLiLllLBbnkUumMLsSlqdrRvSsIiZzPqRDxuIBKkYylLkaRAmXFflLLlDdOqQtHhnNzUufFopzMmyfsEeqEBbHQrLHhtxrsSTeEtRFiVbSsBvYRrgGykKbneUfIiTtFcjZzChHcSYyIOaGggFfqQiIJtTNeYyjmIQkJnpPobfeElLwWFSsLkKtGIadtjZzJrNnTwoaAOaZSsxXzUuSqQAaQDdgxXGrPpSVAMajqQdOuUQZaDdAiIbtxqbBQPpqLJBDTjJEmMUtTdDTtKcimYQljJyYPpHQrZzjJZPaqaAgzoOZqeEgIiFfGNJRZZiIPvVRrrRpqQZlLzPpMTYyudKsqprREEesSVkKnAlmMlpPLvVmnYFfjJwsaPAapcGCcPpQqqQgWYyOoqQjkqQKqiOTtkKRrdDQzZqElLWwgqQGgGyYNVvIXxjyTtJjIiHwnzZNIfFaADXxIiMmdiwWOodDNnNWoONkKexeWXxuUeEEVveFrEebdTtKkjZzJWwnNftTkvdDuFfxXUVKFJjJjHUuhPoOpPgPcwWCfFBblLEMmethHTtMmxEnbtqyYvKkprwWAGgOorqgWGgeEiIKFuUWeEwBJjQqEeAvVqVkKzsrRSZzLuYyuUimMImHhfFMAJjSsIUuihNnskaMpRVAmMKUYyukrRuNnLlUIWmMIiwKkOBTtVvoOeVvxfFXEnKndgGVXxvrGgGHtTGbHhKeOouCaAeTtERrVvdDBqoOmLPpqQwJjxFwhHrRgiiIURruVvzSqJjKWwaAVvlsfFuqwrRWEkKKtTRrnOoaANjzZjJPjBtTxNVvnfFLlKpDefroLEelCuUcwWsqQeESQIilLbBNimXxkKMhHIIOoCEeSsMIfFGgiWwtNnAkYuUtTuUpTMmNEebZzRrFKxXSsFfASqQQhHheslJfFjWxgEKkesTDlSdDsStyaAyDdjJbTtBTvYuUpPidvSsJjVpDdPIzxXZpopPOxyYZgUpMeTtudDJNuOMmNdjJGEegkKDCcPpwQqlZHGUSskDdnNuiRrGEeMpeEaArRPnEeNHCclrjbXBhJCcrSswlLlhqAaQFBWwrTtCaaxXmpJZEPpeZWkKXYECUupPzsSZawjspPjJhHAaRuAySPphDZhTCkVvlLcCxhHmcCMTYIiPpZzypAyMRrmPGgpUvkdDGKbaTtDdDIZsSzbnNHhgiCcmMlLFfOoNnIatiITPtcCTpHhaARrvQqEeVVEaFfVvABbZjZRlLrlLQFpPkpPjbCcjJBPCcRjpPOcCBWzUKkCchHMvqKNnKPyYBbppPKuMRzZrZzibspMmdDDdyYjLSQqaAkKkKdJjWGgwwTBezGgVvZvIiVQIibgjxXCctBrKkHdBoOqTlLKRrjJnNkIAKkaiAZzqQawWqyLbBlxXMDdHhmyYjeEMsSoOZDdzqQuAfGqzZVIiAyeabByYAUvjSrRiIabBSeYyEinNvVyfFrRkKYnuWwUFfxJjOoXUuNMCWKkGwxcCXiIWgmMYoOvVoOybshnNVvHpkswWQqELlehHpsSPiIOcCcCaiqQKiKkdDKyGgDkqQNUupdLlDBGGFflOOWmuUMHhQSFKkWzZwWwQIinAaNQpPqWwAnKGgkDdqamcCrjJwWydwsSlLWDdDfFQmIjJZUznrRqIqQiCciSHfFwWnNhPpYnNmyHhjXxvbBaAxeZPvVoOuDwBGgbWwyYJTBNnqDBbdQSIWwEqgfZOpnwWVqwTvHVlggGGXInNQXDKkdHyYhnNpLLlllpPLtzDNyRrVbfksgGSezCmKrRBbyoOYKkoOoOgzAIuXxUopuUCzZdVvBXZzgGqYHyYmQgGcCQqWNnwGYygFjXtZihHIsSGwqQiYyIxXefiISsOZlkCYycloOLNkKdAduUuUuNlgGPrRJVzEeHhUUfbBlLFnnwajJEYwrReEHMHxXhHVOnNoWuwcCWMmfFUKkGYyKXxtcCIwWCcHhSKJjknNFfPFdJQqhBbtifFITgGyqBmMbVvtNOuSsnxZzvALlaIiPFfpFomWzZJQqjtVvTkiIKomLnZzNqHPgGpgGXxuDdUNrRgZzoiLlgGIRrulrAaRNnrUuaSTtsARJyXtTyYMmmMoOOBTiaAPpZzKkgDLlrcpPQIiStTfnSKDdrrMTMagGqQpUubBPAfFmFfMasSPpXzHBaAbhZHukPpERaVuOoUnvVmMzBAKBsSuDiIdbPQqcaAAIiluzeEbBeIiCcEaKkhwWhFfFJTtDAuFUXUudDHxXhCcpPgGGLFaGgAfSssSyYQXxcDyAaYOodMqQSyYgGmMBbdDpPiIMJjckfFKkKzRbgGBhHuZzuAaUzTtZoCQBbFfkkKBtTbgGmZfFznNhKoUsyMLwuUMXIikKXmyYMxLQxbWwfFBKRrgmOogGFDIidxSsXeCCccExWSOjJfFoNnXDEedDKhHQcCSMlLifXxmhHMkMhpPHdGgFfcCZtTtQqSEIieYWcNumjJMUIITtOoiEeiLSswWlOdGJjCkAanNGgPpJLyYljJjrleEZcbBCiIzOoOdKkLlsjJMmMmRdDxLlxXqUzZuQbyYgaJDMyYPGgGRmMrCFdhHyYDIMmAdDbBrVvgGHhRDCgGMmIRINnfFiwDdWWwrQwgGjJiIdFrAJjnNcCaprRXxKBHIRxTbKPXxlJRreRRrrgGCfFsUuSXiIFEefhHbklSUuZBbTtzAgjJKkPgGpiZizqYkKrRQqitTkKUguUruURzZvVqZUJBbjFfwJuinNnNmMhzbrIiKcCOokzZRRqQHAkussxXYlRAabEelqWlnWivaIinjJiIdDSFfDdKbBoOoOCcaQpPQwWOotTtTqPpMoOqdVQWwIiKkEMGhHxXOoXxPpMyoisSXKNnMBKwpUuoOZxoOXnRikbBKzZaAIrrRuCsgGpIYyiKcCkHwCqQcgkeEbyYBSMIiKkUNAaCcKLloeEPpiyYxdinNIpPDBKkdlLhHrbBTtsSCNncRYJjvVEjJKEUGgTOolFfOoDrmRZwWhrdDdqqcxHhBaATtxzZaAXJrRRkRrWwRCgGifBVvQnxXNqOHhDtvQcCqVTaiIWwZOostUUuuSsiIBlkaAbVtubBpPMIiSGgsQBbqVdAjTBvvpReXxEyYCBatcPBfZzDjjJrRVvKHlLhoRKvVwWlLVJvKYGjJgWwGgdDFfFfuUbdjJOrRKkMmjJTlOobBMmLsSxwWXdsRMyXeExkKMSLlsKwshHSWIiiLQqlNnIkbSPJGgjpsvKOokLhEeHHTeEkTtKOoINVJjXxvPpniUuyNxgVvGgGXIioOxXGgzZMmMUuIimFOxXjJeDdTaAtTQqFfmuWwRrPdaNnjHhJQCLKkDdUukAaFwWwIiGVvgJnNDVaFfCczaLqHhjZWwnTtqZzeEQMmZzgAaGpiKRrkzrYzZseAOoRTAaipPgwMqQMxXwgAoOOVssSrwJJjzZuIPpkKBbDdiWwKkmqQMhHaAWrhHRGgHiIYQqtyVlDfyfzZmHFfyUfFFfKkKkAcfMmnOTnNDCpPpFfqQBqpPQWqQElGgEeSEeFLeuUEKkJjlQwWHhJQqSeEstsPpSsCcvVSFFWwuPpUlAaCZzWwbUnNTjowsIeAZzlMzdDhHZUKzZjEeJJjoOvvVVdDZpmAWwWkbZcCqQacCZGgCpPKwWVvkqQwWatFqWWCcFkKkKVvCcNkyYdDKnzZiIxXfwAatTSsDBrdPEeLlpQqDfFPSsNnDdPkKrRzWwwWWwZYdDyNnORBEycLJarStrRjJGUIXxNniXZzxNdYltCcTLlxXgeEiIEeUGguWYywsmMZKmMGgtTkuTAaFyqVvQtFftIqpPpPVCKfnhzKkRWSsxiqoGmZWwzZmMdTcCqQxAOoxXhHOBGVaEWZhWbBwHaAljLUPpgGZkWwKOyMIimKnQSIXoZHJdDXOooOpUklqQvoMmOVgVrXiJFfoOobZIiNgTCUuUygGhHtrRQPpqTrjWwdORyygEdDqmMGpPgyDzBbSefbGgSxXNIgpmMpPPVkZGgzLljeyYEqekKECQARwMIlFoOaHhjJGgcrRCBBbwLMxXAaBEeasQwWmvEJjevfwWeEFPeFOoxAqQKvNnKNnYywqeqmyYdItkKEYyYNYNQwWpuRrUwWYmMgGWetTEtDdmvOeEPVgGvXjJlwAamMBbdzoOZEjJMmLSslZzDdyYJWwXSlOzIiZyYmMDgGVvnNGLlhxXHbxIlLNFfocCKbBZtsHEejTqMrKTthZLlBWDdwgHhRrqQEQqICLlYIiTwdCUaAuhHWwcCCJjNsSnzZxNCccCnGEeRrgsCxXdDcIixSvGQGgqQgWREdGclmMdDgGLylLjJaAYMmgMkgpPoCcGgZzXPpxzOoZoolHeSzfXxKINnMxyIqQEAkKaeLqQqLlxmMRWbPpSYEpLaYyAUINhhZzlLHqQEvVOfkCQqcKlLXHUuhsnTwSZzIisEeeEtbBNnTvTaAlLvVtzaQqBbAXxacQnMgmaAeENqqZzQAabBvVyuUZkKzzGfirRZJjHBbhzDyYdcCkrDdeqQAForRRYyqaqWFfwSswkKRNnbBBbmMKkrpzwPpGgyKklgQqxxwoOWOFVvCiHSPpmIyYTrRjHhHhYyxftwWrXupxXDMmWrRcCgKkNnGsAWwAbdZzWaAbkLMsfFqUmMZGghAaxXQxXnNLtTDFfDBpTttgGTPXdDxbEeKRuUXqyYXlxCLlfLyYlFjTDOoKECOTtoMmyYqbhATTMmCnUIXxixohdZSsmMJlgxMmNnFkKXTsgtAdjZaAzZMmrRDwDHHuPGwWPMLhHwWMJjNnTtCFfIyicCJjRrXxJJeEVSFdDNnfsowWtAnNWraAIrRrfAxsJhHjIqleETtLGvVgeEQgjJXjGgyhKoOkWscCJjIiJjSHUuGeRJwiIiThvVYyfPYdDgSBbughZdIojJOiCctTfEeHMmFijJfFVvJJjlioVyANnuOvamMlmGpPKFSUlXnKkHhlLNwWhPpiIGyVeLEKxRrgYVvoVbVQWYwWavEDOKqYzmnNDdcmXNnwWwtTYyWRXcsJLvVlLSCZzcJjPQhEeHqxKcCdrRSlLyYsBHaoojAaJGrgGtbBAaqQZHkGaRbBjJUxiRroCcheIiiOehHxXEXcfKkFmucCngtpCKyYLlZcCDKkJMZVxyYSsSpFfPCkQDSfyLlxXYHhSVPAMGKRrkLLllpRNnrPzZiFfIWwgmpUWwuUYycCHheEDdsLLSsjmJDUfFVaAjrRaTtdDnBteEhwKgaZGmMzZPpYgGfiDpTVVvZzvVDdeltTwrRWjGsSrqIiHKCcXxqsKkoOKxUIOWzZqQwtSsaAwWTFfVviIWwWYyfQBbogBbeVFeqaRSsMmXxkTaSsAnUiIEevIztvVHCzmZcCcvZIzrNnGgdnNQQcMbBnjpYyTWOkHSRBwNnQXPRpCgGZzcrRCVlUoOLldUpPlxuUgGcCOrMathHhwVVvWkxUCczZOIogpPFcZMWSxXswgcUCADPLlwFVIYKrEefYyozZeleUnfAaFQqQqyYbUFKPvVuUoNnwWlLUgAIXitFflAlrROZzoLPpZhHzkAaKqQlWwLvVImMXXmMafFyYAxEKkkKfFOvVGgnNoSTtsmefhSslTtLoOVvzxXFfaCcIdVAnnHhlgjJzIiZrFfUXtTxVvsSAmMUWfSAGgzZTtdVlLOouUvJXjJQWFLlfwqxSsjyTtDKOeEokTtFfFfdaQqYyiufWMoJjOJjqgSssfHlchHidDIPpTthDFeEHdDZDvEecUoOyEbZzoLQqlLlONmsTfPkvVKqQPMkKcTacCSOougWXxDdOrYtsSkJttTmpPMJzZiVvFfiKrXxRkoSsyIpcCPERlkveEMHAwqYfFwWEeOcxWwxXOogGXCRvwWwQTTtBpPFwmMeEbsqQSRrJxJjXcWmzZyJDdLfitdJEejPpDUuhHTIygGnzZYxkxXZzKkKBbwWbojhUMmPDdvninNIiOoOSsqQbBdJjPpSKXxHOHhFfAzHeMmDvEeeEBbVpPnNqZzwGOogQqROoNnHACcXiwKkHrRlLhZqQktTtHIWKmFYyTNnvpZzzQqZPYQSNnsOhHYybnKkujVpmaKkIiAgGbTtDJjaAIvaAtmEeqKCcnNnNkITtekKERDdXfFkPVOEbirIhHIfUAaqhlhHRVrcLlDdPRrpQaxSsZzWwMYyzgRrFfhEeQNpPXqQxUuhtTFMcCzhQSEuUmmCcKkiQCcrRnNceisSqQkNnbjJBNZznDCcCXxfHhTtaApliucClrRLYyBboyMmYoOlLVVvvNwmyIcuOvViaaOoUHkEhHezZQqKNRDHbBUtTJDdfcRrkKQqOOozyYFJjoOqXtAagPpFalLKXKMCcwESAiIBIWwZYyoNnwyNnYZzWRyYqJpKkfFPphcwnmMSszCsSssuosYxgPMQTtqFMAhHFfRdDraOaeEAgGUuGJjfFUuqQNngGiIiINnUGgfwWMmsuUzZqvFJjfYSSZwWaAYyzqMcRShHHsQUuhEyrRYyFfFaYyOtqQaABTtbwVvuqxcCXLPpkhHNUMmPlQiIRbSUzZuSmttwIkXxcmEtsSeoOfFNvVnEQxXBiIBvJjjJVbbhmDGgdMeEwFbJjpeWQqBbwSarRvxunLdzQwTtVwCIKnNhHkuUjvRvfFtPpPiIEaAEwWWtrePQqpEviwPWOLlhbQlpNKjJMmWJldDWwFcCAnzZPoOXxpAaamMAOXBArqQYvVyviLlqQIJbBNSsnGLRrWtGgTiIPuUHOoemMGMNnCgsdotQznpmzKjtUQeEoUuOAWwanNLlKkWfJfZzCcerbjkClLKoQqnNKxLEekdDKmlLrRGgYyzZGTtxJwVvqpPWiIYtTyecCEwQwjyFEbOsrboOrRyTtFfYBXxiIYdJpPZarRXCsSHlRTviHJjudRyRrsNnSJsSIGgiGFfCjVAClLcxiJYyYyaDdvAaePzyYZYXcCLlsIicisSIUuPYCcyzZNnrpPRGgvlLccJjCCkAaCcaAZxmzZMfDAaZSLWpPwQLlTWwBbHYnNyyYNlKYwDDMmCccBbCmEeOoMbPpcNIKkjLlJYmaYSFfVvuUsyQwWHRksDrRdSOoIZzmExakPkVbYJvNhMQqAaeHbXkeKdDkKYykAUEKOcKkCoXtHVvQjHnNhHQNnREedDbvaLeEmiTgZGgzeqtOoWwjJYyViILEyYXQnNoVYBuUbxcCpRJjrPXBDqbRrRycoiImhOIedDEuUUuLlUVuJYLlCHXGgxBHhlrcCEekKoTfvqgGFfOnrRcdDKMmwWOTGgtRKSsSdDcWwPYTtCImrRaQMrlVFaoGMhHtTENSdDgFaAfCcLrRgGMMmqSDdzPrRfZzFMmCxnNXsaLlAQqoRtTrOHQGYykoOKKQBAapPpPpYZzKjtTfjODRoOrpPOFfVxXDdmNnWUBzzZfwWFYBmMyShZDoLXxckRBbBbZbtTDflijJYzFfuUSsFPaGgMmlBIicDdkQnPpxXNkEeKzcCQsMbBijfFnJjNGHhyYSbuUJjcZHNBLlQqbnhzVcfWIAhHeHxXaAhcZKkzCFIVSoOzHEahTuUzLlMUumkPEyaNndDHdIigwARTgVwWvxXqvWlWHhkKHbBhVYyvvOeEYAjGMsSzJMkZFRpvGLlMmzZsQqQpPaAqSgGpsPpMYyoSMjJCcDdmssKiZztTIQCcVMjJGLEWESQquRTOCpxXPJsHAsqQMEqRrQlLRcGRfpPERrEeDvgXxpOwrRSomEeQqbBakKOsXKsSkKkEezygXDLnpUzHhBbBuUJjbyFfKewkkdEeDRjOEPIfFUmRrfwWFJjqDiZzeEmuIiOkoDzZdOITvVYmsRrzhHvgGVnzZyzZrlxNnBbsxXSMcpgGjZrRcBYKJrOmJCjtdDGOCqQcTmYWwVbBGhHOXxGcDkEesaPpASrsSTtudjUGqoeEoInNAjdDJzfFQoVuQDdqLlUcmKBXxHnKkMsMhaRrrMSsgGXSEkoxMIcCoOhKMMtAayYZMmjJotTOQjJHdIzTAatEHhlLgpVsYXjWsSwYKcCkDXChJCoIiTDDPsSRuUrlHJjBbrYyRuUhLhHWQTWwVWwvQqtPMmpFfaAjJadkwKkWYytqNZKkzwWaAJTIBjJAaHJkggfVvCkgGMxYnGMBBORRrroxHhWiIwgGZkOWkJZvssbGMxXapReErvyYVQUIBbkYVTkKpIutTUKRrLlLpPTtfBbdodBSwWvVsyziPEQJjebWwfMmFYMptTPTtmteEJjJFNnxZCLxuEvfFYyVAvVAGeEgcCacKkeNndRrcCDEcjXxpyYFfXLmSsMmfTroHhwWORBuUbhVeSdDyyYQdjHPcCojGrmIipXxVvKLlFfPAapXxYGbKkTykWbBwUPtTHkywWzZnJIUbBMOHRmvVXlLdAaTXxGJxaAVBSsmrNQFfPpXxqaAlLOddDdIiNniIBbOMmytFfzaRiIYyvspPjJoIsaASSLUuUuxXJTaDeEtTXxBbIYyidxXFfZPaUISQqmbBvdDpzeeEKuUVzcqQlLcCftTuhHUFNPXnNxQgAMMiuUBCcgcFtyObvSFfhVvudDrRUHVXHhgGakKARmoYyOjOzoorhHKkmMvVbVvBhHhhHgnNCvwJfDdBbsHBbhnNNnBbkKNDmMdZzEIWTWjJFffTxeWwscCYyjJMmSEzZoOnaALlwNVRrKXXxWwrrKqCVLnJIdDArboOBROISHsaAHLlolKgGybBVvxZTyYFftzXDdxXLlbmhJOPpoyICnNbBxOoXtlRrvYqADMUuitSsdDYYwVwWpPtTjONnPzZzZGpZgWOoscRhIXIoEgGWLlgGdeiqUXTbBmTYXxtyWwMCaTlOXxotJiIjTbMmaVPhVvlUkKYyqLBGSsjOoqCcmGSsgLdZzHAGgbDTtgQxKkyzdVSsttTwWwnUGOoguuQqnNQVSjrmrRLlrDXMjHQqBjtTsfFqNGgnSsuUmiIEeOoWqQRyYjoQqLgiCaAOGVvHhlfmDvOPbBcCpxDdFZtTXcWPJjXiIGuLvcNGtuUOzXxkZzyRIiPALwoOQqkQJfXXtTrSshHMrZdnNDhkNgtTQYyqWJCKkKkIaVvFrgGSsRsXBbnmMRPLNEenPDdxOjiICwWQlEPGMaAmACaRtEdqLhHlZcIiSqZthFBpUudxcrQSweuUEcpANnCJUeEJHGgbBGudZzrkjJtTIOiFgGDulxRrXxXoOLUAMjvPFPdPDdXlxHQyYuZGsmMqQYIhHiZzRFoksBbSpguUlguYyDoZFIiwYyWfOGerjJlFmbOsqQnNTtKAzhPpHZdDZVOfFoBZKwiFBhtTODapPNUuOoIeeqQYwWyWwZzPdIfnWnrHAaqFUufxFxhHWIiMmjJMXBtHhiIVvAqXxDdNnQUJhvVztHhtbyTbBFCuXxykoBbOEzJMRrrufaybLZrHhcCRAVvaJHVNnZzvKIdBBFKyRtTVsSvQDNjJRrwTtxgpwWhWnNtiIMmVAAofFjCNgGnVvRLhvSsAfFXxQqxMSseweEWXxoEeTpQitgQbBlGBVXpPxGgazJArpjxjUlxbzhTKxOojTCwjMTZUuEdDCcnkKNbuUwWBZPSvObWQmNSrdNgeEGrlBhuxHkKhouUOhJVjJyrJYyOuqlSsLHHQjJDhPzQYyqaiOoJuUmVvkKNyQqnNwJwnNXgGxEeqnwWoDOQmLMCcmMMmUumzIjBmzZVvDIiniIGGlgGLyGgdDYmFdFSZlaywhFUPpMmdTtgeIhydDlaAOFFKkcCKkmGZIiAakYoOzZTlUpEzswWeAaWATyZzEoTSIioajkIiKnNXYyjJQqxwWDNnGjJIjHwmmNnieZsDJbZHnBbNBrROoknNJjMmhuUKNhHjJFeEkxFfXlHHZWsXxxtJjwLrzZLZzFSQlLeEbrzZRsbbBgMrqrOowEKZzyKkIvaQWygyYocCHluNnePlLXukKvVZsxGsmoOmMBGgOmxPXUyyqIxVvXaAXxWYyHVCHhnCcmBbabKxTYgcRCcuTeligGILEtUljJLfFYywcFfCbpLNJjIFfIwWXxhHjcCDdhHJXlrRLfnOnXAUbeEjGyinNsgKAaVvTFfVvgMmgGHUxkKXFeEPjJjDdqQMmaAcCBiIbxXXZvVCkzZKEklMmLVtVeEaAlcnieMpwwiIiIkjvhHZwHCchRprFnNfVvSsHMIiuVvJKkthwUPQNGBQqkVtvVfYiIHzZzPDdTuUNBTtDIWgQhwjMUCbcRjGIiDgEeJjeEGRrsKsSxXVvktTZGJwWyNhHxcCnPMmtmUcCgGCcLlcCSTCMmcvAaTDdsSmMeskYRMXoRrOxUqxkclFpPTrRwiWwmWwLmkKfFkKxVFKkfhHkWPvExliIjBZzjJgdhUIEdDmLloOdHRKzIESWkbQqzZBaBbxmAUstEeTHhwlaBzLpPQqlYyWwwAaWZOobDIyYrRDTrRkQqCXnKEGGCLltTctpCZIiLQqIYIiHTWwismMSIlFDdUuxXIiLAlVeCJYyiHhITtjXCKQbzTYBNMNkxrHfFYoiIQSyCcMMxKSsSsNnuFLlCXHprTJqrNLlSscrRACIcCJMesSyMmrccIeEyqsyYHijycmUWwFZxXzuKkUzNkKQuUwShHIsSEekMtFTtQPEepLlVvxlLXipiIPIGgYGoudzVvZIXAaxDhiakFaZzouTtUKJBbqULCeNFugvVGvVUTUzSsZBSFfsNfHYKyKkMmvytjxzrRZLlMVjCcJNnvhcCcCfyYhDOodpHhhHOMoniuOrgGHlttlLEEeeszrWpPwcCRrsUuSSuUBNndXwWxOWwRNJuGgBBkdOonjJrSsSsAaRYyzPpwYHwRuhHuZzhhYCnFfDZQqZgGoOgGSsNncIjIHUDnSzimMszZkTWoBXIAlvQlEOwSAMPfgcBxXsLliIUDaoDQddNxCamiPLaGRzZEGEegqQiIUDdWeCRStTgVZUuqXxKkYzydAvDxiJzjEGOJBbOACMmccIwpPpXrwWoOROoxOLfRSHnNhsUpPutZzmMlLyYmeMmEkHhQqGggRbUugZrRzzXpjbJbCuUkKuUkGGUuiNlxqwWMmdDbaSsFaVJPEBxKTtmdHmMqpPxXxzZpMdTtBbZxnmLLfwDQSHSTqIiFfaeYYyGDFKgGiILTBtoEJjMmzQaAqVhlafcxKpPPzcTtSiIUaUueYYyuBejjJJDdheUuEHlLEhuUVZCczTjUQqNNnniINwnNcoCrMmIPcGoWwtvdDfLOyYoOhrRWWAawotpPBbBGEuJjpPmyYMUqpYyPQRrNvViJAwWaODdHhobmHsIPFfMlNnUeEIdLlDHhcCQqUGMVvQFDkKiIdUJphmSEkCGjcGrRxcCpuUXYuZjJzfFkAaAaEEeTzJTHLhHWMCLlmMLqUPVYcXxCgGNnDdeWFWyvQgjDdnGfSCcqxXLHMmLlEAeVqaCyYOKpFBPphlEeolQlNwkpRAymMYwfFYFWwnrRkEMmeKAZsdgGImMiKoiILsDCpOoXcVKPDaBbAMHZOnEaJgGiqcvVnfMNKkyWwsSYnbjZzIiaUuAarJjspBzjtTqHQgzJuNiEvVeudDUroIihqQrAJjmCwBSKUICcxyiBbbIGZrRTtJMlajMbBmJSsALlwKkpKksqQWZcNaSxXkKbQFCPzogGdPpDuUOZMmAlFfLaHSbBIvViIFKXDjfTXCOhCMWwrgGptVUVvQqGTuDdsmMhHYHhSVTwfFWHxzsSFdiaRKWkIipCbaOqwQQizZIdmLlemMCADvMNTOlLGCcgoVvtiuCZzQVgGBVvKemQoKMiIZXxzTtmLBblkxmyfAwRrZzwiaAnNApWwPcGhHZSbIImMuaAdgdvPlMiiPlkzMmZKyWAawYBheUuAaIgGFfBeFPpfZkKdrUblBbNQAaqyUWGMjgDPpdISGgsAUkKKkGzZgkGNTIAKEekahtEDdechVAaBUFfFfiIHhsSYfFdyOoyoiVaOorlabaJjEeEegVmXxMuMmyJVUXSsuuUbGRiISshwWVrRmcpwNgzZTqeGYywfQuUSKkUhsSCspPiIiDCXCAMOLlomZdDvVPoxXoOISJIioMyYATtlGxHSZJMMQdrROogHhGDqmmjzshXgLaSsmOkKjsiDcCdOpzacxGgcdAaIbBSceEHusvqQeEVqFWGgKkgEQPptGMmIinWwWPCMvuUHeFfErgBUxuvjYUaAmMyYuUvIiGUurRAvVBALROQIiGgqoAvIOYYDyaACvVCccEdDeubAavHCPpTJekKEjAaHitnRRrfFrgGgKvFfgGVmMuaiGRrJxXCCccmgaAwGguYnUudDDdLBuRfFoODMfFmzEbibBEHbMmLpIImSiIsLpVDkKGocCQqODUkKiihHBszEehHYygfFCaIWRrWaFYMXKOokKBbfeEFkOqSsMEkbvqcUInmVdacEMDqqWQoSJUujsSsABczZgGPKwkrAIDfZXhtvsySUtgYyuvKkTbBPRmcHEgGeocxtFgtTGFhHfYyJdxkfinbyYyYCcBNzTtQvVqZshTtpcfZzqQqBOosAnCzFfwSPWLlLmjzgiBIYXaAKkiukUuBbsbWAacMhHaRHIiOUuRwWjJInUjkQqKSsZGqhQpTtPJVmMvZbPSaARZzACjJcJoOBBbPpmuUFNCQpPHaAhIZzjAeaANoOolLzNnhHhmIieEdwuUWQqpkSEesjNnJvCtTxPcdSLHhllOkoODSzakxXEoOeKfIiyWarPKWtTnLqLsSOLHkMmKQmMqbfdDPkocAQvEaehlNnHhQccCtTKkCsFgCiIcNfFJGVqQOoJjfFvqVNnYwfwEzZPpmMyvpuQlcmwlvVhtjZtSseKUykYyXdyYDxKxPwWXTtgCQCjJxXcqJgcKesMHPjuDIFfGgirXxRdfqmhHTtgurSwWsRinNuLmuUpiShMZzbBBpPjIbDPpzZdBbBScQqCsWwnuUegbTDsSuUdOdDHhwUuHolFVTOgSsCpiyYRcOCNFfxYyXnnGgeEbBJjNWkhHKnuhHJtOovHJjbUyEAuUusFfCMmZpkuUXpPCFWwwWHhALHvZMmJjeOTbtlkfdgMmyCcEAmMQtshstTqdhHWlYyLFllMNXbacCABGgbBzDmPXQhDNnMkXbepPpKkjvVQqFfvAfNnABmMQXLnXxIBqBtTbQbggXxKBbcAaBjBxXJtTPxZbBYyGBrtTGKMTrJjVvFloPlLWiCfiIFCfFBbcadDoPpWwjomMgeDdJZjIXdQqyaPpAYLlVaYeEyDdxXDVvYyYZCcyDdQzvGkKsrcEwugGergAlpzZIMAcWwXnDDcCuUqvVdSsOUjuUJuAduSlLbCGFmMfFpmPpajJsWcCoeSsLtTqViILanNlzZLixbOwtUHhuKSsNneESIZsNdkKkKuhXxBbijMmJJiCzzdNwWcyHHUAaCXxcUrWhyWBbdDjJqXxQZNDKbbUjnroDbsGgRtTFtTwgcCGxXqQWfZSTTHhLhaARoUINFfOmoPHFHmXJTYVYkyhFncCbutfnEcluQjkOjJAfsSKAInNHdZzKkiDGgUOgyfPpWwlLGgFaAqfTmKAafFisWZzqnZflLuMWwCwpOoPWYJIPpXxiIhSQbBYdDqQiCCkKRhHYEmjnNicauUQqCRGgrDdGeEgnRMgGwWmQxXrRlLOocCccCCjXPpxXxGgtRPhNyYnxciuUIrRfUzZOmMCcsSAaoEekIiwWhvVHXcCmmYtTHhsqOyhRXAagGwWKVvnmnbytZEeBqkcxcEXxvLalDdfBbLthyiAalzHhcdDPTlLqmMQCcgmMgeDdkNxcQqKtdidXxcCALWQMMmmuUqdDSMmuaMXAbBKwuUseiZkrhDMkEeKeiSsuGrRgGgHDxXGbPpJLXeQqVpuUwKvXcCMyYBblMRrIXxUuWtfLjQqJyYCKXDdQYyuTSiIsOotmryKSEFftelLEmMVoOtsgGDMmYyduMTBmQqRrMbpAaNXnYjgzSgLlGdgtApPaoOTaAJrCBcaTbQqBtAusSmYyJWHSzZsdDTtqGwPpiSbBsyYdbnOotpZhyFqrRQThKkHvKbgnqpuWHTAayYEeIijUmiIhRPwWrWbBzVJVvHsShKWWkKPmEINCaALSsvTvKeczRrxJWwpEefgGuTthGtkGSIYgJBuaxNosxXSNCcFWwXxxmMiinlPBQqWrRgGrCfFzZCcGvVytXkBAMZzNcvhDdySsjJYNGgnwiIWCcwiQYYuxpRrNnXIiMozZbMSgXSzUxpEULAahOPpGYwqAVJjaMmAEeaAiPpYkeWwWRQBbRmGBSBiIqEesfERrEeqQKibBIoOkeljJoORWToOtwlosSOWjJoOCcTXSAawCczhhLKfhHnIikHZoObBzKbhzBjGPpgdSzEIzZMMGggGWhTtJigdGnNglLiItTDdWwEeJAOqQswWtIiOeYtawESZePpZzPRIVvimMruLiItFfSslLoOytTHhKkKzeEgMuUffotTnNLOoYHGgiEgGGDcCufHWYxXALzsfDLQqlfMgxXgNdMbJiZlMxXqodOgHhGNQrRWqQhrRWwHjRrWoWwOYpPnuUrRMFfjILlAMrRmZpHdjxKkXNnNRrnJqhhFfQUojRYwWvRrjHXUvVHbWwPpWwLRYmMynDRsnMqwBoVsHhpsSGgzpPeztmJWctFfJQqXktHZBXLjzZJuJXJPoORaAajZUuAvbKkgLGgqGTIqPqQtlMmLAaORrEmXXxfcCFaDdVHlrcJOarOoRaviITwGgHPGXWLdRrDhGAaEegHlGgxuUXndqyxXYBOobpPNnfFrYkfbjJbDikRrhjkKzIiwgQqGWlBYAHhFYyUlLiIRLlKkmjJjZeKyYYDzkKZaPpzZEeAdUcftYBEeTTZvVHzOoYrRyZjzjJZBGgbutTaJjcCTkKbxZzmwXfOoXQQqhRNwNFNniDpdDuUUuEEaujYyJUgGejTtJEAinAdQqwWoHsSbeEfIbBWkzbvzvVaAatTkSoBMfLaYyAREgowWzOCcdUGLGuUdDPKPYypOfrLOpPBbolyzZSgzUqhgGQqXLxpDpfpVJmzZadfiIIooOiUuKRRAarDUghjuPpjcLlaPCiIKkbBnNWsqBbFfBPpgGbRCXDdDPUubfHTIiHhzQsQEeqaLiIlAgGCdDzjJQDeTrAcagKkpHheLVvRrqcXxJoXpKkVIivlprmMNkKxSoOfAEeieEzTtZHhcjUuwxaAXvMmVGhJjDAaPpdHnKHKkGgzVxXDdvRmRxxFjcCqKWOowNnWqQxXlaprYxXZzKZovVTgwWnCVXxlUgiIxpwNneECxzfXoVdMFeoVvOELcCxXgUukKDYkKYzZrRycUuCydocIGXxlOnNEMmedDtTJrwbBnNyYaAMWwrEeTtSsRQhAaHlLSJbhrRJiImxhHdRMQeEqRJsSsvqUNWTdDtTBbvDkKZYXqGaxXAdkXxAaKBasShiIEeDlFfpPMQSsJgblTUuEetQuLHpxXvyYABGTYdBbmMDytQqgVVvvbBLvVJjtkJmMktTVvKjKAcmYTytMtxuoLlOQRrIEDSswenNqQOiSRrsxiHrCSwLlGzPgpojJpPMmJvoOWyKmMkyEePrRwWpTBbIVvmdaQyVLTBbxXcisSYAcFfCajHMBfFSsYkJlLjLOYyhShzZFfsiokKDdaizwWCcZjNnNlWmMrpPRwvWwcpDdPEecCQkRMmUQquRxhHkvnWNbBLlYhsSUuHyXhHqQYytvVFRcCrwtwiennNFfSstTkKAaOQTNnrRtqPpoSFjlLCcWVcHhaAGHGwxXWgRDdTtObBVJsVvSgGjLrRjJlLlvOZoFSsfJMrgGxvsVBoYsSTWyYwfCGqQbIIimbxXBmaGuUqXZxXzVvBbxpnCMmZvMmPpkEZCcPhHVKkMsiuAGgpzAtjlsJjiOSVUNnuraAANfFnaAZTTtYoGgDDoQTtqnBbRMbvWVvAawXjgtDEMmexfFGgWwprRPMiXxIrhwfFWocCmuyYijNYKhxXpBbPpuKYtmMBgyYlLykEePMDdRpPgJOphufFUJNnDzZqYsIiEvHZefFEztFeQqExXMlxPJCjJCaeTtnNUXlcJjNnzXfjTyYyTthHBsSEqJjepIZYSsbkKYyDORrDFlkiOhHoPtvSHJjhzZsyKiuqPiIAmgGgcCBJjSSVzjhcCHTtKwoDdKzlLXbbmjJgNyXmKcFGGKjbBbBHhhbwWrHhRGuUgTtlLitjnwWQTKDATAatqwpddtOcDdjYyQqyYHNnZVvzcNnbBEkfFKexdyJJjxyQqSvPGHheJjTtZiDcChqcCEeDdcCzeETWwmmktTHVvYyiIIiiIimXOKAaFfesWwxTMmtsSmRASWwsHmMmfKkFSmNhjJbkMCvOqZsOoSUuasPppLlRrPSiOOQguJXxNJjnDvVUReEKdCgbBpPogbBvyMtoQqgNnTJcjMocYyCRjkygGbCznNJIiPxXCmXLJjRCckKYNZSMytfFiKoUMIdQlLMuSsaAUuPpipeoJrKKWEkYCYycZuPvRrVNldxGYZSHhsxSoAaAxXMOsWoPGVPpdeFrgCremSahSjcotrUsewelaAuUgmvqkSOmSpPTtGgbBPgVBbPrfKkzKmjZyOoYBbKkmgJahHyoVwLwUuVQwWtTWwlLbBTtGtTtDdraWnNGDhAYepKZpPAauUJjtHAAaehZsvyYifZzEQBcCbqHrRhaOoiwFoOeETtCvSEesgXxIiGCBsIwWiWwDdgJIrRbBmSTMmDdtqZBbqNoOnKDdCbLlLCMmcgGApeLlEGgfZyILFbBdBcCMmzrZzKClOdDdzrKkRHnNsYhHbykKRAarZLlbuRGgrbBmMwRJjrBbAaMvobJjBjJdoJyYFANndDaWwzZQfFqJkyPIibqksSgqnNFfcChzZSoOcaApZsQmlAahYyHfFDMmeEdGAaIiHjJhsnemiIsSgtTOAfvLRmMQqAamIiqWwAMicvDdVypOoCoOsPlLpuUkrTtojpPatTAJFfjJKnNkRLlrkCNRRXxruUroQbyYBtTGgNNnnVFeEtOWwRLbhgGcyYLgGXxloOyjxXcCUvuQqEeioHMkKOCnNYrBQdbVvyHhvOeEqxelvTzZQEGtYyIMmMTtlAZmRrMzVBdIiDrqhJqhTxkiIeuaEKxBIiHhTtCchEyYmHuUnVjyBvKpPpKAgGXeQIOoiqMnNiKrhwWZzqAaYyAxXMTsSttTUuyKkinCBDdddWykLnwtTWhtqqmMQWwlsukKUzSsdFXVvzKVpCvVHhSxypEmKkMVNnQqmMAEejIIiXavJcgGgBbxHhXjYrDMmUNnrRhIVBbtrLhCbBcgGcxAzjDyQqRSotTBefYJWAaWWwjwWXgBbqQUuMlXkPptTOkcSsKJSsBdDREFjFwUuTxXtquTkXxKvVJkZMPZzNZqiITOJjLlDYkKybBSGceEmXxgSsEhVvpsSwZQqrRwWzlIigsSjFfkKVRKkabxtDdTohHiIPxXLhHRZGgRrzrlpiINabBgGieEkKpPIfWwLjwkZHhhHzFfyYnPLqBHdDotTwpvJjVWPpIFJjfVTtRTweepTVrUuVJicWvWLVvlqZDiRrIwWlGgNUWwkKAaXVAsyYWwWwEPBfFzZeEfWHBbqTeMCAVvXxaKiYyWDdTTMssBrqLyYpMuUmunKZrRzNyYlLYDdynlBbQUQqWYCcyToAAafYuUMmeuUHqShsBbrCmQsqQsTpPtyVQSFuyIixKkXYVvgoWwmaAfmpGXybBSOUSSFBbfnnNmMNcZdtTTtDNWCHPnNjQvVrwWOXxzibaiaAWwIKGgksehHWRdDoOYyrmkxkAfaVAavAGTRTtrxwWQHhfZOooRrCFfFjuCcrRPphdlLrTtnhuAAIoUapPASnNsqQYyCiugGUYMtzZTWnTtOUsSYyILPFcdKSlLsIECqISsMuUmMMKkepPsqHPpZmNnfOoUQbBqoEeOuZzHnqEeHTtGZfFmaAXqQAqCRvONnlLgGorKkLHFfQuLlmMFMmiiRqQEeIBlLeovpKRrxAariQKkMHhTVTtFfidBaAMPAaZzvZlLzJUdDNBnNoUuqypPVtfMHbBhEekwihTKzWIxNyYNnnahrnNWJjkKQAaEeWwdkKEhaAZapoOLlPWwohTtkWwPpGgsCcDzZoZzSstTNnINVpucCHHRrhiIJOBSsJorROjXyNYcCtTFwSsWljYMwCjeEtTBeEtTmtvVTMWfjJhHbtqWJjVroKOokPbBpywWQWahmxXVKLreiMmVvVvYOIwWjJNnIvVeEjTjKMmNnUuHCchTiTtIZzyCcRORYoOydDroTtfFiIoMmXZzxwGUscCAtCmiIpkKGglLpDdFtiISqQMnBVviIeYukKCOoVbBdzMDdmhWwfdHTtjJCLhFSGQeEmwFUIApPoOtTYMmMmDasFwuauRGNnLHhNHhNaoOvDMmiAZzuUZjJyYbBsSyYHFEqQMekKJjxsSijJkKaLuFfUTQqWwlTSslLRrtLIxiaGuIdDiOpkfulLBNuwWELEeEOGgbBFzKzZsSkAaFfZRlLkyHhivfWxXAagGEepnNdacVvvEdDeVuCGPpbgGBmzoOCfyRgGrYSsspPSZzGOioumRrMXKwvVaAvWHTLUulAmRkKpPoXLShHsUuMmuDyYufFLvXxcPrKkNnTJbBjtcCpsSsScCsSIixoOqWQqbrshKFfefFEVvZMmzovXxXxVxWwXwtPGNnEegJrRNcClLmiICqoOqDGzdDZAwWCcaAagvVRcCZKkNnizVcCzZCzMZchOxXoTZaAiVuNsoOSdBDdbDLltKrAQExXtTTtGgdVvDfvEGOqFMwWmwoFfiubBXkHMmhSrRQWwkhxXPpQRRZOhHeEoLlzrHhgRrJBbLEvVVrRvPpaAvtQqPdIQqaAFGiIgyzZzZaTtAgzAmMGiIkWHTbzZwYyWiIwwWWNdJmMjDtTAKkJvudjMAaHhjJpPJoOluRrUKkFfLloOlAaSDduPaNnwRrWgGpvsFsdxXSuUsqKcsfFXvzYymjevVTtEwWdzLlkcyYPTGUuNeEUMWwfKkFCxoIsSEHGfFcCgOYyIXurAgKcCZzzZhtTzPpYylLTWwCsSpPcRgOuUOAhbdDHhkKDKkkXpGgtTsljSCPQqpgGdDxrwWMmxMCMqQZxXyQkWwEeiIRroQqdeVAWwywqvtTuUBXxvOVvygGfFGXLlkelEvjJYgHvgGzZVxLusfkgMLXxAVoUvVaKxXVvOokYvOIMmLvVEevkKWwVuUjIaAfhHhFCcDzHGgGUsGypHhFHSstIWbBjviIDLldVrEghwHYGgyYJpmMPNnxGWwkKiSBbXadDFRiRAawabWRrvViIwBTOvjiqGgUuVvoOQIjnNIGeEgYnNLljJOoiFfGgcmZzlmhHpgYyfFpqQhHBbUhhaAoOdIiWNndzJUuDaTNcCncCGSCcapPAmMtxpPfnAaNXlLbBeEGLjzeEDHOXuNctRrtbBbBaHBQckpPKYyekBAabdcCaAcLlCtJiIDRxXrHhdcCcXLTdDtKkZzxQxcCrWwkiIdjJSsdlqYcCyHtTzujJEiIeYyQSmlKBwDiIBTVvtyghHGqQYaaShHuUrRwKkLlkKZzYybBdPUxqQTthHRTMmFXJtixXPpfFPpGgBbMMmsHhhIcfoXaAXeEGLYWZPBbWQAQrOfwWfFzZaDdkKUuFfyYEnNRKIrRmMFgZIiYhHQnMGXNnxWwmNqQqQqREeryYCkWqrRQwKJjAZLllLdDVWtNSxFoecCHdDvVrRhHnXxiZzulPnNeysPgGpJNnjuUMwWmzZBBbwiIfwWFrUuXRrQlthHTrpAaPRsVvSYyqQiYIiTtLlXmikXxXxFZsmMEhLOOOOoGKmaAGCgyYDtLlTWwerwCckbJjBdmMvVDYyKGOoLlqVvgVsXDdIiSXcEecDWtXxycigGejJNndDGSjJQqmMmMsbztAaKGgNnkTtZGgzTHkRmQmMtJhSTeEzuUkOIiniXBmYAaAayMgfFobBOdzZoLsvVxjqQAaeVvDwWWLCcxpoVMTwbBylLPqnygGfFLlnyekKTivVUDduDnNMRrzZQEQWkVkaXfkKEpBbVEeEeVoMmdDOkKMMmrReEqSAbmlCcWaAdDoOPpwWPpbAMmfLiNnmWWwraYyqoIilLOcVvQJKvmMGinbBsGMmgbBBFEsNnZdAaQVvDdqYOoQcCefBbFpPGqQYYrotTDJRYFfucwWRUurUubBUutGnzBdDOjMmIxiIRveFfEFfBbpPGNnOoLKmFfMuEeLlPxjhzOkKxmMiOonDduuUUQqNsZzqCchHeENmMvVkYoCczulvaAVJvVNnLzVvwJjTtFfeAvjJgpPRrxXbqLiIfAjJaFlFfQoYeLIilEArRaymEenNMaXtDzMgOfFQTtIXlLGgwrZDdtTHNFkcvqaAQtOvVoTQQsSKkqiWwTTZzYfAatUKkzdDSsSGCcSUusLyXiIxDUAaunXxugbBTzZsHlLlLhPpKkRAjlChHYdDebropmMpIiFfRXxAqfTjJtFQabdSsaAwQMmUuqQfTnNAAaimHGghMIcRrgGoEeOzTtAzVzZvBKuUwaiIMDEedPzkumnNLalLEgGiSWOJtUuuSsBcSsDdLMmTtEefwWXQqpPxfTFfjKnNkCcqFWwfGgoOsSVLlCcvfvEeVIisOyYoLewnMmNcCJamSsMABbjQqbxXPtTpPcmDSsdMtTdtbBoLlNOoFkKMmCqQauYsShMxXFwWzZYFdLvYTDIidyeETtvVhwxXwiIWxXUMAamjdDWRSvoaGWmmBbWYyGItrawWEEeSyRLlZIPaADdNzJQmMlAfFZAAavdsSjhHWfKAOoaeyYElcqlLAllLqQLDtTPqQBSsbppRrmNnMUZzyYMoOqEeAaxXQthHEofzZkKeEGgBbyYnoNnZIizDdPpOegGJjEYzZNnBbthTtlrbBRKkVBMPipCcPIpmrRoOSOjJosmDdYmrSDnNjJtoDBrIiRerYyDCcWVoXxOvwdRwWHhEyvVkVnNjvKkYypPQqkqQjJrOkJrQqzZQWwqYxXyRjJysSYdFoObgGpGgyYCOoTuxXUAbcNnvVdDSsCcrRrMmpPCzZcPVNnFfVbtrRiEeIBiIbJaaAFfDtTMmvmVvUTvfFFfsSBuUKoOccCSspPCLbTShHzANndowKaAkcCWzHhtTIiZXxbFIVvCciIcsSrKrjVvJjbFaAfXCpPQQDRHlLbBzqQpPriIMRQqdaALKYykFMmfnNMmtNnuznNZeqQkKtTkePpyAarCccCtTvBbVTtRMTtWwWwmDbXOoIqOohHQODdknbacCABpPuPpRrJpBbPbBjmsKGWZzhiIIiPjJSkKcGgUaANzoQqIiODdPkKWkeEhHbmFfkWwOobBxkKIvmMnNVOYmgmeNnHhbBqIifGgFvzZDfFXxeCccCuUEGTtgkKQmrRZzqpPlNDdnLAsSGgNnksNAVfFIZzMmYywXxNLwQLJjBbBrLyAaIiSShHUuUKTtaKkRrhrZCczBZHlKkLqQIUvVjWuzQAavdDVbBGDcCdujTtJZzIiIbNnkKBdDZcCzuUygGQiITtIPpGasLRMTkKtEemWwrXxKBmMxXrRxONnlLuUlLoOobQVXxvgGqBcNnsSEXxWwgGACXxcajLfFpkBvVtXTtrhZzbdDkPSsRfDWUuUurRqxXHhfFicMmdaHcChfjJFzZQqifcgKktkKTGgpjJmdjzZtTABbGBtTXkKUulLriNnIPEepFfkIiSssSNnYRrWwyKCcSDoLrJjkFfKRRVvKcUugDxXoBbxXLlnCwystTSsTzDmGoOgKOoJjoOgGBbNnHhFvVgJjsSGcCKkRrImsqdDkdxKkseEwXfMJjGkIiVGTtQqgvXqldNnDxmTeEtgdCcWwDGWoOlmYSuOkHMKDdqcuUOUyYPprcnNCZRrCRrGEeYygRrmcCURrQqusmabBAVvkKCqlgtTxufNLljJnUadjfxXrRpTtPHHqQhHAKkjBbEeJnNZrRUDdLaCbBpBUyYbknNabxXZMmgRrGJjmMNvAEereHBbTthKWKkwUSsCchSJjsFOofMmGgxiIhHcCAmIoOitmRRksNFsqCRdoOoOGTtItRAarZzboxEeRHhtTGgrYjWYywqQsSqdDsSRrQnAaNLUrROJjKkGntTfFfGTtYyCcgFhWwUuQliIMXxOFfwDLldRGgrMNnOfVXhHNUoOonsSrRTLlQYRrPmRrMpHjDfpsDdXlLxiykKYPWwpTkgXxmEeMuUwlLvzZhmHhhMmWybBeAWVvNTtNuuCcZvjtTpLeEnUuUMmDaDJIijnwWKLZzzoFiCcaAbBWwiIwWIFfEyYTiIttTWgzZzTnNxHhJkIiKfKgGkgGuUgAacCdDGoOWsSAaBbWwJpPjXxmMbBwqMmMhFfyQFdDfxgDdGbDojJOcOoPkKOixXamMZeEGjJBbAaLlyGgtTYTtkMXxcZEKFBvYndZTiIPHhxbWEemMzZwFfByYOoqqlLDvVdjJQsJjSwhHtTWixLvYyxXoOhyYVtWQLlvNPozBFfbFhHGQeHhisjJbKkGaAgcCpPtjWwWdOoUWwZzpzldDLEXrRVJjfFHhqQJYMwWyWSswsnNeEILlGoOdDNngQNZuzdDOoqQijJMqcCFfNnUukPpKIiYRMBbAQWwyDNndYYpPfFQqymaAMvVNYyrRaqfsqqQgGwooPpgGLggbwccCCWZzjeEJPnKHhdYkEewMmNPEepeEnWvQqVuULlIkIBbpPAFHhmMfohOvwsSfwWFWwWFfVOooHlLVvSKACcDdaULLllSVzZvsLCFfnNclnNdDCcsSuPMmSBTHUuhtsSvFICcRrCciyYvPpVZAazfVwcmHhnZzNIsHhAsJlLVuELlYUDeErRdKEekuavQgFaUmJYqQQJjtQuUbpdDUuTtGgPDHhhRAaYkKyNnbTgGFArRaftTJGBmMSsqjJVvTtQTtPmMpqzZEPpbtWGguUDdDsCcXxlgGKkhHJXxPaAgGKkmBuOoUbiIMSiILlBIrRmvVUDdkkkQVmmMnNhHuZcvVCwbBboOoJalLAmoOUQquMZzhHrpIiJKfxXqzfYyFwWpPJdDFfEetTzOoevOoexXEAGvVBrRxXiYydAMmgGBkibBIgKKuUkqQUuWYHhywVusOnNgGolLnNQkhjJHKqSzZzZWYAUjJucCaywuUnNYaPkKmMKkHhtmvVMxXXlLKlLctIiMmHCvVczUujJrRdqQjJHsqQnNqQYdsSXpPzRjJrZxcCDarRCcUDdcCrDdSTtfFDdFeEOofJWgGAcoODdeIiyxvVwzzjPlJjLKfFbBkYyqQMaAAABbjJtTcPwWpRbfIilLHUtCcTuLLlWJjRIkKifFjHKkcCCcbxBtTJRLHhhmpPgIUpPLlKugwWOohzLeEoOBbFfWgGCcBbiInoUnjUoOEmPuGzXsXxSTpPlLUutEePYyiDIVvyVtYYTMmtGgLlTsLdtrRSGXwLSEHDdqsakuUAaYyfByYnXxBbMmtuUPXRVvsSrYyaAxyKaTHhWwmcsfFSiTtHzZwvVbBWhGgnuUNnqjTtJORFisSIEdPkXbJptTFsSrRfJfFkeQDdUHyYdDheEcCHYyhSLkQuUsQqQwWqZIQiaAuUIqGWfqQXEeWdDlMQbdDbBHhUuzZzZcUEGJfelLFfEFHhfFOojgzRrZkGgrDdSsRBELlemMgoObBjJRrhgRTtWwTtDNkNnNnNeEboNnigGavrPmARrKcCgGBorEeRObExYyXAaeRrxfFXSFHkDdKhfPqQCctTpHfFaUyYlkKPpGKkgZxXvOoQaVvxXRRrJjrbfkhHVvwGcbBCJjQRPpnNzciICXxZaKPpeETtqQkRQqPVrRPpAaQDdTWwBNeXTpGEeYdDypFfCcsSaAtTDutTUBRfwxpPXEXrRZzdDAaEnwnWhhHiIYJyYiBbnyYDdeQqoIpPKkZiIoOzQuUBbJwCqoOQRrtTdWAawzZDOWUuwoPaAkKpKkAVBbpMmPvNnSLlWwOoWERrMmecCTtZzjJjiIJyNIiIiNnMLaiINlhHyYLeEMmvzZedDPQeESkpPUuDUtWwoOmyYhfFHZzuUDqQfFdTtmMzzrjngGKcCBbkNvQqVnWwzpPZMmQOolLvVmMGQcCApzRMmyYqhLqyBbmMMIJjCtTkiBbIuoOetdhHBbIioOHhbjJgGWwVvzZCcjlQBblLXjRrJTBzqfFgTtGLluUoDJOHhoyYOoypPvvOoVVYuLlUAwWmaNnvZzskKRqsAWnNtbBRXkKxTtTDAijJgtKkbBTTyYhHOolNwlLWxXxXNnqQnAaBwWONjKqFfUuizIiZGWwgzZMtTJFfEnPuUpjQqcwWCiIGQqAoiUusJCcfFCpPKkumMENBIfXTlqyYQRZWwzpPqcChxXaAeTtGeEgtQqhHxXTVvQtkKdLlgGDzZIiTSvVFOokKrRYZzsSqQZzZPOZEeJjxXTSsoYyxMarKkhAaHAKzZSrRsmOoMbiUPpXZzdrQjtclLCiIvVVVvvISsmMSsGgGgiTFfJiIpoOpPFfGgTtxXwWVaADOoQhpPzZhHoOHLlKNKkIfnsrRScaCqJHBYyFfbhGbjJHhBgrMHcChJSpPnNKkwfXxPSCcBYiIyriNssLnNwWdDplLPKnNMmToSsiVBRrEeEesOSpPSsWOoNnQwWqzZFiKkAoxyYJjyMuUmUuBbqwQbZzZGgSsGQtrbBCMpPabjJPpfFrRcCHxXhSgvVGgwVvlOWwoAaEnLloOUZxXziIFfcSsXxCeEOmgQoaAkOoSsKOqIiEAWwRrOnsStTILKQoymwWEhLBblcCZzpBDdbfFPSsHhQivVoLAaycQhHUucSsCxXHhqAatagGHfiIBKkUqQSsuBbxUHhuAaAarNCLlyxXDdYhVvHZPpCUuczlULZzvVlulLGgoGrRgplLRiaACqQIeKkZzAVvoOHJCcTDNnBbvVEqQeHheEEZzeKuUkiJDdJjyFfYIinRtTHQEoEevVoObSsBOoOgGfFCctBMSsnIBHfstMlLmTBbpYygcoOllBbXoOUuRoOrnzZNbVLlauquUGgFZzfDmbBMdHEehJjtIikKSsTzRrZkKAaLlYnoOrRTtXxEKkELleSdxXjJDuUcTivVtTTtInhHYmMmMVvyhFfulyYrayYBbKkQssSSPptkqJjVpiImMSsarRzZAmqINnFzZfIiiQJAajIqQeqLsSlOoRrSsJUkKlLuEYKvVFOumpCyJRrjYcPqbBQisHhSIlRrLfQqFXxaIpdyYJjDgnNgTDdXxXxXdXqQZXxzJjqtwqrLlRQUhAVvuZYeEoVRMQnIidrRcJdDeEHhfFFfAaqaAQAuUjjNBvHFAEGZqhHQxXRQAbBdtpPQmjJQqMxXcGeEMDaAdTtlYyayVvTHhJZzYSPpqgPxXMSstgGTmOfFoxiICcYySsbFfmgQRrqBIxPcCLlXUqOtSsToNtTCmGKYGRrgyTtkYyXxwFfwWOoCcAaxaSsAaAaYQvEeYRrPpoZzOIOCconNeKkEilIcDdCCNnLSDdsxEeomAIdDBylmuswWUuCctSNmBbUtTuvVfSJjRwWwEvVBbJjvVuIiSepbBPpyYnrrBxXWmMwdDMmARqQYlLyZzYWwUujJjJyKfGnRfhZTtzWwSuUwWsmySUusYqQMrRLhCcnNHhgWbBNLlnpzzmdtTDKkYymMCcWoOfpPVvJSvmMVcCtLhqQHlAoDtFfYyqQRruyqQEuwYyWLBbwRrwWxXUpPyLlUTeaAfeEMYXmkKMPAaPpbBvVshHRrZoOvVqpMmvVuelOsnNUKItTFfIiDGbSaAzFlLfdjJHmmMMTtjJznCcTttTIiNTAfaAtTIJdDOlLCEcWSvwWVGizlNnLohjJpPTjJhUuJLuUlAUuvCMmOzZoZwWFverRJjFfWwNNPpnFFfAWVvwasSAafeEdnNDnyYHgGBpFfgptTPtPpecyYCHhEhGXkKaOoAyEMmeYxcCcEeJjodDOfnNFBRraAFfbvVEeUuRrCLlIipPDKkUuxgiIuUGDUXCcYvVnNWKkwbhHeHhYZzyEBZKkzybgGBkKeQqEGgHkUzFCLlOaOoMmvoxXOSswtTJTBcJjoKVtFfiElnkKNDdBbORrvVowbgxjiIqAtTaoODMDSjpvVPJBVSsvbMbBmFfVJjZoOeCczzZqonTtNOaAJHkMmKIQBbIiOoqlLlnNkKpZlLcCzqevVcCEuRlLgGrQxXhBdDFzHtZzTjJKFfaAOoLIsXxzZcTtvVYMqmWwyCqsrRfBQqZyYPqnNOovMmSfnNNnFPpyYkKHxXhFfGEfiIbrRBYykFfLlhIPAiIaQqpToOMyYmvVEDddyPpdDQqIiTgGEAaetEYTtWwgGyokoOsNsPpuHrRhxuUTbBNGCcXVvCccCzAtTEewKjMMTQKkBIibqEeQAaNnhxxXmMXwjiIhHJWHSPpBbWUMTteJjEJDdFIiLljJLWwVJjvFqHhQfJFfGggGjlGgSPXbBxpkeEMLaAlmKbPGgpgGrbTtlLiIkuJkKjUdDWVDeZBbzFnNfWLcMvTtjJjJVmKkLlrVvRNLlRrfFfFkKqXxmUuhHnNvVKktgGloOIghHdBEefFdQJDdDdsSviIfFSsaALxXMmueEwWUTtDdhGTtxXbBxXxZzgGyEeYSpPstTLlLeEGZzsSHhDpHhlLOGggbBoJgnNiIQqMzeEXMmAvqoOLtTlqQcqqQQCzVvJjiKJpjJJpVvRrlndwWGgRcCyYrDOMJAapPWwDsYyFfAaxXSzsMPpGEegwUAauxXWxxXhHuUqQMRrHNgXNnwkKWxIsDTtdSSsiBbqQIioatTAeqQmMPpbBFGgDLlCMmZAAxXaavVNnXgGxPpjRrJzRZPpoOmxdQqtTIiveEVGDdLixXImwWQzZOkKsSSHJjLluUeEgXfFvVxkKGhyqjJrhHSWwXRtTqQeEXxjtTqgGQJVnNGSsiHhIsSgGwznNJjZvVsSDUuWwhHDdYloOsSqbBHhaAhHconkKNvQqVOlTwAadDgyNcEfwWarRtTFoOfPpVYyeEHqQnznNZZzrdJNnjWIwWOowrRWEGglAdDnNKmMkUOouNnHPpWuUwhgyYGRHMqQRryiIzMmBbqlLodDAOoaoAaUuixFpPfXeEILlYSsyyYIiDdsSsgGpVvFfSZzzZyqQYyRrYfaQlLqhHxXaAambdxXAapbLPsSGgpLuaAREePDdtTnhvVUjdqkKHhQCOlZzIiUuLtTdEevVWYymCbBpPbeEBzZmMrBbAaRGYgGyWwVdIkKidgWSpAaPsfcCUuFwpNnyYmMOoMmPLjJlGDMUuLlJjSsmHZwWzhjOoJaATCcgGrRtpPQrRFmgUuoOnbPpMmBNGhqQNtThHnNmcdDGgyPptzYqqcOoBbopGghdbBQqzRrVaAvUJrNMmOclgGLConUvVpJiIjPFfctJjtTsWwnNoUmXOoxCciIyYMQqjnPpJjNJuIsSikUuAaKdDbBKkQqDdFvVVvYkeEpxXuUWGgwPSsAaFzZfZjThHttTlLKkKkRBbPprJzkaALsBbSpaAkKuUQqiyuUnNmMxrCcMVCcrRsjJSQSuJjhHUsyYAJYqQUhHTtuWwCcRMmrsdDAgGazxgGnXUfFuCcuBsSbDdykKTtBbuQqUoOUixCFpPGtTgwdJzdDqQZjuUlKkPpeEmMaKkdYRSQqjJrOREemUuMAPoOpDipDdtThHCcPKkjJjhHJAPbBZaAbBzCchHoOxXnBcQqGgOTtVvonNoOmaACcMbBJyPQqphiIAQqxKktTDdTtNnjJCDdleEhsSHoEeOfWwCRKkCogGgGiIikMmQqKhHdDEdDjJeEwWwWyYGgwsSjJFUGPnNBbWXxuKkUhHweEirRIiiIgGpikuUKVHhvIsSneIBSYyJzZjyYsZwWcKkCYgwWVSsyLPplaAYCcyJjPtTpBbfOomGFfgMBbIoXxzFgGfnMmuUgVvUuGKFfkRHKkopCcPOsuFjJfUFKYXBbzZiIIYyiYyejFKgGMsFOSsorRlLDGgDdHWwdwWDhdvaPQhHqyqGgQYppPPRSJjsrnsxXxhwWHPRQqeYyHhjTtGglIIiWwJCcjjSsUsoOYySwWHhHERrmMrRLlRnNfFZiIzbFTtAaaAYacChNCSsIQqLyYTxXnNJjvVtzZlsShqQQRrbBZPpYyECoOcHhuUHyYJjtGNnkxXcCEYEkKeVOovHKqQkhbBoNnEwWrgGusbRrBxbYcWwCcCyoZooOOoOzFrRCcKkWwbqEeHEehqQQQqBfOTtRrSAadNpvUuQqrLlRpfFyYuUoOxuUAiQydLpPKkUuZmbBiIInNZziyWwYMvVOkdDKogixaAmRrMEeFfMmHhqaACcvVFfZzWwioOjJsSCeEgwWojgGJiVvQfFlIsYySIPpRufNnoOKkHheEZzJjgZlLcCzGlpYpAaPyPLpPAHUCjJkKcUuukKhpPaoOFUIiijnNZzYyJKTmMtkwCcWhbBHLlVvHQqhvaATgGtEeVAHhhHxXakKYyrhsqOoFfQoxXabByYLlpfCcxXsSpezPpZtfgGFrNloeEAMoKkhVvXneZzEhCcnNEeehHEXEeRrKCckwmMdDPphqBZzMGgOozZOodDaAKvVkDioTtwWBNnbOeEQxXqUKnNszZmnNMVvokvJTtjVfFcccgGCOoCCVvzZVjiImMJXxspPSXZOozOofICiICjJcXxXxLfFnNTtQVvpPXxKkAaOlLEefKDdTtHhEenDzYowWSsdDWwSdDwyrmMuohHfFFAmORroRGgrUuZzUXVvHWwvVJQcjJocxIrkOoKRRrYPpyuwENnjJzQrXxRhHxXQsSwWwofFsSXSsxfFlUuwWrRfFFmMfNnBhHgIugGUaKTmmcCmMvNntvgFfyYkKbBMoFdDGgfbgGBTtMmOqQSsEeGgfFmutTVvUfFDdqkoOVqQvKPplLUuHhpPLYylQGgyYfFlLJNnjvVbSsBEeWlLOoYKkDWcCwKRrkJOojdtTCcBbSpPDhzZHqQJTweEWHhgGZzYvVyylSeESscCBNnVZzSstjxXJTCcWwPBbfFUUuQquVvqQwOoWpvPpjOomMFfJbsIvyYBZtmEnJPXsSUufFxpejTtBlLCcaAlxXLOobJDggGWtvVTwLWwQqgPpGxXlmMzYyBRrmMgGjJIiaaQqqQQaARrqvJQfFapPyYpPIiSsjJmMMmAbUubkKBCcBqvtTVTndDyYGekSVvGLjeyUuiOrRlOiIoXxEcqHhQCcCdDcnZzqQNeECwWMoOmJIijIkKigGeyYgdDGLjJCqhHQcoOCcACLMmnNMmlcwWOokKVvtPpoOTpfQuUqfFJjnNYyMkFXxnNpPfOoRlzZLrRvVJjJswWSjPpjBlxXAaLbhdDIoORTtrNaOoAbkKCcaASsNnjJjJrRaAJhaHhAgGfJjEvVNnAvVzAaZWGgGgwgGPpalLmuUcPpCqyVnNNnvhzZrRZwWzOpPuUHhLlTDdESsesSkUsSuKxXVvFbBZzMmhhixCcXIvVtTwVaAjwWwJjQXFfxPprKzRNtToOvrWwXxWEvvVFfVvpmMPYySZzsIGuUyMpLlnNPxXmfnNCEkKecmMFRhHrVvwWHhRzZnNqDXsSFmgcCcCmUuYyMpPqQOoWwWkKZLlzsuQqMmqAaQlLuUUhHfqQKgGkgBbvVOBtTboPpKkGGgCgGOovVeEnDdNcFBPpfLsSlqRrlLYfFyvwWaAPrRpfkbBKFosSaAOVomMfDUzHhZhSLlHKksShlLKkYyzZsmMmMQBheEnkwWqQkKfFKNsKGgkUuWLlaAMmwHhtZziITixXIaaAEPpeMKkKBsRrOnNoSbkmYybBbRrOoyYBmMIGgiAUpPPObBopnNehHEuSHbcCSoDdwsPpMmvVcPsSpKkPIipPpkKPpOomwWMHTthCOouAaUWwSArRawCcjtTJqQxOKkarRAlLOogwWDqQeGAagxIiAaMdwWDtgGTnoMDxXQsSvyYPyYJjrlLKkVDdUEeGuNnUVLSsNnfzZQQqqQnYyNFbBvTtVqQOoKkfdDFfcCFsSpPDEednSbBQfFzetBbTXxxPpXjJlbtTLlSsdktTKFfaVTjJTRrtBTGgVvKAOMGZZzzZPpEALlaeJkKZDdzLInNilmjJqOQsSqqOqQonNXXWvVwxKkxmMYyRrstTLfyYFOoYpPySAacCntTNnwWnNVvNMsLlDCcdHrRhRfFrVvDhkKokKZMmCczpPhHqQLdUuDsrRNxlLXLlVqhHQrZzXzvVZxRzeEuUGLlcCXxeEPXxfFpWqQwsSkwTtWEOosSeCFfuUdAaDYnNTtycwWDdOvVFfUuoLfmMvVFkcCrRKwWlksoOaAHhSTvVteZCczZzNsSLTtljJouHhUtTIiZHhVvZnHhNFfHBbsSNhQqmOoMzZQOoqHhHnrRzZwlLdDYEBzZzLPplmMgGsSgGpPJjZUuIDjJdlvaVgGHFKkDqHvQqVkKeEhGupPpPmMOkKylGghHLYojJBbRtTeEmMEeWpPeEwMqUdZcCzvZsSzFhgGAaRTtOoftTFlLrHfFfRzCcxXZDdrpPBbRnmJgKkGjRrbBbukKUTaAfFrjlLJRBRrbtFEfFVvRrxXeJjuYykeEOojkMmCEiLlbBIsSDdTRrWwtcCsSPJjZzaAdDpcWwnNCGgXFHAahKkwWUufvYDSsIyDdbBwEeWVvgMJjmGWwYUFQuUHhreELleExXRqLdlMvVmLijhHgGMmnNTtDHhPpiIHhMmFfEevzZVpPoOLxXlvLlzkKiImeEKkpPMCcFuUWrRpPsSwfIiHIsPIwWrLJjxWwZhHeLlEHDduUnBfFbHRNYynLlTrvVRcCiIyVvUupPCWwvUuNnKeEkbrRJqrRQXuUvezZEfFVqQgMCEbBAaCcTCcsPpcGBbgDdxXSsChfxXFJdDjdUuDxsSeFfYFIifIiyYynNWwdDQqiEeIxXpPreEmMRvcQqCVKkaAjNndDXIixiIJPppPNnGJAgfFNnGaJYyjjFfgsSMmGggUlxXgGJjBQHqvVWwnNQKkjJrRhjCcCcuUJqFpPpPLlsSzZZzUuTPptLlgiOOlLXqQMmSicAafjJFWwCTtnNUbdDwWBxXoOTWwIiXxtucCrRbbBQZzuQkrRKTtqDdvVnNUGgqBuhHUuUpVvzgGxbBCXxsxXnpPGgNJJjmPppPhSsHhXmMxUuqQHhSsEeAZFfzaHpZAaNheNnJiXAaxhHFfDdKWiIFflLWgGLmMZSszlwkLLgGZzoOBbiIDuEejRrpxXQqPItTaIioEegGOAIivYyGgVqxXQjZxXaARgGrlLMNnIimzJcCRVuXTtOomBXxbMxYyTtxXJdDJjVvpGgyYhCcHzjJNnDUDWAaGgrRIaRjJdDiGEezlSsuULxXZNrRAakHhKLlpcCKIWwQqizZkErRVvaKkUuRrAHUjJuVYyyrTmhHFfYyMaevVtYyFfTlJQaAqKkLljLdQqmMDEAcCwbBWiIpCcCcPqQtQqOoRrROsSUuYyfzZURrNwWnuZrZzRuUwWDdegFjXzZxJMmDuUBbaFlRrkKJfFjEedDXxUueGXxTtmMOocEesSCAQqiXdFfDEempbBgGaANIitnNlLcGfReErFKtTlTGgJrRjIojnvVNOEafFIVvGtTqQgigGnwWynYyOdgGDqQTHWwhtjrRJzZLlgGZIrRQTtqkiIKiAZzazIydPfrwWkKuUOowWRQLAalfFeEcCnNftTpPeoOEJjzZrRBbRaZGgKQqYkKGgMmpmMtmTttMmTMTfGyYvVSsRzZIirOogDdRIiBuzZUgGfFyYIiWTtmMIivVYydDLlwZaALlzhzzHWwqNnSsFfQgaAAKkxZzrhQqHRuvRQqrVGYygeEUUuYILlipPyYZaAzvVDydDYNnavVAeSssSdCcDdDEZwWvVFfibdDBeELFWwuUItTifiIHcCGgaZhHBCcbpPDdKkWwPJuUjpEecqxZaOqQLlqQugGUkxUtTRlLruiZzImiIMfFUusaASsSnNAaAeEsStTaXWZznNwTtSPTkiRQqdDOBboAarWwvVIkKyYKkYycCcaAwWCPpKVvtuUrBbeESNnsYSKRrkgGsOEeokKIigDdbBcBbJjNnCwhHWYyslZzNnRrmMOoLLlnAOoaNvbBVPEefFcCoOBbKpPYykpiMCWnNlLEezHMmhaALLUuwWlZzAkKKCBbCczQqQdYyDJKRrkjaAqXemMwWKkkKcClTCQUuetTEqeYyEKkFIiSsfhHTXdUuNnDyYeMmltMmQqxrcCOzwWZpPooRrjoOJQnNkKQqnrVvDdeEzjJZGIiOogRrpNTtmecCEMnlATrRovCcJHmMMhHrRlwWLVvxXfPpFDtnNToFEefTtfuUFgXxSXxDdJjvevVEXTCctxQqQbBCcqWVvkIiIivVjAagGZzXxcCfFeEeEOoJNQqRCcrFfjJOyYWwhUiIuHdDtTMeEPpbBmTUusHPpdDhlLwWqQcCcpxXPcydDoOaAfFYxXzZzlLvVRrxXORraVQqvHhGiIgvIhHidXqQwEewWWgYZzyhBBdFfRrTFftNcmIiMCiIZzQriCtTIicRMAOoLlamSsQtTbFfKkzZOoxkEenNVvQlLqNnAEelLXxFbBfIpPigoOGaCYyLlGgdLHhlDKOokBbcfQqWOomMwQqeERrlLFxXlXxaAvBbsStTTtMmVaVFfvOCctToDdDbbBPLKkrROolWwwlLFBbfkQqsStTFuUAapPEJjeYyfFfmkKQKkAamMqOPpobiICtaATSsvVsSbBLljJIfMmRrFeSsclJjLPpNTrRtcCnHhZAaMwWmzIiyPpHKkhLlumMUYeRrcUuPPlJjLpcjJCpCEuUIfWwffJwbBYyWjstWwALUuvVlImMikjJKaTkKzZKJmIipPmMulLUDdMPDPIipdIipcKkVveBbcCEzQqZOkMmKoRrfrRBIhdDHtTMmIhKpPMmkWwRLlrWwewZzqQgGwYeEUuoOyDdMmNnwWuUWUxXuPpzZoBpPbvVpTPmMpGgtxHBbPpSIyYizZPFfpshXfqQcCFuUYJjyRrcCQqbxXJjcRZKzZLMmcCwmMMmWllSsLnNNZznNngGHhOcLlBbCtTTCctyfFUNnAWwkKbJjBaWsSwKkCbwWlOoZzHhLBwWJjDRryYTrRYytTteETgGNYynzZZzcbBxjJUuEZzNMmntaATwWewWXxnwAagNnGMmWdzCRrcDXxTtEehHdzSqQMmUMmufWRrwFmMBneEuReFfEMYgGymQqLlaAKkrYyLBbiIKHhJlLSEeFfQqsSCIijyYJnrRygCcGlLTtkKYUuNndDcCAXxYyadDsjJKCckSoTdDtqbBsSbZzDdDdBfFQbBOYyoGggrElLezZEYyesruUGvVoOjpPJIFfhHqteepQqJjPxJXxwWGghHjaUfwWFvLlVtpPfAaFIiTYyuVYyiKkwAaYyoyyVvYxXCeEBsSgQqaAGdDEebcYwUuWnNVvMmjJzZwWAZzjJCfLDsSeudDUERNaAhHhHmqQMCkKcxuUsSCcXgMYycCpPmtLlXxnNTcCavPpVZDmMtTdXxKkwWTtZeEpPjwWJvVSPpszEecCzmMJjJjAcklhHLKmiaAZAanNjiEoOeINnNHiIRbBrcChnJXUuYydDFmMfvVMTtLlzgGZmYyQgFfvagGAVlLyYbBIZzkKiIiGmMCcwWgOoWTTttmGgMGgQqWwRrPpwInxXRrNrEeRVPXuUxpQHhjJPpbbBBswWGDdgZLlzQRrqmMSQMmqVvqvBWWwkBbKbBwyYWVvdDJtTjuUWwZOXsSmMLlxMmHhEeJOouxuUAaMmUDdupPIiPpAaPZzpJsSfFjIiAaSsNCcnMmpPdRrDdDAaXzZguMuUmUGmMEeSYyxmMXsayYAkiIKdfOopPnNKkcCbDqQEedYygGBeEhwWWwUuFfHxIvViFfXjJUuyYOBblrRyYKkNnLzZUBbcCcPpCwqQNWwnvTtVSiZSsoOKkzJJjTtzZHlLhEddVvtTCSscDjVxXvJhHmFfMvcCVQkKwTtWSNnsOogGCcWwJjqYYyzZJbcCsSBjpiIPdDZAaguUraeqQugFqQiIdKEeWwLlkkxXhHsPbBpSMGgmvVrtTcCRQIiqYVvfFypPQqIBbMmHbBDbBdhivulLcLlCRrUVZMmzVvQqCuUQqqQcKktTvVIiwWKQhHBbfPOoLlpnNkhHKsFpPUaArfFRrRVvGrRqQtRrTgyYbOopPBwWXxXgwWGxcBbFfMmCZzuBKkbKQqfFoaejJEREiIerqMmQsSAKIikykdDKYTtgKkGwWffUukSsgGKFVSsIivdDWwVnNgGuUWwSSfFpPLlAaHhtBbSMmcmMCsRrwWdDTkKYyqeEwWdDMVvlLLlmQbOvVoBsyYSkvRrVVvyrRoiIOCcYynNkXxKAtTstRrdDTSYyCcCifnSsPpKXjJPpxiIcCkJjNpqQPrvVRZzRrUuAafaAFHyYdDMmhsSlLkKZzHuUyYAahHpUuTtLlxXPdTnNWwtDPGgpJjdIiDrRgGlLaSsAnidDIfHdDcChFjNnJNSQqsRrEeRQqrsMmShTtUuHhWwHhAfWwXAhHaxnNJjlfFcCXgGeEQqxLmMFhHfvVgGziMoXxOmIuUfvmMHhVLlwWqqkKQQuUuqQYyUFcSsCZNnFYOhHpPLlgBbGEeoduUnvVNJjZzwWnNEPpnzZrRjwWJaAEeHhnNNdDHhFbBfeLllLHynNZzLrQqRlXxYGgrXxRkZzKCyaAWyYwYqQcReERrgRHhrVvwWGVdDodDWwOvvVhtTlnNsSNhTtZzDdEetCGgMmfFcTYCOokKyAaMmYsSeNnyYEpPpPcRpPaAryGgBbZzNndWfFwDbBBAabEeXDbBdxaAVvMMmmWwuUbBDUujJdYsSKkyosSiICrqQJjrRmXRrxMGgpPKzZXQqxbBklLlLjmCczZndDNfFQqMyYWwjJRreVfCFfcFviIteENQqSsnyYecCXxKHhkEToOoTtzTtxXZOzsSeEacCHhLlAQMmZzqcWwqQCBbtTdaANnkKgGiIDJtTHFfAaDdlLlLFfRrpPcqQqQJfFjkKoDdORcCrhAaHtTCaTtDdzZAOlLIyYOEeGDdOogvNnVGnNgmVvkKYyZeSpPsEbBxMmuUZzgOuUaZRrsSCczVQqAavAetTEQgGvVBbqoIgGiGGgGMmXxCcggGIivVXgfFZzGlVvOoLwhHVoOvHObBhHhdAarwWRAkKnNaDUueERrlLOoHyFRrhHEeWwfYXxsIiYylLoOJjSDQqGghHdtTQeYyVwWbBvkKZgeEGzpVvPwhHWEqDlLNnrRVvdPpMmDddtIiTDxXnYoBbOyNfFIiOoXxUuVvVvSGDdgsEeVvVtGgTUXxuvXNnkKdDxmorROvuLlndrRDlYPpyyYlLgiIGmzGgZMLgGyYbBWwYyJjCcVZzWexXzZGgfFMYyQqfkKlLFVcLlCNnvOMmXxQfFQqkNcCMmLtTlrRTbIiBpdDPtOoBcCYyVvcfFCxXbxqQXzZPsYyEeMmsSSJjernNRlnNLgtTGLlUuyAaVvRrMGgzZmKrRrBbcCwWRyWwoOYnoOMrRmEetEeMJjpPmkquUIiQuzZkNnKSMaAmsUKkYykKRroOmMKgxXMgGmoOGvVzxwWXaAwWIzaAZdGguUUunNHhHLkKzQqZlhWwnNDJZWQqkKFqQfwzjJFfvVqQJMmjjHhahHAUuCcEyYeXxVvPmMEepGgHhdDqZzZzQHhcyYCTzZtGgIinyMmYJwWEQqehHjNzZsqQiIMMmmnLlNMAtTaLlluULrRyYLlIhzZHimKkqQYdgGuUDynNOonEqQeacGgAakKFEefXxCAuUWwNSBbcCyUuLXxwWlqQYwtTyYnVvNWNnktaATiIVnNiIvwWPlLYywWIiAaKkZzsSzyYZaAEecQesSEqCppLlPlLmMrcjCcJtTuUhyYHpPzYbWwJjBxXWnwWNMmSsYytTyYvVwEYyeWwxXzVWwXxvpPqIyYiQZoOyYiHhIyyYZMmxPLlpxXhHkSsVFkmMKfvGfFBbQqbBaAdDaARrdVvDPpgzDdZqQMCeoOEyYVNnvcgGgGcCLlvHDdhvYyVjJVWwuUTXxKkgGpPlLXGgSsfLldWwDCcTtRrFqQRrxuRrUGkGgKgdDkKLWwltXFfUuaAxgtrRTGCMmXxEeBbXxAiIaRrtTxXMwWRraAmeoOLlFRrjJyPpSSsssfdJjDpPFMmPpYUurRZGHhgzlLgGeEDmMdOtjJjJPpTuUoWwAgGarRGgOiIvCccCVuUoLldfsSFfjnNMqQmJEwOoWexXKkDdFEeDZzyGVvgCcuEezZwiIWxXfFwyYWpbPpWwBghHgGGzyaAYZsSFfemMwWEQqqmMQOnpnfFNfFPgGNJtTWwjdTtGzZJjgDoYyhMmHwzXxxXJjlNnLZPZzYyQqlLksSwWoOPpvIiVKlLdCUucDpWKknyQqpPfFfFsPpbLlBOoSKkjJrNnwWcChHytwWLuUlTsSYUuuUtTQPFfpqsSYylpPLiICcTtRyYMwWmnNwDdWeEhANQqxXnkKKkEdcCzZDaAeKkwlLWUgGbBuVvUSsuaeEMjJmoOoDdKkoObvYybBSsGeEgVNnBdpPNIinNnWwMsSmeEpNnqQPUeExDdfFwnNLltTWXvVEtTFfOoBbeabBARBbrcCSsiIuTtUuThGghHEakKAtTVlrRLgPpGvXxTbUutTBuUSstbgtTGpPvVBhUuYyhrRHHpaAPeBSsqwNneEbBWQbBlLuUuArRRmMraUbcYytjJmMTfFCyYHTiIZbBztSszZtDWwSsdDjJoOmMTtigGxHhLlcbaAJjBCXvSXxsSsdDVxgwnNfFWOoGXbByZzYXxf \ No newline at end of file diff --git a/src/tasks/day05.rs b/src/tasks/day05.rs index bc4116e..55fdae0 100644 --- a/src/tasks/day05.rs +++ b/src/tasks/day05.rs @@ -2,7 +2,7 @@ use utils; pub fn task1() { let mut input = utils::read_file("input/day05.txt"); - input = reduce(input); + input = reduce(input.as_str()); println!("resulting polymer: {}", input); //11591 too high println!("RESULT: {}", input.len()); @@ -16,36 +16,47 @@ pub fn task2() { ( c, reduce( - input + &input .chars() .filter(|ch| ch.to_lowercase().next().unwrap() != c) - .collect(), - ), + .collect::(), + ).len(), ) - }).max_by_key(|it| it.1.len()) + }).min_by_key(|it| it.1) .unwrap(); - println!("Best: {} (length {})", best.0, best.1.len()); // 11184 too high + println!("Best: {} (length {})", best.0, best.1); // 11184 too high, 4328 too low } -fn reduce(mut input: String) -> String { - let mut go_on = true; - while go_on { - go_on = false; - let mut index = 0; - while index < input.len() - 1 { - let a = input.chars().nth(index).unwrap(); - let b = input.chars().nth(index + 1).unwrap(); - if a.is_lowercase() && b.is_uppercase() && a == b.to_lowercase().next().unwrap() - || b.is_lowercase() && a.is_uppercase() && b == a.to_lowercase().next().unwrap() - { - // println!("{} and {} match", a, b); - input.remove(index); - input.remove(index); - go_on = true; - } - index += 1; - } - } +fn reduce(input: &str) -> String { input + .chars() + .fold(Vec::::new(), |mut stack, c| { + let last: Option; + { + if let Some(c) = stack.last() { + last = Some(*c) + } else { + last = None + } + } + + if let Some(last) = last { + if c.is_lowercase() + && last.is_uppercase() + && c == last.to_lowercase().next().unwrap() + || last.is_lowercase() + && c.is_uppercase() + && last == c.to_lowercase().next().unwrap() + { + stack.pop(); + } else { + stack.push(c); + } + } else { + stack.push(c); + } + stack + }).iter() + .collect() }