2025-2026 赛季 游记 && 退役记

私密版 Day -70 CSP-S 初赛 2025/9/20 进场的时候在门口堵了 20 分钟。今年好像比较简单,但怎么 ccf 码风这么好看了。 Day -33 2025/10/27 怎么已经有三个人停课了,这么急。 不知道为什么今天状态很差,whk 也不想学,oi 也不敢停课。 Day -30 2025/10/30 找班主任请假在机房待了一上午,对着 noi 大纲复健板子。顺便把没打完的游戏打了。 先天 ub 圣体,前有关同步后混用 read() 和 cin,后有动态开点线段树用 std::vector 的 emplace_back() 之后迭代器失效。很害怕考场写 ub。 我怎么下午还要去体测? 怎么体测的地方跳远垫子这么滑? 诶我怎么腿直接亲地上了? rp-- 然后成功一瘸一拐的去了日照。 Day -29 2025/10/31 去日照的高速好像已经走了五六年了,甚至那几个隧道和大桥名字都快背过了。 去试机,刚进机房就发现有个电脑蓝屏了,还在想谁这么倒霉。结果过去一看是我电脑。然后就被安排到了对面备用机器。 本机 1s 4×1084\times 10^84×108 次取模,还没有虚拟机,那我 ub 怎么办。 Day -28 CSP-S 复赛 2025/11/01 CSP 比赛日。做梦好像梦到四个文件全没加文件读写,吓醒了。7 点多直接去吃早饭,然后对着电脑看到 11 点。 解压密码好像是 人杰地灵,膜 Ren5Jie4Di4Ling5%。 开 T1,一看诶这不是个 dp 吗?开写!诶?我 dp 怎么是 Θ(n3log⁡n)\Theta(n^3\log{n})Θ(n3logn) 的。哦是不是可以优化。并不是。 哦观察样例发现好像最多的一列一定选 n2\dfrac{n}{2}2n​?这玩意显然不对啊。哦还真不对。 算了去看 T2。上了个厕所然后一眼会了 40pts 暴力加边然后 kruskal,飞速打完。坏了 c≠0c\neq 0c=0 咋做,不懂。直到考完也没想到那玩意是用来 Θ(2k)\Theta(2^k)Θ(2k) 的。 考完发现当时被降智了,本来对于一个被选的乡村 ccc,直接加 nnn 条边 c↔e,e∈{1,…,n}c\leftrightarrow e, e\in\{1,\dots, n\}c↔e,e∈{1,…,n} 即可。但是为啥我考场对节点两两连边,加了 n(n+1)2\dfrac{n(n+1)}{2}2n(n+1)​ 条边啊????? 读了一遍 T3 发现没看懂,语言学还是太厉害了!直接去 T4,写了个 8 分跑路。 哦 T3 是不是就是 AC 自动机上随便搞点东西,但我已经不会 acam 了,有空现推,先把暴力哈希写了。 坏了哈希写了 3k 还没过,红温。 好像已经 5:30 多了,我要去推 T1。 又去读了一遍题,突然发现是不是直接选每个最大的,如果最终有一列超过 n2\dfrac{n}{2}2n​ 就去调整对答案贡献少的人的选择,也许是对的? 此时 5:50 多,感觉要写至少 3k 啊,不敢写了,写了如下注释遂跑路: 1 2 // maybe greedy is right? choose the largest col for all, change the illegal // wrong? 然后就开始想 T2 的 c≠0c\neq 0c=0,希望对正解有启发意义。结果啥也没想出来。 最后 [60,70]+40+[0,?]+8=[108,118]\left[60,70\right]+40+\left[0,?\right]+8=\left[108,118\right][60,70]+40+[0,?]+8=[108,118] 遗憾离场。 我是不是要停课了。 Day -27 2025/11/02 北斗已经有 SD 代码了,一看为啥 T1 挂 10pts,T2 还 MLE。 为啥我感觉 T1 不简单于编辑字符串啊。为啥说这玩意比廊桥分配简单。 这下真要停课了。 Day -26 2025/11/03 凌晨 00:50。 躺床上没睡着想 T2,然后突然发现我好像会了。梦中惊坐起,去问 MrPython 做法,发现差不多对了。就在床上深度思考更睡不着了。 Day -23 停课 2025/11/06 停课。 Day -19 ~ Day -5 集训 2025/11/10 ~ 2025/11/24 云斗集训,今年感觉还挺好的。 打了前四场模拟赛,发现我怎么好多不会的。开始自己做题。 Day -4 ~ Day -2 2025/11/25 ~ 2025/11/27 在机房打板子。机房甲流爆发,全天和 cpp xixisuper 苟在讨论室戴口罩。吓人。 Day -1 2025/11/28 出发去淄博,下午到北京路亚朵,在酒店启动打板子模式。打了 tarjan*2+hash*2+sgt*2,顺便把各种 log 数据结构和 lca 打了一遍。 楼下吃的 熙临居 博山菜,感觉很好吃啊。 去试机发现还是去年的同一个机房,windows 和虚拟机都有装好插件的 vscode,但是不知道为啥 launch.json 死活配不对,而且还莫名其妙死机一分钟,决定还是用 devcpp 写代码。 取模 1s 5.5e8。 晚上回到房间开始用 devcpp 随机写东西,结果发现完全不适应,自动补全完全没有,发现 xixisuper 有???这还有版本差异。 在 22:20 成功清空任务列表,十点半多一点睡觉。 Day 0 NOIP 2025/11/29 今年好像没有什么太大的反应了,面对距离退役还有 5 个多小时的事实已经释然了。心态从 06:50 到 12:00 左右都一直非常平静。 从酒店一路堵到山理工,罪魁祸首是淄博实验。看人家学校校园还大,门还多,周六 8 点才到校,某学校学学人家。 08:07 进场,先把缺省源和目录建好,然后就发压缩包密码了。 开 T1,读一遍题发现这不是显然吗?于是乎马上码代码,大概 08:15-20 左右写完,思路大概是尽量多的选 x+yx+yx+y 最大的,如果实在选不了了就按 xxx 排序去选 xxx 小的,对于一个 xxx 检查撤销上一步 x+yx+yx+y 那个对的选择是否不劣。大样例 6 没过,输出 81 比答案少 2。不懂为什么,尝试换了个思路写了个暴力错的更离谱了。 然后整理了一下发现前半部分选 x+yx+yx+y 最大的肯定是对的,问题是后面。直接去按 xxx 从小到大排序,看如果把一部分 x+yx+yx+y 的选择换成一个 xxx 前缀是否会更优即可。 从原来代码删删改改,使用 res, cnt, cntdiff, last 等意义不明的整型变量。大样例过了,开 T2。 瞪了一眼觉得仍然是简单题啊,手模样例感觉就是总数减除以二之后产生的逆序对数量。上个厕所冷静一下然后 5min 简单实现发现错完了。决定打暴力,直接 Θ(2n×nm)\Theta(2^n\times nm)Θ(2n×nm),20pts 到手。开始思考特殊性质,对 A 性质闪过了一个答案为 2n2^n2n,但是因为不会证并且没大样例放弃了。 开写 T2 之前看了 T3,一直没想到什么思路。写完 T2 暴力想了两个贪心策略但是一眼假,暴力实现难度略高。看 T4 的简单题意感觉暴力可做。 然后就不知道怎么打出来了忘了是 Θ(n3log⁡n)\Theta(n^3\log n)Θ(n3logn) 还是 Θ(n2log⁡n)\Theta(n^2\log n)Θ(n2logn) 复杂度的暴力了,总之期望得分 5pts。甚至取模都没想到是 unsigned long long 直接用的 __int128。 回到 T2,突然发现有贡献当且仅当两个 1 合并起来比 2 要小,然后就不会做了。 最后 20-30min 比较辗转反侧,再多打一个 T3 暴力显然来不及,想任何一个题正解也想不完。在 T4 的文件末尾写下了: 1 // AFOed on 20251129 13:00 出场。 下楼看见 xixisuper,直接问 T2 做出来了吗,T3 做出来了吗,T4 做出来了吗。他一脸懵逼说不会啊,不会啊,不会啊。于是去机房群里激情开喷。 山理工路上碰到 cpp,问她 T2 会做吗,得到了一样的答案。群里伪人和 MrPython 自称全都不会。大家全都开始在群里激情开喷。 但是某文化课了两个周的哥们会???直接场切紫题?折磨牛。 结果在群里对 T1 大家思路全都不一样。对 T2 发现少拿 4pts。对 T4 发现暴力打丑了。自认为 T1 思路很对。 洛谷是黄黑黑黑?黄嘿嘿嘿。 下午直接回家,想测洛谷的 T1 民间数据。此时看到群里发了一个大样例全过洛谷得 80pts 的截图。 打了一会 T1 打不动了,大脑停止工作。但是发现我考场代码好像按 x+yx+yx+y 排序的时候没有考虑有多组 x+yx+yx+y 相同处理 xxx 的情况。这下要随机挂分了。 算了一下期望 100+20+0+5=125100+20+0+5=125100+20+0+5=125,就看 T1 挂不挂了。 AFO 还是很平静的。甚至以为第二天就要上学了,过单休过习惯了。我还是舍不得我的 oi 啊。

2025/9/20
articleCard.readMore

板子库

8f6e41efd10e38201e5f3cb1134eb7d263cc668d7c4b8ebb6fbf2e0a5dc26ce89592486ef0b6ca16537d7e68f08822ceb9b539394d5295d84ff980c1895ced35e3c2c8174feb12b185044540d18c18b9104907cdb003b9d2ab9dd0abd558d86d6e8cff3dc7c1dbf1b177f8fa8b1dca3e40b9135f9ba6aa6b738faff1ce5df742c21707789890e537d90f7b7ad0b6c91f67f4f4c70009c9290b9612799399dbc8282498a8ec3c1134bfd4ab4a1808bef9f7d18f35e1074199c167bb68232790c62eb3e5a0043eadfe905a066ab56c44a591d0934dd349265316dac64020f536fb876e34fd9c935ab9e548e9538cfe1ab2d103d64b475bd8b1edb01722965e6fec6b9bb028e507f1f25403ec6343c4a10fad6eb76c21bf4067aadc77dae85aec7055d9378aab337c518707ba76771178587bbc8ca6d14ce4197a3f14741e9a1fa0fccbb3431a6a0d355091ddb512cda144f2adbed95f60e2280c2b236ebf16e47bb57557d7ec187ada7f68c90769cfc02e4d396c5870d54c59174d0713814756c913a27d9e15c8bb7bf5550b9af9474f278aab82e40bc4b43df9aa6b6ac563a377bd59483153cf9ef1fb9cd07acce1b15088abf3ca78d8954c7e94f19f2382a704bcc5c7d5136a30732d0f4e69ded3cb8320f930698027721710e32b7ccd108ec3fa1d7d79a58e06404417d9852ba419a11fe69b38b020883c3e3f11eaacb3b1db707bda63c94e73d592ec049e5b583a372569888d7aa58c039fe69ef2b5959a0ace9a5279a1315b693be930186ff9e6ef6f9a48619af620087204aa19b4f9aa833155da721fac24304749b908da67769dd9201d195e549902f8abc42b358ee692d9dda2328d27c949c022751633abb4a427a833c4755d62ac63c085cbc91aff00776978b5a1c37a931f9b3d87be0e2c1585f1973b8f087b216ac7cdc99b86325c811ffd2713b4372f87dd3a76665d08af9ee5355666adfe0cda573d5a0ade2caff2679fd2ca4611e4cdfbea190972051944b64e010de5c30cd534febaaab91be16076101641da2feac0204bda65cae0fd87b60a79d162e9f3ef2fa967d2cd658cf87a95804849201930636be0c97fc1b01d3fbfa4dccb5f6e3d1c0611c1953960a4324277c9fb6b8f60aa86d9157fb9f75517a913f3950175a1514c5a8e2403a26c3b4e15a9c406435018031b96bb3f1e53c27565866afdd30333b16085ab13fe1d4216b8cbf78773c80311311befd4cfb66ab95a1d0f901fd4645ab0699170dbc84ca21dbd87d8f3c9c930d0e4027558a09311bd355b1f47a02ad13812fb7ec997f93fc94d394d2ad5af7d73ce2a69ba5e89e5f174179d7950c8b1cd7e502b660191cef670a2d997c81d8696374407ce3e7dfd8278ece9f13b416d9959cb3e11ee59a73fd42baf03affb9bae13c6a4e1482be7d614f77a8ae50ce3e93a5ae3cf3e7bb49af94399f0da8fb0bd112a2cf5942994a9f2973f88b9c5b6369b53d5441da5b301ac62fe72d5dee9d905bfbfca33d5a5e058c60d21ea5836649e60e843990aae18e35e48e06f4bebe1f5310835bf2b3538135b7886df6a04c9779d2839b684b0d10f7dbc97b556164cb282b1a87c540e5d6b466f19b07f4616cad761b0b45a3a2391da7ca5ae9d23d0bf99e61cd00de17e1dd252b38cb0d395423dd0e1eec827f3cf784ebf1bdfbe7c1ad905060513aabbef024cb95875495f764c60f5c5860c26e80c65ad6d48f0de8e2be66cc92b19c2c326e195c3bc1b30b4a87aa273039e208ee4f669352311e0635d8c894bec71603961e7a38900785707508c47a3e4733dda3bb7bb1336c4cf0a57a5fe479801fb0a218c260170585731c2237c586d0ca5ee17590c5aefb02ffd2885f93c8316d077a5f7b10b2e34886c9dd3b2e613aff81a0d0809bb419249ee7136ca82d86b938847a0e64942ffcec061ef75ef6e39e2d3cc101d76522e7559c3de95fbc363a4a16041d96bc267b6848b88a46426fe40e6e4a195d9b672ceaeb7bc919c8b7ab2856830e56fbefccf5f8a22b3833b3a73c70e4873d86a50562346b81355b935a80b466f1102cd12ec2e5ad0356168efa01ded72043b305fc5b7a54561dab3d5af5b597b0bacac1fedb64b05cb7a5ebe1c900414acf623f693b13497e05805d746999e6449fcb735ea1ff868602f964970b733a65aa82388b2f90958f0ea84c9eb15394a3e7a7c953364080c3f913af8c8de38e0d7709a4467977c2e4e98d57c24be4284317969d36df4401c0adf44257bc453a6f83f2e318081d758234d124ca6dd3a8f3058aa166fb8d2a7557b5669c34381a28ac779094e8ef137ce94bb403fe5b6df2f47093a91ac9f998a4ab8251a78f86c3dd6137b5c523c7c57a3fcad8b3e302f782dc5ac426dbf6c0d5c4981ecb1730cbb1da5072103b5ff37f0f9589bb07963fd68c629a8f4769cac81bfa2e7c16e35077c630d0d0be6ea6749a7d9c1e56b0a36395d6f40bb68132bdc3d950cfcefe995cf5e26f73b06a5135a77c68a059cfb914e671278134a6ee20e30cd12a343f6f04fac9d48a5fcd7e69861ecbd31c8cb66759f850ad0d2d677d8a5eeb159ab9dbf9a94112e07a4f0227fb2454c96b4b741b925a60968ec86024d79905b8b20b15f989e19277950078f69ff75eb95f5047bfff53df53faf021655e939d912b382e9272fff5434bb4e9c0cbdf57f2d72a003ba31bf27b30be967ea7f34b8aff9b5e890483e3c3599d7bc121f9de724c30eb42cdb0fcbaca47c6fafc16d5d6374e3cd60b722100febd54b25134a75cb501815ec4aff4922b6d4dcbcb531dd0fb5f19bddac50b9fc39d029f859e1b74479cf1c94d23a8ae10ab23b72adafb922fd156ff4fd3912bf6f2b86399be0fde2bc83b1c930935569fa55972bd4cd1c3be98a3e76869d816ed3da9211f97f5832735bf85487b1916061a3505d6dbb48921f5f0da2d22ee69f76365a75b6954791ef2a196eba8635390898475fd94a6a2ebf621c781de47a80643efabf92806e957619abdd4dc98ae1adbab2f065b8447d37f7e75bc9041160923d94c5dadefd4221d2bfa012edc880f924538df3619ebe5a949a7ae97545b748773dbd49513adba3dbd1291960ed1732f9a6dc88f1e050d58265bf834d67ef8c9beecf4bab1c8eb5e567a313fd73fea966a568d425460f6eba2ad6add2af736918cff67eb5757ebe26e2b3690215653468487f0f7bff26a418fb8ce3fa366cd25a5de157076d575a67fb07df9ebc4fafa9cb6662715be61a3c1bfdbb84e90c8d3a09748f7c7fcdb4c478a57294ebe62d0f9813c75c6992476ff3bcc7a231f6912b14b862589a3f3b2224dbfec78982555c0d2bc9a7b142844a0fe54d99eada083b54dae7df01bf3f02710873958f424563d5c6d21c61f59fda2012400cc0babd12a6f88bdaef632385bf2b930125cd91875bd45c6614422000997b6d980d0f6b9582311be8e0a487f5249f2a9fd4bef2511195e6c11915b3565007766d6a9132c61ea9bf6c05ea61dd3024c2c9a7eed7143ab8e648f2688bd5e4b6f27a6bb9f68fe052f972728b8e171358a1b69e983c724834281def930a404fc0d1bca3ee11ab2b670b022940bbb75c6a7de24e4b17f899c81b549b5c3884a4f1d7a0514fb65bcc040e995aa2c6006480ae5bf1166c36d6caf52db3f695bc515fc0db4be7d626b2990d0b8e18d8a72b1acdc0ca9ed9195d51b42e3d8b496128675956b3b0feca6ea5a4c43fe123cf440c270f34ad1f264ad4f1ebc176f29e5f29dcca33d34a919117e6955e66b66b1020f998890d449e7499ea0e9991a842482b10507d2a1cce45e2bc93fc0707df6cd805fcf70d849c550f86d29b01170a5901615922b775d26e8b0cba0b793ab12b09206e766513818d8602b305a003148a8a822cfd634b9b55d087425d9e4f4e1bbfd177e13f342c8718e3cdb22187cd6ee46d9ab539a93370fadf19121e2735551a02abc33509aa489c53f9333db78429fcecdcc32bd572f63742821df2eea0b16c9362c492840772887a1a950dd21b3d8b60255a3177d21e1de21d306bb7bc70132bdbc73e1e0efc62ecb259e23edfc4664093e8dcfcec26141c859934311f432b8a187ec810b3bf2fc2469799693fece16db9c40018f7f7c7d1a95ceb72cddad9bbe0e2b4a04170aee4f9f315c41c414429d0290da9f90686374ba5fca22907c8e16f99652c8b874d412f041f2ff9e04b92e0ff7be28bb11c009e1ca02f63f51e23cd89eef1236b80621b5db324f4a2754d2aba096fe29c2b9e8e4f73c4ec3ed404e1b5fcbd853ca71001ebc5aa9e0749860751bddc797fc3d109fc6359554e6898718827a20eb5deaa9b062bccc5bac230ed5b74b77aac59c631ed07844cadd072d96633d6f4e3bbb4d8e70b899a3d35c338b6bdb346efef61713676a0bdff750e0c5bc146f299ddcd87733fdd4eb908ce860caf48e248c14cbbfa794b5ba17da4752e998413a8be841d43e8ae220fb5dade9e6626a13a4a0f51f8d778acc114b34391f76327f776bc159b8d9ee64c85c651aa0d5f1bdc7bb9d5fc90cc18b5435d950a0ab75cc7f292a1dc903683de2d7bf11b264212bf94270444374f29171685c6c8bf0c4471ac922268b046c7f44c44627313c95035dbcd334ec995e0528b4fe82b620e276c3636fc2ac5da9b78b8cea182a68154ce4cbfa688d27a5cb69b854b800ba69d779c5d82599172533f8d79f028948e7e55f88618cdd38ce56a674e3468c7270c8615f2b85de2e2fb250f7883e78c799d06e5c36d352d6ca4608dbf37dcf469d41933b2883c43e21b96838d37b9634a7cba9540a7a72801a59fb009a4fde886782180295b21121f2395b931ec94bee989a4641a5c8c627f31fb2b6b55063dced439da192c36ba9a5766690da9682ae37c10679dcc6d293e2851c5c97d6c1efd7fdf00ca2a9e9a92a0b9ffede1d4dd5dec4c219db76c992769a787ddc9c9a826cb707a655d1369e5904d5d225ca4a0c115af9efc99101b7f3f82c2c2d6e7513aedfc21bffe32b75a36086198dd6560bcd92ac2504664f3bb73a600fbe9a7e06b063bfb811000169603d83b0dec6099a333112260ac0eea926e909e2c55c22ef67bc864ab5bbff80abd34480a739645786253366a35863021e40f92cdaef3142f51319a7fdf016618529714dabfaeee7b72c53714b71471b550d86bb42303f2e53980323a7908864a45aec566008b474ee5789070df4631d3973243bd01c5687e770036c69d04b54e4ee3d75b76b3139df73e4b580fc0a8e92c406eec80c33960dda5715dd394f1ad2cb1aac6ef681bc44890aed6c3ed82dab25df3175450e31f4f364cb145dc14e5ae6753b9b20b6caf9a32f98facc01834360e7069f5288acb06e47473f3af986eb64d7bbad2b0ce753008d6bada64283b466860e30b9ac1ec265737a545bfb50a16e4669eb7f3a64f80dc023bb7f5a371935dda08270c8c5bb1d8d892b49f0b0bd54ca84c664596c629513cd9397983fa4384dd540eeca42d1b748e53da45689080f43f8a3527406391723241c14f4b55fbd8ead98d9227e77a925ac992b7af3c67b7b7f9035f09aa164e336c06df1500b94e7e4e482b74259b55eceb4e930b4ed98b1be498786d88caa7de82d9d2d2e6a52484c364b7fb0c70e2378e76958958badd49fe4b385b8766f7081141d27618657d4eb65259ef50b35d11e284652e8beb2da52b2ebc4b13f698f3f06beddea15177044f722c2677dffaad5ab309f00b306774bdf668592caf31af409d782b2650fc01de6fb0599c2bcdb2d92177d0633100a7168909f2a90eaa4e373b5911b50572050d0e487dcb4d159e7205942e50e521469a89ee3285c121e5aef986c7017c28ad346bce550d7bc5ed8c3a2647eaa07e66733f0df078270a2983044e41dbc46216ce2f7d99a36d9682657f2852780594ec33af354c0febbae64ee62662defb33a2f13c9f5118b357154a2b9e53a25b5a4d644f96ea4707e5a8783f3c503ad929eca19e06793e215178673972e587a399e45ed159e3085305cec1849bb48e1a2606a89a9be372dd4efafd3195a970b4c5d09df8386ca47b771fa7ab2067d68225c83a3586b3b7d0f54629413f5bc54f63cce314a68cc8dbb48fe51efc75e69543fbc5967325695af8ff93ceb8e5594477f1d6c6f9ea625bc61f77e1f37369ded7f2668fdf87cda6735c285963e6e344f8d7b3bb5a5ffba0df216e87778cb7ac1e3d70196f34abc0277dd1e708e4804b36a4512a16eb33eee5ec18b6a31af1630df9d724d13f322700743ed98c1a412e6a0f340546cbe1f859b62140d5998f43c78caf95b8e6b6d9511792c4ebf23c497b00171d50071a500eb630e415389ec5986c0f305279a80839f12fecb1c49d5953b3c1f3ea91ad5f3594e6e01ae5c98b4142bcdd8e6b5632ba7e8f201139bb8d6bb834bf1391b38c71d2f04145665154caa3cc12f6753d8bfe7f153e917ab991fb590918c9102316f1d8a3b0a525e6c5cde3e728c3f26f28f2337b7fbfeafff1bb83dfdee153b7421a310b3d0ab4de224c508b917ea6643b9913d5e4d2d364e77caa686622b339096fee0be206702226cbef09ced62933af8e326325a13d2d6f9424a36366166bd1bb0e887e104cf9bc23b3d368cdb314d1f2c23b81ab1e3da7ea8e51e3c6fa6e8830af4fc95be12c7eecb48205d9f40f4b904520ab23b3958c5cbd34602e9107ad2b44668f64ce3f4398197afec22a324654b0c7ec5f4fb8676631fe8f31ea9d1bd3794dbe3a19b6f27438d9874d850e3127722479bce7bd2e8eae307f99c7ece547b9a84a7dc0c157a55a38de38b3aa3154f915c2134ab5663ae160b8956613478b87042af9523764c2c7d8e5a06c592f9ad77abe1151ab9abdb670e33e000a0c09049c8316763186346d050dbaa0dd69ab972245fb2b5694360d02fe95cf2ecddb95d52eba4f3c11d5b4cd585747b0b301762387850c3f89a4dc3f88364da471f254e360bfb8fe5da598e3456348fe00fdc97f0be0f146be302ad7a423bac24233b1e4eab4f41d61e7096c5b4c03b4f269822cf84e3e7ee2e0907478ff661165d6de46e2cdcb4973b63b82e55dbcfe69a25b17f02b3ccaf09ce6047f36e05fe3fe47941f573554daddd59cdd9148a597e01d17818fc248859556d850a72a9794d14950a48a4597118e4b5a152c74d6e685c6eec7addf0bb8933b7141c28676a6f6763751f09c6603bca4d13ad5582f9740847298c00868f677e089e56dc1efb895e53a7451059c66c1ae66c4a4ef89cc1b3c91f697d542c5223aa1e7e67946be07c5ddda84184c71bfce2e09a5b70ae9acdc811a4214e0c906890768a1c3781028bf8f5d6ec50f1d6dc054eb6c6e34b92fc7224057e97f96a3a14d00d7b8b455d70e94f33a4f8852efb1c30fa4e6dbaf9566882f1485dda7e4153c7f099db43495c7d50ebebddde51ed8897a1ec417e4642a4255d7ffa912509a77ee1a10ebff97605aeded84dc37ec11b6adc017b46de4fd608c6d7ea700f7e3ce7264f698df9c4660076a719498c462574e1685c955e277717a4294bbfa285fe529fb6b92f4d958ba854e3dfabd074cf6d5b27dd8eb0a12b413bc75de5756d1aaf7627fba96e8b5b2a3ecba98a432135cb22abf93bdcd7866645de11e4301fe20b3e2ab4fa057d81ad811e06753084c88d2157d66b834d080fd5b64b25aa17645910be11e836d2bab0c2f7feaa7212a9813cf9b75f0544cca88823c92a9fe957afcec338d04322544584ba973e1105b03dda35168ffc87faa31dea48178121a5536f731ed99dd4274481f9fb673f194429698915a9562454b552098118b18141fcc086ca9122129dc07caae54e9b2f33a41fb34449f522f7cc57da4f7b5e8655d2b6b60d671321816e158594ac4478a7b58248fcae95bfbea3b60c6fe517c5ad5a4d1fb0cc23065da2da68c302f05dd810aa290362f24113d387c8d5dd397d73222f0411b954b9c69b019c875da03ee1e661095ab42c75d660463432ed03959d417dab476282f79411656fc606e193fe21a363dfcd7ddbcc2813d765ef2ae1ca1cbb5d8f76eb836aa47db69a183077aad11eb97e9b878bcb22bf110a1cc6be29a2eecce9c6164cd281a893e91786c71663332d5ecc9b53ee2bdaf76a75803bf29010f85a47f592d2035e01df35cf2a24abefe8db95f6d1efacd867d851baee7e55995b0f247fab82632b61eed78e43efcd90c4d23ec0c89fdf26e0e49943b6abf896b000641d59b4e73d7119a6e3482c83c1f1c87bcbfc3414dde2eef46842050eac5a8041e0441208be2d04d49e3364d72b6f9e007555876d4e1b0a67144051675bfbbc4397bfe14ba9d255a6e3f7e43e3092069d299734a5c9051172e098357ec552aaeedca55b7bc73947d3c7d2863bf5aaac6be279e3e9653fdf68fb4757de44f246f8a6227f226a7b4803a6e38f0bc778dc1cd72832f2eebafe34649912830492dd17056d8014ea7c099c21e3bebc413b973af5418d4ae12d3ac33bff412f773b8346281a838990c7e6b3b6e557e639ee59f5c6494fda12212536eebd16f85b71208b875d2f19c5e63262286ec912b1f6ea60b3eb7bf90f6c5cf2f3560e4c0464502260090f23efbc5f70543254ede350eef45807d514845ac5c3750658305e130ad49ca590767472b384b0141a417edcb1acbbec3c3420b6914bcad9504c2ed95d73220ccec4e8a336c34035515199cfb8dd20b2daafcba304d764ae25704e11c998d22a51188508a2855d8832f25946566d9c81be0dbd7956cb537a01cedfa6a78735b6aabff3055693793a5f2f99fee464f2e41ad38b0aebf1c971d35e871b9c85d0985e5d4d46a1a1e6cf9be8a179599ee156cef670bfca9b3d20d843c3479a077f12c287ff0565542acaa331507ca42c4e73e7fd7bfcfc65ef90ea7b0fc570a15fcb42f2605dc104b2517039c58c9faaaff426558bf8039b0846cdca836939d32bd5d00539f9b7f515c18165c4a5fc1ed0dfa75c277360e7d468d8451ab1c61c081a28e42d75c585d25d6eba1d1b40db804aab392895addb62ff73ebd8dc673e21d0e11bf39885284543e0577e4c52ed4c769c495bc223ee29002d8071987606f049c2f7b8108ee6a822804da7f4b6439e4fb456f50f764fbbaed77d581222778826dbc54c05cfda7537f3bb525875ba622ba0443401b5c57e0e37c1507dceab7a8b1094bab689be4ee95c80d16008c50a5f26483f655277ffe8409391d2b7d329dbe420a97b4084e543841eb281d0bfc595f7a762236864315c2068950d526e0d5f408105891704eedd783f617b1a4a421e921123200f1e81044a96bb4f13b2a8b379f30355f5412e876f7b50837022fae6da1c8f478fb82e1b926ec48adfa41da48a1f56989c0c77fb4d5433ae38f680ce792c7fe698f7f64cb1bfe47791d7b8261cac33faeb24115748869e9af75aeea987795737718f77b0fd6467792c281c917c8f0e9a8ef4101172457bdbaa2641c8e4f0fd1c350867c882634f542a1678f9f9c755793e664949d5f67ca0534da8ac3507ad370e106eb03e5cfbffba23fc8e2249921cd834b95b22463c3c839bc2ab3e2ce5f26fd05bd3dc3c48398228fb771c9274fa36282f0f16e8f15cc76be37b081aafcae9c234455ae13a3d83438e5b3ac4ef59c3b340b5fb1cb5c3686583e4f96e8b9f01e4ac15c2c999f2ef2a7a89bcbf2fef37973b0770a31a3c74e9a5f9035dd64b3b0ce45e7fa87b3e6119d5533f94ebaff202ad82f6701200946e8fbd7c3e8bf1549a9c8c691ad1c7251c03cfcf64b5283ece66cb8f299e03e0fddce599ec98a42d878cefaadb4bad3eeafb95635d4fb026f575f5b805bbec89be16736c9b8d4a648d4c8a678fe68508b618398662fcf28ae74dce190301ae918fc367fa9c7d88a2b1cb18a735b4acf9c040a8fb9e276d2bd6bbcb9708376006d6c70b206bb08fc54b55f4f14dab36ff3d01806d6c60f5c7bf5290602aefccc8b71b7d9f365b84f74f9b89f7ddf7cfd9793f1b6ffe9d8b9b722d596ceb21ac1094ddf2b90d0fa629544bc1a95956a4d93ee13e7a130c52a895a70723664f7a5d4ff00dae4c5c83807259a9d751cdc3bf050721e9c1555e8a59c02a4d583b2acc134a259d2ce259c09436efcd9e2f8965f3cffa1abfbf42848b807b0ba7d384fe7b90014ddd6d0cb2b441292aa2d5063be7e561dd2fa8152ad69c03c87c8aa7ff6182bee0174a694a5c83c916ff804ee9e776eea45a57d72da211158218e048d093cbb4dfba96193ecf3ef14b42260d018f3c2ee41f5af8575e684e2212c7990af892cf3429b3ba6b87e812bb0fecce0c0bd38771a83e043310b0e4376ad99d70f38999e094e0e0c95f0885b1538cd48593a7c3eede622e7745c6ce066c11fbd2574377840ce70eb4992decd1207c682d787668a4ef8e5233f5546b8c170aee33ccd536b2b298e1285476d573c636c09e75c9358e56b179de6b8c29cee41ac546c0bcdf589077a1372d353904aead483a21c8702c42e36cd400abae2a073c6a8c499af60f3063c056352811945c164220a49951652f97026afe0f6e8453bdb5286f123cd8e043a8b07cba35f7bb6f1f6c237bba734af3fb60d26f39297a2c5ae001971f4484900cd6fb699badbf3677058785956cd058cbdda9cacf31b3bc7f63fcb058ec0e91a5bde0644d3c7bdbbd07389bd7dd6024e1883e44763523c974cb224e2def8a587dd001a7c8f96adbcf93ef5adaf1e9b4de101aaa3c9d431e1ab7d91174788ba0fd5632c0d6fd3e9fade24fe68ed235fd7fa29f742bebd94780aa1eedf5350e2fdec5a00f23cabf86f994607c4b6cf3e92a7e318d9fd75c39919b955b2c832f7662b79134471100bdcbb1e9c9d53ce08fcc723ab00c9e148ca4dbd32909b63adb5d254c1778c9a7f8959282907f1016de726d059b2457c07bac1c45b44b6a9132a98f8add877ea49c5e612462262def9d02b65723f38ba5ac6236d59ed099a9c255560d9f8b90c97f2599d5a5bcf8182d162e14d05121085db2d13acfd50fb89638c6d00584a0b4161e419be350ef851ddce440655490ff79530b0236c258e1e6d51e3006b6bcefdea1aef6e6d9eeb440eaead44623a6792f305151a3d5dcb97a48248b46d175ab2fd5ad16954fe76a061a836b6f89c0956dc8f8eb8e8eb57f5a2a36fb2c966c96d64b97e4f748f6591b8fdc71d1c09a0ae128d6747eb000db63a36effc5d3bf3149b48b7b6dfcfb66d74fc45b9b996fa19701988f6f8f790e050e03315596f8ab0a994d5191e6a6fca7c1b8c997c6fdadeadb4f509eff7df04ce03762c4ea7528eb330f45ac579dbc411c1388fc9ec1fec6a403110c900c1ee395c10b33f589fd8505cf641033c738ee2a31e5ff76a52ead0a91e2464fa539b883286fe189502304a5339034721c79d9a55112c61451156e03a3ec5abed1aa1534ad631b431137d54fdf67db805bec2d6149cc54afbee5ab2a9eab074b5897150372b285ce647e29ef773cc2719b8a4cbb2cd326c0a4c83d142c587cbda7bb5571b994c939e915a0b7db68e4fb3c6e0d625991cef7f5cd365baac02bbbb8ee5be8bc4eda56c6c76aad3888b98455b471851bdd58a03ac7cd2dcad3d8bf91174fc6ff1642c89e4dcab520a86c2126fda7531cfb6e38cc20c8bc41625becacaedb0942c39db332e965e1df95e4862416b149c6915ebaedcda853b7351e2b2826b8e6e477285022e1179e1adeb326a0929de968dc069f137ac9958ece7b9d12d4dc6bead1aa0b8d874e0c5ecf8794c21a0d73b214ca3bc3228d7f03898f11f1a586ce6837add3fdd8f34e3936627bbed4371017967a486367f443d06e8d728dc5e6246dd12860f954e21bb472e58e637c276f2e0a977a7a1af9f4cca15a387ffcb09929657c102752812ba8581d43a84c30e1989375856273658fbc932b34e8fdb09f77ca51b49215d57eba1b3733a72ba98671d35b6181cf11663413fdce5165e2d7e63d2337c0ef11652c74c13b5d02cf396c36c12fc2380c6cef85f56b1f4a6681d5b624ec0d7db0f3e0ee3d5e443a82ac83f2eb24273ad89a39dfb9baca69bc947c41bd00276de42e9057575acf5fd084aeb4545cecf405aa33e8200e36915960688b29bd2d31798a1ca75bdc5bf9568cba07374b32019139581499cde7a506d48d581bbfeb565091a80c2236b1af7dbcbe20fe9c9fd8e1de1c5c43ebb2e2f50e701d7c13dde7ef02916a07ead16538d29b6918d75540e243dd77d693fb09f596e5ef635470cfe58c3e82ff888fee85bc2263aa8de71ae4c6dba032d4f8259c653ef5522bf6d28004beddfe227910bdc98fcff93d2b2dba54901c349aa57b74f0a8c1d609df12d28317c7c0797ef969248537e48ea5a96e6eacc96f63c9f277bc60bb05d0e9ff5ff37b15199f9f774658716a49f814fc56306d70eb912a96d0d901c2069848c4686e8da8aa62965889c49a6bc6d969fb8b47d6ba042549bbfeda4fe4de01189838a288e53bc02e6c066bcddb419638aa0daad944554279a136f86837dde9bec6499cbccd59ae79591061d89a17457ef923b2f562a8cfca69e1c6081b99ab3a609a24cc3f80e5ee5330c263eeab0a872369e938a3c0d3065815582ce93ccc98015649653eb6a89c2116f7462d2ca216953b9e2a43df131c970046f66a204e34429c1819e0ffccfed6542d1198a3b8a80e3e2bf52faadcf31576f79b278fdbe0a6b3866ac261ddc21713b2e5ccd1eae0d5a6919995986880cf6c0506d3b783b47afc2a9c45cf73112d5617ff528d794738357414a98935fec52ad1a66f55e4aedeed4477240100ce3fa1dbdf4fe9027e96dbc93a9d67115dfe79419c1bc871f7488aa23549f88c013dbf4dea0fd2fde2c50212e8ab3f0dda91160a7df86b28504a42eb5b0eb632bbf7a39fd45c778e9edc44e2f977ee915ec353276677105e37069e638b5db14c80d5fbf58786bfb14a40b8890a0eb2e412732da6641e5d9d8aff9671bea2805e3f146c95bb3fa071ee8ef1a422dc55dcf288199fd2d4c290756298b6faa9220c0e7284a6f0bc3060cc4f18c20b853cf3f7ab5e1f994a529e2fc6d999b4a254118beb9d7dc0b63e9be3d7f9f1a6d5e2a69f628d0a07b85af87e9338d2f85a91daac3ddee968e74588dbe040e132d4d15860fb8bf061c123010e0449453ac2c48aa32191a71f03a06a0802fc2c878918ec12ad5c5643520e2ff6999c1677263b163651c1c4f171d8477b40443d1f0c8e35f15d28aa3fffc2ddcb3166b67fd20d9cc9889f683411edc9372d64611e3151bd7afa62190a36be0a6627c76618d75f74c00f72ea1b0a3f8e1e2dfb79d416826bc9bb902907fa1de8643474b7b98cbe64f9f977e2d8dd5d8b4529198550feb81eea838d6b57f9ffe64bdcbf4b557fbf411b4c4c4bab42a624fb5cade3685625c76e228d8f630a9b79f481ac3bd41b215d8b52f4915f3a1aac931635bafa5e4c9700ae79799c93cb71b215f9896dea7665e0624a991ec1400ade79277d007ec4c902939cc0728e8aab85fd69cbdf37785e8ba5b6fd89dfb270ecbbf9641b05aa6167a0c505658913b7cae0222cdc3653385da380559c02a7f217bebc6ed6c5346ca2dfbefa0978b71e5f9d92ac4cabfb9d7140a3ec80fce336e319c8ba2a89463dc50ee0668d240ee9af2f148700afffbacee149523ae82e810d4c3d3f4f57ee2d91bfe2d83a6fb4bdd408bef25cfeb7049f6d18606ae14207ace7f3ef11c0d529c82dc09ab2e9db390ee56ecce82f736f3478b12ed3689d13653a431c5415498bb4370bf15498175bf977073c4a388733b36a009bbdc7a6dec0e60fe3de4bc8896d801e94d936a5f15e36a6b998283bab6af273c14cbe37369bf886f315a5d7cd3e825d806e05f5ceb9d1917a97945097bc16696fe4a12fae274feb79e977804915c6e089c87b128535406ca4c5cf272b29f22a0738873f8bbc32605777c9a3d660bce670a9444d438153a6a16e77c853c2f317f434e3687e7082d2495d2e8f45be860a0a13e6bc100605391ffd8c1c37d8c4aadbcf6159119937b066db7bb367700cb5dcb3fe3735fc7f0d24242bb06b9ca6d28a9964d591f025e9a3b7b24caeb22c2608322e3b36950a4d29bff35f4c4408b61781aee9a055c77ed75d1277affee2996433f065ad6ec86e921153dce70e017fe1d4fd989e9e21c533b40aa23a6ae43bb2adf4b2e2d384661ed79aa16821f80e9e16336d15160b57116ecf9207f083b4de137b6b3efbf9e00ecd05cac06b0b3ace6444d63b3d691dfa45e4a16062d3af41bb4fd4a44ea03c05a3233e9476ea30ef9b246a6e9827e25bd3f27e7f94088cfd51b9b7332f0c343d6bcf291fe8243a6c61a8298ce56ae195a06070db26cf54a457a67238eb5cb64dfb60aafbbbeb50ff2db5f2282d4e78600a57b951ce299caefa43ecc1b72a18b474ed61f3eb8053375eaf553b214eb384619917145bd7e4501d4bd8f5ffb623c4793fb1e943aa813002613ee579eb9fddc27198af84b172f8597228c00315f20fa8ca250b7be5451ec942e01b7606165493540b0505dabe400b22ea989873145e18fefb37f5e2bc879e377b0c369bca4b24c872cf7f5e0d5c10653daa77137f442da8920d7ee8eda759e372be9894d6e642a4270a2e7ba27690f898a32ad30662028c50cea3b39edd4c3709251b036b52f7f842ec3dde1a96f3f13e38903b4f254ec4c75543bc2256afc6fad1b4c9b41b7739c94ecbd57634f259a3e11a7ef0bafb64954b3151078245a303c1f75541d7461708f53bd6077e2c63b03593f97824924af8dc07f988151443878ecc3ae71718a3e009cf986e8361fe0ee8d7d60a69696eeb4e24336036a90ed54859b2974bcce4e4c9b2c2328762cf2ed94d168745bde271e6f4fd2f2ab081181bec832b935296d35ca97e919cdce9ab2b7c1dbd778a60d21af37f5b53bbcd1ad363405ecbd273e46e1bf6f2307701198ee9ba227d3c0a80777b12421872dbab6b6fb827a9266feb3e9f8af498b22a70207d9b60be9420afb3e543461dec3563a4e7193c4bed673b4008f97cd143cd0c81a2037d21ba1c63c97dd38dfb27c8cdf18477bf20d0c3ce9c43b7e12f2dea85d43564010f3bae429a4e461c513a9ac823c837c5319a963941ad3d98eafd6467177c8049a9f8acf0e3f9aae6358e658a2a830280331f912a2f6d235ca71e900778e8fcea2d1387489714bfc15895555f031251650b9f26f2ba4b6c5f2b2ff56c225acc632d60709f93dfbe46821c3c53ec9965efe808f27395ba550acfda8586fb933aaf676d5e13ab2b1f39ddfc971e6c40112d4fb09c5351f6e8bdb70e4234f77cda9b1a3d477478f882dff66f54c986edeea93871421baa0c7873167117b8528da5748a95aaca280fe71a3a2fb1af966eec40d54cd12665b1fffc41da66d025de09831494f61f626f2d2f207c0497a58f1bf59912df6f7cf80378985f305a91aace30173a8148d0ed7bae89fbbd07107d5261c16680d1ea20e9aad309a62db7b37fabc7672e437889d3aa993d280f7c979694c352fdd04551eeb6ca8f959ffc83bcde662e2e31c6680af7df0f3e4961c738e4dbf193662eee5d51cfdb04fe9622f99583d6b36e749d69b17b3c2c52d46deb7c6c1d1cab18358d16e739153fbb27235d55193ac23c20651d3494bc8eccb53e97aa10894284937c04cd20b2f4a9abff27be27e21803daafe14d0240ff433dec940b24e41e389bdefff05fc0cd24b8570766496e9d9e9ea1e6523a54d7e4abfc7b226a3b4c4e057834063bddb7553b3480a6bf6264c568e30e572b7a9e691e2cfd62ef2406b26e9e83d686d08aae0ace9bc017f544024c97efcc857ff509aade5edd12e55c1a7588d2510c896658df8398f6171bf24760e07b93a3eb94bdd38e43769b9f879971aeb2375ebe60b3697ee4c0e514e8b82ea92fb1024ff09b5211e96c38413ec8c3be57af123667f88bfbdc1d23a3a8f0ab12e39b74dec3cb6241fea0b1a3ce53a99f4529c5e51b5ebf8150a14ee00ed3cc3b0464e722b28a65e94077d04b21b9ad25972b430e2d2098f62c99eb03f810cf0e62aa9ff621456d6261c15c0eea49f06af64cd463ebfa5ceeca8cfb6b66817cb5c6407900b3ebb278f7a67281fe25a89d3fc059684b1bbaeab0d8e023e610b4c71e7fd81200ce6d8ded92e93473bb81809330013754f7dbf7554453b0f8331213e442d203bebbc4fa365f4888b34a656166be86f1e6e91772d2584e2d614be0e066e5d2cb63b4f5cdfdf528aedc50b5efa04894285372d16065db4e0e502f783bbc83475bcbcb1cff83e10ee501e832c22e5251680406e054ab3da107fad72fe4284c16fa063a0baab55429a762c689499e9cebba3a2c24e6be095f8b63a3dbc16e041103d636e49ea004099d6e9791e459920e1846e788777f41c89fff212378da70357de51bcdf5c500013668dd214e4c0c4402e822c04857bfabaeb6b4a3604cd8f42bd13c0de04043510beddc693101187e655b94d9d07da31d23954bbdfcc69ae598067d0bb0388729ef195a44402f474ffda0e144fd014d5a0e53139bcf0c224ed6a541d1bef129b81a9dca11dff0edf5c3f3c413fcf020f41ec3a7714e2856577f07f1edf82691c7e01d98bb09c10e4c70086d2f8ad33eb6a50784c2cebf99d36b71a13cf95dde37138082ed7007568fafe3a49dead38d38b3ddae3bca7c1a59577ff32f798d99ff22da84bd1d6a65377555f7a80ca04f51cdcf155128882f3874ce7fa6efd5fc2244c709ab67585498dc1ec362e14ea3ea8dd484f108f2a23651a170256582cccbc18905718a7008ea6e784c5db0cee0d4e94bcf0900a35acdb5013dcae5cbdc26a8c1405bb0ad98699249067659723b041f7f9b5bb9443f1d7c5181eb764edbcd8f97d2006f29135f147aa55fed5bec8a4ca3643596921fc09fa05b4720fe98c1bc69ec41270b6a4b734916db703063c712aed61ee8dd822dc07986b152370ebd5be86054e744c12c0d39814aea7ee56617dd23fb783e4d0a51fb34bd95624fa11030c3f1052299c669e343c5ed58bef0d3cbe8edda228b60a34e74c0a7b085666feb47c8c54d3a3e233c0bab8275fb1ab605e3f59575e276e8cc2bc9bc84b0e5e30dc9d9a56e93f441587c51ae0406c478781878d68bf305d32d6fe241672bf9e457a8d67300878ecbc8a5946bb713b72c0487e73d2796154850b2495f37204cd8c8ec403a00bf5711f63c0e31499f2c5a240a9316c5d71e0c0ffc1fcb812035dbb45f4f585f2bbf87c67621e71ba625cccb8dd3d98f1953d2e22365d5715348d883799af0a38acb7334b3682d9379c6847eacdacd67a538881f4ed3bc67131bbe2480a9fa18e69fbdfe34dbd3265ee2437a046d43dfee1f24553b8610b1a4bd865e2c686370f6f161f87bf19a02bf2aaab024550cbbb5f153b01d3bcfd08a1835d674a815de331d3cc2b18968cec662ae2406d7e410939d41db8cc518bb634a5403394064069bd96367c5d74daa67f4a5e29719fa8c0b0aee8c162f950bece1be2ac93cd43fbb67f3eef4b35ed2aba0fe41510505cbcbe948b37e0e2e8eeb20527bfb7b77d9f5c709c738ea139616fbbf42ac79000da0e3613a931d99e677b87cac47bdbaf5c32973197f12bd77b541e0ac77122fea7e576b52352bea8ccdc7fb6ef03c61ef9427d0d6785669f8509d3ebb5fa2d8f950876b9e73efe706d30a0bf0234fdb618978699eb07796ee5133a630cff770f124554ee77e85485b265072a3ddff47e82bb540afa8506c10fd38ac317843277cfbeb0cfd048955b24555fc7ec7669c8e9141042fe050261391982bf7c8e761ebd058d1652fd1ec09175c18f8866db62793c4da32a72123ecbb22d1c1d90bd3749c421c6fe23a35896bbeeed88a4dcf901204c8910d95eb5dc6dcf15d54cf71ed925dd55cca98cece2115ac0870cb05e362c42bd8728eda0fcf9f6dec41dcff7e128ccaeda6e82204bf3f142a78a573abecfbfb6456013d3e55e7f56dbdba4ef3c30cb1c1ade20f9b4e99b08d755b0efa3e3a3367c195aabdaecc81bf7db56489eb9c9494da6e0cb2f2f14f36745f51a6f05e6100d810d1a8dd53cb36ad943ce48a2e4678e797f987006037a27824e36a62d26d4701e837a9524cd2c6f7236042e3a6c97e35ad7bd6d952302f482e4170e36b4ce223902336b5f284b19421afb7123efb17507d7d526ee5b8c36350577cbf66ecf8fbd47d1d60bb64eb2289c38467c53df765dafb690a4fada67044534ab9e0820003c05f549a41cade97459edaa78f0b1b3eefc7ce9f1086c02dd13df9c978c4f3bdffd561337dbf7fde5904b97d35016ea4a9261aa51939c5dc7d2271da5f759c2020863a10508f719ff51af071171424b21d60f8194d985596d458f839ce44cda3c9654de94791029037b89c31db41890607bf720c7559c6b349e44b13e7b363a65f19f2608db994bd16aee263f9dd48dc8362db4ea6e0e9771b05f6150db91c1d85120b8d406989ef39894361289981d2ef22de8ea04a1c11b659023f5bcbc663cc0db85eba431d676d50b1ad4d6a2d441cfa9a250635d24805749dbbfea99e413c66dbfc7ee54cf382f1bb7ff343c4e3d3d72293318d6babd54ad844a6822efc36163fd2421755b7b28583f63b9906b13cf41a18bca3f55771b777836dd5aa3dffa371a7c3b02e94221dbde32634668f67f5bbc420d7b73f5c8d2826b2422b7d30ab61def3e17dd56753c1e0abaca17a000d747c40eeaf4d5aef66e44e95ca6501b5b6b7d497ca54450e8323774cdff3975642d71efd6d164115b5a52061a851d4f1fe273941597bd5ce9abe2a855726156c8e291665da249c533bfad6d31816cbc4b4f199226aa92ee0d88ae4316e50b73a35f0f11280fb423204c004366e112dc02d18eeef76ff8fbb0c002582b4ae571d8cb5bcf4c1d71b054f95198d9941fc8c6f90143230546a365a59150a53b101a5302298a8e425751bc5b4378c7ae019e9f5f5f6b91fceb2bb2534d7a23fcc3442bb8f45bf8bdceca101bac27a5c6335e9cfa031de0bc1f52944cabc608db67e01d7d5db0699efafa7245365ebece712d382e886aab3323ca2b72c8a208c04ea1356b591ed0d586e341f5eba60fe45fa7d873f335b38ef459ade32ee7277115fec892d660e440d954d4b1fbdbb6de35ede8822207030b5dbe52b16b4f47050a625f6d4e8d6d1cf7f6896a465ae573339f00553bda2672b097dea0ac4dd0cbee137a873b9aa711c185270479996293818cf97a4228759193292360155513bcfc642f679bf30a9a39fdbfb8137eb8ec3fff706e436b7033948cdd22f9ab047e6a7bfd8815440c70fddd2711ae319c5fa2fef6365abbdc9e56e2cebfc34c9abf24113e827501e3457e4bacdff4e5a964789c70792c8f15cfb910644000f5584d454a1400659d3ed6b1b65b495bedeec0c632f0b5e52861d2eeeffa68a1e3b42630ca0e98fec9f770d0d6fdedf876c50ca32558f1598e0bce54bdfb3762653e66629e4cd2ec961367eb8c2bcdf5422f3d96eac1b11a75baff4918cfff9a9a1d0e2e1d89eef9740155f834e721b8e8d06e362c101325f6520fd5fa51a96140f103c76a3b7d821bd28fded56894209c95c30765398aaa6b7b9f84a0678d29d1bf6f38149a66eca798bf223c6bafadaf1401ad175d61537117d3dbf13fc7ec90a1e5007fa31f243e764657dc62b144fcaa22bb143ab3011a36004d241ba1842dbfac633b436b307f1a7eb2eb90e7c368da31d954e9869e9c5b3c03e8bc3fd93446f52586b7eb54c95aceaadd0d8155be917237525a3e685c748960c4d3bcf437397aebe0aa77b0c0677fa7dd686b98f41738886c34e77210ca936360b3cc1cb8018ff1a5027d300c2b4a3dd5ac00ead3b0861da8a81ce07607026eac31886148abd52e523b63908b345ca782d6ac6aebeccc88e862ccd93eb9dc66832b3c313a43f4f0efa80001a924a6cce6a2a42d80b2837c12093e26c66642544ab69e6248a99ec819e3e51d35102c3fbb51818333300f9a7ddc8d82d71b4f3dbcdbfabb7c890f4a11b461647caffce65dbf90bee87178e9d3a70e7e565f33964421a7e2ca059d9292ef1f0d1d7e2cdc7895bc994d9bd3908ba0ded5749e0365afe7d5af8c8fe54424cf6dd31913699df6d3e0f112e87576b61c737224cc9c302e2edf2c96ccf4deb75acf1ac71384a811753b33bc3f18feb019019e1606407065c7cd72ad10ddd92659b8bc35ec224e93e929697f6597838ebfbb2c0d55d2ff8b6649271e952676e1f9fb82e34ce253cb0fa817361528157d6a5198715972b35bbf7faaaa3c3f616c2620e1dce9bf7b1ead958cce34d6b6ed81769bf452890218f2bbac0dc1eaca05f4694dc1dc3c4d75d3caccde43b02b5eb9a367a069f1e76c0a44716554aade6cf0ceb4dbce133afd9454e7ec17a010995d8749482db935bd41c45a4cbe8fd22014cb74b2697e62d208dcb4c5af4ce48c477ddefec838403739a3e3f51034c5d3d6c146d20b0d836b28285eb3e5b9aa8ed6234cf52d15760b694f6520627ad88c3f1b5237c7233209950745ff42ce773578bba07253c96c558e3fa433d0c8d40c46a3959823117067b876d0a70dde7b05d715693bd85caa211264fca8b4fabac14d1859592c86c826a42de5d847ce460580de9cd767fb9c265a676860fefff7263560243805944098bfe26dbae4fec40978cc0e7a34c87d990515705904465e74a04e1adf801843d180dbc2850df42527f2df547704cf2c7ac76c8554d0ec485bbfcc708c09cd4b9c31bd952abb256ff6f67c50f481aaa1644191b55c101697ba1fac20b9bab7fd4ef51c916004d38a2044b44641cd924f040b82baba41a1dc1d09f0ade063608e731221d1bb0de7337b4bd47fefec3cb1ed4b3138c14f08ea69ab3302c1a77d75211ff616bb1faa7e2dd1f72ebc5300e9a34552aef6219f9079826dea26d5e7429b67a18291b0c0ed9376bd4cd701b04c8e264bf9e2efad096ce3339002acd236c9d97a49d7c2dd1172d3fc5626cbac2d9c0d6ad570ced023cd5f60fee44e265126d7cd784e76789640a14becd7d3059c97deaf11e488814f8b46749130710b6c7e0ded89189e8113f8f5b37b629d53bc5a19428125da70f8d881b3c1ddc2fdb960b015ff27d183aef51ad906d1a17f615362a13d4ca141ef9aba7949f767316e59e09da102db6260f77813ae12a75c1a834de3f27458b19726860884b5fc3f642d5f72b5df03ea2a225a07b94e020bfd2fa00afbb6202928de3aa6c7d08d49ab24ddfb90aa21c94fd3e06128b041608b18c0f2f3a92b9bf0ddac142e110a7ed7b81b53a03442e0abce95358641be5a867988de9784001d6900c6de0d3e39c61e129d3378952b72a7b81f95ed5d4812492c0fa54b45a2a1b6d806275942096a0b2f261a1388fc2ce5f812d036310a6c87f59d2e1b609d1099dbd5e7bb463ea3ad461538ba7931f9cf1939309e69b2d61e1d5bd5a9c684edcc4d2977401776db5b2fb421b537a7aab171cdad96a59d1a15326d640b2641b74bedf90ba9494a05c1ec25fa728b57478e75fa653173b69a3d384f754816a50346fe02d52fa176af12f2fde3df86e0e82220d5e836e1f6bbbd706bc8d7732af2f259f0c7794b2625a1f31e95e391a3fd221f60bd3088a6c522ef4a597e5ae43a3387de89c2bdd03c366754a4322ff306e93f442d548b5d87fcc95af7cd2309cb44a47b985d6c862b6b308391afccc6680f51762207b62b0897d716c5623e92c8253627b3af11383d7d39abf8d077863f711ad434a5c114af74381cbfd4ad66bf2dffd1ae7d3bbb369c479db3d38f945b5cca600836a593070d32b72eec7c104f679b86a44ff80cb3fa2a6b5370a6281e76a6b87a7ad070b075e3277bb2a44d323ddc41d67da2509176ab1262ed0795b0a5385ff65edd7a429a9e0d521fb39d74c322f97824705fd7677e72461a0be86598a90aa75871a3e3fbc2987eecdd4eabaa1a29c336dc4c2370f747057b5941916fb87b8b19785002ea16b4f5e24fbe030212bf1a7a63f24c3695c6ba246a22eed335a8a1da2f1561f9050072bb6c9d4afff1ddbd126a1f6dfc1f8aec49ac7cd1388178a823000d2cd9b645d5a4ae02d07d492c7bd66a4ec1bedb8bdabb4cefe5824aa11b05ddd099f01900376b26bb01f2097d6c5a5fa4d7ee02c66e779d81676e3093fd0b3a86879ba2453725ef0631e06e4c3f7b835caf9b4bd49150907a45341d3dfd1ea52034cf11b1f38e8418c33b0aad80cb0da51d4c8e4e993605017e4b6a4a20c25d2816c1437a57e1cd78e5452f64eabc6ef2cd58cd9f1436f895cc27d9e78724fb9af046fb386a005157fb5c56bc4bc9ad13a417d2d0da3b3c674c4fd2d71f252e98d2f9ea1ee536b96f1a81d841fbe82e31981f4df4d24b3d4e5d66d6c95974f43b842e19a50e66d2846ff588379c49b81cb5308a1f873a87ddd9682deb9eb4e51cf9c790c417ac4a2f43d38287384d5533dc6a1640753be4f0ce1d88bda7a9f1db85cc2747b7f0daebfa7f9e5030c6b33c11ce495298643c5965265c4a89af7be83b141707033c1fa87af3e95ea1022326557d660944502fea331f657fc9b04dd70d4c9fa2aaff5a9b7fa00c0e170012bebcbbb822656cf6c718777149c6ed4d8d54786cb8b3c742e26daaf655548dbebcf3c2640f76a8a0d3426b2d83c965d08845988264eb0bcd67f60a6756d999927453cb71cb0ff26caadd2f31b3729a72d8698c48938515d5713f92bffe3a4dfcd2be81cc5f58487b5510a12fbca25cbb5b9cd5b7c26ecf4de1b936b1b74cf2de3501e1bc3abea74911b8521d93685c0d4b70cadc07a53157fefbadc77f9b9358d55ce67dc36e524dedb23c1a8c8068447f550b9ee75eb2e93ab1b71b677163f03ef9487ab3dd4dadf9f5cbeb11fa3c5d6139d9c7b98e8e858e9d17944c9e1be17d5e5e1931e3344e5ef882dc06c74c58a7f95b40635971dd848c5e715f950efdb0745008bd3e381907732db98923eb20038aa2e693b75b3071919b0d37ad5eb56d4d71df701863d01a58205a91c69f9ca0d9dde748841e8a9a26a902e6d5bb6d7da1b09b4c9ab64d3b9778c5519927b536c2cd60cf521b8d543ac9a8bff3ecf69c74823c7628e6d548d74e08e7c9ed31d3ba637262fdbb60f59ad5cd6295b013e7e5f998601a28a35f1305b4e508e3f5c76e6056f7fdad68452bf444e1e93fcf440247b1945d143d745cd209626900f372f23c19d5081b53ac9977e4ae33dd4ef7dcc658c8adc17d9bc92e99d4cdeb561e2665c48d2edc15843ce39a6ae5949f905d4ac17c73d059a27eb9cbede72d7be20c0d58f8499f916544a8e183cf295ac335200717def73b6e1eb512080f420198f50844dd505f87a31b4423a3e99866ef0618fa4b3fd2c3c0ad9f770825f1c5e8d5d6b37b343983314a171212fb5baf8300fdabaa2b199fae00a99b46f9f4c101e1e5ebf16c22de53e6865f29601bcfbfcb9ac9db31770f0f6175e96bc8c720ebb61cbaeecd2abecf44ddbf65356af2a5de30f5aeed0e129a12401ed97b648f68d9ca08643bac806ef5c0dfb6dc1496c91b4b1e41106255f6f47577939bdaae270e66a3233d86a00b7dd0de61960ae072819cab41356d69a32b7571fe2c977469b96c9b52fceebdb49601a57912be63ece03aaab7aabd2ac5eedd2895e2713edfb528de18f900cfb05e42604d124825b12bce5e55869e2dd84084d1b79bc48738c39d42280b44b48cf9c85138407fce70d20bb2cec5050c0e0a263ee09a59dc5e12e820048023e754ef95bba13c475838cf5e451e16c1ac77ad33262a096cc0ee6e7cb76e67f6fd5ed95402d2b205a54505769f0f307f2bb04d267ca01ca516223ed97dba7a7c8023f6d66743aeefde5f2bf23c7eb10efc80f04d056dcf3e831ed930b0f83b56b53c42e8098c10002d4c1ce8008cd4d3e692f7df9f9407c01ccbacaa2eb4df1c50ac87cdf1b3389b65fed477c86f0b9d6aecf8dbe9fab27c19c9a69ac2787c68a91d7ced9652fb3986217bcf8969c1af1cd94a82a055b620b86e3f4b5ca432764c6bbc8c5909cefff3d0a5ba76485654460c2ffe5b67bcda8a3681051edd259bada3c47ad16cba387f4613509efce53a7ab6e6b8e57f8bb705a1c3e2b6be8b13ab67637a153b9d3c23dea50049745fbf4291c5cf70777050f4fc61ddc4c12bfa395b637aa01cb8a91a6d8b5b49f3010e13aacdd39fb4800347d80f32fa20b4a2e4a8fa25cda3eef146e66973f7984c8f4ddff2e66e256a2f1109fed819fad68ea2e0575d9c5d892cc9f61d97f4b67a48319ae818bcb6dbb1c6a20e3f320a924d6a45eb03fc835172957edd9725d3d73db450bfee74dcfdfba9ad8ae161389c99a73dbc821a498ff537ebebe0848747bd1504d2a07e3aa02ceeef11ddc1fc33561f4e63cfc259a4514d5de3bbf4a8b453c8e5bc9442c3d31c03a6e34338e827abe71312b7f89544afb24c3d7c2b6c08961856c85121d3c71d7a5241f5e3256c3d1be5e9d5b063e8839f4dd82d52e2b13973842196e96023b2da1eba120b55986d036505a618236f03d7a3750b09f520e936d5f65816f9cbc3fd342e05b2358d60af43b7310e099c62e4bc031eb9b165788f105cdee77bd3d6b0f7cc11e938e2c6c7869fc19ca6ba19c148b901884b2549bd657e9250951333f90461fef9607763cbe39d105a0243bd0958781b94b2404c5ea087e792dd5ebabf8a571b10ed8a20d3b21ecd02e3b500ea6c784414016ca348d8a36431cc40c0d561ef79546f70d2be96ee5e1c86eae7e42f23f4d1c458bf08e2c7c69daed8613dff2a7851c786d9f23c42b65de276f46825a6a89a16603b58a57a2ad8c10e909492f1cedac5daccff016f8777457a70e2b3acbd65f7182ce75668f78b19dd8dd661b4809dbc92edab984e5446b9ff8a028389486b87982933e86024275ff248dcb3381561b417623c48495fc236a69429b6df9cfafa7a1d9c46b8c8e0323d674a505a468fae782c82ba1cc32a4d3e806dc09341241b3f21b7856b29bce3c2263fa5d777b2ae3c8cb528b75cfc0dc9d4144fb8f66c86e3c266b470b18578665c89fd9fcc44b7f119de7029fcad58404a68c9e0653d3a50f84f8269e5d225e700d6f7c99d0c5c7b0b293e9f77282462e7f9055ab85313e1d672a957a99682b37d100cc59fe6a080e907bfda9a9497bbe6cc6e813de97f8008a95b6b7bede3252b38c6464d966d904eecbbb73ed3b944f9ed06ac32ec3e54305b8e10b606d1e9a5e8ff558b3521dece2623da27e833c9bf2659fc64c856a89a912b9e00b07c75d5f5e0483d97b35946a93fc9cd20a58deb27d7c7ae26722012be83e3a997296fcaa6c1f8bdb73896c29e158a742acf2e3f339ef4c6269339cee6d73c37bdd9ed7d54d85818015790a4c920e46706a17b050cc776bbdba1c56ad8db1104f6e51a976a31226ebebbea0458249f0511b0f2b9c35ba86281dec94b74acd5fb971f2ec9d36e7644520675c58c4857b0f1be363a1eddacbf88b266c2a29b1f3e29966042fd26139124ad1b811916512c23a057474d50a1ea535f21d24cd0ffe3e49bc9600a4f0d4dac3759f1617d02187381e047f44827b51d8ba4911c3928040d0844b373398bcc894e68dda8d03ba75eb1ee562ce3519c565f91fa9569629da6bde1e9cb67911b2250a0f47990d86e4cb24a8def0d0baf5bd6671fc54d7b95dfe622788cab0606908006af4e84b1129ca21c6e384d6dec9cc024779769d7df0f6b9915ed608663d3e6ca3c092e5c6e23b8dc3454bbe2bee7209c45d3a133c5b343d4e31f35782e89a496f9f47d33a09012b9cc43881af103e1bac0702d8a01ff0ab2378dd55c685ff9500d2bdca58a19c1e047fd71b187c610554aad11bb534a988f2ad739d59ffec63033838c86e99e0039f078a67380e01829fc12cab216437cce7df6159b21a59419face20ac482dba8e79d90d2bef3c3d66e9a327d538fe570649333cfc9777add2c88411892d1eb7fd9fe1585cf73fa041ae92ea07607f4ba35779af7d871a74aaea85fed62594615d4f2fd373f7e8ec57e112cc117397e451e04e274abc102c2c9e0370e1eafb461ef50d8a8c241f8fd3cd2397273d8d9872a93708afde59e0d7dac7b83616736fba3ea4803f4499c6d228d88bc29a226afc617a72bb7a34f05a6fdc06e46fa8384a7ed41f92dd16363a3b455b7f0669424310287b943cbec4f96cb3aa14bcc3beb7223900b73568aa8a7309568ef39424ff2edc4b8b6be34cfd42a8e2d4b96ddf4d7d14f71f82e35203df122783f5a6c9a1ca5064434acaf160c2e2170946495cb47bfaa4a8efe2976700d07a41c634975bba136809c2a9775e688abe245bfb9e24e501484197e9da7b402bb49267c8cb89f664466cfc1ffb7fa4a62c3506c94f8654053ef878ad7549ed62c7369ed4c646ea2372094d86949421cbeb15de3732b51932c675d4340c9715476d74fdc67a07d691eeaea6bc59f3b8ec5ca384f2249ba2f22eb08530864316c2a6a9a1234cf7e0474997ae1bcf31084d942b3c39c434a632bc8a3504edc6c9cc1fff150646274d3d0999e4fdce2b65abb1a181db2106d22eae70e27e6e8a4f5ffc50d9edc27c2f19953cbbae2ed265b8a254e35e1f93a749a23880f935034573ccddfa0f49004b596995c9e9e9964beec6a75bd4381d8c16c547f448d954e0552e806e4ec1e4816c4ae70324aa230905bb69a39c5bc3edb3e7ad8ee58398883d88e931e9a1343201915bc6bba6a251fe5314fb2847ebbd1654f9b7a3ee98dff2bbc41985d156aadac95734c3c69004afaae7ca734f21479f94bd6559ba58b5a7133dfe137908cb5199d06e2680c86d663a18bca1a23cef7d0fa65f91ea7c401ee674a1a4aa0cbbc010178a6f0bbe70c7058e09450ceaf8884f59b9efdfce1aad2d01c60ca9f040420027e2e92c782060977c0885cba31f91b0534d605ecbc335f165e748148a3426a73c57ca25fe5cdbb2e3b190a726aca1d5d5baadf96d6f2c6933e168117f184361890fb1d7f3b0fb6881abcf296af050b333375cb780a79d3284ba53807f97a7fad4d3230e10de11f606dea54fef4d045658b1a84cacb5afbe71284ad47c2f8e323f9f790ff14952bce78200c06983944ff10ac292b4e1f75094b1b9db710e7e871ccd5c27f685eecee0bf6ad462462ccc35a4d45422356e9d14e48c5fe65523388a28c7ecb4a2501bf3563dfa2dbfd1a2dba46aa0ca67a11a287d06d53daf4d10f018432fc0e500d66201364d0048c00a1a75f3cc474c5d1ea26f28c2a31fa032002b8586a095ffab03fea92e2f490ea4bddce6792890baebb52b2feab0eb88b02db298b7705fbcb723f158b28dfc02979a2985c50da97a5b6f6be445ebc88dcc2142deace1fc83fb6f7773cad51a1404b0bbe9655dc9aefbc307b1b6d2a78d3499a4b4c413094b9f79c58ec75deca38adbb6b55df48b2c8331e145ae7f129880c0bdb08d5d563e4c5bd841b1cbb0712aa1bf7c9332a7c775705676ed8a0db994c9aa32ebfa4f35f4c97fcecca6dd49aea773fb24ad08d1341131f260767604d1114a5bb04d72b49fe03895361c63705e38d4e0fb338d74b299ff3b672ff1d80fcf0dd09468a586cae6ae08524b23e76cd73376a931ad695162695481beaecdf668664c8ae73d8b814fec948e3379ad89dadc592b1c192a11bd9b299144d183e74bf63292907369c689a0ac162f60df96075a8313b5eaac1fdb78985acd8007aea8ee900e201c868d3cae9be6a4864d92d227a53a276ac08095378dc2aec2e8b1521eb3ac05656524c16abcc623e6067d2cd297a311d0772798c688815b108bbda0dbd139db1cba4ed015d1c55831c5deda7885cd40a5bcf23078dd04ec9a71c3964ba8b4b5bd71d7efea5b841e46d8fa25538429ceaee1d01baf4b5f066bf905a6db5486f5d37f117d92522dca35a72e964ea6eb9b10d2332e5987d3f467ec16e67e5c86b1eaf3d862f87a84bf45161589ff75665a764624c422bcae47b96b7284d439d76f8aca629ed4f52c61ffd904b70762884f7cf6c319edcd2eb808a388c0f551f35bd9025316af1b601894e82fa718c06876e06b5747ed789aedc82c7db2b5b671f389da534039ef3a8b18c14c45dd19ea2114f810aae33b977e60bea0ba90b89122ecd9d3b431a7eec05ef94d9d3891f39936174a8675d14ef74c2c0f04100bef941142bf55e8ca7abdf5fb7f03d9f436c0b603b2658ecb5d5e31a5852c8d0cfef8da74c2c46b7c7332cd3452d3e17d57c7c6d273c9a68eb7826f528d8b5fd08433c10f168f6033651417807b8d8b0def806b12374effa0e7599a55b82aef70764ef0d962334593d331cdf30246b6a1cf36b78c2a17dfc78120924dafc65c8a782c177119d9739f98ccfca64705b5509fc7a1094c1b901ed3afa75da6505b2843c73564ce49d1c7ad4e307d082ec06d00157c7a8e5576b90c0396f96fb128fd528fd6314da37a91218937dedef87896d11ab4acab3e402baccbd23318b0b154e7d99013cecdd896ecb5e17809e7c7381c0d16d1fff9b37a7f518919f1398eacdcd8625a700e619790419ca71df2906894d73ff45adf2522b953327fe8d6489e5a1a5508db9d6a7b89e215b4f307be89319693482dc98b532c645ee6108f4513f4bbbeba69a0ab07f8d41e747ced67840a6a8d2175974fb5b6b277976df0ae73211fd10bb2d089a13807a05766497a20aab5849e241f1cc888f897cd49e2dd976b8a92b5409aa53d7bd30caf87a98501a7c99006c5930e193dc36cd4c152c09a33d039a648e5ec21091e317b3300703f796e7052e957d03403b8bcbf71904dcd3aaa58fc41b5c044ea516229be8e886ff5527b5b244b075692377364869951756817d8a2e41bb8d6de8ddc6d83d487cf6ee59bf2aa924477cdea0c8139d523277f0a7fb160b07eed91c7ef0ee3290460475953415ae41b1e649f93f3d46c27638879d932c63ca81d205ed8f32e49130417ac65444561e3b041ca99b11bb18536a36d26b2f88e207b3341ac54b63f72088a62e98675540445762a20eb13571cdc110a6822e249f4ade8740624a3471d9f39fe76b58e4172e6f1bbd9c1fa324dd773480723fef28e847d77f1a879c683e2466c53f8bdf1e8d53f7399dd2c9851b5b51c1142e6942ab90365d15ce3becab6cb7564c1abe8d89d51cd33c50c64e389b8605cdc60eb237ca704ae37131a9b315b7e2d177ea7802c133ec2f704d1f1bbf8dbcdbcf40457753d9bbe83313e78abf6b28c6be10a7594943d136e2482c8105d9a6bc737c922543459989fee7d62a9a237d268f065336e2dc36581911c03c8c869c03b86977da65efd22b9a6b5a67f1c6ea6a332fa7590a4bb39eb9672cb0279b8ef8cfb6f4356acc90c52fb2fecea0f2950925c6b17869ac09a1e1897435d79d14d0e35928764cdb4f2de68609bf27b802e2a6993f739a3a93209659838676271abbb549e6966fcc2d620e0f333b94eab736576fcbed9c90764090d403b5e0ad574db3397a7446cf3ed5a972102d2a57d87ee349c493472819b62d3ac1db34f997d5b3c277e8d08972ee30158f84b42711d583d6c5f865998f5f503bb716c4333ac5bc5113f797f7cb9d241dbd390e16c528adfaabf7a8e189a44183d8256f9237e9ca29d9b69a8531c3d2e8dc41a1ec32460c24fa7042872f26799fd411f75c8eb64239cba4860dce474ae8b761877ca4647a15d4406428ddd38ef48e7ee807b1f018ddb3350055bb185a8f06bae0d26db898036c55b46ebdf5673103f4468048623dc8af1871bd595569aa72e35c244a7bf85980739232ec34fbbd88b804bbe7fc1a5131710e6b996767f0209d635d486824a3cd53fd5cb4f41fccbe8586825e8033a86c2de3dab65319aab8ad23cb7b55951a6816afc2d65ec0d8fa8c9680cf46331517f06f8d2dd8b4b23da4ed7d521e5714fd300b60cc48926614a5c021755eb43d2fc3d6ab802b9624265abab8c8770fc4128ea17cdd2bcbe26ff21706d202d5f683be536705fab17230dfe3e203a8cc9d36ecaa498b1507f980d933ef68c43b7cabb5e3d33021f89e378a2c4d29488b1a317c17e6343d28495aecd8bb15e8b5da10596a38d06f68977291154b99dbc6c8900e247bb981ba94b953c4bc6bbf65666d6f279c0d305b5261617f6e8771f4a218674628aa5b11f011f31949386efddd24dc88228a6cacd5806bfec646c0af76ba8ffb47aa3e648e108c96dd23adcc091c0f8dea5171d78435e8be660201b2a288259ccb1115cbc668eb730925d814171d37ba25cf3d4a5a7fe6f822b6a4a8e040a7fd3338107e4c4f07b5e17c2d60eee6e3755aa94de3691742c91f8440fb625beb77826c6125fbb1b23362599ccd7271b354ba782a91ba5c80d27323f1125bfb7624110f41bc9e7053aee8aec5dab432d9e9f920ba7a9fee8631f35f9b46828ff3e37eb4cf2a342305581a28fd909ece0aa037bf8d968bf9c236d556bb471180febc0f47141b37fb50db00f1fc318695424d9ebb0dc8844053ccb7bdd132828dc01941d18b1c8c35c87a3e140e4f2d48f9b8457fc7010eefbc32955311aa1e567836c86778e7c0a46f5d8a1f1d5cf42e001664a34cdfceafed2118cc44eb3032ca53bc562ed1e27304ded8b6111b295fb0f8636f517f0cc818f19839f2a92d701827945af6bbad661b07400762754d64b0bad306ad01cd09b89a9ff46dafef8a1bd3e55e6b21a909b67475899fc13e69b00ceed701cf8f17f5e74e80f9d153124e58084bb140c302aa31c2b47aafd819f01a25e283eef5498b510412a8221d4849aa78586acbe0971c71be7392885ee25b8914c23eec29f6eb6d647ea35582fb64a282a48f3a83145cb242f16282ca71a446f74309fe91edaf08f94240579f83d694b40f9a2a2d071d0cf67c5ed2f231ce4c8384ef28c63452f22365d44be0b59be33afe92a04b7ecd9807c5f7304eea7d3e22449e5091e65c3274735d494acaaff338af2d32711298cb22d3ca00f49fc3c07a421a7004b7aab5d3a3ac987f1d4de16f16e2028deb7a31ca73657899b08c3771742ba55d765b56b35c72edfc0312077e856c25c81d8e3ce8360da1deab397aec51517ff0337a86c66e6a59c5d100a9c52131279c596d64601fbf8e0c1f0d5c045f955feb9e6b38c7dd71efe96b4e4a6e6b75c781d41b01e11f59541ca9e2932edc3c6bfcddb16ebf180747f092b5ae96fafc600d0263d7d5c4796ba1aa1d96a170af88c8ad606b1482a0c61163d9775a5bc79e9d8e750a78a778fc65d84f4e85f0ade514bf3ef1807189b3950fb19156571797358f7fd30c02e8637c7c559e091e47b45814eced18807aa4dbcde81eeecbf9d9d7dc7f4a6277539211827c87e23647a04e52e76657a189bfedce9091fbfa608b24c9561d86c4767674d62d2422b629c28936e7fba6366fec49132173c007b0ebcdf2788fa3d2c4fb485ed81c6f082bcbc86bfd2d87d9286d252568ebd6c6f3aa99b24c5d8edd1201921229899127e7ed227a7eb78907b94d0523689056881286ebc62b863bb2fa33fa422d81d5cb81139641bc20b7867e6bd7f86e520e64a6a07c198fc671a63f2ac9264ecc3a27a6491aa0b7677fea236960fa33c438c31132737c570093af0f8fa252c4b0ea3f6119e02b353283701095da40da25aa43bd90f10fc8ae190097df948c146e5b16e7a67a61a1d9d62716ba7671e920203ce5797c0b166e62bbbf26e4c64dc87f8cc86733fc5cfe95af0734a028e29bad024e0a557651e5643f698abf0b0e0bd00d31237dfdb399c309f811b670764873ebb8415b730ebf0bc5ead49b63e8cc599ccdc844722168f11cd1566546955a1572c7f8ab191073a9fcf18883b2100397f279a72bf9a7691589de2d352243ab6150b466d1be4edaa245934de8b4492397d060cfac6dc9c635362fa4deaf267b23021518579ab26b0ab58688f282d5d63c646ecac187447e8aec6cd21bd4310801fe120706d7d1be05806d6f65c464cad8af4951ebfacb893442d3a9d6503abc4883e4a5800d890010fcc656665dcecf43551eb1e9b874304b5b2b33429d694bf45a5bfa4d64c39b290773ac08c77cb65fa36e3c7d6ea5ff242259fe13a4c945ee6d90168b1d345312dcb4b5c049091780eb46a6351021c2279a97ec4eeed0cfc38937a4cfc3bb3832b8af65ce2d9432ae9a446f57aa8d3809a81de72ea5963ba5f905cee0b50706964d318d192bc2e2de34e5b190c37f6ce48992bdea43ee937f262b5eea9213dd81c938b4cf0b18c6877e20b26750b9645177fbc3e7b3152ba38b380edd92578f756484c217bbcf48608bd26e33a23a882abf191192841a697a50510269c94b4a54924dfa7baad52f6bc1e04aafdbc12308195e794edecf979370544b5073e899f201b784302414c4d41364ebf647b18678322b8c1ccc45a9bd468eb9b973e594ceb376b32d3a1fc6234352ada830f2e4c72d87a9d4e7c62e4a0cfa23b6c9340a0cb14926d56c9dee25132c657f0e1252621517f938b942d25c9e545091776e03f1f81a2a87b8842150e3c62655b102d5081a724f81ecd3e0138f50ef5f8c4c15cfcbacdd37396084001c8426c0c818ce7ec5b6c32fcdd725e09b211d4bea26c89905747a5547ac1f930209e67735dc9293d4687bb62f0271fc13d47ae1aca4d878f60ead9d51dea1c864526c80693fcfdc64bf6f16476af0ddeae8f5cbb8997072636983e60d97785f5b4d34100a4fbe56bb55bc1db998fc72eb5c604c410bd366ec2882f4a63d30e3f96ab8a7b95c2ade681fdae2493e5835ab46c73a268afb1a24670507774ddf6a1a1ab3bea1a19154346b1c73c7949c08b56acf54bdd162a3e57c8ec850c891f084f938866027297fec13fca0f8bfbf1e24f84fadea3e4c73e72f597f6bd149d0061f3a87cd5bd1185edd3c02188303a8346d486230206b3f2e490cfd4451f80df91a1b0b8a32e21d740e3c92b736d6fee1c0877969d00bdf7a3438f94f0c58e84b5c219e72139a1809bd856e14a30d7e0be92e725cf9174693fc8c7b0f61d96bd11ee68ff6705012601d1649ff2a8e39986d0cc66346317b4372536be080cd00279857751175a3321a617cf6a92002eb2f8369a5d0588bb6e29b48368006353c71940293a0865a850d31aea7ebab365908cdeff98675248d5ec5348e9ff635e8aa70fc96781ca6911b1a867f7bbc37274e726ef8c61b9b477cd7c8b67e93ec1eb550332b2754942ec0b62bcbeabb4f63d50c1761482bd256a48d84f995328d097ffe7c5ed78b3e665ec04e473f0b2c89e70f356a6c17b34a751a3c0f21b3050e39b83508203f0e4bd9b0bf81fae94d2a4dfc03a213565ded5ece55e15ef1b4e969f37303cdc3182a3b12fee42ac55ae48d50eb17a7469f59d6a044aad9afc8191dc6b0cc44cc6896d9a93325c88fa5ec85d1946ad84614bce226edaa1a0cf7b465dcfcbbb40e197090bc7e3374807598e7ff383652951d761a3f5d3a8616aa8c9719cdef2f5b97ea50a2a32812a0b41fb28732e64ee9d642bfadb558c7ca62da85874070adf8a20cc28c24a547814d757e5089aaebdd21c34fc4bfd19e8ee089df02ddf30a45aeed10db0df743f1fcb21b6f0158a22c8ed7bd5ba78c72ae6b929cc0b60b3606afd960ea80300f6659784b5299103a07864094939722631bbbc854af061c69896e2a868501f81efdea8d6d9ff74f2ea2d1fc26bbf29b048a9fe73ec3798ba8cbb62b1e8901d9ee7463a5e73d302554aabc1f458a0e4ca6b3d079be9a4988657fcf9255400a4e0a18b2bfcb8b52018e02fbe60429e67f66b9f329126d9fb66ab2ae00a901a93548b8c161c900f5d3c2fcc57077b58478b4eba095e2256a61220fba90ab12c38348000490accccca51dee057134763b9c805916ad11118a8bf16f8095469b86571e11434b9063313f9752e6598f9dba4a5ea29b8e43be97ad8fb80d1df0f7dcdaa2312d74f9cf85c139ea3b573d9db6645edc290a538a4c3b2ff4a5e850fc872f3eb1b7985983b8d7d464bfcbcab2da87aef8688f412fd52d6908db140ebb82a20cc99e15bf7b54adccba1096a9940e560b1c1bcea92da88410ca408fda680f3314d054cb970c49ba61669f469f7090f36e13861626fabb88bfb880a0df877fd72a02739baa33a0d08ea5bc3111348a51ca586f1bb28b3b7e3ad7f28886ce19b33ff7814e48d3790ca5a1fca639a3be4a7a0c097991c92481987473153bb53357f0a6bdf4e42706d41de3507c7c19e2b8a006002813d3bf1c476bbfd4b8f60ab89efce119f40af237f71d74d4fdd7f82f3fcaeff45ac55faad615e28c98156b279f538aac8c6fd6d41868982c667f271c63472ee3b1e749d6bd42ea42a978a533050d2d0d053d4a26142a47b40cb9b875368743a268ab207b634efd4528330916e48ecf0deb55aa5dc2c74371d542edbe9420ada59e44356d9a587f08051b3c6be788cde6380d927d9af3257949ae01ddbc529855835680f3554c2812bd99e0828064871a6efeb5c2c379f3bca147f9806d22eadd28c47f95cbe440f6dafd6d36e3bc194300bc5653cd9f17c07805c6ab7865260517a0c7ccc143d92c9e9cffba49f5657052b6e2848f0a951be6b663bd120ef9a8772260df36900b5f31338f9f2bbb29caa69309f8510c05f7587ba6715113cfd71c9714e9562c46eab3fd58a59a3e459949cefc6376c2d4a3492e3a9e99130ea3784cd06bb81027572b99ba7bb96a037f983a017e422c305391ed4a63ec3061b4b32142890d23564bec727162ae368e7f72d40819df1d3b29e6ab6742f76c54e7c78fde52e58edd262ffdc71b7a6aad5b09ba1edcbafeebe3d6757f8334bbaaff5284c16b772c2fab0c9101da00a974f8f4a5c7b1b576d868190c56da5ab65607757bc272eecfed54b54e4bb5cc9b82e002d343c812a103d9496c86e5d0beebdeb4afa045dfe962a79c227fa2ac32b15cde81893db58a2f40147753998e6bf23ec789590139949e6443e14106f1bf7f52675d0b4f59736204b9045f5cbb23ad8e29dceefe6d097e27064ad0dbff5184982d7753ce2950773e525f2de4e40cc313206424d3483f4b64a843306aff03620ebbb13bd23a0ddb4c64fd4f1cb796e1a7076beaf8b3c47cbdb7f8622edd0456aedc131af86737b920200564046f466dcf662e13b6714ba2b5db7de021247e39102fc0b4b804cf922195565a4f4320808bb192ddfc6a5fcc6a4fd4ccafe1d1e928157fa897ec0597e41a14bb24c8bb203b33ea13ae8fed73c7a7d7de270dd8646e2cd8095e29741102ec97baa6d67f94faa5066c899a47173928827da12aa920dbe2aa1258b817425715dd6c657440bd0e0561ea6c1cd3aa7b269bec9c59e1d7417ec13672b717109ceba413b140e1778ac49a7081899bb6d41cb1769361038443d7fa42d4ffaf536673fd36295a770e026564e43aaebaddb25e31d8ec6128fd837301a7354abb86f2dfbbe39672e143afbde25e30ab38575cbab51d2719ff1b903c50ab3455c46ff647121b19fb14159c204a430c871ff973ac6f0a30998cdb3c313b4c69bb067bd97e8e28cdb81ec2336da226ff304c11921ecbebc1cc49e96ebbdce4992bffc58229fd02ef5aabc28ea62b490a0c10d9ad858cead2c8eb68517414ec035e67c4c113c6ad00365af80af781d44ef58504e9c12d0942cd25e7b2550a1f12cabc79cd1977661feb02d0a5a73c90b8fd9f2ecd80e92e058141a6a66268a6f5445d046425643cbaafb4dc8e713779719901ef08fda0c2a5c6086b9e759f0b1b81b3a77963c6a4a2184d57f71b8f136f0509747f8afb4269924bcf821f6c28f5a0b0582551643286c9cce381eaf772a6add69bbb9fe3d23f5306585f84f06a19d1e4dcdc10f0b3642bd86d7c1e745c039d760760eec4290bf597de060b64e23fe5543c9a0d82dc3759a71804c491930e908332f64404378e3f67df8b4aa428f5a3a358fab360bf5957710c0bd50c5fa534ae894b30e8f14c803017778ea1e27e9ea4a2a263af551c07f38dcfbec2a0efd3db8d584ccc15b9409c94070c0d3ba4f0f1d9ac44cd3af504d95a1d7933a01d496c7fcc172b45cbda14442aaf8fbea2b34179101f8f98a1a7a98ebd6565e316782f96b8cbf42d7dfc2a48ad3acbfbf2f5e48cf8246af8d25f87bf2819ede0a1582046607e9995ff6198821e37e915b5a0049c97ce67fc2dd67c489e6fabb2243394893526ddf520c319031b367ddbf23a51a6c3b0212c49317a585bf8049374b461d056494d069fe27d796f6d88865bbe4c017206bf9a54cb9ba40ff87058e418c8aed422e82ad7a51b0d0f59c7973522102e256ffc502850d16b5a6e0d17b221212d7f9910b0d577220214accdf2b65e1e6fa4d5b1fa77caf8477aaf11747485338dd573f67c181ff2f83d225d3d63f9f53b865891f3c267e9b0e8303f48c2f4695f82df05e7f94475fb29a803f0e1598089048136d48c605f06a712d98dad23120cc3a699b51b605f9068393955ae32f689ddd0026bb7563ae0d3a6173899827b9219f7ce9666add0463027d80e4c22adfb65d2a16af6addd9c1800dde33029be19e1ef4e8113f100a75c434a0936b0d76a6fb70adb8c79704b156fa288bfb5de98bf1a35fe74a6248cdf1a88f21975aeb8b63c2f7cbfe6b4b0c48ec1671365ebe7d7c7355edd854042781f2935d6c64ee81653c2b6df6c2c44ecea4611da107e931a6a0ff02374cd8fc334235bb6daf3932ff803faaa488134021ce857a8531b5a79038991cc02ed48747646f6fba99f47fb1148e06fc5c8d9f565743068967f9c79caca21ec2d158ca2864926af695fec5a4a8d59cf16c211a5806919bcd4022c6a58ae858b6d2345d734f70525a66109f51447b27117e37c0de7150e5203d7120847449e262a20e7489513f189e4d2dc6ac54d9e3aab59598e5adf61a0e7b5207c5b90b33d566fe7c6d499585a918dfea4cb04b4802a0a231340f22f4752bcc69955080d0c23cea893bb682377cccdb6f55ec97b863231d5024f532727a5bdba50888e7e109bfacd7410a7bf290dd8601479212a352011e69bea80ac8c35a66bad0df8018411425baea6c97afc1a3201f9e6ecd4b32d712e842eddf6905d50b98cbe3defc87d73fc797eaa1bb00b56f587a111370cc4b99cf17ee0cf144da4e4a7aedfff8cf5ed73b0d6353f4b3cc27db8811d87084b5eb15a97fd8f425550af37f6f4b986fc2057bceeef8812ed0647e43296de8793a1a484a4c3ae1d216b9076d5f94449a8785c02bb822993d26f166ae85a47aedc6d50f65e23dcbfd1987abb22ba3222fd1ffecdc3bb8ebcc104a0d5719ecaa85c1aee6b081e7c18e3b0c6c34a6f5d45396c8887b54957f8b96286b1bbc5b07625e71165c56f73ca6006d3beb4f375ede9c962782ddeb4ff4b5337d2df2158587e16dc263b4f446542397d08e49f4ca27e002966ff1ae187f639625ebc2f2dc3b82ca44df355bba5925837483014bd31650b1053ffaea45b319953684f9198d8c6a247ad269b02ff33504b8d4c155278fa15c374622605ef5ab1abfb4df142f1e79d13d7c6f5861bd2dd5a86304f075e962e20f28ae40769ced005716c8dd5308e3eea8840101cdc469ecdbc4eb853f28cb3af7221763f616f9b90ef2ec2b812c258cedf4f3807a37904fa4bfcea58e50008fce20a2b6c2b09dacc76b6bfe95f53a66aabdbc92cc90ed1b74274b8fa57f3afe1e28dd23ec875b3f7ab7dd4fe293d5ada7210a5113e244966cd5548081e79aaeb377862d884ad5c353cc68356b6e34db18aa9c6038d43ec2be466c63d3faca15073a009d356702d7fa6c1df273e54452f0670f0f41837549c12fbd2864e26f1811297565cf0820bc3daebeb6b3aa2983ba6f7f9957c6c7f8e53323aa96f20b746931189873759a3f91fbfa674791ee6e926e6a924f3cabf30797a59a1f3b6b707697c5df6fbcbaab847599aa73bd7e45cd7b4e4bdac7cb23de838033d69c7de54897d6453a2feca9298d0b901ae20f0c0602b0cb5a0161a9035bb5f532ba70be16bb958cb0e52316c3e0113faa8b942f7f8e090defaff2f1639abf8c564891d381666a42ba34d80f6db8ea54c51c8ce84b5e24c53294cde85bf1fdd767a0e49d508bcdca3956d7815311ab5d226bf71eff960b60ad2f8895d5954496520e54337e5899aaae9b00beb0037388e5185a4c97ba7ff10d699143a9c5f2330391a47928730bd779d524eeafd2de83e03d34ac2073013b19ad9f47c543489e5d930d37717b217cf91e4879b6d311b62aa6176ab04d59b57d51426d1ba7f3fe156a8e21907908ae4cebfd91aefbcc198042e538d77fa8d5d063f387e6c1337ac1046a6b3e9650a424a2dacd522485ef65e940d1ea74e1aae3a2ebef884d21d43b90a97d79e78aaf71c4b0b4e7a26099902ae4234b84d34cc7b6d1c102da6ddc700e4dc679a9d41f150683dde3f6eac623f1f9b71442fad8e65abee178ddfb688c3344f95edb8e21e2ff34236e438a33c80aef9f5dc8799f22fb92bfbe72c98b2834d008c3923b2b6e8b50f2717097dd1b1ef38d11daef1b123734973ea72d23ea2a35a6fffef1f75f4caba47b5a065825755c7f4570a97d056fdbe8a11e574a378f4288b7dc783fd0bdb70005c830b6a52162dcc7fcb35dc2d316c5877c38c5f8a092c5abde59986519947f207366a47bffa5989a5c374342ecbf6630bd580cc1eb42bbdea74ebf7f69c2d9aa30755b9500747b42829b184dd84a0b2d9e26f86dd98b68cff0897fae5aa4e25cede874f262680cc41dfa9d1adc354a185ac84f4422ced3ed7ba43bd9d943d94c883170742cc08bda4075a03242fe601a75ad0ed65ce54848dc4c5251b3277bd9fec3e3019229a60255d3b650bc2c766551380f1830b9c90642cb8a3b3b78dc64e0d3b10c4197ee23afb22014b6a2f470758253216ac9290f9b5074fafd5ae4a770875d5c29bb72374db653bc03e6c2462bb490603ec6fc7ef1d38f1b86572a8b25fef3496694edaf0368bc83d6bdd6c1b3fdb411a1653de7d006163996af73cda1273316bf6015405f1733116d6232fdf630466fddbff488bf97ec84bc565c7147ccac22f7c7c10396d5664268846127e55641b8fa7b7c7106691eb3a43ef19d52fb3a1dba5db715421255001c9253fdee6782cca26705c67c7248ca1ba83ad27af796472680e4f76eb0d0188d2a4a7c11d2996acda053a5ef1bd07c9b57a6da875bedb18e7b86ed4d21de95d398a5e49a6f8cf9fc661ff83cb40fdb22ad2a760917edb80738b33ee1fc1040ac81c1d7261c4f6e1101dcf579c8f6748d5bf760f4ce7eb0a2e6cf10d7ed786ae0b7ed0aa86b2625ce538616f6d712956502270b74399dc69a8e3d5f7fd1ac69b4bfe32e18d76e5d91ddae6bc67c55108b30e746ed742762597e2905f298800e65d09797244092dd14bd8825c4bb70cfe5cb4d7a577d237e157eca3e5eb5efe1a1fdbd277c6a7b2cf3a20f68ae92817baddac6c643206512caa0002ec7ddee35574674064c00912f377ec4fca7201a8c1eaf7653f18c51a00674b559a2c3490fd469db156f088d2dad7f45598ae128653444924ca06c77105eeb33daef119953e85c9b11d0f79a8158739f2d117b687704e2f764eb14402eb683a30d80eb107240d7a029fefe46ad94c8ff5642eb1cee694ae5aa12753646b43b94ab3fa50edb1defead7c4fc74db6c0f484d25791569cb59a5292964b185b205fd3efc8f82a4e4982600c0d908b79477df43030d6e94014284a0ba1ccfe33234771a7177bcb43ce5f9190d22c05aefaadf9b47776aa038146afa56c0bade080c707061f64e2848ce266f502338af906e77478c801898c0d51ad0daf47ae93588e5c8a42ff6e40e5fc822392345f3ab410d5c5468810ac76a22c14fbd6be053936acf429e19838bcbb886ffb0ee8b5b6778ee05132be92d0af2a82a47aefdf666bc1e653d34e983f98260302b53d115b3798d5d564152f2482b5968684ec33debf5e3cf71dc6af2e5774c8ff360205e8dc7256f9529390dfbc2226ae361ca0605ac0ad84431364a84673ab02f8222f8aa47b369fe1319c40fae7ad508a9c07bbb44a0a37c4a3693d67d2296e30b2a282e1cd7a4dcee79aedd4fcc5bab39ef5cef2982cd010506574731e0913712eed4bea3f3755f833f3ee3cdde75b3cce6f95c82f0da53b1c690b5b12e9f16b967d321e48f136fa57f3dda0a1d3b8916817398b3ed0535c8d16d65da28cd6114c30be43e13ebbfa32df74f92701cc3cd6f7cfec6ee4d079dd5bc09c070d09be30ccc861f374c6aebdb0ac9b168d8ca08e1888d132c5d7edede6920f3b4d38ed6d19a80ad4f340f771b4d2e01e927e81f435278a0860deaf4062fdb6074f92e9aa4218e51e356351fc1a104c171781c9549143b2f90c9cf7522245ebbfe26e280a804b76b5ccb2490bcf52fa568f109c3a2acd79b5d95f8be6fc00e1feede71b0016de90805ac592f70d558d56c582af3a1af79d315dbf97c979ae08798a7cef57e5e8aab64ec9c841c24f1f0b449809ca7b3cd02b4aa7bdfe1d9ab4f9f7144fce05ba79e1b1753c8b377bfa90bb28996ca3c27315e29d7b8ecedb8869ec1aa2f933e61a6fb5a6d786b9a0330e87d2909f44e20d61e1e7fdae42c97607e78a95f9667b75c84033986f70f37a9681421dccbbe3150282ff1a227c4298775ed2db6b3cc125489930cf65aa596c6ebd7bbd60bb0aa58f2272e7305ab7f12d4af0378327bbd47856b07b2befd15f285d46aa258e3bb556f89f8aa36c6152f96a3c87e2dd75e28cba4ca233b80531ffdfd669c24195f5bdac1cbd1342ccd68ee07790406dd8def417d04f70d99148178a586e682db0e5e1679e7ee5fc75de840d0c40aa83eb91ad6bf0918b41fa53be029d8e276db0158bd450d09fb1a8871371e32591e58b2025f2af4befaf2241fd39f7365bf957efb28076f1c711d097b568f2b0e253680417603f72ee9c191fa845f53a7c5015908aefa8589115df18899405ee1a9c68c03175899272c8b05a96a85839402a8f882c53ee38c1ef101a2024af6e36d98ad0ee3f7fe1f80809da646e2daec40c58cb16f2520482266216389a718ae3acb44da9ee8f0a6ca65343c46af528d0d7f5d066793552222d431296850623cb1ffcc7b6e5970c9ecfab55e0a77a66d9a0b71f53f7ea59aa7ea1aaeb3223921ef83336ce7b8a8bfc7039144edbd69bb29cc7ec9b78fd175c91524cbade50ecf3ef60f5e323deaa29113e071c4f556c4a2f732c74b034edb39935d1ce6350b7b3ec265cdf2901923129957587cb99a35409f7d7e116c4bfcc52138e762547362d1fa1e2af6003695b2d0139a51b37a4a977e6b339dd18be0ec647d44ab8ead8b8b504ebfc374f66c3114236fed0457e9ba55206a2030015e34e73f3b34db1147a2a9aad38ea20ec4833ff980ac2ecdea1bae3516c6fadd360c92a383a6050da6f669c6d0e228bdda1d0b098f466441fb553c287d59ebb62306c30a29f9bef061d05b4d23d36abb4e8737ded4bb23ff0ee323a654c5347e8770db152212519142d3ce240ffb76b2ad89d0c39e90e9d9167b26d9f575e1581312495495511eaad3a1801b9043c2cbf1799fa2f8df3a90a0f202a964c2b540e303eae60ec1f9d67d5551951b56b1547d1486bd5d238cb188ec507c82ac7401f7d4568e06c5a4e28856a8edfc9e4456fd1ace95c18bf826efe282c07f8c5fb684f0cec41dbe857a927fa09109e33b30f0d3824aa020bf404ba4d25c4b1bd238a4363f2756c46ed0bde654cf6193f2c6a2b3e52bd9005f95d3a5280317812ff8442d18c4516477f8e6683aa4544a57c6d2545c026c4bdb1b725524acfea1853d9405f36dfca9195bdf6f74bff403bad183d0cfe623e40eac30e8dc1ff3d7e897acc2b9a983b45276d8025641ad80bb539d40da87313f21230b6a6a2cf38fc42ce113856ad22188ceeef3c7683a74f727791c2646469affe661951ea27d2ebc783f632cdb7416316d4bf66f447c541e10391218ef4a558a66c5a2deaa13b60ebdffa6f77173ea3cdbdbc4e287f9bcdf10162106429eb0e6ef25a0bfc9eadd64f3f958f40baa7147453020d846849c2ad492df84b9ba4ebab0e5955e2fc85c7a12138c85595ce03ab6ca03f6f4cf82a0e86b157ae505bdff610c964144f019da91b7c0494869569fd0c930feb9c7da95f6b2e58f0e42f440a5fb829ff1a2e6929075bb8e3f55997aeba146637dd0588773f473f77c3c0e367171eb059e7199034e51014414aa87270cc00c027afe3371c43f6f5d1e8ec3e6822682ead18f9842f3c7b5ebe4df698ea0c866753803a47bffd41d94eede57f5fad4adcf534b36d6349b1c7e3c0383f354a5162ec9c1ce5947bb3b184ed7fc036507c6d810f630a52d562f4db090014a527b766b679b74382aaff146e4583f8ab0bb6f40f25ad34bfd730f1cf470c52eff437cfd2b0fdab0978b5628dae4690ed3095237fa60714d594b2599378ac2cf14f355e7cf20599b091599e65a593a95cc4d4fda3896a792649250e264ff78e1dc35d6c6dce0269c67c8e2f2a513aa9577e65a436ad8d39fb8a05798e85ca2e32e96cef28c095f0e54bbdfcbfd50cd5d74462f700a2e2cd9682fbf0adbf59fd33ff2ec5f33093b879ee52ae026fbc5434ce507c255dbc29389652e28f83988ddc86652a17af4cdd0078183899a79903a7868e342d5a1bb6fcd6681d2f5921717d7507d07e5bdec863a278a98704f582a05aa824b280654bf3b5a1ff32847b5825aa3f84c06c6824118f6c8559a00f13dc6be5083a5f2e5ea2d5ea5e08cd5be99f7831a8b547eb83da7fa3f426394e94132e1ff0bafb94a48ad376322206a49327c9122deeefc8540e56188246964fcea67df93e409f7ea22dbb825287b689f8f91ac26d9c6dd7f16e1f9ae8cacefc77b213677562aa0d9ed42fd76226dc651b87f2e2f94c51317db13bf532e9500bd581cd0c78586f671dd345f968004b31b6ebd36e39778fb458961f7ea1407be716f6694f2198b67ee8d11d5b2b7e6a18286b5e8287ea6c39da3a2b9a4d3da524652ceb59696df877f90d51a2809fc410863e481fa598e62bf7b8ff6ef573b520485057440a584facd9c5af3829dc5549c581a9cdb9d43df9723c946f5cf78b220e903406a93e74e772e66353078343507fcb9b9216a8459bcca55a2581e168e0396d2b060280073dec58d722a57de4a123a6360aee57d04a3523fe6f4cc310d5dd62745a8252b2b00776a804bf547cca7536b8cf05f2f6c94d910b7911b77b603aedce01b00625caad26390fd7d0682f709c23e9242295f50f4fd11389b30edabda440d3ebb88e762d68188dc7deee934f5eb4cafbbc61d7edc3b0be4c4f12dec5147fcd70afac52da5efd04fb1b3c9b907e74dccb0d61d7d6d6ea4aa2e89acb5a4e66821a848ffbe94321edfe27e06425925f9d05127f07ac788c5154535764992c745ba13741689d37f9386ebd2541909b8d5beb712b737960f336d00d54e5965aef2fe566eb91e4999dc6d719a874f72e319dc1cb3c003f392c98744451f4b2ad8df1e326ec1f3741fbe35179eb307b306dade63720bdefd3eae4e4ad60639b99edceb925fae9a96bd813692c5d6550328ddd2179f5983c149e2c4ac855005208ec8d9857d31a0b27913fcfda532d2c931fcfc0e5e97cf2e4855ee616c1bf0d46a064c79ff0bc6f0039d65a5aa425ace2410affd0d58db9c03af7acc96ada4f16d2682bc13f5fa7b55ec2b3514962e6d31e2dac257b21a9cac5ce89b5eb56f8ddb809167d42cc095830e01bcf56f8f23e4d40ff93b779d3b8a76964777aab80cc667fe1c2e12b32ae25b2beb3b1d01ae5f3f43a522b642248b4a3e166afaf2b6fdde4aa719f8db63bcdaf07cfb96596f8978488e87b55a2ef668d5ffc87c94bfda6913e7dce3d56dcf2b62fc8885ae5a9fea98c881769e49a98c00eb00f532123e950616cf276fad4ee9b3e2731ac19b27ab61bef88b6a1442cd5f14ee744d2a252626b6561a1d1a76ef618946381a986f44df7b89d64f12c52f129e174e53bf5596b8e54c6574d7e63fee3410997c01c8664bead6c5fae7a98996b12c7d5829bc45168d6eeda8c70014d442b56bfa91fd5c4a5ce6e4d641500b1fac771321a2a4206a391351b3d1a0b2eee88c67961e9455c16eb5804fb9ac604509806397cb8814ef5874c231c648b9e4c05697359a63dfddb7ea549bebcc2d16ea3536e4a650eed7e8a37afb1ebe3adf3322c5a29aa9fe56daaa7a09a75886623c20c2eb52062656bd6caae18c94315713688dc91daa8e3e8d913edcf4263766efaaa0e15b119b6f582fa184ca0ce13ae67b648fbbf082422e197549e405e2d4f029895b1435049195ac667c02b278718a0795c1facf53fda6e6b7c3d0f980c4ecc9bb874622ec46e5380adc886f2910e90cbe568948198e2a8bd0bc0f6a309cff8172ebb7f162c98ba84239ed446eec8eb2783ae991a6d20e00c20fe667518ab603728a885f22b821d9e8c8346ca3f1c50c1556f7b1982ca9a5d7246d62622d4787ca6a31455291616383922380eea7b56ba75de9807296a758ee5cf98eb09cc87f7cc781de9b9914c5b4f3e6292cc25574381eda4e2616a7c91cd603e48a01ae255283941cc3f05e1c042039c8a3f5233da141015688e08bee45b48abe12391fa1ddb38fa647e3af13e928bfb96e0a2b491181ea84d4f49bde1f8aa8fdb5b0da52fe5830cef77c4b9f49e76e75b06e9468ae38d6b22d8969ca9ae737d37c607e9a251590bd8f27275dc84ec59027a537a3f8d2f54c3737b707ce21352336620ce6d4f916e2e35f1dd342595b13efc73055ca3988dda10c6510297661b8d4dbb8d7df0c0db703ba7ff781239342f1a871cfd360da8b0a54d03caf119c6ec960200ebed897124151c0447dbebcb2e1307f0d46e0282c240194a65d13581d9271981100467215025be4a5e90451e236cede95101e8f1db69db001117785222cd5794da8b33cfd71bf0a9d6acc0706dac62a5fdede02df00be5a71c804b4674522eed8f14f4646771d98b1723cf6ef06ddce52b9345d9cde94804130a771ff34ab2d2e672c0a8cc9f899ff6306dc33ac7309f726f0776cfde52f7e9bfc8295409dce17192618ae8f3eaab6c6830c6e64ce85084e057a2baee7b6a1fd6b3be55ee32468b6bf90017f34238c8a422d023518a04f9647a302dcb4a302df0699bcfcdbd7e1dced8a1254211f31dfa6a49474bf9896f9708b44f496bb21967535f0668f8017d32490ff24851635ab536c62ccbe46546f886c3f13d9fcb8f7bd3ba66fe9eaa0462020a593ecd0ccd656df5be85818e10b64a716f1047a348b0ace877d58116f665725fd29e7dbc262a0c8f83d2eec23c6413ced7155b3b3e8bb6a9923c0ee85ac53d8be403ba9b55dd3e4a0ab7f1d36de7b6dca908bfa8094fa079ce147620dc380ccfb7a7abfdb45d1b5686ff48f29c49f1fae70748352139a6793fd124c3100c5d22accb2c3a71d8c777dd3c1f7f2c1a5a7e3303440131db70c325680ea5550dde49af32f0b617c1f1c6cb842edb7a8d472e9b0d7c69b023c15ecda938e8eef2bb2e0d7106b85dfb23269119201ad87b7df4a2dcccc0309e69f337fbdb84c07aac63d7b07b4df87298789d290066d0d64d1f17efac0ce57b339245306fda3ae46af25fd00026acea0aa94f003151fa5fa7c6ebff7e9eb6ca9e0780772d5f8bdfa40fc69786249e934fabe85ff210dc6b9a5048d2aa99c315b266d3d8983908bec508957cfd43d3f1459e5317d043401675ed04652de6bd2948b53404998b4ceee3e13f0522a12c202e67d5196009277ae5f376ade84abfe3f7c3e8c88e54bc5007a962cd1aa3f750b224aa184fc1df9a238b1c428235cf6f454db5e2917962a279cced5a4b8ee28260e2fc1889baeae82f0cf93acb3623270ba405b28f73c11198e13780ac59358b65610a70146608b099c643d626b2973b62c66c51e78717ab45e185aab14855bb67b916cf159246f9c5f4af7f2400b3edb4466b73aaaa537b7d66428f286330ab60ffa71fa6e8ec83d94ad0ef081c4ef27ba2ef506fa2fb9f7d5651d6b7b482746bd6f49458d7025a1c7be036a140b6b76cd325069a60ba19ae42bb090cd6764bd9b5cafe05b7ce2a9b53dbd59e06e01afba6148fdf0296d8bc900d77c40e5db227dd8dad25c04ed568aef1b7d7ea4b607b0fc385292326e982c7fbf5648545374dafb27c505fdacd749ffa72729aaf33d55f5a20e12e0e45979cae827a91d36db0b890933752d50dae12b222ad8f055665257747d185869ec5eef1fd82c1e812c8641ed1bc06525b8d92a8eecaede1da5bc6c0f3000bb928d08d4557986fafdfcfe1bd76446aaeabb8de2ca44056b1f6cbbb51cedd2836386d5c721e18f6f347d276ad402ce438b2077432443af8cd52cd1e78348917b2b75e67bab276f4860456f40d407c5c25ec56768167a86d6e5e7e89bd7b78cc821d72838746882c59cd1c0a59b4df6491bb1bf98dca651f6f5b43e92667b0745d5bbf89474aab8d20a8c61d457bac2798524dd3d6ca3fd362526d6741fff2c0c5a7e63c75a301839b86c576de244fefec4a86809c5dee6f2424c3c0959ad466870e5e47d72b9a4457606e4628b328e24cef8c396ed5013b04a2fd6cf60d6c3ce0772e3e71f4d161d89485f578fb9c93f67d9c4e9f669167ddfff0cb7dabd560a624cefe9c532c2ce4fff18ebb7e8ad0b79457d0c759e96f98dabbf8e7fc06765a3c87938f6b432e9859d91d2831648e5dfa648f6326d4d212ece6344b26bbaf1db9cbf2200087f3c81502fe51c6c3e531f007c9d380282dc1aa907c82c5e43310eb4a28abf56c82af86b67c3ca1129e5ddb6da31e0f47af9c8c52fd95811ebdca78aad93a67e056d0717a9d155c2bdcf8e43854e6b31fb8600a78687d295f212a5330649b1685c4890fc383051205021b657bb9d592a783f6acdd832c0e777755ebcf0f3d05901f59efafed462f4f3f4be89780a6f83508e36eba056a8816050a04ba87be809098e37fc07c4e13345ec7c4e9ca9cd4771c9a4843e1d4128172bfd0fcb2d609ed943066418f25163203448de29b284e505d3878bd7bf6bf2920f021d917de635e346db883433cf5a8e3fcfd33896c82f519120f9bbae5a81be9b9db0da5973bda611791280d18340b541e1e3ef59579226dbf9f856b61e9a286999099b019e1bec2e3fd43e6261c0c98d78215de0375bf054ad885f1ae5353d80182bdd79409ce469e1ee4a9f8f627df2d52378b9e983aa4ef83e1f821dc5ef1be50e57ff7b94f0140886d1f42b5656d6a4d37fe7bb7e6a076c2f6b1a037b9c4103eb692405dbd4ffae8ca209b370a59d2d3e9ab0d459abed43941a044bee701a57d424806f791a1fb22b045125e243f0641f8280463f6b1f8f628b1cc66cb657cf60be15ed93baa9985a0875622c8a281d0442527c9e3016d5a374bb95544f667aa85f06a4efab9033d9b1ef5aebbd31b8dd8ebe7c1e81b2f07c268261752088956ab9cbb735490cd21df7c4e938263f6d7b31efb645e2a2db5cc92bfffb9c2ae47b8e73cf08fd03f399017af94584f0959bee5550147146cab33ecb1c4f2da46c1c371e22a1702c926fe937a1bb4db535656929cc6a17db2c4f80b513318a3b99b67ea08c1a508413fcf3e36bee61b5933dcf348d483bb7f450eb898b87896c54b0a1f6aa0f7bcf7271368c85277171b598fb2ff1c8243d94d597ead8cd4d119eb5d4126c51ad52151225d7e79ea1ed41b65c44cac828a5b63e24dcdadba5795ad0e24fc317d6d8edb56c3117b66ac6302e47f3143e51aa603c1ef142eac78f971a942b55562c341cd8b72f6d04ac9f782855fcb7331a891ef653fb8a40a18f102db17e73e5a7f8a49946bd83e74c6d8b2bc7cfa9bd83070117b9660c08220ec1ea0f470abef1f53c3e32a9435e7d679e98f579c034c805791626d4aab4b2d5d8373fb3e5190060c1ec5dd96bfbfc343fde5b4d8df4574bc7407da05ce56b0293203140579660e406314cb68f0853e1fabaacd9f1c794e53661af2f31b5b8ca0a5a6f93ff6fe1ed8402b5422f328b0f144a3156fec3192edb059d42bb0278ced169605bb324ed48732786d6d0d4a7ad93a872c93379ffb5b4f54fb4615e5ebc5cf4fcb2809def9a3dec1907e0e6f7e8390a79fcf16f66640645fba5dcc63c4cd0ef0e346ae9e62d34bff5d6f9fe5761765d76255b35bc77d1fe1990624ce5593b98a17ef0448b4bc70c36cf3de02f6f51fb2bf44ac18a1fcf86f1c4a24b0ae3c3129aba760dedf792af32cbb97970b0a1da41e924f6449ce996e8be2f0282e5e8b9f82c0a01a0c3f0a967734685c15045d669802ca46367cd0b3ed70ee92715e5b6082bc4862214c0dec4660f47b4b498e8d28c856d74e0f77fe99fe40d4578ccf4f6b506ab775e788cae874e5236c73b7b216c48c5ba4eca7bcbd7df97da43aa66799a458f8f79b29de1ba004ca25cf5657c0c0d26ad4a3c9f7fa4e97c5d012d0e6a32d62e410a48ceba33495e71fedb61fe122c5fdaf7bc58e0018872f96842db93e1aaa4a44a2435a569d2c78b9d8c8433565b4d87511449f8adb1ee6f4d4b95a7f0a27907841a3d169cd79c6959286e754539907e4bf384f5a15b79723d9467e0adcd01258d35a6157d372fdaac6cf536921423d56ed6e3a46fffd2474e1d798fd79626d5209eed63aada9c6b05d93aee0d0d3886691f6decf49090332527c9bf0f055a631c7cb3f4b54adcbdfca60622b29ad28ce8ff24cc09aabe1cb4825e01a5369467e91fb69a18b0d4c1e4aa87767b1065b73e4fc53e55adb2e79b64227e826aad41975f10cdea88cb86ddd3e1175c4a19f74625b5ecee8d59b81969ed1aae837006d2f03cba60d5db752b9a0cbd2a4350408c9b0e01977e9368896a7b9ca8c78e816b6def34c26f6fcbb57cd39bcc9dec13d0a4ca19f1a94d9e26bcfbf1ef87655150b69beee7d0ac632d5e825d1bc5fa399cf782f965582fc8ef450d474f2ec0bcbb24d58bc02bd710f842beaef44688f02cc24de3f60fed9ae8a3b23a96742fab26b4a407636dc0fcdd0de38679279f6fd17da3f55cfe560d431ae395dfcca9c14c8a98ef4bdfa127c2d56e80b9fb28b353e1aa56339b43324c87e04f76b283cf21045ebb5284f606ca3f07c64e0e1a3a7fb8f2e0ffc7d5bb38194e2db57b864c9e9ef06fcf67760a4eacbd8c7b5b3839128a4dd737785ec68bb1ee7eaeed071cd9698a5ad6eefccce9966cad34216e1f79cd09930c9f2557f64868e0d6a20b8629fa3b6367f0ea01937169b937c82dc582b41049a224e0a8f69d0ec81b8b3768d2317aa86492b9db361bb9e07431aeb3487a485219164daec9877a101f849bbebf8f04fc2523d936603e38163767005b629afb2b74d1c414f65fb6f9d1d374e06be6f0c197ef180c9b17179d4f45e302ad331f57742a8072a1304cd61e255002f1493f1b747aba2cad3b001047794049e6521b89edeb7d982623f32c6f2bde6492dc1cb2bb214e4d1d303565d3193cead6782369cd4d71ac3d22103acb9339b40e235955848bfa4269a2a8c8ff48bd55f832a36f8bbbe35d723ce07a7feb4fa17b41b0acf25ad491e007d65c9a1583e4e6eaf0a0eff0fe7dba2f88d1424d255ca44bde39aca5576798e0d2862b0bec2aab3da6d662f067121ec6204235d24d3af93ffb4955ed6de9ab10dee948cfbf104a7873a16e2a97ff2e10d7d0c6db26ebc31e7b3d43cda00b4ccb80efd99117d1b713c40295486a104f59ff3b532764a7afd684bf15efbefabe1b1588282d2e376dfbe05b3d6f6d76f727b98e60c988c450e0fe70719e58a3a40a7253c5c8b441c4929c973700beabad39a07021dbd42ba069680cd62bf421b89950ecf825595363e7609f17b813c5da03a25ddcbe8e9a429958a5d70c63e31a2b7af9d9e7fabf47bdf6dc6e78e9b4ec7a770f2b2e64afe1729cd772b1823c50dfdc4e45131088fe914c8d54863463d142cf0e4deeee53c07c678fd43a4bec4580997be1654e895c4db82b9c42a973fb19cffaf11b712663d3f5bf1448edfb185df03d377e01b0d403b2f70b76bfe1b09d5cd2284cb3d3706d7ca9a6f3ea3e8dfe226ff84e5c4abd11cb6c7a098424e3c0fd086574a752b81bf05929303bd2c5bccd3890f77bd4b7805a60f314edffcdd034158c6c9dca9c5586f5f129a867c7da1b21a88e9326efa445d5b0f3c49c45523fc4af39f11221a12c44abde63f718f57a00cc5140fb72d9520a6b2125384977c43adbdd71ef866679b1e6a7f107a58528d59b03b4ba9b4d3e746e421dbf41f9db045616daf8bf6e4e7b799acc2196cdf6254d1ffb150006a3fdc491b341e03adb3414caaaf719b1e775efd829ae04a64495a72e8b410dec92499bc638b74dac048cf4a13c5ded0b09f17cf4c1d6378db556a7d6b6c47f443179959bc23ec8377b2b4ba64858e846126fd8a05fbb9a59e6c9a919f4487861b063bf923e42f28d14bfa1646c486d592a819e5fb6c9f84bd3202d116b4149e17892bf4fcde50cf70e40bbb6671088347791de3b0d732a015d918b2126f1eaf4990740f63bb83d7dd8d6eb41b89cc5a9d307293e030208d90732a32b8678b8e1e15f321bc9798c1a7000a2bb1a75647e06fdbe45f0a40d3ce4e13d45348dc475d9600adbd95be2b5b76745dacaa9eb44c3d2dd347a4a7db03937d665e071097e0b183a5f6e813543b0889b0d3c33ff8f83e2b6f9c9ec78671a1f4658c8a5d1df14d3279e573ccf7b4fe8ced17c1344690dc054ec0d73ad1cac63f50d2eac28ef5adc4367b3d69577312c6930da9996ea8c34f206c98073e69ebec7b9ffa35711b27b71a222da206d3f9df0b2e6801d5d9a69633fa3a80ec6f1070ac13e98c58309697d3dc01690ecbbf3103bc0f70e866f63ae7d51f38d8ce45c441c0ceeb6650e8adbe75971471d4aa70016283dccfc6505d9750121b36b73a7200645fce9da546ad5a8fc61b6cd256231fbe538858cfe3720bb6ea41a27a262226a2523fc420ab08f56ca35272af25452eaa9099b3604abc1b3d82ba5fca8ec236e91ea93c63da2e30e40afa982f66e197abaf6667f1a46835ee6538abe0406741e3b53dcea96f20379ff03def2d48ff027fcee43cdfc50ce09b319a7667f66e87e9cb443ff6721e3f1fd6f2d6b38b9606141464818b6e41006e76734028c9de5aa446c4f074dc313c88ccb7ce92266c421316aacafaac9979d5b71bfd7928016d342425151ffb13cca58ded2805e039bb256ebc57a64589fb6decb854ad3fcc5d905131dc4dc841fa2817dec2f432cbc94779b9e6759ca9124becf3f16ed9d6c7f1283d799f750e4ce2e781c1b90e3bf7228043925716d431b4c1dbbd9c0d8eb05c7bcb88a07e4034f7a36b58584ab06cfd96d37ea418daa01bd1e03611f99c9d165d352ae588e0f24a538b5426771b21d379f1da28a2dc4a9bf3161ebb2393a22f41dc1c7394206df55b404413797058b69e9150af2a8844c5901650d6fbb76b2a9160e6a83a1e9af30683b1645fff6aafe90a8e48567fce0dd37abe0ea9b9bbc6bc73bdbb08a848a4be0aac03d16e5416d6045804c621ad5b92ff3c8a1ff95544d030390c97d87822c2249b93131104c30366657caeedb1740ba28860a4c1bd3c9af00f0896b4e82b3cbba3f7f23945d3b3b843b55c66ea98cd0bf5cc42fba55add08b369307bd43efaaf9a133288f6a30df1547771d6f6b9a52c35a250fa68d6939b513e312bac56dd1898717fb6265d91bb54f73f42755f296b7e8dcadd2a4e6b08ff4ae6781c6a508cf59d4f5f28477bbf4b933b4cbb1e562f6f85526f51deee7396eff4029989a00f995b4b31f913b78e19a881f9082c49f15eb6555499a1ae3797a506cb98b87bd369593ce3cf41a2a5b064d2d2c56f87630c2a9f0832e419af01e6083ecc70a0aa18e0435b51cc5a89b50cc1a248df40a49c2b96217302c92449cc04d73d807c1ce6f8804d8ab6e64b9b91ecb32542b5ff08172c2643e922686f6eefda75e2729a620ddada54291fd8abe7235df03c2b7e3cadf001e21aff567ca27dea6ff878e555784148e9d19329a6d548612bb745808e5987f59c88b34c238e3d89a9d28f05a9ec4aec3e347e9d0c9758fca1424d64a88e56fcec720018797a93cd83516bcb9dbb193e49e5fcbc1234af114a6dbfbafbab5e90529ff9e4f09567d53990beb8bf649b79b5a735c8965f23cd739ec7286e8cad4e1547f5b013f3fa1a61c457ba8091aa0300c3470832dab42f4ef71a74e0a38b2564c4a6fa6fea4d87b8b2d4fca561cbcaf0afd64cca35cf86354c55dd57db3153a5b72ef50857802e60ac32a1bcffdff87000a37219fa909cbf86ef46021d6bad19b51933b220d131f5f2c2c773d5c93b5fb57e65ef556103f6d2c4353d0825770be9584f0bd8c0650a6f9106f74bd20991c2b1f2a55fb50b1344afaadcf2d0e2742643bf1fc23afe1543fbee15cd508ab3b3b18652dadcf5c2966bf39b579bab30310f863b610c8f1d1807dd043b33c390dc5732ee47a9dc8536c9265f4f8d62ef16883c448b95d1196d6482263c938a1493ed4e4223412b327fccf1a5f09740f30d129447c31a1a316475cfb0d8bada8470ab04f866efd85ba4c9fb2bb5a5b08650021a327e062f8555cdd2ce2c21098e457295496e06381c82c156a94b04b4cafec0fb9caf8aedfcd2bc2ad8358aea68b058d4db43d2da5cdd43d362c5096b5c736559799e931534d6a38e370b630d8125caa2799903410233cd196315585ead73d5fc59c56b77f3619ce0929c0e605cde15d7ed9c3fca7b8e73e0eaa8e2065c5ca4258b960647755bce96dbb45049ec5adc9ef7f2fa9a4a5e70526730f8a9a908bf30ad55396d9111b738cc46096fffe5c4288aea481acb8acab0a8be0128155f4d262c10e4dd07503e837c081e706d85c64b2d888d0b273cd66a799491927d03f87abee411345075cea3db96bb010aef9fddd20c630042ff2e42bc821e171fc39c266209d2f59f87b5e8e5bbcace3e98a45619a520ca55853222737dad2a0339fdb874409a9f68153eecd829333f9a989a01ea479ed85ccb9637170b77644e4de6cb2946c987d6ddb570c7c28eb2b3fd7b2ea69e3ae27e75906ad374f9506a655fc490d4d803d05398455ffb4e0be8e840bc662b6d61a8d3439c0189536119503b8e8260ca54043e2c2010510541688cfd585b18d3acc42588fef81a989130fa41db191231b9e5abad1eea7ec4a280a63d07e2bcf7780771e20feeb01763c9d4637e1d9ca526f2d78a048287a56b38ae484d7f96a6b8d1e28fa5ba5bb96b6fc477093cb4a3c47d12b28f00b0a9f00e03f244faf29fbf16aacd61da6f862f54505d2207c5b0362dd964396aa79dfd52979d874e1406643e2aeb4f477f1a8f612babeeed8bd08cdcd85b181c13f61845bce70210b9ea6a63379c2cb44d6ffdb7d376cb585850b96a505a0f47e4d5cae9b9f7e600415d9f296bd09af17b66d9be9a8b0504615974bca553afa6ccfeb9ff1599dfafdffb7fbeb820d6c5403f8198bc1b83295a7f6db8468a6e13983119e5391143d9f92264e869963733562634078a5656fb205cebfacee63cb302886f6e9be7ba4f985955ad0571d3499d18f5a26902298dbb72d19f752254f261121dbcd27551e895bcb4fd25a5415c1d7a52dc8a3cffda7d88cc55c487ea8ebce588b2ea433f5e98c497298c0bffa3ecc4aa7501104314f23f6ea7d57622faf2f7d44fdba5ed09b0a5c84c86010c67c518983cc60695d73615d412285ed15db0f759ce92a005473ac630833d379c768f94077d4a6f5834bb3be6e5030645b5ceae29f42a1c8e2bafc7be12677487ae46fba8eaa3b20f5b5f1d4364d3667942c88ff96061dc36a37d456755e0dad226ae4b4c55d41ac572c082f16bfabee6e527fb14818f47e3d6c2c899e01af0d25eaf9df4bbce512474957a3bf34bda732991477ea67dbecf96947aab6bd680802be67bdf92174a17725807d78b607afa3284f11eff01780acb3a7ee1e9b1409e8e43320b674709699056980fb51466ac45b7e475dbbc1c9470b892fb71767f229fe6b444bff8be0303cb52c32d6634f42a4b047645d781a6d51ada66332bff302adfbf6bcc68891b90afcbc95faa700081b6a588af61b938a34b9affb6ae298185089842ad57e1bdb92aa2dbc93f2c8212bbc629a4b8c1b0e13b0ada09e74836c7053bf7853e9cf0872fcecd11f65952dbea04349e01bb874b960e98bc90ef74f705be8cd25377d627c9fb228a6b641d29bc962b773e9901e3feb9da6bfc73d618a46e6e330965d5729e7974d5be86b021be78b501657fe67b45b06c48bb15ce4c033d45880cbd299c08db14380b6d79b8862b78ec15eb449b707efb110abf7d7c0d781e04463c01a901a8839a9ed4e95f2448a33c457a7b2fcf4735c7b9bd4d8703ad0dcbed814ba35e61cb6d082a86fb2bc19a40e01d6801ada890e797d418a33f9fd5a30c3c3f0ef65551d8bdba58b6f907d9f3fc9c16b42bb9fd65317697593cd02fd9cc8cea9f2b550bd85d016a0bfc8918a4a8bc0653cafd8d99b9785546b856687c23765d7850c956d816a828168eef308dd9959bb2525ea2b5748fad4836e4766e9bbc786e4c2a1e5149cc78d19d747c789e0fe309289bccd0497929287387d9252bc47b639beea225c0aec73c459148f636bee435f89d5371dc7fc6db12e3954b2af856accd7a5dc7210218c99f8fb2aa92826a6151f13dffee2a785d5bb2704f5bd76b1044ed1fd9d89c4fd62c624cd960b4257c82f7a5af7c1f353dbf78174e8256e7a6ac224f44c94ecb44a975981e4ac7e86bcedd98138f5a721f2db917f60e2a97d9455c71ec90f3e06d4027ba9a4094e1233551b0291b23c8ec22fb36bbabd894479442818d21056b5f1681c4c0df59552a6fe16a476dcc915f5183e29a7476770fd5b447fbeb74d1f2e40a4935d84c3265e738ccbf054c0a296c62f46afdaa618af6ff9884e0cdd0e1a3f4951088bc1c18d89326ced9f589477d9665e1d5ad2f60f78c9a3a9e85e482eb8d757a5a3d6f529b2528a87070c36b38a0b54c8eb72217cce88451e0b17a336afa464e14af99312d452927412b7617c1ebcfe1c32bd09cbc676176329210180e0f95fefad222605c70e79390044064e10be93ae5ef0563f646f3bbf7294d6508f3c7e59e23b2ec88f976084a0858d475fcf805dd6d75cc49e0b193a4fecbe1ebc3e37317d83229a29e01d2c5e88bc018b576c81df5d52abe9e0b7662675dd5d2d6c97ea792d52e7e23bde0585f1045ab38473183322c3e3d460ed41e35031604d199d36f227c85458428b4c368c729ee2c79f467e6788db7a32a0a6cc84acff46633b1f6e2734191fc59fff6f1ed8b98e20c8e66b74e113290d234522812a0aa00983d39b438b2d0d1ea335c40989ceba621ec9fc5cce10ba06e20d18889b97d85d3830b497b050d78139f99bdfa508327b9e246d4a3955169bbd2a3f7cd4b9442d733e50f369cd96e52cbd1ed6fa271a206795a35858394373742c934e68a4e380a25a440745cd801b5a5cb2514a372f62b59d206fa483742e678e7161cc90c79503e54e858f4f2236ebd944745ef10a4c33d5236bcd8fa0a58f240bd376aa69758d32640f9bcd14ec0822cec2a1024b50c0396c34786972eceaea06582fd9e4c1b7e748a4c808dca72a6df542f7364245dc9b6cd780e77c67ff0ec79ce9506ce88f7920661a8760402a68b8baff4c985080c678ee690869adc2c3dedd6f79862336121f08c451d611dda627467c485bf94cc0cad6d783107871533d49f797bcf584a0ba3ae817eabffd6fcb624253c4a1d6a5afe0e73e0b9e255f9522682be4bd42e6a0d633b69cceea124883f280ce474bf724c0acaa3f78302ec69c2ca254192cb9f55808b2d4633d2b0c983a4c0e5df089ce4d6f1158480a1a644f7e6f2c21e69c36d9f201550f8773ca48262d98fd800e618e0c1893c5ab1e0fac9121ec5a904563615271e241db13a42e15dc82ed653b08bd9a4da703083dbe57db9e156faf2c77083fa44bcd8298bbb23c272888287f9e04c59b1ddb98f75339e57d6976d258aff2c9d123bd491211d65ef9bfe786a356275ebd401d5eb14bd3381baaac88cf36d487554f31b98bf5600a09504f17f3d2208c29e3c31dc76491acb20b76bef5f3e6b8dfcc4c9d5d343569b51e775130f007a6612bdf497a23fe6f13f89d6988938232a822f12bc039232b22dc87ca56843f5246c65b47e5198f644291a7e875ea11de85af79ea994158abf29918750c0951867343d64874c242f31137d6dbe0d4c7f7b866ff4a7f00515815ecb35c8a7b4b3ee6f2826dd056a85bce667c8d129e749fb612c6da9e7c6398ca9365fc18aa2e3e1c949955afc7b8d336b61ca619f92f2519a56edbc63a52a02e05a09f780b66ae2adcbe749b327667f089a075241d097c1610cc9291ae9d9dfb80ff4dbf837b9eefbc1806f90a82a8963dfd4fb1127f2da5707924b934aa37d19a997dee7ceb2d3032ae5c55555fd5b257a8a62e41cccbc8bc205d7335a042ef5f7193a05a115faa373e9ce02ad59fba375f069246b09509a449736dc011d68200ea166d96a2fcb015bca288793965edcd88cae694e725783e027a6fd86fde34febf2de14a7721b7f345b17a8ca0bfc35d17e36d20466140ba6d44166455f3fa4134be7f8d7cae17045d76a7c8c0d55a5d67f6eec6ee1708af9a04cdeac28ced41e9418e2225110a4b481ba0070e6a7617ef3dab718db4f760390f2f5a3469f4270669cb2edf10469a0e9aa5b41357878be38d8010f0ce27bf4d3ec098acc4b97c2c12674bba50a0ac614c588d7f9e2b49cd3e19a3132c925e18d59abe31e864a94f6c4bbe07a1a388811c412d714a789d63423c123764ca539807402d7a182de9636bd54c6f99ce88282307fc221992dd571264c82a02b3d6da4a0ccd164f94f81951c0681346454ef86e46470177f6d96d3e4dd43ed5c14003bbd0095aba1e0c9fe78b3972dc63807fdd3389c00ca8659170a9e54597cd7f43a99922dfcdbf4bc69f3207cd66491b305516c2080675b36864a48684678894bab2b8ee24908c998a957cac327a92312f287b5cc0668e54bb6b26ec63f320b6145e6c7c3cf70f435c7843b787cdabfc30c0dcb26b940caf6075a5eedbd110c83d524b19bcbeea149b4531c378efca726bc523a66bd6841dacb9ab4b479c86db5d9c330336f9c83929ee1683d4f1e1084128e2a67d62e8790a8ce878777bea2b731db6d034cee285e749704ea848371713c04d4bea32f7117adf751432981e639847884e6ae5000505853cb33448eab714133161b42df3160ca42cc0aa419fee403e6f027619558bd0607c8e50aec09c5b508cfd533a170c9c96517c4c5e74bca3d7c13f9e02c66db186ac4e4ec2f0de07c8bee2d4d7bf9a162c36cd33be8a8792dda5728f12ed139b6b1b402d3ad400c4d6a1c9ce529efde9dbe07ee5ae2b0b6512fd0560d697a302aa7a9dda5da1e1044027b864927034d63c04ddbddcd7bf040ffee80be4fe3cb8d6f953fba470433e6c9d1b2af9072ad8a97c785316dd6b4ad3535ce6b7fb684183d497458e44a453469240038efa217add3350f20cba875296a895803dd750180ba4c5f49f692989c6b32a3db698ed7ee3f102a4d24529d34e0a37a0d6703ebe68a348a1582de0b66278c1ab0d2b97dbad2ee7232dfdd191caadcb44743f3a5acb65fc61e75953d47ddb1282427c8c086bc80138dc7fabe473c1b618da99f9a1241ad4ce8ffcf363a9656f7a0571c2ce7d5b7dcf7a95d26b278a95b79ba39347430f96d904d7f8c034fb57069bad0c05496d1a0345764aacdadf9969ae4311966286cf9bc462cd27efaa85697b573ad0fb79de3b5a939a3daf38c2a5826283fb3de7ceeee0a21436a4ef8729b10a94285b88fb061c7f37016a8e090cbc5c4c9413aeed019b7db2b8523b6cecce22876e385bf05134a25081a0cc237500713cda778b77818acbc30e22b2316598037770b20e18a4e7ce950a4eacf2fbd87e9a0fec10c6376f40272da7e13d9b8702ed47ae5270a934ce9c36daa19c03ceb438bf64da16b72daee7f6601286a6f1caba062eba35ab50914da97116e4360d7b9687896c2a4c080e9ffc530ec694140b858def56b69daac498b3595e54853b1aeca2be4d255d066c15ffe6d4ecd2929596f2da806e143e8e9957014464a67f53702b0dbc8d2cff588191c6cd2f18728895eb65e4452654684af70deaee2734acc7a636f41c86e530124d4d9e819a3751740edb24da965ee5701b26ab9c08cd65c8f239b614c10af59e41b6ca5baa8f0b0f41422e5766c908bf74745a41969216ecf50b011126883505999348d53a6124d9d1cee9b47a76d86e7983ca3cee6b92ed958de18474c2e97475cf3631ae9752c62c2ee24cf18254f5afcf2470d57e320b45c1f8d52ec2ac448a0ad04632d980453a85c8ad8f964445a0dcc5f99dcd11404335d9bdb7a7054256ca7b313de0a4a94e6962004bbfd525d2335bb4178c02d5075011e05efe6f6a2dc1602f7ed63f476fbb7abded61f6b334d03a3ab89f1510fb13d0b2bb300ff4b74873a5bfb1f04279f1f45639506b68380e68c2e8ae9d4c3990691cd8ccdb50f81da356a2eef033dc83c2738cbe0dd9530b2ec9174f7090578944d0f9d3473524fecfe274b2637d41f2ee4d961eaeb62f04a3332977c958efbdd0f1e865f006ea992430d1784fd9f949a22bc4d7af199ada1920003c29572fbdb763f23de37669a2bc7f109f3a120992f8bc3eea9788496c60a532efe22c14fe29cc239148c677a1ac563ddbd58c43c77ce0ac13264d7cf24d4f1157e95073559da87e49392d46d11dce9ff32ac62db366b16b1a0b187a281af56904b62abf8a5fec9de9922357010f3f6dd53a7507365fecd48a93a4b26c5d1a66b3822078e1fc3a95f450bad4e99db5631f2920f87fe136991453ed803728e4a015913cd9b46adb0f3122af4401f0c5586716b684674ac192aadea46d9d872e103dc8f7ffcf378de3b700546197a4dfe628a4df5249a2062627770082e5734b46e7d6fcddd6896cc9e7c7539e8b6b10c9c7fcecdab1026ac132259dcdf67c155b351360b4c0e3d091ae5cca184e103aaaa46173985f95ffce9f60c749fcf596b15c731a5d0c74bd48093d6e206e35693549c0dca1a82cc3be457f6ded54a0491d25f141d1ff45de85c389e9122899caed7c8189f9bdcb2e29f55e7726ce125f329382e17a98df00b7fe6af60dc373e67b96c67a579e120371ad69e33e8472dbeeec6abadc9773582e36a5564cb49f7d2215387df3b746de14667ba5bd4c2ffe6d580c3f675f50f2b9481c656cafbcb05536c3c8cd8ebec645428241b1dd8c555c59995482198eda852c030e55d8a7c986c265d7175b02ecbbed1eef1461840c37fae8448581b2170ff666dbb8b7361629450b506ce7cb198b66a6e8bf6ea9febd0a205e1e81548c6d79da627ad22951fef950c205d69bd8b3ca2e6f24389a81592f44ef05c7340ae6933908279f4495ccbbd986146d454cc8481bf7f2727df9e70ae38fe3e5c6eb3b88192251aabaa7c05bc3eff6c4827e59a74fcc3639eeecb0ff26314aec3edbf619a6225114a80dc5490e6a0a4120ba4d74aeebf56af3be950743c0e9847c5d19261762ec53250a456fa2c08b67a7d8abf81b6d160913d3ec1f10e2b14059fbc6d761409a83b7b390db4fc1c612a5bd657fb3f7b08dd4fd54bf8e496a3e427b1661e5507498ca47626a6b8924849106dd88fdc965210f9f9227e0e2e6e9a73f966b03a390e5287117bd44a17b8c208748ceac52a5cf17b7ee00b6900254fb2a1bdd8a5cba01f647337e42448382156b993f40a0b5b7109a00376938f06916aafa489c8923c7d22216da25dd5e19e740938675ac538c7b4465ce7f3a433aeed372913779cc1f4fe51c24ae6f45ba885dc69254846dcce43c27950e5e2c5270bc8ed076bea013e0bd44ff7ca367c14cc12ac8d9a71e3439832129a1a4608e3f4f33efdfde6b4adbb5b6c4c6a179ffb4ad85522b901e380995fa9cf76a5be3e5dff8908fa5ef9e5e18089cd1cc699a190d7ebfe18d5e56bde4ce160abb52ac2e11114e3c07efdc5e290c10cc71abe31f53450162c891295b05547d964c00edcb80199fc6f862dfd0bc076b2dad7ae00a0dc7e8ad82a162132d1b1795eb3a07a88b5e7a2e15844310f8ec38501a239170392a7707a0a308e45080fce21ea21ae39364fd233b1d63042651401e79e069fa468261597821db21dc0cd50ba626474a429b1a0cfda60bcfcf430f514d2e9fd4ef00efd98b19464d866d77d104bca21eb264b2b134c3e7ff4ec957973ef359a59b2c1201e9baf798f82fc0646d94db403f8be754fb964b388b9cf950e4d035e99453ed4efcc9fc25ffa067e30480e6e4aad0dfd76d451709176e0b35d2cceba7930466ac85224c363f2639184413593c3ab9216440a396520199a0e1395b609a2971502b91199c5121307b6771c31856c0688260408b115bcc939119b1d689bd76e33c94a36e36c470d2c0aa355be053fd986a2494f11376834c4a5f86be8561774d1ec57f8e70467259af50d33785ff92a2b958b05d6722b4abc179b72b6d570659ed4a0bf5a2c66cdfadeba72e617ed23c5fc2a463a556db598e4bac6cf73663551e4aee273cac64d3c0face3d1ecc23700b16806710f12be426d874c5b387fb19ff9d48505b7c21b9e6c0a740199954d9cea0a4c0fdaa7794247ca0027b01a0c4126486adb69c09aaddb062789c964b252d90bbbf36359fbc5033b983a2a4b097c5a54baeaedbe7a15f85adf3eb0dc109d020700ab29d32754731415a54def9460c4660fffdc6d2431696b25378437b09acf1b30e4a82c08d352d9b9807be0b735bc1caea921d95d90ba5a98f382d08f649e0a4831ea12e368efb846e9d592ed723397a2e28b0bc101d0e68bd9f257eed38cdc3d314d3e184ce08aa5222f1f08aa3c38ad8377fb3569241bc50ffbbe7fc082528036c1721cb6eae3b614f77ef69aa0faa72d45bbe0de7eb47d2f7d49fda87e7969d120a4adf97ad8e0335f5c6aa1bd5d6b0a959bda48814e25ed803a62313c7f1024ac3b1e15bb7e5b108fa299a972be20ccd01af52c912de811b92732a0c4ce2a06fcc6bce5e04cd596fcf586c16dc02d02d9e23354111d8059232b7896dd091cd80d0af4aab2fa31d9eff3125aa96935fa70963db625f5f69faa5fb0b5942c61b96657d81ae2f331345897e6fc2a05e786d0103555c17f12488be040b7924f5c99f45e8d747f2874524f692bb38372fa6f4ec617a13df21be3742f42f677e769714225be6b061a8e705b6c48f3bf39a401b21b2ff01700ae35d5795924f72784ce65136a25496e3714a9d5938558bd5c49fc5a3c7c53d81ee37ee11bf8a9be9a465ce7767e441d55361f9b7a10a16710f8b73470f4189124d6db684b6361c2df43b8673301f5942e63d0e1580a8ca40e705f554d4e5ae56903037fd0f5ac14e7b0dda6bc20b9672e2ef0176c1347d74a0fd2c6627f0402cb542ef9203bdd43f0ec44a6dd73613babe0bac5e7393e2853f397768bd42dfd578789841bdc80fe13c29ffb5f3a125d7e2436db99cf95e0096fa3bd4036c1676142433f8b5555798e6d9c387a88c5682fe4d5073c9c6cee0325438e05f5043a8967f862b243f4459a08fe4e42cf4b48ffdf5c9759e0faf53e89c981f419cba5d15cfb6f3b28ea99f9a901eb5010afd04baf18b5cc8c83805b41b60566f92b3596d3cd11d5eb8f8906a7c8c553caabed253ae3bde6734fdb9de3573f2cc639b015bb0ce0f867aa7fa4f0bde0fc010efc7562ea34fcdb31475f7f956f00fe8fd2c92c540dd2e59d5dca2fb5fa09f3c6daf2a63c90d8ec6e26d4ffb2fee4c4418f9a37f1323df1bc0f90c9853a4e316dbca35aa320b3ba7af2255fd72e9846b88e0587b3a84414b470392c5e442ca78406220922958813cdc0ed8c40394016c1bd6289ad203c57d1e8a39e695b0e24fa7571be1c95f3e3dcd0030dda5a41b3924fa5289e4f60b668eeb260d86899886f2b3b06c106516a2be6a57b72d7a8e8aac4ed26ed864dee62b0b70f7e788db09e2f2e30488915d105646233a6ec11af9eb1f3cf5a6cb2dd92cfd65de4fcad649a8598c3d02b2d0c28b2f20259078817b16f8146858e515cb80a2bd9198123b6cea248258edacbbe37ec7c0a59e055f213c17a206f484bcc540958f00faa323856dc8802d51fd197e4e0f540530fbf3f5c3f710ae1c724d337d5ce1d6b6cf32217119697da58d1049cb3f7585388af1058450e0e47c72bb4a33e3de50bd28257e7d18e5f8a0ec996005e1b1cdc51215c0f6231681e1d6ff54dd4a623a5af9e69dd119ae5b962a42e162271f1ddbb72f7f0c4f0bbeee05fc2e3a7736b015a13df41191c6017c3386cad701efb43dcdd3d951209d4a0d708cc403560d7e231aa038efcdca2e91288a2ff6d0c09a56accd2634e4cd8635fa80bdba5686a5635d8e06ff4e1ab44c75d6659dd22f6d2bb79909270bb8a77962f75856f99f2bb7e2c012ca2599688d7dfc97c47330b4b022ccd602ec8859e6ff44ec012c21a5d606799ac09f49a235f8bebd195cd8d6fe8cb0382dae5dd26fe8386cf4ab9caf596dabaf953fbd2db36ab203203e6e93d904ccbfccbe53734882f657828944f231f4c71198f4cb2bbaeb95935615b76e2e6040f9b5ef48395b571852404a1cc390525bb7acc3d809c1a62e75046d38b8ae9773fa2ecd3447635920288c3e2513fd19749a7a75ab3329bcd0fd7ddc5ba64413e8becf838e5b74d5ea74cc9df187fa6c32352a27fc19a6236e367cf7ca9a5d8ac3b212170525f4ef8b8bd30984a65434e19d43c054b2c3e0be05dbe5e15174b1fd934b945c21dda58ee595c70c01e1e126221aeee337b1741ecc67cd03f6469e1f990c51b3b2393d277e84998aa59d1e2f35b09eecbe164ae74822d9435bbc87d062e798b46ffdd2706814668b80d3b09b9e1ea075f1e126305325eec480f7b2a4b8fd0c178f2550c1e8725e1cbbaac4ea980e439362df502f41c6a867382d0f630e6e9eb15d3fc9f4b199a78bcb41bd837e3e950e15343cab1cc3644ffe3525fa094f53d4c6200e108d70f91b2b6f129002f63143660478768b80c03a292e63b0e57868e5640b87afe35960dc70272bd66b6372a50f67e4bbbff7224fafbeac3183dffb9f29e89988c7d8972937ef80edcba9bb50ea87497ee7326d23130af104779fa2dcb8c603cb5002dd9037237ed6a2a836df79b9a1c3cc011ea370d1606f8e8051aa54f7fbd7a9a61ab224098216da46a7eba73843ec341ea2edd0dec631ec3359d5b242427bfa3eeb595ae1c283c62c69344a3f8fcb1157e976e488f4bb12f8ee5bc5243949f9dbc97d118f99bd85ec28635806374dfb09dd8b24e596ec567ea05d0df0190e6b23551879ed6ec0382fce4ae7ecc867d5584afb7e86cc4b6889fcd3905adb8d16276d05ef62660433001d3af88ea111132e35c18cdc527792bea6466a944a6c3d4991d0559ceaa06fc8f339cc2f3a6617ddb5f053a79e24f550852c309d98e5fd7e4985ba90519a9c0d088a59b661a2f964afcb2ea39c41433b783a4e45cc65b374c586b56c99f3f4ecccc3fc34fbc78f94748edd6de6513660fe18ab2e1b02f6a87429842041c4f57efd7e9f6d85784a8090ce99b86151900ddd3063c71aea7cf18b177bd9d3407891c21cdb7de5776a17630623c7f780c3f3b19ef1a762c1330557353053d8a8d92b867d5e715d8b38c0d207b77ba96b01bf75c6f29b9d970153a1d63c325348c6e36bcad3695b6535601f749a09df1735d146e9dd44d6764f24dc57ded1efa41c71fd08f266369fa39f397989e9bc2f184959eb49db363f5d609a29363b0c51a3f9f7e690659d2967e084e826774480afb8769fe8b33c9adc1a6514e88f2dd9221be14fd8bbf63a0757653e10fa006339ae7c3b890e4f99e2a5fbbf16823bac194f8e17638511e3b3c137bbd6f6b3a6b39089be6854446b200d55ddc5321effeb2858cfbe2f5b9929ff6a7869315852bff683d4ec7f36f28dece7ddfd71334973f95a4f723ac8ae6234949c734ab94c93b9712bbfce2ca83ef6f5866c496f6c8dcdcbc074b25a89a7c20df96ad1554a907f7d19cfd5c892e43e7eab3f23b5f42a51bc89fe456f02c907e619d81db86c3ae14d52ea683e0168f5ce04c14894d8a2bb953900e40857eda4bfa84fde10ac6a71af06e298300726f57e93f20732545249100e6023509bb742f5f542bf3344ccf1543a350d6747e76097e6b9d53b4435bf6d73cbdb97617cdaf8d9fff47bde6b4968ae1a2f33a2c7b40e2c43980dd3256bacc60c81644f1437fcdf6a0576ae9ec7452952b6f30abfae4d898e3d0d403749efc4e571f7ba96637c4450e401530c3d2f119b09c132a4a5102443d84e56635d508bec72f2dde3f25a2a4696be6584dc5d4ec664eb298c5a64e7ea16012c82ea37d147424be41b9930c5673c305cb949cd804c256464dcdce540ceab1792db242b509875ecc2ad3123df317b6620329184756cfe4bdd2adcbf34ad8f695e415ec82f89757e9a134ca090733251b3e1404176bef8cdde9b20e0f1f1a9faff1df58782e85af9fb93c3996cc95f1ceb24a99a1d2fc7705a8ead9400547a02a845f086b4df6f3cd66a5692b3dfe648398b6031585fea1853d774a1ec63a34e29b261e0f3ed69e85acda28ec90a1396e168ec3486a318e6ff80dfaf7d34987652d3e3060f662e041f9da4a36f07ef140cf3302438722a581f616689162d90e814c986838f7b0f696d34ec43e9c795cf644d35048a4c2bfa24889b62ff60cd5838f6e43273e76c133b2626d15e8d68b4643a651ebda6f009474a808402f86dc615d5aefb32dec9c07e02a5957a729f7702ae81f9ad7a620fbf8b00e33bda77455ae10e56bc78732947bc1a02fd7198ffca6b4778b450de2c664c2a5291d5d3945c020e3424f36c1117e17642e4c7c9ed2153eabd9baca86bf0839e1de633f4b9e1f360dda6a4810a17e7a1ebeade124b542edf94fbb6e62256ce867ac671e5edcb5d5e6b43cff968ee9933daef38e9d3753504f3f83f0f852cc43429590214ef2e25fad50b618d48b6c8afb0a9e2fca55cef267990cac74188e663bea9ae6f5421f824fb80568e0f8b5767b2dc52e7217c0b78f1d4e8ba20aef43bce2678e46e57d58d294546cff59988284722a8c0ff095519ae31d186087be7d53535d52d6dec4491a1d8fe3d4d882d2b2bee1227d7e4e9ea2bfe69359e07cc19d2430aa470402844cfefb440991bc96041bf0e81b470829230e88ad2a18235aff65ab47f1007528348cf440c62585594f31acafeca132943276b55abf1ae32eb8aba072aeda16e6f7b1409ea7152ae0d340d0d7ace2c59c30dc69be94fe5eb2da353d571d015ca8f3414dc484d7cb205f6214f257e0b110600eda7a61ebc419298ef8761460e167af9d3fa901ed63ed49f3edf282fb22a7d09fe28be9b087d7541b20064f323b893d6474aeeccdfbec699363eee51f5b2f5c5cedb1cb141def7cb9df42e0a4d3feeab97c6bc95d5f7afa5f7a5cdcaa04ecce937aa4107906d65c479e6bec7a37ff966c7653bd9aca4b2c030412707e94c5e365c6eff2f575b60cf3207683f96487c65098a1770964007eac7097a49bbb09de296e39569a5dc7bd6387622bc81ba79d6c3ebca6d69197a78cb4ab3909effd1421c91aee6bcaf01ebc0585c3a059ab54aad3efa5e47a7ecb84f3ae1a843291e03fd233ced7ff72876454976c2c29e1e57fc91ca649f6f95afa2394451e2387c3cf50a611200165e24a7c451de43e0b68452ece4d881be30543ac213fc105effe8673b917c00638cd735ce30faf1c4ba8107b0b4110e7680e058db1b066598ee827d7ac09fdfdda9fa3885d21e3d33506f82d5c3774e482a5fae46c88438db3ec45852ce126d09e71da64db62e8d6241396833431fa5e7665c47d777f76f657da4022de2bf6ec7b468bb7ed16df69b88ededea050f8acd38436a1461e0619f74c6ec5232e0562957c55ddaa85f74d3405050101b5b63535fb47a2c026ab8dc41c6ed96aafe95490b95535b54312ec35e130a68cd96716ab7cdce64734c240fecf936baf8fa723332d5e78a1117ca984bc564f127622df951b7bb90ff857b05fb31fd415d17f9a2d4866c20775e0fa9127d1b5d50b02c565c0f4f2f1243f07db9bee3a1855139751376be16ec9e9560648fa53023ecb057e9204d13305407fbba6f2243e9e6f3e3f5cf3bacade265941412da6b4bb3388ddb32361829434c880f8a37b91c72be53805bf8d826095045d75e0b4ef8cb74f8f4746f3fccac27b15abf25dcc9ff6b245355f8b4a9374d09d2c2eec28751d362cb279377d49a540cfdc6004c5e4509a9aa30c6233f449f029a1d34e01e9f49bcaf04b7dad2e0b8add0a9f63511275f50ce5e064126d328a4d9bce62062c163df40c6537ece1ebfffe1c4e3f2de3586e14c241e83f058e40d647842a29f4d4452ab17cf6d001fe85eb9a1589971add1a73989264eea98297935045d65557d4f9e2c9dcb830537edc2dac56f75f1714f199e5f5baaef3e3e30c6b54524b2195c12d13972f90d5117a8ece2d34a4e1384a834f420e1bc24cfb1ee2a3c5c45bf4fb01e38849ce8f0487650b31d346598d8c9f8499ce2e28726759986424a44bb4d1f4d097e985905be56c56a027f68fcdb008ffbbd12237d582aeef186c6e2706c2cd00bece994842992e2c9ac5fce78df4fccd358578e54f8239d195a388bc929bc41e91f5eaac1487d4ccc8546b453de40a96d3cebda5d75565ccafb6621b17e76d70ebe1bd756b47ec4900541bb0bb21d9d0ff7c3d71c1d5ac74d6d09b170209d17ebf96290739b0da537c45a5bb6f662f0d2016d60bce1b47099fd64fd0561849435c172c5cc97c331ee510f80509abfda9a6c56699f9fe4e7a1257fc7ccac18435cc66f9c71b2758cff322f1cfd0f1cf7144e1c112427f24ec6cd617d802041fc4cd640c73bebe8d8b34db49500ec334fdb3f20cf4891da577372cf8a5b940098b8e2f8ea805255b1a7407c24ea0eb6bd3d7428fdb321ea522b380899a99f1a561a0a8d1fe53bbabf13019604823cc389c17f170858fb6aa39172a993e885d022e089ed644cde9a7451cc3994d35d89ee063a5207932cda129b401fb4140de5ec8f6a7f151a16c2057cf8d7f87cf8bc11fcff2dedbd091a38b3eee7583a08f2ed76b012b798c7be1fa849175de88008c2ffe9a9ae1826323856ff3fcdbcc9a30b0fa6d05dc04d7ccbab0d550b87236b63d83528082fc8d8f18cde1a21571c7235a2c20f4a788f0fee36eb153c4f7e7b1623adb499d5de103e78d776f30cad07f1f04d6f2f4f725a98a0fa43dfdf03cdd85ad9397aa40cc1a4df8a2bcd24c5022231ec008b0ddc45b13775dda8f907a3596477c254086cfd831f127e40b28150467bdc7f2a476109836b1008f7844574f674c093570c10c3481c3c6b32a546e7d70fa4dd374ad163e6018ca79165a67cb0256d69a277dc56e51a2e8d2a8e176aef8faeefc37b26b55181bb50f0459197e40a24a29a59845625282a306df487278f6d80e6161f4244cc9a93fc9545db07382f40057c44016e40839875d4f2550e4a929dbb802f5b0a5d31c6c1a81338eb762fb2995d7f90d8ee22e46c8843d7163ed8c23410a421189d35cf73892bb8f12ad80993a3178b313c97148569d335d9cd2c881099814192966a5624db9a324a944f3762ed97ce309e1500c52463bd67db4db7194c230e1d0d7d3c12e7bbc02a5a320dde59aaa404be9b113b5d4cad579c0b53c1fd64f8b601988cbc613e040b667ea58448234220d36741e2ba341d920ba0a17bc4f3a69925e5b5267bad19fc7751dfc4507e70d2a9cc2d25c4e73e57e6b42b2dbb0b4522661d5b7b772340bd5c0b35cd058ae94478529b177420b605acdc1d3dc91fcdc953e144321e1e16a016a40599df58299e1eb8d9190b951260ebf8c965b97e5bcf110d1058a0f01000caeb8a836609cca05391a281c11b4d86409ccfea80bf8776de2fa71839bbca27c68a4afc81fc4fe84a3300e784ae64754e0d64d015170864469fdf552d545d4072054f22323e3576ace95402f077fdb44a2c41fd7cdc32bba1faee10ba2cefdf63ea8ef48db9ab4cb27eec05c215896a08e033145c67cf7836dea057b06a7f2167c216cf6a71fdc9dabfcd569dd576c9f69125f98ac861d6f0dd3e4013e7efe848230b30fe257f01325656aab0782e0effb0ca141b463ea1156c313e705fa4521f7f08a45a31e2e8eb04848cd0ed625d8e516052fe6054209041bb10113e56423581caf4afd6e5486b5a03e56f8f2baa71f500f9e798bf081addec90ad250a6f9c7b73d6c97dd29d1d8744ee1dcd1b6f74253404349a1fc59c69e6e5e6a6e5984918e2f18c0d037183044188e9c56f75cc03cfb4356ffed64e202ad174d5bd93ee293835f5599c23304761b7935351c6c4ebdda6d6cb76886a2e0764e41d53283514d27db11866bb5acd7ad7d07ab585a8345b6f6c080d157bd6ca5f6162ef9361808e592fb23067bdb151f17d4b765455362331a4178c15852a7f2fa5b79208e0539a882a0b32d5d2c87b9266f19ed3197be470827f4ce825d8c5a69889d02fb4cab2c6821de26ea1cd4d8c6da0f8cedc77a13cb5c49131260e3f360ab55cee161618e8c33d49e1abce2a388fed7ad719e38f9d641901a86abe85d699c0798024254ca3d014176648f966c5f26623e382a50c8ebee5bc5d08a33b2581578641aa1394073fb3532f41957c7e1c602f2d0e93df2b11abecf8d5fee6215b5f48f48d34cde6e3681c9d34c1b39302de65a9406e5760a84a3403a672997c5ffb11007bb0d3f0c44a3f8cbc6bd82635331209596926667363620f8066bd9ac04910be3f553f28d4029b7678d5f161bc9bded3299ab1baa7e1287330c4711d12e5b5a42af4d225519c7d9477de54783f9a1cd6de07aacc356f58317b3efab82357bea6625409d7ad2ede8c1785fc68a19775c8b2f6feb1eb546167f9337394ebe987bab24ef440983e9f54822d7a7f6be890a34e44bf298800235e95bbe9c228b9f1cc89afd35d6f80d021f0799262dd303e70f953c7e54743252d850969133c1c041edc1b1824d45e541c1a94083c6662751375d23783d4be0b84662b00379f37b86c5029510c3765c337e73dd67244d06162b071a5429011d50e35864992ef44dc36fcfa31c200929519f30bfd4a4baa9466c7226c40f4ad67a1a62a3f779c333b4da8defedc2eba058ea2885e450094828154b786947152a8e8c6d28b762c20eda59b32f7ca8dd3156c3891269e1c5d92c1173b40b0d0397337bd555a9f3cf5103e6390f3ca58b18f95f05b1920c2fd6e3f5b84e97046a5bba72fb3e85ae8676640d269b082836169bccc12b8a62f98f00bbaf791ed7934ef94b21a1baedb4d8383dd03c647a690cbd5a65c4be37b55bec8f342d3827fab8be18e2ccdad20fe7c31980430b3c08db332dcc4575f172eecfe800349252e93bdcb2758b5845390e31544b1c41acd5cc20b83c4032011a9c460abdcdc7fbeeea479e566bfb17735926e63dcd2876aa69d3570ddd11b705d5f75ccfc3384f23e6ec6e902496dacbcc18823dfff09d567487b09d9c5bb2075a804a569e333dd64c3d66832b64d7cf27939518b86ba7c3873f709a09ce68dd3708f70515d0339db6bfeae01416bcb65e6a3907f7ffde9912f12f40335396040dc9084bd4e8ac58246d2e0e8dde1a88c8935370064a25a753b3f0c253ca5d4e89a687e04675a3687a717b794508747075b3e005ba145d8b679189fa5f4031bb0c95404da744b0d93f56a5cce89d32ca1690cf1595a0dba47128bf562ff6d0d0fd04a7795cd0811462df6c0736a616db2ad0cb13a16b9564340649962dc1f6fc2636e524aab1b9d5ac7e7355f7bbcc7c2f1bfbf67dc685bd9101a2bd9f4dd02a812905bec8344678c7b85c0ca1c2af8b9605285de3dbbd23245858d2a2dc17fdb3c301d3c4f660cfc5dbafd17383d2dfd206acffec6b83c13eae84d67bbec106f7849012aec4e04790ee91cee209be02bad90286426a7dfe33e8a0a51fc7671f3aa29dbd64ed6adb5ebe7a10f2880567ca2bb8b4a091a402bb790934cadae917b3d2032064e061c7186d17dff7c34ac2ab37da6699fee689cd98d4408adffbb9736fdf8e63222356e2af13ce05193a9aa48382f94ddabc6ad7ff7fa2973b9c8e6e744d6341e863ba76cd1d95e03e904afcb3307d3e87fe9f7da9efafe458474c44759c2f18038bac84b4dedd886ceb25dbe504c0b3ac37246b70062543357e195c549095a91a7a760e6bd14b6c6bdc28e44cd3cb20ec529c80b26d80eaa47d62707bc944f7b501af8aaf9f11ce8764db8283edc6f76515ddfd986a51eae74d02f2ae7f936e052c0a1f391f03440a8dcdc0eee329789650e08f394870a6354c4ddd0b801d93a583b4aa0ad83dc1c59f66c5f83d451410b4a7588450fdc6551c3c3dd1c315bd675cad94b0b88008c7fbf07df503f3a18db29121996bf2e78618a0f9d97e3754dc8ffd9afce678394fb5ebc391dc19d6e5ad7b009bbae07e9d53499159e75aef62e6aeec9f290de0851a4291a6cceb32a0f68a2c858cb89cbf568477c3b454d70851410ac863b38b1a468af9051963448a3da699ac3e0efa71db065bd925c12a28b66f4b616fd212bc6ff616c367f0f2827f021bea38729a96b5e60c26d4a9b29731a238159675d640853259dd095e85ca6e7acf7e6f82e6f69cfc7b8ba72ec7f257dfc093e77f051585df3e651185bb127d561ffdb775ccfadc4816ad4d36cab90a878f6446e8054bd57d4fb669ea6969bafda6942aaf8a4d79d3bd9c1039661449e4a73f9ff3d5263f39ce9a3e4791d3d9f06bb3a2fb3cf4a9e8f3c1a36ecd65ca51702fac5032cbf00d49d06a8320358d8fe165e443d2c604fc4ab3a41a24d211dd4bbe95f3fc044ddb1376849eff452e5814fb1fa3d2f0df7e709599c23b45f780bf485798c93ebb8959ab4179f9fdd27aa4a12e2d1bf88a2e71e8ec9144a5a4c1ea79613a9927dca307ea21c4179c63310e386054edd840a67b2b7b56a4752de2e8b1b15972c8c925b9b37ffa7f37065f22371060275e1e6734945a75e69a667f89eea9132216ac1348ea0f5f3aa4217868ab25153d0adb10653a475706c3664bb6616f373b6a6f73918fc68cab13a8fecbe2b41ebf38d05b28f507db8a6aeb0efbb2beba1af7baa4e95507bb803a5e51d91c30b110833d8cb89ebe70539856e12ffeb82bd580391c5ffcfb7618e57cb3117020afc3ca0074e217fc04d98d716aa1407369e5f4bb20768d664cba7b65471e451ebe4febf05b883895bf8be48a71cf83e3acfe2a89df3af0fbf0614e2156aa2980b6fde506984fa34cf32f97fb9927f369ea94c1004242233f5ada0b3128d0b7992f7f136aedd40a3edef63be83a770d38b21a91745595097419878ecc2d68775dbaf66ba669d60f72e1e2ed67f621043c84ae81a5df02e55b00844526a612700f6529dab1affede0580b74f63b2593c73b1504b0f7dc2997b8e904fbc3211413b7df3071c4309bdfa815eed00cb9aabc25b2e90c7f7eea00349e49f9e1558c167bb0f5d3005cddf5c0cc8b9db0456bd86a438bd3ba72ae9b5c83e0c7333ceacec4b97880b1a41e765a4aebe7b40ed149038ffa88e7682ca6109c3b7057740ba7b49a68f926d079c5e5127d6c0ae2a5965dbaee3db7edc30b25412821a3b18fb5ec178d3cd001a04d8b641e06fab7546d7b245fc4687840bf087fd974c46f73f4610125cce60c13b4a80b4c92df464ec8d8b62178da2317ff8fe91c7bd212a3de1660cb0a5a46a3178a0d7e5b19403d749e1ab903783df1006326c7e9c8b12b7dadadc77efd129960333cc7782bb0aeec724351a6748816e7f0b431a08ff135a8f8dba12e9f1980317b43c5611078caee1af712e698b6c6fa181cc99dc4dc52bc2256533c2ad9721490433e3ae0eef4552797741f0f3dc94057486472de146be421463cab2b26b83e48145bed7b8560229c15fdd24f84c9777eec0835612bb137938aa0d5ba2e3ee7180498aab289bb234e7f983901117d106972497803a4e582e0e31df91098e2f0c4e3d87cc543abe1f99ef55c1c4661284a903880a9ec0957a6025a54d110a7b2be59ae364a3cd2d199f6cf88a7bbdc242b532e680fc5289fa45d85d0e9e161fffd752f755e94bd53000d095ba583442e56fc3cfabb789cdcdcd32c37573db07ddf250bc630509cd15be190006e68766dec5830d3115d8b92e281ea0dceb1f916f3b54a56e236fd0380294d77938816153ea5c1c06889577905aa11736d0cb6661c1421b0e1ff16fd69c8666b550afa90fcf7986f9046b031337c8991c78fbcb6165ed5a5dfefa98b512026bc9226fde54238e77174c2c728bdba2b61aa370b701d6bc7fca152319f55ea29d1e3d9564f9a9ee09aa8569d927bf91aeaa386c011bacb7734f207f680db5cf4f7a1bb1222f60d636684249234e88ef64bb8c353bebbe0e22dd813deb1d4239e40b9843ab89b94a6ebb9d89a7889108df02e6b843863e6552afb1a703de3bfe335cfc3f394e97c1f6feb4a8c8970d481cdd6b7338e10d83dc06007149702cb4a33f92f8197760b6546311828ca437f2e43320dee113a0eef18a0f563ee8322386eddfe199d3cd9487256e5b29772476129fa83a00c660b2fc5fdcd3ca48c426d527dbdf9903ee181e19ea50cf1d43aa96b407e88edb92eb7bbf448d35b48a558e7263514f38e7d523d015a14f57588bd0df4b842ade45b8f5cb7baf7160588e077e4f70b9d354da86f9171ec7a03905d85b573cc1a4ea65539536e4333e7c542f218ec9d3b9b6323ecd3a40016f9c8107abeaf4d619cf520a82072f9b905c3dd756a357b32e11ef25b33b74e210f33e97fd6069eabb1d5364c1cbedd7f8f12528450e18162eaff4877e025900e50a9c8205f98d2946f8a45c0c2532110f821f3d9694cbfa6658e9be799e8bd7a31833439dc80e030dab88cd22046c9e3c67e52a857767f70ccdd6715e701ce6e682d0d23f830464fb7769599c6ea21b2746103e9ad93ce0ace0c08365d2b918d8254a272feda9a42aa3cbfd3519b155acb4ef185012fe5f86bf38855bf057af3a09224d424c4e98139c887af4f15e64bfe45595a601b06aa540e75ce8dd02aee05ba4f11d45f0793adfc8516ca0d90383e6b3b2544dd73bcfa2c6910f1a1340b06e27fa0aab756091f1f75ec51229c4f5768e03edac9ee5ec9c1c5513cab1088ef2471a22a9ad528ead855af9a9cba00b8bd191870e81130f1cfbc5804d284ddf432448fee89e1fb5613e8d139d426b6970a21ea8cd230238cf09839b0d81c846378524a0e93157401f7b0d32759f3d4f980e09b5357d5b2b6e16af036324030c9e749b9ece7d0d12c26fd114b9c2270488657dcff44646412793bb4886e42de3eaf2c38227cd2c707dea8d7d6fb8c8df99d28f2aa5a678647f87e921e7d4cc3f504c455a65a35b872c3c0bdc7d5d73bd6e7194b7056dc94c23edb9bea8445a3396bee5f564dd1fa5d24c44a19bc43e1e44ad8c5bfc11d1bbacd20554c9d4bac452705efa9104fb731c1b851094e18506e790593be038ffb1d50df38459288f78ef253f023a951daa096a87f45afe38f937162c659f2bff5fccfda1fc9e383f28f69921666c88160b51d060effdfe788f0bd1d383c68cddb25a40f854ce7273b169ffa246b16dfaff761e93afe076259da99396be127b87ea1c896e8dbe4ea667c92a200a01b659bfc8834f6abc7aa303788409db473387cd5bb5e9b76ffac90b77a38de45ed073ef3ddeb3727d768ad64d2d88efc6ae8881f46075c1f2bc7789232fdce12331ae60341fa0b8c1ecccc09d86f548132881cd7fe0b3063f73b5181aaeded3da462e6e55fdbf813726cf472b493762767c6ccdf18d827750a6ba1e2856f14deae2ff5375b76c700c18b836cbda572fc8925b6f690c859956954443657f78a2e9bf78af53e996c8b3865a0b52e927fa694e5663bd6af58f433fe5dfc7d155571907be60f03be76157d1525fc08994e51b4e1f0e2d2a01cce646e02980811551f430e4eb54416bf1ddbfcce6a8e25e21d76f1756a66b9d4b908b73861c8cb54165536e879ef843063018fdb7d3982b1d5c8dfccc15cf2503be56baf51b7bb14e0925003be9db94091e222513a89aa96d4df12e2af90ae2b4612c373b9da893ced44149f6bd17c887417d7c43bc2596c8b7ebfac22a335c56491ed40bfcb399fd595293a3be744101214d8565b4a97f1de4653fb5fe2e60d9c26156aa76c6d9b70df4ce5b666979952729ec0f806b1437c46e7322c96beeef9b260e589f8b8f8632524975385d5d8aa2584ae7192d765bceeb5d27b8a30c07d950d476c9f22ca6644552cd08a42547f1c99da6c48a5328c647c688c1d3b9d0d48bed3f0a8c784a2253df6cf020bc03618546e9412d4dce36c5e74c73d6c43f7e0c9862865f09ca079094beca5048cbcb3140ba0db3f3adeb6a9a74168b2c86dbf85ec02049b848ea23252719f1972496fc87ae8c6e626cdc71d7a743c4c41db2dc735e3aace34c105c2a511205cc951d6970d8120ca7b594ac0905fa24c4b96913e2eb51b46e6c1f9b0b9da0ddc9bae2b4c30321ce1af223352d3847d5eadc865eb32729167a9e9e0991b916652eb262a202071ddd0cb85218da514e1147df15e0e076696fad408a4995967db9422d0f42f3d63767c2bc1328d0c508c0aa2864d4690d0d509baac914813c5c6eae457f494424811c9f8aa875bdd17bbb92db6f33f2fa27f552316686b0e91c533ce151e1a1c834370e4a81b3072a13ce5ac0bbd27a974f728a7ad254fa95b17b35d22b9bd746b0e98f99e45bce170f49de5dabb1b94ae5ca316da20ba512643c38fe4605b6dd52049b691dc6d87ebedb0b907f80f967d7e918c72e452815833b3bac85f18cd3aaa5fd96a3ac6359d2181a7c4ad10e24c86762d5700f94926337c7925f9f9b94f0ca2eddd19a7d0c1773a0b45ea5bf6498ba18fade80ae81af9c5c6cfd3a1e39b58936300160acdaae7c09bd71400693d6a3bd5eaf82535477aefb6af7afdd2f6adf7965c423103e94de6fdd10abab75d922575f3d0cd42416e8273a2427e6cbfef81c7e6b0afc0f9a4e91d6deb7dd4008d22dbd51a0ebf5d886bcddfd22fecbbbe37b36f0e581a526435d5b4824dd1b82dbd613264c562fa796a6f1604e73da3e2bec0e399a89f277068e6d70e9689b5ad913c28a87d26f8df4f5ffec8f81f96bf871ecb5665f77eda1806a186c9d8255fce8b58cd5ab44b0749a48fce5ec4623c0f8e09e656b65fb686f2c7fdb68bcebeca04c2a18b512d30fe365a0521757ef8c053fe1ae9e1a83dac418e75dffb61d8075ebdb080a58f472731d6006e23263f96a55fec765436653bdbdf96e079eedcc7fcbf2acb1a1d64375f775b5778d51f93c030db3276085e0cbd508b5e98d2c2e6998a259876a06802fd34e425b8e805a3ed2a9ca18cbc2a6f16b593de299daad6b7d6c87e317fc049cd9cdcdca43cd770a977ca9ecf45e19107848e5337bca509d31f320d7407a0318fd4fdf14d6c5f5d7f8aa423a565ef70d335606f2332e13051970f6708c527ff1e62707ef375896b258fd2a505ce7e15ad4759846b0d45b4f8f2a55460f19681775ed75829a5db21760878f7a0b6fd746dbe0c71cce28a2c210b6411dd1aa821274b4d08aa36ba4f58859ae65d1616db6c9066a4a4e749c06141aa73d3ec4c3cb75d2ddc34e80c138a4de31a1a7d1162e3ca0f572bbfc00d6025c35ba71dd465df06b51f9cc9a65cd384522f277047f0b08e6899b45556a07f2889c217e4f28da0a776b36cbb719c1930d8666a7e79e1ac3654465527ea1245d2805e09567456fb526b4fdb5a8fc98cef2b6fb4bc88f800efe6e4a087d5caffea8b1d50e3a9f219e14063924ff63ed55a8189fa8a94ac56f4152eebc131aa85f748f2048e2d1d3a1bd6e48aba92f64d45ca6a76d77bf44fabf2cb107854a0fa5f3fb4ff6e13324fd8273f080e2c6605c45f263f28cebaf975deff33b8fc0a7781bbd7529fe3fc5a6f6e5181a8d8ad20d4c18ad5c4917a403345a82b3f8beeabd1abf2cceaa3783857b970539ba751265789a33e6e46745d0c6c3d566c8eaa3f22df01a5873a04f17ba2d82cf3af9e12a7d19e6977630ac68188628f8369377dbed28801146e1b6974b9cdf2beb690a3b869943b6a18beaf720eb17b6dfecd896734f8aed64bdc0eb8bac1e905a85c76f12a7228c9341c4f2b97909ddffd2012af09bd438d5b84d6e687a729bc2ffe04621464590ba75b063d3c8f106088ebd0b76d51c4799a2648d2cea1325b86660bc75dae5952f1339815d09a06a51a3c6c7895e75c7ce8eef9096b4878b0476766e1c26e38259a29be1e86aace1634560df9f45f8d550ebaa834786cf5493ba75ace63d00acd51af7ac46ffada61bff585bfb99b47f54ca2696ace4e871e12b9cf261c97003cf705e889b41e27f58a12c3952c52a2827df26adce2a72eef03848aeaac6a613c1d9e8467f89ad329828db215a8071a6e93e94bf0b345c6c60a9ad785c194cd891d05605dfc55a293fa15a84e6f08ce6c6e9f6c209e3b7af4815abac0dcab20d597586a2495ef86af88e1fd46e878d301b4dbce80aba6ede30d6848363b8f864cb9c325605aae83d22305243225dc7a9e2341b293b38d702173bcaa83831ea06638171d2896b4c203ad85341d9fd139ea878364308848ccf89aec0c01c7eef48cbc0fc0d53e123a95efd486c90ada18cecfaf7c28a6c409dbd69ffa42b75eee12c24ea50563d28e070a72d26f9f7f9d734dfd79f6fc49b11a7b23b6417ea6abaec0f28748b0b22db532dd5a313a8585b3c35187fb81c0ab55c69279db4f9512bd1a159b203316905feb6593927063b5d46a9b6bd9bdcc5df7805ddbcd50e9c1f6cdec076796a0bc9efee336343fb332fcef85cfa12ef8c98e09e98fec909bff22bfb7efe09920a9c8418b18559a2d675716eed1ad10b717f1aef8d10db4289fcf90dcca1de3577a9d7883de01c5e2fb781ebebc75ad39e8361aa84e8e1304405bbd95c2d2f6ef2cc2514769aa6dd9e76cb445238136a9eb9d1d815a3848cd099e27f743611445259a61e8ecc42ffb5e6c05a9c7e5a4f2bf6a09126e8351c4910cf270bd7b8f8247d0a09fa5c8845c0507dcdc589b3fb9fe1e0f3aeeb0481f8ab43da428ff29c85c49b76c74c677801e5cc7dd163b7250c23811d9f61f7a53e42b7c3887b6a42929e0034d35dbd5db991a801279dd1ecc1630caaa0bd829c6eec5c3f2444577f77763fe6cc57c825d24ec4e7a27faf8cc777597a663f13710f5b72065c8c39d386e17c8e6e28782b8943185ac25806b122b391f8e4cd57118ecccf57279d99afcfb8135c1be003934f36a94f0d8a32607acf717abb82316c98c20a97f87066b13c6cf4cd5e2608c8abedc759c246bf8292464fef7944a9597f3e0394c09e87fad2c199714fec07ae5638ee5b96c25f7f6f001bd23c81acaadf8c289c44304e980d9a304f296cb1c26aa716e94f2dcb319c303f1e8f608721157a85c105b17da6ff7d281e98dcbb81dec66a84ceb7b3e89adb51b03ff568c18320339b20ea69730ee013481491afbbb3a3e28a5add28ae160196d7bce8c53f6335ef910939caf1199024bc17e9ebb410a3f4f86fca513bb3e0991f7fe8fb6ffec88f5ec1137c003d7273f34c80849b2de70911dd8d89e65e81c09866021c0badee7f1621b3297620a16ba6d5a0ad4f1aa0d4bf15c3a2081c6e7def346e650f1921c750ef471cdcc596c0f28da1c0eced2e9049f835feb1a895ed529d42508eb68838bc86692882e59167cb59c4686059ed70bb9932a6fcea257a6b1012890ca69fc51ed31e70ca1ee0dd9bd4131be05cd86ec457ffbecd49e9f3a0488327cdf713ebf66fb096a25d88a67222c091cdce91fcb5bccbcdc3acbeb7a6e22b4b1613a53dddb71a0565d269a41f7b3fbbdb04c19df447eb797efb46931918f6b84a3069d1783c690252132cd4ca9845812bc0d93b790b21f6e4c412c4a6a55949c94f00c12604cd83c79f6ab8a70303e742382c0ff4e30a2bf9d8c75b084a7f48f472cdd0d2e1de07212172eafd447539a63d81e131c699b5d765c2ef38150a044f7d9eb0c853a4df58cbb0549bd525506dc4d545f7a01b9ea6e549e701a9014322f3c00fe759992987152eeaec46f9757b954cd9b32c48ed0164bd7a3dd149a88c89c34b2befbc6a86a5a8fca87666d54e4557a0267ba40dba0ebf65f517d5c522eb7dab4da2f1f94522729d39a28e2f34174ba9c7da8497424ab41dbb96fb30e3df062353e4d97c6dc4e00b2351eae71c846e915f71e42d3a0bf35944fc4bfb8f56a8122ee26cef37d6f7c03f6ac86755f94c534eced2523dfea9eb24dea91cce7cef896110e60628eb029d659c319074dfbbe5cb3ef8c2b7cc8fa70ff933cf94175d6ef2ed8a13e3b0c1230916b5b24b010bec40b6fee36c8cecb934627dced7f51d0aafff90b193101e8bec2645a8054cdc5a9a8d2f58cd92379a106c85959f7da56b7a261668028a24c9d1349050bc9369c201f1a8712405b417e993d7ce420f9e1249b4ce1012ea084d30bc1d443a64f4e6910b8d438c44ce7b45e9a3f34372ca4617de8aa7ca3299337c962575b9044ef7c02ffec122f1ab9fa8f2cbdd7fa5ce2f5c4f9601143307836613ce6d26b5e5f0508c7dfbfe817214ba66cf36cc622c657b7e8d368771205c16717f8e8a446fe78e6b997783d3b3beb0fc14852b4a4f32c87c4cccb85d8d0c63b93e8c92cca38d55b01eeccd32a9def3eb13926c3361f7b3c1da91acb960f08b2a6d228ad4cf8dc054f8c57e32340016b3767de1d79ffded68bb82c46f87158285e08ee98cef79a38f626e777b880ac4127bba00544450196640d8a4dbd087700fa2484da8b8253bc8b403670005cc7ff50eb1f3147c11f77e76e6b48bff24d4efc9d5156bfadde00ab3f7225ea19043a890df415934da6cb9421ede6aed7a9a2d09f16fd822a86f521d256d7fb8c16514c722b7cf71c961a10596f6b21d391efe53aefd8f07d7453d612f751a7366ee2eff40c471045510490d4d3d8625d13b87ddefddc8d1a26bfa246c7166d93eb73a42bd75f926623b0180712d216ac41c0492390735f61e7e1c0be5b3a2c74b1ec2dd833c326f1d037b9180eca917e0b4aa06d1309018eeee7c6c55e47ebc81f40f5eb90ea5f4a226ddfd67002965bbfdbcf93a3f766e3362da6ac0353f2a26014115248890f5473b43e39b5a9cbfb13f1e265822cd297f6b0488bd96fd07f5db1bcd35e7f0a63939ad665b86c0db77cd5700e3f6dd62f6407f7c0c5f5124ab62e41f8d1a2e3c192b2e3f53b1b3aa241902a3e16f7c6b8843637c77299da818d2b6ec0608ab1f3e128f90ff3e933effe978e6578c9af5000e8a052ca8a213492490cdb4b21285d18c6d3b1e7eff7fed5457fe52fd347f258b7d58f99e605ff51e378ee6bbae2d24da560c0c0e57c8682d12af8800151c6f2bd722a1278741a4a3d129ad54d00316b7a8043fbc0b073e84fac7be698f993758e80713c0f6c761b10fdefba15ceb67ae58a220a5cba5220a1ace3626328d1ab16ca11a734f939c567598e6dc60f806946e713fcf8341fea241766c0dfa2fdd7ed843f7a5fef898cd2068ec3f7486c4c1e713a28ec3b22cfe1235292232751090004b1457f80e568da98004bc0b5f16b321b2f2b00dadd4e519599d1ed9dc25446408755ebb87c7d0d3545f394b238b2e401c726e54f7263f42251684792a58f5047dd29bb6e0cfc3040ebe685ae19b1597df3e627e64a23507ba97f94886b8429fdd56760e31bc2fa4b4dd6a5fbd7223b64c4c78478c5597184eb29a594525e8d96afbab7438aff9b353c6d1700a0d18c1469d2975c2de44942da2de2dadc5e77ddd410124db918cc91a85531459527d7c0bc37422517d3686a0ebdb9486f0eaae6265c5be836a49582c1fec3405910fbc606167ba20cd8f4f5a55bcf0519d11a4faf54fb19492136c5f5a22a578a6cedf91e1b2343be0eaef260586829d2222627dc1cc10d8833f507256002c2b28f7b44772dbb3eb6bd9e7c54f320350cadf9a7329fb9c1ed6e96a54b679f2bf4561d04f7cebac39db0d404be4faafcc7a649a211639e1e4b2830fbde68b889286ba66655e592cad19b98048d8ba4944300a6bfbac6679eb01e7cc80f9382fd815d75cfc66b391cffd7208e6806903c22038762beb75b6392169d1dfd9572c1043504d8bdfcda65f0b5d00e2e507bec5fd0159579cdf3cbaec9c2871ce6dd3b46e3651ee45e7e0ccb43116f1d7ae8a99993afee7a49784ce55e6d694dfc2361b133749d7b775c8a67e2c223dbce3031772acb324d4f7e67c95e35531097e4a8e44dd5bf7fa04b2a4f053bf5f286135975de7db632bfb8d44f2c5c6748141bf2a4419d4f6e89007f85425e48d554580b07505931b12b23be4814a107f8254437bb1abced5356a8f9a3a92ef02e931416c306e761bc7a4c85cfa8034d9e1a31962df437e3a4c02bf66e73ad66d639850d5686fbf833ad04b214143e4d48337d3d972a4bc7a4eb5e38e959f8de5457ea1b08a632f2d387163886136b88fbd269da9286b8a88fa0a52e08ec97b2e43ea5d0edf4ffc5cbfabe8561a7cdd86e32347c172a3843b91d88774d5325370336e4305bb33c6289c3767979d82d48ec4bd287049049c44761e600fc8809ede91077956aac1f8af35caa5f9612e18fc5e49aed74622d73c22a08454456bc34c88b0db8563e556e4d930643bfcb229800ecc0382f81622e73d47304a6020b5fea64ef3de6357db2d2be005f3a5da9abdb8864c082be9b61574d2db42a14fd4b56bfe913969b9d637fb074da90873bdcb6ef8ff51e44e503b034ba692f8fa8c0f216e0e3d49ce0d3499e1d37813b8c433bd1627177e887d9ace3acc0b020392c72bc3a7d4d418ab02a2d9d5341c9fdcc46195d38413e22d3a4210fb20184f8cd5107f49a10258656234f2c726c46015a0f609e07a780f98d303c9d2b03a98bcebbdebd12db4028b05b0e8ea254c43481f3b38b9bb1dabfb5404eed226a1709dd0fbcf666b0dccf71a2ad44004c2450705b2fd91836c8eaa50a1fbcb6a0fec43fee85d07c792b7406f536b75c803d3bfbfaf9de41e035ec33760759484b6395f26bfacda480f337a4e2fe5a03cc5529eb8f197bc7417ddc5fb04a6c3cdd6e1f2d9d05883a7e7e92fe53387679d430947655334490019870b597b0ccf653bc925d1e7d43e51a2be9246f6e52743d696cc45ab658967d10e7a90861296e2f648a03e754f1f09a0f217583a63087bc142f55814c535ecc993a37173ed9f6ec2a8682a91897f18a94d9876620b59ec3aaf916a9c651e72090d80b6da17ab8c552df1a9d84da49a8749cc0bca55452b30663b0422a1786fbaaa5029fa66b4a2daca6a93038debb490a14f73a656a762c54ab7832aabdf6abf5ddd3e2e94d32e13e059cb67fafec6687224c1ebe8b319fc1fda4836843dd06c3c027ca5690bec8910829a874e84a712cbd6ab28175e39360b88509f60ad7690adc41d18b94892bd62fd53c685b12cb056eaea02585f2de8e8f57f170a30a046deb8b6192ce41a193a4e6a86c9b79deee06d6e7de0a63b00e88f34bffd849488fbf510642ed5f0e0b4ebcaa7629cf92a496d83e4f66d0b9ac8cb06e37b11efdc5934646d09d69eb7e822478398c6b878340438a24a258979ce3f7ee7af97c2fd63c9c59df271f4217e7744f9e260749945d4155630bcacb664358758497899af1aa7d4088992ae7279917bb126f3e8ec77bb9cde6ae5ca3d56e9a9ba82938af8278a7164f3ec46262e6a45a67f07f78ab06ed974853728ba56eb66dfff6f4f39d3b95a581337f84b1b9746b036adc104e06efd8c0beddee272a91d3ae06e5c27cac2a324370c76ef4ef88102961f596291df02561b2e9972b0fb9dbbf43002861294bc04d66852de5ef14af725316a56252dfc4931ec0b3f816cf7e0951b042b7f623a6365d4622ab534088a6d0c164d44d0642c5cbbf9362746b8c5f40a41e69d99d713f251e3d349c7980e0dc9094822174568860058fab410bb5ad52e3f6801e6fd707c4773daf3ba49148423ad79130176e6567c487451c00d1a698e3ec6d41e7ddf124575fd4c82c3c2d5028e57639f4050ebfed30b04b22263d344fcf580014923f25a5e7f717edc2f498425d69e30bcec96665e17938808246dcd79ae81532b8e67fd0c1a6ab9bdb3a087660367aa443d95c5bbd5c480c06a9314d23f11baf4b5710f9ba2ac50d526d80ddad4d8942201c50f83f896c2b34cd8bbcd4f66269bf5625e9913e32db24cb0a5cf0b46832b90fc154b4389c57a9d564ff790233aad4c3d98d5567f4182e2dd966aeb1affa965487a48b1f5396b029d98cd1f0ac7b240c72e4bf9ad2d9cd2a85b9dae48999e9c0c973e1dfe3a019b7b68bc049ad583a33c1f1073b5d00db120d6e2ef363beabdae42f43965702dadabc44a4d4b1bad3f9a9a2ca98106f6345f6086ade05e9bdedb6dd3407899310d51243ab0a983fd422b5792495d329d42d7b6ad203495b152cf8915b4aea789dd34453c97a6ade3bef6b6948508fc3ee418b4121f08484e889941f17d6dee05e76727e33e8fb608d665547ca96f3028e66c9c860ebbebcd5875ab4bb8d7fbd85ea77c3fb6601a8ce8f2f91453484b632dce1d1e5a798800db2955d42007b5c17b2d9f6cb66e8ca7a8363fdb305860d3162e2592cae23ff833c7ed87ea78a72585f88afdd9c042c699218bef2e66d4e9b0f24f00877a969ded92a524454e55f6c1cf7e86cca0310ef608bacdcfa7f4bc5270119b0e56141e96d0a6c9397e0fd9079e98a363fde4ba1e476c52221978630ef0be8d14b4edb55fad5446a010c1c0bcf527ddbad0f3f40c50b16e5efd533bfd980b6b344624a94c1abc6969b1ee4427b483811386d3495902b82d2a2c43234933728da28d939ca576d68771d1a1181879213c4d664e805f60c93ea2bccac64da0b49fd26b71b9d436f3b9757a2d91bbcf21903d0fdbdc76e460f460550cd14d89f97cab7e7ffc802e99e63e9cc39710ac147e33bebf4473368c6da970ab86779171d84cbd7b4b33ad6c8fcf54854f95ac8c8cecd36f33c0004dfc342042d530c4cb5c5045d5fc57dffb652765630dfd09933811c5e87797df023cc1fe306d5ec4230abff2ba7554f1c54ccca1d5bd53904ede4b4ea5b7ffbbade6e9e50e46ca7cfbc3fd0ee78958522e9d3acd13fcbaf714613ce4d266fc980e215f9c3782779ad8167ef8dedc27ff6147cbfb04eb0704314007a76e427a751ae65d22fca2c64ec69f60cfbb6e65b6b92fb0c746f234ecb945f99aa84b2f2f40ebe2ae06b4222e87256b4e4a9aaef4b296d25b1cc62ba4dfa63792ab27d85845cc6e448e4eb1cde06e059065b7e7bf93f19c1d78acbc356845d34a3d76d16e0299b065842574997b4538eae3dd4c128133b50225a6a9a63f52321db9cf49ed18f18f1c9872dbec023f9393b52494a1941e784f844d409fa72b376f3e429f5b3c811510a0a8216918bb0933840a740e0202032ab833796b28f6a09b38539316dac8f9279727a3cee7da28bf704c4eb4d9ea3b048285da75a37d352b7ca8ca0c86ef033c49c3b6e86468c4923fea95588ab1e15b0ee1e86387b50c61ba2b8c5292439ec433f1e18b907ee028063bb46c1a1a4d1e42bcec58f17d054cdb3295632aba43a39d7b8db0fc33edd71bb9abb8efcacae633583658d6530bc1b84de5f156251ef07b3f1ab2cb95ea4ac63a43a58c2847ca8cd499a754147fd04493595a74293bacaa31caf85a6fe737ea8b47649fe54e2bf68a681fe47f3e490d6e60f03a5f99703323067746fe4a5518924cfd69de8ca882ae83ef59dab9073bb2cfe536b1568725d53a76f69ee6f8d5d0bd2632878e76c6ad548a1309919bf9087039470c67cb1194c0ec18a5835a997a19b4f4e6f93c23ee5c9fa443a3b0c950afb4f9db9b52f9adf427bb6c53ec16282bac760ea66089cbbdc9edfc29fe18e73319c07fcf7e87f941eac7fff2ebf929a2eede7f4b2041168ad48c60f61eba0bc9d508cc2bebe6eec99355f0f9f7eb24bab418b69cd0f12a4cd5d4729a8eee23d1262a5af46a7e1e21b7ae505e5641d50786f017f2d907cc0c830f5222cedca8063da4694ab608d604dbe3c9eae5bf3341d8d3a26ffb913eeecacc73b48df72ea67902d43ca8137432c62479705a5c44091565ecd24639765fc113e3181c3a0ad88e8ca6851320db4fe5c219bf14bccf7561d01fd218670e31599e401a287f9d7513a4eb4a1ee6b60a7c7c0de3f3736691f9eb1024059f654d9d2553722eb772c76bfde824346c9e7a070a4436a18b5dc513d457086735645372ff594b9150518bdd8f5a33c383ef8646e286d3e7ef8258933634ad70b34519dac106dd321019f561ab6165b1efe21c326632fb0eabf9678f84f1e1082088b12538a7754c5dfc7c9219750cf174a825f87f0f5a3b0c0b9733ac6dd3e75f8ff6ea891a7cabb4915c1c65c8aea65a73390aed11a70aa63b223559cf6226d9639f88cfba0596071497a6d58f9c33cdd5b6eb65f96d1d87c6d7b7b4466c106c8c9b64618dfcd5e61d162db262f9538d230d9f32dbcf0bae85339fbb652a0a2e07687ebd025bf84f8351e2e86cc6d1d5c044cf360514a4d0c75b20c30e44629f26fe9b5b146e8aac83eddd6ddcfb4fc8be46164687e605e385bc32a597583e533999c5a7ac8e0e119ae70a20a15c0ae257a24c36a14b157a92d156c76f701c89a600499b3fe829d3a66e66c5e1b4ee664259ba6fc240bf3e2833bd8aa1b050afa7d0247ef9803084c53fb0adcee066599f0bd0a66ba562bb73f2df1ff3c812fe4b07ffa6cff83d29b11279fc371084edea8adc8697907fc1a96f7098188bf52703bf8e1103d72c9a30c72c52f7d38ec2f8c12f600427c3b458ccb109cc7a2fa9b5436f656c069ab30b64b4c09806b37e5303dcd1c73726f646e02d7127c70b0bdda7cb776d9dbaf5513d2206efc1b70ff96b36c54d072f1c4a8aff6582537bc1e7577015410e8cea0f303b1474d061c88576e5ce37573512c7d45a34c692c913d2ce1bb7d35182a655212b7629cee33ee390a4c1d8880ee0587afaf140ccfc6a601221e0b93710038b95b5ee2d9899a198272546d77201255f3f6c9c5d88f72f961866580c3cd3381883ff669e5848c50d2974d426b9cfa6346adb342f80fa1664c92ad80550701037ae4e69ae0a8d92438f918097b55d8ac964134afaef12fc8d34719b8f06a961aeaee3255f83a32fb6cdd553d1deaed1bdfa5a8a94b00adaa65e1331dc98a8c38b3b33ea3496a6f046d14ee65cd5c7017a357d4e6532108fc2e1b2349a8e1e9337009a63c12360bc5f9780611958607bc431a85b7adc14d712435b1367a1c13d241f533c09ea4e45fd71312ff1e2a419a177401129439ae76dcae3a5197c34b92d98bb185e4e98be57a644b095f0626093125e30c011975445a5a83d8e8e248010f15183ce85275ef42ac07ef7dc4378d2cebe1adcbf378727bb98dc44cbe96a5a31fa909698a5f62ecbe0762482dfd53e178279e14eb7351db141bb8cfe3cef3654736cf0db3b7f05cab23aab45c9bb4e8de79bd5209931e24cddb4684075095ca18dca999e9096c7e8d690b20697a000c560cb77b1057f6c18a16ea86fff1042fa02f2eb0806177fb41e7b88204c6e2a48fc9d03225080ec9de4734f85b4e70aa783643f8b3ded1c1ca0b2449855593735a75c0c438fcb13b8e681abfecc562d69c498d8752e77db12350d75289c8c21751f0007dc5ad06128a77330effbaa954f2fc7c549c366b922ab8c27934d973bc5fd61783fd528a4cb5d58ab3898c38ca1cfc1c8c437ec0f8a5588b10f077218956bcf9052f6fd5b2bb2ae874ea5aa6629f1ca87451abf4ed12e33b3539225e39af67acc009aed500c043160649999fba141d22fa118eb9b0136540cc2a72a91dc5718f21975573cd853c90ce068efb75c7b6facaa370cddf3163136165ae3b9a93599d0c29ff3641ebbd7ac93650193afd31fd3e521661f004539b428db5081573cd1a3172f4b28cf7f4f4269af9b77e6123f5cde715f4e3b3875e0b26c286bd7dd1f540e92659aa160ed0ab69ec6d1565511775a6c9fe7f3b1f20ac045c3faa6724ce65895c2c057847739c0c2ccfe3b5542b0432489ed7ad2180845c563d0c21698f991f9591fb819c87ae42cf9c71b3413c7f5ed79a1387ccaa1cbc314e9356b742e255c39bd00b5c2632d0f0a504d40d64794ca0e32aa077927f37d80915f72c0e80fa0d430ee298daee8bc4fd7d9c831d2c43310ece620d4d360a346de1c781ab77dbc7419e6f34d0e3cd8dcc392970ca4bc779a3e33e295f921db1308fe46702dd42e115ea7e340159cd29b2ea02a832d479dc6a34c635f03ab894c4948bb80cb78d797426200e4132be6ee3a50eabf90a48051b145c36340e3b9d05a76219f77cbbad77adf85f50c42480cde4afeb8fab1bec41db02499893b4302b05871102eb8cc3befe2b96048a83055c3a47f4d446b3e5d0f24d4863a6e51e7583cd78dbe185fddbf1c2ad79e6a61660a79d1de0a276deb9b689eea255d85ecf8299ebb1043f27d5608b989a3b14e10bbd5a988f8d7f91da2e808a3d18f8490b26fe83f795fc9970364c681d5d7a5402768f0e978a3dd203eb1e6a21e922daa48ac8e4e58119670abe11e05d7ce90dddd1bde4fea35d8db324e63292f370e2095a66d59680696c30d0278f7d92ce491991190d6a58e2e9f9f0211faff7ce9253bbd5f8a78a9744829e1e001e90532cbdf36171f8ec02b9cff3673ad6f190b6a7e9cc073c152388652b53cfb85f8baaf6977059176cc988ed1e19067e0ef8295321cd400101a7f7ebb96dfbb37a88ad7943ec9c84ebae5fa39a648b2fbb9f0ecf256314656eca9ce6886cbd5d01c4e7486d1d6b54abf82df9dc052e21e6ab2e408da63c8e0cf69528a0b937ae8813882ecb0b13c1b1a13df436ff5a9960d93f1429ceac1a01541f31aa100e429ddcb9196613e93384695fab80361c4185669291269ccdbcf1363b308d8fbc5b9938ebb9060b01386c91e5ad55d497a844dd4ca4d5a33b6686d4cb49d2e2468677632718e9fe7daf5f4a8cea3caeb45224e12ac020f75e2d6c3cca29da71d84ef46c47fa0aa059e137c76b76ad41e00350d950aea5bddd0ebb88fccb016dcd1b54c2b7b6e995e6e49486f9b4bde1badd05aab4088851cc75c98d8da08ff9f00ffc6745caba30d07ee157c280a2c6d8dcfc5acc35b0c08cf9bbcd62a78fe3731db7ccbb71072da4349285309a67779517518e0bad3ffced96605242042cf17254b646167ed137cf8b0977ee7184ad9fed8f7892958dfaf9ffa0cc15f1d5464e4395aa9ac9dd4147ff7b17647f8db420d79ab45ea966e44943448ce1bd05ff939c2ebd403b744f05701c36e65419d89fb1df878cbb2e05dc2a8fb22051b01cd2de754d9cfb363bdf91f7d658e985a2d1a962dc4cd493d6e7afda3cc49ebe5c13850b93986abc66b29b5a04b3c25258bb29011a88c78245d0fa798a8929aa19be7a1daa8c18d140482147c47b75602e9ee3216b42ead2d717c2c329955cd1ca0a97603cae7268306d3c863304cde515dc9acf817e0f89204cfcbb4e84d2ee32ddf6993d8f0c1b199aee5bbff88dd135192b70b19100aee2ba91139d3e03847c8f2e59a7f75db5e9ad1b74cad4f09dca345276c8d075da73b309a13a5d135233f95e5a316679cbafae66eedab05d92f1408323246232da3cf5703b7a1f5afd092f888800df56648119972e0ad7e3dfdea821287fc6e9e0c12fedcaf43038031a73b464a46f7b71e5da759e64260885776627de80e8be1298c7b16172e7168be10427817a246469834a23701d20ee67f4ae4acf9fd6a0a5622136e6a1022e2fab040e4fa1f769c16e97d1bc1383f81d98592bb539ec16357b6d57eb9294dbac5bc5a671f04c107538f020ee9ddca08a2dde46648f7b1cf8db84e7f00e6788bcfd392828bc0dc6d42937fa20cc6edcab91ddd82a5a009d8fa2c795ff933095d6536e08b562998ad143a21d13e84cbaf0b44ff1ae5d52a196ec5a341ae49657b1880364d01bdaa6662bf1d73d6853e42b989fbf3252e44f672c9a2415ab0426796753ee82574ae5435850e326604e3f5618d623dc3eafe8901677f0bbadf6549fe802719d0ae91022376c2ca128237dcae680a0c4e5cff7ef247184d0a0792e97568ea3a9cbc15cbe170c7e72b24eae91a1b153ef3e92e85bccf87a80573aadebcf186c2a6fe9de5033a713622c3b9cfeedecb60adfe577a4823e80d53a4559b7f6f744cd34e8c9f22b8c092b2e2520a8969b4e3d57c312b701d879c72f291559261b80bc524fbbd73357e6ad17967097b98377fdae327158d8e0f45af34c95381862f848ed6537d03318357e39340e2a7279f7ede54d5f15127af45c03cf7d805a25c11e52222445cba401373444a9ad02e3a6fa022bae1caa60da4fcceeb3cffa97bfabc07e91efe37df5c7873e238d64a9b283bec1c9d179c349ab6f876f4a1a940c45785d1181a982924a43930af45eeda5eba2b39e93c1741b287ad524696500739de8512e02f74861e1d9ff883955bd5e0bac7ebd1295969ceebbca0726ae4578b21fecb85024e621b708fef969030f7c0adffa0715e308d1f6f2731820d03b9218f6011143e15ea58d42515b860393e7a23c5b819ed732a156014ab8b7fb85bb05ab546eaa9e812ac17695e18d820a83e1ce8c70f310bf6cdbba2acbbcfff1c33b6f587914b3918f90908259a19e93bc5e4af8071fdf9be63e9d12c598f8c714597cb3be6199de5b4e68b83f35c8a41e4d39386f78c71ff770e3004887a1e6d7a7dc8c5014b00e90eb00252b90e046831c56608b973212bca85af455f3f932a29d35a4beb73b940659bfed961960728efb0de63891ebb2a85b60b14d42488498389db36960ccfc304d26600424b4a7d3e4f1c8b9db5330c54d86fe1272e8316aba51d1e3e6cb2a1c04b7721bc014f1897722b045c6e6d713fb727a8052f7eb1259f996628fc91d58f3b440594cc542a7ecdb24179f9970f130bdc326c5172a44777d8170841de89d01c94696a599db890f5355fd0d253cba8240c174b13687c3f6990afecb707041dc5ac1237c77b18ad769441220efbb86cc7b3344c9c9e4935efa7a78b8388118338980b4c66d1ddbe1d2edf439b0a0d0fabc9fbb2c81d51a78bf3ee48b9e73f42cd45fb93849d3d8261a9daf1948919125579d7918cc0adc1506da318325951abfbce710c073cc6681122a459f2b596e68a9300b9c90325d9702879d0e4d0aa06a3a880ea969f93d3167fe4fc9fd80734409a4abb44dbfe6215468c689bcf89a4074e427249d5c27f1de374ac2586aeedd8893194038e2942893b71c100aa43575b1bc942a84dcd1e78f1feaa182abbeed52076135a4cef041cd5f3a83738d87e8b372a3520c4d741e5add473174171b41e439245a0616c29f73b824a72e8303da981a6efc40d76158eefd5a5bdc62bdb6760b0b4bd59c27bb34e7da7e36fbd603bfa48f2dbcd97ca007c4572d9e8b3fd41626987f7b1a68132e63f38341b61d689e733fbec433a53a1c30c7ac2572dcb86bcf5c02f2f9dd8f304317ae5640c8622472779ab30a56ff1fa9db3b6a548de1a450293264fa7ae93ffc256ef57905639133e2ffe64ecdc0bb7117222f93ef4512bc7d56d8984280628c87a1e0c0ba5eb9f4073bed3e6c04adbfb87904f237afee4e98841a64f52f74ed5ee1a338f901c2b9bac473c72746653e726e74fa71d8a95205e15acdcd381019e0d66082160e5fead503de152d7ae258e7ac893100942a5f4a6f71a539e8ac71b247a203912d05dbe58107613d7733b09a5b73e05f1ce39176475799972fcda58935e6d9b2b8650b4db88fa93c000f9b79d7b6e9441f28053988035698b5c338bcf82c59d1dc0ed7eb2f8a8762d620483cc220e2d37a03597558151b70e8eb91c754551a295b3deb8f778fe975a8a96fd5d3b2c44c7260e976518c4f2e32c12df6666718d948ffef33632742a2be21e6199add37855c4fdab635765fa0fdb9bb52479688a0359cbdfd0d0f2df0d457fe5da88bae1f44fc52fac4f88d5fcb0dd1912212ca55cfa536d1be48838ad9c742c4e828f0e679a92498ae6bb1001a730e14ff50c1b55d01c30d2a0ccc9abdc7f27980be94a79296806defd70f5f19d6b503305d49ddc20590773146696264a848f95d7c10e69ae0c838a37c3a8377b1e36bdf5ef548f894cb43db48c4a5e0d09adc9f2fb0691cacda148eaa50bc04f55d32672afd6fda0b9edb85e38222f9599f9975238cdc41d75bec8b5afc083bc6d32b000a0bfb4bb0728f0b4f2dc7a8de9911de49f537e8c70b2f1a06238ac641d18a34f2ae31c4652d7cc300ae9e66212e3ea7514719255a5634772a4461d206b52f78788f10b8be6d6343d73b0b7d72ad8568b059a8afebd54a59997d78d6f70112232fafa84a26048a3006534939bffc283248e1d229192efd01fd6d9ee1b691eb5be148ed7bd6ad13edadba2940a3c23e53c5fc74d35f47fb59072792b57beeda46f9bccc6fa3357c3b61625c825aaa308e3b21c4554686e75499b0903e86baf23240643de2f83c00cfb25e1036152b6c74d33793ea653b72a9929fbdb32a14451e5a2a5d53695da54bb17e077ae32a0cf6fb3842cd3978bbb2eedf7e7d0e509d9b84db6b15380c309c13e38979c0c96a1f712714c52c9a15d6b48909143b88dd3717e23b8a5bc45638091fc5f483734a8c50b6283cf2217e79f07a914914fb4cf8d5cc114f2f0141dfa859b403ea36f7bb05b0d37d6d1b30d1a9ac077e1a88f05a6dcfa9d75dc51131a7df5efa382ead1785c2a6e3c6f99ca7ebf2f1279052253c5e2b02c68a640d0f2e96dc8c91bbac45bb8bddae3cb6b2c02d737a060ac654d75ca4ee5718c097f4c0bfdf5f8f5fe9f566a6eaaff7ceb2348a535ab218404c98ea6516c454247925927faf2cea15870480f811077de8d4005ffd549a1cb1d7f2f678653a80cc6e896425fb0289da5d8260b36ae6473658793188b9eabaec8a5402155c57fc539fa674dc4f79f7ca6e200d3bd1bd8bf0d503e514d365d2f9988fa2baddaca758da902f1991c683d451bb9c63e13f79ec52c381bf679978ed5064cc3edf2b215e7f312d71dc55425d36bc3d42fa6c7f528ded302be0b945495d0223ed67123bc0710495ff774c7e0a32cede25fa7f83c3b8310ba76a9bfef51f466c8116061aeeca8f94f2033ba4650c30897bfc77f0d434bd4f032c068a19a254a3d4f7beadb38ee8effe320fb0cfabf91edc23bcb24b699d99802c93bf693b946bcfe18b89bde19e7ca0ef3008aaa76692089b21358fc081bf7c2cc048250895cdbd21aa5f4b54015e9f6653f682e23e043395b76e07701323992709e456c201ea49061c519b4e94d65f47934ef2be638d5d4cbb1dd3b06d8113509bc806205c2ed274fec0d0d108df81c0057c0fa2ace266f67e66f3bd76595754a327ab6aa385258a7c81a60ce0a3a395c34eba759610b0a6e61c313bc409c10ac9943e4d69a66a5ec2975b5b7d30c1b87a95a723111924246d8aa79c9a852e681591ee244b7b782658bd12d7dc5e2a2f2b130d51eec0cbe784ff44d151e98bc7069c708c38366fb42e937716443d0c7f5685d23a07249e2d9491fd5a1e0b8354d178fc93547c6d49a607d54c1d768495e06446420f1234378ebcb8467e4dd2f87af1481799c73752bb53218688f1b5b3b21647abe0b946a5072ce070419280e87515cacbef3ed7edc3e7a7fda407af221b44556cf0b53eaaf73b7865d8d0baf82372491b5b6e3a4fe11f396008f47a7da567f6f1501c9774952d5e9fc3d1c4b7fb508d3eabc584973a52995f053d02aca65830caf164a23eade381932a1d15fc3b24bf9451a859847d2be90709a8728740881878d7bdf32366159de06636e960f618631f3cdbf5fe743a7b7cd84e9821d5be138b29023f39b38919d7cb912470b579e466a80dba48eb78beae1b227bc872695718159b2d3a04d2552850d227f30ec7c1f4738869e01971bf5a6cf25cb3138f8f1642d378762229ccb209b4c6d3f461d48610aa9bb16ff1ba5ed04439874b574c7da1962febbbccabb45fcdc6a2cb989a4bca1ab8bcc832b377d8f590fb2369d74f99122dfa4c6637ba6c31279bfb12f2e4fb9a4ff10dbcc16df549a69a46a96695f9783c906ef9f693bf7d9cc41dd2ec1bbb6b2b0bd8cf43345c6ccb9acdcb0af48e4859e2415439b395d7a79aed295e25c59eedbc5d6008852a3b61eda17a3dd84bb381f5770c605bde2abae822fedf67ce164f539607afa0f9b3303d6940053f65d9d3e9cd81b8a1216818e90398e1d723058619ad9cea021202ea35ac7994c9b76e3d341c1647ae2e68285803e590f9da63470a639099c22087fc88aab622af87610c602ce1f4b7bb20f94b84df4778fe811a4faaa2cff128a964a0cb1795ffc72d9183714a58eaed95f79481001e4a9957c7e91f84b2b6b366262e6f947c295140a1c80cac54a09dcbd53ed18c0e5d45c5aba4dac1e5a4dfeffc1ead4cddcade9e2c577ebf02ede05f0f97f75fff8432115c4b400b38b4314cda7c603803411c2680a1e2997781dd814cee00cbdcbce600b4f3afa1d0560a7c0ea4f6bf46fa9d63ed51bfea16d095d91312c8a7410f0b08978998db29db13a34b2a09b51a2f1c50da988f15469953310bcb5da60d535b979d02164f25a13838f7252b8115e82747f174f86d884141d7822a690014ce5e4d81dd859eef6d9c99eb44f4c3d3e36480c6808a2d9fbad0ab675b1b1fe1b1c1a399c28bb144a349266c1c8d57610c693adf34ea670f59fe1a40562547af5009037f8dae62a10e7ea541cee612d0162b383704888bdb1c8a035ffd9fc64dab43eb8b42460b56ba2b48d381ba24657c931607c31674d7464fdc4950ba8bead1dcce79711290987b0b6b84f444298069147851f9478d213dee75161d90146618198fe9e355211f3002a740a5b1fba77bcc1c247f5c7afbfd327b29ed241f00e42caa58cd58d5ee198c2a819fc40fe84015b10c592386436f20536b67b13d23ad226ccefea4a7e964b1ff9f2d163fb68619bcc76e3c92d30d1064c467426657de6a8ab342fc1b8f26c53b9d9a1cc7667ff5d8d5e20f1481586801f72bf371bd772f4c7db72088f5bc9b525f10db60bfe3cdf9328177bb0727d94330d16a88659de397cf3dde5ae674e994d1b0eed65ec5416fa644228e26fcd45d066dc31151536f0fa2645cc389759bd1b2adee6712d03453c8cb2f08ab1236a2d113c99ef9b1067dd36d333cbce620525d20b7b3274f72304767cef12465a81692c176826313367c6ba7fb96aa216bce8860508df368878056a2585f67d37f308d7907c9884a43fbdbd92c144a9279c07cc2dad8e45fe7c0a15617e4a43291549f52e436eeea2d78c93ee31854f7da3189f65b3b634e2515669d6d630c1c0e49aabcbd4a59f659398360a347878482c3a7ffc075155a190589bf6306d2f3d8c1bbcbdd374d3c1a82725f0fba2fb9c30d8db9b1169a7f7e2f123c78efa8081c946c196ef919bcd0d0acfdf8017a13e9ed0603feee90b02ecd44f9c3e539dd1d9f598ca87ce2a7d285844b5059b6bc49092b04875d90108d381c73a620f9c944a4432283e5b160ce001e5583c48c8b3c0600b84fce8127ffcf513b72eb8c8446ed1f000eab0ec4e9833593d7294d87f72d414dacfea96be133272ba7affaeb6b7911bc35d3aae50cc6a23bb739b0e590fd798aa07a1cf0af9e78cd084efdd87291198deddaef21570026a8549ba7db7af24c0bbf7b8ca77fb9017807f7c412e5c153b29e1e0db3d3e3b68f589d453c57da104e09e8b3c3b56eca542e2c0d8b110ca96ff26e4b66b4c6d5275c9c6ff3c14a03e9fc24b70b5c5ef7eb1a5929b9d83a9074e451dd83ef3161a3ef53c7d2c257341c356fd4a013a1a53b2d6b52faeecd2b6ac57617026dfa6442c3bd55fda8649532288ab1d1548b928d33f01d721b18d0f681a897b3c0e054907753ec16912573cafcdad388ae42be255591b9ccb838b1c1a880bbe7bba308c3a30959c8d32e7a465a0704bc19dab6f2b4016becfc3a383d451af26d6a62c247a523f17ed86aca546f7f03a7541479a52e0ab5d0de84190db5991b43a33f6360f68ae09d75ace5c34bb8e56b44b33616d705f824357cd196d5cef7e1383a6196f5bcd258e9a244fecc6b22727c1443a8a766c51c35dc9b8941ae3d75409ac9cda44cdab56adb754b8216cea5bcb974b1f4d387e32bb0d5509c136b9920b8cfce5160b35a0e96372ea10fefa9edf986c6b01b78f2f5bf476143c4e2117801bce78648d7f52062f7571ff694f4dee5d71a756ad5dd3e931b3b8348252f53e116bafc89a1d99d0c3e5021a94d906a83a07b1af3f436dfa84808a22b4b0193db37c2e7813bd9d6da91e6cbdf9d8b2dba48fa01b7cf7614e3a5511e9411bc5c7207633002184fdadddffcff359f94e537f8ebd2abc7217bafb211a366ba72d524cbe0e24e2d1617979c9bc981caccfa147bdd8a7ac886713f3d2c852c67fb06bfd14f289e008efea067dcb840bf4052ad0861c9428af726b17cadca9bfc8126568830b7229d0d146d9b9da4aa20ccf35c65730712d42282b57850543c13f3196e57a6d94541208dbb264ffc8195d92703fc0c46ba65815c411f3f5253842ff20f86fb714e4eefd9f70adba5814aa2c738847eac3e658165a09b63a480c4b19711be12008b7c4c06e0fabab07cc2669a446cbb600e2abf30dc8a98fb8ae89404c96a74100b5f82054b78bb14565ea1b3d795e619f62cb509a2947f3385a50c6997acff1dbcf6e1e79a6ace31b0128bcd47862ec2549c346fa7b2f2f9f53cb353d77daeccfbc221a07fd0d5d333f15e81b087ab4d3b15b81b58d218ba476424f260ef8043e5526ea94fb3daf8cd21196edf813b412f982054cee8feae36b1b01a0b82afa0edacf5d53188657ce502c7e94c9488f7f764e9a9aaa812a9dc6009916053a73bf2e52d5a33de78e788e9251196e281e73d87e3ee97dac9d4ddb47b086d610238c783609e72d0ab67c38b0cca15ef4e2fb4a7176749674f8db617596ce05f6c938d75aae712836dbe1cd6391ff0fad707d50d85a946f446180225fe0bf871bc63b66581fb6cac0d244855daffd9d228eea222f91992556af52e8e41aabd5e84bff504d837ec62be2f842181e19cadfd95ab94b83293c811bcb3dba8d7ea2bcf8e6f36248f8dfa727550bc31c827224fda8943b2c531a6c4a19c9205da4f4ed13262d405c5d31009d24eda70dd8cb42ab9c44a1fbcc8438852b4c306187c3e43717b8ed5699dc0568cf70fabd6cc2667b24cc60bcbcee1290dced1d5d0366a75b625d95d9970f606674f29ff7aec3add50450d0984a383b873a08a9c9ef71048fc203fd3662155f902c7e58147f28ef95f45c5acec1f7244c834fb45f5cb5bc91f32ad9fc8c0c39d7def0331febd6a2c2b0ff87e41e9dbbecaef54206cb70fa96034cb8c5256e9e7e99ff5786969d65d5f0dcc7e5a531c3233ee8c40a4298bc8b1deafd63adf1f0bd864e4893b07cc71ad62122c21dbbc2b77c2fae69453a1dd4de214c23eb116aeb726c24348c228227a7e336e679be380c22646dddbab68d317c1a05a9cf84a201aafa5eafa518d1f33f925d74c0bbdf8fab8c174ee22a93c8e0cd8b78d3a4f13e4a8e1fcc4e781e561b6e371b06d3ee8e38fb40cb4c25f2c715a51e6aa903796370ff2f8782a4a259c40e05a408392e6ad3d83e168cfb60800ba3dbce3b38883f9b445482df5fcce5e4c887ca8e11be9932f6c654d663a55e9edc8762c473d44b29e335146d6cf4758d10517966cac35dd814071db83a53f6a35ac5e9f79093d8740204b3bca03243413a1c47cbc0ae40b19e32425b4c0081e520a5ed3a4315f056dedfcf33a365548036695713edbdd2a9da6d4f54b4b6eb60b609f77e7aa3e5cdfe92bf71b2cc86cd04b4f6d6dfe9fe391f4c1b796af3fc1815231a98a2c95ad665d214562fbabfed6d6c5dbf33a3753318d0f52e23d17084aa61f424464f8803749a220e85fbaab29313ea014db3cc10d57c10f13fe12dda7315f5eabf8fc44afbcd6f184d47ba5047f0d4cea64c91344b9fb1a6f412ecf384adcc7b865558aa06882fdc9819889f30406f51f61571a9c8f41010c5ffdf8d5c00eae98e4231898a1f31b09010525cd5e43f51179e86f3972a9afa624362f3a6d4bd67c3378f449b94e0b257c96b90bf28c405ccddc9cb11b97892fd40ce061d3fb903f15bf4ae6b6a452deceddd2b921e6ba1b2a5207a77dae3a1a1d77a2383c4e0f779933dec407dad8a3befa58dfc35f71164c99161b597d11851ee40e66f02c490384cfabec3b5328e6a04927255e3fa25e5a1bee8cf43a7e94f84f209f5ceb87a076e4bc6f3d4c3aeacbe5adca5011a123bd000f646bec944b9e1914cc50d18d1e659449d2deda25a6ee55bd8e4f11701996b91db61c420d43168d3a7e0190171312c12428265589d1883094d55437e61f18f4cfc71cdb6a28adf64f90f6e21613b7cd2a7c75e80fd2475c8e54f5a3737474b3c2adb3c5263a57a40b31e4b91e2150d97fa68922260064b22b2cdcbffaf4b10c288fff2640d336427b678783f9228b579d9858d8e87537cc4dacdf58de48e6aee4f542f884680c7a85d12f908a5c0bc62ed120e10943b66c898aa9604bbb67e59cf20cc888ee33eb284cc5541567b015957c3608db24ac769ca60c1ec7853559c6af1d33f10cb7c2eca69cda92c2115772633dc5a8a51ca5263e15e5e7cafa60111e2b060cbedb1745caa886444aaa2e706f18bda5749283a07bd2347d6a1e6589fdc86b05085ae871bfb6804f22686ee672f513635dee38cebaab6d8054b3aad435b5019ef410edf94ea6a4ec98b01bb98d0c51316154d7f0bbd14bcf4d62e51ccf5a50fd8ef5492790d1eca4bd72e504d01e7fcdd5d28164944a2162c764240759406970eef178109e101ca7a5b50ce729aeab59d0a3a4091e5f21985cba5f4e9428e44b4b2f1378cb69569183865396440c47983dff0bc92ad8fb8b606e3ba7e9d03b2d897ae9565fc43d9d8beb1613314ff1e060600d3a3aaf94c4efc730aaa21d623c0d82d5dc483f96bb6f55c9055e53a3de80decaf8710294492f21ba520eee077db12eb5dde54fe2ea624663f292f4888457d7f78561778610c094a2862810bbcb069e4837e24ba15047e5decc374beb56ab928ccbafe205be15f9338f4acbad5eb04c06c3b4632e8c42ea436bde0c9cc287ae6a59eb17e22f5e8c2c4c7d6fbe844d4ddd638e27ad63eadc096b16fb57654bb46bdb6ca4cc547cca2fa35ae054b7c8269d8a07c36877cf9b59b5b1f2163e4492804a5f06618bc33bf386348e6625ecc75ef98f921f883f1f6f52935fc8d399b65529a6538608ae4d291b8633cae1346cff011ba04dd90ba1ad763b6474c06114afd4dacca247a2498983bc6279f486d2cf6d12246ffcf41c90b4ca003b7a245fd814f463ac259ca08850c80597455af18eaf5950d41312fb6c6fa8750ddf7fa545afd67bdf6b44527ddeaa82b5034781ff3f25482684d4c00fc7f341dd89d6f1f509fe6476c79c8a035d1752c6b13c6a31821d7b0c9f21a2d2abc20d6d6f2b3a38841e8251b95ad0f6a91fa44f9cbfcb41620a8d593dff6f6648da25ffc720652e11f3c39c24c7602b7336f33302248cdf7188f01bb7c9b45f8c7a3654195a0fb8663e8dc735bf1f7733001f624ed066a2de2066619e506dc90d14623c5f476ad1f703b5e16b37b7e6172b6985320e50361c0a69b76e26af16d4dc9d5e27d9d68d0c25fc14442d46d5eb8021109a9af54877185ce212e2c63fab397ea7044e1af40eda23d821f0cd7b83b995077abfd5c1964546f5241a2ea2c9bd838cc4331a839f6176604adc309c907e4f6a621410d428fe8026299a1523551f27bf017ca180ee961ca51a5307e2fef9f0b6caf950b86ca0d49b6726dd38b8351d29f291fd6befde8f5dd3880a575663bed7bd456305b7889539ad978b8aa0f2cad05fc7950a6a94358199c484dae22fe8c77cd9a9229ac097fc69835ee8fef5ca7406f85f4830ea858cff6772363f668ee88783c3c5def70484bfe6d735e94a856037e4e47763d9414033a2d7c590e47f507d69c97d0033db87fc90a91b7e9ed77cce385fc4fa71f8c8df47428592804396ef40b8e48847aa03041bdf201bb4c41a3d8065ed0503db68bda41bd28ce59a6110bd8bd5f1c9f7d9e98b28cb152f80f511469c7f77d153106011fd0f4b4ca16017688330dec2e25e63d6c7aa95ac96a36d64ecb59ef5a7b5f101794440a2e65e180cf4cc492f3c95225721181d0c945b0ac8c2f542b126e94a1a0040c23676a942b80b669ce373e11393a6a991e6334ee338a375fa7fc442f61d90b86862b1948355836125c09eb9c78efcc39efb7079a46b5853e3569a41b8bd14b411fd88698eb4655fb1cc76bf70ad1949d7e31a0e4a3aeeb52e90235761958edf82c706d1e650020c8c113f814ee50eb025375624e388f4b92d422d2b44b8f83d926c86b6013ce8493d1185a503cb1589464ef316329d44af7b2aca116dac319004d262ee80151941af2cff052282774a13dd398591c735745a4ec11e2112dc7d5c54c87c63b54e775bc3a81564d69f232607da00791c76350cd25834e526f6b9db901393e5341af37049244e78109f7b801047d4a9efca6dc4e149131aad0f5bcec917f42bdb060600fc5bd53e67792e4dc10400474bbbd48460459cfa568f34187b7487bdf5e462fd4fb938c74b969c7e9d0de721ecd23e564595d8730fa566a5b5986ca7783b58ca110dd3f036f809a3764328dff027b66263cada0c0cb052cd33206ce130e6eaf9428fd5e97cd61d8b88a2585b53cb750c5b9c2b9f0635e61aacb27a8564688eae55c02986834e6dce89455399779361302dcd8e053e0dda67310fb118f6c5b438bafa88be04200bfd404ed5ce09632e3cde235d99e282695cfac7e8890de87c44b614e16c197da8d2bd6c901f3472655d5cfddc95e9f1945ad0b51c8215b56850da2af5c183e9e48213cb12bc074fb01371dee4b3f9b75aaa3a63cc0c550fd960078cbb6f9c751a958bef382adfe0273ff89d8ea04c026a1531f68677e072e729bd82b96e659e57bbfbcff659a987c42a99ad31f7ee091acad2f639dad123cc1cbfc35e2265adb72ee2afdfa793dd8af7da4b698558d016906ae7e6429d989d6e228a2a480c1abab9aed662d010f03c496444ae4e3b3b040eb343e275c0652a08e207d908abe49729600bf223753958136c86424514df1ea4d91a025edb3ac38dc4e7cea698f3abdf6d078d8dfba2264ba2df1f226836ad62d4d0173ab7ec3917d02111568879cbb88622e436f85870536f09a854fa995fac65209b7f99ab56cdf62acc2ff6d39eb4eae923874ec08259494061945fcf528f9d88825f3e1d536198eed342e2ec5aa93c33c62bbca4f39fe1098154d02e0e10e4ea8085ed076ccfa8914ce875c8ad130efcd0034b2f223f3347a55eba86b815ed5de1d7d272242df46bf6bc91a2b573f6f7c2873cdb21e07df8a1aa60d700e7964a47002fd370b58a6248e19f8e6ad66d1052a519118b1b990565ed305c63a4fc0566098bdc1264368cbbcfd1b85060e1e9b011f701b1200e9362f673c9fdb886150e8562875c379a476c6aeec637be132588719aa1dcc148367a9f3f1d4473886e1068cc139a55bc9b996bbc69ed32d3ec55d0b38ef29db8308310db1fd687c6a8bdc0cd6a504dffe83ab5e2d479867eefedd6e940f518c23df05a98f6d8e99515c1c0a697ac9b1dc69c13a2c8961b525ae816e4490798204c5e8e368187611c99b55e2b58c8ab3bf7f5c941b0451c5f2b8810719d82318efdcf8fac31ba86b8d1f08c9e2ae035b361487afc74dbb18ff716dac2801cd4dd7b254fec6296bc2f4fd10e42ad717628003df6800ba8a4f05ad1ca8c74ad21462405b82589e0789633861c83ce1cba30eef3d230ea29f04b6e65b2a920a795fd7739b6ae81f8c6c3dab6d640e25e62fed491a2632004a7d927e7754463741b237cbd70b126804dc41ff68098cd6b2a3b20a490262e4c7a1b0f8cd1aa994594822cb87355709f7e4eebaae68aa174abe03367e6829a7ee3b12d82d84a3e67809889b3d0393a9346dc5a3ab523b04c3b94b19d508708cde9ccc4ae40ab0c849772eee729bd3202432e2a6cdce09dc2e6492184beee2e68e065b6c0a80c2fbb735b38aba70abc708c4a49aea7c8ad4bcaf9323261e8bbb5826a9bc0cb2e21d82b5d3c18a31bedd3ca6dc58dd803fef59d4bcd1c438619a51a0c8c5f7fc2cb01267825550b6bd3b846f6cfcae0c2d47c89f360bf10a63a8e4041d267cbc4deeb86f1bf2e9b2268c47e605b59525408edd79798b0a9d5f819fff110d702b0e8832c66278e642d23730a96d34db490913d615039c1f892160deed273483d3eae5e4c8bba85c555dbf6c49bfe437f8cb8ce234ad63947e024c8a193a913cea747f09d54f8e86df68f4a3290c1c7abb1b3bb73bcc4a6978582af48d015a24b5659855adb7eecd3da3e84b7763d5db8a687965789e247e8c53e01fc33c109ecffdedf19c29d4544d89841e6fc0fd04672a72881b92e5a5c605e7b913b7f66f176b04b57364658900b37c2f0de1eb60303f61738dd2ee5d1af19da053a0c6d268dd86b7d498e55b6920b6603f78ec32718900278d561aa0a829449127df3cda9c588f061509d50eab0c64e9818573b56b6bc4dbb85fba2051bfaa47ac3da76c0468fd881112458dff68659d60a6037be4e5778905bdb65c07f8be198a5bcff00d4f3cfdb6704008c63fecb4dac9cd534fe93620dc2bde576a74ebf3b80d15c94a8360d20d960639fb0e098866c58ef8cf3edbfcc420cf5850f0fe429c61a17ec372d682c28745bbd11dc310b518538ea24cd714432d7a00d1570866c9e4524a3d4d555e6a1b737a4550743ad138a39cbee9e4ec7b5868af6cba928d7e78360e35c3f54088b786856d46328ab648f08b7bdc3c7116f0764135306038d45a4b4c9240b34b7f7021e2163a3605a1343aea3066214cd3c721a6e18dff0f9ce00316edcbf03efce9af74572e5580ca3e911bd7e8c49b0accea515d9f07d2894e27216e6d951f3cffda494566a2370f43a27a328e329201621c7d52ec719d2ef1ed6ae1950589689395c60d9aaf9c4ae732922c1b6226c81cc068cc307db7228bbc35dfd9f8410cdffdcf76f221fae8511eeeeedc46f3190d596f364c1490ed6eb2c47d2f74f1a1242290dc88e28c4fa0f8a30cb9586e77b6e54d25fae704bf1e64a4e80e11fe7bce2c1688681948d557b03ba209f6a860e3e87417e373253354d3a34acb59bd6a3158786f5a5eb3fde426238fa33f2a8beee3020df68ef77f54b08b0207da9975dd7125ce46f0c100ee737eca4c79a30715fd888c5307727ae4a584b8c23f454428978eb75bf0ea570c3bb9795f9446601f94c7f5d96ca8a275861cef33b1f42227e58311a32cd372981e88f158cc559c06176bbeaf18160f352ebd2491a50a7b1d72d0a482029713136adb832881754fd0e4b3ebbe4a63e35d9a28c27f1edbe304f35a7f850227ac5e31321b28a6c04e032570ca93dbeb260ddaabb1acc1a7a2ad6a421ffe8be31e70de565ba27e21da07222a9b38da076842e02caeeb843737bc0ca3746d6b0af7403c3218773e5cd41fe3e2ee9fa41f5340a890b08d8a709e6a0fbd1fe5e8fb6b67f20bd5d6cf74601c8fa70b6ae0f4aaa3a75f53905591173aa4fe30abbb649916f4ece1f6955559ba8df94f50de691b0c91e3b490af8e45d37afb55a1093a62ba7e414f6d477131081038ae90ff9d8525915cce3fbe0abc77c34184d95fcc2da51bbff71dea7763207919c843115546eef178dac4de6e5da528704b52a3814cd44f8c8a87c22cf070aea79f6a7dcfeeba852fdcbd48e5a76693e06d34c0306f6d1adee84310320cc57bd655336111fa2ece1530673465f8ebd8aaaf166273c3c8b3923faf3363e99fba9d19ab73dbc751bee20b9a4c6d83b866b3c2874067ff204dc9da5f2ba3a57007821051099c8b429fa445109511acd01c2d178f5eb5e015961de4a7362549b27fcd00f84d853cf7db3818b93afb74cc5fca03a2d9bdad665186f285e3eb4c8babdaafe231b84e9bc90aa14e370b00c239636d533b2d826293e722df61b69efe483353fae5effe0a6973e8a28b5b0966da4ca215ea0f58abe90340a20ee8fe7d3c2a9ddfa6bc05455bf15295ba1853650ee09267120039e655f264da1b294b20644198b19912ecabf26602acfe8c93cc5acd36e1edb69ec7c1c7aca4b0c2234575cf719a1c86cb7a86b72aa8e932c553f479f5ad39544aae3baa07866e687fc204434d78dd8eb3db2a2e85e5cc7231bcd96d156b29353e921fa0ef65f1ba3f7fb28d44b19fa0140f10a199e2ab69fbebc9b884ae35114ec123b4400e6064ae8da040c5e838d09f2bfdac5e7209b0709bca8ac032d74cd03b0c379df47c1fec2d28feece5d696c79de8966439b663bb3b0b52bce39e3f6d5ea3849a71e783726343a4b745bfe6133e424da3fa02a4ac1f586b8f6fd4b707c1db694e9f25517c836fb4edfcf59d4e166c8f7b54e73623b5057970ba1549866f630c68eaa696b8e66039d0c2b605bfef0a327063c381643ff3fa8062057222e82d765a3ebfc67cbfa712a33d6cad81f199c27d9b609d71fce9402fb7220fc0ca7aa0cef1f2172622f8de7296deba621c4bc4be058822e29759a0458924cb519dff8f7da6d3f0aa152945bc3d355ed47c1b10de587a4e1d6ba0f453b140a69ade7ccb8a9b4b924a929893e6c0a29278bc457ff116af88f9f24c8df14e101729ce6f130a15c4b4d6b3a48f0c357424e5d14c41d6a9110322678c6cf3be6cc2d615c844781cf81746972879ba9114e7c2075060dd12f23ae4fb6e04f100956de0ee9d4a89d1d4a38070450081ba2ae55d4f7130436c4f9bcf3b2f069535e97de68f629746945fd1d23bf32e9ce66adb243463869c807c20d915e93a58a580b6443ddb9008d32bb8162c99b7df6dae81761a99bc28ef030d1497d00557de8ca79f519083fec4a541f01c942a1201a7f099724340830d3987c4c3d48b8d5d54044201625a276d3afeca0295787ea775ec15b2e675a0f7f33a0c30e7d65f70aac967e883b18f0777c7746e18f78f1d8d84fab4b3292dfde24e72c8cef06eaca61ac2a4cece79477962cbe06cd62cc671c479e30ea81a8b615c4e0bf52a0b4bb912dbc31a7c839818052618e113cd4781ba7dab565b262e1eb29f80a9e5eeffe9a122f041e16713f69ff28218a10d7cb569d87f4103f1ddcfcacec54d1eb08f9baa7984f6578a8c35627068dc8a2c7665056d87d307b57401dc9dfb0145c3aef2ec832396dc170ed1902d5ffa4ddf7c8fba5a6d55d6db84eb642c26ca3e7831a2d03737fb0e79683cb8476ccb138e72df97f6c02bee65b9fa15fb6dc30eec73995de00a93bcf8ef125a50e1d6571dc817f798abcd2eacba3c481073ba8c89a70365964124b086207df106a33a1796270395ccc34d4a478ad1894dac9b6489a3ca52744c45e9c9ba5556ac9c834b9141f34452f60bf0e6697078a0521e1e28abb1696f0adc612a33edbc2cb34f57ccd9402a7834a903d357a0851732efb014c98d4a6ef5f10fbae7feae329c8b8be8024eb381a2a59a8dc99f277f07d03485546fbe595b344ad7d5c069bdf1b814fb7286b0607d5bc27486424b657b46c37d7acfde2292f7407f228095a4b83dac224dc3d8067cc63dabf69899a23fb920ec8a2be45d7de7619923a980e65219b5a9b0f026046aee9331ff0788da4be0dd44744aa5520fe1f0dca2e464b561661c6300147c0295eee3d9bdb15289349cde851973f1268867c268ee430bf071de708fb4f94f9cca296200215e885d4dc83148568dd40ace830b7193b3cfd953b29327524fe634f86008d6929e3540f46303eac1bd48fadd91b4bddde6430b1f9cef312b17b4b4951e9d530bd5b120e831524b6c91f8ec088a8d142c09f3029cc50939b6d753a8ae37c8620510101bdb4d1afb7ba0b3057f95d8f152f74020a45d38dc1cf0f8772dabe5583a4ab999c35e97b8b4394b98f28a0d03c55030a3cd966138fbe43cef4df23bb5dba599318306531022f2fb0e076a0584b73eef83a8d8446e6daf7e3dd2a72b85e8395ab7ab62bbc04ca658d548a87fae21d379c4cd2716f02e46f1a04f954a60db0224d84f27f0fc88113f550fbe834404819e785aa810fa0f77a27817047598d4f0a803e827e6743853e5d9cfa5c83c31452ce0e5e23deab5238ad1e879fc03df8587264ad8e373c5b8b0c92bf001c8e44dac9591bc5176f1950033de194df1e5c24e0c8f375b58298c4756978d8cf22dbd16737cd4820227d41911c108a3fea1c25c3290c7cb1b9033c26f1a517831c69314604fbf88d23730d447a79bdb40067c5fd40ad34adf308e28a96d506be7b26bdf09dba4fafb413438298090de4d06ad162aecbb359b62cac060266aaac3cca13bc762b23577cc399923a2d243d0f6eceb0846c61195ce814154b79e515b2d7829ae88462353863c882850130c28e4fb5b3c12207ce7bcaebc023252db1e80a2ad492a0d07705c1ccaa4d19dfeaee6df24f3967ce5d74bcbb34d9a329440b61b4081fa2d52c67b3ead7e2d1333bff08630682c367f7a27800827d83da7459e6c3e5d2947f1195f3c94112f152a8fbfc56b3aa7c8814516c8d605b33c2c15b48bf16f755ed58b187eee0f47497b3d6eae78af540372a44f1cb2a818ff0a80bcc205ef2202d7e9ef97474fa7075aba89876a590a127f4966c1bc2a8a768c49e08863efe9062239724e62d432538c31f4aea52bc6287c2403a6b69b21747228c4f75ebb900b81c0410a6c8be296cead962566ca628936e5a92382dae9cee2bc8ca83b6a39f218ef045edb53460f6be02ecd66281e6c080682f6cf9a4be672b2b74f5addc392ad9183d9bec889bf786a1381e8fca6b83c2bc9beb7e8c9d0ce53a54a47ac17425ca27e0e34d0e434f7c367f5bfbbe363456b913e023e8972228f289e8f92d2562b4d6b94aab6f5a16d9a0355e6154db40b7b541064ed7d7db8899664a8360efc7c358907f245f3a481e47e551fe04c67610e26b533fd93b30537ce91d3be00e7e4995d593f5fcfbe74ca3511f83222dc8577c096c1ccc4939d68d30dd89c675a5eb4199a428c0464d6a949b63fc9d2bec0975bff380b97042610e13c5c1d47c6e393cc9782c0018355ebc5f77d10d5777d290152432d6c1fce010a92f814a856bc06bb05fbdf5396f912cab61a60dc08d2e9b315880e5525533fbe2fa1a5051bdf067e4ddbd45415751eb87054bb02bb17de34a06b37289928986411817eea9e45b29984e3f3e966a1d1231d637d5656078d65585edc60886d1d07c21673ed5de1963b10f7811e3e36550b2bc6438d226e5c924558b4e9bdd8e6d0ad8b0ba165d71bac143d9ffc5a5aa6123dc51d5720d5b881a6411f9a36b6258a6cdb9f9c8e3a9b3af48d075a77f4b3d56644546e4434c9256bc5dea48bf7fc43838fd52cbe0195c7be1548069e9d1a4f9d39a745dd9f0f7a2c42bdac59a0b07906dc785d8ddf4b15240992904de80a134ce611001be132b3bf85f8f0ac6debc4a3c4e5c007d240356785be06f566978450fbe81adb65afcd14f0b7bd3887d3efea39d45a16fdea941ead8103ba9d832e21d941feedbaa9b122c49a6a51c1580b223006b257336d6cf3b164edec129fde5198e7f4200f61ba50befa3628ce24338088355781a23cc8ec205cdf35574ff702a704ae87439d1364db2761b9a3b0654ab54372bb8e096f64939162de7efd9f848404d632e7d817d8f2833273f28fdc8987ee734d1f1aa9607ae257ca4a6049eca91bfa303b44ef64fdbfecf429758b93a1c92f6c8da1e4de59f869acc92e6aa9de36452f519a8ef144b9163504d8bd355c142ffd5c98463fb1b340bbfb2e78f05942027af2870991b03e7ef3d98437ad860e4e923ba9bbbfb9a6eecf491bfa2244349b567d60f2ceb88425fbe25e43ead5f7d31b2722a07b068e1e4699e8d0572037c1f117d67c47053144c00739b411a1231961ccf5ace627cdcbbc05a78a1a48e2f5dbc1dc59bf8966b438b24aac841fba109d23a1053a4173cee2af24547eacfb65f91484ef657772e1e4685825aab325f7c6ac5bcfa2990b0f62b69cc94bb1c7992dce36bbac64e5ae742051a943ae624f1c088b99d70dac77f91e4c501884a9ea82020df06d64b66ce9b1d2b74ee3e34387f462c99c672987463cb7ef3e534f2517593c0757aa95da6ec2e3f468e049afab8512e2277a3cba0194a29a33a86c97c508fc77dc0ee12a59330ad35e7b4a9642b7a6f0abb42c6751e99424d218c70f4c5cbb5e6bfb0659c243fbe64ae8a8121ebf145678adfd9561dae5fbd7f239f5af2383bb865755566c2ada7d2a514032716fcec78d0310d43b2f12371027cc11324e12a2e33893290add1bd41b40edc655299975142ad9517a99caf48ca1aa5177565abf01166243f237721562fbecf90b2954ff82a10bf47ed4218e185607c83b735fa2ada7cfdb4e4242db409e97ff94c60d86f945671547bd725fa19aa1344bfc1641a0eaa9e3e057a8c304fc805852dc96e5a1958bf60fdf05a3beeb0f7d8e5c7c82917b09e4c99ae2bdb401cdf664ad4f6e70e3fd317d5441e5cdab6b7a130973b23129f09769a810569a56eca95e9edaa9953273c86fb54a26d51977ecd39011f20e6989e01afcf14d04dc46b6600c1a439467c9582731a0c247c0fdd84332f8e34332fca35cf0107987b3ca848d4e9211634f6e379d1dbae0cf4aa18c547053c58133484d71e61cfca744faf46b64c6e53e2f56fe837c061f4d80e39868df4b2baa6f1498363d9d8a0baa3a29e0060488e569f38701802e50cd440c6561ca1cc7da9682e56c4c56920483a5ec887a8a60534301363c3637545f3d24ae14a6ab494a752f34d39614cdd69d479056b662ce5968db533f8d1058fbe54b55d612e750e726c73c40e96927083eba9f5d323a8e11e9ad7f5f578be02db76468fd600e71e8bbd362a04fb373d040c610d318840b6d5e5c7111f34a1300bc55f9ce079081a174b6fda53e2da61a70a53e293e59f22bd17a4777e349d7c00a346ebb10f9fbec78c89f6970ad17b49698fa185f85d91e3a4f0bbabe7d1bdb1cab40ba74b3ab0868843e9effcd42c7f699caee8375623f4e1751571555dabc620a8b20f514a4581ebbf0c994622bce6c69d16f392aadcbbb0f02f3db9f02b140648e6ff0ec4c9d1b72cbc4064a7251bc756df0321d05145406569602c186d39bf8a99e6081e8fde920d31c9388b460f7b269a99e38489e4344229bc04d76d297674bf7cf95c3eac0086905144234d4b37dc826d56e7cac70322b2684ba448677023429b61891ba112feb46a23d808edb03e2cfb0165ae2b7c93e0eb846a48dd3297fcf791bac943ccb58c814e96190feb4c10655746fb8e23b1ec1c8c20d2abf06de21a5f14bc77e4867e49f5f0dc812a3f5dd604ca6b3e792fd8f4f8fbae283793c20f506fa17e89a8b572b617327198732c1295ca1758feddb7a024f4ea10b442a57c234b590a9248af7db0e8a9b08482c430edd75d005f8bd2423d8d81821cc5d5ef7457ef3592eb3199fa9f5cc1ee62e058a1fc394cafd78d14f0361450b81c72122170488878937beb324dc3fa3e2f96316061b9bb04531f7e2b3b95bda65d3154e0e0e2ef55f9d9fc4dfa9a29602311578704927d4d941545f3c0b8c2b6858d293eb814c4df52e3119c9a4fa9015fad9b860dc962c06eb2bd7f91ef98076543804a5ae843b059b1db68a845e2e284144d0e98bea05511ba589ba227e83c1ab3053306c9759ccc26eff7e849accd964905ee89e9afc4f60e92199df7acc608d8b1ff6366246bd4f29dbaab311f334da08f1c77bb3ec55ae93bfd8f57eccfbf88d8e907b0a41909b99469fe1ee69df3a2fbed008e7f672a332f62b12f804b6f199eb64fee4616036cb5f36b7bbb13e014aede64d5e7346227ce9c413058c7a5aea8183b091ef13977d98361ffaeadb800b72842f554d7a7d4051d3ee322e5c994d954f9db56f189725083c15bd88d447b7eec95c240e46fab8f94ce615d393bb76d07cbef6face80a4b98b4ddd193e1d1c7fe2ca4fc81659a8a7f43726b9a936fe2630a1e846f9bb3c1eac2f94f062ab6b30b21d78c82a41ef8c28da9c577f395df98afd90bcdf8b8d73f7a021e6189ddf76723fc1982ca45e94d474e1d29e2fc75b357fc214746642bfaa89eeaded7edc106bb62a2cb916d7b2c4389cd471f5c75f7eeab85129511e49f2bab27f2b234501625feaf4b9500cb479d33132131abccdc5fcf75edfadf292be4c6be3859e4c714c8bca58dbfb51e112bd32ddf613858c2a4f4cccf44c09eb8aa9c5429a2dc478fb8722003d0af4ea2f8417670307c2f75615341f710e6125b4e510ead14160174f1e4858354b685465b96eb9928e9680600ccc4a5f0b6739357bada199527611abf21e1dcf469f6e3a9b9829f51fd048e7a1d03f49acdc755e42823c656aed64d2b51f977a70e17feaf5fc6db79f79b0e9865d9a417568b5f3cd3efaa7d24bd36ef755a3b901c1bbc383c8d0159b57ff80c5d8625638a5f936b22e78158058ccbc5edb1790784c17f6e8a3637305563b587b3b5a0167164665ce8f1c9c75846018ae92fb54ffb8fb4bb811b4b48fdac43ed48be7690bbda700edc08c0c9271184673f472a36fecc9cf5015cc0f1e7cdc293446c4488f30ac40a9658d512b24b093dc4df016337979f44d064edccf92d4bb07f8123ef4163257f10112d0f7426047b6eac735f4e7475977228e7084c3b1577fb795027824917679ad3951c34cb1d20b809f26b14547db2e26daa962d8c9b4b4c139fb1cacfd14b3f35103fdc7e43a00438ec329e60e2fb47fb5ea3f57787e3d9614e0cb4e8b1b513b04cf6c63ab712405453e0bec1bdbfe8e12fb99b98e1365f3c16b757ad82ef469ccaf5390f2bdf5a4c017d849be3f753cbe44e440d2a6f71ed63c0d7ff8d059fdff787970d93072a437fca2bd161beb7964d9a82954faa3115d6b4bd2f3581487dd05c4608d488a913a87761690efcaf9a96a09040e06a4120b255daf4f3a1f58bf80d01216e98f61006b22a9ae489a32b91f024e62981858e912d87468284b9988139f6b485cc47033a91573bb1ccf386e5810039675dea71dccf0adda785dee72c4c60b79103466b000d16fb6378f96a5f4deed0ae7ce46e3ffe12fd94d6161909375a45de3631c486b57e545b5d9a25ebdbad3d6033bf3358e3a408b5944a5b11db1bf61a47d20ccb0e8d2f34297fb5c9004603e487d729ec19c930cb81395a54b131a09bb94a2393508cf21ae4d06bab21d2a4770e5fea5e1f6b4e1a0adb8eddda35ff529d7d5686cfb7895ca8c29f7df6b4f38d695890c170f3785ed0bce7d1c774cde70b9e7f97a5818d3aea6867710010ee098dea6652a662c8aad57a3fc0b4f6e7b93d6e1d15c59a1a43a10994d5305a11b9d43e92384220a6ae78b2a83a2be084208a72d1d3e7f6103735926c36b0bdf761d033fa56e6ef5f9bf710c08ba4129b6171bbd11dca6c30f955d689fbefc3f58eff577547b446694915e89d00ec652192a7af4d3b5799b2a32545d9c00f62deb561035fc84c9ced6ec9855cba2a225e62d49458753b24ebae852a666c9f211bd18770c34b0a9e0d946c92515a7119bee929e315fb7b3ad41681bf9302af8a182e8b5977b8077d34defb385c21485c7083add63230bfcb8d2c5f1287445bb30e5f6f9d30cb07b2f9b8f942bb8521244c6d556e599e65136070261299f584ed48db403b4b9c1b350be26ab5709da015881de2266718a366271509e2ea7de66bd9b995e62169f4292c53a9c9d1a3c39ad640e67e1fcbf5ce96b83f316f22f784eb227322e834d580920fc71d0b391e48a096192baff3c4cc18cbd4df563c2212ee70157390a6e5c5fa34c4682098d492c2b1f3b2877d81e27f9acf23399cc75d1ac4ddd8d9e2a60d89f7e9d9b2152991754c985cd237e35258c85a4252f564fc054f7c39102a37cfc3e2bcac001d22969e17b0616c109458568747c2a80e8d28cc7b707899facd0d032cf9fd4830adff5644683e879eeaf56f1d7d20b831b7003f6dfbeebfda839d88743fe6f6a36c1235e9ba39c52d2ab0b6f85b074213778e24890b743b2cf6b410cf6be5bc75c32e393cb717b5d49f0668828b42230641da057d04988814e91ac672f84212574a085bd87378007b08dc4f4e6484e1fc44568cb10fb8e22b4261acbca3cdee188d2f407d7bc52f64463bfcaf3e9f4318573f4e31f989fa1e144a2be63a076e6993b91cc694017a5687dbcc49b8313ce854ad9d6ae2cb1c1a85fb9d2cb49e50ad8d46f29f04215f0d99124eab3af3bdb8fbbb8cbc89387b7daf828c232765b05a4d557cbf9d83a9c081434b856bddccfcd03da731195e6edf5d57a582ebed2b6a3481aa280d701caa4791fff1389159213b11cd9ebcd2995e02054bb3871fb6292ed838c7833e63cde4bcac1f97f4918c6bff9716e0031956efd1ae8784a508ee5e798199e9b0b71db5f95fed4ebf773e2643b7b16b3d33b75de5b9f22538740e2aa05366f337af6a142f44f17bcb538c325aff98f184db7f7112f9fd52784d2b8aa944ac64168a36b67aed91a9606ca6fd88476723000bba0bf3d88f92c878a2799e0e8a453d44fb82b46fb20939eecaeb51a87efc13f543c3ef5fd320b4d06ab717426c59ef6c9e258dc58776cb05f518e34255aa624cf90be555d3271a9f02be106f769ea6438bd618106aad5a9a2c39e26dc3efcfc57ef135a0f6ecdccb0ed12e74bc3e8ab5107ef0fb5de716538b9773f6e06822748ba0087a45a2b4162d7aca465db7b5e9ade709cbab48b244fe16183044b7b8135bfccf0089920cce647a02116cc0584e5578f23f74b02008b192bd2dabd3b101a965fbed070d00630f1f569e441a89c9a94f1a9f5f4e29a29371307fc7ed1cb0da0c62610d6068af30e4824f9f4fcbc3da9061ea599cc9b90fda9362e862e2e1a830c489c1283bfeacd198b70d0bc860195c77a840e5d2fe3f8a008c1570e3b9b4432d5154e5a3f04d62e87693fab304e1e909212420ee3909976004fe3ac4629942978e996b2ea7d9a7a6f962c67275b4850e7cd48ac28b4113ef54d3338ac172073d52f4642af1ccc3b349efbc6a5e10bc4a424eaa83e0493553fca35a3aa2ec699613bb3547c6d4c743f42a4bf6c1089417b635d9e1432a6867990b23c16587a1d17d698eacff1114610497cc89c97741bef92f429e973daf38dbe07233a21c954bc1d6ce2fdb753dcd02d94655e5dd71696dccc68eccdde1163c8f0409b45faf72ca3f2aa20169c220b8fb2be9a685af7c7a3f792fe3aaa030471a965eaa0f07e3cabffce55d0b66ac3b2903758b41601748d7fd215d2b440cf0d01ee72e4a6fbe254f149fc0825691caccb4a2a9e5fa2827ae94203167e5c8e5ecece9aeb75efc11575f1d5d629f473cc97ad76253709bda15eed297f6d8a194ed097d066d070bbf24380de4557baec3c0183dbe6a422b6269718d43199d15f0e0bc5094cde5b3b450351845f1ac3ecbbd5013c5ca8c6baddd312eadbea426c04b5c265d035cb345356d3696466581d879d4094dcb76c18194c624061b67a84318a266b2ffbf2faecee78c1252c4ca354e4f517720289d0c22b478be7d64c37753ce0d2c221c8667fca18cde9279d92c8a9d7c4d2412f996b98d67e66aecdc9140b65fbf9aa4feb49261442e7de0200ce78858f527d16ed9076b2215e3184fd2e7228beae9860ae9b6f8bb447a37099fc9c924ee8bcf81878fd5fa2bffa75f202f5238da7e4e6a0fe4079ed651f35197578170581c2f6678e618fa0ff6ca7415ab955673a5b1e386bd9d7c07921c83f976254a41a650d9c640575cbd871e72f7b9ac1aad4e12f2e5cda25a8bd281c70e741918f8bb14b8ca46e304e57d4d40861ebd5477f24823cd7522f4adb33aa830f2893289d161880dce3895a6cef4763717eb2ba70cdb51f1fcc406f42315810cad86fd1ff206af432f29f70f155740ec37bf42d4a754b605a5c88f6ee234b618c7664c174692940a5aff33254c0dd2c8d9542fe4ea6b886b6a542a25dbc156e04a55366eaa64da1f1607ec897199fa1f4c68145f69a0fb0e2af6a6b6be8fad31e5c0c4e299b87f465426359ae1354da493eefbdcff80b588729445717a32620ff85041f025a72e789aa91b43b808bcf68986a36bf8c3551c772f0d9fee73e7f7a18692a525fcdffc5cc1744f8c1e930c5d347fa9b8d2211c381f16528e3a8c5aadcd24a830f44e87e6daa229dae59175aadd2ad91f91f49705892d5aa352f2b54cfbf168c7272f027825621696beb0576bc05894e45105df1ee1b6511973ff25640dd5fb19b3e1d9c2e2bf902e80d04583872eee950730f87567fc63025bfc6d6115421a3e8fb4ddd06887c435020e7934d4e14f7886a4b8b070def07a951db4ecd40a4cd2ec8eac1d4dc916686a8386b539fadaa62b347fd1e7a372335a93819bd004ca72004aa123a6151ceed01f80006ed84c3de11b81e415c83a7c9392a3551813cfe65b80dded08d683dfcbff437a0347909c5779720866c3d64dafa7286cb0fcf88ad843ac91b2d857bc899c080261e604c867b5d628a0e37bc24aa0bfdc76e575a08a010d442f655a1c2ae1b6342f08579442ad02a8d2b5c7e32f03719499ef3cb331a8abc9d68a11189ff3b75b0f60b648c3e3931ab68767b8e4cdd4395280ff11160db0202d768004f1c6605e17efd71c4dc38021f9d0359df31eb21ffcbbc8db9b52c1a7380642d4588bf381fb1640c6d179e9971039b42b093c07c0ac35123ca356abf0d9c70f4a3e9b8f26a73d2caf4ef6c9621d64c5687b7beba5836014605f354cab792a8534759d9edbca89efee30009e2ccfc11c7b6971acc00afa630ad0f07c40349fac74aa80aed01be59335d6ab8400e75741125248de8eeef97f24d553a9ac868e97be50504421c0b4f581afc2e17b188bb7c954ec07c2b73b42a3496484c59b3122452a893c207b907e213badeb67fbc0894fd2510871bcd2ad250293e5b15b730637b73f48da463ccbbadfe6ff1636ea5dc02bfefb0fbf9ac9bcbb6b06176db56f02a321d67c5165803d6b441612d5734815fc898f5348aa1842fc5862bacc2bf5e68c08cb9b380214c8d425d3838b9889ce2bc74f827e0d6ca8ac7ece3f9e59914e8911debbf024e438819ef246e412e0e54ab23f65b8923fa4d869c2fe381540efda0ce078e057e7104e19e1bf0fe7bfcedf237535128c61bbf9bbb3303a1f0274cf0fb3e56f0a45c2b71f3a551d9a92729154ff3d9a8b2c05ee3901cc573f4180c66aeedb8b7470783eb6e23825acbff8c69bf16b93f502568b318d7169b2f9ef3840d54f241094270c1f426ed1e30b4472c73bb322bbc807d557fe3e6fe557886d3aaed05370a080dc7e6242b7d9091ba3cf4d7645cfc49cd9d211e03a1045a231e250b6efd4d994456adb2206d86d2ef86bf70cac7479f06277d1093ff9325bd60cc6a13f6d409354d65cd2eaf770176a9f1607c44d2351f165fa610ad0ed3a7ac07af01a6643644f5b86b1ba01be43d6c84a1a4fa44cab6274c695ea1fe3338f2280d9f4505d8a6b9a62cf9eac2ab0e5ef2f303fdcadf2b9767b6ed0775da160ddcf8e67fb95e09f48c941dd2512a8b8f0819029d465c07aac56cac8cf1be69271e319902aa81671e63baf28cefea13c2e85b7b7691cce813df9b270e60afa023e1bca134b014054c5bee0210c359aa267f1b255b6fba1a744eb48a10653d91ad79eb9f2ab6d09e5b2012e1d18a240f47dd8756e2c4b0475a96775d831a504d85397e73dfaaa5d68a77654ff5327461db5dd23fa4d88f33efa79f06731555483cbc726aeaf6df290ddc8714a6c2b19a7d1721b51099c2f3c5f907255962c9690bf40582f1fabfc68a17a3b407eff2bbefbed1b81fcef980cc5b8ba527c202eaab4ee21e1a007746b0782364243e7ac9ced8c087676afb20b5e04069890c54a769dfe37b9afe523a3343071fba00d35d013b87412d8e7e8ddf1f44fb44e206ff976bf1c3e63263c2d64bfa29ff553aec0bcce293bb86b0aa9283b7a842af0125f9acc2db4be2d875bfaf307011a139e910a52e133d5fff6d7d108193a2ed0134f8c90f118c5519e68eef1bad2a7246f0e6cb114a9c7c29371613deafd7e2eb10bbb5bca90e1b7aab71219a19c9b3c66e7a0d1daa7515ef9d9d278c67a105fe14840669632b32342f4b31c7595a93778ef6e2d99c6925320f69bff6823f7a018dc100c6ffa6a0d0161969dcd09d6e3e109897c39d6ddaf805bd7a39916f85daf62ed6341a80453a1441a3579313c1ba8d0c0d29fbec550e02aa9500e886d698f54ea63a6c696ad8a524a23c5e06d204e5569a96322e9f8dc739d1c93f3beca60492936ff4412b7aae750c0ffa318597618ecbfd6693135533dd2928823cc84a89700d9eda6bb79edffb4f752625a640946298603ce951ebf47cf91dddf95d56b8e151a9e087536b81daae6d99d04fa6535599dc6f985bb7f86f820a2439cde091844092fef4cd726e5f3084e78735a3a008884c66ab010d78452f155f9d2f732f7d3466ba8528c2fd3d8594d43a58210cd331da5bfa44a840d395d30d7c45f4d5a40e8f4c06a74284a643410592cf986d07ae15f52fa2103bd4fc31843fb4081438afa32f7a481e46633d6b4dd6b67abc39a8717756d73c576c17d63aac3a56a6415fca366f55f7eb96b2d485059ae2d6abb9b1075d82048cde48606110d406a642335df47387d29522ec47867bd7596a77d3bda06c611b8b0326b05d2d3840b5d3b7742b9a80844d3d3100730fd12e946413658e348d15b4c30a629203724c92c298dcd1af7129d70f92b2816ab14bd6a3fcdbcde10fdcecb37c7157fb1e1fc219a124231a85f9c62676ec5fe7eba9a0134e825472b1ef5523491338369b9ca88d363c646c126243cac1b03cc5db38310c1c22a3e17743b0f2389dbf22dd69ffec63864045d673372892aad8cc7f6de0a3b35a77a06aa46b6bf1a0131761b5a8af79f2e8e7e2647cf3eddd893f1920604a65294cf0bf6c29627437be4db2ee3a20839561b5f2cc7873fb2cd054db3d7fbc2622c4adc6d9754ee93286bd44e934908d8d21ef85c29454849b4041da49ea06819a7d1c2076bcfa8c081a76c5f699c6c477fc97d96df7f714593c4bf63aecfb09bdefb96b62938e48d8159da9bacde73c2d1d1ea8ed75eac979c08329dc6c680e1c7d2128e270fe6e26f151e9e89bf77a5a298fe41a319f63ac60363874109a88c9f10c96b6d4a749a42daba0411c7195f40d47e8573cd1c2e9c75b366acf5cc9be2f10879ea3bad5f395dc9c3cc7a09014e97c3e84c4a874a442304f6b662cce1688018914c41238eb7e620e23a640824c5488ac5da32e274d35625a5faba4d489faf38bdad05844df010a581039943243da93320e1672e466bcce5a79cd9ed0978490f7de787ddc5c7311f6243d37ecb802c2fedf2f78e6919112ee4ad978018f2cf22f18260a5fcf929f367afe9cd7412078284eb50139578353a91d335498e74dfd3040ab1febd566be5424bf4f8516b5c4f2233ac4124b47245b939ddcd910f3d26c7088740b046f83333b94c99b569854a548146912bb25a8bc980d3bd75827de915d33fcc3c53ab88f12c6327b47408e95ec8311d9c0892ecd2f879c50a44f17b36fc1748fca1511a1ab539edb30807254a7dda478ac16dc5f23da73b2f15cd023e961963b010003bb9ac0683d6f5f62d14a3d499dd0d2ff63a8423212c0565768493380c37d1bf714d36958ef4ae0756649db99d72823a5ab75bc6ae9f247060d1e7feb63c977137deecb26e2d439045cf776bd8fc999f68346f4b6a70a4c704cb91ec596365164a40b6fae9b925a6cae7ac60f4d08fa4a0970d29abd51c42a9c9cfc29baad8c8603295cd25e27205cd5c760bb2bef0176138088e1aa3925bddcfd3a65a96ef109e554eb2a24fea33495946a9c406476edd08a7a588d7afca640ef15fd4003012846b990a8269de865e0daa05efa5464fde11c98319e24ff9ed3418d7052e76fca946b2389292dd907084374684cd193353407a9a9541d5d6e22700732306af0570db26280750226fedfe153149a098d6b03f36b32f56fb84614076724dd53b9adb73995fa2ca3dab087950674622d96969a9b501634212c13d284ba716e0d9676fc1b2ae47d3286b317c13a1ccfaea6e6d924fa5da7f64a02641434a720128464bba3720514f37219b8d964e8954a8fdf246f39003cc5fb275d3c5f3fb0444224201006ad941fc11a04688c28a1717d5346736c64cffc660e39c483de0e146735c4f43cebcf14694955504b0406e687e06204a5097d504af9d6a47504d98f5d5f24a130d3d360d3818d45cb7035a05d79a1c005d29977d346fa49c740058be334cc3de454da1ff96b8b9a9eaaf12a0a35aecd7cbe7d3dbb156ebc95b3c5749b4a3a269e52ab074c2024414e2c0de5ee065cdc4c49516b391e4d9d736e547c01d736ca75443ca9e7e0af17bc10ff9cf9d0b4e59fbc41f0bec0ff1d23a0c0a77a709e41e3f960af627786430e495a6cede8bc1a5364489eaf33f87ca5903e6897b4ca25f99cc3cd9dddcc2419a6bfcc543bd1571fac590315a2f4ddc75427a2e616f5d52c475c235c7cb239e33bf4cd4c32ae0e22b9d0e32aa2d1aa731285c9a611f4ecb59ef461be49d616176b4b1c6d49a056aeb5be546cf1359c117e38e25a7754b4d9d1dd0cc78a18108bfea428c4146296d9fe8ae9463c985db1b402879d7cb90a6f161a9e1f95497ffe0a5f14be004924e4298cb8a0a2b04f173d81df2f36676a82886613f1f6da5d3e0a035bb9179164ecb4c7dfa1f9949a0a5cb0d005b6ff01fbcb9326ccc3973a780b7d7df97b20b8f7493685c751f0555544b83b10a1e9db006e2dd2703a48bad41806beadba9e946e1a89ed7b2c8c11e7256220896e9e26889c440a01cb1289c3c829e15aa1ebc84e52368b4e4e16ed9e2fa4bb6b81fca6df060fccedbd1495579ee77519a622afb68ce17f879e54be6599e46a6887f01a91b5e68b350dd8730480091979584c13facff95ee8062441f5b5484860e766efba4acde7fa37ae399b126b3c762e1d5fa6460fe69e1918d00975c0a52fb7a191ab610416aea07b6254fdeca09ca6a8eeb4f449f5758e7e6d457f0ba6acb5e0a573cd6cd898ea63205ad93248b0121cdf8f4909daccb9ef11a9aba8cd7a1c304a42a09264bb4eb348f67bc013622dc83ca26e3647b675008c896fc9935b06f11bc83bb73bda14dac5e41ea860d574d90de8968558841dceaaa5c0e24eb6b977114a83862d07915c2863d3bddc33b3511d6689b4dd8b10322d13be796d848641d18a5490f8e827ffdd101d990febe4d99c41503c25525ab5f32bd259dfdf6a30f88eb6e71f40284c58c6387f876e14efae9dcf4d851d3f665a7e2e2a33e0bf3554074745f495f7d0d75fbc287774174027cee9508a17caa33f9b562006a4692c8c58b4c72f8c4f63e9e02625310d332c9db8f6c2fe6a6e35e04e17e1d75a9a29ac9a249700cab76dbd5ce5e0ae757bce247fe2758de40560833b84312c34d1f018d9135934229b87bfdb1d47c78cead6d10795cc64f8d26fd3a0265504d1e9735d7edcb5525954cc2d93e3047b5b466fdde7bdb0f0c481b71c50b7501278f559e84e312615a8e19595f7a8a80c47f3356ec56ea7cbb725b34b41bfbe480a3ea53b29b8b04fc30a88153f0171eff20099424253caf82b04a8417e70333d4dc1f4dee80e17d15e7ab10e53009d6d1e28884e65e1146dec551c1d2b2e9d1aef7755f1a5ef7f5f2a81e8d5388091d564d122e2bc7aa01de9dea98d48473e4b0005e52428dc04f625a6bb38c15f26b8e5a61d340f0cdcffe8eb1fb945f601a98af08b9f8801f6a5da2715305fadd3b9037eeada2aad61f8374a3a0db3b1c378db6e4dbb36bc9bc09a4815d2accd1d88ad4a029ba56bef64f541a21d23faa1aef6589101d3f8f3e2a354667ef45ea7366b341c01dcc429bb628bbe52a9ab91f1561c38af9a646eaaf3030fbacdd65b7549248f6c7348d772658d278c9ebfe245dbde1ce1273fc35d995891b9849d0b3599d26120f1225440d62aa1d07442d3c854487f23a204b5dd92883ac007eda2011659223c0155a5e0f101b8631399118bbd09c1d37733e19a296ac8b43b633ea9c9535d8759f09cb47cb6efbcd33185fc4d7899f78a7de76a3dd52681ebe95b2480fa2496f06ca9be43304d8e6fb49d8111e16409b9c88c73bc8e676c65680cb107862a2631099a18b58c1db89d196158522caf183d60299cc5b2add9c72715ee8bacd4ef45e9ef64514afb9e8ed69df7e72f85f7a1adb2b6f0e5e854bd12aa99a8bec91063594cc218369e85884e003bd5f86fb219a6e30218ee00ae05d30ea88b36a85695b50c93fbdf20481cc080be6fb7a1c350dfb2a7a3ffe14bca8c67b41daa5834f42b93ecb54dd477154bfecaf79fc7a5730298f8f30fb12bf88b17861efa7a54e62fd50595c00bf9720beeb01dde729b472ba9ba86623587cc5201c4d273f36cf8ad2114b24b17becaac792f185db6dacb97b68a04f6b6682a207231a85a8ade0ae92a96268cf00d1fd7dbbdafda4ebf130a303a3db390151b5ada97c2a31a9005a09b6d160aa2381b0f302be5deafb2416e63ea2144e247cd7089142b69e47fbc269964a2b02786cacc61829bfce69d01e2b2f318cee9dea873c2fdb89f344f9fd6f316126c95bc96939f9bf15bb4d86e899a3a937b2286f1dfb89f5dc55cab1d2840bec19d656127c65ebf58595fa042f7f63066983a25ddeebdb6eb33f911aef0f5b020554c4bec382753ef81a14fb875b3d55ca1a4d69cece0dbf0c0236c20aa3e2b9d5009c32f9a47cd0f68e902abf641cb7616d05b806a348a8163f0ba15b0f5a12c50945b1263cbb46e39c8c92dcc08c61f52abe0305b23f4f0543c99b246ba34b7e87b7a7dc70a1d022db6eff17584a2cf3dc4cb63d451aa5922dc20032663400b0f09da70a2cba75107035e31ef712e06c1281f0afbd104b6d3431288e59660d0c868408a3c8dfab2824270f0a5be79ff93b2b6d8b4ba798fb33e19f548c778b321e4f20f61b6c817911da44b4ab3f2aedf9471a48f14e30d22373d4f9d0c6d8afa0b4f3a0a533134d0bf9742586ef9e56a1478aac206d33031b61fa0407db5afb8d1367be5cb3ff95e47a074d2a89c7f5c16d5aacb86a5a1ce61ca14bcc6769c50b5072689344145857e3bee70fa3a2504aadac315fb1af4dcf362d46cc8e7a6bd04a5a5b3182bbe6cdd92728f6b21c430c2bec4d9d9622c30b804465772c6193769dad9062bdaa00c068d6e71ec512c843dbcecf9d44038ade5f147b2e93ae276b6ffec9c8dd3cec8a347a29c81c0dd5c5aebd3f2359232e213de6b007d70c436be4dd3f35807ca01389fef54f8d89376bdfa10c0e13d5690fe8476b9b6abb0dcc922911548b8ae50675465946e95275f3ff1685eb1cb956ed93dcb160eab2d44662f61572251d08f3b76af93023c233e0d8fe08349ff48cd7b2585155b5cdf505d7e7f5eb8c4ab308faf539edd1534a8abfaffc4cf20994bf231c4597bcd5a3c2ad38d6c3b87decc8a5d29b42810bb6de35073b45957c1bb5a148b52a6d6387f2d45f53769b2ab5ac53d018cda39d536ad559795718a11f9487149129d0385739d1bd9d78d8aff6044e068061bf57c7d7308a7802630de98fa1a7c997faab513988f18ab6beef538e669b6eed1937c1ce72e875c9be23cae5e671d967550791649ab1cbdb2dbadaf729c7c42833dd23087b0d515fb50a25d9b0add779511ea2c8baf666ee2be8162234459add4cdb4d2f9ce6ac747755c93081b8b1a7df346cfac335133020357a124b64a66bab0d139549b5dcad0518a068f8087808c4e0eecdc8e47769e1fefdd92ce0d236594cdabc5f30968181f981afe96081f50b4a98c2c7fd1da5d4783302e46c0258c0780f7ded3684a36eb92dfa08afdfbe03c53226cc8ce27037968525085a4a79fb7996659752ae42c8690ddd56fac297bd424b2fe8355a99c3fec50d8ff9609cfc5a3c2feb19e83a85ff306182fa48df557fb75d75beb479d4ec90e49209257763e031204824622c060e6d6ef7f452b446a25e67595225b101263500304d77621233ea51ff29f78e382aa0e5b809ef587b3dfe3a5216d5c7c553b032d452a0ac126a840e0f7290ec8e4a7dab60da04f1338b6e572abba4571ea22f3077a06dd06bd922bb4048b545d70bea9e0e479314cfad063e06bb822154b1db363b91b4be323921a74b6be33e2e0bf62a4863230d6eedff691566a48f59da6c2b194f7201e66c88ff12b2614017e6442cb06d872213a58e79bad0cbe1c902e962e0b4fcebc263c9de280499ade28e3cb80a21b68c008eb8f57d6b2c2bc1a24d86e8c9a092e636bd5d3eda32b3e651b7be3674c8c3dc7b07264d6ecfbbd4236630877b9d9271257cd2d1066bf20355b883b3b2e5a516d4cbd7b8cc67399d2bd76e520ff46972a5dd4a8454dfbf23f454a192238ef5c5aafba9f15d5c8a724fc61d72f81b4c3b684428bc94afff2d5ecd65e9ce420ff6eb6d40016e4429a2a93f86e62120c063b70cef70d61fa834417f303a48146fb680b624cb7eb3437be1a4435b0a760bc62234c361a73c550e5ea9242a16ec1582be7e2ed2e432bede2ea79f9eb3dc33eb596c9adb97738fb48ee0436e44a96883a5b17690fa9e9eec8a2e1e70d70fd52af4ba1611bbd870e34677383c445f2b775f79b01cbbb26610d4324c5239e040ba8d68955d1d9255f335af10f08deed63ed5f20f9c8eda02934ac626a12f30fb57e9171532d21342d0495bd4e960fce99ab1a59b40d615773f155dd0d15f47dfe87c403ac39d8edaa88df26bbb8e3832eb1f97471789b9b7e2ca6186c7f18179da07ab1a2dbdc65e5888cce702aba10fc8642306b3a1b5d48e92decd3472f6982b71faa3c63da086242b22dc8bd967e1e80a1c1f709010da835d720d4d1910823ff4c6c501a95fe212b14acf173aeabc33dd72ba506985304af0f8b87caece9b68d9b5575e3fda51710873aa6c93396952f92e7192908b9341f16ff1d015b075bcf25a05184cdb8eb73b2b108b508102c5f92b039d2b2a66edc31cd6664a2e6bf21211bf52c850f952baa259ea364154ed71e90e3f5c6e834f3a489a9acbe71de54d1c0fcd61c388b9c192850d98fe8ee8f044beb17bd8d78384e57273d2aefa39b6cc7c41372fe0050390af5ae8f6028c5c8d716c5dea49515da67894812094d86baf053e0f55c05497298d5c7840a8faf2e4c7c29e42d71bcd3de2379f1aafe6a250263cac7004ab320f0df84047f953d416a7b4c7f7cc468c07c0ebc5a73a246ed1696b2d497ee57e232d910ba19c42faa2c5e34d636601bd8277bff61e0064aa0df7cdf4ab52c2b68719a119826a9a8ae272f89e290e5ec78cea2a4e63ab46a62cf6ea71d21dd225238a297c93935b38211c987b3b88e308e8e19c5424c81743fbc43daee2cd279f40fcc60d5e676fd877b7f036a77017ea2f9e36db79b3d2935424711d8ca95ebe5aa959543612074fb7f8ffe2173fb79c45c35c95d032d4230a2c61495458fffa01033acc600091575bc87d4564f43dfeb84448fe143ccb30cc1fe0e218a9a6ac9d21a487d21e0b8bbbcfc392c95ffb1c824c4494e07ae49f40644614639cb6cfd11b73b915488ce0299c4928bc915cdf3a4f8c2962b19df6c245e568f2038550ccf9ccd70e92993f32d430b9e12bad203870c9615ff2dafb2a72a93b0f42cc71d852c3f5778bf4af6b7666538090891e9469b3fa45711502d1df941a1063673bb7525ada39a31fd4b017714e9d27d3584ba43df2c8122a6013f4fcfa3b9d75f7bcfccbcb3d6d26e9458295dcd200452f8139b702dfb840ca2be3ce8249b109e53a258ec457fe123ce30b916c7302c23f5d211be398adae09d64dda3f3bf4caabcd5952739db6a57046bd9df62680abbc4849bf42c2168bcd1b28a29bdda498f559f4b0a78b2d4c57436fb2a2584c715f79bad6a09eda55183553b092d49068d9151c82e52e24dc0e9b2ac6f343e203f4dcf4c41bc1149502807f9db108d21fdfe808fccd19cc6a11e407d2cb6558394e5f6426d56ad124d00689de85e19b1ba66d448c34dc5c6206fb5dbe2e24ec30b66ddf96e0fd27d251c3d8e6d3f33826dad44336df1f32cb71e86a84f913288394ed47e257e5a75c073165e33c5bcd4922dd84aa2efae5de579afd6e9aafe710a69c49316623ad3287aea086363ab58f404273d2b8f1d818c2ab1bd6977353fd63ba92d44579a06a95258edeb282ce610c781be9d1ec8dec57695d352864e4758e8f1e42ede1337dd5f9bdc5883d2f08171a45925752a8807c59932eefb12b647d44243ea29f3f90c8d04ed0478820889d504a070770a9ff6ed4044064e0a7b126929a7d112f8aafd5d1bee106aeb8957f596cb49fd41ccc858e161f75f37c35513eb51c0b9db008ee012464507e6bfdf46ca7570e997532e83f19bda746b8825a71bc8c37edc03a108276380d81cd6bff6e77303b9e8a1157b432dd1b06cdeeb88cf769eb27729440a448a5c1040eabde8385fafe6007a56f6744491babd94ef86156f8fb0a5f07b28a6fc426dfe2a29e21fb06b397b8c7640d8283bb82aa01cf96192e9ac1e6322b88855d77a16d396084abcc4e40a9f7bfa2641cbe77192c290e1fafa88d08f5af8d68af65ee7ce5686b0612ca66eef9497451652798dcb0b7198f407d7427aae46c0839f950ab2c3678eafda1a23f85fd1970d2cf8283f2fcd6ad8ee4374cb3e9bda44e8cf1e3558e62f03a80c9d896a219bde2e55666b460e6042c9d25d7d5d9fa75d4268337dbb2bf12ce1dc7a872990d91cd73d775a9f80505c5e2d2bf8637337868caba1a49a1e5142143bb0919a9d2da1c52fa663223afe75095353d6a8f2bbffe98bb41ae880731d2b0047b237f54ef7bdca928860a82c3b6ad3eb45af4ee2c68d556c8145b43d6361337c135e1e483774342f990a01c9493ab28f904c36e039bf40e4ebb1edc1ba41bf71336ca75615d8eecb808c6e932933fa2fd00944e9f5d45036abb5af09f6bff06e2f3207c1b061acf6831e03ada4f645a5e0bb1fc3dcf8721990bf5ea062ca3aa7e8ffbc553859939a93f0891c61187d4d10378f55b95842b0ed6310536f08199aeaa93594cb88162f7491238c511b0fd77e2fadbd84d824e7d56ac1da72dd66a86dca10d3b030db885fa79639da176024c68c1d97f1c39776ee2131ab39c5654ce302874b128d44d329d48e927e7ee6876b3cb7429538f5d8838d9e3706faab2896fa4bbd701c1b9824c284afe50e73bcfcc8980e63da96294043a8f5c6c94354ef9ec630135ae9d74b789cd0ad8ba3d53016d8851b754ed6e13ae9f44a59429717aab7cba0e0d09056a6f4d39760e8c4807a2c6db486fa98c762eda03ea3956c4b58ff331b8a355da69b97c76ad3072e87dcc69c806cddbf1d43ccf39cc797d0b3139b260239526229526d84c768d989ee5bb22772fdd174c61cf691f1325d8d576a59bf480da388e69b211f08c619dd57cf2c056be43a3f58073a43689546322dca8febb0603b048d4c39e7802e550f865c55dc1e55109ff14165a72174039b8a721ab9ecb662f0c50cb127d20c7bc8d5154751ffa39713d6a010dac5a290b294d2fffaca487eacbab5378ddc219295a1c9fd242c350a8bf9824ba985e539e0e521b03f3d0d3b6e6d9fd2e1a675658e8adaf71b8a8582819a5e23f7e4753c4258f3d0f65baf4b4c128ec3bfd87e9f122e288146c3ffa7ca501223fd46c59a6edfb4e64b7fa8f590fdd19e186c26eff61aff4fbd0a28dab65bceac4aa67a98ce8afd9524e29db6f8c960f13c4af4ba228da37fce0749fff6ab9590c5ecaacedd879214a334bebe837bd0abef87baf1c5b812a1a553215d3db061745cbc6738ebb57cb13d02e8d3dea1afae06974cbe9f4fb4bc55b542b355fd8791f8cd95b33fa03b0995a2e07b2bb5fa5a5aedf2d2aa1ac863e4ed3b90c1f35571c59db22cc083dec4bfd50c257a258e28ecde0ac7a63562898fdf0286465a5b94ca4e87484641b642668f727a9cf28fe9a5d1f7553e7510749d170d16ab0e075e362a7a10b37f7f22c6770d2eba2586e2d01d0c7cea98be3fc2e4473e7117ebb767fcac46fa657f2e3c73a05758541441639fda0ad474c923151b4539b5bf9252d4eb498c3b4ccff107d314a978a87fbcea25ec22e37d5e69afbf4888309d530d054e1727fe5cadf6734c7735ee5de0d5ecda43ab81ec922bb87834061e7726d742f928019b4a1798309c5042b295de2d7f5e59c81f4fa9dfc6817748258dc4cb0daace7a2dccd7a5e7d21bf40e270516862a4237eb304ee3e0e88c80c83e2c010214af74563215e7a932ede4dd2f3c61f1c773dc22fba28e2c997ffc2976c8c05e47738a4324747381f36711aa542f38ebae9f7fe713a6a9fb485f1e6c877bb35a5ac6cd0c124696ebe10c540b900853c58ee99f8b5840c5400793f865be928cb0a77a7bcce0803b1719ac8774115cdaff252e098f4ef758cc0d6c9019c1ba59655ec2752d3083074012516307680b11632f2e4f9ac34998e5049c9ba34a0a0db25c44f76320f957cdecc26460b32ec8764dadc885e3021dbfc74884e062d5bdd7d6273d77f9748b180ebe39849b5b98dfee996ecbea22ae2d97ebd74827dbd29a20f228376a2e584ebdc7b09f80cf0bae4c1e5f92910f6af94b2e704655ba4d913877249c3c3a9987b65313b8f94f76ba0fd5256e0502b323cb05dc7b0c9ab5544bce2783a660f8ee12bda9f2f4b4688c66ed35669fb6325ba05ead43e34397b5511d8c014d76f024f0014a976b467f9b9cee429a85907aac5cc43eb6f918f931be87b06e38a6995e4e1af6228cdabd4936e007ae5bdbd02c9ea752cd83778c0c80db8e7c25839a2e8ae7d4a69b54c6d21680685721158a147652ed483a2910b5feb47fccc81bbe38ebadc76eab70457ad2335bf4a42e34e803436145e7ef3a4661ee40fc2f44ade01235576355c7611bc618ea781029a953bacb4bcb97e641bbd9ba04a3d26a395340f27398bdff2ddd47892a28fda5ab1e5ed1617dc4d211a7ff61d44846b4ffb7985dece7a3bc3deffe31ea315f06fc59586877e09379f140d94d76a81d9376fe3d1e733b870803f3ecfc65d9528ca1cfb316d2ebb9cffb68a695770f0c13e6de79d72ca5abb160053acd52790c01ca67898c19be0b0e67112e169194aba52bb61686a49636001256f3d3480aa5996e181125362552b17cbdf8000665623714fc3d68de0ec9c65459dc07d8c0e091789f370c0f74506218a3221dd0887bfcd25f0b59899fba8be28a102e9b763a5039dfaaef6afa8e9726e175ca929b18ecf24550994961f5068f7cce57ecce4d874638e37e55d7efdf5c228fa776b652db6b800e97536aecca3f15d321673002a81f0e93d58f889ba69a449f726b8609b0a9419955a2e82cfaf29e141a0e52545766e99dfc7f83c0fefa2c1e9e6d5ef73e104783d79d6365c695f3d79b498bc06e41278fc12180f1426b7a27d598b1114dec5cede586a41dedb32f6b20e33381bc4d3ef513b90d9f03bc96ec44e7b42a7eb5d9335027b837ac5e9d84b36407e89c9f4414cace28c29e984402494e4ba3ec43244a1e31664321278cb8854ac53e935466e7edeb650f233a57cbb722db2d69876d901586e505f728a6f7b5c44120f6d5701d604e9b9b43881541855f37f69a3fb5f87f14988fe53f6b1322ae508743bbe9a3ae86fc8ead3f869a59634fc4ef45670fbde9915404595e61482948f67d935374f6ec69af11d3fb2731753bc069c087dd807c375b31c5b5f6f01117c1069b980474554e15ce43fb6dc907f41c05d483eaeefc5b8eaba8e7240d986ecbf4097cf43262c5b234e7e3c4d7ff96e3810fdce59ff3a0f0eeaf0a52568650251d3ed57c933c0e653d7fbfef52451419e0ac9df6296a8a9d56136ec6a1c20b5904ccb325f3d93a3322145e834f16bf9712aba9abc216abafa071c1c92f3e235705e2140b8dac7b5742f555e3d05bbc617e0f4cf081ac8af66b0e2dfd5571e36e3d2ee23b6db6b47f1d0d88f890b169b8b3857a8d234998004af1651d1b51d8237e822843700f8bec8930f3399c749ae735b39b771c5db181474376cd1115a41955a5deb99aac30aa720c48c65c2ad62af46f8a6367140f42004b482a957f5bc85fd8709cb15ea00b646606fee1a1aafcdc51093085038277494d17be788cf3caf69910981c8e7c5146ae9cae634288d803847b176c28c91cf2d1134ed50fc021e709fcd70fbd746c2000092b9dfb7ff602049c0e9e71fcb9c881d1b23189160fda578fab60cd5fa9b75803e5f849e5e5af91aef12d7e0287dea5115436019a5e21aa6d2fbbd0befeaf5983f64a35ca667b6a5541ba4401d3b8a4f7036103aa870c018185508cdedd9c18b0ca0dbff3d59dd4ec82a6b4ef99d2b1e64a93fad3949dd520bf1948963bee06c5606df6c430a5c2f1b53a860a0eb30d46aec469c1c7964f06e8cc2dffc5feda333ca969bc24a5c321bc6889a20ca5d4abb53aff187e06d0553e7eb5b2d0d176ea66016b7c4a5d6cea08d000dcf14069a79a94d8b2dece01061d0f916e3e6f3a7244fb1730eb5cc359730e4587bf1776d55a98cbe243196a0c137c44263ab378a40a2541ceecc1c43350e9b92265bb76d80ad0dcb67e11da1f7808a7b6d38c15e98b41b45947ec003983f0b1a20b160856f9ec21db39a950b46c4e30772fbf494ec33c7af5326c7ffbccc41d0cf62cc026d16c8c8b57036c9bdd3c00739f20957ff7649c8669cf48ea4550ce5f89a6e2ea98b7bef5a678e07365ce29f04d46e9a78ca51baa225f5b9ef30fbf5d0b96550d019eb17b0200a7d172f23ed9ec2d831b1e75fce8d1207cb8169d53446ebb536c4bb6a15f072626c700d7c7c5ed8242c69be284b6acce87089069ea9bb8cb3bbd8d73b04467948335a53bfc0c42405f3dd30816349d92bfc42d738d16887586d950da390adbf198db1031de5a8b6b153331da3dc1e6c5c31c4926b193ee9e405de4b6a8940d6f52b3c1d1ea6e63bdab3323c5eca09eec6bde75e160703467e677a0e672c92090ec6784a7fa952afb2fc374c0f8eaf69e5951950a55a3f16e55b3b3219660f0cfad8b5e8523896a1e31e2adda0597873a27766544d148be8e1d28cd8fee5f9e2219eae501c5c3863807bdc55358498b3b73d867a4d0b620aa2463a5b9fa0b8fdc5317177841873c11683e58ad554d917e926f92e9e621f93f48021c023e6546841683b0ad7f47aac6dc0e1546dd1b2df189398733171a65eacd9c822b0b8592b6b03d9e06b2e32f85d96c69e9010b4a9ad31f4a0845c28a46ee3707bf78a617d0da0012bf0ef8ab8f8a577298bf174907f6cd47c8c0e23e4acb4e299c658253c0166bbc92fdaf23d82000bdebce335bee03567624ec3c42ea106183409270d2f625c2ec612c6f6ae7e09b258ff2278aeb08a47f2c9444ac1a0b789be9d6f20424fbe3fa64e44a7e79466afe0046a6a72c16f58d8d002059a133ce2cd5f5590b3be6714acbe4cbdde83dd9579b3a5c09582ca950df5dc2d425a8d23b8e4c8f77a6aac34c8e15712600f3fd3760e6a2173fb8ebb9ba2da870ac9d961e13c027cca0ae289666b0ae859331ce39f014d02572e1e07dfd9b1e8514fcd4ecf9417123312fc97307694b47978c075f79d6fb68c4c8e0a2fdeb124d74ed001959582d2dbe3683c0cfc036a58af79765e7f353a71fa72cb89d426d2fba2c83a8135f0cb9ca40b9cb34f8e3eca793885007dd0ad1194bb61b1560dd8a15d663b307d4b07171f6b9a6c9dda1d86ccb234bca4bd98e9a8169418b5b3f70ce5a8f42b072d5c6188ec81fc5179086748be8b4158f738f56557bee14c54fa3760be070cce0299bed3101c78c6f4ed85ccb6650f78972766bffa8907447c754e7edea4e2109fa6f47f92e2e337393c9fdcb0ca3ce98653fb0426ccddb9e959ff8cc54e6fd7ed37241ec85cde83324ddf73572b823479a18b0b10209ea8f672bb77f63b14ff262734cdf5af668efc21fb1f4c1e9b0b8f7ba5ba6d1d2bc664889710f24c42d85cbcf656d3da1da6c3bd55ac021d4f8ccd849fb216b7bf084f43be2bd526cd54fdd7943108c4b6ddd0b9c39d1c068d1ebdacf72ba63f86ec50d99d69ee5749acd812f427cd145e30983c7084cd75a29b8904ec44ac104811adc8be3718501db8725029268464d6db456dea74ebc12508dc1631413e3db5e9feceb295ee523ee959f9a4845529788ade7d6bf0f913011b5a9832529d06ef592c6ccaee94c2290415ddc041eb692d1a35704d07ffe1b36488ad21aed00baf9fb5080839cdde100a778d2c363105808619acba32cd647b28063978ac07a7a329f7202d00e35ed7b626d8aa95a722040de0b43f5434a0976278224c2e606dced5b9606b8e5ef6995e2f658024e2fa3af4312da024a7afaacbd84d25caec7151d0962ffd419b70c96061109ae381edf97bffe7d3d36cc075ee99b33ddfa2105d2eaeb1a7c9272db559fa348354a737d13e437a07ec69aaadd0a415217c9c8d33e76fd526a178c941cf37993d4c19e940c37ae2ddf12fb6dfcfa360154c007f71abf1d6468f1a0d445207a7a5167f32528a3a09a0bf6d5be26e309d796bc302f9d0aa749b90c242874c691f81e4f127a3104c454256cf1acad1da93395d109857b4b0875bf57974890ca68b86830731106f7313d1dfafef39e931f572bbbf2aed1a3f192e19fa4bc00a7471df6d42a1f776b73b8724d2e093c10fbcb81ee9ae11e98d72e3659969f36c97aad043ac4f1c295a831d85f94c6231f4a624c4ac5cad12eba4d8594a09112140511f7d760ca0446c8b951697a676fd6b49153efb07f4b0cd469ad1550b1f46dcd1f4f7ae84c2a30e46101e69d050fa62a2d43ac779d4f7f1ed4e05de4ecf690eb68052bb80e6f14a6fd2e5bf9ff8b0643113e53ce368a6c157290aba44dda5abe0967428eabc249aee29edfbea34cc09085086cc7c454fd8296619e50822b21db12b13eec536117c9078fa165cb36a832ad17668712aee22aadd16602e8b2c1af28a7e8827dd2a4f2393b835c904a10ffb58bb2be1ad66d5d3ea5b91da5e299b23249e29e10d18218f21c37aa9c0f6496b0f49c23c99aedf1bfffb6e32d236f068778b9e5ee9505f54abfe8a7603d3a852ad70d399cb1513ac94c6e9727a372e60f6ea7152d85d05de8ef377a2e3db889c5cb59a06abbf97026ccdff394b6281a77c5baa7cd49c74b4a8ef79f9815c552940043d5a0b2d518203670ed4d39eddcce5e6612560283f574731d68d41a08959e6c0a5f13cb81f83788b2bba0446952939918473e9d76f2f80fbbd3af6cf8af183d16259fa463dadd94afcdd6969d64688b050822dc25bd9263e4f5ff11c7a4780a2247d1960915148deca92412cdae676f20f82a6403d3592d750d7b1222bd9aedf749044918000a5c52d05b92bc99487786d01e3bc881460979ee852f42c7ad5abe51c01431497d2c94c1f544a5b00665fd7efaefaf9b79adc1ea06428b1284f9fc8456a06ea26d0de8eeda739e730e3c0c8c37a65e63930fe5616a1d4bc8b304c27f8347bec7e94328cb15977220c9727e8915bed4f4e46a2cfa1b13f18f813b0ec3121bf520efde881c5ed27d52eea4f5465b2a37ceeebc1e271f84f92aaeeb7036584df934da8afe79dea306e7cc691b07a24eddc45db1b4715f7841357acba12cf75da316b037a4f1bdc3483b5d7fabbe18b8b7e1d5ce2494eb9064742f8e88794eacf6e5c28b1b5fa2625f78d224ba2eb11cb3d5602f12975f906a31916fb1bde346899a210cbc7a13232a59be242bd486087816b6d89bd85c3543bfb0bb7259b7ab3ba0f54509a4981139350df9626e8ba58e15e3ad28eeda61370d34020d63e9c3d50e17a306d263d907b898cd241f0be51e9cf8ee3e78458023affcd57506a54e81ae4952c70afddb327877672b2e830322fb2224570aaf11feae289ff564d9c145fe768e07dd8b03fb5ca917ae0b1e04f459f2c132bf269bc05ba3e6caa765c961dd75b04d08756a5661d6b7c555bd2da022771d498373bac20b4318ae5aa74559cfbbcd19b255a9ec1db5f06395347482102a1456b68428c6a9a39b2b05aa12610ab9a23aceab3687dfbf29dba471506c12b63c2e45675cf66719e99708e7adacd2501294afbefe3f0f00fd2b5c902f49f7346e2e84d9acb8b43675e8ceaaa80e68fc881529330beb19a47b9a3004b87446e81f0e6788df1aa6cdf83cf9289b9d9228a8fedb6578a5868b96418c0b4de3cf939abeb3b0af0212ca200632b7a29b3875c39be8ad9f280bb18bb6ce5be8c6afc2fa748163730742e51d890d24340cca1ce0b0dba447155530ad3897c204937d52349b31d0d5d0d345b152a20977dacc9c9af12d15b063d793d341ddbb76cbd8d006f1d4499186f11c8824af5c1e48dedad1a133e1876d4917faebb2191830936457ca7563f99452be97735037d085843de1078fc46b1c467edda6f3772f868d1a949a12c6b75496394b4e0af3d41ffc505a93de6bd709243c19a0935766d1c701853d6e7da37f1bba72657c50025c1356b99d107d76c75862b1a508b8cc1922db0ec495c84964769f583e5b549ab1ae8b6637814bb73e188164db579afedd0999bc6b6eb5fb5feb7795017300e22e94e1164f37cce420f8f5645322f22474dab830badfc6e170cd6c742d1ae57c7c3d9af6d787abf973c85a54078698c7cf31d5532fdf22d8dd3a6d9985719c2c2c5269d977134935033387c84aa536013c4f8fb14aff19913446169c98274153fe18d59abcd12da2ce478c1ca82eb74b000afc86cebb491b71ffbc91d5e22ba88273934220ad83b4b6813941c4f0d93887bc4dce066ce2daa625588d0ff49bd9ca357a0d29e5b51901857b51d6faecf5777d17fc468d28aceb9c83479647ca07f280c671d68e1a36b4064dfc26f03945485f84a48ea2537d057a6122a47cd9929950484974a5ad27108ff22a7ac3391c92b3da6029ae77d7f8a94d1803e108c45715de416ff5ceafe188150710f1fbaa12255083da1f815ccbd32b4da522be93aa5bee2ce42a73fadfbb7b88bf60e64353212c63415fd74f8247ac5b5dd4ea655921129d0ed766e49426e33fde9f3bb4fde3cc8eca50c5ed5dc11afc58abdc719a4cacc1a21b178c224e43a2725cc3fdb69652c2cb8d9fcf07d7e3f79b3f1e5e39b9517a1074dcf8e5560425af5179f8a49ce116d20b14c7fd0a61aae0c02d1a2c0424ae5965a01a43d7dc3004c3aa584b89c33291d59ed78b60b4d9a48ee7f680e70f05f2c90ea7d3b2757d5f118d2125ba197b5b97be41afcce76a4f8dbc74c5d7fcea418b25cf6cd621b5327a180a6138cc24f66f467e88c3ee6dc83d5299b61e915ea8a30f9c5341d21edac88892ff10017775d1052cb314d35de3eda281986a12baf4cb4a12bad68e3727258574afb8f402c2ca4c8031b033430a70321c3815b02ab9e13de97e62d69745ccefd9b868dd1246a5112e9e6b3eb283a14591e9af0b16766afa6d9fa428f0746f3487853cd09807e5355d14930d5f545135c766d2f05e5a5ed8db2f2f9375fa354a36ae124a77e064554e0b5f1e4323ab1fd3412f91900aebeaa889663d0d6c042c9f3a0312cc921a2e28e20acffb154e9bc08c05a5842a4e13e405a427103c50a61e59e27e4155e0497d50cb2d6afbabe881803ae1176f00c8aa9c00567047dcf7641b9c33a9e81ff2d0f8aeb51fc3fcaf3611bcdecfa28716634b6e02435adb80f9026c2168c50dc7cf76ee108524c2c7971ae485d6f49ad66b78c24641acc4cd8b6227dbc5d570f930289323f6a18cf46cb0231e836c236ebd9bc94bedcf5bd655da89df3df0402399f32ad706b4ba13b5ce267371fd146469f180c85c9fe18c7c08297a16dcaf3735e86ef523326c3df69213c2991f1d4f62821ab10c649e5ec9f8c43e4d8db3ac6d5ec760dbe3a93fd05682b5c472dd8e6ad0e412621d8c307b7de9b331f9c2f4e74c1016bb84f176ea207891b6521610b4c3e2b14c475aa04fad683691e4f07cfaf729945108e22f4779169fd4816ca2b537e56a57d5363e236ff535d329a06402fc0d4d8d206733769263a77bbdc2e880a2bf7f4f9fbc091d7c5bd892af8b9d5bea4fc698c85d6ebecc8ba4654b99cc3f3823440dda3f53c2f3c8fa0c07df3e5033d47db2a43a61183f83485224f14829d791d562db55f725fcb8f59fa265ae6cb92078db5f4a6d6e4e232406f7c77f3b6415d16f5f04140e86e6104737d5a3ef95e0f4684dc8de794e04b3e9c13ca00819d783f0c7538872c7ffaf76aec95bda0d6ae8f787fd699e87200d2fb64d77ffad846908a16cb94c79460fd46fb7add3ed593cd0838cd24507b10d9eebebcfd6d98fdaa7fb9d39b9ab6b80f3ef096519b068cf1279c138af6ab02005fb008889d0b3f161a5abbba1fdf329af5aaf32d5e5e11ef8621d6c4e9c0311f8e09cb3e2006041a0572c61e2222a9bc5b43b8d0e2199060a3e02f8f764b4a2dd902f268cb40744e01da506b98c829627f1241f9b5abfd2fb1e285f711a59616ffd15f3f8503dfc05856c3b5964783da97345e2f81b8dfa59b6b63f809e9c675fdd17e4064b26e65d1aa4525516d47258234336fb9af64b0988672ec790e1f679d0c096f8b433f7d0ca31ed88bad255cc7adbc31e7984d3b6cc41159f80020575a6fd7aeb4a4b9a973908cd710861ad0bb2ab706b2826414aee2b466035eebef296863ddef096b1a68e3dc4b39ccf5e18bb4cb5d151c4172a91767619a49807f28dc09303c01a30ad1b3af8131379582baae4ca56066e1e101a7b40fbc70cce179e8b6fdbd8a8591bd7819fa39d47f9a62a94781c1c02e57576b35ac01294c838ffa6b5527607b8b6ada8c1859ca5dcc00f92132a9fc6e68283daabf9df16a92ccebd17d9eade6e0aa516f9bb57511d36d874d4406fc0b8199a3cf670ac8bd6ef0915c6a266ccf2e12de273e369dbb45f0fd8a5da5375f1634e089451085087b23479b9a8a2d66c78df8d0c93af91ee3469733388310d37a0f060d0c613221e1401302c43b9cc44c1235e4cfbc845bc2be3b1eaf2ab98c3cf5eeffa959ac4a8aaddbcdd5cea762b707a932e5a2cb8faef99dbcc7c5a37338c65be782fd6ac6d271b9b8f479a9e133ef6c02c0b21c5fd98414c0f47eec28a71aba6cc84fcd20b83562df1c78700094306c648f57702cf66d820ef42336ea95bbb7c0268f5b85333e1eebc053d771f58a73ed8157d96594c9e1878e67c2fa7dd7e6f350012eb9b1b3ee4e6a09d1488cdf5e067def285b627175d7d30ad18f36d4f5d5375a6a771642474aedd8bff75dd416ea5a0a2cd696a67610d43882a1bcb2d0750667f823685f770b84fae29f3c40c28b48a8ad0edec0403aa26dcf31edcde5912c06596e6d87162a3700763a94b5549fc58a51d9fd1babc069441b03b730b4bb351ea2737d797d38af3c1632145dab60ec53956b422e117ac6e20a0aa2b7404fd536139c6ac0af57327f4297a5fe06fd7eed544bb46848f65a050bb5c63a291b955b3fd80157b15d2d888d44f602c57c830ccbc8bae7727262a2a846174b852b0be440e4a87e68d52813566fa1096fc4191b9dd80cdb7c10deb8bcef289134cb4b131d0b7d9c187e61bd9b81b80e1a3b04aa2a8f8f946f7e466b9669a0319c29dd246e1b8a7cd4d0355a73e0cb79bfe98c281511bd7dc2fb9d5f9b963978b74f7ef452d884b3807fd59d87f97527663b010f6ca63413c4a51d03eed251de91f064e5b8317b33787cbfb4d5906c2a09608770f04099b1a90f907eef9443d2caa38e6e28bce202cb634583938f531f629a585af927b6afa7ab395f8ad167cd1de6ef00050c9a33542ad41094829fdda73d23d98fe03262c318e19c2bfe6dda3125b6db93b4fde8dd5258d3e0a539034285ef50c840c04a592251e63086485653472c038056f4770085d59d29a30d4f10ba4d62c6a7bf96fa0b56ea0b59d27014867e89f4fec16ca635ee06b3bfef365f8b1a6d1213d301bafaae4b9cec232c25d8cb8a6fac8fef13f622467da0c21224bd034f231ce49ab541c4c5f652c0742f7215bed536d7e9da1c86e368357bf097d0135c2b8c6bb582d7f738d5e70e6debc717faa52734d34df5473e1ead81267e40680b5eb1c7c283aa2eff475d2781c2ada40322f0eca41e77477f2d7909a23c9b9c4a28967a13ec7112b840e977f0b6aed9811b3d924169192001d7b3b29b3c331b9781ba9433529d3ceba4843839321bc8cf44a11bfa9fa16e8d5c7eca8015a27938c9a85108215a21966776c37ab02bcc9ee78169e22dac6895926919afdea22c240db84eefafae91598b49c8cdae02fe36204a8214361596ea4911e989c6cbacacc463f71755783cb3d7d431559c234507a8b3155721e2bab9c274c6997c203c4d03485677170eba440e837427758d5c8a5c76cea8f95af79dba5a281404497dbffa14198238e6a1fbaf72e71846e4be9b61afb647686f9ba3073fc3352eecda0c6481c2b0f515ccffd7f5d296bf337aa53d2323bf7ae15e1914f33930bdbe8a726192f8994b1b201d73af9b03905a0da2ebd710aa01c0933349c6c9772acac59a24425227fe8e4465398770a36be39bc0c66363f7fa601134ada7f0e0b9fcbb2bca353c48ab28bbd2045862e51d519667358454ed2ce8bd22c671331a443757ca544794c07ad294b76cdd3f28614dbd78c33dcd1cea436706d0e59ef048474b892925c6c88b27decd3e4a6428e7ae7ceab3711efca6b227acb8efa551693a0d7912f57384204ce969fffd9ab01df5195699b9795ce892c78a6b4f2df54cd7690dd15dfe3983cf5a1c43dd9a77acc5f162c968dffd9f96b5a19a42d478ac38cdceb13967e30101604d44df9ec9c15e4b68036cb3e1446d1e1f99520eaa5f796894509573db03b6b45907486dff34fbfb0a6f82f8c0535d500f196053d579edfe49dc325a310a868354e7e2af1116d8dbf685fa837b8829c006f6ef236f7bef5a7ea7a3e290ec5170a5416fd2aae938f2853c8d60a92f05ca1b05d1baef160fdb634968137db1942c54c230b15315835feed6c4f57d017ec9d8914a15e28c24e446faffbbd21252d970d0711b4c409aaf2f12866700ec8b4cba31c5bba4b7dd387afea3b7627f1cfd9614fbf1a5259db13d4f125800d4700b12cc449980744b4096a652397d6a5bb004de502226f27024c18c5969876d96e97d8d709f0f47a0a1f44bd9b3e738f5736f9a185b646cf945618acd34a3906c06497ed7d14c149b8a44d2e284566cd03b9799d64c1dd50e952038c9a91cf4fc85884f2d6fe341592bc5ac7af4e95efd053db7a835a01e6cc9f512b1ec92b7d9a378419cfe2b9bbeb7b0130f248338b16a72de10a725e584f1e95f0671d128ccf07e5834a149cdbe43447c756b844e832c3db85b3fccda3b51b9ccfa3586e63461d387fe9d3e8f335ea0f13f399bf35d6c9214df4fd8df627c9a1a62983136791ef928367c1f1a2215080e3fa77e5ae2ff5f9f1beee578a93e21f5ea3fe1b58b7fd3e5daef1f788f39032af648e49ee63c1bfbdd3175479628a2b0d165d4875d030f1d9a8f55d11600b23dbb62dac9128752a28e35200b7264c52b922734dbfac489ac8b56c2c92bd87a340ac6305f4e9faaf5fd36cd46996518c73a865e56f9ddf316db4e63f50bd89ddecc2c36040a4b6184ea161447f58800435f61afa9d482837d4586a855f82f5b02e188c87c0b341b9f9b0289b2cf141de87a9a0d73b87e868f51a2e3c87e12f9b0c7e41f4bf7da2536be4098ad1774678cb688c717f8527b73d83409b3557d2d083858e6c59a2acbc9a7b949145fb6c8c1bf57114d9dbf09b6aad48fd2c51d64740de843410285270e0683fc6ad55ce86f8f324bc803bcb617a5ab88e53817ae0772fcaa043e5c109cffbef1dfba61c1d6a225ab6210b5b4246fbe2e81bc073ef0ab894e9b7d367e1a38d93bf43012b9a0237fa2169bb3b51271f7b60263d0b0830679f4a9072f7a29e821dd4f4478f961682f76579e89da1f8de362237b5a8104aec4711d65ad780e5b185eaeedc61b5785b760c0ade07c7144e5877c4a43d880da142ff4d48eec5c99cdfb05b85ba51d4c71d28b90d09d1632fb03092f0ab4a578933e051574ff8e8de80c25743e2bbcb4eb720fbab68d989e94f134370511e30e629e2072d3ffd1d7e119177f860334015fd4ce02d1ada8e1d7b2e257a3631faf11e58201ad006aed4572a8485a1f0c267a2e347d512670038e0f444e75568d40a343779fdbcabfbb7640530e878c2f0f7ae0709cb9720b25a0f0b09c4eecfb376af908e3238c3b6b7e0294328f7fa8ff5952bf68d42be82e79de144362087cfaed6c9483490838e5e5881b3d869286baacf18f6f00435df03cceb6a175e73dbbd69ec150326053aceca54fc01b285efb33edee18f8ee8bb267b324b13253df9b737f52e23b2319c2d9057d9941dea09ac77bc0c67ef1ff7b99cce2104ef674c7af63ae818829ecb85ddf201b4c4aa8fa1e1d7fa9c7b0cb48afb4b25e15ddf807e8f8b9e329b9184dc17989e5bcea017455ecf378ecbee257d6483dda5cc3e7c8c8d383c84903dc866d87ba9721e8bd57083a86888e8866efe1efe99bbf48d7af3791d1917c89721ff5e04b43323c18429b58c8dc3ab29938dcfd38b6ba2b882e2f9aac4347d08faf5c20f3b3abe1bd8eaa8e0235174b9430cd4f6de4d2912ba79762d33160c42ba892ca8fed3ed31a37c582db2808dfa5f8f74bc39dfe2d937aa4cfe57b8535e9cb5db675a1838bcb1257cda39de49f718ae6e60926c54f7ff76a8de87d3473f81871b13c6c28afe5e8004d58459b576db699a7ad90ab5e121bc58ef8489721d675faed61fc4415543b9d8724a65181d7446f88c1042bacfe4109c9f93dda1aed067d2c381ece0d9ff2e31668ece1f2b64d7d6b2ddefbc1a6a8d52e9a01855a038de94ff46b0082369b58429e7af26d506f6afec304fa5af9f2bcf23888235fb756999cdf7ae4531741704c02fd1ff98994a3a7d68a85ae4c025c49603157431358172d4569474519709b55b835988261ff58a8101ef3e86291cf1c03d00938e14d2ba8f8b3d0870ac4d00cbb869b977e5a3e6134718f50dc8e25e748414af67dcbd481f6d5dfbd83014895895598660d5ea1eb9ca4e135b5cc0cec47b7d81af60fb129ae0ac15e1c5293b7107d824eac203d1815962c3bf05468bda2937b9fe2200d990275ffade9c3d05d54ff965371dc2386c1c086018b78cbf2a8c81a9173c8bc751ff9226fe6ceb87fe6e9e0edf31b677f0eb9834e39dc561f43cf2decf5a23ed6c4b0efcd22943f009e40981ff9b9a51561191f1415d7836e1ef2fde896766a5c721de452b5037369bcc590f4bf005575d23bcc33eb871f0c43669bf3acbce7699ab276c5056107e06babe215804e0621d19a370196069f546291afc4666870a032c4e10c85620b162f15b855142d34368fb45e4f08c0c7f78024bb7426fbdb0eff1c730cf2b54f6d5c72f7cf5e5a826600de0a4e18dbe66d4b314625a892030eb0c4a9ff4cdfb649721acaecae3809163528cea1a79b7f7504e675aa2cf9e13c730153407f5fc3d1f0692656c61fb927c862b085483c7aed968b3b1e87ad86d62b815e0f6265e68bc46c948ce902ebb5452e5d001fc20b558868d5aba1fc7841150426b28b006e2f20a792e087e6b1bacab5c23d67b124643265f000435ff4cceadc58fa3a47e300417c93c19d67a8e206395edfc49a4c658fe7389211c8ccb4215d203a5318394a88ca6164d4681815408e64d9f1d437d507400610bc341720c6ca20d607e800758b9edb1338720577205d3b5dde26dc6b0d0c9ea25bb22179a584e7845d7b0ed7f2a9c40aac1589eefebe626e858eac32a9b1c6a8673b147f665af202c2c43d71ba178dcc7536c167174ae1ab6272e225648c11fc521d31a170e7b759134b5280806e2f1e920237ca84e33712aef9061c392b78cdb67a7b875edcdbe1220921946936c738a27723330bfa0bcdeb396bc524f6e43939ac5a5cc2224362e42fc3f34bcd149bd8d503d0e7ae3cf1a1c8466d17131d3fa5129fe61affdb218469c93d1f2d79e75600dde9625eb42c57c1b382af3f2268c6f891352efb217c698edb8e9fa8473eb29dea8d9c4a89f7d9f400b46971e245cbe1d77001aafb604d555e1c5309c8c923f29aab92dd9aa24f0737f6701a016150c6a5f1a06217034db039d0e5e98216e7320dc2d5f7ba3d5471cd78299d34050e9086c2990bc179d05a5416d2625beb3d30f39086016ba5f2ae1fe87309f0c206357d169f1292e2137f89297fc2a9b54078c792d16f86536dfc9422f6e238f903745ecc38c47d78308e6d84740eb32de6956fbbc5e2e779ad7d597c34bbe8a2105f64508b528dbf8319609ae435dd14bb36d8b9902170bb0adf1c72a6dcd279c39619e14f1b9ab8aa137f72c57796ef2d49683c6889e5499b2244e74a4448b24335fc8f9116ebe0eb98f9ecdaf8bef97d3c6f54c99d14a25bb1c99e1ae8f0f62eb30964578adebe65a7af1da1b7d6ea839f817a92f36e584a88deffffc7cbbaa9c0d697f15b85d9a6e127868d2219e19ba87efcb04c6624feabdbb74bcf9fcbd8d0088b067460818a6bfad65cf47352df5da30de90c217f2803b41c802cce6774855fe3d00fa8f181ef1d4f524da96d38265710ce6a49869acbb4d51896bbe9998b1ac997a486302280fd487b59b83d7911ce6cfaaa6e4a28a1da904a1dedfa5dd0b1c4909aa05451d4fae4840072836740fe79777e93cd380217d49ead93292387ad5808406105748e78ff7c4d8d4c430107eb42d857522dc068f1bdbf3437775213dad92d2f6093289f447f068567daec4e75b20d933c118a8eb1907532ef863cf4e9738b7d5e499aeb5d34b5d48e0890997c8e3436b3a0cd23abc9bf0690e229ad8c14abb175e0829de53b03e63cb8ff17e3d3195c41223baa0c630d51ed726d4a1a2b8ef4f758ed661d44e441564165fba2e5f4d4dda0c2444aec57efb48f38e7288dd8f9175e2750c01dd3312b7c98d11360148b8aba421e00242239f6fc49a82f021045b139b9e1c0507a02bed8624aa1401f30c76abfee7ac356e7e7287ea70491d77f7f642c400e2062de454d7f9bcdc8f77c93b3280aef86301402e3bd683b9f65cd345e009d80006a1ac89aee93494c09cda424d049904b5d587c70be4fc502892b5dfe10bb8c2f0919966f77650108fd635576c785eb2f40b5aa980a1fe0a1a1d982ecb60771e4ef30f8595a36a5ecc39d3e209046d428d789f247930b0ce920eb601730a6b2e689d07c7daeab14820a772c7a0f9008787c390169a4ab8d26e4f4d13923afcb074d710e314430b179fc8ce4e500beef1400ff20fdd828781e87af848e8d2e2ed55ac7261efed8d3c3cf673620d436255da81282bd512a31d8e697cfc2dbfbe5b135abc9ddca4c20b49393ccfb870d36a70bda28fd700d2e487e727219acace417ee8cdaa3ee630314b089cf133e0d6cff3cbd8abbd66d816c841118db47f91df3b7384576209dfb594afd4ef6e3d6fbd28a28575510f914cf005a7d8a43741b715673fe71a36503fc8430bd99d4b4f8710f51f4c5c2eddaa5247faa6130740db6618e7583d65a5cd43dffc7745c316231a81be16a956c856d382e8c71a3d9fe8fabd760c2544212b76579b13eda9050b8a552f85bab6e6f9fce60b1a04c27366544479a934f39e15b00b855c81337594995fd10a272e86a1aaccda84c9e4fc78acdce2e0435ec4b90b9fd3eac320fb270dcd7e13acec7073c685a574eeb1b0088b9b949b320e594a9e3b226a0ad5be98333b3330f38e9e2d9329abf719e4b6b7409e626afd5b0c90fa799632857405658f575acb4ddfe5a6dc9088df551a9b4b30efff3af2b8e1a07c0b5c25004f69ffa0f66101c0502a90822bca12b5900ba4d632cf8d0e3832cb1b14c2b8f7cb2c3187ab41abb6d8408791659993a5b1c081187cf93570fe7ab3a583f8c02796fa493eee2d5b35825ad4866f4ae89f5d1f214b960a3a08fb972bd456c83ad2d3c989870885b84621dcab6ca134ee093a5926ba11470b60c70275d97e6569a832ffde9a5ec18fa882680d06b7bb91756674822abc4c744cc35ad028006254c455973405609cc8241d268417ccf675c32f9aa6e175cadbacac525f682c89c608fc9b828921914237b9297155dd644cf6114c5fb5983bb10bf9947f960604ed55dcc576c985d450a6a5017a308611e017379a9c626b399ee82ae7780979400052798fdcbddc63e131d7bdb95eca87d33574ede8bd0a5411bbd7d553b8e34b51983c17949bda42449ae1c4116b41f49b31944ccf479c7b4cf34ad85f30a765e0601bf37f1a1bdebdf526c9ebfd520f277a6d8825d3912841c8653018507d7fbc9c24d11602b736a4b1926db9471d8e2ade8010029328d5650d57e9909568b22964c373d65c35dddbe774e32406a77ccc328a9070b17bdf386ef695f0e1a98128c2a99093513e678b65f52d42acf0c3a31d274f2f721bc268b6e3490bc0c9e19343fd98e1ac630d002fe3b5cb581286eb39fadb34d68a950d1e4a321e71a01cf2d087f37888d1fe9591f24b19a11282ff291971d6159c6606a9525934aac18a45973d41c491c862138a041e458046a36ac8c04ce35c9be7b181594e46aa8ff9dd35385fc720991f25ecbbe3fcf9909b3a88e88dcc08d301e8e1fde28159c07ceec6567a736af0d71f3ab69425b5a7fbcbbe03347779fc85b3ecdd67369f265450b079a0a89e8bead541b9b881250e8cbe4a523c48dc07c05d2405ab6a151a2a9126d9252010bd74746a7f0997870c2a703b09cee3ab43d18461ca0d80433fc7a204f730f6b355de37b93197735c98ee98e30124c2bb6831fcf5e799c22b2b2ea8fc3bee9042b5e99602d04c71b9d74cad24b138b524658278c4974ad8518f0d41fddd5f8a5e48d6409efb5a868b2f732b0ba9888d3d4058530f2353b6a3eedf9b1c516ea259ece0075f2515a7da638e99511924708b91a21bad537452f7484fd1157eab4c6e1fa53c22296fc73b16b4219e6bb9ca6b309ad1c7efba9e8880b7f3c90d670f369b99a6a88c87adc4ecbfc7a09e3f0e57589452d82b8a7b25d805933128d9b0ca86965b2e5e1505a52cc83b145569c3cab462698b86606d32729c719ee8b07dc73e0c584f0f281a8b40cb4936c8548575404663c90f309f889e602d58fc75f92767b10ae9380e6b8a0d82440c800fd2395771b18309600c2ef0b788d82fa01bacce0b17a76f98542eb664a00efae88f54f0294965ef780aa986ef50ce2a25d5ad4135d54a9924b45ec4a65f7f962ffd545554fbad93eede6bc6a41ff6dccf10e56968e648e47fc6b489ff304488847f77b92805af06a594666cc061e5943d292396de3be69c9b414be8fcf3acf98444d8d1f1f039889abf25ca2a39b7de3310c876c027920d786f2dce3be882c9d33d25869692cbbbad18e5469e0f6f2bbe3377fd876220ba4be5a0b4e7fe3aff9b610028649959637e2477e06b1bd1fda3f5390630bf73c56f2e84707a8f075d5d2408f60ce8d3bcf4c8f468c8a2e6e96d20ed7baac33a652bc0a2190e80423eec508928fd4088e88ec841f624718e7600bb81f253b6d6cf18d805aad9c4a5abbb201b1cb94c4245b883388e8afd24dfb7afa323ebadf8876005996c0385f0e03de48ed368a9e3216fcee74e4b0fee1c1c281ba595c43141307ecde8c9be685c53ef8ce1717d5e9e4872f2f2732a7ac71e1c79ddef4d51eb5f9d23514b3ae9e36ac48eb988e78cd13f02e79be618389fef3ef3e5fe8a8302b5f1bfdcc39808843b0d608df9d2e2ab7f6f9f81861550f2a5060a97c6d6247f3783edc2f6f27c6269567a33214ed4d7f75145716cfacca82e745848aaac2f810904c1f6c5988e075c2baa15076303fb54fa7c39e8692bf73e20e2de68f35e1736d11c182fe7b30107dcabba90abdf8cb6fe67c7428a714aa3099db36dda4210fa9cbf6288f50b78d7ed88451f89053919133b0de45a28b1f041b2b45b52c96f2ddc03b13c3cde77616f6674a0bc396e208af653d6d81560b2c7f3ee37684ce04618c6ba66c134ff6d67de779c2832763adbc2f2faadf4c522202e5e29728b0ccf209d54bcbe561f08a271067526e65ac1f03574af5e08b5d67cc8d0d7755db31125f47238dddb9027458b24c39c52efc026299280db0dd1cd3d4c05731eecc0479ef7900cd0a8f852c70f9fe773a6790c462e20f463ec66c64787e4560039bd098967d4114d5bd5566023df8e74564790fe97355b751d58f33253216adf74d0bed68094405e7f2907ef0ce4361599c8b0fb4041f45b7e716597dc3e1430c23eb88c10aa921c27bd30181dc180e4371be605b1e40d5229c2d43ee99bd3bf3572bdc7d7715ee6fa7088afe772a02d85c3fc3125835c1bdf44222819ae156c060fb62b053880694ebe1508dfb49e69a828f54fcaf01ca86800e2b94a19db718976deb525406bd7d62c20c19361947b38b6bec28697370fe0f28e1794301d23ae84a098d2f6d894f10ff9e07d50ce38fe3fc2efdc4e4041a93369908e0874b69e57d0d1958473d1ca3735935179940cedf0d4d3bfa8a6ca1a0964546bbf17bc3679eecfabfd2963d339232f17488dec7cfaefb3f228decb352a922f8cc43df22cbf5d1fc31fa25ff940f7ae3cf7bfbb8f698d670c0a8aba979ca88d915506970119959d9b655d6032a371bf6737dfdd37b1a31f1fbb19f3120b2276e447d232908a652aeb3c55dc3a04600c1cab7cbbc61d573f806c3efcd214a6aad030c37b9e7ca8f479b318d93b1777495e26e847ce85c85dd19cd4479cfc77c8bc56e2704347c781e21bd67d9c2c0b0847caf7d9a3171e0ba15efc8138fd721806579306aeb028142cf2fe039540b34b06641021939aa7d0bd58ea7b1558aabaa9ca64958ad7335089d648256e53ad698d8b0c085fe9d7b3f4246a6623662fb5f8f780d42c0a8abd6235bfb392158a38324b0b0b25634b19e3dfdc0b76a2d2590467dcf1c8070650c7aed704fec101a7c31951974d32fc56c8223c606f1d31126529c87dbdc3a9657c780f472700f84075b80dd6ac80002b9ed29931f3916480cdd26845189ae805798be32f5979c37204228770461210066394c52df4244aae02ac0f554edbf823ae78c4093d77a4df9384f923e37d87cb51c58f886d2e829ca25fb01daf85281f48e67a740022df1bfb482b4dbf49c1180a43f08f989398303b679de27f4847ede0e080d4727d3ecee2080b6d27e9cd809647803040237db8392ce29ecde7a074b34379926a4cd8963ca5f67ec344c2b97742182d4568387e933fd3dbad28345c181247414b8050a55a342be012d7a4509db8fe166e35c135bc759f5628fd7cdccaa9d18738d27b8e46f315851daab8b52fbeb83a855cd2c3dcba1c13f0013d165caf5f94439fceb2b9435d910a437febb4fcdd646c8b5fb5463f0f29b1537175e15671ba4aa40ce805b731b1d7785654487287f985a3a13fdedbd7dd005a67bb21bf419b2e544827833f0757dd387b1cc8b22d841a05b10761d6e4159b7f341551ee5d79e1b0738c78a324807348ef864bfd5502e717154e57d4c63e2d2a6326ead13c34437918f1ed82582c79b724bd65e5ff926a5eda1592a6027d13fee4f5931b33dbd7e820ed565d43905dd3bf9e4c4f5dedffe654b677bd3a5eb5d910af0745c9bf43d9fa0038a2240f1fa4020a8d37c349004b02caee679d7cce3b8aaa0eb6ed59a171122655a321d38d1324fdf5cb233367349861261f8654258cbc2776c6c03632ab72bde7075ebadfa50b757c662b361b416bc74e1dc2bc0c9827116e978a1a8629600129b6605b07230e8d1ba488dffddd53cbe094ad2fc56af07da4c5348c4451f2aa20b80f4fcbdd331d0d30bbef495bb146575e57bc5734bbb6fae918244ceba4309c896b990b6072d86ab69dfd42926775c957b154db587aed067099e8d13bff341d96da89c76e739e2aba519ec2b09817af6b99806c77c2439975f6d4a44de77d7234650054a28c163095c03e617c947c38a1d237c64be0ae96db61acb4de040d008ae511e622a2c9e448c8c1f33799c23f89c4a1a80bb3bf7dc38d62ad91439970aba45a20bb82bb36c081b64ac12a871b9f1273496586ff7bfd0c609c47b79d3eaf97362d210f399c14c16d70f9de6201fb97f8d88bfd3269848aa6cb01a7f2e9dcf9309fd44e234971949360068bdaa97ed9dea6a397a27e6b48a1963adad357536ba555b78d8298424d4585b3aba9ab68804835770a3525f716db012377d26aab79e569a04220e85817ed8e74b4529d647f54d25b3e9a059e097cbd4895bcc1dfee782f85c00c0083e2b723460b70a4a6d1df8363142a0e7ee71dab2fb9465a34c788c0cb26f884d17bdbfbd0a3b5e395431a04ff0e6d64f3656e814d08a57111cae3616addd597374ebb7891c906bc674c227875ad09835929e7f1841d0e66c9772d71406c30511aeca162bf13fa8e6d082643bbeb7bf5ba2cedb6e8bf4b600d069c719e16db3e0e37ef69d638ad2ee21583cd4a62b52414dd78ffafb607d5b723526bdced7db06c5626f5e1f46147bbd10e38bcf6cc55680ea9bccc4eed8461c16c55d2b618d51255739305ad8c27953f0d4fa2869db918c8192f7d9d9b5bf8b9096434bb7d76cb9d56c113e45211da86c71061cbbc1809576188114175ecb6b4de3277ed2414d0e705581ec4afab10715b2122db8e5eb49304af8c74170f4ce564b661623eb613ef9d8f9b27459c87948267c1f9b98cf7cdbf3220b85861afadfba0b97003005f88833d9758a1bf97ec972cd641817cb6b43610331e93a1e3d90afef5f0556f8871b46971fa67dd7cbabde50992d2016ee641ad7baa4b0546635dbf62e98925c85d70b370e5e00b5954c78b271d593c2f60e14898ad0b116f260bb056ae7b71dbc6f17837fca5a02d97da59496708ae59a6b9a6611dea1c1bed16a911bb20872ed632666106f6395aa3999ec730a48c17e3f8a46b411847fd64c19da6cd477f8d55bbd1b06e72d30e60760b314453b42886c2337ba0c38fda6542fa35c60fe3728609ac486ad8ff453d6e0c266af91257f5d7e1b67339311ab67a03d953a76d0ed14cdf230eb3a6a2480b6388ecc215f307f14037b6b7f93951a8ba5a807932b56e2520d39607fe30433b2f769bcbadecccdfed753ec480fbf9aae59e67680219173975162929654d471734968eca7f351eff8cf65e7483ecbf01d80ad93d9f08da7af08404aefd76c421f1edcf4ae3fd6b4d34930de4b6446b6f5d8fb753a9568b62250903222b7a959bfaa056ad95dba78688d04c0deabf21e0e37c02a2278406d9ec5d24dd437eae825481899c5b5a3dfd95bf5af08057d9e63a64df40a81c7e0c2fa75cbe196610e4acf348e391957c3e510d147b3ee8c3ebf21e59fe5e72724eb4e433e0a69ee7c45c91b9b144144dfd4c1dd5fda3edb79977110c99465f4dadadbcf8b53cfcb81c603c67dfc8dbc8dca195b38514f7ddf02ab35fe4069eefb5fc543e46a6f447f7a2273b86678e7d33d4c908728069a0a4c4440f93d137060953839967406bf09f2379c9c54191d9d9310a640122277b5b1e429dc71bb7c69deada8f6d1431e954aa3caf2bc06f1d8f603faef32efa94ede01988317ed0ebdfd1eba688fdc5377b1fc152363112061caefeb077a580858e0ea25bf9c9889e64b2416baab1e8bdc2f272456551ed633e16539e846f5e631099b6cb4d8332d2ae12ba58d93c4f03071b16cc35629f34261a170e3dbe2299d88cf23c357441a5bd25c3a1ef32b9e2a707d25f925af14d0920fb848bddb18280d255431125fa9542bb718d00a50b24f2122589355d9e498db04d033a4f8ce690781891b795c2790b14b023d5f49da6d0b6c392ed38b9825b460de42c5184de688eb9f982fd508d4472a5784a761c1749aa63ecba93135c94d7f894b7736b5f76097e71afbbaddd18e42cb4b7d5b704e07719def2ff01e1364c61cb6c727db13e97199da85953e48e220ebb9c876fbdc942ff2ef676a1e046d99e9188b8663f128c18ed96e89e5e1990f9f2d8e7219ab10016a8964ae651183f47829833d30d0bc72f666428d77ef947806f459bd1a9161cf40ad94db9fe5138a2b9d21c7d94f84f4918f94413341b61f9d826e40f3fd6599b8f0fc6de23e16e6b7ab022889345e5d680ba6b816d22f25cf5e051494b0344b63bcbe8e5b6e504a791434df7e0b8355f29d038901ddced647c248147b400698ef9caa15a556903a5a5f44ec57ea78a9e26c7a83ae487508b48d46c44b8e5fbaba9295a1dd217f6571e01aad0612f91a5f2660d97cf009c0a41ead9742c22b475f17b685ede55e5b19ce11e9ae06d7725d1f52b573058ffe2c6f4e2726d8ba7314a934cff94b8902c04e95a30a59d288f64c06ea67312d89f2f9e1da8d9cc844f232d9241b61b7217098f9e08a630558496db15bad2fa6782ce8c8a45996063fc92299e5621b372367f65a8e84d0325bc774139659ab6d6ab80d26a4ab1a0eca135ed0d27613cd73b670972ee0d5a52f4e24b14e904484e23e6ac8a4cefe67028651b35ad37e3966fc78e24140ebe81605c0d2deed265e575af083f34474c8b6e44ded1b5618a31dc9a274bb842deb0335d88fdf7bd6f8d93cb93b9ffe07ed39ae04afa6a0498d8d5ef404df69d83bc66b606fdefece18611a05904e369ad0896e589896c5de78023b05cc7311e2363edc7f49b569d8fe4174618bd22ed3c82032215a55e5b51be49e78a92af793f00407341fd02733293c0b94e45e599c7724d882ea7e54f6246669bf010c9b090acd873f8d27bebeb0be2d1c0bfb990b09b730c5e987f5c49a00a84b43e4fe573dd4529fed7f95b0014c4ead155e3adfc92bab118f40471d5a6580eea19bca724254ad9fd85eaf6af4be46271ee0c23bddc3793f133e3c22b8edba066523ed4e6c50cde9257392d1b9e7c938a6206fe1b8ca2039a55c1c86459e980e44a398af6c002191c51cddc9f856c870c4556712da1e9d0b8feb7cb04ade0bb830a237aac78b8a6da406916417cb8515ed3e90bd8befbf9417dc69a1ed4ca669531502d09f64aa5618c44be722b9995a2258df29652a13cc2f182f37e0484a88e2b4ff3fc00bf71bfc52c1b98a164aad97455e6f42bcf84f367eedbe1584992e68864d4ffe266fb81d28ef0f8aa0c9eb1d2ee43656c6a3813a2e155abddbc16cab0f0e14a5e313a4d632a0a6ddbf753a8f62b0c2897c1f54d46e4a621abeb157530277bdfec4410242de42c73fa0e320878789f8bc62194e917dd2528fc183b14c4734c136b6aa29ef71e1b6e3ab2f7b1020fa9f76b517ca71434f0e9fc0dd58b149030256737289e014c63a4806e9ccbb361090b16578b65cafacd7c3a7ba5fb89c1a5152be04ab5d923c43559ab25b9ed46bc6c2a9e58d5af7d37226b30a1718b47ac647356e2bd3ff3b7ed5bd05c0930b9ab2147506f7d854bfad7a6fd5e4189e4131a9abdf3334f611cef2c66082308df7e1ba43f10c916a89a275a73f1da139b355fd6b15d80d21af810624386853b36a8dd7934b9c2a95ed85508a1f599206aee9becb8114ece6611dad5436d627f5a948bc2bb809bb57e883725c9127a47eaab12f6c70b95cfbc9d7657912c315a21430bbd0f41b53db4fc6278de82c044cb0b8dc0828c822287b4f799a4018c04d3b1d305c056bac83453b44da1b0efb8b91a88ba3d4ddfd2088346a29723cbcfb636b082c9930a90010b314da2fbedca85127d0df9cec58a5e15300de5a27d4757bef6661bc25e02b8f7e221422b5f42711a980e8d54d237a23a2ffc9cac02d71189c298f4d69ea6eea224e344bb9562b1c81e08ed06f85346a90c264cd26acfd1bc366f91b82c5c465b7283988cfa2d94d0f042b1c2cc2efe3f5508cccc8d555f79ead2d7113831c23d76f22db23d746dc7e2f0e85d42ac6f29b8b15ee46ba2cca85d6ad4c6c088d5fb8e3d17fd5ea931dfe3e5da723a190ca7d48d74e877be8f614e6b12ba3ccc8811199465823796c6c1498ce65d44f9092b6a2f0074ea28f8c54f2aa1963d4a95198559a16cca4cc47f46de5876c50fb5758400e636b535fb1ce28729f973836666545cf2d45e11278f9425e3133aded3079cfb27c64120a32b2625f15d80f834be6bd37a969bcc65821011b0f38a1fe45091cd51f72b2a7895e0c3b9c3061019bea07ec5cc5433c2e2302cc12fe27d4f897471a0b766879f3c983211b3543f0b28f0a6f49d59cc2db0bf01a7543d5283d00cc438e8495f332f15112cefd287a4db03c2d0d9c282ead52c104849ef7a65574d38ab997b3a6298d2f8b154a73c134c7aa67c2aad3e1c269913290eb3c7be72dbe022e4ca56c783a42f00cc3e750c218ef064c9b75ead86b470715c3e8eea39d801137fb05394dd446537c49a6976ad00154745ebfd11fd9b42bc4deb7c6fed77d563992c187b1b2d0e114439b6a648a3a3ffb850bdf6a2d3ccb29e7793c47a751c8642dde1c7a75a27b031bf78532b53a7ccaf415dbf9f99b8d7820d10e602b529fd0302501dbe3c8ced506e4cb85a5cd01d8c75d7cd8470e055eb19a2e70b02a6b9632e6def08114b41077dd71ff1d36b322c6538f5fa695e294a8c596780a93959c9507ca8735f1e217add300c3afb5fe0ce67f8cc88c3a299f56ca35d4d36fe0163dae67098d807b7f883e81c111d3f1407e452b52e219865cd0035709f22c7dc6d98c4a1e91dabd016da168447366538e5f43d61b142612b8e52da5ad4c4af29e6e40c3fb7951bfb9217dc84d1f0c1eb153bef576ce9d691e7f365aa2e82bfb8a0206410e96bcfeccbc1529a3e7e1c4bc1fdaf8bb8245f9a0bd7eff0c15dddcaf4e51fa7fc226ddf00dc793134194dffe816b9168fffa6bedb768012cab86b462dc09bd41b79a178e73890c334bd32b85a6deffac334b07c8be4dbc20049a895214babc86020ab455448f7a26694978ddda74a2a504b93e7115aec136f8407ca51426582038258a4b2d2c6970e0ca4b0e843ba83f34621a385b00096bd24b5d17bb6a2e43cefaa3f768e1eaf09aad65e833fb2871c22f371e834c3f8cd435e6bd5d8e3417be300ae894a2a869a0dfea7fc7b8cf492955b1c523e66882fc89ce7eb9e75a1d5328105911bc065cffcb24a28d9ed54892c1445c995cbdd14b3204fb43cddaf66a040620e930fedd7783871e20827c92a0c71a3dde9de0744a675dac17bd7e08781ea58bece3a8c0a98ed073e15d9eaeb858433409645aac875e83b73d0844d3236871dfc3afc8764da42e62d5c985ec91f3858e19a6445ed415925699290196678343d56cd5706e55aad07ea5ceba0010b975c90a642c7e8a3c322988daa34b871fcf6b6a8f0b12c3e400a0b94240175e7c397147ad5755546ad042841b7cdd872c6f5db9ea6b089a4cbb0a41ac717cdddcb98cf1a7a2f5c75823ca743f003277ca2c551ecb5366e0359c7114fee07aa6d0d88ff1625049888336840e85615d8d790de45c7e1dca03a1231269961576ef49a34ba63a8ae8a8290309e47a923e050a26cae02b2eb48d89b0b29a65759a10b8855ebf6d3d2f2b0d0363f9246f677b3de90813fbd1d8596e38c5e3872b049703d493403e5ecea64c80ef7e823ee46e076b07bb0ec4b49cd8c1e086e4cb78f2614a2996c21a739af95ac364e75f580bc63c2cb6daed5a27a35f59572dbf74fb72f6374af151102e5fe44f418dfd09f373003589f4374658fe22515fae3eca5a2120604e3718d83a5c505604ddd2473e4c0bf236e67916d3ef7e1479055f36f933e01dbd526025aa53f383d4412e238bfc604ffedd49cd39016ec8ae43ddd749f405488d1531f983a8c95d5262c22d8874da02da7cfefae796643d20253bd7d8400465c8a591739b3c191dcc6ea86adeb04699a84c8fce47686b515d87decd846485fc49948fd65ae9b2ed886ff9b1eebda55e47709570e99f4d62bbaca3630d82623db7b6d835c2f76f24e6af6101470c1cbf6ec1754498a114a6141cca4cc51f615e5ebf1a35f85554042ee4700a29b8dc89349d0550ca32bbaafc19cd5baa843f9c622d8aceadd3fe3a17b1c6dbd7e7b26d2597417a744b6d49a9095a5915313be6b5e9944bc7eb42b651ee8138e2296044ece2d14af4623c27940c84ffc014d3a89d7cf45b558d4378e72d84842c65f05084b5432f6b54240a2aaaeeff6ff7def5e940f2e9855d85dfd23ec5d6ab5842dd6044d8aa45bc1105d7ac2e5638bb5c15ac79e9a0c9a6039393c6296b225753ce062911716a196842996d058a8ec3ad65f7fc1d89a811fc5c11c7fb4d500ee997dc42e86b97467fbfe6fe038be8685a21c46c03cd1c0c8cdf5d3e346fa00730f754439ffb318753d551cfdd54a97309b9085fe689cdf21f6bd4bd91e96520e6bf4b4ef33c9598f7433a640ea01391e56de8c0349c06cc0cba890708496151e07293ed03d9fae84a3a39f5192ec551c7f1ca531dadb805e368531eb42068bc1008bd71b144ffac9bf1cfd8601fbd7568d0a196c93b4453947feb8bb5686fba223339576647d51f27d0b47d27026d829e18e4deb4040989c5c9d474b0cee39d5ca5dc2945e0ae0316718ffa8010d90ff0a7babe334b982c570e32982ac1691e0b18bcb1d8dbd43fadbbeb3168dc0bfa12293ab3858a8a9fe1b828c016777e84ccd3ce30b22a8699da93508d8834a25e078b02074f2c9e5061a170df5ab1fef17ab8e0f4e13f05e43cc12a20abd31708c25e8b8507f84890b794bbab0f3e19757ceb5949ee380a00bc4585a37d3b99d5d1d5b567a090673e03b4d263d5df9bbbb442b1168380b4266dbf932eeb710abe1488bcdbc6b1fe80009ef3e3c94b86c4fc5378bf465888da891b9ea9ad0c9c3cfd1cb9eba3f19f117818844205044fc369b61b62a6351d15d2a9ee6ab6d5c830710717ad7900a2e22db2e2ca441c1170ff38314dc2adb0e5c748ef1960a493d10b22b7e7f49b876a4ae6aacea6518f0f6e96df99541a08e65dd1dface60140dc82a763edaa2b10496c0a08ff848b435bc07bed650dc91dc96671dd9ab13ece9c17eeff4b0e9a5562da04e5e3367aff5e02056ad34d8fb753a347b9d80bd5a0429b72f75892fdea0ed5fd1eb388d9fe7470f64aaa6968f395b1add7328fb57129d26410f7419ece93e8528092408fa44b7c51325998141a1c86e9384e2ec37e0f860de3417f3bcf10ca5dbf6bca7d64bb4a4fb172807ae292464935c43821cec97d1ddec5c36c42b66b0c668ee1ed279af07092de1261fc6e65046590d1f6ff358a9ead30ad6e25aebec61e5dd9f6a270763ed4f8b34f9064f367aac737a69907f266516d5819a184963c81d3e9c8c3f4589fc228c574ab7788a89e23a11a1dcddd467210476ced614fb0dc85b0fdba6e4dfa59ae1721d01c199174a7776d43cece361c057f872f5bf030469a49b37b15cb76f1c356f205e7bc1a40cec45533cc1a67a6eac20b74c3d5ce9d87e78c6f57a096d0f9ca8ae187d6c9bd8089fb697a0a8068a7321fb33bd54c69095c9aef35ee3fd934081ae5f47b25b6148d602366596b6b5286ee5992286a6f753a140dc645dd5952c16a0eb5bf0b53706ec2d4560f166c974aa2c31b11910785a113c1ad4833aab16709d6ed8fa47d7631783b7d458c2ccd4abae4ecf419f915d61205d40b823e0cc2c9ae197d89bd872ab0ccc650aaca43a7992f2c35d4db7703b6c982a07d1e8a7f8e6266b51083b30b1e9bc8809eafdea680a16367570211eea518e16e09d8e772c5c3b7f8ec4db957499379fc7ef7d2a6bde3f4e7a61eea0e7ec829bd161e23d7d8f0cf055715ce7f74a7cc6e3f09d42bef47acfc3850d371beb945629189af467a61add9cf464374d6190637599332ad586cf20ae17c9d3af5306a27685b99fbbd615a077cec72f01c13ab7775a999951ea07ff52d3eab9c8cdda00438acfddbd3b0ae8a1f59d37db126ac20c24f871079a9a63df522ac1b97c92839650dcd9095770fe7f1653ba6e7ce2fa9a706eb07ae76448784d75549f771ee533762ba36d6eb0a424aa7df39158a23dea7b74cb30427048b4d941bee2696566f192a71cfdecc92397c9a28f8405c9aed68b7bbdaaaabde57575bc1efe4741cb5dfbb03f26f4f5be0d2a8df578b1f3333d2fa80a3df8a3da6a52fa6a64d1060be99810faaf8b7eaca72f9544d85cf651c2d3615c5951d528aef1e51a7da4d7fd291cbe796235f3573a44d723e23a00d71de2c2e17eecab5e3c296c65992d93464f9fb97b61aedd88c71e6ea954e6e4dc2dddfad253a20190fbc57f2388ccedf225738cd13902a6cadbe495717c8be6c73976b2265ed22debcc12c9e4a75f8bc3f809fe14a0dfe7d55d6113deb884428454bb2cfa4f1fee5a82a8d0e317d6ff187f869abe5675297a40117a422cc3fb0779aaa6e120fe725d6024f17680a5cea23abf23c6f057c41474c797bf8dfbc6437e01a9a9065339d440dd683b633f53d869e2b22651b1c46ecc09faca53ae4df37e298ec8795ab3496e62cf5327dc9ae9cb9b16eb8880f53acbb8db9203caf7ce1129711660656f103be0c43c98510d4a26f9f67b6b8faeed51287252a22ce8f6c40d509c3b440c5bfe3eef7745b06e5ce7683bf7d510c47d6861af708a3e60aa6fe3e1de5a24e4f70367ddccccfaa706d4ef87ca8e94f79402554a75d5e09f9d1f36a4169f591923c54b497545839264f1db0636cf219ac85824b3d4ab972cd39cb45f4099a9bf09992bf3adf0fc4d81899caf4d6aadcece3d314840203c58991bc448fe5e22d76126bd83177a7273b85d1c41ae50b08b2c19ee3cbcaaa93b2ef197a1effca046064f1b223f65de11dcf4398a8bf18037328c2a260311d9d26ebb92504e0439180e673008d66edc9a00891adabd4aeca65a38e9ee3e831926f82651c3779e6425196544d4ec164f2769b200268db5815d725e7b067559ea2aedca22c7b0dcaab9df0b16c6c11eb95aafc67ffedc76f8470745ea4c99e450236234b04f7f436ce6558668e9365e54b64380810121bab7ea6706d506de316c3e781c4f76b7750f883585f64053c5932a349d2886faa10474dd53fb3790bcfbfb431dfa0279b4966c5585122cf7c6255845e93f1685eab2d686fe69c62f408df8f454bc1c4811aa4c0f5af597655f047d3647288f439cd888e35c0e76d862fa36b5458f86fd9c3545981596b1a5d8fc6a41ed9eeb76b398cd9ddef489d14c727a8f1a36154f07ac961a4a84e3f3fcece673f5df50ca9cf26f3a0b549ef3f10a0b1849a64342f64cbd260e4311644a5ef18abeecaac9b66901200d89416b336ce4ad19d55de106a32375648cadc4de02885547e81b2416a227edd061066fb2aa5753e7c995dd3f70b61c43a9b4aa5fb1bb1ffd0865cd8a953a26ce1f03ec1e8edfdbaae9d37ae7cb551ff78d6ffe66c1a73bc085050aedd302b6dfa0c074adce7c8e8b32fb8b75382ffb363a0ab71489f5aaa1211a8f3dc48b374301c0ee4a51c7fddae3f525899e9597d97fd3b8f525340afd84ecf4b88cefc173c286dba408e301d3c13201e2eed91b7fe967e6a43c1aeb1107ccc5bc20a15821980e4e29bc33154cc0b8b6ab837d2d210cef3d7605d815167a039c264cb3b91a430fae13daf597b71c76dc28b9e38d7ee9144579b6ae828a3f8573e75ac81284543bdb11ef1abc0913d198585bdfe45cb10662ed59e03cf68feec7bf23eebf8a873323eb945120eb53755f9467145b59f2c7b5ddaaf03d4c1241f958cd5886ff36e8b4759e8bcfa1101b360550c1c21a330faa855aace944f14243f18ee11dccbe56f11e45197abc07713cc9399350a1b5fa09789fb2ce4bf3bb3f75545aecdc3a4867525f37d3f9d64d58a8481b5a5c150a8b5a454d8693ddb12b527beed2a1c43d880539bd77685e1c693317715ad870c0e75d02983504d9ffb3520975c48f98de8d7b79de120783d19e71608f3e67c75feef8e56556a1d669f79403bec9ff798e7479b3030e32f860d9af911d3e61d71004d5f9632a359a205f61e5fe62437c5207523d35b06f6ed737b4a62a9f99c39d1ffb66ee4dc719002c37cc922acca45777abda7f748398bbcfa67b9c5cd8633ae15a7145d3726180280e2c96de0920ed071db56441b03ce8116e788217d9018e080575f87b88cf200f7b4cd322d660be1558066d83d4c18c0ddd90e687e67604e95de19c7beda70d71d149956b5601ac3a75e8cf45a64c53a7932e3405479eadbab1eb16132c96218375be198e49c597c480e4764b6975c86f93aeeecf8e999799c88ff00b6594253349686659818b5951bb8753f68221f07cb97b2aae2d258edebf33cf429a48376f59284355ffc6dab512581653f507383cb25cf0936db6803e08f4a24d5580408e8443946e3ea4b78b1251d74f24d33f2cce34598962e6191794b1918855884576622ebdf6e9931099a023cfb9689857df25e9b641bb8ff6dabee4932592a9edf4ab47f8c1cbb64d53d00fed5a5885e2af6016f2c37c3ae6ed60b20eac0fdfe1cfe5221bd4f5e179789cf463758d3719c4c5e0f630383ae1fd6f1a82937488f4c9d99b293143b5ed6d4480625d91e97f70d5bd77cdc1d34a7ecfb9639b971a4bf1bcdc4a9bc04e2160fd2a86cd09451c21cbafae879b919b006c9afba27ec6f935dece1e3594602c7ee561c58402668fdcf28416d70fd7a832fb9be06a2a6f952a4fbc02bcec91e2e9e79ab35c032e22a3fddede18ecc433f04a8937dd791f95e62006c7ef0d692ac8cac5b09a118a2519e325d1efb50e91b0f5e8dda597d76bd6af3b48277700737dfa6812c803ef21fbdef5528fa9d9571c19ed9f240f95570b3346b135a4295eaa168c51e41856a17fb262112cf7b135051e402ce7e7c258cb762db48b09726ea263d2bba4442ee6d543798ecd12c4dd53528972a9c18202e9e0d9f6a01610d9a7c24bee92d86f99dbaa399d6530d40aab3de4c36fd60f5a374aad68279e51cc725c30501688d9f70ed2e8f47f9f8138a296dd17b1eb5bd6b125a099dee74addf6fee9a25f1e982db2f02181cf015751197bcceeff49c1fa843e7cd01d797a877a4e15e41408b47b57067c0f32cd5d4d5b9ff27a9b0a1b1306d21e5b9a3033a4655c7b2957b3fd69e43ebf6651ca1b4ebb3488cd4ec4f5da70e857cbed88b0e42f90a4fb58f07b8c2fda57fc88bf12daa64d760fad955ffe226fde922ec2b893f0513a3f9366538d31391e205c41a05b4eb451fb5053bf15b1780079fa7da787e787cdcbed2e4ece6a8cdd8094f4daf82612ccf69c705cf06eea43102ab1d657107648a6e9931b47301891b2c43a21229053e69ed1e760534b6e55114f8b14dc7fa3202155a4399e6cd509ee2fe47fa40db9d8ccde14b07df0b68885adaeb489c379804aeb823a03391527610e69b399c140acf4ad136218051d65043ba99037e74b0bc5f272110b0598e2b4bf6289633a0a9920e4950b594cb9753e9e4e77bbcbe8e3ed6407f7653b6e0f53bb09aa17e93563951d92dfcc72d30b522d6321b75f37aec34d917555051815a3b16f55969c9573fba5c5116cebf54167706fa5c372b21c50c6b54494c41ee1fe414d4f3df32c90d63573909918fc6f8d107d0953f4f756eb6ebbcf4a7bb07e8a597269521bdb54e16c8e3ec05895a3c91e56aecad544c2e5d87650a1981e9a80eed0084eb796debad51d8d763e761a93ca91ee9b1e05bd3dc4e3dd01f422d3b2d713358c1ade36511c938117261964b620a8375e7ea5a84415d00ba929120e36f6e933b5c829f1420e7ac4aefadacd0b6ea9e419ba67f58e936005f7f482e95598ca666113795d1ba48e4c92a661cc57ba47cbd54e941148436e4ca1848e7de9b75cc57697c62172fb01475a8a0c5be2f20289ba3e2d2259b48fe2318234cdf02e257df65be0ccec35fd740c3324bd3f41b000842009264914089d2ed646a75927511a5513b0f102c217f937d08805187e1b4733b40727a20586059d41dde195623439527207f81da05218ce55e3b7bbf67c97df1c80d6fde3949ce3b12322c06d5e438ac64b35ae1e0ba357f6b5fdf03700ff17a34446f5b1a629079949035b3e8d2fcf2667ce6c780d2078e995d18464bc8a93e9f05dcd4bed8b6028b439f4b25b0e808a3375e64a3b4157b5d35cf522cb58bdc997c437683818f137c9f778f8b18d7c21ca24d9a145dcfe886c3e6871bc139a9b130ac7bd1559865ce2c2c47de3d8ed66945e8d7cfa389b4ce72377ceebf4dd244142bfcbe7b548df2d620f50fc3c1973a0157b40a5412c4dee198f9cb3e7e419091683404afb4cb2bf1c820b1a372deb2f442b591bf164fa2af90124c66ca1121857f5201b620fd17c083ce49b98209ba61cb7543153d9cc2ef2de05b9c163bf57c9c75c79b2d3cbed3d184bce7cea51599760dc9a0b62673ef69907f74063ce354c313fefd54c6d1d075600afec29b576e21e7e281c5436a1534d04a55605c56aeea5122382fb300b5f9a75d8fa334c5ff0b07099ce9958f72ec21ba7b2af00bc373bb87b6057b711d328770d749edf6fa6a5888cfb6bcaad07748d57e39a2c12cace7ffc73aa4f9438ebcefc12b0f018a53f4257627d4bcb116590a779c4b528160affa8a1cfcb1da6206f8108036f3775ad49d55f5b93e0c1220586d43dbdafb8fee4e6cc6fc3d5837285c611739289a00b8899b6203df9067141a6059d8ce6c8370463dcd1443c086cac13197bf135670f641a6e86c42f94d33a20502574ac92d0cfae12b1db3c251d93fa564ace84c989c2b8c86fb7e67fde4bb6ba22142c479225d49dd64a3617a794ca87a342560236753f019cdbbb76c34d869510585b7f66911ecf17a93ca4a0d9da3006fa2abaf7fe402b2ab89be51353b7a1c93007676116e7ea302e4d1a570c26f6c05710c959401c98359c0c4210a64f29ce356e5714be55fa6344d670f668c7ce55129e56e6cb7125e3b0c64ce504aad107e330f44688c81338e2ae3721032ca1e18724c979aa5ca67919605deda2dc594131944ede6cb228341f0fefe4779918f1198ed21ee82d30e16e36a2c196fd7aa0b0100de9ab7603e2d9ef92eaca40bf13f17b68302480933d85cf996640d82d12b76771a12b0bbf768ec609f074fdc6bc5c3547283fc637653c08e29b0301668f356c62530284a1f3e3d8483c53512e55a0c53ae713dfe77b9b2919962a99f177f2ca4aaafef7c6341eb95acd4a9b152b274bdc787c53cc121fbd2ba045f25af3a06e8bdeb1d4e10702831ff0ff5ee5ef4e858233feaf8b16fafc5f84c4796a8d8dfdacb2828bf732e65ca6d3f38cba316edd7cc109b676e0f92380c2f47e21184b5c0926ef9d5ff1fe1b1e5264370ec9743dd95103c9b0b47501eb9594e721fdc6671248e449dfd5ca2c050ceb0d3bc800a4db5e8214a120005400a07c2eb688de189c9529e73dee21a379fa90ae462ecbe8330b30e9df8a063618ec6e9d3439b6b2416cd5e0a8c001448cebccc2c1e6166ca86574d57e1b40ee1e842267b717df60eb80ecc2c8709f3c6898df024df197eb8b39c0056c9e2cd822e5d0cebf479eafeab7a6ac3e791fe804d9a64a38fc531375d8e240946bc2cf2458ff8188c9d9e24178ca8197d1824c32ffbf1ff5442d0bc6adc5046d250db69297a84404fde3705ed245cc6958383c1032e9d305063ccd2e3803b67dddf9d47fc280bda6c930500854b89471a633468a074d4045a4177e456dda0beeb852d221caed95477acde65ffeb820acc9ed8e696726a5029a993388ca73b79fa653d1586c7501d585172611748960b473fdc767608c0ae6d453158d83900ba2f4d5e6b017652ff9c8bd16aa90e52f9a2e792c04e82d0c0f78acd8972b43e03db313c630ec1368b161c9781e367521918015c7945d02a1c8701186b570bf16998c7881f278069ec51ef4abc4501a806ec482e200d98763d58edf27069361e6f44bcadb6403079836691aa67363c621473cf8ff63894d9f65313d7c970a775819b918b29836e2d052c16826ef5ba14ea0f957ad3464bc1d5e96b52c72181f3fb89e1003425a8a5d38bd849e280b9e229f566b035685735a603c80fb591ae8a1970efbc008e7a59df7f2ad968b691441fbd9da8c4d51dfed50a9781ad52e2aa1e7b41a10bd5e7244c1011b895a579f75f8c0f569a27abf6176033cf8e4cb49ca9cf4a9353420ef0932df549fb6e6eb7ef59c28335b01f6a0a6d5688abb83de5dc0d4c493e4126fa3e55f8826dcfa22c0846fe30909f7c3528954b394132c5f112af4416c46da7620c23878a4e377a1af5da1aec72f73f8762e9a5120719645ec6bb0015c6fdee52bf0fd58ac9a15a57b72c82aa5e5eea05e9ca22caee8981e7206a6410910327bdc8915551790f1e4ee4fe89fbd9a290e30517bf215f6939d604a98b4292812b476b8bc7cbf2c207ada8a8ce63fc5ca47751b38b79ef20802e005de4be0996d204219927826b03afcd3e9353fb5bc3ea628296ea3e3100ef3bf0de17be706c6c9b1964c786733436141a9d5737bbec190df7be8d67ffd118ce7cdea157f85e20b53d25e8f88651bd9ed9287df9b6507cfb1f5abe7305674f54c085772842fe64754cbf6a4bdfefd968df61c20161255071164e3200dcb2f1bea7a08ff416094c9b796a9d58213f67df71da573b81fb0342f502f5d5ed10e0bfc79d4c1d2f0f10e1929da692a9066905e4e7406dd74d487ce648e1df8ba329535e18b9c261a3ecec045dbbcc112de51fb2367c03fd59d844bc10e6300669f7e45b478b337451db2a76287743984e72577c9a4ae15514e355ca9a15194a9f1d9f86897a8aca1fa0d1c6cd63abd54e3d1b02499a8973aca17510bea82e32d466d425c5604efad9dfcd845d3783036e3908eb20ffdac2722fe7b53cf14101c7ce508b6648081b8778cd11c68be49ea0b22b0d7c1c19e658bf66ab69e9337b3b15e54500a051e17944c8cddaa4422167decb74be796798ed35db52a9bdfa704bf0e0ff0a537695fa32ee7688f69deaf134b50a53597a3863673aec50807bc003680873e0024e004b410af3cc9a2730928914514bc20ef8936dc386131e7e2d42b69e0cc0c4f8a5c74fdf5ddec588355283e728c7b628556ae51a9422653107bbe13e208c204ec4608978609112b8ad407a9ef69dd925a85502f5c712d6ddbc4ed8a4dfa09005044456d26103d66a3d30edaf1412c641855c87b102c9068a61aefa3ed54167f3087207cdb8e2b3a8631ad2757fd50fe2db2fdd58d6118b478eb3275f2d169107321667e8e660b825d9b9028c30fd06c2dfe46542f9d2db6cd025662b08cf64bbc3426ca096681b3ebaf57441ad6a2ac015c586951ff116aec91dcf81c554842edf7dff6075a74741bbb47f208ce9d51e85739c9596fb7fc7ef65a812dfd6b6a76fb43bf7109e549b090b7beccd880103ba0c8cdf27f591bef552fb00e168104e93c5f54da23a3fcffa11e421c880fd2d690fd45a0bbdfa7b925c86a44c3fd6f5d1810689b999c235bc2ac6e40080a76059f7e33ad37800fd589692c99705602d0009714e435a1a3254ab7595f03126728e568b4f8d0fdbaf0a0b45d6099ceed35cddde186cdb12d84846b28dd675f7afa25e95ce01a980d498ca15ecfc1576ca6b1d14ea69fd6a7c1e46dc5aca98fc7c285cef9648492b9afb46627f644225d063f00b256e5632d4b6576a5dc95c7603fe03ea45c09fbd1695469b1d5a20343a48c71b6f18fcbda0e6d45f1684519e768fae76d97f047441ce3c85fcb1f69b38dfc9d55a88b11bbbc43a82595edc8fb57306519212af51a58bcb10760c975aa0f68c3fb2d44e91f80b2ab1e756f978b9c9923cd033851dcf964955d3b5db82f83dd7d2fb5e71cec280d1546d4013d0de47dfe5b38793fca24c161384c6aa4360ff6a1c9a5aab38f466052fb8b24d5e08cb06818b2a3dd6c0956a3565f3f965659cbae48bfe5d8106c6546ff27d2c8094829933f96c0163155c33e1a72d1e38bbd08a174ea71b6303ef8af5f37db7f0f202db0fcd708feb7710f8c30ca7c68dd115d27a0ed8264d770bcc969fe1e63938103577f260a91bdf3b14f4896f290fb156d592e01df1817d2a99b5250dab70d365d9a38501759084856c15045c124c54a98a72ff2e7bd118eb8905e440ac5da98dd39c0303152d0473b91021843ab0da3e17be79fd7f350b4572452610af8f560f08a617f04e5a14fd27467b275668d04fd5f8b50f88f1f2aee5c70575c9ec0c246f00848216fafcba56402e56d174e113e9c66fc4c966497b1c46f6ddfa87fa01b2dfe6a6ae3c6d69a420dc9c32e4a1547b3dfdb8d2d4d614b4b5de048c5fc747b4f7ba3f1b68a908ebf09cbc02d574325051aa07d84f20ea71352c475aa43d8da41ed170ab2fc9e09eb7a1e88e1e15105b3929d532a9354553cfd5283faa9f241101764c73c193a2e9677b854d1410a5703aa478d52571756d49beb1bad3db5a59a3723eb8630972974b28e5790f62e6f6d136baab9fd86f49d6f307cfbd3efa43204dde21b233dcb22478dc6f5e9b9cf8868f849241eeae2e44a7e432c6e1bb41f589b05ef467b0c64179d04f771832ae578dfa600c33200064333ef8b5439154c6c2314ca1bbddd1896040cbbc5345aaece32291fa71525eb2616304ad2b8d7d3c6b3d80103af371dfb939a913c19ac1251c5b5637cd463f32c8d49e84d69aac980cbca8d774b583ffc964348d60d62ce923f6906d11d1d43d78c224b4e0fad7104d96f0664b56a31152920e6cd610996b5cf33991bf202803481db0c04e7282fab1afa67cd341383743c3a05c542469c8d69782445b67b50ef3b895daf221d9e32882614c0385bda1cd1b281436ce5dc0173cc1318616c91087beb9f4404ba2a15824e23c9df55afded9f143d49dee70c0c1a0bba9cd071587424dbb2d819fe1267e8bb3387c4d6f70f49c449f767b998a57b45cb9cfc840172d1859acca8f1873dbe9c3bfa222885ec2013287c5a5dbc77e7664d19ddb5b61f8417ee061283572a8b76b489df22c2273923301b6638fccb28430fbe856d04dcbe7669525e1c83ea6905728593d889fdec28b6632fbd6713e3ed3c173044a820a0c138e282dc71c16510cebda9b3170415499595ecf729c0ea87b908572e14d84ba5981c3ebb036b13d26edb3ec7705607be28f3df3b5bd96d4d132f3cbeeab2b303ba6c8be5152b3189291a06b32ae4c3fe7c11abce9a8fbbf7ba4f584c7c763a5aa6cc0b577ba461afcaa884e48fb2743d54ca090f9417bf8a59b4a0c924049e2ae6d3f02573d309d93b11b3459a231b121390eddea06ee14e26a2217a1e2646bb0fc6372dfa752b022ec7af462c882636cb39cc755be2137b3b1ba2c9daa0d9d65f402a46ddb7c1ddfa8d610f2b8a178c803176e214c5f76916fd552b24224c6e8e7e236414390a0887a220f276f2b6283463afe5aa7a716f81e1b06cb2cf93c59d5cb98b7dfddd7bf7d98f9c96f3768371110ccea253d9ce8a00ea6658892b5973566536eafbcfafa25ce0130e826465f99480a2092a84e748a144c4c046015428fb357e01870769b029404dee8c2258b91863cfaf0801290778d5f4341f443648d402a8201fe088c61fa07c301548c0d3a2c4a17f1f52115eae69cf154a258e166a159335722aa6294bd06e25d4742f87e0a7cabb1050b6626e64c020894aa401df3a0967c25a2e35e5473f5317a2fc11cb3b51fbdf7da01422eb8aab64613dc07c1172b1adff3da3400760c1d9948d4e175cb36714c913ecc6a4fe79c8a9c56a64f997ed276cb59776c0f9c59bc96fe388d1ac2e72a9215a1c6368b58535cb832e5803f1d7126fd032d4764a9a9c96c5dbb95d3bf5a51c27206ec579c0b4aa4711ae002449b22ba7a125a2dd7789ad36a76ed13cdc59409685ea6513eb0c04bdb53aa96a204861646e135dc654f090fe65ced25bb1d99c024efa94debcc0bb1c118685b37a243ec77e0ab78ccc8adabfbd2b469b9da655fdb93a48102de2359890bc755279b5f7302c2fe051354ac7ccc6701cb2ac86185510576d062595407163aca8f472f325dcf6770d71c3e42d9849870a7fd272e5f75068281d2a71b4b9ebd8dad74eae6d69b982445e6988479e1be4990d1557bb29a65f0d696f0844835f9a8051e4208bbe13f7a7c6c78861c2e5fd29b447b2b237158e92c8732009769463cde84f821843e6091bac89ee9f500472da705cd566039b11454a5ff02b91225eef94bac3cc8024e3a61788c335dcfad4688183d18b84d076f7557b9c83e550a9986520758ac03e929545ff4fe6feb08068a0b62d984ea0bbbf57db7a6ff1f547688374ad08241a19de984cd1f1c9a9d82830bb65389db4423f69452fd78b8a46f58addd335c32608aeb378cfe9c5f19aff9af0b7e0532cfa597f0b4451cdc7a2c0fd247e74f82af445f015b3fb725c00cb16e089eb6e633801ee9da100d61bb34fd6fbf913debac88cfea00edbb752bae90880a23ab0df9946fd302c57f00ff4afd388b612be2317139b27819eb55c3ddb5b74016812955f5c9a4d121033c0651fc807c15c01eb1e15279d3a1ec4d66ca71f0f504880535de07204c95b52f3f77ece3f32c8e3db0cfd397f1fb1959e699488c2072bf0e4acd42debabe2152865ca090c0b2c27092e1915c9d27795a189d2dc399e42b9e64fe86f7df6a0f3c602d1f85e40a94f5ed12d051091ec2986a1ab9c5466500e22ce4f8ab944033de052737667e955d3dbdf6dfa17f151d9ca2bad67ecb9d9be1a515c89b384dbdb799621734cbc41bd9e23d1fd0547d374b6318af8da92124e7dd2a838d9200617427833cf0db57b2e5c313cb86cca2b2be6e54cba987a90a99e9da7506e6578a05daf4af8c9eb168c95043a0178f79366643ef5aee9d44ebce9d8351526664cdfa7ba0980a50e5b9145c373d265786efb0e422498fa50088e347d5183deee834a4d01a7e04696255f6b008b68a5cd83279a58a9c0c925294b8c36be55c42a02e737615ae6fe00a8c6c787aea945431eee09d937e4e1d83d63f46117a210f1c999172ca630ff7f0d7e1fbd3050fa2208a292ddf8fa6fd0779338f3f97198dcbbb4ecf89dfbe649157b705accf7bec2490fc5296c39fa50e556e2880e6ee1b93a526ded3c742dbc24509aa70e00e4ff42e301fe7d5cffee865911f6534587eefb084efc19ec2a998e2037605b163439bcacf26cd7dc8fb101ffbaddd16d0b37afff50400c5ce4882bb311dad3fac209c0b09252cf6fe10e617a31ab33fcbf5b200429c1b6f5835e2f779fc5c16603d51e061a69c709809a4bbb7f10d99eb0605a3ceccb48745ade403f2f1b24938689e27a0997c054a5e5cfa573f9dc4f32c0906046d2777422a8941850982d0b5a94fb8ad9f82483a7e3139c5660011cb3af640c7bdc9716a3c24bf25a7b22b2e44a7994e061eb6e1842a212d1780bb9b2622cb1239d466d20d881b6b8465579d2babc8dbf5bb7e7ff8b5d20b28bd54a517ddedac8cf1d1fe4c784a7279c30d384cc1b890df97b6487a613914b9847881903f8c080fb69383f3e287dc9d17a6209d460f87f641cf3f7e5be02acbac815951cc587d53bd6ceece38db5966fe219571ddf093701f98c778f8607d24838afcc4e3adb4d16bd149ad7ac7f7986d5fd517f53517bafd25e928dad28e0c23419497205b597daa24114e4eb95e57516def6f2d5f529bbfcd1e3de859b99d8e6ee9f4eb4acc476a8510c1f6e944abc41ce1f6a0a79cb679e3c687273da3f04e4b75c65c1c4a7b142a66bc948cc41d561aa8564021e3346a2751427843b1696bad4140a626cb66bb6c7185f734ff039b8ef17527f1f886c6cc08df5da20b705c6b02c372ca4b01bd3a5c6b37b715556f3394eeef066271fdd9a15e6049543204bead11ae826abe7a2970e8a0c776d9ed01cae4295d9fa2a90f21c6dc9c1a5ce38fb5d96d0b27ad555c8bf5d5f86c280220b928ba0db5c66bc1cade49b3acecc9d7da755b4308803d7648e7182699f75525582a6a9ea4d39613ce8af74ce9eca40701d7d96f00052ad80d47d7175bb254a903c8ab85e9fd30e4b69cf95825ab55cbaa1fbf516d54ede6802d18ce3761031d38fa94e1a20a14791e6af5f37748cde7b364021d110b3fe940b281891670a906afa65c379320cae91a3749877b440f28ee54dfdaee548a41946887f6648d9a7cb171ec72b0e1bddeecc5ccc2ec9287308b091afa919afb1e02e54b4bb0467c55a4660840e521fea507d4b3c478e3ec1fddb9145b3297a177314610d865fab31d3929c070d98a7f68ae7d0112f87563a4991b813b98f6e69daa6bf77d9235d07beaf2e9675ad616bb7773bb1cf9ddf3a0ff247bd3a0c179d0a811e6f017d5d139e9f7b3cf2de56bfc7c0c6cde6345694780633fd5f78f9ae548b7437770dd4db82be1fdb080607d0bf227e0e30a9fd39d2b88d1b5afb2a6a224dc9a85e8cb4257a43ab9166ed486435d48dcb2079f8e7bbdd958e64d2b556d1d72d879e352174abdb5ee2d9fa7a74408cbea3016d55c330f9597c1a26330f9178b4756877e0a445e2beba5c709fa96d4fd1880eb524809c6cf3c9e56d7b4d2eb6cab70dc415bea1b247837967e5e3ac25a00ca7a1a17b52a58ff7ff5ee01131fc1b87a6144e0e3556c7896837f4d98f9a1d5c4cd0445d456136822c62eba90386e1ce06e0fc77025e28c38fa2717132d9a83aa3e274f00d73f97c2be56a2d235b4b84b88a26d1c45ecb026d2290261128077066d6d4aa0f4ec783b6dc2f36604efa9b069c4fbe5cb54775a993a6a60c81a5a7dc91a38d97f0b6d2b501799db5ceadd715601542393cc507270e3cde892cb148278206c393f4030d6e03b62b13577caf9231e2d276bf95704ba91908323169bf0d42fe565b866fe55437ea08c811d7a6390b7506565abaa8c29f06b5f0a7d6971370768c555f366aa12f3c9db037b7f82ad198964490a947231541764cd411119141a880f9a8aad694608fe886481f35b6c82eb76264da859dd703aaa4747baa8ab0c92d319e3f7d175c2a2ec2371ce1559babfa054015928ee13d25b4dd8c99aaaa9e42dbabc87cd30bfb5ac0535f70e36b3e6ce900d6f3dc5914bd03be8ecb62fd0b158114b4e49efb587c3d96e02d02c63769e6f425f9e731eaccf3d6323b11a4f4e446233d017aa27c78fffb579dcc09c77fbe629614a6dd74efc6af5174e99ae04f82bd2857a47d6754adfc1b35d7e03137ec7dd36418de096518e90b551ef41c5f2e002e36f027048e7e65797db130d82cf44c675624d180490d95a1aa17dcd4a21a1cd8821cea668fa8c964487a43cf051c6dcd5c9c0b7a90703c8333d3911a1aa5e3ac1e0eb391f54e1a83befa4dad627bbd1b2a95316fd1204685514b55a6885c8d1628eb96b7a8bfd0186c1265297c77ae667c046268f7f54722df5e75941a09181cdb1f9a419b0173250737da2467e43a9974593b24d4672df20d25b3c6ce1bbc7053f4c93c4879fdbf7eca9a2fc7dedd713134ee280f86cd1ea315924e1f849199ad0df6ac148c77f6d925bad5581acca3f5745520246711a9fd69bf8bca88edb273ad6f1202f1117017b773aa438717826a2d31ece65e5dfe644f811150b35d2df57070b36e3844216d546074c7e2b1820fda5d484b2f708468f69277e52af46b280c80c50ac3f1af4e75de01b9da0ba1073cd01de70ed7ac718d25b961ae2e62489e5aab5f9b98061ba5121e23d7bb30e04a810fc43991ebeccee9951b5e8b3dc6ddde3d4a1e74f03bd90a50c5bf4ba71651b95c11ab545cd0f2d000800118f15d4c13cd24398bbef2a111cfdde165086bd40269ca0d938fbf2503e21605aa5af7e38de2e0872d60d82c977873fef1cb3aa134c5b7850b24aee179986dbef3e35fc8c4632ce5fe9f0bae8986e4260ec64c43507bf9a1d5b32a5b03df2a690e541be81e339e8fc4ad9887d74df6e0efd31ba7f4a496771f82d17f78c323ff9d3d0ea34a7103c2de6b61911ef42bb86c61efe10724c3b44d1ba11ed24586331fe8d2f037a31bd9130dc01fb4253270f45fda2ff8108a7fdb9ba3cfca4bc0ac8f3678e392265085e28da85775e996959890aae9cd21d9fc0d26bd14dff3ffbc0c9ed28dd111f4bb8a6464f819ba328fefe4af341ad315c8fc1f36a653d588827c152b0d38f2f6980b9267a8bddde1227f8c35508cca2183f910f70cd42750288a7b372afff4f3f3233c5af0a7ed8f8f78c2f25087243366bfcf2e980af950169f52a92a3b72392e0b12d9e75aba67f9246b7cfdd63c084aa81af8b71928e53a7347f4170ba35631c8cea2c6dd6e2be243f21d20d47a0adc5213506a620ccb598cbe23d9f720e2d1fee62cec91e3d67eac219bf077df64978b252af727899d046de6be9dfa6f80860b12bf81406922c398a24fcd94a9b168e3db7a4dc8c0170118d2d07e3250989846cf6fb92dd6da4e0bd52921d13a15581e3bad4cd8286e182a60cf95280136ac2e90a4590a2e1c4faccfc3882b3d4151d36828674707761daa210a91e61da5d61ca377d83bcdccdd84567905575d966609179c40f3543f4d6ef79f945b89906d6cdf3accd6f52d81d57f7aaf3427cd1a9aebfc6bec7f96f7535717cd5aec54295bb54819580073d985e559ebdeff5c9573ef5179825eaa9c1d014aeed74ccc9121c12fa5f9003e36bbe87a8063e083d7caa278bf82e38db6348f5ad2a0a04a209ec2aba950d7e25c2bd280ce6263de38500ca75b47970d8e13e95161f7a81acec919a4490d5a023e6ab54ef9c4852e6ee94c77e13c24f7472863ba7444e681e0a0c61f833f238304d26ee72bd633f5ff1ce2047248a5470305f8440c62a1fd1727d45577b850f79ba952dcabdeccf6cde9d24602923a9623468d6d53fc76cdc1765162f14ba9f3cf20642a58b15365a2006e51dafeb04425f9d3699e6020fb2b9291dfd14dfc89608755dfe897161521afe9fad68cff210038037fac0dacddad88af599ebb6f37da605d3f427819a1e5fb93f2af4e43e506d8dccf00a47b351a9f2606c315388501af51bdcc4a4d61ed12d6dbb74b72c38d19b3b33b14d51566455d244dc0da0c37f78d3471db555f7c47d03efcca195f4c2e49e857d8726bf4b993c9a42a24d4107e698f0be586f647be4d40631c71693b23c3c91ad89eec5313c618ef7e582ae2733ce162acd49db5b4e79bcbfc9f14df52b79a69da9949912e31ce00b548eddc56391fa8fe89a1d3a38e0b7fc737d3163da81a56e7c06686517447c01c3c9d038b66ef66fd78cb77a4006e484dc7d852c25f5728f6eaa2ba9a576bd45ae553ea1e23d385c83a11cec71ddc13a725dfc4b47442db1735d8ed49d75a17b04d2c5b28003d6827218505ebc7a079ab22b06312223f6cf3063b6684fc177e12075e416bd14428b8516fb95c21d6df8f9faecb9143a0a11369c0c7b5e392c0b81f7d546da246ebbd55502ac12bcf09a3b6bea6df186b5d04defd48b211adb7d774029cbb4d3c6fd576bb7d5c7a6f28c71c71c121229208f57db2907efa21ee9db5b3497391588689311b425da2f2749ad94e57e10373166b8e9c74a768b0713f90c406cbfd06882dce83bad6cbb4c7df5136937a38da8c7f2ed6bb1c940acef9d676c73cfd79dd2743a953b28f50bf37a381cac21b66206aee354a17582ba9e0a80cb23cfb54a9d3b4aeb1067ef898639d507437cf144eb2b8f474b44972be349bb7d305e72cb538b1da0d62c36d550131aee243275e99f9ca28295bfe554c92d9d4d3e28c5ced2b16a2125451623310a07bb1c70fb657d504fc5ad1f73e84794358ac60cc81c49346a2b8b45be34e3eded48dca8f2ce852788655b5b744300c16291339dbd8a3cafb355adf8db8876df9ccbf5a932b2a4d043a015361c3b01cdfe38c4ee6356116a62ba00339a772aaeba31b7b00c2709bc88edfbe7e673d49cf1cb225faad87cf7fd837d1b916e9f03ca94865ca85d637a7fb899dc5834b7e42eea9ba32c91810cbb60785ea19c35972cb431c992f900213cf07a60df5374beccd6ebba5cad4c43d3f947a843c7a0bcccffb171b4cbea2d39c3f22a8761815c64fbe695dae4457fa6cb2e52b579fbf9990d1ced217c0f6b527594326ae13b7e2c7e9381e29e6d1b5e4a4856656ed013d5d008ce0f97c3216b14e794aa79e925db4bc843bbdc3b5d09ae1c94dedec6d724828c40b3dfddd423280bb4bd09c307d265e3937029bc51af2e0e2409c1a9effd3eec28f72d0f4765892ab2af51bf3975228b46ff7995ac8f09d7be658f11a303b750da8b2abf5a5c130f6aed7cd31afad2715ac9c7376ee3e3234ffcd24ea331c88ae82c8387598ca9d0d87eca4a1cc9d19df408b809db55bc31eb158a391b1dcd787c601438c30b2ef2affab621eb0e9bf83655b0f6b517088c0a1b4eed9136971cf987f50ae3b07d86e142fd0997ab78953a72611a85277ecc86e3da8c54a057e7ac962ad494b3d0d3ab8a4c9a477ea754c1b73e31c6384506d0696d23a5d08a1fbf886a3e2a8a4a1eddfdf57781fd0c9fbce6bebc06f1945e48e9953f03f9845b9245eac22320e5764e7ec0c5997141289c3375a57f1963e68fa1e2d022941ba477e23f130565282c2916edf6d0d95588aaa6373289ddb4848d3d52b44d6ed22e6d13fa5e2250233f1e08fe387c42d572f4bdbced6afbb5f56b09750b3244c5cecdb385b1d27f4b67bcc98f281ba9771936b71198bb2763599fc9477999b54ef2fc9dfc67ad4693c71de0578b508b3a932fd0f04e3d771c2740a95eaecac6d83e67fc2110e19681d30591ac66089123ee3f579a824680f8e9f0a4ce8de5b3131054ce9078808dfa2fa32fd1f2bf7e64073360e96c45e178e30a1d543ef75a6111e2e9c0cf830fb8de773350b9c8c10509ba4bca42742bcb0fde799dd070808f9f50e675c13d7684933fab18804f6a0ef7e98e7c0bf40f2f69464daf4d2984850f818301c3d7e9b48c01b0083370f163b3b84ca76dd2a633c1fbfe047e353b35632ff0eec91930ec21e9b36d2e2a824b3ae19897107c68da11e18bd142eac168d086e7165e8a1c9a583ba64e1bdb60113aa27cecaf2777a50b344f371d30c6072fd39f00e54eef7755df298d85c3dd07cba46ec0d42e2e9cc8b8ebcc13757cb5b410ea7c29bc173b1e80b0b17b935a10cca60bdc43bf577ae094ae09ce77c3213943844c28ba8987c4570822ce1a74029e526ff3ae72137267da8c00bd08051651661c5cee2b6d81a10145ea5ce21a0343bcb8fe9147412d5ba136ef8d152e6bdbaea91ce401c449ce08c26856c02ebb1fe2fecdabc1a8e26427c37e1fadce962efd2f971de6f78b5203c6d31fcdf1505004aa8eeaa4235d64e93511e8fc43b2bc39bdc2cf97c348d08c3940efe1d153fb995705a508b9fdce3e95db38b7b5452b8de35bef41356067c83cebafbd0483837e477bce09aa15a7fc46e595ce2f19094de92fa41c70b9570e7e3f3a0204b2c48fc0458c91b5483eed23ed7d981090f88523546bb8a0d5c9813859eecb5f7c2a9804fccededd330a2db2b69901f37fed9c2913496696c1156f769f530b2014d5c2aaac6cc5fa6e6b13c619d8b9792bbd1d393f0507e7b2b2ebc0be1c9815e41d9cb7ddd36caf9f24581bff6d51c804856cd70b10827b8983f156d9d3617348bfe4ce2f5c258678f17b2b4fbcd5fdcee436d4e49cb68eff4225eab0af06d44b85b28505c7d01a762c76bd28a9fac2ca643bc0af69c1a49b4810a5d3f51ba0da64990138edd4fd63d5d6a9356c8191200ea9dc1acef5a0f096367787a5de44f6cf65b93318cb4423fbc22b48cc7ba061afd5bc09e5a5a356de9d72d70f1104bb65b14c95a2e505a4ba8a19bd9abbf0d0602460c1f3d6fda74e8f0e386d468381052eace19ffe9538fe1364ccbac1b5f317869db32533967419b889e7e8d11c675907179b9ae2c283bd933e95b6844d6d422de85c3807d407a45621b72252de57cb1d67357afbd3c6570f94b0c0e9b014165cadc213826b2e48bb56d9d0c0660a43b2e8a6ab995928dbb4cc4ce275698b1f66c5fbb861f3dbf4767ece5b38f5876bd46fafba5df375dfceec981d63a33fd9bbf5b68b330ea5f109aefd3765168de61762a2fbd898b4f489181baf00350c6c5709eac76da318427aaf260c18675c5c4523b320ac6734b78ac192e02f088a7617c14a3f5cedef370376650c0fab40d7a5a522cf235e67b6a35a5a9c4aba28cf39f2ae5ed3ae79daecbecf67437788019b5c3449683ae7e9d1278142ae41d6b93f25471b740c5f2ae7c07dc505a8de4156180fc68d8ca9bc7b4516955872ed5ae1e6b5ee0e8a2d9b0a0f4ce0891219489e266979e00207893fa08c237c3cf009f12dbb807bb73f1f9d4f2bc467b505fcf44f0f1ce5bbd49e6355002796f1fe4977d72035043aea7256ecd446ea0ac834a2e9ec8c76139cf76b4de47adba9ff4fcf58d0322d657dc465d4db87700410ea87cd4c38b5cc0a1bdd299f2ea6b82a4a5f83e06ddb51c3411fc9ceb075f48ba71da7d7f20920222424cd1b0d1faaf2bdaa770072cf9f236df4cc8157bde198e911e66fd560e7551789bdb73a14cf49e186e499cba10f2edf7ca276144f38a0f20b18d7ca04b4744d6536b0d7f78cd1d126bfcd0a8c4f1d48a63c50368d722a01d1cf4fa4e003cf1939a781dd9f46994600c30e85c7ec07adf9bfde39de33be78ba5b3fc393c32c8cfa8554b4c474db3e9be2ebfc75125881715495e1baafd4c43378f9f829f8a25c55604ffa904f3afa7f5f17dfce3fedb7023d61a43961197ad50b57dfcf5e82c73cf7e43d4ee47a7c11c243ffac9dc87d613866abf89884cab212b0598b5dac751e2d578dfb6d902f201757394c4613c2fbfb2acda7c5cf757895476811a19be20a086e15e5c975db68c284998be026404caa902a047969089e8daa9176ee3e53aa1553184c3fece799b0363d38f5b0f3ace31feecc7d72a6acfff94594870c97c10e9a2cbd85a3ed1ea77e6aaf54d50829d28e60bfd22e45b2a5c0e3af2ddcce71213b7ecfe1f64eae6ea83f4c3805a3ed4acb5df4affcf538989337ad2b5c65b9cf7f0c3b4bb4599f0690873b783d7a7fe78d5843b02d13c46613882de40ead081843dbfcc8b4567d0aaf2e025d1a4e5f4244bb8655856c3169edcff1ae10a0a80a045b7847b111a707e8ad2188fc8ff4873eec03227dea3f47a175a432aafe2acd5b30a6bdb1ba9c8d58d5f439723ac14a1061682c601bc1bac423b0a7157fabbc7541fec33a843c56fd1cdfea435f2df52d1bb262b945a87d62dfc4ce00572acd8be916ba5c6f20d19e6bbcdd7be6f0cb1d92b085b7eef84a0d1aa82d2899a68048db940c3ee0dcf8afba522fd17c8f70697e138fd3c6110ea1b60c49928f8218e03f5ec0b707817f4b3d56072473b288a177803437a7857d56b426a108f6c469c8122209fd1daaa6ba7df97eebd68d756c3e6511e5f3ad72d4836c4c8d1a64931c9208f744756361507a94926e7f2be615c83b0711afca1934ca6c176415e45bdbd6b5471a348510c94d45249e4e490852338c5cb7ea9f85c50373c86d6b9d01943d4b70c2eee407a346632071824a132c834ed826f5961c3691631a406da60a7957dfe1342f78adb8a0d708c391db6e93ed31137e9c3b27e155a1d7d4bfbbbffe167dfb02ec9963de9cc58aa32190f7b2e58e8c3a99299153f92ea3f030a5c173f55c15c25a4f489cb1367b9f8d0c31017b95eb3b6e6a048d2865066c1257176d3b0decddfb3fde2fee20215ce913f7839d4ddb0ad958e231fe85efee8fc73109163354e447f730c4503edc8e9707776d4df5ddb2e118d33e728131d8e10822bd0e33be11a7938f2565500c7f56ef5733c68271a80c8006c5e9257243f8120e1636c1b49bc54bf8ac2f82d21f04830d00524078c823ca8e64e031697d2bd718107c380b1d4d75b997ca5bb006c07e402c05fdf72a2a80b07105b551d1b8ab165c9211b3df5ad4a23d226e56a7141794e4da75759c233b1374ddf0d77ea2c576f3f949b496bf0f24179d5a5b91b5c54253f83a6269d77d6942ec98293a66042a3b5085a5ecb02820f23145567bcec6b2989f46e904f5a889dc5ca489701000894018303677a1e88d2c65fe85145db99462a0f2307c83a3f211abd33488a4f9bac7074ada1d42cb62da6dd0d2850e1d54fce1bd5b9fd73bc6a4b3cd49f4fc139057e3dbd9409ceb8364f7712fa7e4680e12aecd17534b420656392397ea984f146d3f5a10b609f37ac439948510262c83e83ec0df4eb56bbaa8b0d466b08780a01b9108bed7af5c107c7c520021cbaa1756865b2aa5a81762f35468403edda6594612b86e53baccb0d692e87f5ae3391de45eeac2eb2e2a11727d73ce12c5eca47d1455a8df38836e3d8c397bbdbc9183d628c4c8233b938d95a203cb35b30ccc1af0b3e1fdf0a7bf0623992ee689b9534bb1a512b0615da9e43ffa8da14c61da10f3c4a8286f3e221f280de4a1640e31ff29fe14aeeab6a4b6e7b45e846436693546c534280f3bf2cb97164d7ec0d6eeb661c0715b1a1b68b81c7aa8be3441653351c756e65cff3e7b396369c0dbe909d68230a70e7d2d6f8a3e588cb024a8e5df97a342bc28b9d475dd9170984adf1a17c50468c8f95d16f3a69bae285e69a264de2692423afc7feb4f4962bba9e73ad9d07cd60ef7ea7f81692b3215211dea85dae999f860acdbc877eb868ce58934bffd411968f466f6568ffd11880731f074554e76b44f22dd30c70d913b83005898e838af42b4f3996cb4afb82fcf364d5280eb8c0dc322a9bb94225e84dc6dbeabbe735a54922fd8266f53261b9e9f26dac57d4ad9543ddb3d312edcc524cad45b7c8b72c8a107083cc6f656a2717903a244edcd8b0ad6836d45ceb9a4af1d524f14a2e152dfdd1bda710809ff0498c8cb5b89a5ca90a4a2e5f565d290aeef1611230e872af956a67a26674a809beb073bac28a78de3499066624e45794bb8f703d28bf0dea1dfc0b87a9f28b5be6e2e18339e38d1fcff810ee334a799de1274a09cbbd95038b4dd7b18f58dc8485132211145e3cd7a11fbfc7666fce1e10163ba4e18d1e95e8918cba6257688c2e448082d5e486af51f79d0e177256c8d3d60346466e03a880c22d94425f18522148b64eccb3a8c5e32e80806c7642423b3b569262f18f984a177c01537696ac2bb8a30a002a9ffe7ddbfd6962c2422ae3cb965ff8910f347a9e7a7417bb6e765b79fcf794ba90fc5b8b8374cb60e0f0cba16782d3944022539b181604b210d3f115b440af336a5ce28ac4d77399f55523deae070f050334b271fd2a83955743d4972a9ad435f74d9d299947efa195f147482ff628347784199bcd1b9975a957460b9ae7d04d8d584de243acff6d70e6ab9c30f01950291f306f22d22cddcc2d9dbb044d9c92cf04aac89d4ffdb78f3c2f4c5fc9a282b60754724f73ea771cfd19755bf29ad4bac4aae54643d2f16472b54bea4c7d0decb6eaef2061628fc0f00c3bae655a7e527fe4f6602bb485c63137a5b1bd2a914db52c43b5f5573ad313a7f4eaa091a78cf3ac1d283018132d1ddf3cb357d3891473159bfd854e7edebc377ef8a9fe9ba7127c3f9a21a39b6c52b63c344a34e7a1f4f2215d31e3c6b7c38be8d559704a3c5df60bf214ba5b749db01b5b4ee35490fa265614d19edda610fdfcb28ddd4f18f05e89c18cee6042a00b9a7a62b5c6eed682c67d27ed03a64091ef473205fb3e791a06c39b246e214f3616fe3cf1922c0abe7c76f0d5f04212b4e569d66de73f05587dfd5ddc0d0a6d0ee837e4390d96493a6739e75e69356a780b99fd889d5d8a467a88482c8ebde3c158a1151947feba96d20c20d02b51deb837086899b568069c9933b154994ead3f5a60610d1017a20c684c50db3d4c04c2c633a6ac206267bb9f35bbff2becc1df7a1c193e81dedd6a2d46af6a10a71454086c77e39470f0ed45ce9363f4c8f07f59c8b0928e8e58700f7692ac95db7ec4f509499c1984f2e330a1cf2b3e97589226a77094114737e440a1a4e54bc4106ef80ebfe075808baaa83b8deffa453ef334afa615536a4dffe0c7da14228c78b02803217a154050a9988c733e48e3a22d961327a23cc35d8b810b09a4cd973262f4fb1f224a20f9af4ad2e83a9f0bfe94c51602ce9f5aafff3641210eecc39262928d2a3ecf5460386854ef0959ab4c9ef56b8010d9cef96e4fcebecc87d252d85e08d9e2ac71aca7f961307d30f89e93f103757ad93a3d4796c2b0259a3a2f37563ee16c67097bfe89d2fce9850564e1727f9bfaca6ce12955b928292137357a558ae28d18cdcc7847f4d8c483333cefaa705beaf5ef27be04d50d6e77edb39c89459acb94d701f3cccc70314b829beb7dfb741008ca9320be38649f34a1649e27af061c7154a7695c586df18218cd9cae29c6ad1ee561951f84559e5d234a60ce42dd6db132b965d74e02750f86d9cc63c50a804c7365faea09ea9b2dde36adeb622a22903587eefaceed66865afae27788ef723ea17f597e373d5035f2744746a3f7d7a86b12a2264bf767011e97ab71b748dd3fe96931bfd2666b254a07f02fe6797ced49bd440e7fb6f50e61ec98ce5fb748a4f51196db42e09f5c7f0ad640c11c047b63922a61ef671d5299f7ce6adf7127572eb2a5a05a857ebd7c0ff89f398a2432660347ac9e92e12127a841ac6594960cdad3aa6a492688c62ac92938d0f325bf4dd837a30aebd2f8a0a3326b054d0b1b953bd152465678916db76ee2ff9475f60049a2a7b36cc66efe1548ac223297289ce334ac3fda0f6fb6e9b18b4acbc57b220325a402c86e2f0d4d85eae6e9968536e064923f734ca1fca2f7d85a2df7abdaf89c890b7fc9a11a25f1141a5ca4009d09404629e11cdd99603f6461638b914ef4904879a41bd4c81c2edccc0f0b63e797641c4052a557d0a8f9f1412ca9dd91196f21cc0f031ced0b7b653ba82cf1dd1db87d7e5438ba0a8b01d4bfd862c4708af5344813ed9196b7a1266989549de7d3eae346f9347171fb1c4d75010c5b3bca2761330ecc74bd6ba26c10c026380c4d4bdb53300237a9db463ba008aa9f351d93254ef8a091032c4d4bd47c2513f0df9dae048f0fdba097ee306d4da995adeb1f75a5fa9e772497b5ecf93bb6fc2b1e30677aa4f4defaf96cbe9b2cc5f38332e1fb913024c088d7513f883c3ba12ce25982cdb172a7287b30e374398d680077dc85755a9dbb556308948596b5298a25dc8b83cdd1b9d1815f3a675ec01a330480e21d07eace2587a2331ea5f8b0f2fb992e9e8ddf6141697c11c876c9795e70908ff3edb5a32a5d8c59f2db6275b9ab5055a0b52cb24434c97e5bafdc5bb8d0d8b1fced7ce8ad08b8a746458386ec295316f1a27657e5f47e84316513683dbe2aafe0fec609105497bd8d950a8625c5be32d3145200aff665b04b54091f57a87a85ad6b06469ccbbb2a4cb33884a7e742d10ec5caee32adace34fab422a3fe269d901904e07a2793822f9021e47954cb6e3de27e2be27db8cf9f4847bb55afec3f639e36cc324e186735731dcafdf8500e31e93dda0120a9e1f1f105ac0d6369434c5a6a528ee2046d802d66ac641f999ee8615ea37ebcba837af7b70a8c0f918d600d135c49c0497c2e93219ff73cf6fcd8f508a80c3a5c0df82f4b359a6566340556304d89578ef3e2175a6a8d7e325ca0b6ab7627c993b3d20e5ecbe2b2b2323d174d4180ebdc25d5b3562d5cae9813406385a25d52c1291f41ec460429c8931154dd34d83ea72913ebf16106b0839e970a6ada2fdc3496266ff008faee5979ca7c608ba9978c2a7e6800ddd548e99b148577763bfad2d7da94f4cb33e3b61184d2a7f0df6a9bd590e2ab898924588233f9972c2f2d4ac08c5a14a909e54037d5581c8ff131b5a43ed34c023a1ab502247e205cc88d25fbf81a7941550abd7414b57393cd0335e0872ce80c06c08e21e20c4357f059ed7c39c7849bca75b9653834d4bbafd4f6defec052fc1195e3b4fdfdbe341bd4f327cd2148f8aaf517f965ff0b72a57bcedd8d6c39f82d004e18d8449cc5e2c7f2575166e4559397c262d07406f88f60b40f60ccfc6e62c63b60e220837af10f0d498e59e5bb86a582a9caae4d7fb72d20e2ee5b4548f338367bb9be8d99fccdb06a656cc511ba15f57aafd4e6a73b987ff7ef704663875df1566ab731a205a1e674f6180c15d55d828a1e59f183d8adfda5df2f3b0977494e30bc63af8c792ab537cd758c1eeee1c31d609654e4b30a1a97dbe97028212cfb0a169dc90c060555b5f368c7828ab04534ae3790a28d80f79ab1ac3659390c4251572a2d93b72babedfe6e688b164c16560b6a4af656053947e20133db98874ce7aa052030e6c1cfce4a05faff0de923e355617516317a6ad5b5864d48e4a09316301deab17de11444309a6a24a4a0d4551f0717acad32c94468af4ac20bb46db65e84aae66990a9bdf7a7aa92a108c24595c2715f2632192c1b90dd9ee8349db02d7de3940fa8187e2f410645d3b3b24cb501279e0c8f74e11daa461fc2a6f21ce52f8027266c7606fa5346392d725cc2e984b7ec92114bbe2eba0ca8e6bfe1669051445c121700fcc02d97aa6f5a0a8dd1bb7aefe463dc52a32ff5e02d3bb5902f2950e4bcb849cdcfe9892795d06cc7aa9fb1204eb6079bbe05f3c017f6ea32221c240b892cfc8b39ff0e7db2423c0a68627093a0edb118f0fc40bb30fbb9773375d1464aaf78032ae02a6032e364589d3bd0e1ba41a869c41b787b72efbb8e17f13dd92287f558b8cc2d6b97c35e3c0a0b4ba099956dc7aad66e020b4aba2e4071ff68635180e6a605d4ac7c2341fa9bcfe5ef5baf9e2ab3bbad923a88dd7acd281e27adb383003e9193632801fd88ed387bb91a2cfc6761005b1efcf95cc2f9d7098173c317105757f2640e2afc27d0918a118e444a10c100179973cabb3152df6d6c24ac07ff8250b4bb0ccd3deecb53ef6a37ff6c218a2ae51b3e14737ee09f0b8a4da3a927d1be126fe3fe92e5043e6982c136540d9afe755baed70ffe2a9cf5d7b9f880d458e573ef1119aa5a959222f097836862d080a656bc3354df39f469a25c7d3ec53d4a2d0d45f60d65f5c32a1927875de8ad7078feada7088cb8bdfe202ac857bba78a0560dce4c4e16796a0f7f3462cd8fa4525d6bc8243e72a99ecc6d7e5df7bab027aaefac980b2f91a0dfca4b87cb1e46d699182ed8961ca539e94872abd2a941304d59f3f2a2073a878327ba6043a1c1689f346815fa57d8dfadd1612f1f330b2df1db4aa79fb262ca40b499eab93c25eb57ab5dfd32435b444437aba6e2117abc85834ef3ad79660c3c4d3a29ca42ab6e4037ab093d73eefcc7482cdffd3890be68eeb7da10354785156c9495790aa759ce685f04f9146cc0f5eb59fac6ce2d48a4bf1d4a94f8de053810a840e222782eb02e97706918f3b31f9e711a2dd87155c0f4a1f4a019f6023e6dee0302c8719b61811f159db9e62303b024c4a1fa6133d4330a1e5b33d6491c8a7778bd12c45e5c8c453992a49f5bf5581e03a8b4f8f79556696ed67682dcedf4f82c4aa0b8a7232aa1107e53d3d54e3ca386494cb0888b9d82fd46d863281ccab54ae84237052562d16197d585bebb8888ada7322717e49e400c14bf981c61e35a2e58315bce8246a274747d894420eff68736b42e33ad2c2e6986e04a254e735cb5d93e11e0ef2460c54c337e88e36aec1c6d220e5feb90633c731abc4846f26bfc8ce9f03bba78126576d7a76ab2a08a1e69fc6a2c58e443fd9408ed109ca1fc06ee81d37d6865976853127c5ef4b47debe485fe0c8086f3c751b4c64379d1125713ef861086a6f33b46ea3a109cf0838f7da35ac54f48cafb4ae30fcf47e95e15ac66ff48532db45c89e59939a6ccbe08d8668ce4fc0e29150a0d8df852ec27ecf41e1b543fb601e0c433608d66da3c1acdc36276bcf672405889c5036985ee4ac7904d973c148df31e16e201f208a8373144b7e93a0adecf5c77167545e63263fa70e25df3a7b7fa73a52c38903cda1d4eb2077a629fdfac88261bd392f40370c904dff250a17248fdcbb48e9d8fc8e9fd30450621be385616dac7b6fe5acf1b810d754277fc8962c5d2f5d4a285d5738b3800d36189105cf1f3edc3f3aa214f4ad0ee80cb1f995249e377f18a3fef0380ba7ae36cb09f707f11f2d4f7cffff866f4115dcee7cc610ee60f3ac484da570ec0a928ede78d7315307579a5f48d6d667004dd8229005d3a116f12752b3ed8f9b3f0bab6563498554d46c7c6e9786bac1f1a95f468e3857750e3434a8b90f66b01f90de97b96ce7452d8850d4f320b0b6ab95439c205858c1dd4aeaa29048b228cf19688c3ab6a47293a4df1a5c1ef445cd3521a7fd4722e393f714590212038845a5255ece7483c11a7f51a36cf4ada3416b27c0c457f598174a28afece9b17dcd37eabab6bc722d93025522328df8f388e27717886396f8035d95f0c07d1a7ed96b16ab6032b5ddb234cd870cc9b4c7734b6c7978c6ac0a7f77e1e8b263d44546783d19db5f3806ffd9f229f412764f6eb936954ce324b93bf9e9d8b83ccc52ba4c686508afce14a7f1333a2282469f9b958add21e2a5af5e3584c8120cabb2163a4f8cf64e52e1e7a0d5c000b04d8480978fc14ffacd3860db99fd0b40d24490a832a5573f3d2b23b536efd0340208cf9125be2fdaea8f890bc909324a801c17292e97a194037235cb7c19ffa222bffedb38fce0f854aaa9b54e4ebef6a1f0f8e964a27a2adec67cf87867bb0e15d64e71d158be4711e7765b2d1ce7134a7d8ee376371b7c58f758bd720667eea1d87261a1bdb04386b773957e9d3fe855e4fe3f2f1c55ce1d7e90f90e973d6b8dd0f0d824dff1e7f90015befd2e18e7bb1171d8b0c0acd294f5120a49d6ba4bddd7d1564220a4dd49dba3acfec1e4f330ae7bceff37b5135a5eabb98b7a398f0552aab5152f4a4d2a074b7abf1f23ab17e8504e6b7506c3983dfe04209ea88231b7d18714afa581a3d1051c1ee1f87d5447d878e0e4084101e70030eae38c88646e1f8c9abdddd9eeb4982b16e586808b09e8387aabf0904985e12190c7f46962ee89ced6528f3a32f1cc2418947ed3abcf4b617a7cbc0d99f32d88283320c9ac42b8df71c2cfaca0244425f1f16d3f416abea233485c43fd3452d77005314ae1c2a06d79d74fc22f1581a27e37e1da90936a5e9fb450b96b9966a3c19ae5c1dbb4a99f2271fbe99c303ca011d2c564d324542738ef98c8f2eaa57a8eee9df5d69dcfbae5719041bda53e35d46c87c2b6b0eefc2ca02fcd70dc0d3c628496ac6e5ce3cc683bea9fdea2e8c606064dba72fde847a82ca00a80d299664983ff09b3338d8c7008847b713e94c01d281e0bdd5b6d9bed465ee9ddc1b65e2ae5c8b425540332cfe1514aa10ec907633eca18276e6c7c253ca80727440edf6b22100a716b63f2c9a0808ae2ec2689c302b9a888dea5dc20673991b660eebfc8d9180fe86887e0f938e7dd7918e92bd5ed5c9403925ff2ab2f8d4dc75c9829b769028807510520e5fc6622cbf2c26bd6be3377214851384fcfe56ee006680736a6610c0d97b0b7b42c0be3a9e8eb76c3d4557feb3d29b43182af380480b05cb5bf468a6e9b17b48fc8ce1bcc3d75ea925df486711827396896e4f1791f28464d2232a31dbffba9b5f99d3b6bf4714d563bac4f71beb674c3c70b9c35cd6be32833c6b5a0e7beafe4f28f7765023733a9b124ac5b55f591f61c0119b83e9cb57393d91c25befe0e4e868d6939ef09bfb7eed17a8c3dbfadcfca5f13d09a1a4977440bc353c5f2c07f46cdb172a980cad170311ebdda9a796353b8a2f5fcf31911f363efd61b533cc6b59d096a8b8dfa07187133530abe2c78222b1aea1a0ab28eda2b0f0c6efb132cb6a48ab9eed8789258f7f3214b4259df5a5e5d7fc9947d4543c6f3d5d4d9d8f1b8dab62de351d94d09b8040efa18ae03bd0f8759b2e6b076c7620a056b78f2e3e0061edbf13aae245a13f0fbba72b2a71e7a8ab2788926026037fb30bfac2d28899d2dbd979072b3c3ea5117c31ea7ac1432a0b6ce3827cabfdd77544465fd836faddc3ef2732cfbe3984a12a5560186c50d0cfcc7c8ff865456af344d7f9e86e51aa201ca81c3226ff29064bd09303d21d2566f565a7970bd7c5d529f0a29ebe47919a146b828129ad7ab619440f555d648fd22df779ad26614ec329b22828710158a1f277f68a807f08963d2d6936692d3bf087297ac7b3709719e25672ae3ec57e2213a2c5024a3ce4bcd854c1bfd8928524e38d353f895c94282cc2c1a53dfd81e005f28888806e1d742493e2e308cb290783167e9014d286a6b37af2c3e94dfa39ed23fa6bd319337383748ed027e774c5974be2af9524c8dd0003a886e41ff613805a1636f35589372fc2bf67ddbe82aac26d5d9fca16ee096ddb46b406ad2cb4ce1709c5ec868e9a41514db51544131d4d7a019a339ecae9bca6a653f3e2a34695f60191cba7bba87594e5dcc316a3c795983f604efc0e30cca71ed5f9e5c77fedd5cad4d5e8a6e0e38a5d50b2d6d600f5ff74733732dfbc2a2855c4c3f2466c1363954037076a6b9e2fd20cfa888b870508e3f8621c0b152228db0522f96dd9b952608239b461283d39655ff8b543f10a308b9e33a0b8555b5d7b122cdea431560b357c5b291ff9cc28c602ceba4cc7081bc184e42d6895e421232528f772a596edd16f1c4df6a396032192728a1940a6acb440113b23461392924b6ff688337013f217b95d077a85ab3785b85b973087f4cbc01f2bd83acbf12ab1be844ab01f97192fe25bcb74097d401aa7d0e46f0961558540245fc6e63943d15c7b8f6cf0d8cf144ebdcc961854d559e7cf5bcea30a1764b0f89284efc291d51d2013e67aa4a2327036205d1b0ff95a148048cbfba0f30f2429bc049297d34ca8c7849f5e8160f42e0cee9e7eeeffb7a2e6ea471d2cd9ba20936244a5725722f52654d737a141f117e0f30dc76d80bf4a88b44d7c79e05ed09c1ef7292a2528637aa72c5a72586925a4de647c3c3b7c44ab528581ddf2e60022d10205156bb9530260c128a1268a29e0f8850dfa437868435d62ac5f87a66b9c19ef8ca38f583ba44da59a64a202f705efc4ec90fe5238e0b5c7eae02f881f2d3d57e547254d6261c5d6f04e71b055f5ba83e237a5a2af6622ade741e262e06ee99f2fc7c95ce5c0cd01da491eede562fee04b34d32eddcf45702316b528fda26a7bd59aed3fd3ad0aba4bd85814e40b4ad4cba8707e1e736d40e09caea9fa68181e6607273d3f8ba1b23b12e49da49acd4fcaeb63fe9f8a19bac0b1a1d8560a80053fb66523c593b62921df892f2bca42f3e46d0d24320fee835e49f247fd0a72c418ed6b73fac2a2ab9817b7b48d312dbb883c120d4054753848d81f5fb202f2132c55bc3540f6a1f56420446b2accd6b8665270423694dd5e36ddb2ff5b0c9f5b9ef1dba13284b85b608e8f1c85dc9a615bde5f49cf89a80bac00200f45ace88643cb38b2d74d03665a9c94b97d9b8cb0d8437dfcce66eb79ec0c2f1a0335970e7ff38ffefbf5c5c5c405c62a60d998fb09ada175afd7cfb45ffd67173475dc2b8c4c6d004609cd3155b07fca0447c1c9c451f4e10fb78676ecc269faca246e80d16eb9dbb2b9544922edcffb35bf94483124223ade197f5fb7976ed9321736f1ec54161ebded3336548fa6ba46fa3ef16453bfc28344cb3253cb67b996beadaf40cbd47249ff741f81d4198fd32f430fe9d15349a13bc529c571c25c1680e6a85b9eb706d82f248c9a39c195a7f3b9ab0daa401ce1296827e601db90cbb9e46226da68c636ccb34233c0e7bcfdcce90aeabd76363656e015cc6992c1f97fca3ec0f4762d656eaaf9236f539419ee63402245eb2479b5d960a95a56da0709d52945ffea4413c90a6a709a9f82d3c53d07e7d125f0a21cc6fe63f8089a52e55f241fdd1307c499b37e89905afffb2cce3d3a1e071d73fe2d9f64b6b0567b1fc6b5b9f106c57e8eb34eb47da47fc0cc5c3348fb8c0770fc18c6ab32777b487717f61bad71b55b1fd0dfc4750b0026d84a827eeb7e31fc56a9fff56a1cf5a7f379e7fc747e3d20b306e3551e0672ba23b4235c3099eb0c0cfa41ac146fd0de8c9519beeb36785eb0b16e9829f8f10da6329d37b06aaaf1662c858e479d3d4ede1e3dcd6e29e0c89187b76080b8f41fce027562ac66bf58a0d6fcc1729fa9f92a75bb2965b502d8c027e7848c472e5416548ef68bb673bcb4a430ad2abc07cd12abf874d54de38a86eeb16865566310632faef97189486cfb4c58e3e4ce60b9aeb2d753b0dd56c7b42c6449174a979c8dfd5dac21f57150bbf660e1be6c0d8ab3192f79d0391c1e652081f6fff2da776b1fc6d154b42623a521113e7dc03541eb60e91edb90cd639be26be365b3801372ac944a9652850f0cf42e640f32b874567dd9eea1259f990b722414dc57e9d9da279a6f7199484d30f25643bcbcab73783693d0e09e779b524e8c9ce0869a97f0bd9fc67e92ad4a2521a8c19c5827e2fcc210ba244ef7ab1dfcda5b3c27584249160c2eab7ba776d4956e8fbeb06c05c49f6dbf00f25d213fe510c334f706e8aeffb7c366992c85c9f3ccae66c3beabe57ef42896622b592131098d443e24d189bd1192397fcb21be9a235ae2d5aa63b234c75e2590b8c18b7e05628bc711e4c735db27634ddbd7b0e4a503b0e4648a3dfab3b8de791ce279e48f71bcb8beb8af187ff37fcd1a60ac39eedcb4229aea00c1eea0c308864d961f8c4323921dc1827f1db9a8f4f44d0337c507260aca1f74db8d6975733f1ceadae11e1a19309d8b02a10b7564de8df7089c397da3efd51494f38a1649915448d1241cc73845b2424094c86096fab74ea17325891ccce0653ac011a5ae6ed5116a47859affe6b7ec04bbf12fca89ce7cade3df40d7197b330963411a0d76a3298e58fc9421edb000cbd960f7be091c6b316d1be9d121515a4c13bde2bc0fab0854194102fd3d196eedd92cdd987054e633d91fd2e0c3aec7cdaafad28eaa339e755b29f72fe7ab3aeea57a7b73acf70a5a73c8a31834c95903da764dfa0d5978057a281cd0e546ceb6019f5db5ace823e3959c7da73553aca39972f078c28d2dbab98988c6f1f5d272a0e6473264028e73a5ee889ac3dce289a8f52b2edccbea459f4a81d97642ec79b56ad8e04a304246a6eb403c8081bfef6ed88684d61cb5e4af7d94eb65f120df57b059e99eed0b442540fa552a5f7e95bbc89533453025de0018b5cbba38a372002b1277c150ea33e3770a590570112ce56988d151e77a6b282a106e52ddaf1abf5c1171376f56488f86e9b1234a138d23f2e177c3ddf7ca0bc0561d8e5f483da6e07a7a6af3643d524e135ca33441a0babf33d3d87dcb157954ea757d3c18fadf17ce79a91006eb61971053dd674fadc09a1c236a29bfe8cb4cbeb8f0e6dea45ff9fc74298fb41f9f5f496f7450ec680fbb3163b27613dc39421ab21a233b90a41ae041c04a545317d1472fd45ff3a66f38cab633e14cc19572231b0d3acf827c29501eb98ad5f3cfbb7be68981351af0db1d6a83084efe030696ba0492067391c3731515de2c8cd6d533f8fb73b6db4b26b6f47e8b238bd4efbac55718fdffdc3b2f0e7e98bafc46c47a7112c50995d38f6097a58f563680eba90ed9e96286946259f1fdf257ec15430930de5cfe4b5e49e5d5cee2f474ba16caf0929f7bb6cbe20f5610a18a8e178b8e4b74fae08854b0c00fd5959ec97982345b3f4543e7dabe546be507df4aab242da1537d88da44e6dce693b4926113ba309b22e3bac26d877378f35783ce7325396019779347040f1e1ef74f7b1b26cae1d9577c6fafe213e37b9d1a735c140bef92d7fe0f0c295cfa31ccab4b3205c8e3eecb7a4c064dee809a2ef36cc00547d4888e0f118a3881a33a2faf0dff5489ff13f370ef46314a56ac44cd789de4a3847cb49a063efb7084ded934ce63a45c46b4633da57ddbd58101c440dd48cac8efdc6eb73d153543bf819568d7d491fa8d6437df746dc063866ff4b7d082e31272d7edf8b443c1d927416020e62e4eed694ee0bea3235c91c2cb341b009963b1c85dca27a686b38ba30f5ea02652e1a00033be311a5f739022449150e619bb457aaed94c5a95a032cab4b7d7c5867425d1d3dd3e174f167a1eb89983e3d490e96b422579753feb58814e3d5448501391752e1dfe93758981cf2f7787e96e4426a5bd2f31e44dc58aa5c4565cd60bf8165a8c4fb05c3ebe45bd5bb5e96f66fd10e4605ce4e183f1159c92a4732d0205201a4c5a8055ef986043e9b81710c5863b0c804752f78de4ae865ddea828ff424ed732269cfb3f1766f93df601d135518c6b03e00b7b8ff508229bfead1bea4466e75650b9ab143ca4de95565d05b7beca2bc0d273697ba0c87e1dd28089242e238e12f8c16de02ac67b087cd8fff7024d9f992b0a4b900978542f308cb7381a54d9b8a929ccc9a6f423cf8f28aa757b2d16fca1201612a6a4a59fbba3c92d6c3d78bdbefa8cc51b4c95750041592598f277988e85915ec7e8c6b006e5f8965ef190ae004cbcd0441c2ed36d30bec93321575aa700f456ed6303e91c53edb034d542efb8bbd5536ed5ffe4eeec1c3e92b922887aba64c0af3fa1bdca70ab0741c2b85c0109f5da0d63e8d9ca5bd5700f5e2dc871b2711c9afd393ed40d46799c54faead3dadd6c1e903ae45bf6a48e7b7ceec2160e439881f70d9e1611b397e7ecf4a53022d4ffb8d01c3698b9b5cc948886f8e4359b1a6ef4f1ae42b41f62d61fbaf229c38a534c215aac9fb90c5de1f82d41e23e2353052ad159a7cb61bc7d826e53eb14d7ff1298c23f2cba58ecf7e061ab0ee3c6a3286f4e6f431294f535c2bd41bc1981b240b8d97832c0fc5d33dd91c481a3e0802fd704cc0ed50439cb9f33c9b3080a5a912c440806ae232831234c8e0dcaf58fb2ff5173af38176ad1fd7aacca35ac04feaf7c05d97dba0a5315c1fe8a58022b80acf415b917582510e48613187de324b0fc08035cdd806fa3c9535a55deb4c7f1d247c65cd0e31a151b03a3412ac2a59f54f2489a4907326a59271a99d622adc5faf6bcb642c41994f68b6eb1fb3a5b8a5da07c256463496f7f9408311b82521a4c5812cdce5bfb303c9e407fcaae06dd7fdd50d775b2dcf64c4da35ca369f04f4c5781530a38addcb2d7d214809e6c9dcb81deed4e12683ead3e3e3605329d345275eef66c71190102f7851fa4711011594287d41eca78f4987edc1ef2a6b75b36299bf2d212ebbee8fe35d3bb48a62bacd79ad2a16dc8062903707bd41bc0935626d6a1a81e17b7d2171d590f1a0bc52d60bd1218a776e82fc68d25128ef4800721132e5bfecce3ca53ff8d50e7dc80a82c1320d412b758581e6f7aaa5c3feda3d60fb9a3c4f40befdc2d639142ab6979b547c3964685e24a3cc95aaac8f9b1a533cf8ca34cdbafe0ef33854bec101c328d1aa3edf701afbb4f8429ac9609f65a35f2d3f77488535fd56be961c5dc234768279972f3a35d617787587968af2a33612a159b92a493f7078d04287fe791957f373fcf2bd0565c374191d93cfe97068bd82f189f231517c37184ee299dcd35f836f0b9d2f0dc8c01dd3cdcf9cb619ededc321c0ff8f688f0e61f417de6033537a3709caf9aacf8f540901ea0157a25d57002c447b76101fa80910f424403eee5a16970bb9aa1d6d81ab789877d734f0ec00c9ca8ed37eca51fc33cd336f3f7702c61b8cf038a8bd368eac32dc760ff3b6520f0834b9d8fe82d1e992326d4f0c9beb49b6d85fe123074bb15abc3d3f024296d75d1689d4be69f5957244a72ccaa9adf9f6edb6bd4d0a54d2f077f775231cef280e35fb8b52f1a44c4c93866479004e2cc079af07621c528296a001ff6d27af7ee1f4f25889f069aa9bae60273354bf9d04ffedaebb7dfb9c71eb70e003134d5317fb283be3ab03db9ad991bd869bfa0bdb7283eaf04bf74d790cab0a137c6fd3ae7fd88b58e3e438a355e6cb630b781c056b60de0eae38078eb1672b166181907af1b8e5d06a995b6dbda73798d8b98db0ab06e5cafafa6bdd68fd7a1490ccd8e309e01a99c6e001475bc9f90e06e5f4aa2ddb8a63eb21811e4c444a35c99f49ce28317e19f855a17ae075f7a0597641ee6aa7d19371ab15cbfc28d187127a45b06199bc99ccf4455d4189be2b95af2c095237f4e30d929a5f06026cacc11255fa00a8236c62fe3c1974390b76f3e4a0bbd7899b89e4e7a50d76c2283c5434331b755312610e66ee8e79e6e03e09e7a5f5cba4c281ae403156323240cddc08f0b4020b0796cbad4111699e0d06b3a978fb749c7fa6d5f0c6a5778966535e79a11029b00a186b4a8b50c0b25769810aae0259d59fa14de0b31bfc6d4e238bbb39a1ebcb61f803317199e2afff8dbdc91523dda2b72f906d121f653d0d705f1cebfea3f146d52a81cddd40d03a63850a23780f5eb0924fdd49bb044922c009d5a085f50f739c20aed1291aeb2c44fc4f5531e9e902e3b5bbb3066371e95166bf34ab8a9a38f7f05c56990bb92f467cb3c555dcbd6e8310bb62eaef5d848a4d7689e8c9b0f6d806d7aea1e1b58c11ca6f24c0805ec483aa409c16efbff6319c06b7c69a4e06d6d2adf56e650ac30c15fa85a8d2f7bb243a4badaf6100efa0586f98fc5c325ed84eff50cdc79b75397a1972351dfd312bfc917948afb22e4243f46262ef70586d72be3685bdab5c4142f4f74f477dd00905f5927ee84f2535d14f8b2a5ef6e2b450310a374dffaf2f172e58b70eb10490b76d74f8f6d78695e789b5b2ede9323ce29a5e8d96c176a614ac1bc5c246e217ec8966be14f7c390921ad77ebfe03de48545aa949dea739df23ba9093e9e46ba5f3e19b8cb60ad9ab2a8c13fd53c9894852e7c2d99e207f208a62aa7591488fb3c458e0a59248f943b322210eb537a1626846bb3c617ce4ef72d58ecd2e3d552d7f41eb9811cdabff1e7a765fb1215e504b95af1affa912590d411fd9a68afc0d7c90690ebfd534ae91ab263ebe70fed9064d3bf8876d851d975e18ec3c63623648a3875468b7100a58892186a6e23606b13de26726e8042414e1b4e0ce666d6660f16064986f7534762d3c5d9cf7dd30dff7ed9c4ee1932e7451458b53555a9d8def20888e14aeeea1947bf3ddc99664f92903cf6d545dd78566bdf0afc3d878ae8afde5028680a1cbfc0703d02a4749fbc9fefdbdc94750e279ed71dce4b74e66882c9302e2423554d7f57cedb9e2b53c14e018c67d8f02aff651ef5665f8a1b0c829364e70c5ccce8b33ea8910b806c1ac28b9816a6372032c8186e4f23320e2b7f2ab816a4d2edb866eaccab45aa3cafe91e4cb684ddd68d4a1863edfbb97f74709513942c49f1bb440b3c33f27beaf7bc092df75c1dded982837bd4595b04ccc08cf45f8059da3a3f76960d59784516a8742656cd36e674c24b51345620ecfea70c6c0bfa92fb4b46d4614a918699dff94e4f6085ff9eb9f6496c94d1a7d989674c0909748406d0a032a739e816e5279c65c19819244ea7fa16bd5839a8bd246b142704449717c77128753364d84d8d171d8638729d6cd395a2d6d14a94603d960b8ecedbbb3f8edfec11879bacfdb0597e57e303ea4f224bee01f31d18fcb4ac962ed6774d6cdd814768c9aa8b083d09d1f3986153dbc5b68418aee983bbe123adc073ace7d212192794a26c4ca17f30832976baf39523d41cc8e012b38010e4b5867f35db08dc69d27306d87ab24205e3fbec39f550683b11bc28cec3dda2aa8e1fd8386be26e27eddf4921bab273cdd622681b04d27ca4046eb3d1f844394adae953aceb2b6a244e676c56f66d00a709c10f6661e1b9ff40827a72f2fbef79f8dc86532fcc11de909e9a74defb589353da96c2c44edf150f039948ab941f6d9950a70783fb7f82060d44736525f095dd96b04686868a1fdd9cc21fd76676447900f818e4755d25dc6a01153a6fcbf4df7bb99be21fb77262accac2a3b4625ae512e99523795121b23266f129b25eb0d8552a1c816c017bb9fba783e861f08f9e0283cc3b4b1f1ce00198afcc34fb72a8c0d93467326554b3d3e5b0ed4b1760bba408bdb42989b8bb00f753a57440cfae77146c195b97381638962212e1818e09f9387480504c5cf68d819e9135e5c3fad486bd20877e43892a25c49d84ea15d6c37101b44e984dd4ec8213f1eaae7bf8377d2eea3f955af20e7c985b6e4fe530d3795663ca58517739f71d9691faae6552133c08c417a7f8b257f98ba33855dc0697ecabdbb523f37fc9f4447db5e430852f83fe23f4f9488b82550ef09531007b9ccce8f675e5152cb47940db1f0319b6d7921ad9dbeaddaae6ac241c1317f476829aa1cf26422836074dcdd073928d98fa74c8f180cf4b7e7745d239476e82d65230d3c4a3a0125ac703fa96ecf52d2d447f3220ef5c5de64d03b8f8249b25bf4f75ae842d193e1ca8967e10bf726a2fe6950b889747718b29fb3a51ecb77ada809d85b1425aa9c13e4a61ff48177239bb8b183c0b1a71527025143c411110fc0103676bc37a4f97702204d1234d91f6a4b89c7dddb5c398d97347d7910ff3ecf2426d948e31aac29178b5ecc020fde0504a43e0288479b831814567f1f5f8ba616e046b529d43144b99799154714d063029888d32348ff434f3f98eff79bad93ba636dd2bfb67a7227ba7ea165f16404c32a071d5264d67043b9112f976dfea9a2d99dc2276467d1fff3864846bcd5a4386098683f0e8efb16d4f672013a2546b207d13441dc893203eeba8f9ebd1a96d24e295d49422c4bb6b3960014f6fbcfc4e4dae01783036e425905142628119d7e6eaa6719e74816ffebfef5571ce2b510a9a0f7c042dd9f0bde831fa40190198edf3d51f84dd5e5c4653e7d54a2dbc5e94905f500be7f0c5438219e9f6062ca22cad0f25619aa710bd57736a6b295e88872db3d22aca43133d05d4115148d565ca8f05e2b48138a4a2ffc9d1706a8d8661b624b1ce7499f4c3720d9d1eee5a1cc28631cdd2dbe5375e5867ead61457ff67fc1478f46729a6174c2d5dd5b2d0dbe18288fc454763b72b95593f2bfdfe35c981d4162853b9cf71ad3264023191b56e6fea930d409732efef0e9f7ae3addd48f356a450f3eceea1a7fe6d4f9e5ee3635c4fe5cc48c475a0a279d568e8265bc8f693b9090b3c19420417d2a361c8985799592d54c3ef08353a40d4ca7c07b6c2d52ea103655b4cd0df8ee9df6af87bcf437c755f2f1b21e6c542ffba02af010b5cea6748f4ab647b10c983a55bc808a3d631191e5f2a4202d700ee1367b995a572203cef81afc3dc7f961a76f5f3ff7ec7e4207316a064fed094e76d1b05c9fed99c4a774b98098bbaa760d4ee6db60f08f1016dea430e393ba8021f4383ec989b9970d4b903757a460af777eb75456e5e528eee51061deefc4f62d628dc2191359daf4eed89942a5af8297cc8f9a9be678a0cf5ac30bad1de80b0c8cbdc270396d7daff768c403470da7c2c678d5635788d742a1ef3f4e7d1a68a7ea77963dbfa787734f7d7c8ed8e697ec58530d7433403c0e70b7884e5b85c411aaebf93e84748be8d8a2d249e4b373caf2b681e9c1bf1736b63f553047509cf17166423c120a205c1301fa357bf338b516fb2025380bb84f4ab73ea08d3b105c9b1bee1760bde503f2ac6f25386c6bb459deb4f4d5bb74795ad5b1c9bf498d42db6e2d52a66669a0e0d81a8ffee0ad61835c8b28c2cebed82ef3086eda351e5e11aed8d71257782a13060b8865f158bc58631435dd8962cd286a5db7a9b3a3e417e7ec179cf0e41bb19ed2bc8327bfcdc62f1e18b6bd2adaa8d497b6cd71c996f3daf554a4465f250c97e9ce1005a12f3da038a2f784c0b9625b65b2236287cea322691445f0fec92afe8c7575543381214f92b9be44caa2ed0a6703eefac1bff58fa85743964bff7925d737bdcda5729a9e6a1c5c7e1675f7fd0de7f8f3bf100005f1be7f1342e637515ab53a9958ca1b22a9f5420a035a7ae8b1080996d09d5c2e2ab18d1165d343d206b5d5c9fe2885e10ff4907a2d29c2511b75565f426cd04dc3676141d85f2146d125f1f583b48937ba9d67cd2419250509518c36f2d8523eba677311172b91a9e9371e81167c510a3efa2c5a664dd9c2ef74fa75bfb16a837cd2627e9bc4b5cc561c403a4f7603b9726adfebd02e178bd3ce4c166fe5589c0b80b4443b822b4944bd387415b6502e6e32867f480b2b04b7ca525e76f1bb06f681bbbbc1d863da42978a59501e99e70c4c6995f23317cbb1dc9568e6898624144946df58d3febe728f8fab6351e7f8dc86eaecb9beb9914e6a8186ceea050b96e126fa91830cea61e23fcba11964647529f544772cd8a25d802b34d44248bc9d10ce8c2e26ca0ad6398ae9cb7e560ae68309ab5238326d016ab774dd2c5c4c17304bea304e15bf437be8eb2a055f1cd72ab9905a37150da18416eb6c915e898f4e67f92a0224c9233835a4fd9dc003d852c5512a2c2d3a49ce36a0d05efd4eece4fe2b94e7f698a0ed352e0cedff57d8444c86ce3ab94ecbbcbb1eafe0847c6e09b2691e1e872457aca5bd6aeab978de96874a56461a9ab3b13160b2d38d2fdd7c59909c87a47eacb7aae32a1528dcd70b0a0b526bdeb55b16adbb4df566551e4fb930df33cf6872efc2347acd7219e9a88f36df61f4abd14f95c6c88331bb160376c55bbfd12c0cc9819d0385c02a0541ffd63fd9947037a71f977c0a682247d4a6811b46deccd2d3980322d8eb0a5891c878f2c331eb5ae42e9e821779f4eff03bf7eac7a05a22838753035ae779291b78cf0780d0f9143a13433734ec03059aa02d691a136105a1bf6342ed89b3bd7d592af90c465df9f1d1dbe008d93704b38521c7ffbe701eb6175c738a36ac56c4533a5bd390dd8d0856842a4fd843778723127afa640e3b929b38c3dd91c5cabb012c2eb29a41468f4584234f401669b2b099c8a15c6bbfc3d0132d04949c07c3b372610541a307a90f78fe339c016f3530a49190e438c1a16f4d2b523d2342c8884772c1bc6cf29a5d89fc6212ec60b30329507041a163f133baab3a19913ce161a31a2fde722869a986a4bc59fa20313fa5bd2c35e534df3abcd174dec866a8e58bd5bc2cdcf7f7e79008248c073fb3de7896fde9b9848d7b3c70605ab806bdbe0e46d57d223616cd1af6e350d6612f6fe77b3ba0a7b759e3c83e800333e72721920362275093d9054de76ce0966bbb2b95f26552c0dadd705ab3f5ed419d09e0b02dd83672b482fc51c94f9a5e9b1804d44dc946e16f823a4a7d03551b765b73fc5eb5b0212d5d5d86aaede7d76abde4a21741df438a8e0369e4fa4cd28526953ae523fce6d5b1aa4267f1ddc1a2f879f2f0da680d0f317331bf9b20fe5ccd00ce52c05c3d08f2503986a7b362f241d680b26d766598b3100db38874c95d0270621644d59ca5c8fc86e7ed9ed40ce607de43c9f238d77fe161b71ae7657c8628b3ab9b0d2a420c5765c8895cb66549adb90a84a9a60579c3cc7c51e2afe535fbad9f76d9c4b26b611c49427e1400237c6537261aa4aff5b9f631f96036947acb3f36d2da909b4bb2080f374e7c409d8382eb9ed0ffe68fae55b0819f0d8224642d906c24a1264ed5ca9ae601c7c955de6d6dca25a554b5fa0f8cfd6ae47a9dd1758b260f39a39b86b1fbb4f01eb55651454de516635169711b3a6417791758fea707fd15ba0b35c7a7d07c3ecbafffeafa8c07f5a83cb174400c04789b812a830c0763aafbb638b4f1c7cf2342b8a01c88ddc8904af34759078c62812c0469add04d7a999c07e19247595ca76fb869a57c83f45b79950f47aedee606bb1995fa2046b3128e06bf55dd9d8f83c453c55561f28b7d8348fe273f6029e5b2850537d637f368a6ad8d9f4e35c9568a6743ced011e1ee177b33ff65cdfcf2d7779196e424c6dbc0f01daca5c00f5bfddba721e9f1673aea723d4ea7a1e41e18b08ac90ed9495224634f2c8a6dfb90233a084a60e04bebc7708afc42e370996539fb49c82a9654a0ab36b801e63904404d13c9b88bab5ded584b9cb54cc5d2e8b0e7df897e7aa2b011a9370116f49a99014905f41dc14869ffb2ebf35d0a0e55d2480c3ed800fb33e4ca1b94942d02698241426f8ec13f665206513ae20724f63d17a7467ecb25f6ca6889160927c13fbba45403598a1c409dd604568f04e2c955c048a84bb3e479b598c529758ff5ede965cc0d58373d4b97ab76b9f48334bf6321befd9428e999c04591d8c53d02a33e8aea2a7a83281d1f199772c41e7e72c7f1a4885f1ed4cff2652f913583d03d013e4489908df38d157831e238c185d4e220ed64ebc8a40aa94d75849d99949710635e7ad2cf9dd9db5ea48299779d02a24fbd3b4d3aea616c7c52199fed1da3373122cd10a65151d5fc8803a86964f144b332f1835be77aea6b1abef10c268ba4cb6d7fcf362b0d5db4aec1477c3dad0d98799f6aa46ff2f4c431774e8cc174ce79eb19ed5a63a330122e2765203676182b40596af70f3f43d426ad9474573e2194f98d723863d28ad97bbcb66a4e0e905fa32e38976943ab0ec2c14fa728c18d0b73660234af09b448e43f71ec1e976d4107882a858a968bf07d7f2ad1099331e6f5cd32f71c237cef693ca0c36490e09bb559f3d753a7eed3c60e3727f6ce172eda32be6de5f801c46d7bc918b3f7d8dca8d5f9881b58fb63c85aea544c4c24aea543fb4ed443bb8f15870cc61462e409ede7d42c308a5a97fb8b03b4cfc242b448f32c55e1570eb67a226a3f48ce50a83fe14cb4c7c2515c478589f2df1360981a0797d36cdcfeab54ddd823b8edd7758a1710867161fd48b23235bb9dfddc39f500046cc73c13229843c0e0bfb2bfbce872ca210cc5805a59dac6cd76ee76abb742b67fcba584aa0c2f8725eb42454d55cdb8787d4259e22021a1997de329b744c5adfbc6323d9892be8a9102f18c5dcfcb46fa8c2ba36a6d79ed9f97d7fd3781a08d082df1cb42a28a1c596ce7c2674b00027e8b491682b124e37f19f9380bbb47d12d3cc417659b5e83948dd4a4796c2e2a4fb988228216eee6c0c096c62155bbfc34e217b868f5b6c22ab97b96d24c069e847d5dfbead1f5b452897c934adabc67e2e97037b8ec5220e24f3d446c51da870101724ce68db450154b2ec0bcc427d5fb5cd0183611ce71e9a007b3d1e1d69a6ab88009c5c305e420f49b81904c74321d259e3462cbbde48188c2ed3d47bb26f7533564399c66b0a9e4d4b330f8355c91bbfb5913a2672a32f133b56e41a6bc97c292eaeba5951a71f3702988709e0e9d5db86e0e768309a6bb8b57fd7e8ce8a09a19237b2b3030e963f9ccd91846c9c900c3c4f3b65db4ca49164361f4edde43d158c3dccb903aaf585ba0caade2f709a3faf60424086f6091b985ac095092794e8569708eb023cab21d4aeca4f87c499a06a296bfc1289ee2e1e2782fa8ae13734e0116290cafa524e6108775cccfd3b9487b7bcd6bd54b9986a2a42fc5ca87874eac056e295b8014b775ec38af2576035092545038cc9d142bcd9af1d7cbc03141521d5ddf047a257c3c54201cc77d8d5869c2fe178ee0893226d6feba3fcf674ad2482ef074fd8ea0d95a17bd0c1d5f7574f56e7c9966bf4111a4f8e7545c74597cfdfed71e8659789847675d26cf8d544e4f23e17d4d5ccb86d9fbeb3e821da84ff456b616fe190eea7a128a2828874ac62592fea938833e632b400c6dabccd71cd81411b89ea7c79169887e9db58a894e5ca6402b6cfbb04c14c068658ba53066d82565f2c1e79565e1173e23315a15983a09901fa27d5e2597b968a8798e0ae796cceb64e125b72c0d67fa02cba65b0db455266deea1b9801650a6ec0e4e5bfa9d0ed01e2a20bfc9a5a7eef44fc1d2daad14540fb7851c4a5fdbb6fe3bfbf7c13aa70549d56040c53cf7538344bceebf151ac298cea6f534251c62b8ec16f1405f222b8f69a859f921b5cf4d42d5daa4b4ca20872c286a5408c9534f523bf0dfffffc42035a96c51864ef1659cce4831002403ee24c34ff84cfb485caddb5649f3988dd209605640e2be2a0703db213a3f550be6967528edf8bd9b62a26f3e1c341a57de4c88743e11aa7566e94df77cc4ce764b9d651daecdb5720c6aee1e7ae87642f15e0de8d5e0b88a95ec017c6360aed8f77ea98e0ce3b08302e91093057ff7a739b471c03712a2b2c618f65611f13b42378c2fbe94be8d1f398d8a3a6569fe270476402a1bff5b3c5afb6a5d5c9b7d0df126ed6499b2582fafbc9a72791271dfe6e121e8661c30f4c056d20dfa5358e5b425c179ddd3dda226879a7b27d43057d28fbe7b31d055c668fd49a029344d9017a632f73e4e2b0e614f1309d54331c443159e732ae1c689cd1c77d870fd0291fe06b03b561b36131c60a9e46adb178d8213018d01940b21384736032b48c6db502c4053d224e65d62c4a9d3d31192f25dd113363dd811cab1ac459668376a3593a0405f925ac248697710558cb460826729a0eab56262dc7c42ab3b6ea4c48bbedea48635cd2fb11ec703133f531567bf72e6bb6e22b3120c21d6338b0613a1b699a5a4432ac636bc9e6faabfc91a8722653256f8f20dac32d38c99f92e3446f71b696b0d5f3fb29af18ce316947ac50e313f49cc992a691be1fef3643502124d08b365b29c9194fac806e0624db3caf1b46dd82a7d51a642561de5d49623ad204d2658aaeea7d89e8cfd07bcbc5635b9aea930f7817ea4ae0814250c7f02232a1bc0d6fbb09172139548d62ffb154862822ff00539aa2a0c45f50c2dc6c228d9cf88159af5adcd98b5ddfbf52116830f945294a510607525277064446ba499949d303b68a3b5c799b4a279c8db2f4271d3c856f10bfae43566b5c97970e62f570626b27284e840b96b22458a2a49b05e58a70292fdba2c5ba4e40d4774619935e2e2134dac6d05927e60bdb1e758f70a630bb42c7a0a1bc1cf396e7726f8892c2dfeabd88318a9359fc11e6a6489a197895abd9441d45566ffce861bd286fab168372313ca626d52759d76d8f2230d3ee5a3a68a4ce0146d07ea1468eb4d9beffd0cea27a2ba44df74b879e5dcdd55a41d730cee169f6f71c43436a30a5236a25d886d01a35fea732168aa8a9f57ca45d4fca1c5104b26d899501e9035032db6eaa18be7dcdab55c0acdb8a081f24028446a01128eee1a9d38159cdc5853a0d2883fa1de7dad97b347e0515c19b9a626953e40936255a3fc0584bb77cf3c922132c4ac6af8229633bb6a95bfc8f08b31b4447e1ee2ebd6f85472748897b8dbfb210266d868b1ec155d50272cc522c1f8ac85fce532e5fcd7262ae31b9526e839760a96dfac696f308bedaf76c8bfb23ee986dc8ab99def0cfeef4e376e5230bad9dc2ad5125e818c7987c6dedc58c64205f7dba5a3e6be4965af6be6619dc3c2ff0e7428653abedf7c6c1f857b9cb05bf2c601737da4ec861e06e497c023a3f523b4f8c647dcc17fd8659f0d4b6f5a7de48a6f91d807c83d76c9a881ea02bcc1a34e57a6ba6ce73f6524523b1ad15ad474cec8aa267d5d03747ea7fa81e43c178bc91bb1228762fc3d94c0b2b1e6e80e408dc828ddecbae1272361b4c0dff6398ef82c4f080f27d0067168765712381d1fb20ee8a732dfb1203f5e1c17036aecd44f3445824d8596c733e723a6a5c706fa6233e087b5c24a80370a978928d4b46bbd8841642c59f2e9fc9c2bcbd84fa470b96f897db711d24e469762f3c2afe21b57809c483919ba789c950f05921c9f5fba0cac636d4ad85c93e8ae893a0e2967eea78d8578ebbfdc61bfe62bd039c3e7552f22ee494030a8f5c6c8448ff33b2c4d36a78ead7cc7a8df6137d862f40b1306464c2ed3b8e8e468ecd3cdcd3a7e2ebf90077961904f3eacf12becf72687e8b7d91c9a4e0347e0e7e33adc369ba05d914eb459364e4b4f257c6d3548d10ff31dadfdd9314992b3b363f80b2dc1c9d6bcf3e6c5d6e6ba701803c5a192f9f207afe23589e6c3f9ab8b2364fbd1689c01a8150d412b7d66c342945c71b33189fb448d9419f6168be29cc0a08a62b4c2d51b01bbc53edd497043b89304c8f4f1f6ac4848451372660d0e7769473eea287aa2ba90d381db102176cb093175f4fef2dbb8c1023ac90b9a2030c3e7118259ab26c335efc1a725ff40b90b02a20b0435e4ac3bf307d984ecebbc235b8eee59eb778b13c36fb66239946240769e969480571df1a1936fdbfc4784b7066f4c99fcce67120254236c70ad89248d88ef7020c215c09928cd66dccf121a08ddb4ad120760ac3970dafba81ddbf6967542861179f43239cadc268e2a202943d20b82e00635630558ad254cfb6eeef2b621c236438dc4b00e0b54c84a000e6e040821114148b8cfd0d5471c35dfd0c10a6183dbf8899c425d63522837736364faf46580a68987f8b506f2f28932135ecba4e0551babfe1743c24b4093367e1ea6513834b14b6acba6f704fdfafb553cb6b6d4338d395e65f661168a45fb260f0f4b7641686c354837bccc0e7e2566070d4eb0a83fbbddf45dc14160caca21b6a9236e182483d879d0d2cecb07bf3ce600dd92ef6e8783301933426e88c9c0aeea92abec9117e4141326505650fced006dde3d47cd56280f46bc3a30cc595e90f2da297dc326f36fb18a717ff7686a7041d286b903e9b250035ddabcd1b2b85f020d55653ec30fcc31ea297dbfbfaca95e9cb0d4962f420f59ce25607b8aa4da8126599a9118cc6f54cdd21f3ac36df332c300688b7e6faefd1a1de5ff461bdfeb4d7e93943734d1974c8d889fe868938fae3ea57b9e4ba0d35212fc3341bd533ea26a44f13565c2ed8ed5c2bf3b0ec9d6b268c288b7870acc10e33b236b4bc65a306f17744fe1fe7258ec553c20d018ae3110aaea735c5c6d3487e94bc9c35b059f8591a858c55ebc7e217ef148ae247338295d427fe6e70fef51ddb3feec4c366b69a9d054e9c668db7c47c01be0ab5fc782f2764f5ec4089b37a855941fb0b6ab01b5f2b5a6f850ccad9a1108db7957bef8365d989578c30d4f9315b3d2d7f1f0597c6644c0921287e9d9c3cde745fb964e456140c504662075afadb597312afa464fcb93ce58fa0a58ae9f7d7e376ab298fa871cad1fa894abf9cb7eaba9909ecd25d96de8b7351c06b32f2123b3ddff8b79bbf8fa2c2b78cb2ac390f8b406cbd20faef56b9d89c684fa0971820a533fc5fd2bd99eda6d123395ac33d4c9e83c64a0a61d5befac1a064ffd0447bb9d08b3c2ffdf2f17000156488f07e30773d7588e245ef3e111c3fa9283aab36978252ccd3e607564d145e76f5ef732071d203c7068531710c3da157b6e1d6060ea780f3d9dfe00671d70bdc0717e2875b330f8427b37c42137f20d6386c72c30e0be4fdbb68cb5de76332ec5bdba2f1ba5e41a7084e2d2e01279aa34d3a5ff1bea324d02c00dd402883910a4ff3cf9968cc5e10d3be310865de1cd5248a930a628d0935d5f12372407357e0e7801cb4d284285e844a1f2737d59704524bbf589bc0b7d7b7eb0c10d52c3cbba014af772f5fad2b7a4750f2bba4fd4526d8e7ff43a13ab9a294b87c569702dea87442732bf3e18e7fdf9a56e90f5ef8379efa573b10f0512272c4173dedc2b149e7ec1fd899e770da5115a38e48ebe9fcdb8228d3a8bcd22d2684d5a713a32e9f61cbc057f8f92c3c3a251b54bdd00587e9b899ec306b6d26f372298b7a782811526b94dcdcd84070ff4ec78ab54daadb79ee348fec3ae370842c625dc444f6aee03e0bdad0b0d7ad5616d5c33058885644bdc305bb696bb7368efce5efa778a4c52e2ee5b7496735e8e40703d1c5581a774a6c9567d82d4fc2cf358b82289e0519d3f7123a99cfcb1deb85f9374088dad736865cd9126b672e8d8d4bf3498f705b667ef3c9e616be592c017087e0459aa9381e0520d9216843edff5ed750fc8e9a9aa48690928e9f022381e8f658cb92e597bf446d5fd15e891fa3cc23b1b201c61e2f948cb4e93a9997a19cbc745defcee17ad181c7d6127af65f9f0a2802ba36f4a0d84d8aed3d94972ae4e5c65dae69cc3cdc69a2103d7a70ad6e3698810213ad7d347cb750cb737bcde8335946898c73596c8a133b9c7ac26b9140d44089bcd3e525c88850c346fdeff740ce0248bcf3332583af2c1d5504571e44db7f8dcd92e2d658518dcad1ab5e3e9f79ecbbabd5b5c63fb4f86ee63afcdc3cfc1e4d3f04c2c93c1adebae202fa1629e837324f5f42f832f26fdac38c3484a9c5ae3101459b75d50f751487017f792c349e3ec9d44ec2e3ad27049dfa3bee8edc5eb4935d202c03643e20ea82505faa282d59a9e364f4f4064e0ecf61298c82bcd9dec4761278151f1b4c8f47540dac8be1b87cd7abcf87d8ddd626c5e31a872ed32ed498962db04c80851e99608d48dc1aeb47ae8892265b482f32dfef4f0f3680ce75ba3ca1de4fba5df70c8b56969375a42b017a09687cdc526d8a28dfa7e4879ca8ae71052a5a37b70c692b313602caf3d115247080a56aa44114ae581d2c025f4d4136daf384be074c3a9af654374704bc1bc7b6ccb2d3f4c4cb2782720ba49b8343f66a0ac38489162cc2a77a62e9bd603cff2d41fff06a8e52ba7e3707bee008c99324250e02e72e470029c470afd641576808271414622548113e89a4dcc4ea4cb32bd0ecdf3716c6f5cd4427ba52426c6eab8178f657782d9914012a4467f1eff6377c75108f0bd36ecf4a68a8eeb05f499fbc73de4292d4cdc3f1dd14485161ec28a57646b3f783cb3ee3b17bdc287125ff5c130103cc5ba039520bcb2c4ca8f4ccfe8f3dbb9f118fa3481febc263fdaf40c2759f0016b78f7f1368221793e4c46f637c5ff71573d81864961bbc1b528c3cbc4f798f8b7bc3df7e80a3fab6a1882701b8c75ca54833f4128e9c0fa147b471583e71c1ae1474f5db8cf791b5057c82150df885731dd583e69c3043240ee1942b12f9844bd85e9d389216708cf47cdc1f0fe8497b18dd60b4a189f62dd3f9bb0a69eba9256661af1924c7a2e15179548845e6ac4d688cc90827f3ee9b5634d264d966ac08f508f668f664b8dcac2724cd758d25f645542c0ecae199affcaf581cec5d5da1cd65b3c0518f3fe45f7db5f1990ea46c0cbbd8c322658254f5b76169ea4edb24117c5db65471c28bc8200c1e60c7573e17a2ea8c93c1bf979888414bb54da12df71b49dcfe10e9f17f46c3b92cfe350d4065d4dd739f8be8d3865875eec01f6376447e159e31354d5d0657915dd53e2cb02a19e9e20cdea7d7b398adb48ec0f552f64259f58aea1f20661de365f377483a3bdccdfbf87af74961c6201696c08ba6febdb816e5739841c541c50758d5e3ef49ed1885210884e3d16965e8c5339a24e72671555448fd02b54519ba69cc700337ad6e603acb2c9faec827aa800af401a23daa1d237aa6f3ccf521e4144d960b62d56e3425527ea17ab8779fc12282cc17156bba18bb01bbb908f864b84cd8a6350bc24bff40be03a3973cd1e906cf3aaee78981c38449ae547afb46bcc07c2b4d586c405098c2a11625fe1d07fb8d9d9cd8e87ff19e39e3f8abeb32fda4e5992bbe8cf4172e5c89a63e79e307f12dfe01a5fd86a9c2b898e1d9b2661da6856895ac8656dd61a850f6e8c9685036a77ba0c978509f6176279453db4b10ad6d5804791a2d5ac0ca9dba6efaace5ddcba7d52155d65f824044c04cf8093bccff544ef491e6fec9cbcdf02bd002d909101c24a19e12f99b427eaae82cebca3281384e9a0c5e6d882d0f71a9e1b0612546b85bdd0ba5283cd8b0ea34474a2735ebbc268ccf27007cb8b6eb66c9efa7a41fd0571278ca039f79709b198ee39b616050194de5915092c37bcf7bf95299156151a424e5e3deb97f71a6282ea456d54a054afebfe19690bbc25f692b96ceddedc1fcc92639e5c929261df80b24ebdd9b72bd29463d8b57eeaee35f206cd5d8afec2c993d888d36e951388b828b867394d37ac4a6a4cd4781a36430deb265e2063a85e7c8245657568a217c694940c89fbbb0d14374dc883abacce4ae8332bae1111b71c6d42c058f13f4c7afc20558305dddead313fd8e3737cf5eec8b7f6fcc3d6f581fc676b3250cb804787353cf7b1ef18a6a6826f3cb74385783f011c6aeff575cde7b282268a52c50f2077a24f55166677d3b1bcc25bc6078ac296abef1aeee444de73ab51f5c317505d02348dbab35fc25c9aa7b4786ba66e4e9910d97479e0fef53711f86791d7edee43fa30a2b547dc1dc6c9777d3e89dc7608e9b65a6b14157ced902a9af0b4dd353e0d6c61e09a844991af1fad170135d721aa960f258ae0f897ea8307c95d4d9c6823070c518c9884ea2c8d04340a146425da47b4711b84972c991f7e2b3b9d54aeb2b3468ea8d078857160033e6182ff1af40c800ae585d6ebc73fa9ddab8edfb9c99d47f57733078099c51b61ed5cc1f5bc0c200a25462174ea3facd80a239e15ba8527c6c440b6178d9875a8e4132c36c068478628a5d57814d66398f88af24b8414fdd3903c09a8a61d7c7a2f452a90fbd6e273cc20e71551ec7955e09ca99db253b7e12e491ea963c8288104938b76e3e925735cfe19742409277c3f66b8a9cac48f87a1dfe4dba85220e0b709067536e2e990d3b1395e14b228d8dbe0159b7b49f4cfae48b0ecacdf4da1983d8dd7c99d513dcc36da4e00e712590dbc1a2e30d63c475f16e9600172cf56c84b6f188c04a31eaac0792e7d9dcb046e8a2a0518d23488c33aebf180b83b2a23dacd5f849c287500d39a7591ab04d121f3baa5292f1b3a6ec4e5906fb0ffb352251db56665e16daf3af6d8156b0e022dad8cd30d80d5bc9fd272e23c43586224ba109a801c7d11ecaf3f25f95d280d14ec65372d19277f62b820d58a6f78a08941a71616f4b3688557fbca5ab22feb37440b8c90c6ccf320d75a1314345327a3d4f8b9ea76e5689a7ed49565e29f3916288232cb0a15d2af638e6be89a8210cae64c6acfbbe44f071152f6c67ba0a62283f52430b7de201e11e09207b9e8d8949cec9c46ca93d2f5f2d08f512ff64906a80ee90daaa1b804851e62c34f1f839c33e126fee3f12dc9f723e23ee6f5a593c89b43e9aeb26c85007c3c6c9c92e8f5d500d136e500b94e8d17bed480714b06548cb1590bedbff1c75c784e549620eb2eb978c98e27fd375b9db315d32e19b22948a66a57ac42cf33e19157eeecba1ed204d01f6390ddddd20692d67d1ce458776a6085f446fab3d01ab5efcf79e68d705a2419e4eb9aacf76a391341f0d85f25a83b2a8a2fb3b9f0782eaaf311db2c5f17c8052f705666007b6ebacb1e0c062654dfd303c817562597d7a03b72af5e53848336e806a7dd17b4caa2af9dc5ef1fd05649ff2bbd510c0412b55bff79124562832906c6e45ae3b8f09f723be4e84a3de5f9bbefcc49a8df2ef74cdd9786aad53e2b0335fd34b778f85b61b0fd79050095f2aa509d1bb5e4845c1d28010c9fb8f8168ef47bf98b82bbd1207722f4bc46796d351bc219e92631018d4baa5189b28f8111bfe6871910a65c6c7babda793aa28a766682ce67137b2fad1135b599e04c61e5ed4b3eb8f72fc3d79dc52b69f682ef4bc5fc27ed6f9c9fd1cdca43424a5e59249fe01123c1e7ab71e2179319aded4b46a707858167afdc6419e689b743143d349babcc8cbf036b04cfb7c8f3db76ba9f17d82d02352f087a60e3d908f74174b550574cd661185ca1d9c6afa2f8d7a56842f77eef827eec4e90a2bb61db7ab34be9d88478ded158b6031da15abcb8988908f728cbfb470af7859b4f69d8d3c601292e4f8bb7823c87b671a26cd6ee7c6ab77c7abd8f773c83cf7e6beedab70b12d57e578a7d6cd1cfe25d02c502094d7d3c4ca13781f529944cc83491a44a6c513b5e6abf721abaefb2ac71e5cdf27153b673f73e8466908f8afc898eb7b46073de9ceef58ef8f457c9bd3798b5825a71dd4b4abd3cf3b2b99c5a8a004288723c597316fa9679e2cbc22b642aec9343cdf96c2990bdec6adcd415ed952c24be82091d544a3d310e289e0baecd2c99503a0d311ea865afbf04a3c9dfab5e8031001630e34c57b3fdd64acb1c2bbd5c6a1fbfbad0051060bb6473cfe34d6cac10a42f98654c6b1f4d3083a31c2956d613e03b4c6a0b25fd984e1d0a82806774b2d7528f0bd8bd7e8810ef3d834573b8166265c16cf6bb69a614378ed4b41586102b8566437d1dd0cbe887fc85dae80afa750f2ac372966901476a91de8cf38654dc32d50ca00e771dceda257252bf84997b18c22324c71561d4ca09d6bb90b7953a035210e5b06e342d097ea1edb92246ab8d81ec73cc856f4459634d5b0f0d28a61acea1bc30cb65c7020e2981343ec87269e90cd2fa150df2379e75e64449c39059137f69e72560af765fb140c2e767d28069ee60b059387ad85c0f0e9589be9f99950e7b9808b1bef6ba672047b8dc148c9c4d650139d978002ab0ac566b6e7eb4fc56f8864f3d599e1ddd85f0f75f9341058c8f0ee40920030304fedefb4ee3c8a85d0458de65f27128257285b38addbe8698a9390f52f47e1e428c5484c5d6a39719a3969ee25633fb69abf257378f4a08625a2bf605fd7d74f5b64084f89f78efb7e55d336e6061875ad63debfec7229b07c11edd502228e6c12fb5a1e9fb199f7cad363a144019c93f0782c45d4c3d7ed5326b05781b2c1c48e4befaddd8cf876ddb634586f028fda7a4a5283494b5be33d979dcee1504a6d667d96fa16e161cf8be2e70e994283422f789c4dbc8740c9676820152a3ecf341b20bcd19d98f2c4378e73d6f131bcfb180dc31885b792228a42606f8cd4cd5fb21bde961f76a9d36df46ed404da5c9815fd805ce598185e923fcb728885c0d9afb005e1022eb7371dfd4a3ddf0dd08d4adb1af523d84dcd0a6f013c1e5fbae231877f1728804a2dc40903ce79dc7efcc27e167e0857530c001240661531a2672deac9fdbee3b6680babe200ddf17b39ba4a4ce3559fe529a605c9581c0cd158fe31afe97111bbbbcba428335448949ba08ff76824a10712a8686929e6e3e3ed1c8df60412e1add3e3e3f59710680a0e662a389d7b6c99854b3429770270593f3a7fccc7b359abcda422dd9e353c2df2af9b472ccc8d62fd5d3b77a7694a28def5c27b07ba58a66f64428e71b47308f535a7c4a829d2c918ba3578ff962f1a9f2d4d13ddb0b3e2cfec4b2ca580b4385e31946f7c09a23841b602db4d29ef892b6774a3aac1db38802d20f0d4fbf1c69ba995e2ab08cdf23a40f99371937687278f6baa8c9b69fe26251799389ca804248309b7e3334fa21ced78a715c3e04655bd1cd4580438579254bd54fbdd0d8d549273094d73ac640a6b7d44a3cdb9d2562e327d632886f8d6526955653b0b85902ad0faadb9b3c29e969e2bffd60461c2ef579fc717f873859b0ce6cce8f16ae6921b94b69ec1984173accd265b5a10436599c9e7438a2ff33a17697329fcd38cd8d71139ea6de44ce7480b90eee4cd65a82648a0c1c3d2b8f70d9a7759dec7677f8c6fbe86318ff44bba798546f70eb66c7da3617d89055f7f3b6d8a778a2badcdfab9068072117addc007146414497677b237a2b6b15b4be3d2833c01733c7c920acef9f3ba5dcc58d7af51557ccedf8bab4bc600df6cfd19f75140757444b1c980269bd86524de7c6608c411f2bca07027e585e0c9b1c8eeecb3ac50cdb0fdc4ecb3e17bd41154cc58f72a96022dce4e4f5221482d0016cff2b51a56cedb28c9515298a9c22620fa1e88f5827ab6b6786c8fc40605bcf051506b9a38ff01329be0efacb4e58a62d9da0e3f2387524e76e29825c864c58732ea56f9074c4977028473c9935e8061e5cd72bb45ba518b6b2c5f2a906ce9729d6d6cc8d3ccfaa3c12cb9547f779925b582edff1784247156dfe608d4e10d3f7f890a5add33d0b71eac01a0b53b0a416e51dd373a278f1c1f87ecadb215a24dd2dad0e5cc9a98bfbf4717ce108a2df3550d273773d193031384b326e2b0662a6eeefd87dc73b5636dd36f56df323ccd1f2affb6b2b3dff845812de597193fb730c39d447a647d535655e77bf6f8230b14533d587d0e3b50590e086bfe95b8329043f404a6e0f761ce4a4ddb375796fb5bf98c0bdea5028af95aba9f005a3818b0a5aaf40002bbca62a462d5330308f85299a2c863202e7f199f948f3f29cebc4402ca3cebf402665d16422c8c23d1cd4c29564c81438e67b8416e4120b2d5612b5abbd7efaa0a8159f282efcfb29b1311d953bab433ed5c6ef49224778c8285354cafaf254 您好, 这里需要密码.

2024/10/17
articleCard.readMore

杂题乱记

本页所有动态规划内容已迁移至 动态规划 刷题记录。 P8186 [USACO22FEB] Redistributing Gifts S Problem Link 有一群人收到了礼物,每个人都有对每个礼物的喜爱度列表。他们商量后决定重新分配礼物,每个人都希望可以拿到他更喜爱的礼物,至少不能差于他原来的礼物。现在需要找到每个人重新分配后,他可以拿到的最喜欢的礼物是哪一个。所有人的答案可以不是同一轮中的。 tag: Floyd, 传递闭包 Solution 可以发现礼物的分配是由交换产生的,所以从自身向他希望得到的所有礼物连一条边。由于一开始礼物的编号和人的编号一一对应,所以连边等价于连他可以和谁交换。如果多个人 (≥2\geq 2≥2) 处于同一个环,那么说明这样交换是成立的。 如下面的数据: 1 2 3 4 5 5 4 3 2 1 1 2 5 4 3 2 3 4 1 5 5 1 4 2 3 4 5 2 1 3 可以建出如下的图: 其中 1 2 3 与 1 5 4 均成环,有两种方案。 在图中,可以通过 Floyd 传递闭包判环,设 fi,jf_{i,j}fi,j​ 为 i→ji\to ji→j 是否有边,特别的,fi,i=1f_{i,i}=1fi,i​=1。那么可以轻易写出转移方程 fi,j=fi,j or (fi,k and fk,j)f_{i,j}=f_{i,j}\ \text{or}\ (f_{i,k}\ \text{and}\ f_{k,j})fi,j​=fi,j​ or (fi,k​ and fk,j​),考虑 bitset 优化。 传递闭包部分代码: 1 2 3 4 5 6 7 8 bitset<N> f[N]; for(int k=1;k<=3;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(f[i][j]) f[i]|=f[j]; } } } 循环 333 次避免顺序问题。 若 fu,v=fv,u=truef_{u,v}=f_{v,u}=\text{true}fu,v​=fv,u​=true,则说明 u,vu, vu,v 在一个环上。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 bitset<N> f[N]; int main() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(a[i][j-1]==i) break; f[i][a[i][j]]=1; } } for(int k=1;k<=3;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(f[i][j]) f[i]|=f[j]; } } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(f[i][a[i][j]] && f[a[i][j]][i]) { printf("%d\n",a[i][j]); break; } } } return 0; } P1485 火枪打怪 Link 有 nnn 只怪物排成一排,每只怪物的血量为 mim_imi​。有 kkk 发子弹,每发子弹的威力为 ppp。射击第 iii 只怪物时,除了这个怪物受到 ppp 点伤害,它左边的怪物也可能受到溅射伤害,溅射伤害为 max⁡(0,p−(i−j)2)\max(0, p - (i - j)^2)max(0,p−(i−j)2),求最小的 ppp。 tag: 二分答案, 前缀和 Solution 考虑二分答案。 注意到操作右边要比操作左边优,check 时从后往前循环。 设当前位置为 jjj,操作 iii 时能对 jjj 产生影响当且仅当 i−j<pi-j<\sqrt{p}i−j<p ​。也就是说,只需要考虑 [j+1,j+p][j+1, j+\sqrt{p}][j+1,j+p ​] 区间操作的影响,这样的时间复杂度为 O(n2)\mathcal{O}(n^2)O(n2)。 考虑优化,设区间内共操作了 sumsumsum 次,每次操作的位置为 ri(1≤i≤sum)r_i(1\leq i\leq sum)ri​(1≤i≤sum)。那么对于 jjj 受到的伤害,满足下面的式子 ∑i=1sum[p−(ri,j)2]=sum×p−∑i=1sumri2+2j×∑i=1sumri−sum×j2\begin{aligned}&\sum_{i=1}^{sum}[p-(r_i, j)^2]\\=&sum\times p-\sum_{i=1}^{sum}r_i^2+2j\times \sum_{i=1}^{sum}r_i-sum\times j^2\end{aligned}=​i=1∑sum​[p−(ri​,j)2]sum×p−i=1∑sum​ri2​+2j×i=1∑sum​ri​−sum×j2​ 这样的复杂度仍为 O(n2)\mathcal{O}(n^2)O(n2),考虑预处理其中的变量。首先 sumsumsum 可以用后缀和优化(sumj′sum^{\prime}_jsumj′​ 表示使 j∼nj\sim nj∼n 血量清零需要的操作数)。观察到 rjr_jrj​ 和 rj2r_j^2rj2​ 都需要求和,仍然考虑后缀和优化,令 rj′r^{\prime}_jrj′​ 表示 j∼nj\sim nj∼n 所有操作位置的和,rj′2r^{\prime 2}_jrj′2​ 同理。优化为 O(n)\mathcal{O}(n)O(n)。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 bool check(int p) { int maxd = sqrt(p); for (int i = 1; i <= n; i++) { hp[i] = m[i]; } for (int j = n; j >= 1; j--) { sum[j] = sum[j + 1]; ri2[j] = ri2[j + 1]; ri[j] = ri[j + 1]; int nowsum = sum[j] - sum[j + maxd + 1]; hp[j] -= nowsum * p - (ri2[j] - ri2[j + maxd + 1]) + 2 * j * (ri[j] - ri[j + maxd + 1]) - nowsum * j * j; while (hp[j] >= 0) { hp[j] -= p; sum[j]++; ri2[j] += j * j; ri[j] += j; if (sum[j] > k) return 0; } } return 1; } P6600 「EZEC-2」字母 Link 在 0/10/10/1 矩阵中,找到有多少个满足下面要求的横长 www 竖长 hhh 的 T 字形 w≥aw\geq aw≥a h≥bh\geq bh≥b w×h≥sw\times h\geq sw×h≥s w+h≥xw+h\geq xw+h≥x tag: 二维前缀和 Solution 一眼非常像 NOIP2022 T1。 首先想如何 brute,先枚举矩阵中每个为 111 的点作为 T 的中心点,用前缀和记录它的左、右、下各有多少个 111,不妨分别设为 suml,sumr,sumdsuml, sumr, sumdsuml,sumr,sumd。然后暴力判断这些 111 能组成多少个中心点重叠的符合条件的 T。 考虑优化掉判断符合条件部分的算法,暴力枚举横长竖长,fw,hf_{w, h}fw,h​ 表示横长 www 竖长 hhh 的 T 字形是否满足条件。时间复杂度 O(n2)\mathcal{O}(n^2)O(n2)。 计算答案时,对于每个位置 (i,j)(i,j)(i,j),枚举它可能的横长竖长,显然对于这个位置 wmax=min⁡{sumli,j,sumri,j}×2−1, hmax=sumdi,jw_{max} = \min\{suml_{i, j}, sumr_{i, j}\}\times 2 - 1,\ h_{max} = sumd_{i, j}wmax​=min{sumli,j​,sumri,j​}×2−1, hmax​=sumdi,j​。即 ansi,j=∑w=3wmax∑h=2hmaxfw,hans_{i, j} = \sum_{w = 3}^{w_{max}}\sum_{h = 2}^{h_{max}} f_{w, h}ansi,j​=∑w=3wmax​​∑h=2hmax​​fw,h​,时间复杂度过高。 继续优化掉这一部分,注意到是统计区间和,想到二维前缀和,用 sumi,jsum_{i, j}sumi,j​ 表示 ∑w=3i∑h=2jfw,h\sum_{w = 3}^{i}\sum_{h = 2}^{j} f_{w, h}∑w=3i​∑h=2j​fw,h​。简单容斥一下得到 sumi,j=sumi−1,j+sumi,j−1+fi,j−sumi−1,j−1sum_{i, j} = sum_{i - 1, j} + sum_{i, j - 1} + f_{i, j} - sum_{i - 1, j - 1}sumi,j​=sumi−1,j​+sumi,j−1​+fi,j​−sumi−1,j−1​。 这样总体复杂度 O(n2)\mathcal{O}(n^2)O(n2)。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (in[i][j] == '0') suml[i][j] = 0; else suml[i][j] = suml[i][j - 1] + 1; } for (int j = m; j >= 1; j--) { if (in[i][j] == '0') sumr[i][j] = 0; else sumr[i][j] = sumr[i][j + 1] + 1; } } for (int j = 1; j <= m; j++) { for (int i = n; i >= 1; i--) { if (in[i][j] == '0') sumd[i][j] = 0; else sumd[i][j] = sumd[i + 1][j] + 1; } } for (int w = 3; w <= m; w++) { for (int h = 2; h <= n; h++) { if ((w & 1) && w >= a && h >= b && w * h >= s && w + h >= x) { f[w][h] = 1; } sum[w][h] = sum[w - 1][h] + sum[w][h - 1] + f[w][h] - sum[w - 1][h - 1]; } } int ans = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { int w = min(suml[i][j], sumr[i][j]) * 2 - 1; int h = sumd[i][j]; if (in[i][j] == '1') ans += sum[w][h]; } } cout << ans << endl; P7915 [CSP-S 2021] 回文 Link 给定一个整数序列 a1,a2,…,a2na_1, a_2,\dots, a_{2n}a1​,a2​,…,a2n​,保证包含 1∼n1\sim n1∼n 的数各两次。可以在 aaa 序列的首或尾选择一个数 push_back 到 bbb 序列中并删除 aaa 中的这个数,使得 bbb 为一个回文串。每次操作记为 L 或 R,表示从开头或结尾选择元素,输出操作串字典序最小的方案。 tag: 双端队列 Solution 以下以第一步取 a1a_1a1​ 为例,取 a2na_{2n}a2n​ 同理。 由于要构成回文串,对于有且仅有的一个 kkk 使得 a1=aka_1=a_ka1​=ak​,aka_kak​ 一定最后取到。 所以题目可以转化为,对于 a2…ak−1a_2\dots a_{k-1}a2​…ak−1​,从前向后取元素,而对于 ak+1…a2na_{k+1}\dots a_{2n}ak+1​…a2n​,从后向前取元素。 即可以把这两部分看作一个栈,从第二次操作开始,每次从栈顶取元素,那么应该从哪边取呢? 可以从最后的操作开始分析,倒数第二次操作只能取 ak−1a_{k-1}ak−1​ 或 ak+1a_{k+1}ak+1​,由于要构成回文串,就需要满足栈顶等于 aka_kak​ 两侧的元素。那么想到可以将两侧转化为双端队列,每次满足有其中一个队列的队首等于任意一个的队尾,如下图 一个 string 需要注意的点,每次 s = "L" + s 的复杂度是 O(n)\mathcal{O}(n)O(n) 的,可以通过 s.push_back("L") 最后 reverse(s.begin(), s.end()) 来解决。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 bool check_l() { int k; ans = "L"; revans = "L"; for (int i = 2; i <= n; i++) { if (a[i] == a[1]) { k = i; break; } } deque<int> st1, st2; for (int i = 2; i < k; i++) st1.push_back(a[i]); for (int i = k + 1; i <= n; i++) st2.push_front(a[i]); while (!st1.empty() || !st2.empty()) { if (st1.size() > 1 && st1.front() == st1.back()) { ans.push_back('L'); revans.push_back('L'); st1.pop_front(); st1.pop_back(); } else if (st1.size() && st2.size() && st1.front() == st2.back()) { ans.push_back('L'); revans.push_back('R'); st1.pop_front(); st2.pop_back(); } else if (st1.size() && st2.size() && st2.front() == st1.back()) { ans.push_back('R'); revans.push_back('L'); st2.pop_front(); st1.pop_back(); } else if (st2.size() > 1 && st2.front() == st2.back()) { ans.push_back('R'); revans.push_back('R'); st2.pop_front(); st2.pop_back(); } else { return 0; } } return 1; } bool check_r() { int k; ans = "R"; revans = "L"; for (int i = 1; i < n; i++) { if (a[i] == a[n]) { k = i; break; } } deque<int> st1, st2; for (int i = 1; i < k; i++) st1.push_back(a[i]); for (int i = k + 1; i < n; i++) st2.push_front(a[i]); while (!st1.empty() || !st2.empty()) { if (st1.size() > 1 && st1.front() == st1.back()) { ans.push_back('L'); revans.push_back('L'); st1.pop_front(); st1.pop_back(); } else if (st1.size() && st2.size() && st1.front() == st2.back()) { ans.push_back('L'); revans.push_back('R'); st1.pop_front(); st2.pop_back(); } else if (st1.size() && st2.size() && st2.front() == st1.back()) { ans.push_back('R'); revans.push_back('L'); st2.pop_front(); st1.pop_back(); } else if (st2.size() > 1 && st2.front() == st2.back()) { ans.push_back('R'); revans.push_back('R'); st2.pop_front(); st2.pop_back(); } else { return 0; } } return 1; } int main() { T = read(); while (T--) { n = read() * 2; for (int i = 1; i <= n; i++) { a[i] = read(); } if (check_l()) { reverse(revans.begin(), revans.end()); cout << ans + revans << endl; } else if (check_r()) { reverse(revans.begin(), revans.end()); cout << ans + revans << endl; } else { cout << -1 << endl; } } return 0; } P1053 [NOIP2005 提高组] 篝火晚会 Link ▶题意 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”。在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会。一共有 n(3≤n≤50000)n(3\le n \le 50000)n(3≤n≤50000) 个同学,编号从 111 到 nnn。一开始,同学们按照 1,2,⋯ ,n1,2,\cdots ,n1,2,⋯,n 的顺序坐成一圈,而实际上每个人都有两个最希望相邻的同学。如何下命令调整同学的次序,形成新的一个圈,使之符合同学们的意愿,成为摆在佳佳面前的一大难题。 佳佳可向同学们下达命令,每一个命令的形式如下: (b1,b2,...bm−1,bm)(b_1, b_2,... b_{m-1}, b_m)(b1​,b2​,...bm−1​,bm​) 这里 mmm 的值是由佳佳决定的,每次命令 mmm 的值都可以不同。这个命令的作用是移动编号是 b1,b2,⋯ ,bmb_1,b_2,\cdots, b_mb1​,b2​,⋯,bm​ 的这 mmm 个同学的位置。要求 b1b_1b1​ 换到 b2b_2b2​ 的位置上,b2b_2b2​ 换到 b3b_3b3​ 的位置上,……,要求 bmb_mbm​ 换到 b1b_1b1​ 的位置上。执行每个命令都需要一些代价。我们假定如果一个命令要移动 mmm 个人的位置,那么这个命令的代价就是 mmm。我们需要佳佳用最少的总代价实现同学们的意愿,你能帮助佳佳吗? 选择的 mmm 个人不必连续。 tag: 环 Solution 发现如果有 kkk 个人在初始环和目标环中位置相等,那么剩下的人只需要移动 n−kn-kn−k 次即可,因为他们的移动一定可以组成环。 但是建出来的环不一定能使 kkk 取到最大值,所以可以通过类似转一下的方式。 初始环123456 目标环234561 差值111111 注意到相同差值的位置可以通过旋转变成 000,所以 kmaxk_{max}kmax​ 就是最多的相同差值的数量,答案即为 n−kmaxn-k_{max}n−kmax​。 考虑如何构造目标环,首先设 li,ril_i, r_ili​,ri​ 分别表示第 iii 个要求的相邻的点,钦定 an=l1,a1=1a_n=l_1, a_1=1an​=l1​,a1​=1。接下来,每次判断第 iii 点的相邻两数是否在环中,若不在则加入进去,然后继续寻找新加入的这个点额相邻两数,知道环中的节点数为 nnn。 注意计算差值时,不能直接 ai−ia_i-iai​−i,需要加 nnn 后  mod n\bmod{n}modn。另外需要分别计算初始环顺时针和逆时针排列的方式。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 for (int i = 1; i <= n; i++) { if ((i != l[ l[i] ] && i != r[ l[i] ]) || (i != l[ r[i] ] && i != r[ r[i] ])) { cout << -1 << endl; return 0; } } a.push_back(0); a.push_back(1);a.push_back(l[1]); vis[1] = vis[l[1]] = 1; int now = l[1]; while (a.size() != n + 1) { if (!vis[ l[now] ]) { a.push_back(l[now]); vis[l[now]] = 1; now = l[now]; } else if (!vis[ r[now] ]) { a.push_back(r[now]); vis[r[now]] = 1; now = r[now]; } } int maxn = 0; for (int i = 1; i <= n; i++) { t[(a[i] + n - i) % n]++; } for (int i = 0; i < n; i++) { maxn = max(maxn, t[i]); } for (int i = 0; i <= n; i++) t[i] = 0; for (int i = 1; i <= n; i++) { t[(a[i] + n - (n - i + 1)) % n]++; } for (int i = 0; i < n; i++) { maxn = max(maxn, t[i]); } cout << n - maxn << endl; AT_joi2015ho_c JOI Park Link ▶题意 时值 20XX20\text{XX}20XX 年,IOI 国为了给办奥赛做准备,将要修缮 IOI 国中的 JOI 公园。JOI 公园里有 NNN 个广场,这些广场从 111 到 NNN 编号。有 MMM 条道路连接各个广场,这些道路从 111 到 MMM 编号。第 i(1≤i≤M)i(1 \leq i \leq M)i(1≤i≤M) 条道路是一条连接第 AiA_iAi​ 和第 BiB_iBi​ 个广场的双向边,长度为 DiD_iDi​。任意两个广场间一定有道路(直接或间接)相连。 修缮计划如下:首先,选择一个自然数 XXX,将和第一个广场距离等于 XXX 或在 XXX 以下的所有广场(含第一个广场)相互之间连结一条地下通道。广场 iii 和广场 jjj 的距离指,从广场 iii 到广场 jjj 经过的道路长度总和的最小值。定义 CCC 为一个与修筑地下通道花费有关的量(CCC 是整数)。修筑所有地下通道的花费为 C×XC\times XC×X。 接下来,撤去已经通过地下通道连接的广场之间的道路。撤去道路的花费不计。 最后,将没有被撤去的道路进行修补,长为 ddd 的道路修补的花费为 ddd。 修缮计划实施之前,JOI 公园没有地下通道。请求出 JOI 公园修缮花费总和的最小值。 需要注意的是删除的道路不只是 1→u1\to u1→u,还包含 1→u→v(disu<disv)1\to u\to v(dis_u<dis_v)1→u→v(disu​<disv​)。 tag: 最短路 Solution 首先注意到选择的 XXX 一定是某一个点 uuu 到 111 节点的距离,所以先 Dijkstra 跑一遍预处理 disudis_udisu​,然后从小到大排序后枚举每个 disudis_udisu​ 来计算答案。比如样例中的遍历顺序为 1,3,2,4,51, 3, 2, 4, 51,3,2,4,5,可以发现,在枚举到靠后的节点时,它前面的所有点之间的路径都要被拆掉,这些点到当前节点的路径也要被拆掉(如果存在),所以当前拆掉的边可以由上一步拆掉的边转移而来,这也是从小到大的排序的意义。 一个例子,计算完 222 后,1→21\to 21→2 边会被删掉,按照上面的计算方法,下一步计算 333,此时应该拆掉 1→31\to 31→3 和 2→32\to 32→3。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #define int ll int n, m, c; struct node { int pos, dis; bool operator<(const node& x) const { return dis > x.dis; } }; struct edge { int v, w; }; vector<edge> e[N]; bitset<N> vis; node dis[N]; int sum = 0ll; void dij(int u) { for (int i = 1; i <= n; i++) { dis[i].dis = INF; } dis[1].dis = 0ll; priority_queue<node> q; q.push({1, 0}); while (!q.empty()) { int u = q.top().pos; q.pop(); if (vis[u]) continue; vis[u] = 1ll; for (auto x : e[u]) { int v = x.v, w = x.w; if (dis[v].dis > dis[u].dis + w) { dis[v].dis = dis[u].dis + w; if (!vis[v]) q.push({v, dis[v].dis}); } } } } signed main() { n = read(); m = read(); c = read(); for (int i = 1; i <= m; i++) { int u = read(), v = read(), w = read(); e[u].push_back({v, w}); e[v].push_back({u, w}); sum += w; } for (int i = 1; i <= n; i++) { dis[i].pos = i; } dij(1); sort(dis + 1, dis + n + 1); int minn = INF; int last = 0; vis.reset(); for (int i = n; i >= 1; i--) { int ans = dis[i].dis * c; ans += sum; vis[dis[i].pos] = 1; for (auto x : e[dis[i].pos]) { int v = x.v, w = x.w; if (vis[v]) last += w; } minn = min(minn, ans - last); } cout << minn << endl; return 0; } AGC001C Shorten Diameter 给定一颗 nnn 个节点的树,你需要删除一些叶子使得树的直径小于等于 kkk。求最少的删除的点的个数。 tag: 树的直径 Solution 将题目转化为寻找一个中心,使中心左右两边最多延伸 k2\dfrac{k}{2}2k​ 个节点,记能延伸到的节点数为 tottottot。删除的点即为 n−totn-totn−tot。 如果 kkk 是偶数,一定有一个中点,枚举中点即可。 如果 kkk 是奇数,一定有相邻的两个中点,枚举即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 int tot; void dfs(int u, int fa, int step) { tot++; if (step == 0) return; for (auto v : e[u]) { if (v == fa) continue; dfs(v, u, step - 1); } } int main() { int ans = INF; if (!(k & 1)) { for (int i = 1; i <= n; i++) { tot = 0; dfs(i, 0, k / 2); ans = min(ans, n - tot); } } else { for (int u = 1; u <= n; u++) { for (auto v : e[u]) { tot = 0; dfs(v, u, k / 2); dfs(u, v, k / 2); ans = min(ans, n - tot); } } } } P8677 [蓝桥杯 2018 国 A] 采油 Link tag: 贪心 Solution 第一问显然最优情况下答案为边权和的两倍。 考虑第二问,对于一个点 uuu,至少需要耗费 SuS_uSu​ 的人。 首先认为 Bu≥SuB_u\geq S_uBu​≥Su​,因为即使 Bu<SuB_u<S_uBu​<Su​,该节点也需要 SuS_uSu​ 的人。 若只有一个节点,那么耗费的人显然为 BuB_uBu​; 若有两个节点,不妨设为 xxx 和 yyy,且 Bx−Sx>By−SyB_x-S_x>B_y-S_yBx​−Sx​>By​−Sy​,即 xxx 剩下的人数比 yyy 多,那么感性理解肯定要先走 xxx,才能充分发挥剩余的人。试图证一下,先 xxx 后 yyy 的总花费为 max⁡{Bx,Bx+By−(Bx−Sx)}=max⁡{Bx,By+Sx}\max\{B_x, B_x+B_y-(B_x-S_x)\}=\max\{B_x, B_y+S_x\}max{Bx​,Bx​+By​−(Bx​−Sx​)}=max{Bx​,By​+Sx​},则先 yyy 后 xxx 的总花费为 max⁡{By,Bx+Sy}\max\{B_y, B_x+S_y\}max{By​,Bx​+Sy​},将上面的式子移项可得 By+Sx<Bx+SyB_y+S_x<B_x+S_yBy​+Sx​<Bx​+Sy​,结论得证; 将结论推广到同一层上有 kkk 个节点,可以通过两两依次缩点的形式转化为两个节点。 再考虑更一般的情况,在满足第一问的限制下,即按照最短路径,一定是先遍历完每个子树最短。所以搜到一个点时,先将这个点为根的所有子树缩点,按照剩余人数排序,递归继续缩点。 注意搜索时需要从 B−SB-SB−S 最大的点开搜。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 struct node { int b, s; bool operator<(const node &x) const { return b - s > x.b - x.s; } node operator+(const node &x) const { node res; res.b = max(b, s + x.b), res.s = s + x.s; return res; } }a[N]; node dfs(int u, int fa) { vector<node> p; p.push_back(a[u]); for (auto v : e[u]) { if (v == fa) continue; p.push_back(dfs(v, u)); } node res; res.b = res.s = 0; sort(p.begin(), p.end()); for (auto v : p) res = res + v; return res; } int main() { n = read(); int sum = 0; int maxn = 0, maxpos = 1; for (int i = 1; i <= n; i++) { a[i].b = read(); } for (int i = 1; i <= n; i++) { a[i].s = read(); a[i].b = max(a[i].b, a[i].s); if (a[i].b - a[i].s > maxn) { maxn = a[i].b - a[i].s; maxpos = i; } } for (int i = 1; i < n; i++) { int v = read(), w = read(); e[i + 1].push_back(v); e[v].push_back(i + 1); sum += w; } cout << sum * 2 << " " << dfs(maxpos, 0).b << '\n'; return 0; } P2659 美丽的序列 Link 给定一个序列,找到一个区间使得区间最小值与区间长度的乘积最大,输出乘积。 tag: 单调栈 Solution 维护区间最小值,想到用单调栈。 单调递增栈,当遍历后面的元素时,如果此时元素比之前元素最小值小,那么之前元素的最小值地位从当前元素开始失效,也就可以得到之前元素所管辖的区间右端点。同理,也可以找到当前元素管辖区间的左端点,即为弹栈后的栈顶,也就是前面第一个大于当前元素的位置。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 for (int i = 1; i <= n; i++) { q[i].l = 1, q[i].r = n; while (!st.empty() && a[st.top()] > a[i]) { q[st.top()].r = i - 1; st.pop(); } if (!st.empty()) q[i].l = st.top() + 1; st.push(i); } int ans = 0; for (int i = 1; i <= n; i++) { ans = max(ans, (q[i].r - q[i].l + 1) * a[i]); } P12177 [蓝桥杯 2025 省 Python B] 异或和 Link 求: ∑i=1n∑j=i+1n(ai⊕aj)×(j−i)\sum_{i=1}^{n} \sum_{j=i+1}^{n} (a_i \oplus a_j) \times (j - i)i=1∑n​j=i+1∑n​(ai​⊕aj​)×(j−i) tag: 二进制按位 Solution 按位考虑,注意到为 1⊕0=11\oplus0=11⊕0=1,也就是说只有两个数当前位不同才能产生贡献。 按位枚举,对于每一位的数正向扫,统计之前有多少个数可以产生贡献 numnumnum,和产生贡献数的位置和 lsumlsumlsum。 当前枚举到第 jjj 个数。 如果当前位为 000,那么产生的贡献为 2i×(j×num−lsum)2^i\times (j\times num - lsum)2i×(j×num−lsum); 如果为 111,各变量直接用总数减去 111 的即可。 时间复杂度 O(nlog⁡n)\mathcal{O}(n\log n)O(nlogn)。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 for (int i = 0; i <= 20; i++) { int lsum = 0, num = 0; for (int j = 1; j <= n; j++) { int v = ((a[j] >> i) & 1); if (!v) { ans += (1 << i) * (num * j - lsum); } else { ans += (1 << i) * ((j - 1 - num) * j - ((j - 1) * j / 2 - lsum)); num++, lsum += j; } } } P3831 [SHOI2012] 回家的路 Link 有一个 n×nn\times nn×n 的网格图,给定起点和终点,给定若干格点作为换乘站,非换乘站只能沿之前的方向行走,在换乘站可换向。 换乘花费为 111,行走一格花费为 222,求最小花费。 tag:分层图, 最短路 Solution 考虑将起点、终点和可换乘的格点作为节点,对两两直接可达的节点连边。 显然同一行或同一列内相邻两换乘站应当连边,想到分层图。 所有行为一层、所有列为一层建图。同时,上下两层对应相同的节点连边权为 111 的边表示可以换乘。在这个图上跑最短路即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 bool cmpx(node a, node b) { if (a.x != b.x) return a.x < b.x; else return a.y < b.y; } bool cmpy(node a, node b) { if (a.y != b.y) return a.y < b.y; else return a.x < b.x; } int main() { m = read(), n = read(); for (int i = 1; i <= n; i++) { int x = read(), y = read(); p[i].x = x, p[i].y = y, p[i].id = i; e[i].push_back({i + n + 2, 1}); e[i + n + 2].push_back({i, 1}); } p[0].x = read(), p[0].y = read(), p[0].id = 0; p[n + 1].x = read(), p[n + 1].y = read(), p[n + 1].id = n + 1; sort(p, p + n + 2, cmpy); for (int i = 0; i <= n; i++) { if (p[i].y == p[i + 1].y) { int dis = abs(p[i].x - p[i + 1].x); e[p[i].id].push_back({p[i + 1].id, 2 * dis}); e[p[i + 1].id].push_back({p[i].id, 2 * dis}); } } sort(p, p + n + 2, cmpx); for (int i = 0; i <= n; i++) { if (p[i].x == p[i + 1].x) { int dis = abs(p[i].y - p[i + 1].y); e[p[i].id + n + 2].push_back({p[i + 1].id + n + 2, 2 * dis}); e[p[i + 1].id + n + 2].push_back({p[i].id + n + 2, 2 * dis}); } } int ans = INF; w.s = 0; w.dij(); ans = min({w.dis[n + 1], w.dis[n + 1 + n + 2]}); w.s = n + 2; w.vis.reset(); w.dij(); ans = min({ans, w.dis[n + 1], w.dis[n + 1 + n + 2]}); cout << ans << endl; } P3594 [POI 2015 R3] 狼坑 Trous de loup Link 给定一个长度为 nnn 的序列,你有一次机会选中一段连续的长度不超过 ddd 的区间,将里面所有数字全部修改为 000。找到最长的一段连续区间,使得该区间内所有数字之和不超过 ppp。 tag: 双指针, 单调队列 Solution 首先容易得到,选择的区间长度一定为 ddd 最优。 考虑暴力,枚举左右端点和选择的区间,时间复杂度 O(n3)\mathcal{O}(n^3)O(n3)。 考虑优化,不难想到双指针,可以把暴力的枚举左右端点部分优化掉,时间复杂度 O(n2)\mathcal{O}(n^2)O(n2)。 观察最终答案的式子: max⁡l,r(r−l+1)s.t.∑i=lrwi−max⁡k∈[l,r−d+1]∑j=kk+d−1wj≤p\max_{l, r} \left(r - l + 1\right)\quad \text{s.t.} \quad\sum_{i=l}^r w_i - \max_{k\in \left[l, r - d + 1\right]}\sum_{j=k}^{k+d-1} w_j \leq pl,rmax​(r−l+1)s.t.i=l∑r​wi​−k∈[l,r−d+1]max​j=k∑k+d−1​wj​≤p 注意到复杂度瓶颈在于 max⁡k∈[l,r−d+1]∑j=kk+d−1wj\max_{k\in \left[l, r - d + 1\right]}\sum_{j=k}^{k+d-1} w_jmaxk∈[l,r−d+1]​∑j=kk+d−1​wj​ 的计算,发现可以用单调队列维护这个值。当右端点右移时,加入新的区间和,同时弹出不在区间内的区间和。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 deque<int> q; // [i - d + 1, i] q.emplace_back(d); int ans = d; for (int r = d + 1; r <= n; r++) { while (!q.empty() && sum[q.back()] - sum[q.back()-d] <= sum[r] - sum[r-d]) { q.pop_back(); } q.emplace_back(r); while (!q.empty() && q.front() - d + 1 < l) q.pop_front(); while (!q.empty() && sum[r] - sum[l-1] - (sum[q.front()] - sum[q.front()-d]) > p) { l++; while (!q.empty() && q.front() - d + 1 < l) q.pop_front(); } ans = max(ans, r - l + 1); } P10957 环路运输 Link 在一条环形公路旁均匀地分布着 NNN 座仓库,编号为 1∼N1 \sim N1∼N,编号为 iii 的仓库与编号为 jjj 的仓库之间的距离定义为 dist(i,j)=min⁡⁡(∣i−j∣,N−∣i−j∣)dist(i,j)=\min⁡(|i-j|,N-|i-j|)dist(i,j)=min⁡(∣i−j∣,N−∣i−j∣),也就是逆时针或顺时针从 iii 到 jjj 中较近的一种。每座仓库都有权 aia_iai​。 在 iii 和 jjj 两座仓库之间运送货物需要的代价为 ai+aj+dist(i,j)a_i+a_j+dist(i,j)ai​+aj​+dist(i,j)。求最大代价。 tag: 单调队列 Solution 首先断环为链,考虑化简最终答案的式子: fi,j=ai+aj+min⁡ ⁣(∣i−j∣,  n−∣i−j∣)(1≤j<i≤n)=ai+aj+(i−j)(1≤j<i≤2n,  i−j<⌊n2⌋)ans=max⁡1≤j<i≤2nfi,j=max⁡1≤j<i≤2n,i−j<⌊n2⌋(ai+i)+(aj−j).\begin{aligned}f_{i,j}&= a_i + a_j + \min\!\left( |i-j|,\; n - |i-j| \right) &&\left(1 \leq j < i \leq n\right) \\&= a_i + a_j + (i-j) &&\left(1 \leq j < i \leq 2n,\; i-j < \left\lfloor \frac{n}{2} \right\rfloor \right)\\\text{ans}&= \max_{1 \leq j < i \leq 2n} f_{i,j} \\&= \max_{1 \leq j < i \leq 2n, i-j < \left\lfloor \frac{n}{2} \right\rfloor} \left(a_i + i \right) + \left(a_j - j \right).\end{aligned}fi,j​ans​=ai​+aj​+min(∣i−j∣,n−∣i−j∣)=ai​+aj​+(i−j)=1≤j<i≤2nmax​fi,j​=1≤j<i≤2n,i−j<⌊2n​⌋max​(ai​+i)+(aj​−j).​(1≤j<i≤n)(1≤j<i≤2n,i−j<⌊2n​⌋) 注意到 (ai+i)(a_i + i)(ai​+i) 与 jjj 无关,可以枚举 iii,然后在 [i−⌊n2⌋,i−1]\left[i - \left\lfloor\dfrac{n}{2}\right\rfloor, i - 1\right][i−⌊2n​⌋,i−1] 范围内寻找 aj−ja_j - jaj​−j 的最大值,可以用单调队列维护这个值。 Core Code 1 2 3 4 5 6 7 8 9 10 for (int i = 1; i <= 2 * n; i++) { while (!q.empty() && i - q.front() > n / 2) { q.pop_front(); } if (!q.empty()) ans = max(ans, a[q.front()] - q.front() + a[i] + i); while (!q.empty() && a[q.back()] - q.back() <= a[i] - i) { q.pop_back(); } q.push_back(i); } P1948 [USACO08JAN] Telephone Lines S Link 给定一个简单无向图,有边权。最小化 1→n1\to n1→n 路径上第 k+1k + 1k+1 大的边权。 tag: 二分答案, 最短路 Solution 二分答案枚举答案 mid\text{mid}mid,将边权大于 mid\text{mid}mid 的边权设为 111,否则设为 000,然后跑最短路,判断 1→n1\to n1→n 最短路是否小于等于 kkk。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 auto check = [&](int mid) -> bool{ vector<int> dis(n + 1, numeric_limits<int>::max() / 2); vector<char> vis(n + 1); dis[1] = 0; priority_queue<Node> q; q.push(Node{1, 0}); while (!q.empty()) { int u = q.top().pos; q.pop(); if (vis[u]) continue; vis[u] = 1; for (auto x : e[u]) { int v = x.v, w = x.w; if (w > mid) w = 1; else w = 0; if (dis[v] > dis[u] + w) { dis[v] = dis[u] + w; if (!vis[v]) q.push(Node{v, dis[v]}); } } } if (dis[n] <= k) return true; else return false; }; int l = 0, r = MAXN; while (l < r) { int mid = (l + r) >> 1; if (check(mid)) r = mid; else l = mid + 1; } P10454 奇数码问题 Link 给定一个初始矩阵和一个目标矩阵。其中的 0 可以与其四联通的块交换位置。通过若干次操作,判断是否能从初始矩阵变为目标矩阵。 tag: 逆序对 Solution 考虑将矩阵按行展开为一维数组,忽略 0。 考虑两种操作:上下移动和左右移动。 左右移动:注意到元素在忽略 0 后相对顺序不变,所以不会改变逆序对数量的奇偶性; 上下移动:考虑一个元素 xxx 向上移动一格,有: 1 2 3 5 2 8 5 _ 8 1 _ 3 1 2 3 4 6 7 4 6 7 可以发现这样会对新位置与原位置之间的 n−1n-1n−1 个数产生的贡献造成影响,即原来的逆序对和非逆序对都会变成相反的关系。由于 nnn 是奇数,所以这样并不会改变逆序对数量的奇偶性。 所以,两矩阵可互相转化和充要条件是两序列的逆序对数量奇偶性相同。 P2512 [HAOI2008] 糖果传递 有 nnn 个小朋友坐成一圈,每人有 aia_iai​ 个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为 111。求最小代价使得每人糖果数相同。 tag: 贪心, 推式子 Solution 我们设每人最终糖果数为 xˉ\bar xxˉ,每人向左边传递的糖果数为 xix_ixi​,则有: {ai+xi+1−xi=xˉ,1≤i<nan+x1−xn=xˉ,i=n\begin{cases}a_i+x_{i+1}-x_i &= \bar x ,&& 1\leq i< n\\a_n+x_1-x_n &= \bar x ,&& i=n\\\end{cases}{ai​+xi+1​−xi​an​+x1​−xn​​=xˉ,=xˉ,​​1≤i<ni=n​ 对 1≤i<n1\leq i<n1≤i<n 简单变形,即有: xi+1=xˉ+xi−aix_{i+1} = \bar x+x_i-a_ixi+1​=xˉ+xi​−ai​ 将 x=i+1x=i+1x=i+1 带入到 x=i+2x=i+2x=i+2 的式子中,递推,化简可得: xn=(n−1)xˉ+x1−∑i=1n−1aix_n = (n-1)\bar x+x_1-\sum_{i=1}^{n-1}a_ixn​=(n−1)xˉ+x1​−i=1∑n−1​ai​ 设 ci=∑j=1iaj−ixˉc_i=\sum_{j=1}^{i} a_j-i\bar xci​=∑j=1i​aj​−ixˉ,则有: xi=x1−cix_i=x_1-c_ixi​=x1​−ci​ 题目要求最小化 ∑i=1n∣xi∣\sum_{i=1}^{n} |x_i|∑i=1n​∣xi​∣,即最小化 ∑i=1n∣x1−ci∣\sum_{i=1}^{n} |x_1-c_i|∑i=1n​∣x1​−ci​∣。注意到 ∑i=1n∣x1−ci∣\sum_{i=1}^{n} |x_1-c_i|∑i=1n​∣x1​−ci​∣ 在 x1x_1x1​ 处取得最小值时,x1x_1x1​ 为 cic_ici​ 的中位数。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 vector<int> sum(n + 1); for (int i = 1; i <= n; i++) { int a = read(); sum[i] = sum[i - 1] + a; } for (int i = 1; i <= n; i++) { c[i] = i * sum[n] / n - sum[i]; } sort(c.begin() + 1, c.begin() + n + 1); int ans = 0; int mid = c[(n + 1) >> 1]; for (int i = 1; i <= n; i++) { ans += abs(mid - c[i]); } P14401 [JOISC 2016] 电报 / Telegraph Link 有一个 nnn 个点的有向图,每个点的出度均为 111。给出这 nnn 个点初始指向的点 AiA_iAi​,和改变这个点指向的目标所需要的价值 CiC_iCi​。求让所有点强连通的最小花费。 tag: 贪心 Solution 首先题意可以转化为最小代价使得图变为包含所有 nnn 个点的大环。 考虑证明这一点:若存在一点 uuu 不在环上,则其一定指向环,但环上的点因为唯一出度已被占用而无法指回 uuu,所以图不连通。若存在多个环,环之间不连通。 将总代价转化为 ∑Ci\sum C_i∑Ci​ 减去保留下来的边代价和,即最大化保留下来的边的权值和。 我们想保留一些原始边,并添加一些新边(修改后的边)将他们连成一个大环,那么保留下来的边集一定满足: 不存在环。若存在一个环且环外有别的点,则该环无法通过加边与环外的点连通。 图中每个点入度不超过 111。因为在最终的大环中每个点入度为 111。 考虑贪心删掉不满足条件的边,显然对于一个入边数量大于 111 的节点 uuu,其所有入边中我们保留且一定保留权值最大的一条边。 经过上述操作,可以得到一个由若干个链和环构成的新图。我们仍需打破得到的环来满足要求。 仍然考虑贪心,对于每个环,可以干掉环上的一条边,或者其替换为原图中指向该点的次优边。对于环上的每个点,其换边的代价即为当前最优入边的权值 减 次优入边的权值。特别地,若仅有一条入边,代价即为该边权值。 特判初始即为一个大环的情况,因为此时我们无需将该环断掉重连。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 vector<vector<pair<int, int>>> in(n + 1); for (int i = 1; i <= n; i++) { int a = read(), c = read(); p[i] = Node{a, c}; sumc += c; in[a].emplace_back(make_pair(i, c)); } auto check = [&]() -> bool { for (int i = 1; i <= n; i++) { if (in[i].size() != 1) return 0; } vector<char> vis(n + 1, 0); int curr = 1, cnt = 0; while (!vis[curr]) { vis[curr] = 1; curr = p[curr].a; cnt++; } if (cnt == n) return 1; else return 0; }; if (check()) { cout << 0 << '\n'; return 0; } int sum = 0; vector<int> from(n + 1); for (int i = 1; i <= n; i++) { if (in[i].size() >= 1) { sort(in[i].begin(), in[i].end(), [](const pair<int, int>& x, const pair<int, int>& y){ return x.second > y.second; }); sum += in[i][0].second; from[i] = in[i][0].first; } } vector<int> vis(n + 1, 0); // 0: not visited, 1: in current path, 2: have visited for (int i = 1; i <= n; i++) { if (vis[i] == 2) continue; int curr = i; vector<int> nodes; nodes.reserve(n); while (curr != 0 && vis[curr] == 0) { vis[curr] = 1; nodes.emplace_back(curr); curr = from[curr]; } if (curr != 0 && vis[curr] == 1) { int minn = numeric_limits<int>::max() / 2; bool flag = 0; for (int nw : nodes) { if (nw == curr) flag = 1; if (!flag) continue; int diff = in[nw][0].second; if (in[nw].size() > 1) diff -= in[nw][1].second; minn = min(minn, diff); } sum -= minn; } for (int nw : nodes) { vis[nw] = 2; } } cout << sumc - sum << '\n';

2024/7/15
articleCard.readMore

动态规划 刷题记录

AT_DP_C Vacation 洛谷 Link ▶题意 有 NNN 天,对于每一天 iii(1≤i≤N1 \leq i \leq N1≤i≤N),可以选择以下活动之一: A:在海里游泳,获得幸福度 aia _ iai​。 B:在山上抓虫,获得幸福度 bib _ ibi​。 C:在家做作业,获得幸福度 cic _ ici​。 不能连续两天以上做同样的活动,计算最大总幸福度。 Solution DP 板子题。设 fi,jf_{i,j}fi,j​ 表示截止到第 iii 天时做第 jjj 件事的幸福值总和。 则易得转移方程为: fi,1=max⁡(fi−1,2,fi−1,3)fi,2=max⁡(fi−1,1,fi−1,3)fi,3=max⁡(fi−1,1,fi−1,2)f_{i,1}=\max(f_{i-1,2},f_{i-1,3})\\f_{i,2}=\max(f_{i-1,1},f_{i-1,3})\\f_{i,3}=\max(f_{i-1,1},f_{i-1,2})fi,1​=max(fi−1,2​,fi−1,3​)fi,2​=max(fi−1,1​,fi−1,3​)fi,3​=max(fi−1,1​,fi−1,2​) Core Code 1 2 3 4 5 6 for(int i=1;i<=n;i++) { f[i][1]=max(f[i-1][2],f[i-1][3])+a[i]; f[i][2]=max(f[i-1][1],f[i-1][3])+b[i]; f[i][3]=max(f[i-1][1],f[i-1][2])+c[i]; } AT_DP_K Stones 洛谷 Link ▶题意 NNN 个正整数组成的集合 A={a1,a2,…,aN}A = \{ a _ 1, a _ 2, \ldots, a _ N \}A={a1​,a2​,…,aN​}。太郎君和次郎君将用以下游戏进行对决。 首先,准备一个有 KKK 个石子的堆。两人依次进行以下操作。太郎君先手。 从集合 AAA 中选择一个元素 xxx,从石堆中恰好移除 xxx 个石子。 不能进行操作的人输掉游戏。当两人都按照最优策略行动时,判断谁会获胜。 Solution 显然当一名玩家操作完成后石子数量为 000,则这名玩家必胜。 设 fif_ifi​ 表示剩余 iii 枚石子当前操作的人的输赢情况 (1/01/01/0),可以发现当且仅当当前操作的上一步操作必输,当前操作才可以必胜,即如果有 aja_jaj​ 使得 fi−aj=0f_{i-a_j}=0fi−aj​​=0,则 fi=1f_i=1fi​=1。 初始化 f0=0f_0=0f0​=0,则有: fi={1,aj≤i,fi−aj=00,otherwise.f_i=\begin{cases}1,&a_j\leq i,f_{i-a_j}=0\\0 ,& \text{otherwise.}\end{cases}fi​={1,0,​aj​≤i,fi−aj​​=0otherwise.​ Core Code 1 2 3 4 5 6 7 8 f[0]=0; for(int i=1;i<=k;i++) { for(int j=1;j<=n;j++) { if(i-a[j]>=0 && !f[i-a[j]]) f[i]=1; } } AT_DP_M Candies Link KKK 颗糖分给 nnn 个人,第 iii 个人至少分得 000 颗,至多分得 aia_iai​ 颗,必须分完,求方案数,答案对 109+710^9+7109+7 取模。 tag: 背包 DP, 前缀和 Solution 类似背包的处理思路,设 fi,jf_{i,j}fi,j​ 表示第 iii 个人分完后已经分了 jjj 个糖,它可以由上一步的 (j−ai)∼j(j-a_i)\sim j(j−ai​)∼j 转移得到,所以 fi,j=∑k=max⁡(0,j−ai)jfi−1,kf_{i,j}=\sum^j_{k=\max(0,j-a_i)}f_{i-1,k}fi,j​=k=max(0,j−ai​)∑j​fi−1,k​ 考虑优化时间,滚动数组不可行。发现每一个 iii 对应的值都由 i−1i-1i−1 中连续一段的值转移而来,想到用滚动的前缀和维护 i−1i-1i−1 的所有 fff 值。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 int calc(int l,int r) { if(l==0) return sum[r]; return sum[r]-sum[l-1]; } int main() { f[0][0]=1; for(int i=1;i<=n;i++) { sum[0]=f[i-1][0]; for(int j=1;j<=m;j++) { sum[j]=(sum[j-1]+f[i-1][j]+mod)%mod; } for(int j=0;j<=m;j++) { f[i][j]=(calc(max(0ll,j-a[i]),j)+mod)%mod; } } printf("%lld\n",f[n][m]%mod); } AT_DP_P Independent Set Link 给一棵树,每一个点可以染成黑色或白色,任意两个相邻节点不能都是黑色,求方案数。 tag: 树形 DP Solution 设 fu,0/1f_{u,0/1}fu,0/1​ 表示 uuu 节点染成 W/B 颜色时的方案数。DFS 子树的方案数,可以得到: fu,0=∏v∈u(fv,0+fv,1)fu,1=∏v∈ufv,0\begin{aligned}f_{u,0}&=\prod_{v\in u}(f_{v,0}+f_{v,1})\\f_{u,1}&=\prod_{v\in u}f_{v,0}\end{aligned}fu,0​fu,1​​=v∈u∏​(fv,0​+fv,1​)=v∈u∏​fv,0​​ 注意 111 号点为根,输入无序需建双向边。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 void dfs(int u) { g.vis[u]=1; f[u][0]=f[u][1]=1; for(int i=0;i<e[u].size();i++) { int v=e[u][i]; if(!g.vis[v]) { dfs(v); f[u][0]=(f[u][0]*(f[v][0]+f[v][1]))%mod; f[u][1]=(f[u][1]*f[v][0])%mod; } } } AT_DP_Q Flowers Link 有一排花,共 nnn 个,第 iii 个的高度是 hih_ihi​,权值是 aia_iai​,保证高度互不相同。现在拿走一些花,使剩下的花高度单调递增,问剩下的花权值之和最大是多少。 tag: 线段树优化 DP Solution 带权的最长上升子序列,设 fif_ifi​ 表示第 iii 个元素结尾的最大答案,可以参照最长上升子序列写出转移方程 fi=max⁡j=1i−1{fj∣hj<hi}+aif_{i}=\max_{j=1}^{i-1}\{f_{j}|h_j<h_i\}+a_{i}fi​=j=1maxi−1​{fj​∣hj​<hi​}+ai​ 考虑优化,观察到转移方程是区间最大值,想到用值域线段树优化。将 hih_ihi​ 作为线段树的下标,对应当前高度时的 fif_ifi​。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 struct node { ll val; }t[N * 4]; struct tree { void pushup(int p) { t[p].val = max(t[p * 2].val, t[p * 2 + 1].val); } void modify(int p, int l, int r, int x, ll k) { if (l == r) { t[p].val = k; return; } int mid = (l + r) >> 1; if (x <= mid) modify(p * 2, l, mid, x, k); else modify(p * 2 + 1, mid + 1, r, x, k); pushup(p); } ll query(int p, int l, int r, int x, int y) { if (x <= l && r <= y) { return t[p].val; } ll res = 0; int mid = (l + r) >> 1; if (x <= mid) res = max(res, query(p * 2, l, mid, x, y)); if (y >= mid + 1) res = max(res, query(p * 2 + 1, mid + 1, r, x, y)); return res; } }sgt; int main() { n = read(); for (int i = 1; i <= n; i++) { h[i] = read(); } for (int i = 1; i <= n; i++) { a[i] = read(); } for (int i = 1; i <= n; i++) { f[i] = sgt.query(1, 1, n, 1, h[i]) + a[i]; sgt.modify(1, 1, n, h[i], f[i]); } cout << sgt.query(1, 1, n, 1, n) << endl; return 0; } AT_DP_T Permutation Link 有一个长为 NNN 的正整数排列。给定一个由 < 和 > 组成长为 N−1N-1N−1 的的字符串。对于任意满足 1≤i≤N−11 \le i \le N-11≤i≤N−1 的字符 sis_isi​,如果 sis_isi​ 是 < 则 Pi<Pi+1P_i<P_{i+1}Pi​<Pi+1​、如果 sis_isi​ 是 > 则 Pi>Pi+1P_i>P_{i+1}Pi​>Pi+1​。求满足这样的性质的排列 PPP 的方案数。 Solution 由于 ppp 是排列,我们不在意 ppp 中到底放了什么数,只需要关注当前一步放的数和上一步放的数的大小关系。可以得到状态 fi,jf_{i, j}fi,j​ 表示前 iii 个数形成的排列中,第 iii 个数是第 jjj 大的方案数。 在转移时,若当前填的数需大于前一个数,那么直接得到 fi,j=∑k=1j−1fi−1,k\displaystyle f_{i,j}=\sum_{k=1}^{j-1}f_{i-1,k}fi,j​=k=1∑j−1​fi−1,k​。 若小于前一个数,有 fi,j=∑k=ji−1fi−1,k\displaystyle f_{i,j}=\sum_{k=j}^{i-1}f_{i-1,k}fi,j​=k=j∑i−1​fi−1,k​。可以感性理解,由于前面一定有一个 rank 为 jjj 的数,当前数扔进去的时候,相当于是扔到了原有排列(1∼i−11\sim i-11∼i−1)中 rank 为 j−1j-1j−1 和 jjj 中间,所以说应该加上所有 rank 大于等于 jjj 的贡献,即 j∼i−1j\sim i-1j∼i−1。 注意到转移是求连续一段的和,前缀和优化即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sum[1] = 1; for (int i = 2; i <= n; i++) { for (int j = 1; j <= n; j++) { if (s[i - 1] == '<') { f[j] = (sum[i - 1] - sum[j - 1] + mod) % mod; } else { f[j] = sum[j - 1] % mod; } } for (int j = 1; j <= n; j++) { sum[j] = (sum[j - 1] + f[j]) % mod; } } int ans = 0; for (int i = 1; i <= n; i++) { ans = (ans + f[i]) % mod; } cout << ans % mod << '\n'; AT_DP_W Intervals Link 给定 mmm 条规则形如 (li,ri,ai)(l_i,r_i,a_i)(li​,ri​,ai​),对于一个 01 串,其分数的定义是:对于第 iii 条规则,若该串在 [li,ri][l_i,r_i][li​,ri​] 中至少有一个 1,则该串的分数增加 aia_iai​。 你需要求出长度为 nnn 的 01 串中的最大分数。 tag: 线段树优化 DP, 区间右端点排序 Solution 首先将区间按右端点排序,在右端点处统计答案。 考虑 DP,设 fi,jf_{i,j}fi,j​ 表示前 iii 个位置中最后一个 111 的位置为 jjj 的最大分数。 不难想到 fi,j=max⁡k=1jfi−1,k+∑lp≤k and rp=iap\displaystyle f_{i,j}=\max_{k=1}^j f_{i-1,k}+\sum_{l_p\leq k\text{ and }r_p=i} a_pfi,j​=k=1maxj​fi−1,k​+lp​≤k and rp​=i∑​ap​。即使 [l,r][l, r][l,r] 覆盖到 kkk 位置。 对上式进行优化,发现可以贪心的使 111 的位置尽量靠后,才能最大化 111 的数量,所以 fi,j=fi−1,j+∑lk≤j and rk=iak\displaystyle f_{i,j}=f_{i-1,j}+\sum_{l_k\leq j\text{ and }r_k=i}a_kfi,j​=fi−1,j​+lk​≤j and rk​=i∑​ak​。 优化后,会有 j=ij=ij=i 的特殊情况,此时上一步选的 111 可以在任意位置,取最大值即可。最终转移方程即为: fi,j={max⁡k=1j−1fi−1,k+∑rp=iap,i=jfi−1,j+∑lk≤j and rk=iak,i≠jf_{i,j}=\begin{cases}\max_{k=1}^{j-1} f_{i-1,k}+\sum_{r_p=i} a_p,&i=j\\f_{i-1,j}+\sum_{l_k\leq j\text{ and }r_k=i} a_k,&i\neq j\end{cases}fi,j​={maxk=1j−1​fi−1,k​+∑rp​=i​ap​,fi−1,j​+∑lk​≤j and rk​=i​ak​,​i=ji=j​ 滚动掉一维后,发现枚举位置 iii 时,如果 rj=ir_j=irj​=i,那么这段区间 [lj,rj][l_j, r_j][lj​,rj​] 会在 [lj,i][l_j, i][lj​,i] 中做出 aja_jaj​ 的贡献。扔到线段树上区间加区间查询最大值即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 struct query { int l, r, a; bool operator<(const query &x) const { return r < x.r; } }q[N]; struct node { int val, tag; }; struct tree { node t[4 * N]; void mktag(int p, int w) { t[p].val += w; t[p].tag += w; } void pushdown(int p) { if (t[p].tag) { mktag(p * 2, t[p].tag); mktag(p * 2 + 1, t[p].tag); t[p].tag = 0; } } void pushup(int p) { t[p].val = max(t[p * 2].val, t[p * 2 + 1].val); } void modify(int p, int l, int r, int x, int y, int w) { if (x <= l && r <= y) { mktag(p, w); return; } pushdown(p); int mid = (l + r) >> 1; if (x <= mid) modify(p * 2, l, mid, x, y, w); if (y >= mid + 1) modify(p * 2 + 1, mid + 1, r, x, y, w); pushup(p); } int query(int p, int l, int r, int x, int y) { if (x <= l && r <= y) { return t[p].val; } pushdown(p); int mid = (l + r) >> 1; int res = 0; if (x <= mid) res = max(res, query(p * 2, l, mid, x, y)); if (y >= mid + 1) res = max(res, query(p * 2 + 1, mid + 1, r, x, y)); return res; } }sgt; signed main() { n = read(); m = read(); for (int i = 1; i <= m; i++) { q[i].l = read(), q[i].r = read(), q[i].a = read(); } sort(q + 1, q + m + 1); int nw = 1; for (int i = 1; i <= n; i++) { if (i != 1) sgt.modify(1, 1, n, i, i, sgt.query(1, 1, n, 1, i - 1)); while (q[nw].r == i && nw <= m) { sgt.modify(1, 1, n, q[nw].l, i, q[nw].a); nw++; } } cout << max(0ll, sgt.query(1, 1, n, 1, n)) << endl; return 0; } TDPC_IWI イウィ 洛谷 Link 给定一个仅由字符 i\texttt{i}i 和 w\texttt{w}w 构成的字符串 sss。你可以进行若干次操作,每次从串中选取连续的三个字符 iwi\texttt{iwi}iwi 并删除;每次操作后这三个字符的左侧和右侧会连接在一起,得到一个长度比原来小 333 的新串。求可能的最大操作次数。 tag: 区间 DP Solution 区间 DP,类似合并石子。 我们定义 fi,jf_{i,j}fi,j​ 记录 iii 到 jjj 能删掉多少字符,显然最后答案应除以 333。 因为答案计算的是最大的步数,那么对于一个大区间,在一般情况下的答案就应该是其分成的两个小区间的答案之和。考虑枚举这两个区间之间的分界点 kkk,答案取最大值即可。 本题还需要特判一种特殊情况。如果 sis_isi​ 和 sjs_jsj​ 为 i,sks_ksk​ 为 w,且中间的两个小段可以被完全删除。那么,当中间的被删掉之后,左右的 i 和中间的 w 就会拼在一起,也可以删掉,那么这个区间的答案就应该是它的长度,但显然直接相加有可能会出错。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 for(int a=2;a<=len;a++) { for(int i=1;a+i-1<=len;i++) { int j=a+i-1; for(int k=i;k<j;k++) { f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]); if(s[i]=='i' && s[j]=='i' && s[k]=='w' && f[i+1][k-1] == k-i-1 && f[k+1][j-1] == j-1-k) { f[i][j]=j-i+1; } } } } write(f[1][len]/3); ABC247F Cards Link 给定 nnn 张卡片,每张卡片正反面各有一个数,给定每张卡片正面和反面的数,保证正面的数构成的序列,和反面的数构成的,分别均为 111 到 nnn 的排列,可以选择任意张卡片并获得其正反面的数,要求最终所有获得的数至少包含 111 到 nnn 每个数至少一次。求有多少种取法,对 998244353998244353998244353 取模。 tag: 并查集 Solution trick 题,记住。 想到在两个拥有相同数字的卡片连边,则一个边的两点中必须至少选一个。 由于每张卡有两个数,度数为二,则连完后必定会形成若干个简单环或自环。 根据乘法原理,对于每个环求出方案数后相乘后即为答案。 先上结论,设 fif_ifi​ 表示一个大小为 iii 的环的选择方案数,有如下转移: fi=fi−1+fi−2f_i=f_{i-1}+f_{i-2}fi​=fi−1​+fi−2​ 考虑证明它,设一个如下图的环,其中 others 表示剩余的所有点。 分类讨论,如果选 AAA 点,那么 BBB 和 CCC 点可以任取。转化为剩余一条不含 AAA 的链,这样不好考虑,将 BBB 和 CCC 连接起来,转化为少一个点的环,这个环的答案是 fi−1f_{i-1}fi−1​。但这样还少了一种 BBB 和 CCC 都不算的情况,考虑将 BBB 和 CCC 缩为一点,将个大点不选的方案数位 kkk。 如果不选 AAA 点,那么还是上面的链,但 BBB 和 CCC 必选,按照上面的处理方式,同样将 BBB 和 CCC 缩为一点,这个图的方案数是 fi−2f_{i-2}fi−2​。但这样多算了 BBB 和 CCC 都不选的贡献,可以发现这部分贡献就是 kkk。 所以可以得到: fi=fi−1+k̸+fi−2−k̸f_i=f_{i-1}+\not k+f_{i-2}-\not kfi​=fi−1​+k+fi−2​−k 用并查集存环即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 n = read(); for (int i = 1; i <= n; i++) fa[i] = i; for (int i = 1; i <= n; i++) { t[read()] = i; } for (int i = 1; i <= n; i++) { q[i] = read(); merge(i, t[ q[i] ]); } for (int i = 1; i <= n; i++) { siz[find(i)]++; } f[1] = 1ll, f[2] = 3ll; for (int i = 3; i < N; i++) { f[i] = (f[i - 1] + f[i - 2]) % mod; } int ans = 1ll; f[0] = 1ll; for (int i = 1; i <= n; i++) { ans = (ans * f[ siz[i] ] % mod + mod) % mod; } ABC336D Pyramid Link ▶题意 对于正整数 kkk,一个大小为 kkk 的“金字塔数列”为一个长度为 2k−12k-12k−1 的数列,里面的数字依次为 1,2,3,…k−1,k,k−1,…3,2,11,2,3,\dots k-1,k,k-1,\dots 3,2,11,2,3,…k−1,k,k−1,…3,2,1。 现在给一个长度为 nnn 的数列 SSS,你可以进行以下操作任意次,使得数列最后变为一个“金字塔数列”: 选择一个数 i(1≤i≤n)i(1 \le i \le n)i(1≤i≤n),把 SiS_iSi​ 减少 111。 删除整个数列的第一个或最后一个数字。 问最后生成的“金字塔数列”的最大的 kkk 是多少。 Solution 显然一个金字塔数列是由左右两部分拼接而成的。设 fif_{i}fi​ 表示前 iii 个数能组成左半部分的最长长度,gig_{i}gi​ 表示以 iii 为首的序列能组成右半部分的最长长度(差不多等价于后 iii 个数,但注意转移方程的写法)。一个明显的性质是如果满足可以构成长度为 xxx 的序列,那么一定可以通过删掉元素构成长度为 x−1x-1x−1 的序列,所以可以发现以 iii 为中间项的最长长度即为 min⁡{fi,gi}\min\{f_i, g_i\}min{fi​,gi​}。 以 fff 为例,假设 sis_isi​ 的所有值都是 +∞+\infty+∞,可以得到显然的转移方程 fi=fi−1+1f_{i}=f_{i-1}+1fi​=fi−1​+1。如果加上 sis_isi​ 的限制条件,那么 fi=min⁡{fi−1+1,si}f_i=\min\{f_{i-1}+1, s_i\}fi​=min{fi−1​+1,si​}。同理可得 gi=min⁡{gi+1+1,si}g_i=\min\{g_{i+1}+1, s_i\}gi​=min{gi+1​+1,si​}。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 n = read(); for (int i = 1; i <= n; i++) { a[i] = read(); } f[1] = g[n] = 1; for (int i = 2; i <= n; i++) { f[i] = min(f[i-1] + 1, a[i]); } for (int i = n - 1; i >= 1; i--) { g[i] = min(g[i+1] + 1, a[i]); } int ans = 0; for (int i = 1; i <= n; i++) { ans = max(ans, min(f[i], g[i])); } cout << ans << endl; SP703 Mobile Service Problem Link ▶题意 有 333 个流动员工,任何时刻只有一名员工可以移动,不允许同一位置上有 222 个及以上员工。 从位置 ppp 移动到位置 qqq 需要花费 c(p,q)c(p,q)c(p,q) 的价钱,不移动不需要花费(即 c(i,i)=0c(i,i)=0c(i,i)=0 )但不保证 c(p,q)=c(q,p)c(p,q)=c(q,p)c(p,q)=c(q,p)。 现在给出 NNN 个请求,第 iii 个请求发生在位置 xix_ixi​。公司必须按照顺序,派一名员工到位置 xix_ixi​,过程中不能去其他地方,也就是必须直接过去。 333 个流动员工的初始位置分别为 1,2,31,2,31,2,3。 求公司的最小花费。 tag: DP Solution 设 fi,x,y,zf_{i,x,y,z}fi,x,y,z​ 表示处理到第 iii 个请求,三个人分别在 x,y,zx,y,zx,y,z 位置上时的最小值。注意到三个人中一定会有一个人在上一个请求的位置,故状态可以优化为 fi,x,yf_{i,x,y}fi,x,y​,此时令 z=qi−1z=q_{i-1}z=qi−1​ 则有 fi+1,x,y=min⁡(fi+1,x,y,fi,x,y+cz,qi+1)fi+1,x,z=min⁡(fi+1,x,z,fi,x,y+cy,qi+1)fi+1,y,z=min⁡(fi+1,y,z,fi,x,y+cx,qi+1)f_{i+1,x,y}=\min(f_{i+1,x,y},f_{i,x,y}+c_{z,q_{i+1}})\\f_{i+1,x,z}=\min(f_{i+1,x,z},f_{i,x,y}+c_{y,q_{i+1}})\\f_{i+1,y,z}=\min(f_{i+1,y,z},f_{i,x,y}+c_{x,q_{i+1}})fi+1,x,y​=min(fi+1,x,y​,fi,x,y​+cz,qi+1​​)fi+1,x,z​=min(fi+1,x,z​,fi,x,y​+cy,qi+1​​)fi+1,y,z​=min(fi+1,y,z​,fi,x,y​+cx,qi+1​​) 初值 q0=1,f0,2,3=0q_0=1, f_{0,2,3}=0q0​=1,f0,2,3​=0。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 for(int i=0;i<n;i++) { for(int x=1;x<=l;x++) { for(int y=1;y<=l;y++) { int z=q[i]; if(x==y || x==z || y==z) continue; f[i+1][x][y]=min(f[i+1][x][y],f[i][x][y]+c[z][q[i+1]]); f[i+1][z][y]=min(f[i+1][z][y],f[i][x][y]+c[x][q[i+1]]); f[i+1][x][z]=min(f[i+1][x][z],f[i][x][y]+c[y][q[i+1]]); } } } int ans=INF; for(int x=1;x<=l;x++) { for(int y=1;y<=l;y++) { int z=q[n]; if(x==y || x==z || y==z) continue; ans=min(ans,f[n][x][y]); } } P4310 绝世好题 Link 和同类题 CF264B Good Sequences 给定一个长度为 nnn 的数列 aia_iai​,求 aia_iai​ 的子序列 bib_ibi​ 的最长长度 kkk,满足 bi and bi−1≠0b_i\ \text{and}\ b_{i-1} \neq 0bi​ and bi−1​=0,其中 2≤i≤k2\leq i\leq k2≤i≤k。 tag: 位运算, DP Solution 设 fif_{i}fi​ 表示最后一个数为 aia_iai​ 的最长长度,biti\text{bit}_ibiti​ 表示遍历到当前数二进制位 iii 为 111 的数量。 可以注意到只要两个数同一二进制位都为 111,那么他们与起来一定不等于 000。同时可以注意到上面的结论还可以传递,比如 (1000)2 and (1010)2 and (0010)2≠0(1000)_2\ \text{and}\ (1010)_2\ \text{and}\ (0010)_2\neq 0(1000)2​ and (1010)2​ and (0010)2​=0。 所以在每次循环时,先通过枚举 aia_iai​ 每一个二进制位更新 fif_ifi​,然后用当前情况的 fif_ifi​ 去更新 aia_iai​ 二进制为为 111 的 biti\text{bit}_ibiti​。 {fi=max⁡(fi,bitj)bitj=fi,ai and (1<<j)≠0\begin{cases}f_i&=\max(f_i, \text{bit}_j)\\\text{bit}_j&=f_i\end{cases}, a_i\ \text{and}\ (1<<j)\neq 0{fi​bitj​​=max(fi​,bitj​)=fi​​,ai​ and (1<<j)=0 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 for(int i=1;i<=n;i++) { for(int j=0;j<=32;j++) { if((1<<j)&a[i]) f[i]=max(f[i],bit[j]+1); } for(int j=0;j<=32;j++) { if((1<<j)&a[i]) bit[j]=f[i]; } } int ans=0; for(int i=1;i<=n;i++) { ans=max(ans,f[i]); } P1944 最长括号匹配 Problem Link ▶题意 对一个由 (,),[,] 括号组成的字符串,求出其中最长的括号匹配子串。 (),[] 是括号匹配的字符串。 若 A 是括号匹配的串,则 (A),[A] 是括号匹配的字符串。 若 A,B 是括号匹配的字符串,则 AB 也是括号匹配的字符串。 例如:(),[],([]),()() 都是括号匹配的字符串,而 ][,[(]) 则不是。 字符串 A 的子串是指由 A 中连续若干个字符组成的字符串,包含空串。 Solution 设 fif_ifi​ 表示到 sis_isi​ 时最长括号匹配,从头开始线性扫描,扫到后半括号时判断是否能组成匹配。 显然,当且仅当在其 前面括号匹配长度(fi−1f_{i-1}fi−1​)的前一个字符是同类型的前半括号(即类似 (xxx))。 由此可得式子 fi=fi−1+fi−fi−1−2+2f_i=f_{i-1}+f_{i-f_{i-1}-2}+2fi​=fi−1​+fi−fi−1​−2​+2。其中 i−fi−1−2i-f_{i-1}-2i−fi−1​−2 表示前半括号。 Core Code 1 2 3 4 5 6 7 8 9 10 11 for(int i=1;i<=n;i++) { if((s[i]==')' && s[i-f[i-1]-1]=='(') || (s[i]==']' && s[i-f[i-1]-1]=='[')) f[i]=f[i-1]+f[i-f[i-1]-2]+2; if(ans<f[i]) { ans=f[i]; last=i; } } for(int i=last-ans+1;i<=last;i++) { putchar(s[i]); } el; P1284 三角形牧场 Problem Link 给定多个线段,求全部使用情况下最大能围成的三角形周长。 tag: 背包 Solution 显然要用海伦公式求周长,那就需要枚举三角形三条边的长度。由于所有边都需要使用,可以优化为仅枚举两条边的长度。 设 fk,i,jf_{k,i,j}fk,i,j​ 表示第 kkk 个边时,是否存在一个两边长为 i,ji, ji,j 的三角形。 类似 01 背包思路,fkf_kfk​ 可以由 fk−1f_{k-1}fk−1​ 转移而来,当前的边可以加在 i,ji,ji,j 和第三条边上,也就可以由 fk−1,i−lk,j,fk−1,i,j−lk,fk−1,i,jf_{k-1, i-l_k, j}, f_{k-1, i, j-l_k}, f_{k-1, i, j}fk−1,i−lk​,j​,fk−1,i,j−lk​​,fk−1,i,j​ 转移而来 fk,i,j={true,fk−1,i−lk,j=true or fk−1,i,j−lk=true or fk−1,i,j=truefalse,otherwise.f_{k,i,j}=\begin{cases}\text{true}, &f_{k-1,i-l_k,j}=\text{true}\ \text{or}\ f_{k-1,i,j-l_k}=\text{true}\\text{or}\ f_{k-1,i,j}=\text{true}\\\text{false}, &\text{otherwise.}\end{cases}fk,i,j​={true,false,​fk−1,i−lk​,j​=true or fk−1,i,j−lk​​=true or fk−1,i,j​=trueotherwise.​ 同 01 背包一样,kkk 这一维可以滚动掉。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 bool check(int a,int b,int c) { if(a+b>c && a+c>b && b+c>a) return 1; else return 0; } double calc(double a,double b,double c) { double p=(a+b+c)/2.0; return 100.0*sqrt(p*(p-a)*(p-b)*(p-c)); } int main() { f[0][0]=1; for(int i=1;i<=n;i++) { for(int j=p;j>=0;j--) { for(int k=p;k>=0;k--) { if(j-l[i]>=0 && f[j-l[i]][k]) f[j][k]=1; if(k-l[i]>=0 && f[j][k-l[i]]) f[j][k]=1; } } } int ans=-1; for(int i=1;i<=p;i++) { for(int j=1;j<=p;j++) { if(check(i,j,p-i-j) && f[i][j]) ans=max(ans,(int)calc(i,j,p-i-j)); } } } P4084 [USACO17DEC] Barn Painting G Problem Link 给定一颗 NNN 个节点组成的树,你要给每个点涂上三种颜色之一,其中有 KKK 个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数。 tag: 树形 dp Solution 树形 DP,设 fi,jf_{i,j}fi,j​ 为 iii 节点颜色 jjj 的方案数。 若 iii 已经被染色 jjj 了,那显然 fi,j=1f_{i,j}=1fi,j​=1,其他为 000;若未被染色,则 fi,j=1,j∈[1,3]f_{i,j}=1, j\in [1,3]fi,j​=1,j∈[1,3]。 从下向上转移: {fu,1=∏v∈son(u)(fv,2+fv,3)fu,2=∏v∈son(u)(fv,1+fv,3)fu,3=∏v∈son(u)(fv,1+fv,2)\begin{cases}f_{u,1}=\prod_{v\in \text{son}(u)} (f_{v,2}+f_{v,3})\\f_{u,2}=\prod_{v\in \text{son}(u)} (f_{v,1}+f_{v,3})\\f_{u,3}=\prod_{v\in \text{son}(u)} (f_{v,1}+f_{v,2})\end{cases}⎩ ⎨ ⎧​fu,1​=∏v∈son(u)​(fv,2​+fv,3​)fu,2​=∏v∈son(u)​(fv,1​+fv,3​)fu,3​=∏v∈son(u)​(fv,1​+fv,2​)​ Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #define int ll vector<int> e[N]; int n,k; int f[N][5]; bool is_colored[N]; bool vis[N]; void dfs(int u) { vis[u]=1; for(int i=0;i<e[u].size();i++) { int v=e[u][i]; if(!vis[v]) { dfs(v); f[u][1]=(f[u][1]*((f[v][2]+f[v][3]+mod)%mod)+mod)%mod; f[u][2]=(f[u][2]*((f[v][1]+f[v][3]+mod)%mod)+mod)%mod; f[u][3]=(f[u][3]*((f[v][1]+f[v][2]+mod)%mod)+mod)%mod; } } } signed main() { n=read();k=read(); for(int i=1;i<n;i++) { int u=read(),v=read(); e[u].push_back(v); e[v].push_back(u); } for(int i=1;i<=k;i++) { int b=read(),c=read(); f[b][c]=1; is_colored[b]=1; } for(int i=1;i<=n;i++) { if(!is_colored[i]) f[i][1]=f[i][2]=f[i][3]=1; } dfs(1); printf("%lld\n",(f[1][1]+f[1][2]+f[1][3]+mod)%mod); return 0; } P2458 [SDOI2006] 保安站岗 Link 给定一颗树,每个点有点权 kkk,要求一条边的两个端点至少有一个被占用,求占用整棵树的代价的最小值。 tag: 树形 DP 与 P2016 战略游戏 不同,本题为守点。如 1-2-3-4 本题可以选择 1 和 4,但战略游戏不可。所以本题需要设这三个状态。 本题守点,意味着如果一个点不选,那么只需要与这个点相连的任一点选择即可,而守边则就需要与这个点相连的所有点都选。 Solution 首先不能将状态设为一个点被占或不占,这样会造成向上转移时父节点无法影响子节点。 设 fu,1/2/3f_{u,1/2/3}fu,1/2/3​ 表示 uuu 节点 自身被占用/被儿子覆盖/被父亲覆盖。 首先第一种情况显然 fu,1=∑v∈son(u)min⁡(fv,1,fv,2,fv,3)+kuf_{u,1}=\sum_{v\in \text{son}(u)}\min(f_{v,1}, f_{v,2}, f_{v,3})+k_ufu,1​=∑v∈son(u)​min(fv,1​,fv,2​,fv,3​)+ku​。 对于第三种情况,由于 uuu 被父亲覆盖,自身未被占用,那么就需要使 以 uuu 的儿子 vvv 为根的子树中的点都被覆盖。问题转化后,只有 vvv 自身被占用和 vvv 被儿子覆盖可以满足条件,即 fu,3=∑v∈son(u)min⁡(fv,1,fv,2)f_{u,3}=\sum_{v\in \text{son}(u)}\min(f_{v,1}, f_{v,2})fu,3​=∑v∈son(u)​min(fv,1​,fv,2​)。 对于第二种情况,分析方式类似第三种,首先要满足子树被覆盖。同时,要有至少一个 vvv 自身被占用,才能影响到 uuu。可以在上面的式子的基础上略加更改,若最小值全部被 fv,2f_{v,2}fv,2​ 取到,那么最后再加上所有 vvv 中 fv,1f_{v,1}fv,1​ 最小的一个即可。 最终答案即为 min⁡(froot,1,froot,2)\min(f_{\text{root},1}, f_{\text{root},2})min(froot,1​,froot,2​)。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 void dfs(int u,int fa) { int minn=INF; bool flag=0; for(auto v:e[u]) { if(v==fa) continue; dfs(v,u); f[u][1]+=min(f[v][1],min(f[v][2],f[v][3])); f[u][2]+=min(f[v][1],f[v][2]); f[u][3]+=min(f[v][1],f[v][2]); minn=min(minn,f[v][1]-f[v][2]); if(f[v][1]<f[v][2]) flag=1; } if(!flag) f[u][2]+=minn; } int main() { n=read(); for(int i=1;i<=n;i++) { int u=read(); k[u]=read(); int m=read(); f[u][1]=k[u]; for(int j=1;j<=m;j++) { int v=read(); e[u].push_back(v); e[v].push_back(u); } } dfs(1,0); cout<<min(f[1][1],f[1][2])<<endl; return 0; } P2016 战略游戏 Link 给定一颗树,一个节点可以看守相邻的所有边,求看守整棵树需要的最少的节点数。 tag: 树形 DP 本题与上一题不用的是,本题可以转化为一个点可以看守与这个点相连的所有边。 本题守边,意味着如果一个点不选,那么就需要与这个点相连的所有点都选,而守点则只需要与这个点相连的任一点选择即可。 Solution 设 fu,0/1f_{u,0/1}fu,0/1​ 表示 uuu 节点选 / 不选。 如果 uuu 不选,那么他的所有儿子必选,因为需要满足看守所有的边,fu,0=∑v∈son(u)fv,1f_{u,0}=\sum_{v\in \text{son}(u)} f_{v,1}fu,0​=∑v∈son(u)​fv,1​; 如果 uuu 选,那么他的儿子选不选并不重要,fu,0=∑v∈son(u)min⁡{fv,0,fv,1}f_{u,0}=\sum_{v\in \text{son}(u)}\min\{f_{v,0}, f_{v,1}\}fu,0​=∑v∈son(u)​min{fv,0​,fv,1​}。 Core Code 1 2 3 4 5 6 7 8 9 void dfs(int u,int fa) { f[u][1]=1; for(auto v:e[u]) { if(v==fa) continue; dfs(v,u); f[u][0]+=f[v][1]; f[u][1]+=min(f[v][0],f[v][1]); } } P3478 [POI2008] STA-Station Link 给出一个 nnn 个点的树,找出一个点,使以这个点为根的树所有点的深度之和最大 tag: 树形 DP, 换根 DP Solution 换根板子。 首先考虑如何暴力,显然是以每个点为根都跑一边 dfs,时间复杂度 O(n2)\mathcal O(n^2)O(n2)。 一般换根 DP 题的处理思路是: 先指定一个根节点,一次 dfs 自下而上,用子节点的值更新父节点; 从上一步的根出发,dfs 转移父节点对子节点的贡献。 设 fuf_{u}fu​ 为以 uuu 为根的深度和。运用人类智慧可以注意到 uuu 节点的值可以通过其父亲转移。如下图,我们已经处理好了 222 号节点的答案,那么发现以 444 为根的时,444 的子树(包括自己)的相对深度都减少了 111,而 444 上面的三个点深度都增加了 111。 可以得到转移方程: fv=fu−sizv×1+(n−sizv)×1=fu+n−2×sizvf_{v}=f_{u}-\text{siz}_{v}\times 1+(n-\text{siz}_{v})\times 1=f_u+n-2\times \text{siz}_vfv​=fu​−sizv​×1+(n−sizv​)×1=fu​+n−2×sizv​ 其中 sizv×1\text{siz}_v\times 1sizv​×1 表示 444 的子树,n−sizvn-\text{siz}_vn−sizv​ 表示 444 上面的点。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 void dfs1(int u,int fa) { g.siz[u]=1; for(auto v:e[u]) { if(v==fa) continue; g.dep[v]=g.dep[u]+1; dfs1(v,u); g.siz[u]+=g.siz[v]; } } void dfs2(int u,int fa) { for(auto v:e[u]) { if(v==fa) continue; f[v]=f[u]+n-2ll*g.siz[v]; dfs2(v,u); } } int main() { dfs1(1,0); for(int i=2;i<=n;i++) { f[1]+=g.dep[i]; } dfs2(1,0); ll ans=-INF,maxn=-INF; for(int i=1;i<=n;i++) { if(maxn<f[i]) { maxn=f[i]; ans=i; } } cout<<ans<<endl; return 0; } P3047 [USACO12FEB] Nearby Cows G Link 给你一棵 nnn 个点的树,点带权,对于每个节点求出距离它不超过 kkk 的所有节点权值和 mim_imi​。 tag: 换根 DP Solution 设 fu,df_{u,d}fu,d​ 为与 uuu 节点距离小于 kkk 的权值和。 两边 dfs,第一遍向上转移,计算子树对当前节点的贡献。注意到与 uuu 节点距离小于 kkk 的节点数可以由它的左右子树转移而来,等价于其与所有子节点距离小于 k−1k-1k−1 的节点数之和,得到 fu,d=∑v∈son(u)fv,d−1f_{u,d}=\sum_{v\in \text{son}(u)} f_{v,d-1}fu,d​=∑v∈son(u)​fv,d−1​。 第二遍时计算父亲对当前节点的贡献。同样可以由一的思路 fv,d=fu,d−1(v∈son(u))f_{v,d}=f_{u,d-1}(v\in \text{son}(u))fv,d​=fu,d−1​(v∈son(u)),但是注意到这样会重复计算子树中一部分的节点,因为到 uuu 距离为 ddd 的点包含到 vvv 距离为 d−1d-1d−1 的点,如下图的 f2,2f_{2,2}f2,2​ 就包含了 f3,1f_{3,1}f3,1​ 的贡献,所以我们简单容斥一下减去 fv,d−2f_{v,d-2}fv,d−2​ 的部分。 注意在进行第二遍 dfs 时,要注意循环顺序,防止容斥后的 fff 影响未更新的。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 void dfs1(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; dfs1(v, u); for (int d = 1; d <= k; d++) { f[u][d] += f[v][d-1]; } } } void dfs2(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; for (int d = 1; d <= k; d++) { f[v][d] += f[u][d-1]; } for (int d = k; d >= 2; d--) { f[v][d] -= f[v][d-2]; } dfs2(v, u); } } CF474E Pillars Link 给定序列长度为 nnn 的序列 aaa,和 ddd。 找出一个最长的 aaa 的子序列 bbb(设其长度为 mmm),使得对于任意的 1≤i<m1\le i\lt m1≤i<m,有 ∣bi+1−bi∣≥d|b_{i+1}-b_i|\ge d∣bi+1​−bi​∣≥d。 输出 mmm 和序列 bbb 在序列 aaa 中每个数的下标。 tag: 动态开点线段树, 线段树优化 DP Solution 设 fif_ifi​ 表示前 iii 位的最大长度,可以得到一个显然的转移方程 fi=max⁡∣bi−bj∣≥d{fj}+1=max⁡1≤j≤ai−d or ai+d≤j≤n{fj}+1\begin{aligned}f_i &= \max_{\lvert b_i - b_j\rvert \geq d}\{f_j\} + 1\\&=\max_{1\leq j\leq a_i - d\ \text{or}\ a_i + d\leq j\leq n}\{f_j\} + 1\end{aligned}fi​​=∣bi​−bj​∣≥dmax​{fj​}+1=1≤j≤ai​−d or ai​+d≤j≤nmax​{fj​}+1​ 考虑线段树优化掉两部分区间最值。使用权值线段树,每次计算完 iii 后把 fif_ifi​ 放到对应的 aia_iai​ 的位置即可。 数据范围过大,需动态开点或离散化。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 int n, d; int tot = 0; int rt; struct pr { int val, id; bool operator < (pr const& x) { return val < x.val; } }a[N], f[N], pre[N]; pr max(pr x, pr y) { if (x < y) return y; else return x; } struct node { pr val; int l, r; }t[40 * N]; struct tree { void pushup(int p) { t[p].val = max(t[t[p].l].val, t[t[p].r].val); } void modify(int &p, int l, int r, int x, pr w) { if (!p) p = ++tot; if (l == r) { if (t[p].val < w) t[p].val = w; return; } int mid = (l + r) >> 1; if (x <= mid) modify(t[p].l, l, mid, x, w); else modify(t[p].r, mid + 1, r, x, w); pushup(p); } pr query(int p, int l, int r, int x, int y) { if (!p || y < x) return {0, 0}; if (x <= l && r <= y) { return t[p].val; } int mid = (l + r) >> 1; pr res = {-INF, 0}; if (x <= mid) res = max(res, query(t[p].l, l, mid, x, y)); if (y >= mid + 1) res = max(res, query(t[p].r, mid + 1, r, x, y)); return res; } }sgt; signed main() { n = read(); d = read(); for (int i = 1; i <= n; i++) { a[i].val = read(); a[i].id = i; } pr maxn = {0, 0}; for (int i = 1; i <= n; i++) { f[i] = max(sgt.query(rt, 1, MAXN, 1, a[i].val - d), sgt.query(rt, 1, MAXN, a[i].val + d, MAXN)); bug(f[i].id); f[i].val += 1; maxn = max(maxn, {f[i].val, i}); sgt.modify(rt, 1, MAXN, a[i].val, {f[i].val, i}); } cout << maxn.val << endl; stack<int> st; for (int i = maxn.id; i >= 1; i = f[i].id) { bug(f[i].id); st.push(i); } while (!st.empty()) { cout << st.top() << " "; st.pop(); } return 0; } CF708C Centroids Link 给定一颗树,你有一次将树改造的机会,改造的意思是删去一条边,再加入一条边,保证改造后还是一棵树。 请问有多少点可以通过改造,成为这颗树的重心?(如果以某个点为根,每个子树的大小都不大于 n2\dfrac{n}{2}2n​,则称某个点为重心) tag: 树形 DP, 换根 DP Solution 根据重心的定义,如果一个点 uuu 不是重心,那么它的子树中一定有且仅有一个的 siz>⌊n2⌋siz > \lfloor\frac{n}{2}\rfloorsiz>⌊2n​⌋。如果想要把 uuu 变成重心,那么就需要在这个子树中找到一个更小的子树,把它接到 uuu 上,要解决的是是否存在一个这样的子树可以满足条件。 如果先将一个不需要操作即可满足条件的节点钦定为根,那么这棵树的所有子树都满足 siz≤⌊n2⌋siz\leq \lfloor\frac{n}{2}\rfloorsiz≤⌊2n​⌋。 所以,若在这棵新树上进行 DP,对于任何一个节点 uuu,如果它不是重心,只能因为除了它的子树以外的点数不满足要求,即 n−sizun - siz_un−sizu​。我们记录一个 gug_ugu​ 表示除了 uuu 子树以外的,不超过 ⌊n2⌋\lfloor\frac{n}{2}\rfloor⌊2n​⌋ 的最大子树大小,这个子树就是用来切下来挂到 uuu 上的。 那么,只需要判断除了上面这两部分一定合法的,剩下的那些点是否合法,即 n−sizu−gu≤⌊n2⌋n - siz_u - g_u \leq \lfloor\frac{n}{2}\rfloorn−sizu​−gu​≤⌊2n​⌋ 是否成立。 也就是说,问题转化为求 gug_ugu​。 考虑自上而下转移,gug_ugu​ 可能来自于(faufa_ufau​ 的子树)/(gfaug_{fa_u}gfau​​)/(除了子树以外所有)。由于第一种情况,还要记录一个 fuf_ufu​ 表示以 uuu 为根的子树中,不超过 ⌊n2⌋\lfloor\frac{n}{2}\rfloor⌊2n​⌋ 的最大子树大小。我们还可以发现,在转移 gug_ugu​ 时,可能 ffauf_{fa_u}ffau​​ 就表示 uuu 的子树,为了解决这种情况,需要记录最大值 fu,0f_{u, 0}fu,0​ 和次大值 fu,1f_{u, 1}fu,1​。 显然 fu,0f_{u, 0}fu,0​ 需要自下而上转移: fu,0={fv,0,sizv>⌊n2⌋sizu,sizv≤⌊n2⌋f_{u, 0}=\begin{cases}f_{v, 0}, &\text{siz}_v >\lfloor\frac{n}{2}\rfloor\\\text{siz}_u, &\text{siz}_v \leq\lfloor\frac{n}{2}\rfloor\end{cases}fu,0​={fv,0​,sizu​,​sizv​>⌊2n​⌋sizv​≤⌊2n​⌋​ 可以按下面的 trick 维护次大值,为了表示方便,用 xxx 表示需要被更新的数: {fu,1=fu,0,fu,0=x,fu,0<xfu,1=x,fu,0≤x<fu,1\begin{cases}f_{u, 1} = f_{u, 0}, f_{u, 0} = x, &f_{u, 0} < x\\f_{u, 1} = x, &f_{u, 0}\leq x < f_{u, 1}\end{cases}{fu,1​=fu,0​,fu,0​=x,fu,1​=x,​fu,0​<xfu,0​≤x<fu,1​​ 然后即可自上而下转移 gug_ugu​: gv=max⁡{fu,1,fu,0=sizvfu,0,fu,0≠sizvgun−sizv,n−sizv≤⌊n2⌋g_v=\max\begin{cases}f_{u, 1}, &f_{u, 0} = \text{siz}_v\\f_{u, 0}, &f_{u, 0} \neq \text{siz}_v\\g_u\\n - \text{siz}_v, &n - \text{siz}_v \leq \lfloor\frac{n}{2}\rfloor\end{cases}gv​=max⎩ ⎨ ⎧​fu,1​,fu,0​,gu​n−sizv​,​fu,0​=sizv​fu,0​=sizv​n−sizv​≤⌊2n​⌋​ Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 void findrt(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; findrt(v, u); siz[u] += siz[v]; if (siz[v] > n / 2) return; } if (n - siz[u] > n / 2) return; root = u; } void dfs1(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; dfs1(v, u); siz[u] += siz[v]; if (siz[v] > n / 2) { if (f[v][0] > f[u][0]) { f[u][1] = f[u][0]; f[u][0] = f[v][0]; } else if (f[v][0] > f[u][1]) { f[u][1] = f[v][0]; } } else { if (siz[v] > f[u][0]) { f[u][1] = f[u][0]; f[u][0] = siz[v]; } else if (siz[v] > f[u][1]) { f[u][1] = siz[v]; } } } } void dfs2(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; g[v] = max(g[v], g[u]); if (n - siz[v] <= n / 2) { g[v] = max(g[v], n - siz[v]); } if (f[u][0] == siz[v]) { g[v] = max(g[v], f[u][1]); } else { g[v] = max(g[v], f[u][0]); } dfs2(v, u); } if (n - siz[u] - g[u] <= n / 2 || u == root) ans[u] = 1; } int main() { n = read(); for (int i = 1; i < n; i++) { int u = read(), v = read(); e[u].push_back(v); e[v].push_back(u); } for (int i = 1; i <= n; i++) siz[i] = 1; findrt(1, 0); for (int i = 1; i <= n; i++) siz[i] = 1; dfs1(root, 0); dfs2(root, 0); for (int i = 1; i <= n; i++) { cout << ans[i] << " "; } el; } AT_joi2015ho_b Cake 2 Link nnn 个数 aia_iai​ 围成环,AAA 和 BBB 两人轮流取数,AAA 先取,两人都将采取最优策略,求最大化 AAA 取到的数的和。 tag: 区间 DP, 环 Solution 设 fi,jf_{i, j}fi,j​ 表示剩余的蛋糕区间为 [i,j][i, j][i,j] 时最大的答案,把 aaa 断环为链。 考虑如何转移,由于两人轮流取,需要分类讨论: 当前轮 AAA 取,剩余区间为 [l,r][l, r][l,r],显然一定满足的前提条件是 remain≡n(mod2)\text{remain}\equiv n \pmod 2remain≡n(mod2),其中 remain\text{remain}remain 表示的是剩余蛋糕区间长度(简单手玩即可得证)。此时,AAA 可以取 ala_lal​ 或 ara_rar​,此时 fl,r=max⁡{fl,r−1+ar,fl+1,r+al}f_{l, r}=\max\{f_{l, r-1}+a_r, f_{l+1, r}+a_l\}fl,r​=max{fl,r−1​+ar​,fl+1,r​+al​}。 当前轮 BBB 取,变量定义同上,前提条件为 remain\text{remain}remain 和 nnn 奇偶性不同。此时 BBB 一定取 max⁡{al,ar}\max\{a_l, a_r\}max{al​,ar​},那么留给 AAA 的就是其中较小的一个。 所以有如下方程: len≔l−r+1fl,r={max⁡{fl,r−1+ar,fl+1,r+al},len≡n(mod2)fl,r−1,al<ar and len≢n(mod2)fl+1,r,al>ar and len≢n(mod2)\text{len}\coloneqq l-r+1\\f_{l, r}=\begin{cases}\max\{f_{l, r-1}+a_r, f_{l+1, r}+a_l\}, &\text{len}\equiv n \pmod 2\\f_{l, r-1}, &a_l<a_r\ \text{and}\ \text{len}\not\equiv n \pmod 2\\f_{l+1, r}, &a_l>a_r\ \text{and}\ \text{len}\not\equiv n \pmod 2\end{cases}len:=l−r+1fl,r​=⎩ ⎨ ⎧​max{fl,r−1​+ar​,fl+1,r​+al​},fl,r−1​,fl+1,r​,​len≡n(mod2)al​<ar​ and len≡n(mod2)al​>ar​ and len≡n(mod2)​ 最后考虑边界,如果最后一轮是 AAA 取的,也就是 nnn 为奇数时,对于任意位置 iii,贡献都为 aia_iai​;反之由 BBB 取,那么贡献为 000。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 n = read(); for (int i = 1; i <= n; i++) { a[i] = read(); a[i + n] = a[i]; } a[0] = a[n]; if (n & 1) { for (int i = 1; i <= n * 2; i++) { f[i][i] = a[i]; } } for (int len = 2; len <= n; len++) { // len := remain cakes for (int l = 1; l + len - 1 <= n * 2; l++) { int r = l + len - 1; if ((len & 1) == (n & 1)) { // JOI f[l][r] = max({f[l][r], f[l + 1][r] + a[l], f[l][r - 1] + a[r]}); } else { // IOI if (a[l] < a[r]) f[l][r] = max(f[l][r], f[l][r - 1]); else f[l][r] = max(f[l][r], f[l + 1][r]); } } } int ans = 0; for (int i = 1;i <= n; i++) { ans = max(ans, f[i][i + n - 1]); } cout << ans << endl; P9759 [COCI2022-2023#3] Bomboni Link ▶题意 有 n×nn\times nn×n 的方格。目前在左上角。通过向右或向下移动,要前往右下角。目前所在的格子没有障碍。 在每个格子中写了一个数字表示此地为糖果或障碍。Iva 会吃掉所有经过的糖果(包括起点和终点的糖果)并且将糖果对应的数字相乘。Iva 知道她自己最喜欢的数字是 kkk,所以她希望这个乘积结果能被 kkk 整除。她想知道一共有多少条这样的路径。由于答案可能很大,她只想知道答案模 998244353998244353998244353 的结果。 tag: trick Solution 考虑从因数角度分析,发现只要一条路径上覆盖了 kkk 的因数,这条路径就是合法的。 设 fi,j,tf_{i, j, t}fi,j,t​ 为前 (i,j)(i, j)(i,j) 位置时 kkk 的因数剩余 ttt 的路径数量。那么每次转移,从上一步去掉 (i,j)(i, j)(i,j) 能贡献的因数,作为这次的答案。 最终答案即为 fn,n,1f_{n, n, 1}fn,n,1​。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 f[1][1][k / __gcd(a[1][1], k)] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i - 1 >= 1 && a[i][j] != -1) { for (auto x : f[i - 1][j]) { int nw = x.first / __gcd(x.first, a[i][j]); f[i][j][nw] = (f[i][j][nw] + x.second + mod) % mod; } } if (j - 1 >= 1 && a[i][j] != -1) { for (auto x : f[i][j - 1]) { int nw = x.first / __gcd(x.first, a[i][j]); f[i][j][nw] = (f[i][j][nw] + x.second + mod) % mod; } } } } CF360B Levko and Array Link 给定一个数列 aaa,可以对其中的元素做至多 kkk 次修改,每次修改可以将数列中的一个数改成另一个。 求经过修改后,max⁡i=2n∣ai−ai−1∣\max\limits^n_{i=2}\left|a_i-a_{i-1}\right|i=2maxn​∣ai​−ai−1​∣ 的最小值。 tag: 二分, trick Solution 注意到答案具有单调性,二分答案 xxx。 考虑 check() 函数的写法,首先可以将题目中要求的最多 kkk 次修改转化为至少保留 n−kn-kn−k 个数。 不妨进行 DP,设 fif_ifi​ 表示前 iii 个数中在保留 aia_iai​ 的情况下最多能保留的数量。两个数可以被保留,当且仅当 ∣aj−ai∣≤(j−i)×x\lvert a_j-a_i\rvert\leq (j-i)\times x∣aj​−ai​∣≤(j−i)×x。这个比较好感性理解,两个位置 (i,j)(i,j)(i,j) 之间有 j−i+1j-i+1j−i+1 个数,也就意味着有 j−ij-ij−i 个间隔,而这 j−ij-ij−i 个间隔中每个间隔最大的符合条件的差是 xxx。 那么式子就很显然了: fi=max⁡1≤j<i{fj+1∣∣aj−ai∣≤(j−i)×x}f_i=\max_{1\leq j<i}\{f_j+1 \big| \lvert a_j-a_i\rvert\leq (j-i)\times x\}fi​=1≤j<imax​{fj​+1 ​∣aj​−ai​∣≤(j−i)×x} Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 const int N = 2e3 + 10; const int MAXN = 2e9; int n, k; int a[N]; int f[N]; bool check(int x) { for (int i = 1; i <= n; i++) f[i] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j < i; j++) { if (abs(a[i] - a[j]) <= (i - j) * x) { f[i] = max(f[i], f[j] + 1); } } if (f[i] >= n - k) return 1; } return 0; } signed main() { n = read(); k = read(); for (int i = 1; i <= n; i++) { a[i] = read(); } int l = 0, r = MAXN; while (l < r) { int mid = (l + r) >> 1; if (check(mid)) r = mid; else l = mid + 1; } cout << l << endl; return 0; } P4158 [SCOI2009] 粉刷匠 Link 有 NNN 条木板需要被粉刷。每条木板被分为 MMM 个格子。 每个格子要被刷成 0/10/10/1。每次粉刷只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。只能粉刷 TTT 次,他最多能正确粉刷多少格子? tag: 背包 Solution 设 fi,jf_{i,j}fi,j​ 表示前 iii 行刷 jjj 次最多正确的格子数,发现这是一个背包,容易得到下面的转移: fi,j=max⁡1≤k≤j{fi−1,j−k+gn,k}f_{i,j}=\max_{1\leq k\leq j}\{f_{i-1,j-k}+g_{n, k}\}fi,j​=1≤k≤jmax​{fi−1,j−k​+gn,k​} 其中,gi,jg_{i, j}gi,j​ 表示当前行前 iii 格刷 jjj 次最多正确的格子数。它可以在每次枚举行的时候更新,有转移: gi,j=max⁡0≤l<i{gl,j−1+hl+1,i}g_{i,j}=\max_{0\leq l<i}\{g_{l, j-1}+h_{l+1,i}\}gi,j​=0≤l<imax​{gl,j−1​+hl+1,i​} 其中,hl,rh_{l, r}hl,r​ 表示当前行刷 [l,r][l, r][l,r] 时刷一次最多刷对的格子数,也就是区间中 000 和 111 数量的最大值。 只需要在背包的转移前维护一下 ggg 和 hhh 即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 for (int i = 1; i <= n; i++) { memset(g, 0, sizeof(g)); memset(maxn, 0, sizeof(maxn)); for (int l = 1; l <= m; l++) { for (int r = l; r <= m; r++) { int cnt0 = 0, cnt1 = 0; for (int p = l; p <= r; p++) { if (s[i][p] == '0') cnt0++; else cnt1++; } maxn[l][r] = max(cnt0, cnt1); } } for (int j = 1; j <= m; j++) { for (int k = 1; k <= t; k++) { for (int l = 0; l < j; l++) { g[j][k] = max(g[j][k], g[l][k - 1] + maxn[l + 1][j]); } } } for (int j = t; j >= 1; j--) { for (int k = 1; k <= j; k++) { f[j] = max(f[j], f[j - k] + g[m][k]); } } } P1156 垃圾陷阱 Link 卡门掉进深度为 DDD 英尺的垃圾井。她需要堆满垃圾,使垃圾高度 ≥D\geq D≥D 才能逃出。每个垃圾有扔下时间 ttt、堆放高度 hhh 和食用后维持生命时间 lll。卡门起始有 101010 小时的能量,101010 小时内若不进食将饿死。若体力为 0,吃垃圾或逃出井不会饿死。求卡门最早能逃出井的时间。 tag: 背包 Solution 看到两种选择,想到背包。用 fi,jf_{i, j}fi,j​ 表示前 iii 个物品堆放高度为 jjj 时的最大体力。 本题与普通 0/10/10/1 背包不同的地方在于,本题有两种情况的成立条件和贡献不同,需要分类讨论: 如果选择吃掉,那么 fi,j=fi−1,j+lif_{i,j}=f_{i-1,j}+l_ifi,j​=fi−1,j​+li​。需要满足转移前一步剩余的体力能够等到当前垃圾扔下,即 fi−1,j≥tif_{i-1,j}\geq t_ifi−1,j​≥ti​; 如果选择不吃,那么 fi,j=fi−1,j−hif_{i,j}=f_{i-1,j-h_i}fi,j​=fi−1,j−hi​​。需要满足转移前一步剩余的体力能够等到当前垃圾仍下,即 fi−1,j−hi≥ti (j≥hi)f_{i-1,j-h_i}\geq t_i\ (j\geq h_i)fi−1,j−hi​​≥ti​ (j≥hi​)。 需要特判 hi>dh_i>dhi​>d 的情况。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 memset(f, -INF, sizeof(f)); f[0] = 10; d = read(), g = read(); for (int i = 1; i <= g; i++) { a[i].t = read(), a[i].f = read(), a[i].h = read(); maxn = max(maxn, a[i].h); } sort(a + 1, a + g + 1); for (int i = 1; i <= g; i++) { for (int j = max(d, maxn); j >= 0; j--) { if (f[j] >= a[i].t) { f[j] = max(f[j], f[j] + a[i].f); } if (j >= a[i].h && f[j - a[i].h] >= a[i].t) { f[j] = max(f[j], f[j - a[i].h]); } } if (d > maxn) { if (f[d] >= 0) { cout << a[i].t << endl; return 0; } } else { for (int j = d; j <= maxn; j++) { if (f[j] >= 0) { cout << a[i].t << endl; return 0; } } } } P1772 [ZJOI2006] 物流运输 Link 物流公司要把一批货物从码头 111 运到码头 nnn。由于货物量比较大,需要 ttt 天才能运完。货物运输过程中一般要转停好几个码头。 每日会从 111 港口发货; 每日有可能会有港口封锁,封锁处不可走,需要换航线并加上换航线的成本。 tag: 最短路 Solution 首先想到可以对于每一天跑一遍最短路来预处理。 考虑 DP,设 fif_{i}fi​ 表示前 iii 天的最小成本。对于新的一天,有继续沿用之前的路线和走新的路线两种情况。所以设 minni,j\text{minn}_{i, j}minni,j​ 表示 iii 到 jjj 天走同一条路线的最短路径,显然可以对于每一个 i,ji, ji,j,跑一遍最短路预处理。此时有转移方程: fi=max⁡1≤i<j{fj+minnj+1,i×(i−j)+k}f_{i}=\max_{1\leq i<j}\{f_{j}+\text{minn}_{j+1, i}\times (i-j)+k\}fi​=1≤i<jmax​{fj​+minnj+1,i​×(i−j)+k} 另外还有前 iii 天都走同一条路的情况,fi=minn1,i×if_{i}=\text{minn}_{1,i}\times ifi​=minn1,i​×i。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 for (int i = 1; i <= d; i++) { p = read(), a = read(), b = read(); for (int j = a; j <= b; j++) { block[p][j] = 1; } } for (int i = 1; i <= t; i++) { for (int j = i; j <= t; j++) { mp.reset(); for (int p = 1; p <= n; p++) { for (int l = i; l <= j; l++) { if (block[p][l]) { mp[p] = 1; break; } } } minn[i][j] = dij(); } } for (int i = 1; i <= t; i++) { f[i] = minn[1][i] * i; } for (int i = 1; i <= t; i++) { for (int j = 1; j < i; j++) { f[i] = min(f[i], f[j] + minn[j + 1][i] * (i - j) + k); } } P3174 [HAOI2009] 毛毛虫 Link 给定一颗 nnn 个节点的多叉树,找出包含分支最多的一条链,输出节点数。其中分支只计算与链直连的节点。 tag: 树形 DP, 树的直径 Solution 考虑从当前节点能控制的下一层节点入手,如果当前节点 uuu 在链中,那么它所能控制的下一层节点数即为 degu−1\text{deg}_u-1degu​−1,其中 degu\text{deg}_udegu​ 表示 uuu 的度。也就是说,可以按树的直径的思路,两遍 dfs,在递归的过程中统计答案。 注意需要考虑根节点没有父亲所带来的影响,和 n=1n=1n=1 的特殊情况。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 void dfs(int u, int fa, int sum) { if (sum > maxd) { maxd = sum; maxpos = u; } for (auto v : e[u]) { if (v == fa) continue; dfs(v, u, sum + deg[u] - 1); } } int main() { n = read(), m = read(); if (n == 1) { cout << 1 << endl; return 0; } for (int i = 1; i <= m; i++) { int u = read(), v = read(); e[u].push_back(v); e[v].push_back(u); deg[u]++, deg[v]++; } dfs(1, 0, deg[1] - 1); maxd = 0; dfs(maxpos, 0, deg[maxpos] - 1); cout << maxd + 2 << '\n'; return 0; } P1131 [ZJOI2007] 时态同步 Link 给定一颗 nnn 个节点带边权的树,需要对于每颗子树调整根到叶子节点的路径 长度相等。每次操作可以对任意边权 +1+1+1。求最小操作次数。 tag: 树形 DP Solution 要使操作次数最小,对于每个子树,就要操作根节点下的第一条边。所以从下向上递归更新答案,对于每个节点 uuu 记录一个以 uuu 为根的子树到叶节点的最大距离。遍历个儿子,累加缺少的距离。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 void dfs(int u, int fa) { for (auto x : e[u]) { int v = x.v, w = x.w; if (v == fa) continue; dfs(v, u); f[u] = max(f[u], f[v] + w); } for (auto x : e[u]) { int v = x.v, w = x.w; if (v == fa) continue; ans += f[u] - (f[v] + w); } } CF1324F Maximum White Subtree Link 给定一棵 nnn 个节点无根树,每个节点 uuu 有一个颜色 aua_uau​,若 aua_uau​ 为 000 则 uuu 是黑点,若 aua_uau​ 为 111 则 uuu 是白点。 对于每个节点 uuu,选出一个包含 uuu 的连通子图,设子图中白点个数为 cnt1cnt_1cnt1​,黑点个数为 cnt2cnt_2cnt2​,请最大化 cnt1−cnt2cnt_1 - cnt_2cnt1​−cnt2​。并输出这个值。 tag: 换根 DP Solution 记 coloru\text{color}_ucoloru​ 表示 uuu 节点的颜色,黑白为 −1/1-1/1−1/1。 设 fuf_ufu​ 表示以 111 为根时 uuu 子树的贡献。自下向上转移,容易得到 fu=coloru+∑v∈son(u)max⁡{0,fv}f_u=\text{color}_u+\sum_{v\in \text{son}(u)}\max\{0, f_{v}\}fu​=coloru​+v∈son(u)∑​max{0,fv​} 考虑换根,设 gug_ugu​ 表示以 uuu 为根时的答案,答案分为两部分:以 uuu 为根的子树的贡献和剩余部分的贡献。第一部分显然为 fuf_ufu​,第二部分可以通过父亲的答案转移,也就是 gfau−fug_{fa_u}-f_ugfau​​−fu​。通过前面的式子可以知道,如果 fu<0f_u<0fu​<0,fuf_ufu​ 不会被记录到 ffauf_{fa_u}ffau​​ 中,也就是说,gfaug_{fa_u}gfau​​ 的答案不包含 fuf_ufu​。所以最终的式子 gu=fu+max⁡{0,gfau−max⁡{0,fu}}g_u=f_u+\max\{0, g_{fa_u}-\max\{0, f_u\}\}gu​=fu​+max{0,gfau​​−max{0,fu​}} Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void dfs1(int u, int fa) { f[u] = a[u]; for (auto v : e[u]) { if (v == fa) continue; dfs1(v, u); f[u] += max(0, f[v]); } } void dfs2(int u, int fa) { for (auto v : e[u]) { if (v == fa) continue; g[v] = f[v] + max(0, g[u] - max(0, f[v])); dfs2(v, u); } } g[1]=f[1] CF607B Zuma Link 给定一个序列,每次可删除任意长度的回文子串,最小化将序列清空的删除次数。 tag: 区间 DP Solution 设 fl,rf_{l,r}fl,r​ 表示清空 [l,r][l,r][l,r] 的最小操作次数。 最朴素的情况是枚举中间点,分成两部分来求,fl,r=min⁡{fl,i+fi+1,r}(i∈[l,r))f_{l,r}=\operatorname{min}\{f_{l,i}+f_{i+1,r}\}(i\in[l,r))fl,r​=min{fl,i​+fi+1,r​}(i∈[l,r))。 当 al=ara_l=a_ral​=ar​ 时, 有另外的情况: [l+1,r−1][l+1,r-1][l+1,r−1] 回文串,此时加上两端相等的值还是回文串; [l+1,r−1][l+1, r-1][l+1,r−1] 不是回文串,此时内部随便删,删到内部只剩一个的时候,又可以与两端构成回文串。 所以 fl,r=min⁡{fl,r,fl+1,r−1}(al=ar)f_{l,r}=\operatorname{min}\{f_{l,r},f_{l+1,r-1}\}(a_l=a_r)fl,r​=min{fl,r​,fl+1,r−1​}(al​=ar​)。 两情况取最小值即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 memset(f, INF, sizeof(f)); for (int i = 1; i <= n; i++) { a[i] = read(); f[i][i] = 1; } for (int len = 2; len <= n; len++) { for (int l = 1; l + len - 1 <= n; l++) { int r = l + len - 1; if (a[l] == a[r]) { if (len == 2) { f[l][r] = 1; } else { f[l][r] = f[l + 1][r - 1]; } } for (int i = l; i < r; i++) { f[l][r] = min(f[l][r], f[l][i] + f[i + 1][r]); } } } P1896 [SCOI2005] 互不侵犯 Link 在 N×NN \times NN×N 的棋盘里面放 KKK 个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 888 个格子。 tag: 状压 DP Solution 设 fi,S,jf_{i, S, j}fi,S,j​ 表示前 iii 行,当前行状态为 SSS,棋盘已经安排了 jjj 个国王的方案数。 首先看每行的约束条件,即若 xxx 位置有国王,那么 x−1,x,x+1x-1, x, x+1x−1,x,x+1 位置不能有国王。写为位运算形式即为 S&(S≪1)=0∧S&(S≫1)=0S \& (S \ll 1) = 0 \land S \& (S \gg 1) = 0S&(S≪1)=0∧S&(S≫1)=0 其次看行与行之间的约束条件,若 xxx 位置有国王,那么上一行的 x−1,x,x+1x-1, x, x+1x−1,x,x+1 位置不能有国王。若本行状态为 SSS,上一行状态为 TTT,则写为位运算形式为 S&(T≪1)=0∧S&T=0∧S&(T≫1)=0S \& (T \ll 1) = 0 \land S \& T = 0 \land S \& (T \gg 1) = 0S&(T≪1)=0∧S&T=0∧S&(T≫1)=0。 最后,容易得到转移方程: fi,S,j=∑Tfi−1,T,j−popcount(S)(S&(T≪1)=0∧S&T=0∧S&(T≫1)=0)f_{i, S, j} = \sum_{T} f_{i-1, T, j - \text{popcount}(S)} \quad (S \& (T \ll 1) = 0 \land S \& T = 0 \land S \& (T \gg 1) = 0)fi,S,j​=T∑​fi−1,T,j−popcount(S)​(S&(T≪1)=0∧S&T=0∧S&(T≫1)=0) Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 vector<vector<vector<int>>> f(n + 10, vector<vector<int>>((1 << n) + 10, vector<int>(k + 10, 0))); f[0][0][0] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j < (1 << n); j++) { // now if ((j & (j << 1)) || (j & (j >> 1))) continue; for (int l = 0; l < (1 << n); l++) { // last if ((l & (l << 1)) || (l & (l >> 1))) continue; if ((l & j) || (l & (j >> 1)) || (l & (j << 1))) continue; for (int cnt = __builtin_popcount(j); cnt <= k; cnt++) { f[i][j][cnt] += f[i - 1][l][cnt - __builtin_popcount(j)]; } } } } for (int i = 0; i < (1 << n); i++) { ans += f[n][i][k]; } P2014 [CTSC1997] 选课 Link 有 nnn 门课程,每门课程有学分 sis_isi​,每门课程有零门或一门先修课,有先修课的课程需要先学完其先修课,才能学习该课程。 一位学生要学习 mmm 门课程,求其能获得的最多学分数。 tag: 树上背包 Solution 首先可以将课程关系建树。发现如果 000 也算一个节点,那么这就是一棵以 000 为根的树。但这样会导致选择的课程数变成 m+1m+1m+1。 设 fu,if_{u, i}fu,i​ 表示以 uuu 为根的子树选择 iii 门课程时的最大学分数。对于每个儿子 vvv,可以枚举从 vvv 子树中选择 kkk 门课程,那么有转移: fu,i=max⁡0≤k<i{fu,i−k+fv,k}f_{u, i}=\max_{0\leq k<i}\{f_{u, i-k}+f_{v, k}\}fu,i​=0≤k<imax​{fu,i−k​+fv,k​} 意思是从以 uuu 为根的前半部分遍历过的子树中选择 i−ki-ki−k 门课程,加上从 vvv 为根的子树中选择 kkk 门课程。注意由于如果要选择一个节点,那么它到根节点路径上的所有节点都必须被选择,也就是说父节点必须要被选,所以 kkk 不能取到 iii。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void dfs(int u, int m) { for (auto v : e[u]) { dfs(v, m); for (int i = m; i > 0; i--) { for (int k = 0; k < i; k++) { f[u][i] = max(f[u][i], f[u][i - k] + f[v][k]); } } } } int main() { int n = read(), m = read(); for (int i = 1; i <= n; i++) { int k = read(); f[i][1] = read(); e[k].emplace_back(i); } dfs(0, m + 1); cout << f[0][m + 1] << '\n'; } P3177 [HAOI2015] 树上染色 Link 有一棵点数为 nnn 的树,树边有边权。给你一个在 0∼n0 \sim n0∼n 之内的正整数 kkk ,你要在这棵树中选择 kkk 个点,将其染成黑色,并将其他的 n−kn-kn−k 个点染成白色。将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的距离的和的收益。问收益最大值是多少。 tag: 树上背包 Solution 可以发现,一条边 u,vu, vu,v 经过的次数等于边的两侧同色点个数的乘积,即为: contribu,v=j×(k−j)+(sizv−j)×(n−k−(sizv−j))\text{contrib}_{u,v}=j\times (k-j) + (\text{siz}_v-j) \times \left(n-k-\left(\text{siz}_v-j\right)\right)\\contribu,v​=j×(k−j)+(sizv​−j)×(n−k−(sizv​−j)) 其中,jjj 表示以 vvv 为根的子树中黑点的个数。 设 fu,if_{u, i}fu,i​ 表示以 uuu 为根的子树中选择 iii 个黑点时的最大收益。那么有转移: fu,j=max⁡j=max⁡(i−sizu+sizv)min⁡(i,sizv)(fu,i−j+fv,j+contribu,v×wi)f_{u,j}=\max_{j=\max(i-\text{siz}_u+\text{siz}_v)}^{\min(i, \text{siz}_v)}\left(f_{u,i-j}+f_{v,j}+\text{contrib}_{u,v}\times w_i\right)fu,j​=j=max(i−sizu​+sizv​)maxmin(i,sizv​)​(fu,i−j​+fv,j​+contribu,v​×wi​) 这里 sizu\text{siz}_usizu​ 表示的是目前枚举到的 uuu 子树的大小,注意限上下界防止复杂度退化,具体分析。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 auto dfs = [&](auto&& self, int u, int fa) -> void { siz[u] = 1; for (auto x : e[u]) { int v = x.v, w = x.w; if (v == fa) continue; self(self, v, u); siz[u] += siz[v]; for (int i = min(k, siz[u]); i >= 0; i--) { for (int j = max(0ll, i - siz[u] + siz[v]); j <= min(i, siz[v]); j++) { int tot = j * (k - j) + (siz[v] - j) * (n - k - siz[v] + j); f[u][i] = max(f[u][i], f[u][i - j] + f[v][j] + w * tot); } } } P10982 Connected Graph Link 求 nnn 个结点的有标号无向连通图个数,n≤1000n\leq 1000n≤1000。 tag: 容斥, 计数 Solution 将题意转化为求 有 nnn 个节点的无向图总数 减去 不连通的无向图数量。 nnn 个点的无向图总数显然为 2(n2)2^{\binom{n}{2}}2(2n​)。因为一个简单无向图最多有 (n2)\binom{n}{2}(2n​) 条边,每条边可以选或不选。 考虑不连通的无向图数量。一个不连通的无向图可以分解为若干个连通块。我们可以枚举节点 111 所在的连通块大小为 jjj,从剩余的 n−1n-1n−1 个节点中选择 k−1k-1k−1 个节点与节点 111 组成一个连通块,然后剩余的节点可以组合成任意的简单无向图。我们设 fif_ifi​ 表示 iii 个节点的连通图数量,则: fi=2(i2)−∑j=1i−1(i−1j−1)×fj×2(i−j2)f_i=2^{\binom{i}{2}} - \sum_{j=1}^{i-1} \binom{i-1}{j-1}\times f_j\times 2^{\binom{i-j}{2}}fi​=2(2i​)−j=1∑i−1​(j−1i−1​)×fj​×2(2i−j​) Core Code 1 2 3 4 5 6 for (int i = 1; i <= n; i++) { f[i] = ksm(2, i * (i - 1) / 2) % mod; for (int j = 1; j <= i - 1; j++) { f[i] = (f[i] - (c[i - 1][j - 1] * f[j] % mod) * ksm(2, (i - j) * (i - j - 1) / 2) % mod + mod) % mod; } }

2024/10/11
articleCard.readMore

字符串算法全家桶 学习笔记

由字符串全家桶入门到字符串全家桶直僵僵地镶嵌在门框里。 哈希 Hash 翻译为散列表或杂凑函数,音译为哈希,也称 Hash 表。 散列表一般由 Hash 函数和链表结构共同实现完成。 ——我不知道来源。 哈希目的是把一些数据范围很大的数据(整数)或者描述保存比较复杂(字符串)利用 Hash 函数把信息映射到一个范围比较小容易维护的范围内(有点类似离散化),由于映射后的值域范围变小,有可能造成不同的原有不同信息映射为相同的值,造成冲突(映射中的多对一,一对一最理想但是有时候比较困难)。当然没有冲突是最理想的,但是关键在于 Hash 函数的选择,我们的目标是尽量减少冲突或没有冲突。 ——我也不知道来源。 引入 一个简单的例子,我们要查找一个集合内的所有元素,朴素的做法是一个一个遍历,而我们通过按照每个数的个位数字分类保存,再使用链表查找,效率会更高。 此时,按照个位数分类保存就是一个哈希函数 Hash⁡(x)=x mod 10\operatorname{Hash}(x)=x\bmod 10Hash(x)=xmod10。但是我们会发现,这种方式会发现多个数的哈希值相同,即存在很多冲突。如果 Hash⁡(x)=x mod 11\operatorname{Hash}(x)=x\bmod 11Hash(x)=xmod11,就会发现冲突少了很多。 哈希冲突的解决 解决哈希冲突两种常见的方法是闭散列和开散列。 闭散列 也叫开放地址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置(因为定义哈希表时大小肯定不能少于原始数据的个数),那么可以把 key 存放到冲突位置中的“下一个” 空位置中去。 ——我还不知道来源。 寻找下一个空位置的方法一般有两种,即线性探测和二次探测。 线性探测 从哈希函数确定的位置依次向后移动 1,2,…,n1, 2, \dots , n1,2,…,n 个位置,直到找到空位置为止。 二次探测 从哈希函数确定的位置依次向后移动 12,−12,22,−22,…,n1^2, -1^2, 2^2, -2^2, \dots , n12,−12,22,−22,…,n 个位置,直到找到空位置为止。 当然这些不是重点,重点在后面。 开散列 开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。这种方法类似图的邻接点存储,常用数组模拟。目前在实际应用中都是用这种方法。 ——The Same… 其实说人话就是通过像上面 引入 部分的图一样,通过对于每个 Hash 冲突的 Hash\text{Hash}Hash 值建立链表。 如 A={1,5,11,15,20,21,25}A=\{1,5,11,15,20,21,25\}A={1,5,11,15,20,21,25},哈希函数为 hash⁡(x)=x mod 10\operatorname{hash}(x)=x\bmod 10hash(x)=xmod10,则哈希表可用下图表示: 程序实现 哈希表定义 哈希表通常使用结构体定义,要分别记录哈希值、每个哈希值对应的数的个数和链表中下一个的位置,与邻接表(链式前向星)基本一致。 1 2 3 4 5 6 7 8 const int MOD=1e6+3; struct node{ int val; int siz; int nxt; }; node e[N]; int h[MOD]; 哈希的程序主要包含如下三个板块:哈希值计算、插入一个值、查找一个值。 哈希值的计算即为正常的取模运算。 插入函数 也与邻接表加边操作基本一致,不同之处在于如果碰到哈希值相同,应该使 sizi+1siz_i+1sizi​+1。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 void Insert(int x) { int w=x%MOD; for(int i=h[u];i;i=e[i].nxt) { if(e[i].val==x) { e[i].siz++; return; } } e[++tot].val=x;e[tot].siz=1; e[tot].nxt=h[u];h[u]=tot; } 查找函数 遍历链表,当 vali=xval_i=xvali​=x 时,直接返回元素个数即 sizisiz_isizi​,否则返回 000。 1 2 3 4 5 6 7 8 9 inline int Find(int x) { int w=x%MOD; for(int i=h[u];i;i=e[i].nxt) { if(e[i].val==x) return e[i].siz; } return 0; } 例题 已知方程如下: a1x1−a2x2+a3x3−a4x4+a5x5−a6x6=0a_1x_1-a_2x_2+a_3x_3-a_4x_4+a_5x_5-a_6x_6=0a1​x1​−a2​x2​+a3​x3​−a4​x4​+a5​x5​−a6​x6​=0 其中:x1,x2,…,x6x_1, x_2,\dots , x_6x1​,x2​,…,x6​ 是未知数,a1,a2,…,a6a_1, a_2,\dots , a_6a1​,a2​,…,a6​ 是系数,且方程中的所有数均为正整数。 求这个方程的正整数解的个数 sss。 对于 100%100\%100% 的数据,1≤xi≤m≤100,1≤ai≤106,s≤10151\leq x_i\leq m\leq 100, 1\leq a_i\leq 10^6, s\leq 10^{15}1≤xi​≤m≤100,1≤ai​≤106,s≤1015。 思路 考虑哈希。 将原式移项得: a1x1+a3x3+a5x5=a2x2+a4x4+a6x6a_1x_1+a_3x_3+a_5x_5=a_2x_2+a_4x_4+a_6x_6a1​x1​+a3​x3​+a5​x5​=a2​x2​+a4​x4​+a6​x6​ 通过枚举左式所有可能的情况,并将左式的结果记录在一个哈希表中,然后枚举右式的所有可能情况,查找哈希表中是否有这种情况的结果。 时间复杂度 O(m3)O(m^3)O(m3)。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 #define mod 1000007 #define int ll const int N=1e6+10; int m; struct node { int val,siz,nxt; }e[N]; int h[N],tot=0; int ans=0; int Hash(int x) { return x%mod; } void Insert(int x) { int w=Hash(x); for(int i=h[w];i;i=e[i].nxt) { if(e[i].val==x) { e[i].siz++; return ; } } e[++tot].val=x;e[tot].siz++; e[tot].nxt=h[w];h[w]=tot; } int Find(int x) { int w=Hash(x); for(int i=h[w];i;i=e[i].nxt) { if(e[i].val==x) return e[i].siz; } return 0; } signed main() { m=read(); int a1=read(),a2=read(),a3=read(),a4=read(),a5=read(),a6=read(); for(int x1=1;x1<=m;x1++) { for(int x3=1;x3<=m;x3++) { for(int x5=1;x5<=m;x5++) { Insert(a1*x1+a3*x3+a5*x5); } } } for(int x2=1;x2<=m;x2++) { for(int x4=1;x4<=m;x4++) { for(int x6=1;x6<=m;x6++) { ans+=Find(a2*x2+a4*x4+a6*x6); } } } write(ans);el; return 0; } 还有一道板子 P3370 【模板】字符串哈希,太板了就不写了。 字符串哈希 未完待续…… Trie 树 未完待续…… KMP KMP 算法是一种改进的字符串匹配算法,由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称 KMP 算法)。KMP 算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。 ——Baidu Baike。 朴素的字符串匹配 设模式串 ttt 长度为 nnn,主串 sss 长度为 mmm。 最暴力的方法显然是遍历 sss,逐位匹配 ttt 的前缀,当前缀长度为 nnn 时,即为成功匹配。 复杂度显然是 O(nm)O(nm)O(nm)。 KMP 算法思想 考虑这样一组匹配: 1 2 模式串:abbc 文本串:abbabbc 前四位均匹配成功,匹配第五位时发现失配。这时,我们直接将 模式串 向右移动三位,如下所示: 1 2 模式串: abbc 文本串:abbabbc 此时模式串完全匹配成功。 这种算法一定是快速的,所以算法关键部分就是移动位数的计算。 Border 计算部分 Border 在 KMP 算法的定义是:字符串 sss 的一个非 sss 本身的子串 ttt,满足 ttt 既是 sss 的前缀,又是 sss 的后缀的 ttt 的最大长度。 设 iii 为主串 sss 的指针,从 111 开始遍历;jjj 为此时前后缀的长度。 先手算模拟大致过程,以主串为 bbacbbb\texttt{bbacbbb}bbacbbb 为例: iii子串jjj 1b0 2b b1 3bba0 4bbac0 5b bac b1 6bb ac bb2 7bb acb bb2 Border 数组即为所有 jjj。同时,不难发现,iii 是后缀最后一位的下标(如果有),jjj 是前缀最后一位的下标。 接下来就是 Border 数组应该如何计算的问题: 我们以 i=5i=5i=5 为例,此时子串末尾增加了一个 b\texttt{b}b,si=s5=b,sj+1=s1=bs_i=s_5=b, s_{j+1}=s_1=bsi​=s5​=b,sj+1​=s1​=b,即此时 si=sj+1s_i=s_{j+1}si​=sj+1​。得出结论当 si=sj+1s_{i}=s_{j+1}si​=sj+1​ 时,borderi=jborder_i=jborderi​=j,同时 j+1j+1j+1; 当 i=7i=7i=7 时,子串末尾增加了一个 b\texttt{b}b,根据上文的算法,bba\texttt{bba}bba 与 bbb\texttt{bbb}bbb 匹配失败。但此时 jjj 不能直接设为 000,因为整个字串的后缀还可能匹配其前缀(也就是后缀的后缀可以匹配到对应前缀)。 有一个性质 如果一个模式串的后缀匹配了一个前缀,那么这个后缀的后缀一定在这个前缀中出现了,因此对于某个等于后缀的前缀,它就出现在了这个前缀中。 即 Border 的 Border 还是 Border。 通过这个性质,我们可以发现,在这种情况下,我们可以通过将 jjj 跳到 borderjborder_jborderj​ 上,继续向后查找。 这部分的代码,本质上是通过 sss 串自己和自己匹配实现的: 1 2 3 4 5 6 7 8 9 for(int i=2,j=0;i<=len2;i++) { while(j!=0 && s2[i]!=s2[j+1]) { j=border[j]; } if(s2[i]==s2[j+1]) j++; border[i]=j; } 匹配部分 匹配的部分与 Border 计算一样,只不过 Border 是匹配 sss 的前缀和 sss 后缀,而匹配则是比较 sss 和 ttt。 代码: 1 2 3 4 5 6 7 8 9 for(int i=1,j=0;i<=len1;i++) { while(j!=0 && (j==len2 || s1[i]!=s2[j+1])) { j=border[j]; } if(s1[i]==s2[j+1]) j++; if(j==len2) ans[++tot]=i-len2+1; } 板子 P3375 【模板】KMP 字符串匹配 模板题,上文两部分结合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 const int N=1e6+10; string s1,s2; int border[N],ans[N]; int tot=0; int main() { //freopen(".in","r",stdin); //freopen(".out","w",stdout); cin>>s1>>s2; int len1=s1.size(),len2=s2.size(); s1=" "+s1; s2=" "+s2; for(int i=2,j=0;i<=len2;i++) { while(j!=0 && s2[i]!=s2[j+1]) { j=border[j]; } if(s2[i]==s2[j+1]) j++; border[i]=j; } for(int i=1,j=0;i<=len1;i++) { while(j!=0 && (j==len2 || s1[i]!=s2[j+1])) { j=border[j]; } if(s1[i]==s2[j+1]) j++; if(j==len2) ans[++tot]=i-len2+1; } for(int i=1;i<=tot;i++) { write(ans[i]);el; } for(int i=1;i<=len2;i++) { write(border[i]);sp; } return 0; } 时间复杂度 匹配时当前匹配位置每次增加 111,也就是说一共的增加量就到 n+mn+mn+m,跳 Border 的减少也只能减少这么多,所以就是 O(n+m)O(n+m)O(n+m)。 ——zrz 参考链接 KMP字符串匹配算法 2 - Bilibili AC 自动机 是的它不能让你直接 AC 但能让你自动 WA。 前置知识 [Trie 字典树](#Trie 树) KMP 算法思想 AC 自动机其实可以理解成在字典树上运用 KMP 的思想进行字符串匹配。 KMP 是求单字符串的匹配,而 AC 自动机是求多字符串匹配一个字符串。 暴力的方法显然是有多少个字符串跑多少遍 KMP,但明显效率极低。而 AC 自动机,则是将所有的模式串构建成一颗 Trie 树。 比如模式串为 S={he,she,hers,his}S=\{\texttt{he},\texttt{she},\texttt{hers},\texttt{his}\}S={he,she,hers,his},则可以构建如下图的一棵 Trie 树。 Fail 指针 如果一个模式串的后缀是任何一个模式串的前缀,则将该后缀的 Fail 指针指向该前缀。 形式化的,即若 faili=jfail_i=jfaili​=j,则 1∼j1\sim j1∼j 节点的字符串是 1∼i1\sim i1∼i 节点的字符串的一个后缀。 也就是说,Fail 指针是指 最长的/可以在树上找到的/当前字符串的后缀/的末尾/的下标。例如,在上图中,fail9=4fail_9=4fail9​=4。 其实看起来与 KMP 中 Border 类似,只不过 AC 自动机是查找所有模式串中的 Border。 构建 Fail 接下来看如何求 Fail。 首先可以确定的一点是,所有第二层的节点的 Fail 一定指向 root,因为没有长度比 111 还小的字符串。 另外,如果一个点的父亲的 Fail 指针(即 fafailfafailfafail)指向的节点有与当前点相同的字符 iii,则当前点的 failfailfail 直接指向 iii,因为每次求出的 Fail 都是最长的,那最长的 Fail 加一个节点也是最长的。 而上文就表现出来一个问题,就是当求 Fail 时,需要知道当前节点父亲的 Fail,也就是说,我们需要 BFS 层次遍历来求 Fail。 我们可以建立一个 000 号节点,将其所有儿子指向 111,然后将 111 的 Fail 指向 000。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 void build_fail() { for(int i=0;i<26;i++) t[0].c[i]=1; queue<int> q; q.push(1); t[1].fail=0; while(!q.empty()) { int u=q.front(); q.pop(); for(int i=0;i<26;i++) { int fafail=t[u].fail; if(!t[u].c[i]) { t[u].c[i]=t[fafail].c[i]; continue; } t[t[u].c[i]].fail=t[fafail].c[i]; q.push(t[u].c[i]); } } } 查询 Fail 还是像 KMP 一样,如果可以匹配那就继续,如果不能匹配就跳 Fail。同时,我们可以把所有经过节点的 cntcntcnt 设为 −1-1−1,表示已经经过该节点。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int query(char *s) { int len=strlen(s+1),u=1,ans=0; for(int i=1;i<=len;i++) { int now=t[u].c[s[i]-'a']; while(now!=1 && t[now].cnt!=-1) { ans+=t[now].cnt; t[now].cnt=-1; now=t[now].fail; } u=t[u].c[s[i]-'a']; } return ans; } 板子 P3808 【模板】AC 自动机(简单版) 模板题,上文两部分结合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 #include<map> #include<cmath> #include<stack> #include<queue> #include<vector> #include<cstdio> #include<string> #include<iomanip> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define ull unsigned long long #define INF 0x3f3f3f3f #define mod 1000000007 #define bug(x) cout<<"Bug "<<(x)<<endl #define el putchar('\n') #define sp putchar(' ') using namespace std; inline int read() { int s=0,w=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } inline void write(int x) { if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); return; } const int N=1e6+10; struct node { int fail; int c[26]; int cnt; }t[N]; int tot=1; // int bro[N],son[N]; int n; char s[N]; void insert(char *s) { int len=strlen(s+1),now=1; for(int i=1;i<=len;i++) { if(t[now].c[s[i]-'a']==0) { t[now].c[s[i]-'a']=++tot; } now=t[now].c[s[i]-'a']; } t[now].cnt++; } void build_fail() { for(int i=0;i<26;i++) t[0].c[i]=1; queue<int> q; q.push(1); t[1].fail=0; while(!q.empty()) { int u=q.front(); q.pop(); for(int i=0;i<26;i++) { int fafail=t[u].fail; if(!t[u].c[i]) { t[u].c[i]=t[fafail].c[i]; continue; } t[t[u].c[i]].fail=t[fafail].c[i]; q.push(t[u].c[i]); } } } int query(char *s) { int len=strlen(s+1),u=1,ans=0; for(int i=1;i<=len;i++) { int now=t[u].c[s[i]-'a']; while(now!=1 && t[now].cnt!=-1) { ans+=t[now].cnt; t[now].cnt=-1; now=t[now].fail; } u=t[u].c[s[i]-'a']; } return ans; } int main() { n=read(); for(int i=1;i<=n;i++) { scanf("%s",s+1); insert(s); } build_fail(); scanf("%s",s+1); write(query(s));el; return 0; } 参考链接 [算法]轻松掌握ac自动机 - Bilibili 题解 P3808 【【模板】AC自动机(简单版)】 Manacher 用于在 Θ(n)\Theta(n)Θ(n) 的时间复杂度内寻找字符串 SSS 中最长回文子串的长度。 朴素算法 从 1∼n1\sim n1∼n 枚举一个中间点 ccc,然后以此枚举最大可行的回文串长度,最后计算答案。 这样做法的时间复杂度显然是 Θ(n2)\Theta(n^2)Θ(n2) 的,并不够优秀。 Manacher 算法 过程 不难发现,在上文的定义中,回文串长度的奇偶性可能会对算法造成一定影响, 为了统一和方便计算,需要在字符串两两字符之间插入不属于 SSS 字符集的字符。易证此时回文子串长度(包含插入的间隔字符)长度一定为奇数。下文的回文串均默认长度为奇数。 定义一个回文串的半径 d=⌈n2⌉d=\lceil \dfrac{n}{2}\rceild=⌈2n​⌉,左右端点下标分别为 l,rl, rl,r。 参照朴素算法的思路,对于每一个位置 iii,我们仍需要计算极大的 did_idi​,例如,S′= #a#b#b#aS^\prime=\text{~\#a\#b\#b\#a}S′= #a#b#b#a 的 ddd 序列如下: i0123456789 S′S^\primeS′~#a#b#b#a# ddd1121252121 如果已经计算出 ddd,其中最大的 di−1d_i-1di​−1 即为答案。 现在问题转化为如何高效地计算 ddd。注意到回文串具有一个极其优美的性质:若我们已知 ccc 是一个回文串的中心,jjj 也是一个回文串的中心,由于回文的对称,我们可以知道 iii 也是一个合法的回文串(如图)。通过这一操作可以减少重复检查。 现在假设下一步将计算 did_idi​,而 d1∼di−1d_1\sim d_{i-1}d1​∼di−1​ 已经被计算完成,同时维护已找到的最靠右的回文子串的边界 (lc,rc)(l_c,r_c)(lc​,rc​)(即具有最大 rrr 值的回文串,称此回文串 ccc 是极大的)。容易想到可以通过下面的方式实现: 如果 iii 位于当前极大的回文串外,即 i>rci>r_ci>rc​,由于 rcr_crc​ 右侧的字符未被检查过,只能用朴素算法求得 did_idi​; 若 i≤rci\leq r_ci≤rc​,就希望通过之前求得的 ddd 获取一些信息。由于上面的结论,似乎与 iii 关于 ccc 对称的回文串 jjj 的 djd_jdj​ 是可以转移到 did_idi​,思路如图 xxx 所示。然而,有可能 jjj 区间的左端点在区间 ccc 外,也就是 lj<lcl_j<l_clj​<lc​(如图)。此时串 jjj 在 lcl_clc​ 外的部分是否回文无法保证,正确的做法是应当尝试截断回文串,即 did_idi​ 只取确定回文的长度 rc−ir_c-irc​−i,然后继续用朴素算法尝试将其扩展至回文串外 时间复杂度分析 注意到每次计算时 rcr_crc​ 是单调不降的,且每个字符扩展比较的成本是常数。可以证明整个扫描过程中右边界最多只会被更新 Θ(n)\Theta(n)Θ(n) 次,因此总体比较次数是线性的。 核心代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 n = strlen(ss+1); s[0] = '~'; s[1] = '#'; for (int i = 1; i <= n; i++) { s[++m] = ss[i]; s[++m] = '#'; } maxr = 0, mid = 0, r[1] = 1; for(int i = 2; i <= m; i++) { if (i <= maxr) { r[i] = min(r[mid * 2 - i], maxr - i + 1); } while (s[i - r[i]] == s[i + r[i]]) { r[i]++; } if (i + r[i] - 1 > maxr) { maxr = i + r[i] - 1; mid = i; } } int ans = 0; for (int i = 1; i <= m; i++) { ans = max(ans, r[i]); } cout << ans - 1 << endl;

2023/7/10
articleCard.readMore

NOIP 2024 游记

私密版 Day -n 在跟着各种金牌爷集训,感觉后面题目难度有点高啊。而且强度很可以,到后面还挺累的,休息的也不算很好,rp--。 集训的时候到考场机房去了两次,发现机子有火绒会导致神奇问题。 Day 0 白天复健了一遍之前记的 DP 的笔记和各种 tricks,打了几个板子。 晚上试机,考场机子可以无常数 1s 8e8,取模也很快啊。但是 Windows 下用不了 gdb,而且键盘放的位置很奇怪。 晚上大概 10:30 睡的觉。 Day 1 考场安检非常的慢,非常早的进去以后突然发现没去上厕所,结果出去上了个厕所回来排安检的队硬是排到了快发压缩包密码,rp--。 赶紧解压看样例,没来得及瞪出来什么特别算法,感觉有一个是树上查询类似的。 开题,发现题面都很长,看了眼 t1 好像还是可做的,t2 题面描述过于复杂,t3 t4 神秘题。 开干 t1,草稿纸上手摸了一遍样例发现贪心的找非常正确,然后就开写。写了第一份发现细节处理写的非常史,小样例调过了,但被自己 hack 了。急急急,重构第二版,小样例过了,大样例过了 6/10 个点,急急急,此时已经过去了快 2hrs。 突然发现读错题了,没有注意到题面里甚至加粗加点的只能交换相邻两个。直接慌掉了,决定先把后面题能打的暴力打完再回来想 t1。 t2 又读了一遍发现暴力很可做啊,写了个 dfs 发现有一个多测过不去。感觉调这种不算特别小的数据会浪费很多时间,并且就错了一个点,决定静态查错,查不出来也先看后面的。确实没查出来。 t3 感觉特殊性质都是可做的,但是想第二个特殊性质的时候突然发现没看懂输入里边的编号是怎么定义的,到考试结束也没想明白是输入的边的顺序。输入理解不了只能打 4pts 跑路。 看时间不算很富裕,写 t4 暴力性价比也不算很高,先回去干 t1。手摸样例发现按 0 分段,每段能匹配则匹配,匹配不了的分到分界点上好像很正确,但是不会证。不管了先写,写+调了一会成功过掉了 8/10 个大样例。然后发现不管怎么 hack 都没 hack 掉,慌。 看 t4,暴力期望 8pts,开始实现,小样例过了,大样例全是 60 多,急急急。发现题没读错但是实现的时候,想成了一道机房出的类似题。赶紧改实现,改完以后测大样例,然而在 500 次询问中好像会有十位数次答案差一点,而且越靠后差的越多。仍然发现写的很对啊,急急急。 到现在基本不剩多长时间了。最后的几分钟大概就是 t1 t2 t4 切换着看希望能看出来一点问题。但最终还是没看出来。 出考场前,甚至出考场后的很长一段时间里,都始终认为 t1 是个橙题,不应该做不出来,所以把大量的时间花在了 t1 上,而不是甚至稍微想一下 t2 的正解。这次比赛算是比 CSP 有一定的改进,至少能先打出来每个题的暴力。 时间分配和读题方面还是有很大的问题,也没有想过 NOIP 会把一道简单乘法原理放到 t2 的位置。 中午吃饭时候看到洛谷难度是蓝绿紫紫,突然发现了考试的时候安排是多么的唐。看到 u 群和洛谷群里在说的 t1 的解法好像和我的差不多,但为什么过不去大样例。 这下真的随机得分了,(∼80)+(∼10)+4+(∼0)(\sim80)+(\sim 10)+4+(\sim 0)(∼80)+(∼10)+4+(∼0),希望 t1 数据多测能给的不那么强。 出成绩了,这下这下了。

2024/12/6
articleCard.readMore

集训记录

P4823 贪心按 a+ba+ba+b 从小到大排序,小的先走,正确性反证得到: 设有两个人 iii 和 jjj,且 ai+bi>aj+bja_i+b_i>a_j+b_jai​+bi​>aj​+bj​,且两人出去的顺序为 i→ji\to ji→j,也就是高的在上面。 那么,现在交换两个人,按照反证的假设如果原来 iii 和 jjj 都能出去,那么现在只有 iii 能出去,且根据题意,其一定能出去; 若 jjj 现在都出不去,那么由于 jjj 比 iii 高,那么在不交换前,两人基准位置相同,更矮的 iii 一定出不去。矛盾,得证。 转化为选 iii 踮脚或逃的背包。fi,jf_{i,j}fi,j​ 表示前 iii 个人总高度为 jjj 最多逃多少人。注意到 jjj 可能很大,考虑把结果和状态换一下,fi,jf_{i,j}fi,j​ 表示前 iii 个人,逃 jjj 个能搭起来的最大高度。 f0≔∑i=1naifj=fj−1−ai (fj−1+bi≥h)f_0\coloneqq \sum_{i=1}^{n}a_i\\f_{j}=f_{j-1}-a_i\ (f_{j-1}+b_i\geq h)f0​:=i=1∑n​ai​fj​=fj−1​−ai​ (fj−1​+bi​≥h) 模拟赛 T2 给定一棵树,求一个删边的构造,使得任意删除新的图中的一条边图仍然联通。 [证明] 设叶子 mmm 个,则答案数 ⌈m2⌉\lceil \dfrac{m}{2}\rceil⌈2m​⌉。 按 dfn 对叶子节点编号,则每次删的边构造可以为 i→i+⌊m2⌋i\to i+\lfloor\dfrac{m}{2}\rfloori→i+⌊2m​⌋。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 bitset<N> leaf; vector<int> dfn; void dfs(int u, int fa) { if (leaf[u]) dfn.push_back(u); for (auto v : e[u]) { if (v == fa) continue; dfs(v, u); } } int main() { n = read(); for (int i = 1; i < n; i++) { int u = read(), v = read(); e[u].push_back(v); e[v].push_back(u); } int m = 0; for (int i = 1; i <= n; i++) { if (e[i].size() == 1) { leaf[i] = 1; m++; } } dfs(1, 0); cout << ((m + 1) >> 1) << '\n'; for (int i = 0; i <= (m >> 1) - 1; i++) { cout << dfn[i] << " " << dfn[i + (m >> 1)] << '\n'; } if (m & 1) { cout << dfn.front() << " " << dfn.back() << '\n'; } return 0; } CF1251D 二分枚举中位数,考虑贪心地 check。将要求转化为一段段区间,对于一个区间 iii,有三种情况:中位数大于/小于区间或在区间内。 对于前两种情况,一定不会产生中位数,为了省钱选下界; 对于第三种情况,因为此时剩余数量已经确定,故对于一半的数选中位数,另外全选下界。选下界的这一半为了省钱,在下界相对小的区间选。 check 过程中判一下如果前两种情况的数量大于中位数一定不合法即可。

2024/11/20
articleCard.readMore

CSP2024 游记

Day -INF 初赛。过了。 Day 0 下午到日照,在酒店把之前 Blog 上记的东西口胡了一遍。 晚上去考场试机,怎么还要模拟考试流程不让带包还要查身份证准考证。 屏幕太刺眼换了个显示器,试的时候发现没有 Linux 虚拟机测不了编译,不过倒是有 Excel 方便打草稿。 机子还可以一秒 6×1086\times 10^86×108。 Day 1 上午继续复健。 下午到考场,发了压缩包密码先看样例,似乎没发现字符串和大模拟,看文件名也没看出来什么算法。 开题,先扫了一遍,t1 很可做,t2 好像可以数据结构?t3 一眼 DP,t4 题面过长神秘题。 t1 看小样例直接写了个判定当前数能否被下一个数干掉的东西,发现大样例过不去。手模一下发现还可以被更多的后面的数干掉,瞪了几分钟瞪出来了大概是求众数出现次数。感觉证明比较显然没仔细证,大样例过了。 t2 显然对于每一个车可以处理出区间,就变成了区间和点的问题。想的时候不知道为什么按照一开始的想法直接按数据结构想的,发现第一问可以线段树维护,第二问好像数据结构搞不了。直接上手搞区间和第一问,因为担心精度问题直接手写的整型取整,写完后发现测样例的区间不对,才注意到是开区间并且有不能整除的情况要分加速减速特判,写完后已经过了近 1hr。想到第二问似乎可以贪心的去搞,但是害怕后面打不完先开 t3。 t3 直接大力 DP 用 fi,0/1f_{i,0/1}fi,0/1​ 表示前 iii 个数最后一个是 0/10/10/1 的最大得分,实现了一下样例答案对了但过程和样例解释不一样,对着样例解释调了至少 10min,才注意到样例解释里 111 和 222 全写反了。测大样例发现过不去,推了一会以为式子写假了,赶紧写个 dfs 跑路回去看 t2。 t2 贪心实现了第二问,还是过不去大样例,瞪了一会发现多测没清空。改之后只能过匀速的特殊性质。此时剩的时间已经不是很充裕了,开始慌。后来改了一些东西,仍然过不去还剩半小时左右。 尝试打 t4 暴力,仔细读题并不是很好实现,特殊性质 A 是可做的。大概写了十几行看到剩的时间不多了,又听到监考一直在说要每个人检查文件,感觉写不完了。把文件整了一遍,听到说最后五分钟在关闭所有窗口并且手离开键盘鼠标的情况下打开 D 盘。文件没问题就照做了。 出考场越发感觉 t2 很典的东西没有写出来比较抽象,放掉 t3 的暴力 DP 也并不是一个很好的选择。时间主要就浪费在 t2 和 t3 互相调不出来的左右横跳上,这次比赛甚至是正式比赛中唯一一次没有去厕所缓一下的。越到后面心态越炸反而越写不出来。晚上连夜回济南,在车上看 u 群发现想的基本都是正解,就是实现太差。并且貌似人均 300。期望只有 100+[10,20]+20+0=[130,140]100+[10,20]+20+0=[130,140]100+[10,20]+20+0=[130,140] 了。 Day 2 重写了一遍 t2 非常快的过掉了,并且发现死因是计算区间的时候开区间的向下取整,当正好可以整除时没有 −1-1−1。 另外好像 t2 考场代码时间复杂度比较炸。

2024/10/28
articleCard.readMore

数论 学习笔记

欧几里得算法 就是求最大公约数的辗转相除法。 数学公式 gcd⁡(a,b)={gcd⁡(b,a mod b),b≠0a,b=0\gcd(a, b)=\begin{cases}\gcd(b,a\bmod b) &,b\neq 0\\a &,b=0\end{cases}gcd(a,b)={gcd(b,amodb)a​,b=0,b=0​ 模板 1 2 3 4 5 int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } 拓展欧几里得(exgcd) 适用问题 给定正整数 a,ba,ba,b,求出 ax+by=gcd⁡(a,b)ax+by=\gcd(a,b)ax+by=gcd(a,b) 的一组正整数解。 算法思路 由欧几里得算法得出 ax+by=gcd⁡(a,b)=gcd⁡(b,a mod b)ax+by=\gcd(a,b)=\gcd(b,a\bmod b)ax+by=gcd(a,b)=gcd(b,amodb),代回原式,即为: bx′+a mod b×y′=gcd⁡(b,a mod b)bx^{\prime}+a\bmod b\times y^{\prime}=\gcd(b,a\bmod b)bx′+amodb×y′=gcd(b,amodb) 假设我们已知上式的一组解 x′,y′x^{\prime},y^{\prime}x′,y′,可以得到: ax+by=gcd⁡(a,b)=bx′+a mod b×y′=bx′+(a−⌊ab⌋×b)y′=ay′+b(x′−⌊ab⌋×y′)\begin{aligned}ax+by=\gcd(a, b) &=b x^{\prime}+a \bmod b\times y^{\prime} \\&=b x^{\prime}+(a-\lfloor \frac{a}{b} \rfloor \times b) y^{\prime}\\&=a y^{\prime}+b(x^{\prime}-\lfloor \frac{a}{b}\rfloor \times y^{\prime})\end{aligned}ax+by=gcd(a,b)​=bx′+amodb×y′=bx′+(a−⌊ba​⌋×b)y′=ay′+b(x′−⌊ba​⌋×y′)​ 所以 ax+by=ay′+b(x′−⌊ab⌋×y′)x=y′y=x′−ab×y′\begin{aligned}ax+by&=ay^{\prime}+b(x^{\prime}-\lfloor \frac{a}{b}\rfloor \times y^{\prime})\\x&=y^{\prime}\\y&=x^{\prime}-\frac{a}{b}\times y^{\prime}\end{aligned}ax+byxy​=ay′+b(x′−⌊ba​⌋×y′)=y′=x′−ba​×y′​ 我们发现,当 b=0b=0b=0 时,a×1+b×0=aa\times 1+b\times 0=aa×1+b×0=a,有一组解 {x=1y=0\begin{cases}x=1\\y=0\end{cases}{x=1y=0​ 模板 直接递归求解即可 1 2 3 4 5 6 7 8 9 10 11 12 int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1; y=0; return a; } int g=exgcd(b,a%b,y,x); y=y-a/b*x; return g; } 这时,我们已经得到了一组解,下一步是求解 ax+by=cax+by=cax+by=c。 求解 ax+by=cax+by=cax+by=c 接下来我们需要分类讨论。 设 g=gcd⁡(a,b)g=\gcd(a,b)g=gcd(a,b)。 当 c mod b≠0c\bmod b\neq0cmodb=0 时,无解。 否则,令 k=cgk=\frac{c}{g}k=gc​, 则 ax′k+by′k=g×k=cax^{\prime}k+by^{\prime}k=g\times k=cax′k+by′k=g×k=c 得 {x=x′ky=y′k\begin{cases}x=x^{\prime}k\\y=y^{\prime}k\end{cases}{x=x′ky=y′k​ 设 xxx 的周期 T=bgT=\frac{b}{g}T=gb​,则最小正整数解为 (x mod T+T) mod T(x\bmod T+T)\bmod T(xmodT+T)modT。 乘法逆元 定义 已知 a,pa,pa,p,求 ax≡1(modp)ax\equiv 1\pmod{p}ax≡1(modp) 中的 xxx,称 xxx 为 aaa 关于 ppp 的逆元。 求解 直接求解 ax+py=1ax+py=1ax+py=1 即可。 最终答案为 (x mod p+p) mod p(x\bmod p+p)\bmod p(xmodp+p)modp。 费马小定理 当 ppp 为素数时,aaa 关于 ppp 的逆元是 ap−2a^{p-2}ap−2。 数论分块 balabala a mod b=a−b×⌊ab⌋a\bmod b=a-b\times\lfloor\frac{a}{b}\rflooramodb=a−b×⌊ba​⌋ 一些题 P1516 青蛙的约会 Problem Link 这是一道比较裸的拓欧题。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #define int ll int x,y,m,n,l; int p,q; int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1; y=0; return a; } int g=exgcd(b,a%b,y,x); y=y-a/b*x; return g; } signed main() { x=read();y=read();m=read();n=read();l=read(); int a=n-m,b=x-y; if(a<0) { a=-a; b=-b; } int ans=exgcd(a,l); if(b%ans!=0) { cout<<"Impossible"<<endl; } else { cout<<((p*(b/ans))%(l/ans)+l/ans)%(l/ans)<<endl; } return 0; } CF1114C Trailing Loves 首先从 101010 进制开始分析。求 ppp 末尾 000 的数量即为求 ppp 的因数中含有 222 和 555 的数量的最小值。 例如设 x1=23×52x_1=2^3\times 5^2x1​=23×52,则 x1x_1x1​ 的末尾 000 的数量即为 min⁡(3,2)=2\min(3,2)=2min(3,2)=2。 接下来考虑 (n!)b(n!)_b(n!)b​ 的末尾 000 的数量。我们先枚举 bbb 的因数 b=p1a1×p2a2×…×pkakb=p_1^{a_1}\times p_2^{a_2}\times \ldots \times p_k^{a_k}b=p1a1​​×p2a2​​×…×pkak​​,若 pimp_i^{m}pim​ 是 n!n!n! 的一个因数,则其对答案的贡献为 ⌊mai⌋\lfloor \dfrac{m}{a_i}\rfloor⌊ai​m​⌋。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 const int N=2e6+10; int n,b; int pri[N],cnt=0; int t[N]; int ans=INF; signed main() { n=read();b=read(); for(int i=2;i*i<=b;i++) { if(b%i==0) { pri[++cnt]=i; while(b%i==0) b/=i,t[cnt]++; } } if(b>1) pri[++cnt]=b,t[cnt]++; for(int i=1;i<=cnt;i++) { int nt=n; int sum=0; while(nt) { sum+=nt/pri[i]; nt/=pri[i]; } ans=min(sum/t[i],ans); } printf("%lld\n",ans); return 0; } CF1493D GCD of an Array 由于一个集合的最大公因数的一个质因数的指数是这个集合中该质数指数的最小值,可以想到每次动态维护集合 gcd 时,考虑将 yyy 分解质因数 y=p1e1×p2e2×…×pkeky=p_1^{e_1}\times p_2^{e_2}\times \ldots \times p_k^{e_k}y=p1e1​​×p2e2​​×…×pkek​​,如果集合中除 axa_xax​ 以外的其他元素均有可以对答案产生贡献的因数 pip_ipi​,那么答案就可以加入 pip_ipi​ 产生的贡献。 形式化的,如果我们定义 vp(ai)v_p(a_i)vp​(ai​) 为 aia_iai​ 中质因数 ppp 的指数,那么若满足 min⁡(vp(a1),…,vp(ax−1),vp(y),vp(ax+1),…,vp(an))>min⁡(vp(a1),vp(a2),…,vp(an))\min(v_p(a_1), \ldots, v_p(a_{x-1}), v_p(y), v_p(a_{x+1}), \ldots, v_p(a_n)) > \min(v_p(a_1), v_p(a_2), \ldots, v_p(a_n))min(vp​(a1​),…,vp​(ax−1​),vp​(y),vp​(ax+1​),…,vp​(an​))>min(vp​(a1​),vp​(a2​),…,vp​(an​)) 设 AAA 为上述两式的差值,则对答案的贡献为 pAp^ApA。 接下来考虑如何求。可以用线性筛预处理质数,每次操作用预处理的最小质因子分解。 我们用 multiset 记录质数 ppp 出现在的元素下标,ttt 数组记录 ppp 在多少个不同的元素中出现。当执行一次操作时,判断是否能够给答案产生贡献。如果能,那么插入当前的下标,随后暴力将 multiset 中的 1∼n1\sim n1∼n 下标删除一次。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 const int N=2e5+10; int n,m; int a[N]; multiset<int> st[N]; int b[N]; int prime[N]; int cnt=0; int t[N]; int ans=1; void pri(int n) { for(int i=2;i<=n;i++) { if(!b[i]) b[i]=i,prime[++cnt]=i; for(int j=1;j<=cnt;j++) { if(prime[j]>b[i] || prime[j]>n/i) break; b[i*prime[j]]=prime[j]; } } } void modify(int p,int x) { while(x!=1) { int minn=b[x]; if(st[minn].find(p)==st[minn].end()) t[minn]++; st[minn].insert(p); if(t[minn]==n) { for(int i=1;i<=n;i++) { st[minn].erase(st[minn].find(i)); if(st[minn].find(i)==st[minn].end()) t[minn]--; } ans=(ans*minn)%mod; } x/=minn; } } signed main() { pri(N-1); n=read();m=read(); for(int i=1;i<=n;i++) { a[i]=read(); } for(int i=1;i<=n;i++) { modify(i,a[i]); } while(m--) { int p=read(),x=read(); modify(p,x); printf("%lld\n",ans); } return 0; }

2024/6/27
articleCard.readMore

数学期望 学习笔记

前言 期望的广义定义:一次随机抽样中所期望的某随机变量的取值。 一个例子: 一次考试满分 100pts100pts100pts,有 0.50.50.5 的概率考 90pts90pts90pts,0.30.30.3 的概率考 80pts80pts80pts,0.20.20.2 的概率考 50pts50pts50pts,则这次考试成绩的期望即为 0.5×90+0.3×80+0.2×50=79pts0.5\times 90+0.3\times 80+0.2\times 50=79pts0.5×90+0.3×80+0.2×50=79pts。 与 加权平均值 类似。 P8774 爬树的甲壳虫 Problem Link Statement 有一只甲壳虫想要爬上一颗高度为 nnn 的树,它一开始位于树根,高度为 000,当它尝试从高度 i−1i-1i−1 爬到高度为 iii 的位置时有 PiP_{i}Pi​ 的概率会掉回树根,求它从树根爬到树顶时,每次尝试花费 111 个单位时间,求经过的时间的期望值是多少。 Solution 正推方法。 设 fif_ifi​ 表示从根爬到 iii 花费时间的期望。 考虑转移,如果尝试成功,可以直接花费 111 单位时间从 i−1i - 1i−1 跳到 iii,期望为 (1−pi)×1(1 - p_{i})\times 1(1−pi​)×1;如果尝试失败,需要花费 111 单位时间回到根,然后再花 fif_ifi​ 的时间回到 iii,期望为 pi×(fi+1)p_i\times (f_i + 1)pi​×(fi​+1)。 容易得到 fi=fi−1+(1−pi)+(fi+1)×pif_i = f_{i - 1} + (1 - p_i) + (f_i + 1)\times p_ifi​=fi−1​+(1−pi​)+(fi​+1)×pi​。化简后,可以得到下面的方程: fi=fi−1+11−pi=(fi−1+1)×yiyi−xif_i = \frac{f_{i-1} + 1}{1 - p_i} = (f_{i - 1} + 1)\times\frac{y_i}{y_i - x_i}fi​=1−pi​fi−1​+1​=(fi−1​+1)×yi​−xi​yi​​ 比倒推简单许多。 ▶倒推(需消元) 设 fif_ifi​ 表示从 iii 到树顶 nnn 所花费时间的期望值。 接下来考虑转移,如果这次尝试成功,其期望为 (1−pi+1)fi+1(1-p_{i+1})f_{i+1}(1−pi+1​)fi+1​。如果这次尝试失败,回到树根,则其期望为 pi+1f0p_{i+1}f_0pi+1​f0​。 转移方程为: fi=1+(i−pi+1fi+1)+pi+1f0f_i=1+(i-p_{i+1}f_{i+1})+p_{i+1}f_0fi​=1+(i−pi+1​fi+1​)+pi+1​f0​ 观察转移方程,发现其中 f0f_0f0​ 和 fi+1f_{i+1}fi+1​ 项是未知的。考虑倒推,可以求出 fi+1f_{i+1}fi+1​,但无论如何都无法求 f0f_0f0​,故多写几项寻找规律: f0=1+(i−p1f1)+p1f0f1=1+(i−p2f2)+p2f0f2=1+(i−p3f3)+p3f0f_0=1+(i-p_1f_1)+p_1f_0\\f_1=1+(i-p_2f_2)+p_2f_0\\f_2=1+(i-p_3f_3)+p_3f_0f0​=1+(i−p1​f1​)+p1​f0​f1​=1+(i−p2​f2​)+p2​f0​f2​=1+(i−p3​f3​)+p3​f0​ 此时即可直接解方程,进行带入,展开后为: f0=1+(1−p1)+(1−p1)(1−p2)f2+[p1+(1−p1)p2]f0f_0=1+(1-p_1)+(1-p_1)(1-p_2)f_2+[p_1+(1-p_1)p_2]f_0f0​=1+(1−p1​)+(1−p1​)(1−p2​)f2​+[p1​+(1−p1​)p2​]f0​ 因为题意中 fn=0f_n=0fn​=0,所以原式化简为: f0=1+(1−p1)+[p1+(1−p1)p2]f0f_0=1+(1-p_1)+[p_1+(1-p_1)p_2]f_0f0​=1+(1−p1​)+[p1​+(1−p1​)p2​]f0​ 将其表示为 f0=A+Bf_0=A+Bf0​=A+B 形式,则可以进行对应: A=1+(1−p1)+(1−p1)(1−p2)+⋯+(1−p1)(1−p2)⋯(1−pn−1)B=p1+p2(1−p1)+p3(1−p1)(1−p2)+⋯+pn(1−pn)⋯(1−pn−1)A=1+(1-p_1)+(1-p_1)(1-p_2)+\cdots+(1-p_1)(1-p_2)\cdots(1-p_{n-1})\\B=p_1+p_2(1-p_1)+p_3(1-p_1)(1-p_2)+\cdots+p_n(1-p_n)\cdots(1-p_{n-1})A=1+(1−p1​)+(1−p1​)(1−p2​)+⋯+(1−p1​)(1−p2​)⋯(1−pn−1​)B=p1​+p2​(1−p1​)+p3​(1−p1​)(1−p2​)+⋯+pn​(1−pn​)⋯(1−pn−1​) A,BA, BA,B 都可以直接计算,则本题解决。 另外注意到数据要求输出 ab mod P\frac{a}{b}\bmod Pba​modP 的结果,需要用到乘法逆元,由于 PPP 为质数,可以直接通过费马小定理求出。 Core Code 这是倒推的代码。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ll ksm(ll x,ll y) {//快速幂 ll res=1; while(y) { if(y&1) res=res*x%mod; x=x*x%mod; y>>=1; } return res; } int main() { n=read(); for(int i=1;i<=n;i++) { int a=read(),b=read(); p1[i]=a*ksm(b,mod-2)%mod;//失败概率 p2[i]=(b-a)*ksm(b,mod-2)%mod;//成功概率 } A=1; ll t=1; for(int i=1;i<=n;i++) { if(i!=n) A=(A+p2[i]*t%mod)%mod; B=(B+p1[i]*t%mod)%mod; t=(p2[i]*t)%mod; } write(A*ksm((1-B+mod)%mod,mod-2)%mod); return 0; } ABC360E Random Swaps of Balls Luogu Link | AtCoder Link Statement 有 nnn 个球,其中 n−1n-1n−1 球为白球,剩下一个球为黑球。初始时黑球为第 111 个球。 你可以进行 kkk 次操作,每次操作等概率随机选择两个整数 i,j∈[1,n]i, j\in [1,n]i,j∈[1,n],然后交换第 iii 个和第 jjj 个球。 求最终黑球位置期望,对 P=998,244,353P=998,244,353P=998,244,353 取模。 Solution 设 fif_ifi​ 为第 iii 次操作后的期望值,显然 f0=1f_0=1f0​=1。 则有: fi={1,i=0(n−1)2+1n2×fi−1+2n2×(n(n+1)2−fi−1),otherwise.f_i=\begin{cases}1 &,i=0\\\dfrac{(n-1)^2+1}{n^2}\times f_{i-1}+\dfrac{2}{n^2}\times (\dfrac{n(n+1)}{2}-f_{i-1}) &,\text{otherwise.}\end{cases}fi​=⎩ ⎨ ⎧​1n2(n−1)2+1​×fi−1​+n22​×(2n(n+1)​−fi−1​)​,i=0,otherwise.​ 可以将式子分为两部分: 第一部分加号前,表示在第 iii 次操作时球 xxx 的位置没有被移动。此时选择的两数 a,ba,ba,b 各有 n−1n-1n−1 种选择,注意还有一种 a=b=xa=b=xa=b=x 的情况,所以该情况概率为 (n−1)2+1n2\dfrac{(n-1)^2+1}{n^2}n2(n−1)2+1​,再乘上该情况下 xxx 的位置,即 fi−1f_{i-1}fi−1​; 第二部分为加号后,表示在第 iii 次操作时移动了 xxx 的位置。球落到每个位置上的概率显然是相等的 2n2\dfrac{2}{n^2}n22​,期望显然为 ∑i=1n(2n2×i)\sum_{i=1}^n(\dfrac{2}{n^2}\times i)∑i=1n​(n22​×i)。但需要减去 xxx 仍在操作前位置上的情况,注意由于不确定当前 xxx 的位置,不能只使 i∈[2,n]i\in[2,n]i∈[2,n] 而是需要减掉 fi−1f_{i-1}fi−1​。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 int ksm(int x,int p) { int res=1; while(p>0) { if(p&1) res=res*x%mod; x=x*x%mod; p>>=1; } return res; } signed main() { n=read();k=read(); f[0]=1; int n2=ksm((n*n)%mod,mod-2); int a=((n-1)*(n-1))%mod; int sum=((1+n)*n/2)%mod; for(int i=1;i<=k;i++) { f[i]=((a+1)*f[i-1]%mod*n2%mod+((2*n2%mod)*(sum-f[i-1])%mod)%mod+mod)%mod; } printf("%lld\n",f[k]); return 0; } P1654 OSU! Problem Link Statement 给定 nnn 次操作,每次操作有成功率 pip_ipi​,成功记为 111,失败记为 000,形成一个长度为 nnn 的 01 串。极长的连续 xxx 个 111 贡献贡献 x3x^3x3 分数,求期望得分。 Solution 设 fif_ifi​ 为第 iii 次操作后的期望得分,f0=0f_0=0f0​=0。 每次操作成功对答案的贡献为 (k+1)3−k3=3k2+3k+1(k+1)^3-k^3=3k^2+3k+1(k+1)3−k3=3k2+3k+1。 则通过递推求 k2k^2k2 和 kkk 的期望即可,这里设为 len2len2len2 和 lenlenlen,要注意 E(k2)≠E(k)2E(k^2)\not =E(k)^2E(k2)=E(k)2,所以 len2len2len2 和 lenlenlen 需要分别求。 则最终转移方程为: leni=(leni−1+1)×pilen2i=(len2i+2×len2i−1+1)×pifi=fi−1+(3×len2i−1+3×leni−1+1)×pi\begin{aligned}len_i&=(len_{i-1}+1)\times p_i\\len2_i&=(len2_i+2\times len2_{i-1}+1)\times p_i\\f_i&=f_{i-1}+(3\times len2_{i-1}+3\times len_{i-1}+1)\times p_i\end{aligned}leni​len2i​fi​​=(leni−1​+1)×pi​=(len2i​+2×len2i−1​+1)×pi​=fi−1​+(3×len2i−1​+3×leni−1​+1)×pi​​ 这里还注意到最后一个式子与前两个不同。原因是前两个式子的含义是第 iii 位的期望,但最终要求的答案是前 nnn 位的期望。 Core Code 1 2 3 4 5 6 7 8 9 10 11 int main() { n=read(); for(int i=1;i<=n;i++) cin>>p[i]; for(int i=1;i<=n;i++) { len[i]=(len[i-1]+1.0)*p[i]; len2[i]=(len2[i-1]+2.0*len[i-1]+1.0)*p[i]; f[i]=f[i-1]+(3.0*len2[i-1]+3.0*len[i-1]+1.0)*1.0*p[i]; } printf("%.1lf\n",f[n]); return 0; } P1297 [国家集训队] 单选错位 Problem Link Statement nnn 道题,第 iii 道有 aia_iai​ 个选项,选择每个选项的概率第相等的。但是每个选择都会填到后一道题。求对的期望题数。 Solution 对于每一个题目 iii,其是否正确仅与 iii 和 i−1i-1i−1 道题目选项个数有关。 要使 iii 和 i−1i-1i−1 个题目选择的答案一样,仅有 min⁡(ai,ai−1)\min(a_i,a_{i-1})min(ai​,ai−1​) 种情况,而总共有 ai×ai−1a_i\times a_{i-1}ai​×ai−1​ 种情况。易证。 所以 fi=fi−1+min⁡(ai,ai−1)ai×ai−1f_i=f_{i-1}+\dfrac{\min(a_i,a_{i-1})}{a_i\times a_{i-1}}fi​=fi−1​+ai​×ai−1​min(ai​,ai−1​)​。 题目对内存要求严格,不能用数组保存答案。 Core Code 1 2 3 4 5 ans=1.0*min(a[1],a[n])/(a[1]*a[n]*1.0); for(int i=2;i<=n;i++) { ans=ans+1.0*min(a[i-1],a[i])/(a[i-1]*a[i]*1.0); } printf("%.3Lf\n",ans); P4550 收集邮票 Problem Link Statement 有 nnn 种不同的邮票,皮皮想收集所有种类的邮票。每次只能买一张,买到的邮票是等概率的。所以皮皮购买第 kkk 次邮票需要支付 kkk 元钱。 求得到所有种类的邮票需要花费的钱数目的期望。 Solution 设买了 kkk 张邮票才能集齐,那么最终答案为 ∑i=1ki=k+k22\sum_{i=1}^ki=\dfrac{k+k^2}{2}∑i=1k​i=2k+k2​。 所以我们设 fif_ifi​ 表示已经集齐了 iii 张邮票,还需要买的邮票数的期望。 因为有 in\dfrac{i}{n}ni​ 的概率买到已有的,那么此时次数应 +1+1+1;有 n−in\dfrac{n-i}{n}nn−i​ 的概率买到没有的,次数应在 fi+1f_{i+1}fi+1​ 的基础上 +1+1+1。 所以可得: fi=in×(fi+1)+n−in×(fi+1+1)fi=infi+n−infi+1+1n−infi=n−infi+1+1fi=fi+1+nn−i\begin{aligned}f_i&=\dfrac{i}{n}\times(f_i+1)+\dfrac{n-i}{n}\times(f_{i+1}+1)\\f_i&=\dfrac{i}{n}f_i+\dfrac{n-i}{n}f_{i+1}+1\\\dfrac{n-i}{n}f_i&=\dfrac{n-i}{n}f_{i+1}+1\\f_i&=f_{i+1}+\dfrac{n}{n-i}\end{aligned}fi​fi​nn−i​fi​fi​​=ni​×(fi​+1)+nn−i​×(fi+1​+1)=ni​fi​+nn−i​fi+1​+1=nn−i​fi+1​+1=fi+1​+n−in​​ 由于上文提到 E(k2)≠E(k)2E(k^2)\not =E(k)^2E(k2)=E(k)2,所以需要根据 fif_ifi​ 完全平方展开预处理一个 gig_igi​: gi=in×(fi+1)2+n−in×(fi+1+1)2⇒=gi+1+2in−ifi+2fi+1+nn−i\begin{aligned}g_i&=\dfrac{i}{n}\times(f_i+1)^2+\dfrac{n-i}{n}\times(f_{i+1}+1)^2\\\Rightarrow&=g_{i+1}+\dfrac{2i}{n-i}f_i+2f_{i+1}+\dfrac{n}{n-i}\end{aligned}gi​⇒​=ni​×(fi​+1)2+nn−i​×(fi+1​+1)2=gi+1​+n−i2i​fi​+2fi+1​+n−in​​ 由于 fif_ifi​ 依赖于 fi+1f_{i+1}fi+1​ 且已知 fn=0f_{n}=0fn​=0,故使用倒推。最终答案 f0+g02\dfrac{f_0+g_{0}}{2}2f0​+g0​​。 Core Code 1 2 3 4 5 6 n=read(); for(int i=n-1;i>=0;i--) { f[i]=f[i+1]+n*1.0/(n-i)*1.0; g[i]=g[i+1]+i*2.0/(n-i)*1.0*f[i]+2.0*f[i+1]+n*1.0/(n-i)*1.0; } printf("%.2lf\n",(f[0]+g[0])/2.0); 注:本文最初发表于 2023-05-27。

2024/7/2
articleCard.readMore

CSP2023 游寄

省流:读错两道题。 Day -1 晚上写了点数据结构的板子。 Day 0 早上去日照的路上跟在学校开运动会的同学聊了几句。 车上愣了 4hrs 的神。 下午打了几个板子,口胡了几个 tg 原题。 晚上去考场试机,各种原因不让进考场拖了 15min,进去以后还有 pj 的跟我抢座位。 发现机子分辨率不对,调了半天调不了,想着明天早上还有 pj 也没管,出考场见到教练说了几句。 机子配置很好啊,12 代 i5+32G 内存。 Day 1 上午刚写了个最短路,看到 HL 群传出来了 pj 题,口胡了一遍 T1-T3,跟同学讨论 T2 可能是个原。 下午进考场看到分辨率还没调而且似乎看起来更难受了,趁着装英文输入法的空看了眼显示设置竟然能调了,调完之后 Dev-C++ 依旧很糊,rp--。 开考前打了个线段树。 发下来压缩包密码看到打样例盲猜一个图论,但没发现总司令,感觉今年样例强度格外小。 PDF 密码晚发了 10min,rp--。 (考试中) 开题。 扫了眼 T1 觉得是数学题,T2 暴力很好打,T3 大模拟,T4 神秘题。 然后就在推 T1 结论,推了半天发现情况貌似挺多,写了一种情况跑路看 T2。 打了个 25pts 的纯暴力,开 T3。 看了眼样例就觉得 2 操作只能是定义结构体元素,这样前 13 个点似乎都很好写?性质 A 全输出 ERR?(伏笔) 为什么样例解释错的这么明显都没人问。 定了 1hr 写 T3,写完操作 2 突然发现写不完了似乎,打了个总司令跑路看 T1,rp--。 直接扫似乎很快就能扫完,写了一会过了样例,手糊了几个 hack 过了。 还剩下半个小时。看到 右边 和 右边的右边的右边 正在玩小恐龙,右边的右边 在玩纸牌,监考说要检查 D 盘。 又看了眼 T4 貌似第一遍读错题了,但暴力还是可写的。写到 6:15 感觉写不完果断放弃,开始检查文件。 T2 竟然没删 freopen 的注释,幸好看了一眼。 期望得分 100+25+15+0100+25+15+0100+25+15+0。 到 6:25 监考说把所有程序都关了停止答题,怎么还一场考试凭空缩减 15min。 (考试后) 一出考场就听人说 T1 空间 0.5M,突然想起来开了一堆过程数组没删,感觉很慌。 见到几个同学问了问都没看到 T1 空间到底多少,在想要是 CCF 这么出题今年不得被骂死。 在去吃饭的路上看到了原 PDF,听说 T2 是个 CF 原题。 吃完饭回酒店有了沙东程序,在云斗上测了一遍 T3 保龄,又读了一遍题发现读错了。 期望得分 100+25+0+0100+25+0+0100+25+0+0。 每逢比赛模拟题都拿不到分,怎么回事呢。感觉要该练一练码力了。

2023/10/22
articleCard.readMore

CF1000F One Occurrence 题解

Problem Link | CodeForces Link 一发线段树的做法。 Solution 最初的想法是维护每个元素上次出现的下标 lastlastlast 数组,以样例 1 1 2 3 2 4 为例,维护出来的结果即为 0 1 0 0 3 0,答案就是查找区间 [l,r][l,r][l,r] 内是否有 lasti<llast_i<llasti​<l 的元素。 但这样会出现一个问题:当区间内有元素出现了多次,统计结果会变得不正确。以样例第二组询问为例,a1=a2=1a_1=a_2=1a1​=a2​=1,而 last1=0<1last_1=0<1last1​=0<1,看上去可行但实际则出现了两个 111。 一个可行的解决措施是只保留每个数最后一次出现的 lastlastlast 值,而将前面的值作废。经过这样的操作,样例处理结果即为(下标从 111 开始): a={1,1,2,3,2,4}last={INF,1,INF,0,3,0}\begin{aligned}a=&\{1,&1,&2,&3,&2,&4\}\\last=&\{\text{INF},&1,&\text{INF},&0,&3,&0\}\end{aligned}a=last=​{1,{INF,​1,1,​2,INF,​3,0,​2,3,​4}0}​ 由于在维护靠后的 lastlastlast 时会对前面已经维护的 lastlastlast 造成影响,故我们需要将询问离线,并按区间右端点排序。保证处理当前询问 [l,r][l,r][l,r] 区间时 lastrlast_rlastr​ 没有被作废。 则程序为单点修改 lastlastlast 区间查询 lastlastlast 的最值。值得注意的是维护线段时应保存区间 lastlastlast 的最小值和该值的下标。区间最小值是为了判断最小的 lastlastlast 是否在区间内,不是则证明区间内有最小值。最小值下标是为了输出结果。 相比其他做法码量稍大,但维护 lastlastlast 的 trick 还是有些用处的。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 const int N=5e5+10; int n,m; int a[N]; int last[N]; int t[N]; int ans[N]; struct qs { int l,r,id; }q[N]; int cmp(qs x,qs y) { return x.r<y.r; } struct tree { int val,pos; }; struct node { int val[N*4],pos[N*4],siz[N*4]; void pushup(int p) { if(val[p*2]<val[p*2+1]) val[p]=val[p*2],pos[p]=pos[p*2]; else val[p]=val[p*2+1],pos[p]=pos[p*2+1]; } void build(int p,int l,int r) { if(l==r) { val[p]=INF; pos[p]=l; return ; } int mid=(l+r)>>1; build(p*2,l,mid); build(p*2+1,mid+1,r); pushup(p); } void modify(int p,int l,int r,int x,int w) { if(l==r) { val[p]=w; return ; } int mid=(l+r)>>1; if(x<=mid) modify(p*2,l,mid,x,w); else modify(p*2+1,mid+1,r,x,w); pushup(p); } tree query(int p,int l,int r,int x,int y) { if(x<=l && r<=y) { return {val[p],pos[p]}; } int mid=(l+r)>>1; tree res={INF,0}; if(x<=mid) { tree tmp=query(p*2,l,mid,x,y); if(tmp.val<res.val) { res.val=tmp.val; res.pos=tmp.pos; } } if(y>=mid+1) { tree tmp=query(p*2+1,mid+1,r,x,y); if(tmp.val<res.val) { res.val=tmp.val; res.pos=tmp.pos; } } return res; } }g; int main() { n=read(); for(int i=1;i<=n;i++) { a[i]=read(); last[i]=t[a[i]]; t[a[i]]=i; } m=read(); for(int i=1;i<=m;i++) { q[i].l=read();q[i].r=read();q[i].id=i; } sort(q+1,q+m+1,cmp); g.build(1,1,n); int j=1; for(int i=1;i<=n;i++) { g.modify(1,1,n,i,last[i]); if(last[i]!=0) g.modify(1,1,n,last[i],INF); while(q[j].r==i && j<=m) { tree res=g.query(1,1,n,q[j].l,q[j].r); if(res.val<q[j].l) ans[q[j].id]=a[res.pos]; else ans[q[j].id]=0; j++; } } for(int i=1;i<=m;i++) { cout<<ans[i]<<endl; } return 0; }

2023/12/16
articleCard.readMore

P6878 [JOI 2020 Final] JJOOII 2 题解

Problem Link Explanation 给定一个只包含 J\tt JJ、O\tt OO、I\tt II 三种字符、长度为 NNN 的字符串 SSS 和一个正整数 KKK。定义 KKK 阶 JOI\tt JOIJOI 串为由恰好 KKK 个 J\tt JJ 、KKK 个 O\tt OO 、KKK 个 I\tt II 依次拼接而成的字串。如 222 阶 JOI\tt JOIJOI 串为 JJOOII\tt JJOOIIJJOOII。你可以对 SSS 进行任意次以下操作以将 SSS 变为 KKK 阶 JOI\tt JOIJOI 串: 删除 SSS 的第一个字符 删除 SSS 的最后一个字符 删除 SSS 的任意一个字符 要求最小化并输出第三种操作的次数。如果不能将 SSS 变为 KKK 阶 JOI\tt JOIJOI 串,输出 -1。 Solution 可以发现只要定位到了最前端的 J\tt JJ 的位置,那么就可以确定一个最短的 JOI\tt JOIJOI 串。 即我们可以暴力从前向后扫 J\tt JJ 的位置,然后依次找到 KKK 个 O\tt OO 和 I\tt II 即可。 可以对上面的算法进行优化,我们记录每个 J\tt JJ、O\tt OO、I\tt II 的位置为 cj、co、ci,那么一段 J\tt JJ 的开始位置即为 cjjcj_jcjj​,结束位置为 cjj+k−1cj_{j+k-1}cjj+k−1​,O\tt OO,I\tt II 同理。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 int n,k; char s[N]; int cj[N],co[N],ci[N]; int totj,toto,toti; int ans=INF; int main() { n=read();k=read(); scanf("%s",s+1); for(int i=1;i<=n;i++) { if(s[i]=='J') cj[++totj]=i; if(s[i]=='O') co[++toto]=i; if(s[i]=='I') ci[++toti]=i; } for(int i=1;i<=totj;i++) { if(i+k-1>totj) break;//后面不足 k 个 j,下面 o,i 同理 int ed=cj[i+k-1];//一段 j 的结束,下面 o,i 同理 int pos=1; while(co[pos]<=ed && pos<=toto) pos++;//o 的起始位置,下面 i 同理 if(pos+k-1>toto) break; ed=co[pos+k-1]; pos=1; while(ci[pos]<=ed && pos<=toti) pos++; if(pos+k-1>toti) break; ed=ci[pos+k-1]; ans=min(ans,ed-cj[i]+1-3*k);//答案为枚举的区间长度与 3*k 的差 } printf("%d\n",(ans==INF)?-1:ans); return 0; }

2023/10/28
articleCard.readMore

主定理

主定理适用于递归复杂度计算。 标准版: a,ba,ba,b 是常数,f(n)f(n)f(n) 为额外附加值函数 T(n)T(n)T(n) 为递归式 T(n)=aT(nb)+f(n) (a>0,b>1)T(n)=aT(\frac{n}{b})+f(n)\ (a>0,b>1)T(n)=aT(bn​)+f(n) (a>0,b>1),就有: 当 f(n)=O(n(log⁡ba)−ϵ)f(n)=\mathcal{O}(n^{(\log_ba)-\epsilon})f(n)=O(n(logb​a)−ϵ) 其中 ϵ>0\epsilon>0ϵ>0 是一个常数(相当于 log⁡ba>f(n)\log_ba>f(n)logb​a>f(n)),则有 T(n)=Θ(nlog⁡ba)T(n)=\Theta(n^{\log_ba})T(n)=Θ(nlogb​a); 当 f(n)=Θ(nlog⁡ba)f(n)=\Theta(n^{\log_ba})f(n)=Θ(nlogb​a),则有 T(n)=Θ(nlog⁡balog⁡n)T(n)=\Theta(n^{\log_ba}\log n)T(n)=Θ(nlogb​alogn); 当 f(n)=Ω(n(log⁡ba)+ϵ)f(n)=\Omega(n^{(\log_ba)+\epsilon})f(n)=Ω(n(logb​a)+ϵ) 其中 ϵ>0\epsilon>0ϵ>0 是一个常数(相当于 log⁡ba<f(n)\log_ba<f(n)logb​a<f(n)),且对于一个常数 c<1c<1c<1 和所有足够大的 nnn 有 af(nb)≤cf(n)af(\frac{n}{b})\leq cf(n)af(bn​)≤cf(n)(这一条件在这里可以暂时忽略不看,但在证明时起到至关重要的作用),则有 T(n)=Θ(f(n))T(n)=\Theta(f(n))T(n)=Θ(f(n)). 当 f(n)=Θ(nlog⁡balog⁡kn)f(n)=\Theta(n^{\log_ba}\log^kn)f(n)=Θ(nlogb​alogkn) 其中 k≥1k\geq1k≥1 是一个常数,则有 T(n)=Θ(nlog⁡balog⁡k+1n)T(n)=\Theta(n^{\log_ba}\log^{k+1}n)T(n)=Θ(nlogb​alogk+1n); 举例: 例一:T(n)=4T(n2)+nT(n)=4T(\frac{n}{2})+nT(n)=4T(2n​)+n,此时 a=4,b=2,ϵ=1a=4,b=2,\epsilon=1a=4,b=2,ϵ=1,那么 log⁡ba=log⁡24=2,f(n)=O(nlog⁡ba−ϵ)=O(n2−1)\log_ba=\log_24=2,f(n)=\mathcal{O}(n^{\log_ba-\epsilon})=\mathcal{O}(n^{2-1})logb​a=log2​4=2,f(n)=O(nlogb​a−ϵ)=O(n2−1),f(n)f(n)f(n) 成立,所以 T(n)=Θ(nlog⁡ba)=Θ(n2)T(n)=\Theta(n^{\log_ba})=\Theta(n^2)T(n)=Θ(nlogb​a)=Θ(n2)。 例二:T(n)=2T(n2)+nT(n)=2T(\frac{n}{2})+nT(n)=2T(2n​)+n,此时 a=2,b=2a=2,b=2a=2,b=2,那么 log⁡ba=log⁡22=1,f(n)=Θ(nlog⁡ba)=Θ(n)\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba})=\Theta(n)logb​a=log2​2=1,f(n)=Θ(nlogb​a)=Θ(n),f(n)f(n)f(n) 成立,所以 T(n)=Θ(nlog⁡balog⁡n)=Θ(nlog⁡n)T(n)=\Theta(n^{\log_ba}\log n)=\Theta(n\log n)T(n)=Θ(nlogb​alogn)=Θ(nlogn)。 例三:T(n)=4T(n2)+n3T(n)=4T(\frac{n}{2})+n^3T(n)=4T(2n​)+n3,此时 a=4,b=2,ϵ=1a=4,b=2,\epsilon=1a=4,b=2,ϵ=1,那么 log⁡ba=log⁡24=2,f(n)=Ω(nlog⁡ba+ϵ)=Ω(n2+1)\log_ba=\log_24=2,f(n)=\Omega(n^{\log_ba+\epsilon})=\Omega(n^{2+1})logb​a=log2​4=2,f(n)=Ω(nlogb​a+ϵ)=Ω(n2+1),对于 c=23c=\frac{2}{3}c=32​ 和够大的 nnn,(af(nb)=4(n2)3=4(n38)=n32)≤(cf(n)=2n33)\left(af(\frac{n}{b})=4(\frac{n}{2})^3=4(\frac{n^3}{8})=\frac{n^3}{2}\right)\leq \left(cf(n)=\frac{2n^3}{3}\right)(af(bn​)=4(2n​)3=4(8n3​)=2n3​)≤(cf(n)=32n3​),f(n)f(n)f(n) 成立,所以 T(n)=Θ(f(n))=Θ(n3)T(n)=\Theta(f(n))=\Theta(n^3)T(n)=Θ(f(n))=Θ(n3)。 例四:T(n)=2T(n2)+nlog⁡nT(n)=2T(\frac{n}{2})+n\log nT(n)=2T(2n​)+nlogn,此时 a=2,b=2,k=1a=2,b=2,k=1a=2,b=2,k=1,那么 log⁡ba=log⁡22=1,f(n)=Θ(nlog⁡balog⁡kn)=Θ(nlog⁡n)\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba}\log^kn)=\Theta(n\log n)logb​a=log2​2=1,f(n)=Θ(nlogb​alogkn)=Θ(nlogn),f(n)f(n)f(n) 成立,所以 T(n)=Θ(nlog⁡balog⁡k+1n)=Θ(nlog⁡2n)T(n)=\Theta(n^{\log_ba}\log^{k+1}n)=\Theta(n\log^2 n)T(n)=Θ(nlogb​alogk+1n)=Θ(nlog2n)。 简化版 将一个规模为 nnn 的问题,通过分治得到 aaa 个规模为 nb\dfrac{n}{b}bn​ 的子问题,每次递归进行的计算为 O(nd)O(n^d)O(nd),满足如下形式: T(n)=a⋅T(nb)+O(nd)T(n)=a\cdot T(\dfrac{n}{b})+O(n^d)T(n)=a⋅T(bn​)+O(nd) 则 T(n)T(n)T(n) 满足: T(n)={O(nd)d>log⁡baO(ndlog⁡n)d=log⁡baO(nlog⁡ba)d<log⁡baT(n)=\begin{cases}O(n^d) & d> \log_b a\\O(n^d\log n) & d= \log_b a\\O(n^{\log_b a}) & d<\log_b a\\\end{cases}T(n)=⎩ ⎨ ⎧​O(nd)O(ndlogn)O(nlogb​a)​d>logb​ad=logb​ad<logb​a​ 例如: 有递归式: T(n)={O(1)n=12T(n2)+notherwise.T(n)=\begin{cases}O(1) & n=1\\2T(\dfrac{n}{2})+n & \text{otherwise.}\end{cases}T(n)={O(1)2T(2n​)+n​n=1otherwise.​ 则有 a=2,b=2,d=1a=2,b=2,d=1a=2,b=2,d=1。 ∵1=log⁡22∴T(n)=O(n1log⁡n)=O(nlog⁡n)\begin{array}{ll}\because 1=\log_22\\\therefore T(n)=O(n^1\log n)=O(n\log n)\end{array}∵1=log2​2∴T(n)=O(n1logn)=O(nlogn)​ 另一例子: T(n)={O(1)n=12T(n2)+1otherwise.T(n)=\begin{cases}O(1) & n=1\\2T(\dfrac{n}{2})+1 & \text{otherwise.}\end{cases}T(n)={O(1)2T(2n​)+1​n=1otherwise.​ 则有 a=2,b=2,d=0a=2,b=2,d=0a=2,b=2,d=0。 ∵0<log⁡22∴T(n)=O(nlog⁡22)=O(n)\begin{array}{ll}\because 0<\log_22\\\therefore T(n)=O(n^{\log_2 2})=O(n)\end{array}∵0<log2​2∴T(n)=O(nlog2​2)=O(n)​ 例三: T(n)={O(1)n=12T(n2)+nlog⁡notherwise.T(n)=\begin{cases}O(1) & n=1\\2T(\dfrac{n}{2})+n\log n & \text{otherwise.}\end{cases}T(n)={O(1)2T(2n​)+nlogn​n=1otherwise.​ 则有 a=2,b=2,d=1a=2,b=2,d=1a=2,b=2,d=1。 ∵1=log⁡22∴T(n)=O(n1log⁡n⋅log⁡n)=O(nlog⁡2n)\begin{array}{ll}\because 1=\log_22\\\therefore T(n)=O(n^1\log n\cdot \log n)=O(n\log^2 n)\end{array}∵1=log2​2∴T(n)=O(n1logn⋅logn)=O(nlog2n)​

2023/9/10
articleCard.readMore

CF1695C Zero Path 题解

Problem Link Explanation 给定一个 n×mn \times mn×m 的格点图,每个格子的值为 −1-1−1 或 111。问题要求判断是否存在一条从起点 (1,1)(1, 1)(1,1) 到终点 (n,m)(n, m)(n,m) 的路径,使得路径上经过的格点值的和为 000。路径只能向右或向下移动。 Solution 先上结论。设权值和最大的路径权值为 fmaxf_{max}fmax​,最小权值为 fminf_{min}fmin​,则如果满足 n+m−1n+m-1n+m−1 是偶数且 fmin≤0≤fmaxf_{min}\leq 0 \leq f_{max}fmin​≤0≤fmax​,那么问题有解。 简单观察样例会发现路径的长度只能是 n+m−1n+m-1n+m−1,又因为权值只能是 111 或 −1-1−1,则如果最终有解,111 和 −1-1−1 的数量应当相等。所以如果路径长度是奇数,必然要输出 NO。 接下来要思考的是路径是怎么从 fminf_{min}fmin​ 变化到 fmaxf_{max}fmax​ 的。我们会发现可以通过改变路径转向处的访问位置来变化权值和,一次变化将可能会使权值和改变 +2,−2,0+2,-2,0+2,−2,0。 以样例为例,第一次转向时选择 (1,1)→(2,1)(1,1)\to (2,1)(1,1)→(2,1) 与 (1,1)→(1,2)(1,1)\to (1,2)(1,1)→(1,2) 不会对结果造成影响。而第二次转向时,选择 (1,2)→(2,2)(1,2)\to (2,2)(1,2)→(2,2) 会比 (1,2)→(1,3)(1,2)\to (1,3)(1,2)→(1,3) 的权值和多 222。 又因为路径的长度限制了为偶数,也就是说 111 和 −1-1−1 的数量要么都是偶数,要么都是奇数。这两种情况都会使得权值和为偶数,也就是 fminf_{min}fmin​ 和 fmaxf_{max}fmax​ 都是偶数。 那么就可以看看权值和是怎么从最小值变化为最大值的了。因为我们限定了奇偶性和变化规律,所以其变化序列必将是: fmin,fmin+2,…,0,…,fmax−2,fmaxf_{min}, f_{min}+2, \dots,0 , \dots, f_{max}-2, f_{max}fmin​,fmin​+2,…,0,…,fmax​−2,fmax​ 一定会在变化过程中经过权值和为 000 的情况,所以结论得证。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 T=read(); while(T--) { n=read();m=read(); for(int i=0;i<=n;i++) minn[i][0]=INF,maxn[i][0]=-INF; for(int i=0;i<=m;i++) minn[0][i]=INF,maxn[0][i]=-INF; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { a[i][j]=read(); } } if((n+m-1)%2==1) { printf("NO\n"); continue; } minn[1][1]=maxn[1][1]=a[1][1]; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(i!=1 || j!=1) { maxn[i][j]=max(maxn[i-1][j],maxn[i][j-1])+a[i][j]; minn[i][j]=min(minn[i-1][j],minn[i][j-1])+a[i][j]; } } } if(maxn[n][m]>=0 && minn[n][m]<=0) printf("YES\n"); else printf("NO\n"); }

2023/8/15
articleCard.readMore

AT_ABC306D 题解

Problem Link 很简单的一道 D 题。 Explanation 高桥君要在餐厅里吃一份由 nnn 道菜组成的奇怪的全套菜单,每道菜都有一个美味程度 yiy_iyi​,但是有的菜含有毒素,有的菜含有解毒剂。高桥君可以选择吃或者不吃每道菜,但是如果他吃了毒素,他会拉肚子,如果他拉肚子时再吃毒素,他会死亡。高桥君必须活着离开餐厅,求他能够得到的最大的美味程度之和。 Solution 很显然这是一道 DP 题。 设 fi,1/0f_{i,1/0}fi,1/0​ 表示吃到第 iii 道菜时,当前是否中毒的最大美味值。 接下来分类讨论: 如果当前这一步为无毒,即 xi=0x_i=0xi​=0 时: 考虑 fi,1f_{i,1}fi,1​:要想保持中毒状态,当前这一步一定不能吃,即 fi,1=fi−1,1f_{i,1}=f_{i-1,1}fi,1​=fi−1,1​; 否则,考虑 fi,0f_{i,0}fi,0​:要想在这一步吃完不是中毒状态,有两种可能: 前一步本来就不是中毒状态,那直接取当前吃与不吃的最大值即可,即 fi,0=max⁡(fi−1,0,fi−1,0+yi)f_{i,0}=\max(f_{i-1,0},f_{i-1,0}+y_i)fi,0​=max(fi−1,0​,fi−1,0​+yi​); 前一步是中毒状态,那这一步必须吃,才能使吃完后状态为无毒,即 fi,0=fi−1,1+yif_{i,0}=f_{i-1,1}+y_ifi,0​=fi−1,1​+yi​。 所以,综合一下上式,fi,0=max⁡(fi−1,0,fi−1,0+yi,fi−1,1+yi)f_{i,0}=\max(f_{i-1,0},f_{i-1,0}+y_i,f_{i-1,1}+y_i)fi,0​=max(fi−1,0​,fi−1,0​+yi​,fi−1,1​+yi​)。 否则,如果当前这一步有毒,即 xi=1x_i=1xi​=1 时: 仍然像之前一样,先考虑 fi,1f_{i,1}fi,1​ 情况:也就是这一步吃完时中毒状态,出现两种可能: 之前本来就中毒,这一步没有吃,注意,没有之前中毒,这一步还吃的状态,因为这样会使高桥死亡,fi,1=fi−1,1f_{i,1}=f_{i-1,1}fi,1​=fi−1,1​; 当然,也有可能之前没有中毒,吃了以后中毒了,也就是 fi,1=fi−1,0+yif_{i,1}=f_{i-1,0}+y_ifi,1​=fi−1,0​+yi​。 综合一下,就是 fi,1=max⁡(fi−1,1,fi−1,0+yi)f_{i,1}=\max(f_{i-1,1},f_{i-1,0}+y_i)fi,1​=max(fi−1,1​,fi−1,0​+yi​)。 接着考虑 f1,0f_{1,0}f1,0​:要想当前不中毒,只能不吃当前这一步。即 fi,0=fi−1,0f_{i,0}=f_{i-1,0}fi,0​=fi−1,0​。 结论如下; 当 xi=0x_i=0xi​=0 时: {fi,0=max⁡(fi−1,0,fi−1,0+yi,fi−1,1+yi)fi,1=fi−1,1\begin{cases}f_{i,0}=\max(f_{i-1,0},f_{i-1,0}+y_i,f_{i-1,1}+y_i)\\f_{i,1}=f_{i-1,1}\end{cases}{fi,0​=max(fi−1,0​,fi−1,0​+yi​,fi−1,1​+yi​)fi,1​=fi−1,1​​ 当 xi=1x_i=1xi​=1 时: {fi,0=fi−1,0fi,1=max⁡(fi−1,1,fi−1,0+yi)\begin{cases}f_{i,0}=f_{i-1,0}\\f_{i,1}=\max(f_{i-1,1},f_{i-1,0}+y_i)\end{cases}{fi,0​=fi−1,0​fi,1​=max(fi−1,1​,fi−1,0​+yi​)​ 最后输出 max⁡(fn,0,fn,1)\max(f_{n,0},f_{n,1})max(fn,0​,fn,1​) 即可。 Core Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 f[0][0]=f[0][1]=0; for(int i=1;i<=n;i++) { if(x[i]==1) { f[i][1]=max(f[i-1][1],f[i-1][0]+y[i]); f[i][0]=f[i-1][0]; } else { f[i][1]=f[i-1][1]; f[i][0]=max(f[i-1][1]+y[i],max(f[i-1][0]+y[i],f[i-1][0])); } } write(max(f[n][0],f[n][1]));

2023/6/21
articleCard.readMore

2023.06.03 模拟赛

e73e564409e580286645b6ab4422f1f758d1a44ceb762534c17e042d61fcdf197cff6a33dbdefffd0b43089f0f75a2c2be1fbca4c7d8b68f9fabafaeb816321896c683784f03e67fcb693a89720987be70b4e8022db8e97ccb03b8aef7bcba5af819cbf22ad7a4d0cd3f8d83cdb9acc5a00ca74ebe5f62c744cc78132ca46900f3296de1c561fc94378796865a66867d9cb5e78692755aaad5aa32ae1758144e2c2ab8af92d450e648942bb5bc397d8384dfc2f20d9f5c2ec6d8255f6f44f5459505ecfb9b688dfdb583fe85ddaff7d6d34b3da514620528fb3de994a0a6e2ac9799d5a56b2d979e3dfd580f73ba61a4e86e3da391d2ed153b3dcefc1d5c082a300182e77ff48ca57203d81be6b4b863a721b9154145d615c4684349e0ac33759893f59b812937aa254f6c8ead1bb88914c66088ae9654fdc41ddc68ad12e4283eb87bf621c3151d9dd8daeb94f4da583089cc664121956d60cadba3be1d962f60432cf4e5a47166f96c604ddb7a28be9afcd19fe69e7188f805f85dcd17eeb8fc85751c7405df6048c1f57282788ba9f9993c80218fc5754db074040c089b64dd4b5a34efe31627afb0495bdd67232302238127fa3e817fa997d7591c8f74df4490700edb12230a07ca2f3fc15ec99838e41e2ec7449974c8e60b2402c613a5fdd445181986228f8cf6898c6f272c3df006cb5c5979837f33c496f20f026c95ee85b01ea35496033699863b571a43a948ccd84af4f08800178fd29be69fa7aa54f4f2c5717b946c18415b51095e92e261c8cad4be80757f2760735ab94e0a1cfb83d53f0432ff0a5b712bf73379f8afb2ebb442233b8b127090e0813297785881d2ec734377f489117eb6f5fcd9edb0276ef69f33d210a3b456f21774a131e2ede0c02d28ea49b61a6c12b489052b10e2b621d517ee05c33dc549d90e92da016e82764b0326fde23264787caca5861680a9630088433e35ff59a45485917c6efe0ff27a656448747c206e01fc0752fede51f0bc6fe41d664d3ae8c1d0100ed6ec3c62ad79abfcf0fd9f6b5f60608d19a4893dc6e2455af937a341b6cb6a0a04634a101d4283dee66406e1729f05f63433ac9b67d58ac237cc734a9c082e5de2d4b17a807e4d8c15a6c868c89d85481c567c4f165dd000d192a291dc3a3147a48ef3105db4688a2850f1c0da56844726fb2e173a56ba23f8060db5cb521e6fd0657d9b075da7955b0928f3a9a9273a447824d85d8980ba814fc5854c7d3480c78c4f5dc9c44850d0f87ccb2b1c9db32a0780a4d3ec52286fae0c5a4626c9289a90713ff604533d9376ee039f9752a0e32c901d15ebb6a8fd5836c746e8fea372015ab2319cc8993e336ee56eebec088121ae65c4758ac447f648d7e5cccd42d30d43256b167d262d3f4ed6bb6a2718ab787317b702263ec8fdefe5947c1c9466d5c34bb01531141cd257a2445d38004fc3d2b666d8b6958e21c725a0264c1e0f502775d32e785e36fd9f6d023912b11c41b519a6f65a14e13e19c5275be2229edab98b592db60a0045ef9e8263c64c4fd2b5ced8c426aec8ce66ccf1378cc7e18f5435feb94377d2981e8e2784bc2131d65409bfb26f09c55edca098c00b9b00d384ee39b55a64a6d87001031e1232d2b684c613fe293f4a3e54a76d2cc82a5192428816507bae6a6085ba5eaf7eb9c513323b8b875f998bcd93ee9965e88af073d7037dbfecbd62f1288206fdf637e2f8b92a92eb01b1140ad98e9f17e49c34be69b1d62df17ea3cb93e688cc95a6ec8a625dbd9df7c68896b8c6b7a665ca3090fac12f122521e54c795386c6b48a160cd16dd1b02559b1c2bc5bdd9e862c0ccc6dfd672197d35fa420f713763ba1a805a49f241e2fa1cc7114e148b56dfe22f5946cc472713b1cbc94079e9540c48d94e6d5a841f74e7db49d8854566f2417aa93bb01668913abeaddf6512428b6064ebb338e07eca0a5abb3f29bab92ba8c681e49ceba93ef400526d002c2a8a8a4a636c6319666ffd6437b71bc8cbf2b03505893268ffd56f4e32e26af2f0370170778ab95209d43050287ee5746b1ba047b1cc46f90a7b8d4d34684dd0725f56645dd612b4ed7b99b935506d25c6fe850dbd3d4d9599d76c44836f1e50302c3b1abd89df1a389ec312d49adcd011d8af25cae0269cf4ac6f1e41e7f5be9ac506329b5c642cd6012e26a3ab1530f2efdd6ac4f0da29f637433b3e5e91cd45ae76f29136f13baaae1551d061929917d1cb29a45d783f35c8fcec0f7296f66a0620d14b6f98148b573f95b56d9bcc52df977c442e48123d9e3af3cd3a6be9619ada43d2acafd600de3c2c99e254f9569e130a305f1e6968e976efb38bb84bd8cfd39a48ce3a4f7ed0cf983d4a78303f9761fbc4ddaea1e20ee6f5fe420e124a41ae6558839d44144f2fa11d791cb52e4d4fa573c3c767e15a5f681fde5a4eeae89a086fd155e64ef9998ab1ce71e00bce32c84be9b27fae138d93215c71fae870085918da616d2c92b28e5539609db90d87e281828b2468dd323f4143f8c61d4d7374347cbdb13f186fb36c6a748fb98409db99803a6f2a50820850aaaeb78da41f2805af69fb98643b983170f3f474af574cfe92355606139e5dd159043696a990b54b6ac3093df55e23e09ae35a2d0fb4e7c1f15817366bfa8c9392cc6e127988a787585d57a8d83dfcb1f1f2bfa88e57cbe99548cd9fc4a3d0a8a2959196c44cf5f3342b7669e6bf213f4be2bf4e667a125ecf121e7ff625b9e67024062db2418de5cd74a7d5f9a195ef68f62ceae3e0dfbccc35a2f6dded5b96139baade35f738172fed5cef4dd180e6d6151dd82ea45adb2658f122ddd31b3b8a58e94a380c9aedc1be8765b679bd0dbcbec8662b33c428457becd52288cd5cb8eb7336951d27d387a6ec0b25fc8ba3008f0755d804b4c9f0ecbef5ec97d1c5c5d253c37445e63cbad0bf2d91d0c3ddeb081a51b38eb9905efc15c350e7039b6bb2999c2d84bbfe5f693705cc82f07e06fd4b224ef7007359a61618fe34f5ef392e3ea95bbadffea58f1af976e017a9f0ea03129f2057c529d8e58350d4d339cfd5f48b29e5f7d1c43c83808bc5285559917b3d8675a5bd4251d40ddae820f7680593eed0689556ab447eec25a546e24fa510e2dc8fdd1dfb7a219fe65d5ffb85bd16c7a4d1e169a1395373489bf5bc20d09cc25177baed16d978ab75f12d1d991c137b8f124ce4abcb15ef29a5aa56ddccb5707ab45df85afaa52838297af1ff4033c6b52bfff908356f21c9dffc2b15aeba724980dd73ba95a45d7e032739b08b70ffb5ea2fa94a0b4806cd827460b96ac9835d3151a744e7d9bf901feec5460ca589bc48ae1eeb6dd725d114b38ca945c3cb57e3f4164b6ccba636ab48677b95b2f0dff94cc0d77805a1c9ae0bea1200a80ce386bcafcb2fc5aeb5fae1d1fb409d478e6aab82c0d4257b27eaf31dd433ba2475116659485462fd7e4ac2f052dffc0fe8f2448382940e38d78952a9a6fbd0fb58c30ae6f8efe6f411a2bd3d59bfd3e4c4908656896f92f82a5e08803822624d37288c46c9495d1d8b8fa54570f1a51f3a0036a54a3b7ff4ff4ad20aaae2dbd36760295bb210ef7f24e5ccc2e5da9de7d77db8fdea29bb74be50eda4d7acfec2f5375548ea88f9c27b90317420ea42ce83b287786ef39b3075d4cbf5706986640895202079de002d32f0937a066f3f3581bc56493f57a4b26d42bd29cbce13f2ac312e102ce134ff2b5e979ddcadbaa855470bfb5353b50d9783f049f1f30845e5ebae058651ba6ab4f4d18f1a5605d3e92943dedb5c70288900369d926c29883aee810c73a8ca464874ce971b56ca547173fdf5adf520b66e737998483471263ea9af25023655eeb471fd7e9662e74f4db7d1a683e0b33690b98736cd71a747a406d253d701338b31b5d8877d109a5046a0653ecd9c4130d371797b584aa8b0f096f2ca167413fe25da9ad3dd8c1cb8381168ee126ca5ae3602a7f80d3410a0cfd7636ee4c2dfb3124c2c4d5368bedcd9df7bdf65c23ea096bad681c1ee2b6d7c6c45616962f90c6251d9c5da032b0b6ec71dd324f41f489fe873b361047ea99041c489b3f03fa25f13b7e5f9ca0fd049e3a86b2bfac82e011434f05a4a70401921d81b0e56ebba82d7c9a31aff86814d24c9fd98a6df7af46eb1ed4396837f9e1be0a5e164a5c1a937258cfb949c773d69d0fef625c9f943d77ffc6eddec29c76fd9a30328af1e7ca6ac6dba84d38ced94c8d9215b37f6552f751983aa6b858f89e89084f37a497f5c855ccb90a48c7635b275f48d6bbc5b967db4952a2aef615d077e1f7d704b4cc071e41677ab65289741644f40298128c6697f78f16eda2f790d3e1f40ed59fedce6cd32e90c14a25820e20a9cbac60bddb8d9263965217ee6543393fb8e44acf90e6398e08b1d678aa1d1f4c79b06920c17170053be7eebcc38e8eb04a1404a5e9104aad3e1e7078549f1384561407647e1676c1b7586c5ea9d31c341054aef4fa0df1677b80b864924e451ff5e1fdc156321172740ae75f0287e0bdcd3a58a001662221654f3a9714aed783514b915fc84ef6815c8a94e5b8220df8f466fd4b8f0dc5c67d607634054eed728ad24e7fbb2cec848be6f279ee97417c9f8276f842f58d7cb55fe23d3f569a0e5cbb385f5be59d1384218811f78cb32cfdb7c3187c6f03063882e1301e38ca0a373ac9d85b73d6c2384e9d4616ba9e62a705e6935a4731b26665664821c051a1b7f7a483479f5e909c9f671c42bacf83a054bb9782f8b8a814dfef5a14b3250b9252ef0e37044998b48ba0bb1fe30b7a1606837a721a10629144ff810ea8c453b9bdb9b2711b9a0b84f845925fa68c0d2757d56b6ba9fa1f1eb42e57548efc7f5e41af6ffdc99c0c4ff5e9cd3d80b2d1762eabc23f3fff820e4918fd90bd324a63b52e3fea341fdeda6d2c8d0b7ffcf300559cf9170860a9b7335cebc40b761a42733800480c08eff653ec7fb7c18b41d1e138fc4937df24188a730bd25dacb8a4270faa3f01e077828b9a558b3043a338c35bcc4dd6483a1e297a8324ad889b897eeaae7927e89079c3b5a2d20fdd13f6668387ef5c15fc56c3315599e247cc2bbf13ccfa280632531920427a885254b7e57275556f6fb4c4c7e5bed0a6fef40cd05d0d8c1ebe2ab0ae610dfbae29fcda256cc93826bb0b734a1cdc53340efaa9a6ae7e4e5b64481d6004ba2a4ecee834ef27e35cb787895de188af1340a3529ed36bafd26c8d07ab8b31ada3b31631ffcb615682464962cf9e56a5e65bd95ce00cc7899e7fdff1e69ede6bcfd36a3ee90c13478fd009b93ba9c4ca1f8a9308da8166af8f48578835df6ce14fa9d96d2889db2f3e869dfc2b60e6edb906e2e4f9debd70b78b48e5322c2f514170a553652c1dace2e1c0257262c6ab49e3a5dace4cf9a9950a8c8220d9d061a7630e91aa31f23744f96a5ed14a5f9f8a2872d2ed55659903107ddea90373a32ceaf7079ed29745c609fe3b3baa7a29a2a2413b44a8e762584a461b155205b7ed12f3cc13d7fb6c667e514c4025298bdc8f30cf0148bd2f0a9beb3758a064b6c26b8111d64ade55ffc94fb8e05d9944da581733719b2892aa49a2d33326cb3879999222081c055cdad4a7330665d7e7c4bdba7235180b47edd682ea510d7569e6e73f5e6f99951a9bcf3345cb3eef59a6b28e0cbe53d16adcdb19272a9c9664bdbedfc084c60631fe1cbb814d5105d4a1e388155362e4ef0c1239d4a33b23e5aae0be408dc97f60b016568dbfd540797bbcb79e6a89a58f705cbb343e4e9b028fe6ccbc8f48c98c6bae2029361166d31a8a2cc8b332cb79616a1c88a45cc1dc24f09b314017b77ba30aaad6f8e410428ed760b623f631281df8d59e62f928fecd9fcca11b69d18647db04e50e28101cdedc042972db9d54a5a1aec9c72c68bc3a7276621495f8a6d5039c637bf3e4d46c93cf86224032eba850d9e4d10b5e7817aedfd359ff21361206332a4ff386c31dd32723e405dc7dd8b8a078ba40823f5cd5e6f262a9cd7303af252fde40440031edeb7dc096b3bd36cfe66a10173415f7503e7567f3acc13d4a8265655f958c3e057a467ae3766dd05238f95a528cf935591d8f640f4e08ebad765d6ea0b32a54a15985335e6f563609ee6321be7d224a092159511915564dbfa231b3af39442d9175f32a972455898429c313ef9cfe956159e4e02235a8d89f23ffe6b8abc812fb794fc255dd5dc83bb049ea04938f3dd9c89cd34e5ca308fa17f73bec9d06dca5f1147ab091bf44edb59ecc757976b52d8f5f7e226c699b300a64d53e3be5899353b6c44cf8141a6c10852c6f6bc8db5bc576128f9105a52b03377a56409c1d7edbbc20b843d6ac7d7da28afcb90b877b4d13d23193c6813fa977e469b2c9f1b3e70e877cc4bd50a688a28a647357c061fa11e4e0806e3f89f9250e73ec2077691fbe5bab8831fea3121d651783b79137e85aa2a405ce86d67d7c00b7ae7aafa7577bd85ae163de490bf133204b7299f83fb4309ccb8966febef8948c0a79bcd1aa5d9b5bfc25d138e1f479684e3af966ccf06a5f732ea5d825fbd90b9f0d0a357e47797bcb4b5054fb8c046f88bc4ad33a3a9dfeff9135c654d33289d4d3c12c756116fc508d474766d65ec720ee7cc5e5dca42cf28a8ac10c07fb4140ca2bd7119e3b2584465ee4f4945977ec835e91963b1044b4ae384c42b55606bc50a0820c41de2d766a2d69c203f0b4d7da912f1b45b7e719d4387aa04b887f16c93acabc76fd885279086611dea8e48b84e84e4851dce5390193ae2a3d74a587ee5c239e0272965a802e9b07e039c1c719739558ac6a0988768fd1df6f184d7c11ad035e6053c5c30ddf45120e0d4490d5812500e6a6d31b8005615ab89015b78225bbe4f938128e309ee06bffecb155fa527f8c2c37618fa79b37955aaab58614ca62c0815fa71626cf78e263728af82e4c9f4a458081a55ebf1de53d27c0bcfc2c35660fc0ba132a20a9d529b307cbf1eb373b4404ab1fbb8fef892ee061249fe08f2809d2e1a3d47178d63ad6bd830774dce1efacf8e6420d8ac53b9ac7191001bd52fa59230a22852ae88df6060fb24d99a037b85e6fd34cc5262db70912eb991e17631ff0945d0ebae40c5df9a96511c202a3421540ce5ab20cead82d6fe845be0e03c7506905238329707c792bce1b5bced29e5f448ce565c3f6b810c2567032960ee2770365d31e51d4fbb645ca268c64c006e615017e4078a28e6c6110341bd3052d6816783f50621c17652a36facdaab37231703ba5776c63a296fb516a552f577f330a2753435f2d671997f9d3e34d345e67b9dafc6d99d1462169ae232bb4447b77f8e407d2b5e8ffeb809277fe38a59b865f8279eced54ef25edc8036e9b5782c0a7187ea7fda426655f641139574cdbf745451128a8c58fbb03c17ee96bb8081c6beaed44f7abd9f17fa135f852c872a0bd9f0b8f5d7cdf2e162deed9df9ab58eeaf01f2fd58ee77b49781bf2ebc04fbd25bfe36fe18945b329d81d593039c21b1903acb30fa878b387c60384cbc4f364a331b42832045e00271ba15849208346dbad3e04a52bc32840b695ea267a2390129267ecdb74c24103330f0131ed379355d89aa58436df29a1ac54cf7676426f89ec85d403218ce8ea7f1fcd5c99bf4c06dd47bcb4af16d2168ef1fce590e27a040aeb2918633731d5b0ac57faaa24ba0f437dcb1054412bff203fd0194f77100290771b6cbf0b7aac4781760061e5b921fc1c7c8c3684004505d54a547baf8f8a2f60ac9e0d560bb03de5fb066e1020522bdcd67501b933ae495bf8d687ef71851edaf8d9ccef6a1f0682ad404f12e30dffdc55fddce04720fd56a3146357f1ee7b7421288a561466ee14d4c6c21b7b3731813a8bd0d7b1471c02d8c492e58a0b51c8bd7b66de5d08ac6604f5ef072bdec3097c94fb6007cd6630d2b3a0e68b0ab1439ebb955bc490bcd5b65b0836b29d45108afb59434832025941e707878fa6da0262e36bf8eae1325e61204e70621ace8f05bb6d720c2ac3879b9c0c7d81180c0fe526847a3202a5ec05a97e30d4501a4faa49975d489d0c26d5e6cf5e0f9199aa18369bd400d39ccc7788908cfd04bf8eff8155d941c1541be256e185329ac6d90af347a800d4f5f09cad065be8afaee1eb006df316231d4b1b8b69e719539240819c00ad2e812cfe12dc8928830dc32024d8ee36e3d106391222bb91d8ed23c2b6a6f49925b16c361e89c63feee5ee6104d8b884ab22ca9febf263602c20780f9ff20b3f63353585706ad7ebe72839b52fd9816fa97258fbcefcb19caf6f5748a47949e364d8cdda1f9f2228b89b9ac34f8992358a3db120be976ef2141db2e989822061068037a54e5adb199070bc1315dda5e9647b9079751ffbdd0a056e6f55edbe72bd0f54b26830ef580ba857ba2ebcd7c15baae8662c2db490444d86e312bb4e2d5b6af66e628e479b589f62ab777d2d9fff1b940f4e02d4e9406a587af5ee38e43cd33380df50ea67f076a6cdb8334b99c2d1a2d4a5b62d446a828619395d1d15513e53619c15cb97304f884a58574c278e3d70d4d558b2f193d776611f44047336516a93088eb3ed95911709a94db3ddf37589eb82070573ed938d22ea42d1e7d66ef7516e28550ddb92b35f7f3ed7f0f42a86d2afe039c9e617145bed5bf2d8b37cbfbd56580bb1f22a3e408e3ef2578c87568609085e6479f22c5205cdf6daf6f6a8dfe911303eb481e7c46963a7b4666900d2e9b1cc805a466534d07d2a949836c8a26fa83e4c3b97e2ae46bb0db4f43f400e2f0c8fe404e99444265192adbd48c5eaee03940006fc27abd1e48d366e80a03897403512c993734737979b0aac6f69451058bf01b09b1f05904c6db41c929bb2991484ddf98e54c20f7d8b3bb1e96926150db839e4c236e7f29f9cc32664baad81a2869fdeca5cf96089c065a83b06e5e812534daf3db1502592b411d0391786882507bba86d0aeb6108032dbbed0e92dae6842d0bf26b364d812572ec00e9a6247ccfef781497ce3de3d111f95988f317592b490a9bf474d1d8e843464bc9d0a3b54194615ade42912d2eb2026ac872f87cedf5079036730ef911a4671c0ab502dcb6c8e8cb1c5058299cb84560ae0da675885cf73c5361e2917ea069970025082de5b661e4577369e94937a51cdab321042496ff0890ef392afd5232649e33d79fb987387e81bb8b4f80cccd02fc6e2ab6bbe4f5213a67d267c2df2514cd8223874d42e01ef2dda33faef14bd803675994bb1c0b08a5c0c2abbbe60d7cefaad0cbe8b57ebe0ffa52712b26d5b3e79df21fb86c1671fc34d46811e6e9089472acd8b45e12084ed7294f21513756f76355eb3f26737ec44eec78228412668c9acacbb52387ff215a4fff36aefbdabc2660afd9289286283c26eddaff4a50917a705c14eb610db0f4abfd51069b5f06ab0f4bae9781600949c9189a625709c36418ab3324f237110293295b79b67eae109db45e74649927d0c57f559da8778304e61218493fb60a51ab68956eb475fdaddd703a311c519701eb49543221f738366e853b13f5799c28a58992293ce3544de343f799e6304d53e70d4a03fcad1b6713863687cee4a7fcf3672dcf3130db98b81f9892b72ee4789c01609572d83b1a8b2529b4aaf5dd802413fbef718444165db6076ac28dc7eb79254ec6506e85904756ef6394653c5f2358b0a5206e9f1894649ed8e422b5c2d088d0f6db773d01ba56991422872e6f7ad51f8a20e6d6dc49d026a5e9568828e40e32a547363f7a130d828b5bfdbb96e911334c0a3ffa11133dc02f7c3c89e879e1f8501b890c51a409bc06f09e190568340bcc6f37e998e403cabb6a8d37721ce208b29d660c9269d1a93d3aa763ab7ebd061e9f05d5f1151014d0cdf3e17d2408a206c1b0283c10e58722f901b98f0be2824aeb86ddcf09a42ba346b06390046cd1b674b748a26796dcd148b342f3396ad8710fcef5e25dcdb37f9ae7e27a2736069eaef1f5f41438fcc9f7dc1dbc51a234e202e5c362b158e56644192c99d5af5c0c8b73faf9ab40ba4c19febd3dfb641b408b157df11b59d3f7a055574fed9bbd32f097588532091d49a305bf028810514c371c67008722cc682c54b15246d5680a6418e3529f90a691d61cfd2f9f1b64f1878d708ec0094b75b88d3ff9f83a7762e48e375cd410e9baa43b66befa6c7434f4d5ec10a753ea738b2e85b5c60630dce9527436315ea2cf2e015ef036cf0661fe7b889438fad30d15cb3e4e583cf9dfe6353ec14a779376102079c47f342b4177a32e7c1e6b38265d8fc57f3c6975ff3efd444e32d8d2092add616a52c75d7711a8e9d4ddf272195ff51ae7cfa7a24bfd73dbb9bb56a5be28bd27e28e6c3a1f9a1fedd03ad55552a0cfc000b4ef50d5be1291cb8eaa5787e7a51528e0e3c2f5e1831828396e2dd6abc15d9e3a6d040d2b4f0f5c051f43315aee2c59284e64968462e19f11be687a1b8a452964889a4dd8dcb10394b2a0ab04bb04d58fee84abde95647ade411e2324ab570fe4599fe363786d9ab15667faf4e6a32f7f7f2192882b9c132210b6fc64d8b08ca8cb558be022eb2a30b44711c7327e35a2c55cf3d8bfb87ec9f5260038669b3f75bef8bb31c82b11958ea552948af782445599a0cb2fbdc8700aafcff2bfcf318bd316dea884dac999880daafcdaa36d09c40eb904e9264641908d32b398cca6f44b0f73fd597276f8bda9c72f3795441c6d71ebfa0b7f07b1f2074de9426cc151e230d6e4a3263d14b047843d8fe4730edf81f29d652f33a66e9e7075fd0d4330a09310116fbe925fa6d65311d2d695ff3e9ec6f3558c780fdbdc855fba9f11ba445a8f3796b262db91ea4cd30f96616c1fa6f5830c0353a8b370de03d36a13e0ab111ae453cb9131762592e3390f59b9ca0003dcbcb02f95b1a3d9034411f50e53294c7315a63cde38be49f67f9032615cc7d8b3612cae10174a0a56975f48689826d5086bb2962d58e768f153a84940aeb45445071a1b7f85d6613565973368b5d4c1bf1d0b6d4d2c808b393b7dee6fa1f7cd725c138dc96b35589abce8cf382d55a9066d8008a0d4e939fdb95868e389301097679a338d48373a06262f69c55de67d1c1be4ef66022ae27228f0e414ad482a5566b61de15b11e071f1cf7435be85ef361755d692acd158828f567498a7f1a12ec6a8464a5814a73534f95abff96e664e197edfb76dec08a82867cfdd273db64c49c67f10fac47fcfde6cec1bfbe4e804237000bac729cb4078884cc4ef5934e1d7820bec85a5b54490d066cfa08132c826ad7360b6d8885e5e63ef44dce2ef6ecfb60f9f564cc8f4dff0297a44ccff103761acf721d835fa7fb489ff543dd55e8678c2bc936003900409c39fc64481409bb18f7f0cb42a20ca7c135e84564ff1b2add087bd231473f87756a9ad99dbc7689a6e9125d2fad60b4ea7413441db39a14265140ed62e99dcbe8f4d73069dfdbee83ce8b957b9e6c70cc09a6069c007253330373501f40ab2672b4e2a9aa79937a72a55c5fe8d040b15afe4600ed37340a4b969b6c33f9bc50de25469fe820def09bf425d33efb709f7b5aa2e0ce946edccc0c63ccc12d42ef4227939cf9d4f1a1f0f1c18d890a7a0382964f954680d3633bdb33db2e3b0b08e5d51eb08ec2ff3fb7d679d86480b95495acaacf7edba05c0094623164a864ebde39774e443d967a2567939d49362f89687c96e2ee5e1bc517697797682fca8dc56a498f2e54d5a9644307eda0b1ad311b3dfdf9e596e882d9ebbbfb75cc802eb8603dc33d3faf382e50836261d37a62da45d36640b7389611ac9439a17e52d97eb69f84d20949b406d4de005e651b205dbb51dca1f4312802ccbb15c56b9036b4af18a15af6e849730c49ce1eb042b3207000a995309043751f180cb80bfe8bb2bc9ee8820cac99c3d5552ea19240510257bbda8ef014b5a136a5eb5e6d0eebaf2e89c9230d665cda851fd2bdab8f5e38a9deb6f9f5a61e8f053995d330d3614208cbc50da1acc6994505b2d356e1794ef25e4f2ae252c3a7640e73cb7422fb8eeea237d9a3e617f27268f226f7b570017d98e432e9d3a3c16365163d6d44d3f69a018633287fe4ca21ce56a56afa7c256bd9aa88e08caa97cdecd2a8ddb5f844b59056d86cdb7c1a1d37e8b33a56dfa86f8963c079c81164fe2d768f80ea4fd1c6cef89b6eaa33d9ca80ac04892f9dd2e26de28fb331850f6755df3f40cf43e2224e04f96b0f2e6251da82f58054ff9f803cf440fd28b5f6a5b0a9678a31bf9cad105e795d45b2fa8a1b4941a196f1968f297b722dbbf4ff95856d8db160b3b416e4de3234cc54544894527a68dccc9ba50838dd314af77c6fc0114690fd57355155e11fd1f584b408615a37972b7564a82217ac92ffa6c1e57eb417a0ab8c3bb43494d46ad901a3ca4ef0a72a0c3411f77608486586eabf48a0e526b2e061fab75cf7bdaa8abf0e7d04a371d668ec31c7abc1fd41353e2cc975fd0b7e5c47e514a1160d5a064c65397c6f227e06d29cdb9096493c563363db33e6ee97f8e98c1fb7ec33a05d6e0fdaa6ca65fe00d8c61daf68d883c5f3f75f44defe404f78b818c69513db3a16fb0f670810dcec6aa47459ad9933c7901469e4077dd382cc881b20852d91d3443cda993b85fd6301109c504983d4f0924cdcf873de1d6f26559388c48af7ba5aa350d9a8bdb18e4d9cf2dd05e14963f5768e16dd13bfe9e35f92be624e73dc99040e7445b255dac32d62c707f5d3afab6c310960fc972445492a415fdbe1d9804c1c16a1e4462fa5669e1e167c81b04305fe23e263cfcd570180b55317daf2ba3f01855cab3a7f78f6f8eb936573975f6f61cb8ca7266ccae5d38a5a6e96a07ae61e557d87061c00744f40e84a152dee7147b11c533635d06b2cf4a0a2b02b7fa28674acdd3e0ac770c20552317a920aa34c8d6b2b3c993babc7cebb641f1ceb19192cf6cd49d2c0858eb23378a7d77a9d659d959aab55f2288423c12a422baaed83aeb6e5bc753c216fe564d7f61974a7d0232d1bdf88a8fc16b426c39686f14deb73aa9124a8ebbdc4cf87719779ea3cd93f4e14ff40e263b9e2b5512c9f18b372305c04a2bf408b03ec9366b1d29200f406747666984f03497aac49c91ab856634b33cdcd915409e3449b5b25e25eaa9ca35dd162831bf2d9c13cc88adf76676301ccb2a4f7d188be5b173afb5cbd799489be1195fe9fac6a48a4169bc78fb8bb25843fbfca04063907069dd7fc666b30bcec98f08cebdc1e2a24e7d7d2758fab4af3652eb107a301e29e368a36b21a753b30faeda08b2645b95ba1a83b65132f13297af5d3816616ccab8ddb043c2f7843ae21748a32734ee08a97c16ea560ff51f85ae4a6f1857d09b739a0cacb6601240256681e010342a34b626fca3327c8d740f8ecc2b9509d636ef6386a24b236a6ecb927bd7807919ccb69a5c0a202a0c795a611858fe549711da228c6859b3aaad96a3cd35f4161752e44b1cf77ba86cb2df95ed948c215584688a9503aae99a6aca3c15790c5d4e4f1383119daddb0ac108119a97237cdf748dc6f9a9e9d4e9f61ac652ba798fe6ad42f8c79a6192092436372099c2aeb146f6597050ab733d6e67fb7e52a4a20c8e3443ed583e0b3a2c0bed6a50e4086eecf2180e57a2da3ff4158c48022dff6b0f215f955081309dcd8340a8173809928a489881e52f89dd5e666e3721c7384c22ffec208d43b318bcab2524393a46cd15559d0551f1b54a6895b16fdf12a0923f749c5ba738b74c50e71f345e3e7f1fb124c5e39f256959d3e5a46c256255f126ed0570af44fe01e35821ea21c984f1996b70e76d99e65f9afe60a8a6a0460d34fcf98dcb351e831c8ed54621b40a1a52279bfcb933f10c9e5b0db2ec592a3b2abcc05c8713b3ad4cc7a125d8afd71f54c5ea72d87121ef8ba425ae3efc379529c126b03dec0a3387c24fee9c1b5ccb72fcbce302d1e05dd0d5c59ba3810b230f5bf843d17c61406fb9a6772e57ea32e1b57fc2b9812f123140806613fa65d685cbd7f57cdedfafbae3f201b4aac79ded163aa0f730b0b9f713702a3b42b3f46eebe22736f8fdccefd26f3e6a7748e5b8376010219b93ce1ce281ae55a46eeabec37b4e70927b6675de49be21e6c572218ce5b587e65b5c0547793acc5ff239c80ae7af2330ac23d9b28bf27f67153c684fd1031b0e2aa2a975281d46608a46155d76610bbeeedf012053d337b7543475a82cce03cd6e8d55eb35385b086ed9c0cf6b0060406bf2ffd9b3c0ed37edd21f383003c377366c171e110236821cbc53d9a5ae37e631c1f7e94a41301adfbc5e68bbc85b29c3684bfcbca5e5cdac4a03380708ae21623d4f13b04a60b59622fa124ad3da825034903f10cd5093a5d3a5e6b8e2893230d5842eebd318047abd35c4397607b77e356e98daafd9303457f56c9f9464b631c3018dc9e76d1a245a86b5ebadb8b2bc1f47070954308acac739ee51e1d0ae456c1d40f9f255e434d1b5ec0f42c7dc84539a0f56a8002459a83b7bed6bdd7d9d438ff4cba78a362ba7b32cfe8e235595c43b169e40d911927f48836529fbce3272144034450b4035a5d97040e5b2ef2df90ea018ee3f70eeae4527299678eb9b532174e18be7a00932213b4b7222961291b899d9c3904e213426fcd982b498d59ef283a759371d6dff691390e89d679b833a6791c59e0197e24c9c9c2a73f43c96cb3803d817bc925e7947d36bb6f45c9f752ad0550e61bd32371297a0e53c31e60081273b9c54a48b4ca816a479a901b5b11cbe08850864e476ca5030bfe32f31064291394b08ddb5d0b1c30f40211fc4ba81c86e8e74c47811b6724be5327d043a260718acfd31261d758175541431b20d065180e183a98b7cf9196dcfba88e196d1842d7c0a1bee7479d279931d6a0f480ccdbb956f2bca5cae6b9842659494da08727191c1ca02c56192cd218848c18ecf7539c4d3e5da7317841d6b51812cd08b86d57068ef4577bf2d691cd558dc1476253f4c9ce8c7ac3d32a53c0f3d7e31f92d2d519d4f20d9764825d0dfba6b3e82bb8d257df47dcf73109a2955005fbea2c15b551489ae71f3032453828ad74745831ad331bd748e2e4adeb5790e77e5d74fc6a88900776d6151994f7c3e48bbaac93b10a82792db2c989e2c536bc0b7beda12de0c01fab872ca2cfa34c5d447211dcc468728614e1af368917392a30b23a1394a5dfbe5347746f151bdc98833ea67e74cb44cae8cd286e5833fe08df29a46ed4fee7772e25adcc24e5344da53c5ed77ed0a63c55fb5ff99530e4e73489af23441f3bf01346f33429ccaa6ef379a6c392da100388d22215bdf6cc39aa960b26d4c523c9eade07eddb3d7598024be8fd68216caa4df13eac57c0867479c14ab7c1fee3718759b8b3696071a8c9a895ca5da789f1f2f9fd2aa3a4964d5c559c885892ab60b32aac02443c2216a87684007b09aa1c09a5271b4f13104f9a2b5618b2fde5e37320fc9638ed31d7e601f51b59620b3038c4cfda22cc80a3baa6ba722faab9d5954502c7beab413229fa51546ec8ce2e848b1a06ea409333162fe3520e0ca9239b70da7e7108401f5002e88c98da38a17358894fa21ef67a808b08a2e701dd6029929a3bc85c4bbdd8c467a06c1461529cd0917e24e1ad73e40a41b12eaff87c34993db6005720795df25cb08ef0604d42ead7a87e2361aad58ca8522f6ed9c67b93be72d0f8a395fad4d027652f5052402f59d3cff6692313046e20793f039b28140f0f24492e090baf6071d2570a223cccab923ef536e04b9b09a99fa78d4f9a61d17fcf45c528518769f132f1f3f647c0883ca78ccd34eb792aefdfb8ebd48e05fe756b1556a5948ff7c290843f0c7f1a03ad7cfd37e9b1803ff6ea169a5028bdd91240e4ab24c417239b803b56ca5923ff4eaacd80c4a6d93efd8941145f44b2ae0e79baf610a7957ac88436fb573581ab25a0ad9f1946c4a0c25aed7cfcfedefcc4000f8a0c4a2fb1cdc4bd7fc46ac106ec5abf4eeebc958531e0dac1157bee53089858af8114fdb435341a11a5892e5955909db6c0317d31e273a97e08d57b19a342510baa5aea266da692554913b4f06c51f6851b406936b4f01c6491972e9a5809f136a2b44472ed4274e17fb4f2a2329ad9be138a7c9321179273203eff935a158b820f710006bd3b51884dc403c107aa242b524387904e59b3e6273593b8a58f50f4591a4fdc9be495c48e66d867fef4921bc4860883a66d656283f3305750a7add1321aceb6bd9988a0e6cc31d1b17b3556b2fa6611085ca3798e14c0e4c8cfe04794eab2c6b1c64eba71efe3815066d956dce3be8fc28c8d09389e90732592b6cc1050c496268f573887e14a582e8efeaefe2f5c468dab579633f2b8fc0cdfa44ada61fe5c91fc82d4c13bf7424c9b6edbf254adc696e06286eb2e038d43c93a91e0474f0c8dec4a8dcf029e8f8690b85f13e59c3541bd438ed7966f591c109be17ce57d01ac8340ce6f27c9f4ab614f5b00ecf3336cfff575391d3df87a82d753b2b3d8e61e46d3d37d67cde1ea7783bbcdabfcd536439701919f279bd2306c80896f495a0e3118ead4db862ec542b4ec55e356b472584fe308903180b792e9e7a8f6a129bf0ce3379952025b931a6ea336047b96571effc6bcae8ab5d388d90f2c61eebb7134aada27d5ec846fb568e4fb6629dc1ed9e142923fe332e94bcff9a5aa19f31b1aa117f59883714d3e3e80bc628aef37cf1981371a942bb6481ab0344657050029e78cb149b35b0c5c6d6600f2fda6205395bdcd49cda2bb07996693bcef17b66a98058426cb9b5c5d5cb40ab05c70eeb9959087a0ba02a6a04a6a9e7f6e4b35bc061ce1a8f4cb9ce96640671846ce131576c4365c79b34268bb7083a7dbbe0226a52956f99e91851baff00ab7ba9ed01d471d477eccf3e89d66f599c598e3038113e0f57da14d3bc7fb3fa7bdbdacb58b1523d6ccbc29cdc9f8b244d9c825cbee96b1e94aed1a816a37caee66a4c3bd1119724b246fb0cad48e290146ce7870420d1cef0ab973369616ac384d8170808a0bb7688eab139ccccae5b38b194f00b36caed24817f408e6f4a0cde23e443fd78e9dea5a73ccf2ffd1f7447dd8c83cbbc98790dca56cdc406c1abc90d34777a5e45558d927eb5f2f3d031f049dbaa2650b7d4535dca09646634c6e73d754c4d0507fa6334f2190bac4248300e85438167104eb86acbad662ec88e84822c999494033927e06261344ed3be1974d3a1c5b96739e0be9884ef8923add1b4030764b4c18cc519b79bc40db1861c1351509d34c568c228b4e5ec480f5b300771d431532f3cb8fdcfa4aa2c4fb64995243a78af9f6e27c0c55e433df95b9c84ef663348322ab24b52c42862efea27c36ec69fa58eb0c09242ec98d47fae003fbc92d8ff4920e47e3521e9a786623ecbb720f0cf06a0731ad29779af22a1872b991348e356c698a6228561271fd7e536e37d1e3937ad4fca62c2215b72aea71c0139289636717d6309406b7a61d1e12d199b0123a18dd9d4f24e197a754bcee9345045a74cd608e8da8a1ec4e0a367436ea51b5525961db2bd57acffd298c048fd1e907737ddc6424f12ca64cf707b218f807f2d6b5299162428a67df132d834af8d7e821c0e67a478aafb20fccad58f1bb7f92ac1b84ede2f69d4d4fbae265eb9b3c68883d42d7b3e455f90613ebc8ec72c503abad75c29c805a94276306c67e3401bc1893436a74a7f5f0c97397f085ecda9e4faf25500cbfd6a26549e3514c9a67a2fbb0287c41b0e8d8ffc73e656f7f96c393d97edfff2e3f6df11413dba564318ea69d58d5c34ba3a3a8662771ef99a55ca71f6d1eab354b4bb680b7452990248eb4704b00758f3e31d964de2497d8ed2879d97ffe0a14e71936b7c09f2b8fb6378f5d5e761105f4de6763210b41a4ff203b903c14cbd5df2079c3f2e3a3affa21e22c4a777c08e5aba0f97f07f5f190ca36658c72094da963b17d928db9629b24afea59b43f52822d7aaa0d2c8b621c8a6b0d8ad41cad5fb1b7033e517484f6a058aeadf42d26f2bc20b969067a589593c5c0cdd82ef15d48476222c0df86e8e152969155f239d815608ad6836ab455c6009a817bf38f22ffe1d7db3fb95d3947417ecaa53a6ba3d0c12933cedc1c6a33200b2c674a5d0636de72d6a133b3df5870f25c2e91dec2b152944e5c56fcf10b468450e53d15708af4dd0ce1c40683dacd6a6eb09a7264a106f3757392ce3c60f493a7e55eac5b97c11a71a4e3f7639db010ceb280df3fd266a6fc90014793da1147b82ce508cf69fbd675d5937bc4d02b39ed31e5512a38caf4bc360a8b082731f6474c8ed194245a1d0dd10f4eddab0b68fe32b185499eddcc86621a39692dc19387c658e559e85502909b0304258f1551ed44a35289cfae2638e999227456527cdb8b0045a38da18e816954d7acf6b906eb8bf47667b7953ea5652ecf92028429768963daba96f07f5fe822a49ec8d499453ada039e870b22f155294f649ad6c5fee3184d522242b502c03946a337e4ae3a7e5129e110e16335ce564cfe322e1f17acc7760017f0a8e2f697958daeebc12362be0643ebd36b35fadf0e296c598943b8a7a0635d657e772ddd4b628c59b9714307edd35f2de448d740610f4b0837a3aaa17a8121cde22bd4f7d850ee6850b4c512ad0252309380ec45cdae7a1e64255bc0b21a89d6e58c22dbdaec2589c4b9634a6c0df85eda86b14839de776dab7961080b51c32f5ed1f37e2452d54033bced913801e9358a46ee6ffa69b63c87f6c89548bd24daebf58fbf7417229c0714cfa7fe2d42059aceed6b28e9fc6a7343d1137361432b5d356bcdcab84cb5cd37c0ab0d184cc1d8fb35a27d300c7e177a1037c966ad46ac4f4f75b283cde707b12fc5ab6b3182ad10b2bc5acfa438bdafd2ec8d645251ff337a464aca79d142e993e983db9be7e7c834285a83c870bb063329895de0299b473927e0d46e19dfa3505a6b3cbaf4ac42e9c478303ea46cc89d188866b28c70714e1dd2b4f31e44b7bed3636e4071c6a8f203f7eb8872aea6dbec1ccf659e67ae9b521f8ddbc4587c56972db0da6526b86429c0a565b649dd4a80aae8cb144dde2442b974a1d669f54e8e9c68dbb22ab2c5250d430d9ec04cdae82ce3946fd5a50ff9aa34b6b347da22a9899ce611962ba5ee90307cbea9bce563ad78e2ac5a56de4adaf141a56bcd874b6121fb93748775df1c5ec5e9e2f9ba42f8b5983f2d4ffc5fb5cedb8e07874807a236b3a05afd168c807a9306d0d545fafcfb6ac03e131f60d61e516f2e8a75faf829096795178c045f5ce68c63322b3135b05c73ef1ef256f5d570fa3ed4a58aae45d62011ef6e61a7580e57c0900cb4dc329ab5ba30820eb90197d2f756bb6f3d05b5b93790f80b3fa3bb689ad3d9558e5308cfca0256020087f5ef0534b0c6ad330d4dfa58b21800007fa5953a2f08743552f7175fe28f2f0cf8ba7eb183d92e162791bf7cf139fab831f09916d7360cfe1e77823eec1b9b247ec5aac0d3b539922aa7871f079270a0f1739539719beb96779ce043291a790896993b35cf8e0584fb8a2e7bcf74b4d2a03a67cba75e58592d52bd7febdab2878d1da50439c00653de43b40a05898fc6ad10667da3fc400f87d235386c1c0b060780e12c2a32432c685e64a6e960eb8dc04ea39acd2024dedf897b33fa43ac90ef4076b0ccedd3c5616bed6901b6328dd6815b50e7f816838d5de5f7842a005283409ab2d2a938443db364e330b5aea2e82b294f4d5b89acc5fed6fcfb19cde785c91dfed077598f888798a09c0057f0e88beab3e400e3f26e5874df1199974d786aedcaa895f52787e776d9e5ed1d79dde8e35ccb4dcf86d72a673dad649e569c8f4a7e408f4fd7531f19c79cd6113e550a43468250a1a65c5304776644a2069f2f3dfc04cc57999545ab6c1c767988728e4f47eb6ae3d04e9b120e6284806e37bda5837f75703c593fa72c092b62f2517b733efac25331e5c011f00343d62ee62078210a776bc2e1c28c4220f704ba01b0b67524129ab8481f10b8315d716b9456718235a9dd03bcbc98c4cf8296769d39d5c26fad49f00be5b59bef9f6c40761db9041dbce653bb52a5fca054729b7302bb8cafd0dd1cc0481d4995afd3331372a63e9884b37a2b0333cc2741e10206954a438a919eb9de095def8e1f1d8af7727765b39421d82b35fb8c1410fb252f9c24117f1d50bc3be04f72a81d7aa14ba0ca9e5d9a485f54a1337518f7f7fce92e66ced66060771c98f108aff49be8d8b8fe48481ccab2474ee38049951a71818a8e699f032f14e12a5fd869f190aa0ec4a542644b102aba6d3859731fff8977d2b06f2703e85898363c4795b19464f09ae711e0ca8ab6e83d008ecea94d897e05c0b3e96b60438e824c892179c431d2d67ec678cec513bb6d8ffac38a58dd11b930257dc13ad4ddde81157aad71dd96772b8e0e4e25235ae64823b9ee292ece628eff383348cc25344925640108978e2b9115b81f6aebe61ea34b4147859e610070196e1da797f79b975c36f5bbf905b85b4561242b9d53d81bcd43e31e59e2d071cf711c51560c678ba6641b4ae778b040297c93e42dd8298616c6181d40072b961c95a01c10e949cca5a59f401fbfbe781ca6819fd06249cd74f8b2dfb20733218a2d5abfb0e7e8dc49a638d28d44b7a5d57289d7d55b20ac161c237a3fa8d0a0c0dd55832e7e35e980a4fa3c1e2ba20513ded6bd22ffce7026b868cd23e9c08e874cc4452d0dc1891fb865260261be20fc61c1d4cf3df91a3297cfcc9427249d5479007cc5a817f9d659546adfc897c8e8176c114ac4b200e104c343cfa887ecd3a7050c8a57aa45ef148957150f82db09d1d1db80ea9f2866ec982e393976976adb9726e5612e7adf0083f7ff07f8443422484c8d9adceba5cfed85c39ee442565e6294a3665ca0fd85f902407e19fcd204e4ca6c5e815e662ebd5063cf7e7a0135e5f6051e4ab9d182d0af121b092aff8c13972399ee3aaaaa6e63e28dac97e4fe77244396cd49eba4289db1b96ffb4880e32e5a4981c4cfd8cceb2112bd0a6f489e191d82b04af32bfc45cb5eaee5960962402da3dee2acf9df1db49334dcaca634700dcd4fd5cd93cf4872f9d78001c0a261452240aa791d4b8fac96e6563111b5690d07779d7fe437fb97a817a8948c9fdb801284d69519a7b9467944f5d29f59fe7f31a06840f5571f8ac50095b04cffbde9500dc9cfc99a4d877826df34837002934e8047dd27b9577c3e09df6939320ca4d0a436cca5a285cb5abe73efc39179ca97fffe53226d974f89960be47448c045b29f7f2baa974d81d8e54b7d822e9a44f82e6c34dc09e142e8a173c87340f6704ad64366d3211385447fe27e026c5d4b5046e2f653d436f42b143310017e19f38176d73546d381b59ba32b689e8bed77bf1a01c250fac6e5ed9fbed77613954db8ecd8eefdf9a657bf07fa0437b33ab95f2d5d8cdf575acbeaf0039d820a5f5f0508314aa12207aba327791dd7494db4b75b9a134f10e2f75d03649518c52a486e3a1798df59f6e600853730903f7e518fc91a5a92dca185de0f26e4f050a0e050cd1349023f006909857dc2c70f55a52e72ea36f35f1fc26dfff06d3d926a09a9c4cb39c526040b4eb0b86b161a7cf607e3fcbe805d66faa06a46af3330cb7ba5c6fabb1ccd3e182f77d604ea999a059eb088f513f51691293d75f1eebcdce9aa5da40c515a1562676b5d16e56d8196f48a3f890795465e1defd7db9b9e9e64a822e2066e44da8873d857b39a8d04ed76a9659c0777bed0fcc7e237dab9d718cb5dac4d3fdb660bc5d5f1040a44bc8b612a7f6591c30c4ab9a3b758f47a47a7e2d9654552d9322f58165050bceca1d5dd8764291b7b92a6c7e39447d56665ede7e6d2dad4daa1693a61a5bbf24f5a125073d8335cd97aa758e298718667d6d0dc7ffcd780b49cc43c083f01bd94c00702bd97d1c366fd746ae8354797e9e7198648fa860af6f73557a4b6fdc81020c1e22e21b4af532e6fcd6b4bedfb5d7ef2fb0485559fa986b6ccf4baef52f2e6720d0fe7b671bf3d418ae3a139744c5695f7be8c6b1a8e03f9d02380a3f9e66eee0e9d444d0a45f0d45b9d0d81f19777cde8ae965ea233d71ec23dedda2c2c3ecc7b11737fdb2fcb3e6da94d443b432f0f242078bfb5cbab79dfb9e4371a2641c1986d8b2f5b8b603493ec4d56dd3cbc5514c72b505b6a9778e911591b0417b20fcabcaf85b410b825089fd56ab60fb9c4146524f14195089f38b1c77f3c1e74b435ba7d9fe48aca1b62319fdaf489b0dd467c9c20874b751a2326f351268834b8660fc630c9662fb9b6416d510fb5ef9442ee4075308519d3d1b6d22f011df7760a1616f062c28034840e2458e8abc4e5e53fe952fd5f51b75e2d0fd831e93130f5fb70f1506f66de137c7b79e8b2b31d313dc695fff5cf3e07c830ed67fd08253c069e4b65df505e9ed3c0e3b19073148c592634014e431a9caa845c280bf45098cb35299c3e0d960fa5d861a73882ed1585eac765a86b5f266c007d8c4a9a7c46c80e3a8b338678e2dd202808e1d1294fce4888efb10179dfadcc703514bfc88f7e23ce7dde67296aaa084fe5d2d013455eafd09585e093c5fe3715f6987a0750552b50b63ca3b8d79566f76cb8bb07c178e04be43228be0c45680186db457c981a3d3b737de89eb042fb965a6f9af6bc85d9c3e57bab9a07c09cb366b4ab5584c14922dbe9683d12798bf28ca6148b854d6ef0728da863479580c3d23477b2745f3e09a296a31ba374a4fe7e396592a87825f0e99591e8bc49f67a3aeb10868700331365df4d62ea546377f242766a86bd6dd2b8bd2cb1547c132741e6a105c8443e240b0aba6f370e5dc0f7f0ed1c50352f37996eb1283300c2a4cee59815bb0cad1734d1da159eecc6f25807e7c564e4886f2e3d0b7a6a247815ca29088d8452fb45f97028ce3a563541d045793b234d2538d4cab56bb8f12514f9fc588606924efc8e21663b74df906d52cbb31690a98fdbb708be6dd3d8002a3891c44c99e8e4c5cb835e247b01ff6ad1ef79274445c1b2c24f17aafb5819f149f9bff8953480d8e5271c52f042e9788b8a3ccfaf0b95d61aa1258b9afb88138e588231021c0ccd6651cfb708a7df5f6543fedec0bee3ba0f69b0d162b8e4e8c3bcb4254c296297c1c4a33e87e50eeb13858a8cc6dbde07ddbbb8513bb7829d0f170fb9f4a1762db1d0d7b9052bdeb90dde162bfcc01c7886abde3c2a70644391755140faf53c8c89b77dddc1b6d1df2be906d4d59a49a6d34d3146b6155b71fc38e5f51733629edb4d101e077d94bace0218959a4686b1bacae8b9e8e461ad41005220c82d34ce12b01dad7e55697ed22e40a4d18b7c23e8f1b06885c426aa0cf0b8815fd8c58d08084f2635bebdf0fe2f39696966da1ccc8f4685f9b43863579a5b6eeebee9addd0884196e87ab0986d9d9cb5945d8205a5aca705d4d4334ba8d2685d814062b2c9b1ba3294b980beb555ab82c3266304554059da64238edb791aa24718f3de8b1b641aec612101ca737f3ae3370238162ba4429efac9f1965b5dc057d7ab6decf86ed6b1b02b1c43262f8f3a17bb13b088ca8919c4acc7eead995ac12377521f6b1a15045378dc9e4552208e683023d2b026adfdbb6d86abc72a4e0fd3108abca5448b59cd2eb92f6d58f75620d89da357a84592c771b36f31b44159b4d77caa870cadc0760035507c577405bc5181783afdaa47ab2c3e44a621f4f864900f5693a4de397538b60019196feb03c6b815f302c5c2aaf9b7e8191a9e2664f79687d7b71c19bb5c55fc13ec3b2bb006ca561d479227d3d25d6953a4ae9a359e8f99acec8eeaaa77f40eacd21af9cfa232018545df43e0a81710b80213146ac82af22be34f9059e835284ff37c09fec16759df0803c471578e91cdec56f31e628b220797f00bf0dcaeb477a7d0ef48be705417d9917b4d80d44c8ef4c88777072a4d961b895cb67ac508d88aaf7f68fd92c54910f20b721c86c44ab8fe4681e75f357a22c9fefdcb793a64384d2b4675a811283e0326482362c3fe4fd3d76e7f0e81144770fa1fb6a599950f5309dda3cd2ab70f0f297004fd3bf98078f6d657d7b669a10176ec393aa63b93952873f21964040ce0fc7ba570ed2a60e188aaa7dabb260d3fd6ab8f0e47fac061a3d4b267a3492ea6aaeb9a8deaec774a68c4b9b0ac38664c971b5bbada5376752af171eec2010d17104f2766a4633b026d29f8a98c1077eaa17e4acc79b5a5253517213e02e989b5a933a62c2de695fd4cba7ed292a119f3eb23e7c626fd5ed63742bea6720ce6c6fb9be4450b16fb21f0c4073d8be68baebe63a329a83beff8df78cb03a5f2b156a96bce445ba72878b96c80bb37943cb63c3d138878fddb765f772105a5e4fc80b4fd494ae919e9ef64731a2be59a43fd06ead059919eea17e58bff3489083a26f2d74266951395f9d5ee6d5e8e3daae4114d73bcfe9a02f90e4ef699832aed6cfd050505ddb8d1f7a52d5b3f4cdd138f6d5606185322db7ee120d473fa7af502f62ca61772ae4b3b4687bed0520011d55071819744801ccc4f7a9f3065fbc747dd306cc5e74ac51636724ee428efcb8d1d34d7716a8c00eff3ae5a7a65c87a067a0adec26f03e4fb395a3bff443474ac5ef38f0ef2bddf20b03eecd342291ab5fdbd9741ea7bb6434e613661e5c786224957c46e8611ed95207772d4d81809650e2b284ae9af388dcd9380cfa709039cb34f0cd4d02a96ef571bf26e679d96b323e12b3f7d6e8cdd3cba6fc8756ff551b4ff8d87674c8b1837728042c37c0e7bbaac8c5f909cff562087a60584372489d7a161f38a712464d18879b52b49d5d1230b7b0a020efeb67cf0b6a7a70fe601a26009fb108863132a956ca5304e977e2c18b6e8b38297158638fec1f9dab4fbb51d4eb9461c070de239dba48a5ed17fca69bde237f3b8a27d3fc4da5711306330075ed1638f752693d47e0c3ef9d4d49f9839d3eb436a271dd8555a9579eb87d4a747432f543c5958ca3acce57379a33c96e9fbfea45d4c43a9a1ae3794838be25a3c8fdc5fd4bdb84c56f5b1e62cfed635c9d6d9cdb98fa23197e295c8bf723daafc2d8cd2b8f132d3b02d132c8577bb7b6c9041abb699704562319851060d3a82589f01df7e558eca61a9db7cf005c2f38f07bbec1ce916a6d7a70d5bfa9a9b5fc5fa9ea0f43513ed0f446e1521203daeb82ad704e4d4ed5b82e77c9f3254ad8fac9058bb03291a86513b4fa1fc4652fdf4e71f23aaf825563431b30886d0507d4a913abc9d5053f493a72311949c20928f62126d9576efe6773bd7ddbfac8b0241f52af7d8b14ce27f0a00af4787a5365bacddbfa7afff9f52e9e490b51c7c3040c44038f8a12fcae33550a0d2da01c99f5be51416c5749a9606565ec42fe4aec6c92bf401a0a1283aa413c965ab56ac560b472662e8bcf237ebee0fcb398390ae8bef6de3c377a49809faab25f0f2cf06db4993daa2e83c2dcfb8a3678c8d3f1ad1d7c347b614c6a8663e2d63f67a17dba54e55830d5c0bcfa3f17a9bc7da8e6a97e1dbf3c2529ca30b295ab64a68f5c65cbb344a3129460f9d749fdc2cde93b39e478a230cda0927721bc1bc40467dcbb48604d3065ad2d59bb516efc25807acdac07aa5493fde16efbb748c922cb75da81f85868057bf2c2b623d1ae8ccd54c3ab1739e1515b83b680e8963d56fa1c3d0e04efc2c94ce25d7e5bd006d873797e2e5fe3984e9301113fdf73d328590493d0082d02d1bebfaa9434b2416bbf779da91f2a326bd7df3e2af6223d2d3c02744ab6812edf2804837d050d0e073ba707a52ce63aec2866c3eb2f07301017fe4254fe8e9dee123d7a522e4f1d3e531ce389fcd063cfe59a5416bff1d69795ff57ff3702a4255de88b7b65ead1d0542d7e21ff2d1bd2570e3c1b6c5b4fff06c08dd9acbf0c4d2cd42ff965e516023132b335cc4171d23854e1a8fbc77cf3914de5c0b0aeb1638b0bb0e73e16de8dcf85f4db7a8a68b65d7eef13ad3add66706152af83162ff223f55179ee064b0f4dd4b5cd30815fe1e0c6d7d699161db28736e308ea243b3820705d5a96fbd4b7ace0e6b52ecf8c94df4d9e960d9b781d906a3c51978b021fcf7b6edc7980d8abcfec2dc11469d708ff4b2b9a60d78d447bb0bce246f1c3c9b75a998d36f9877eb0d562a00cb38ac008a045939cafa44fe8f366e97b73ffecbde47c696f29d1e2e906691d9a4d58ef5032325ce066a96c291de1a003ff6542f9e9884c23a794d9a67a6610091a64e879eafce3666243458a2792dc6e0d5d8d56f581176d0ed2270c057baaac4f9c777ed8de00f09f7692d73f50ed685ac6be90737c7bde11321aaf6ce6b8e4fc115bc4c8179235994609d997062a2bbe97efe169f765837af4f47120342a7924c3c194b8c74dbc9fbc0207b208a78c08a5ee4997588992540ef97b153178df4a7ece0ed07d133f443667661aca937f957b1c919abcb9b2b09a4b5d38cd9eb30e343483fc7951a05c5d719bb8406f455b336746b47139e48701b4706bf6d371644fe94ddd0f64cc9e0ccd09d33bab6eec538da3919ed4e8a4915000cab3978e161284fcd79d73a2acc2e11039bfea4bdc0fbc647bdefdb4e1346976df26985aae9b99305b86b2da5f52b4907b2e0c803efcf96dd3a150e9da4a4cf6010545003ff3dead307e7f93d5ae68e0f8cc045057838163c9f1d99c5ae758508fc2e64c110d448f4c1e25ad0e7c3d9d32d22682cdb499f02360e696e849d37a431b1171aaf8336b89b32f949e4599c0e154a6c63dcf02328def9e6089b5c58e13dc435731d8e56962d27a7fb342e6d10734f47356c996e98f7cceda6f42fe917ddef6ee2fca53e3cbd106b2bf56228ecd940aae1a2dcfc0b9a76b5d7fac13f8249edc5ac9bab90e3330f82a9c06b09f7bfb6ac6796cb116aa7ca0b24ba9b34b707fcb3b574bfdcbddcc57e48a5f7a4cf17935b6de91039f2b0d9668c23e43246d1578015cc46e4ab65663946486bd0025b271e4c8c7e057e9e9f90c6d1fcf083a4c941bc6cf99d61afa930ad0f88e61578101ac724ad123f6975d409fcc470a44a4fceeba1e1b97658578d9d2c91d22de11bbcc9e192bf7fc729f425b2737b49caa565a2c7b11de4e99f3837f7d33c6400917ef3505d5fc887f8fbf8b44719f945c1c448665fe75104efb08da683ee3c6cacdd67458a68a0c68859356ec9233e6974b94c79046efbf6860796c56e85d1185c2325cce0d2f124a8a3cfb6411f1e1f100a3237fb2f1150038dcb729044cc15e3abfccc73726a907269f1cde774a7652bb896352b7a2377f1aafe1dace12631ad15bbc15d48e132f360dcb7cb76ffac84b843e25549df2be95ffbbf93a5d9d827871a960025e0e15595f821e283750b0bd508907eb47d7ab84aa9ca00d26a89fa1b0c4930ce39bf8d4ae2602aa7e2574234d95a0db526e16b777717ea65a3373a2338e1072d22561afa88a086d3b91a39c2b13e8d186de1ad9274bdbfcf964762d32384212f10aaaff224944f41be4819810f362292aa9a5b5c05db45621d142ebe13eb84f26e4887beb73e37ccc3065c87a56b7d0b443649ee45fb7fd5d781beffa3f1e2dc99c34c8bce8985a1346db3c633f63ad83e8bb27ecfd8dbcd9a2976c67e78aebe1f3122495e1695149a95c9c98d501042bb03f964e3b983e4fe7662521703794d63731b197174327f1bd0bf245cf27bf5f6ad3d9777ed69e8e1d5f2ca395ea215f36dc99a1cb34e61e5df1c1538c9f63e9451ed09b729e4411b969ab9014b023a67932a574fe309223b07fbc49241ac04d6efd514d2ce2bc1e351f6caefba3a54697610b8e4cfad3e33f5ffe047e937b1df3bee0c02f8b6b82c409c7a1151273822ec91d4766159fcbe24a0cadc2641de25e6ebae0af25b8d6e4cc1e45c1480e3008b60a510e55afa1392b0a898b3869846f6f5acc05dcf2623ab485768524a243e239b873e7ce130c30be90e6b2f10eda73b50b29334dc09df3a8011ee532b18b24795eb5d41c3907c897a3de7bf7b86265797b0547e1b5d21bc74ed4bab71228964c58cce192f46b00127f8ef0818c26f061fc5ac8cc13f1a15dcb30f75d291c773fe21c08ba607a34c382ccc6a7bda7eb946393206c2fdf7051c06949e7f4f239649f8e32df0fedd407920dfa1e4a7a95697f3aaa43230d3501f75f21b52e391c2d49bdd325163cacdafc7a2b4c5cd4677d26e4a0ad9de38c52c84a2a7e52785e969b30d8185d5c861e29bba25f91e3fe7e6465d942dcd32f99e5ab0481b47abdcbb9cf795d92bf41fe152efc6776d2bcf141387d263527aacfcd6e6af6d0794528afa586683fac86828af9bf9c3af16e4b3ca889274255f1822afc95c39c9f03cee6f6a640ab3f8f04cb9afff74e71786343c4bf08d2b8528396ecd77b43136c7cd6b15c50710e5ea5e0963cbb45e168aa001639614848abf99e37ce8681f65b01206254d8314f8798f1c0afff57c1f8ebae4715092bac571c4f446a64969f3bb66dfff2e91093f22d1d947c2abcd6068e2590b2893da4b5a4d1ba3f39ae825e077d64c3b84737f96b283649e52a636ba42b5a2edc2e354f92cac00f71fd0f3d3f1ae6ccd2004a797fe4b524d5a71a32903eee62ae7ccdd61afd4c38d34b23a0b26ed8c78e50a64ec1ef64514fa64ba55bd4cfc9a6721c2711a08b536d0bf13b98fcb06899c48334f01fcc5ed38621818056d63ad9b22b984a665916fbc13716d2568ff352b2717f9bb1273e246813cc45c2818bbeed78e61da2f2823e9bc9bdda5deb9d76b8b32c3b43e7acffae774bfdc6c48baeed94266ccae7983b66c054baa1406ed9bd26dd3f8d7755f7659bfb1efd77b326313c7868455edf7e7cdfbf3fe8c128ee1f512ddd75fb0985ee812ebf49c8621b225b17a27e921cd3d053bfef4efd62271b97c54f7b3316284c74af40384278fd12d2519b492c4f35f505248a460ac370bb1a9b265d7f072b9632d1e9bc9290eb9f231374f0e1fe80816e06e34c8e5a5837848e6ca5401cf01a6cd450e86403b05f5ffc8d8c5766f4f8a40dd62023e6a8d227304bc0d8506394d5b014dd08c9daad328f6b7a612b3e86e01ece30c916b343ee1954f47bf0d281a34f554e43b25ed539266906744d8e71d55e6524c928668c0d403bf1a4bd5b9c1e8a9fc2270b231c2747549af00e9fd2ea0f11a5b98497a0b69158c8abb164508eff69f0ad1877f4e488ed1740216a225d3572b94b217d0023e93b6b88c07ac8c6d89750dc87c838926a598735581f9771f6d78b66c6718457f0f2e49b1f8de4040010ab20777d3554be8fd8e71ea760f1aaf4acec0ac188ef1638d6ce70fcdb83ad5c9a2691b1b882b713d686eebe43746159c5f094b01d9a2494f11ffeb41b8f46792a0b19a5ce24af5f22144b560c8d7dcdbfd0b0b35fec06f9873373db08acaa8a407d105513bb9211bae3abf6225726476e3c08f7ee2e6a5edc62dd8cd5f6fe93911e54ef5926dbb9db83bcc5920eec5f8b5a2911e3805e22d01cdb3a8773a24b9c4611f98ff4d865db4fd646d40c536beb1594318a8791ba41f626a667b3ea68438d8ddf0e8231125aca6518094b5a63d35b4dd2b48dda6093d46018ee38b17d2461f7b8ebc26cf138cff188bc3bd94afacadfbfdfea96bef7a220cf804dffe13bae300bf377aa8f0c2114d386fc6fce22d24a1f50e02a65909500461f8b9026f19a9a9b2b7e011ae97e26d3aaaa207d0c676fc8d2caf0effd6bf5d46c435bf2f1bc1d0e59cb1fc6bc2bf02c173549304a539db191f05f892a15db99714a347cd38cca7d8634bb56482b1ed36f7f8dd789ca41f585a14e6781932324a9959d0b8c57cfa0cced97c9286a0983d6b0f8885136f9b6f073585fe8c7f9c7b0dba6db952ac6930a77cd757abf0d5e899f9f6c1c28219438e2639d800058c06dfe830ccd4fa14f289a6f62e32c008094b774f89761e8c23d2a4d8df0d50a8b578496e8f778fb04cf375470f10b8b0f3798bae84ffdbb805a7f2b55f6128e6a107d442711a8c923159b818c20381de5b9ba42669dbf208f0d2520e1e720c843bd84c38b84c69a939b568af98fd374989da301ff6520da5b352a3581ad8c7d5875a8f1b03a47c1635f698b6e4788a92e6e7f6a1197509bb7cd8ad59ad6a0b0f978f6e37074e23c9041907bfec81b4e1e87f6f34a36be5604353defbba0e99e02adc43216b9f4b201fa7cdce875d9f27f53c806fdaeee7597a02b6c562549d0712063621b96aea6f9c4db5582a10dc6b3488e6c41080b1f7c3f13c4f29a4f6ca558243ed5f388bfb2d4622f72fd02a8c4b09b0cc24afd4942d93ad9e6946c641f3e3f7aaa1ac1ff931b6416fa393083b4872199ce52d6d2a5ecf302fefec85d594c0c79799ff26110a393867c344103f9185ca4e51d2e2f877844befdf7f7498504cc1376ee674c693e69a4f253bbcc2ed0f39e44935b3598e2308e1c0599de94d7e38d85da1af1cd96801375a45e795dd8c8bc194522d5364742ed593e9f7d4a6f23ece7ed24e6074798df63390317c08d9e062ddad4c658ff994d1a8d5e2315ded90f449e1f1492f7f212c604b0c2e7c8a4aa28e87da5251b8a3aab2f2ae8acbf958fdbda031ad59f755071377014b6cd9857f7648e4b8f615040f93de1fcceab0b083af2e91f9d5c048c50bd32dfa8ffa62035a3f9ab5c835afedae8e5ffbb27fc4885bc3c638b6ca8358ef6b574c64b365f3c8161986be5a0a08dd4ee94d99f7923a0df9c6239629b0b90812df6b05cf4280f771c633783576f7634b8ff14ed6ad71a5cb77af7d90f0a9f6d25377633ff53a0eb915babe896e30459627774993cfb5b15c68dfff332301c3e1e1a40d70efd3f27a8010749ff1cecdaf32d54eb30ace10ce8c4da22d907bed0977a2c4b6d23c723061ce2e0e67418f874236f2623e1fb4b0060802505bac408fd4b1d1660025b30dd73af96e277fed677e85aaa5a72bd160f76f9dcda6334c6bc7c09bf07735ca790d6d03310f4557bc69b81930a622d086686231d50992d6b90e9e178af0a0e391dcd989e86caf67501ab0bf03efedb244ac2f8fca9818a90a3db1e0ff004d2846b956d67b74b3ce60c8957283fb0d10376cf388c6c5eee8e3f380c76a50289ae47abae522d3b8d0518cd32f69d815fb84e357d1de066e66d124f4ebd2687b1e14de5f40e0bc2af6796252839a11f64a4e687c44c9264c4661b333ac14e51874e4b0e110c7d90b421d5968891c86bd7655572ad98dd46fd03b3d3deab5f3331a18ab4281feff75b8a3d76efdafd15238fec4bd8ead8d1527b1554741c792b649cad5018b662b03b419de42f8bd73a3f1428d248613b134599c3ae90aa55d65106f7f12fbb5e0cc5971cc56fb2037b318ae3c572f819046f8b1c52a809b57094bcd43580f6a8e9e697b4adab0eed44912ed2ddc5b8ba227f9cc6ec38ff193e308ca382330fa954193628e9e6b8d830ef07ede91a52f6d151ec24bc52dc0de77ab561007a605d873ac5ea941d8e89382587327d258d6393bfbd7b1781d20de8783caf35a8d2818c00ec8cf813b33fd881e4b680792b29428b0b3288324f6805e1598e797487bfd783dceeab3052d155f11bc7b0d7e7c1ac66ce766cab5d5860b95c821aba37134a3ae90fcb15e329e0d93bebacff22b49e405e9ebbc7cd87d5fd4895b61c2a6f8835e12111b5a40cb4b54ff5971814e3beeaa500d7b1e43edaff8bd4ce2c5f1ffe05c57d16eeeaa17c91b0e4f57189e268bf591128d72d5c31ef8daea5ec04e59f83e6bfeb9726fb3bf4335272cc70d41b95198f37b9c7da4713a8cba2690de9ef4316a867af6c7d007e25adeb26c19b1c0e59fc02fb7f62458e11b74d8cb591062ecae26eb56ca4ff0c8eb6d3aed730df7ef986f64f88142eae539f12a128f5d84d00f4797199e56d61bc359abeb201989fadb6a869300f901a33ab65f1c807866a2617412908be05de2cd4e818c3065397d714fd2ea5e15cd17ebdda0d3fd83f979b88f62e4fb752ee06c5f8b5e0e143d78d90855ea621c797f8a9bed6d96b0635fcb39e7c07df0e309ce21e16f86df8c6bbe9176779215c3ceddff45eaa635b31816c76722084cc38069ddbe2a10ababf60801ace2c42d86f71aeefd0c87d9cf6b4dfa2007a7e13f40eb980f72b17554ca71d4125268e7584c79a02177df07664172d4517be04f66b1935a077d1b201a5789afa5e9d8c1da1f87b10268b5a03385a0df58ba52f921fac38702663e798695eb19f3333f2e07292ba8874e49dba0f9c3d4720963ba61a29eca15d1698cad70d0fe8a1a0446bf798258eb51cc247d0df8b67634fc5857d046468c6eab13128c925e189b200d6841d8df27dbea8f03c3ea4b30ac19378712f9f900bada9412a42717b786b4a9ece5fb419658bb7d8c3bc6c64810ca68a3079de0516aff5acd4e484413dc42354f31572772a9f0dfb7b2984a9b91c64e8f49027c056eb0336daf24de49d650e2aa64f939986010223d53fe2edc942ce014ebc53518eb12326c2bb87bb99f5089413891b531f43afe7ddae6d52bcaf9b8bb859b53b98fe75453f7180f6461cadf324ca3a80bde33df7e2adbc85b09b7a72f2bf11debc3fb6d5334b6b65b5a6aa4c92f160a97a773f76485645b0f2beadb0e15d59e37ea0915a227d47895c6ff2b61211ffb4fa04dbb6ece1879400cd56f53002a2e6b974cd7b7a3ffafd6463986d4df1d61146abda2418668bdd01665ed022eab3d52b00f337e42e53587229f893daff3b957419f00b31b42f0f0afe7889795a53f013abe2140f494456d7655f31b8f9bc64bde36ac4877450f76135aed0b53e746dff587bd7498721fe7ee6f07360d2a9f8acfb1347abb46a4875401083a35a43dd8957d3c2c24274f4c30cd3f3d655e4e92b2d45d0b5969ef4b072bbcd569533ce4036650f79413fd95a385f98484139617e08da47b8c614a27639da76a670af29b5f4a672fc5c94d14f6f079385dfdb8a4b759829ca86d9f31570ff9ddee03bcc620ebc10554887efdac5a78bb09c6f2a0f17798d53f021470b4bcfc4319c0b4e6da5d3c02d05e67ba1504fcdd7b49f813ed7d59c40a786ee6be72cffddf475bf3aae28b6da5e483e90d7e1e19beeabafec03e89f00a8f3e0b9bcfe47bdbd55ceb6038ac7c7fe8b594855f0991e8cba4aa14535d9ab1d2ba57d83017df1f53efe796adab1650e6ebcf85c5d750e8cb4e3ba2df15cd6b52c42f6440ed217e36c5beaa896857f35bb09482dfd2eab70717b43e111b6bc89e391aa2d7a2c5d62f161e1db84ec0cc3065211eb9e03d1bb0d84c90115b7704c5c5fdb4bcb4f0f4a11d6a1362f2d2d56171d00b700f14395f185146704fbcc73c04ce84ee377bdfa6aa1ca7d4d2a1b06d0f50c1cc2b28684fe25dc1fce24f9c475030db86c45253ee01de047077205a810d8afd8ec12e53dda8e25e402e45bca0244e083204ef9000c794d4d5f20d80b3c5692228e51c7fb12e266f0d2b3dc36ff6ef1bbd142f20c841bc8ed53d393e6ab281eaafc379d8b0399b511974075c34948b69047bdefb7aaae7950bf6438592dc3d1afeb84c9b528c01705e430bfa3148bc050deab206f8378670a45feff2b907b00dd04ce56f75e7298dc196eb2f4a373c72e03372d2dd70ca958918540e5d4b1b8a3e036419e850e406fcce49890f21ef8b2a756dec57d3b1d2ea3462aa76dfcd54eee08874449f65c34f96734284ed19e618cba36ee74a0fb7744ff46c283451a387538c171cdb241d1a03377e8f3d1c2abbf92584e45f0939ba1a2415d1081d8a415cb5e58ca2279529451f789a4acbd35a87e1ab085d3baa9168298b4ff827175f45449ef800a9682f2c730c1d3527072a3054ea9f57ec49f54be57a47190e5a03605e4b891e2a4507c7a988da04b058122a00b84b4c1ebe4fd0388ab9a713ca49153df24bd4b258feef30fba99281765bbd850128665e626e7901a5fb0a46b75b78751c7b6720702696c9cc634e4ff6766bd2e317330044b2160508e054a4e2a0d2bf817c0028e305c980a1936741f03a06b516f244f99c00ed91a00e1893daa24f2d1f14d97b98af121475730c039661d7c0ad52f4e05a29896e79d9cf4ddef3fae891577a35f280fdc669fcf7e80e0e9a89968343e73ed7eb1032c46288243008539d9828266eb5d0719e445301b8f54dd782b1fe799e8c5479ca8a3d117f6e8385fbc4523f8a01f0856ee6e0451b8baa330f9486ade1320c4372d858940d9102351ad027ba7da8af8ec486b26bbb7bffc8d3f5384901b8f94901f2153630a5f47420d33ff5a22f59d47295de07bcc06799e9a7dd88fd50bc2d46d842858f5ca32ca618a9a571dff3f47ed11dadc375be3c442285e153336b734cd25ce7e67f47a530c5e883cf829e60095a01cd892554a2d812e46f59e28ab6a6670353233252e2cf72eb776b98590cda66f35029b0e9b53c2d2b8306380618a386a26ae9871c5e7668da1b5a34ab953b1b2ad08ce24f5ab137d4d39aaf6d575d1518699660f8de721d9990b763c873d2a0375d88f38776e7f072764b5c1ccacfbc13b338909fe14574c72f0e13f3db5de4e192dec1fb72fc2d7cfabd7f45b7bfce0f6560f54781e50999c9a8b8a631ddf91d16339968b5c104a2c174175befb05a729562c73bd5e375c8476e84431b413f591e9b289b1f658129a202141fa4c3dc916bbbaa46b31c383508be291e836319e6f15411846b38f582048407074390d1a48a55f869a272ec1092d55acebd4cd228eba4897ca9d17954288b2ef33c9a7c76e84b7656571cbfc4c86acee8de7c0ac8ca9491c9b4a6f0828c429f3f0528d2901037397e10182df083554e6670fd769383f6587c62a1624b50f4a8b1cd803c6b6fd676e19991cb073c68b9a830b3ff1109c4b0b6054d87bb9869232cabf9621434b27477407c4fb838772db8e2212360596ee5639be3a40e1454f698909acdddccfa2e62e61c95ef37bb83108388883c5cc5d19f1b975196486b3d6bc1789f9a5f637830cd41dfe25ea91cca4982fdf6e642da41f5a47c743639583acdae4b991d343243db5e1d43b4cd1176dfdf29dac6ce9654aac781f45bf24317d42ebfb52d8fc648da8e0766e7ad392f171e8b1facf4d92d819c7f7c82d0ef4ef3811f7b908a74e2e3e3cbd440f59da27dd25975a6c4d7b39356e2cb242f013d7ed30b0726d4cdb5dd3312a1af6698672b3f5dde5b2797f0ecf6879333c5adf6e63ea7eb131fee7e25504a6ab3b8d36b7aba18aca0150997e515e54973127fd64e94eb62544848c8cb044270a63da32fb0779007b0be82f161a4c134c07c9439cb33291216df682dd814a5bdf1fca38d0000e332ad49bbc2979bee5f3507183604672e0ae00515bc00dc461d423de0f666e2bbefdc9450fcf17e95da274e73bcb274d578049d91aeff1626aecc32a4c9911aa285bf0a32a3a75884c3ba31195be15e6f1b01abc03a61e9db1122faf47b2baf28c37b51c1a9b121694801a0701c6e4948142d4ac036119cf0996d85e69dddd6b3e8addd24717e805a26c3350516f525bec94d52f6d1a7fd8affabdb14ab39ae5f6560c279b77c39acd15fea81f468548cb8874975450b185465e8992693f888b2b79e19d00054be745d65eb717f82968eabbdbd2be7602288ef364f0e1cb4f165cf0fee65c2dae5c989c5d39a66977f042d1948f6e5e968a83661fd1d9648724f2e46a893f0c34ba9fee3f1c12660b9c4fc1ac6acae70b9b9ec5e8c60a6273900327355fe072f49d06b190f89c720ab5cd76d641ab2db6b0cd9ba2a2e69e85d474a6d5918a08a8cf133b93cd40faaebfaec0f7a46fadf76e15f978badb6e8629ec57af1e2c8b0cab394bf834310c00b8c4fb57ec6bd5e8ae7b606ab6356aa5a0736b1eb861402137328fb4b0cb962551c619c15a868228320592c90e61e157710defb86d5046145c21c0c5e5e1d4e73044d0be65e8e4cbb2d3a6ff62c3f5ca0a5f3c541dd300f8ac3db8b382da3dcfec7257fac3583b56951437ba551d864381ce7ff620cd53f74fab27e2107a447191b12cf0f60729641fffc1d50295fad73e097ab795ba7be5089a240e565b373c7083267c330f0083efd1d663f42f80078897d265558c89320312b0f4f0f67418433f844f1da11eec6b95e7b210a670a6e4167824bd16488a7d581e3a9635d07cdf01481d8785a728b479e28beff576974d9ba055c14ae596bfdd2f7327e790972b3d5d66b71c2c42263349712a41331d7a5d03b58da73731aae7957afc104107e412aaef34f252a2cb02a997de4e9ee5713745b8d018d98fa2f0e1f440c7cb0e43a120e68a8b69aa1670dc23ecf3204e8b0253f4702c56d1c2dd88c270a4c0c734d50fe0621a797cad0f243a1162f11a36bfec9c01d682cbc7ab047ea50679a414a1c94798b9b2c4c7ce4b2b72c9ef4a97568395ce7484be9bcf8fa0ab7f12afedc426cd7b509a351951b8a9402884805d70c00bc058c63d47151b9f44b33580bb7eb46b5afc8864f00bdf83a33046917162acafc2c9188779e8f672ee13fc1261abec164ce00261c11f03f94b22f2eaf8ed566ffac42b3ec3e317b45afafa3a4c2a220619aa6c2352ab866b607ca96d1eafc3e023ce5b3f36936b4c4afcf44269ed1ece2dc65da47b07f5b996e3c62c57c966a08c3c15bfacc61c42dd648ef2aa705a4cf6849352d6b7ae9d76d7f9efec1e3a8b78952d674de91b3322b659b88a9ecaed4e351e0a5f42172c997df88636ec0e62b8b92af58db76e126031fcdf3768c5213c428fd1fc29ca6129021b9fa8eec56038b1578317f5020e8fa9650d930e152b6ada5985d4414f5fd70bb43da8a757bf65cce1d032d5f1c54dde641f3f7bdf0ad7c1e14fbe3a9ab7c385e382f1da9bceaa57c82f5bd06d75536eeed6a4db9bdc53b0724c80d95fc1c950408b46e6a8c40a21ff60d38a5e5ef4a34caae33f6f40cd01eee954a27408ed4e0e04fbd5ce8cf095a4ad1586126af0a027d171ecb4a1e9aa2ab7e4a4341e2f111cb416b8aac1acf51e25d78e147d6b8bd411e73f305652ac2779397804211d4ac5e42baef7fed63d08ff5e59de62b2be9ceec889be75a8964c551a5c2145e6cc4f2e0680e32501ab74f088de3e4794e2a9c47a65b943c73baffff76fa2c7330374a7af2b2b00099b942198485f58f1d0de7427c99452c15a0eff880784948233c560a9437f55f4f7b88f4984f89a9c4ab2071c2a9b3ef67d3ee7dabe2a59ef4c57a84e44a137863a1150ca120fb197628d89cc571041d651feb6fae6bc3c7e0fb977bfc7e0053150b70b5758293136428dcb5df2753390ef9547dcd4564a0220ff82b891ce1d15ceae9927e237cfd2e33230008d52bc6ae219bd3de713c20beaf8c1fa4a855ffb569c75864415bebdf5854079f9feb9c0ce8c630f01c2d8330d35d0f6ddfedebac8847f5b52285de3b059ebe2cf1383d45ad634e08e0d47c66fa26e9df8529d51b4eff5311cfb75f7c74c2bdb12159b917f030b764d1c0e273f38465f0fe06568feeb74c9b3f52634474e75ebb62903af4e94273cefbb871094db69b38efc098e5820ce05626aeaf42e4029ad0719034d34f1fc100b0263e5bee98cc2d311b867d0f1a5301d4f56cc01a1dec05ab988b9701d950d6fd281fc878ed04ff3016cb277ac9889723fceac281349671e472edbf83d31c02dab08ccdb4c7203dc62a42d3e0fa508f475e6e5069b79713b42db9dfa7e33e2cd347526f201d4ddcef97b24948f7720f0c7960501b1763ad69bc04e51ef5ca1308676c810bfdbd259c334f7ae7c490a5e34d5aa57c4ff94c7bf3dc9f9978ea9fe9bd51505294a52f8671949b14e0f64de1d8d1073d163d036061ec4e442ba9f4be17eaccbb084f7f34be38eeb005a8faaf47c386dd06438df22bd7a8023bd52cd29b23f9cbea4b8a00850fbcada6f06d2500ca499c543c3af745b7ba715ce7b0a4dd33f24ef614b2baeba75442cc87cf0abdf41648755fd77c62e22bbb4ac24984dba74fa156e4a6ff80aa43a2c2b33956d7baa3eaea3a018cc705fe11dd1e143dc7d95af64d06725623f4e92867a666e1a5c972c4ec14c5d18bb165ec9ec2e1f9a073f8b09daa758aab4410f5aa6e6b4fcb6be089718541be3be87331a5d8bb83d8ea6f429068ec8287e53a6d049011c3b1dc7cbeb03522426e34d574da01430e28df9f28bed59ba5622a28511aadf88336fe7ccc246e68a2da2844d271f0c47ade831be61aa3476b9a5684cde342bf158d57fc59ff1e33a57f0dbcfe54152b4d4dc9bc4f0f13705f8916e2bfc5e615a7b32f578df46704877c9c81af0faef041625f7df62504399a316bdcab905a7809239152ef1f455736214b81860a18015b4cb4130a5668d06b6efc5a08966d663d3562d3a1950cc4fbf0926be8ce17a871672e36d296cc3306346d1c997ca473a349920bac28f4733b3b4fbdc350fb17d8752fcb51b9c5573dd406f5672df72d55113f6b1b7f9fbb9a8c847696e42e5c1f611c4e3da83775c9536ab3483a58c82214efca8be92908a46cc40d796077bfd5f977852159dcf516bd563b30d1257a8a4bbc5ecf1097c916678a33804b40c001f251953cc778f0da90f88885bac7c8f1150e868846fa6cc2540cbfa344cc512b314297b88d22a829d45c180e8aff804163bf7ce5d57db0365b7343fa66574b2df531fa8e1c75279801f00037cd74163cc3eac59d4ee7ca91458cae85c4882148eca565f065d2951fb4fc30478c75b39edb8c0ae472217dd6540f6da43700bc44999a35a3a3e7bc0519f2276f9991515c1d5497a4b50280450de8d0c9221ca852fef7afe2ea6ecc0013646d4280a5f6f303a99bf1e39c54b6b09eaf9f0e6cb5c15bc3e90586562d0e56ab3ab608012313a76b3f3dc3336867694f3eb70b2c277b243b7be697e2254e1e9319a04dda974fa1a29caf0114239b8d9f99b1a7258893de1b34c2011105e9ed32370c36ee59c5d2a879e86d9c29ee9d98f848130852e935ff8104ca3805e3ea84f7d97be0959f1eb1e8527a59fce945579d5d2b384c0818d3689c78f2a8edff944b1796382b6964d7a5f3027910b73636cc7d35ca2fe8cba6c270c5c93e92f6887b9c1452ddf3ac05efbcc4a50d3d6356f916a18c754aa6cdf862d589b37c94f08edd7d60f1f7fb917543d93b3bb21e82a4b7b4d026f17c4081157a044b67d4e2898b87a0e15b728616462306ab1498ba859601c6f98792c7b2d6f5f9580ba2877afb5557b1f2d6c832e205c09b48ea0137d4b91af8f1facbc742bf8dfb853163fbed5932b878668d5fba4bb32e5439c42ce8dfb0e329b548baa1f9ca6301bdf456c488177619d9dcd883d1238a5f4e0ddb44dbe2aad78845878ec7a5ac8b8a89aeae0022d3624e738ee3d6d232917cb2484ea2a5353ac709f4805124a64fc2a156e2cebe8bb6fcfeec93a5baf86675ef3d0620b88d01a8ebf03404db0c6cb50142136565624d47ae0d2b66a3fc4c72ce263fcc903102b9c992694c30e0206fd83330b158c60611103906870201996441f2bf665869668b7cfc3e5afde667bb1697423d86cb395758a54c5e9162beff811b3be97cd21fd9122f35a97009e1dc21f9b5c7a217c8e7f3f9dd3f070718acd3ff07e7e2d1305d808928e703b38cffd677ddddfa55766e80888da40cdd4f9ba3c076c7fb5022b98547b2d6694423b79fa76c459d0c439fd8fdc3d02d4cdda509e2d27d7ec47addc3cb47f574d158ac49df6c29f7f7b44d52503f980d03195ff60da9b9be9e00c4edb265b5309007165f378d762a21dcb256cd6946de5457fda129e8e22e4900181486aaac8590fd205c08939a0c052bc3c639e44cba9bcc52548cc8908e3ca400a3558b6ee096dc081b671a396171d832dfd486f68c85f36e5505b754c45527a9c0176c1768e72f4898f86e0777a5e8b79f2485de93f0f98f33af02f60508e0d9836c6d8a92db1760e68a0d729eee26421bd59f3e22446aae5038a0c09b85aaa67a19a90ec4eaebb825ab7c7fa2455ebbbfba74f484811f847897bb6d1885480efad1c635eaf325815318ca90a646f03265abf947ba16e68c4be5c4052e8a4723640eeb99159344857c74ff8c095ab6d909505a46ac7599fa432b634c307fb14fe6bd6385531ac705ad6c92dcca1aa34e4f145b3c94ea29bf02a6bc51a4be492fa127e33ab29224b7117eced5e7b5df48d6f35075591526ea2caab47b64e551a3068807ec3ad2af30380513ee1d088a8dbe605543cf001cc6b855ef16dedb5b367b2aa05061e7f2200c56f12bce975f58248794cf1964c439adc74aac107d59f83ed625e427da84bff0627277c0f3ebdb2f853ab3dad4c56118e60434e08b483be39c9a0ca8208884c4bdd0b8cf1744b676dc0ea51c63ea751952778a17063ab84dfd87d9831968ecc2843227db2666486986dd9e0e23da6227823c6035afdacad59d496aa70140993e51955ff3a4389af117faec21c1e29f38beb2ec3102c417a715306ef9e9e1adebd07376b3cc31207c0cb42e5e9252a3029cd4213090b87a1dc1a0383f57e02734d63526fafd774ca5e572a74ced525102063f6b83d2c076732811d857ae9f722611941b52295347dffaa99d9f03d7c8a35599f02e8651233db31ae7b892198f9a5991ad78e25c787a61696df972ce8c630eda4d91345081b4c044738ac3f5a5487b92f7b9f1eb3feef674a5eae8f86e329df1af0f5ca0a686e3ab8d398b8c83bd2f65d5ff3984fa00e28c223ce60b52e7978506cb91cf4876ab7ca6190b34778f44de7b0a1e9e36a09e3035f7d4e98af5eabf376592027975e821c3cae507ef638ca13a775d405cb9d32ab48b1b441588b7f381f96a32b6f308b05f975115a488579fd50ea1e154fc0ceffd7311e4662b4411182df08d5142773aeb101b40d460150a117ce68dc6efc95fb6bac77d1ddd64a05d95af429f1e17726a3c9d9fe6a716a1cc00b7b22fefc5ac745f24519e348aa16d6a371ee10687ca5a5157ff30cbc1f3bfe9b253a4d495c0d73b31b2b0d6c7ff87ded1275440744495a8e70deb9727fa1bcabf24d6912cdccc93c53b44423dfed4557d67d8d704defe168bf5ebfbbe530c1590680936abada38ffad85023c845c53a2f58719985f6d711ce55dd1f9604421d6595f33ad0fd78a9ac2ab544be1eaf6fc54ce73fbba8d363737d7788792be4bcd4e5ef4ef0a0eabf511231419f4c7617fcf2aedfa182722c9dcb1cf793c2683be9b397f0e9c7e25c8e8b25cb8912e2697927b4aaa323a6ceb0214a220da65a43f158dafcefaab68c278783f7c49de4328f26878c60378785aa532156ac7d4e0db9e26f482d2c17b7f81f77894b54683ed5021aa89b25fd409957a33ce5a54f39bc145e1b5f291aed370d20f53c6dec2af00b569489625b1f318391a98c342565e5a60cb6856551cbc20035ed5b6663883a1870a7a91d0646349e116a0082e55360c5b69378b09fa8eb4341d96a5bfb80605e1f2da7f7887ed8953abcac86a0e8898a9eec995a4e5273e3e31b70bdfcea1d74b6f35a790bd6940aef4b87351a422c426d51359d7606e857b5dc0e37cd92430ccc24f3fad7ae2921ba97fbd0cf0e96cc874edb49b3dedc791b2072524a4d135509253e8ce21133c1735cd55efd67f1088a722acd938bf65fe226e11fdaf096a8a0561e14428c1e107c6a82a9489a56a7d51b4a56e5d800d7b3913b7a3006885d4800845ba77781a686ef184ad032a05f7c6df9b8694541416ca3ac2e0fd8f4a22852b553323d085f5e958cb656c6bb249959769101fcbb6c7ccd55cf280c9dfa1cfa9f752c5c2f3df1b678c5cd4e7f34e5df1909f9c415976fd80c68b96ee4deeb581502320bed9bb3c0d4b7035b77bd5f55560fc7642605080597a8e2db4a740b5f15f9c5a59469ad687db04c22e65b0b1d38e86a49b75639de81e462ac04ea51f5ba634d20cf51ab10daf63acab9daaa5d0ca1791f93255932cda57d6618aeeaba201372f8f7b4847e9471346bfee8e3685608b5f57cef0da944bd8059b6794e26e916af0416696568f98e0dacb21386ca08db9f4657eddacff76aa3460e76348eda0a88d5bda49c52e703bbbf471856a7e17dc1c139908208ee16940a135d7d892ec49f23634983e1688a608db4db41b67de684beb355cdac97b1627964bc336e94236767b33df18cc5c1d491ba584c1b6bf8302ee2773f6a84f429f4ff9f8d3abf5fd3d43784a99f72e83b23224be9700d374cfa9bbb7593382af105a090659f12a984f4de91875708fc28c5297dfa22dc4b72707287b219c888c63074dbdc971fffdb5b263e6eb6afe0aeb35197b0a3c773052de04bdc2efdace9b5408ce8878f1af6ada022321fc7c90a2405ec6fb9ce16989a485f46f761bf0ceca34610f72be34f5b74a2d1743cd5975d8d0eab638547d95a6d268fd410b4a86dd98b760e37e754e7717cc064b177e1d04e04153fd08d9015db9cef283ad12002aa3ff4f2e15fa82a3cd79fcb98a436ca749066f52c5c3f8d49d35083c1661631301ee91ab3b5f7ed6ed917c75c81b490231f1a2cb109d1ed0ed081c7891ecece802cc1f9fc2282f4ae0bfc151212ba7cfc4a00e9db4f3c63654c8c383f200531f4f1153d76c8a313199b63b6e8af19a4c5a7e29ddefae74b63209b24b7aec2cfaed18d800dbe43d47ba1c3280bfbf9cd8b768f77cf65f81d6731a45035972660b8d3230b202c25e87ad4aff50ec211888373d787579bd8a12c6ba1489319c450fdd8f4a3c7fa64de819a82d7cc35ce26ea1b35ce494eb52e319ff704767dd187b62b53b983b378010c7cc29f32533a47324b7a9005ae0d41d823c192dd63e5f318d6cd8884a631517757ca6efceedcf00e8b4085233465667f3163a340e533bdbcb7a9ce300ddbcadb9e6c7dbbc28e9c645ad8aad9ed982d056d1c66549db42051c5d0dc1f91d2311610137907e57c95e0ed961ecc9bde4dfd97e7d0e18382d77a8bbae6aa2901cf23a508d82c627ecb7b4c9451d07af1d777206f6cb5c73bc64f497c3d82c5971bea5670323a15c1e08fd1fc19c26aa550dfef7dff227151168f54f16827a175a1fe733aac875335f38fa902f330ef7816d29b765042ee34c34ac3879b08a2ab948687b96bfbbe12564ac4b4a5579ca9a98ec20ddd3fc3ba11ab12d329f3f717096e06fbc0dfc1d942f141c3d3dd15fca20037ff2d6be3ed17e941ae85c8472a6667151452fd117e275fc558792e5c4d6a8bf56ca1276dc439e76352b4e20ff056141426f9e6bfee563c4de1f9b1a143a34e03be41aa74b3918f64aa4abb9dd6777a49b22d8bcee6d4b448df3117875b7387fc046be5134f3a7b8194b9244c9f9ed8d1a0ca19818f48e87148cc2cace98a8a5da02dd49a9dfd0f79b012332413bd6d1b09136868ae5caa02c9c3b4141d979e9944b9f48182b3c5150d6ecf6f08a24775ff79c2344844b8eb9ff0c65fc267eb520ae8f0268b38cf522317157853b0ec8706ae73f2787ee151e7ce39f43a952eb24b99c077e5ff29509449a747f2cfa3671516dd21422dab15ddae144ec3d837b09b034f130a3b409c35734d240961b7572306e704968eb04599de072b86f20e817b1c5fb78b9c214aa22595000fd203a69754278179b201bbd514947e471a5dca1450de6b533dd6a1d74e4cc6960c39a161e0f72054d30534ca76ffdab8eb470cbcaf93d49a6a1e616045a47000046b1b8687e20453e503b9a3b46905b2ff427fc9b36394bc2bfb4786374156f04c5d0c9b9af491a6409d6c89f6af09b603f0030db65ab249730e17d835b6c27ac04aafda0d36f936b0180ae5ee0d2a785c27c5028e4c14624d586f9e03454d79cf397fa0948a025a4e0dce42567811ca9b3c03d73c21eed7dc3780ef026eb38d40ac565ca7fc079973b7dd1e0c3d45d65cdaf162433fa6689c800261e3486894fe9dd4905cd659dd735788bf8fcd4495216704de67d59c67728c20fde421f11384a86d08a08bba102a7a1db99c282bfc0aab21d34435800af603f3abee4f4f0a4dbc439526ffd557c590452f54e1dd8cbd8f2ec10591a739bf260ba948f288bcb0e1ebaa27ef47b3c4082e7c4887e3f6c00fe6cce68d0cba5702d480c18d438931c6a04279988b997f4ebb4ebc14a3e6be1eee9551a0b593526e809f390db46492609352e50ecccde70e5e3a96799ca5eab40890bb6f97e8f2825c571143370776b29cde4b701f3f9a869a2d51d823e80c1a3aee1216cac7d594babe7f1d2251d89f4e4f76e3da1aa9df2a5d4a51fe528bc6efab5dc91255cd7b20a2fed7415e45dab80139a3e00d421db9eafffc99cd7a18f50275d6097516448ceaeae862557239652128a41873fef16c5d9921263d403e27c0341f60e208c62510487ec29d880ae4f195f237aaca961b907a86d572f617d5b13f669c4f5fc3cb05708a1fadb991b9536c089f64ed1daf4ee4f5f5f0be3e34f4815913004ba1c845f51b58856d61e1413bd2b4d32049e98cc136ca4470b113a60397659579f6e9a86421476d0d6ee051c5313b1b87bf78513ae0f1df2c89dc3dbfdf63d76f3dd8ca1320f64b451362439bda70f2449f69c6577abbd2a7d0251b83c27b36992f65c6448ef85ee7bfae81f9f089dcedff98a6de8a6a3c4d29d698714f16b01af8e59ef68335d669fe7b58013d45b007ff52f80ee28884763d8539c7aac8077de5233332ff7366b6113aa1af2b6ce1755871953c618e2e0c62e500be63d30ce74c7eba06aeedbe912e6c38d573c74fccc150e2120e0fe8b5deba47895acb49bfef99a3d0e037ef03b492bcb08af80794a71d898400c4d7d36a39aacfc7b724a9f013d560ceece0a1acff3399d372105ee1a95a4543c708df632b4d2cebaf6254b92badc3cb5831b6a89bde83507c2ea6062b7bfc6bbba30af379579aaeb81f202fdc221dcffd5b45561a196883a6b27766207179070912ae1d9e263d6a3397e978cfe27bfc815813585f2d77e0381a0f682368a351274e0f4f1f32fd4013a29f536e1703e39558713a11c161758330467538d4ddb4205ce55e36c056af90abd6cdf916ebab291a12a0b309d7eef43f1581ae232ef79c20ef577627fdcebaf48e2bb19df8b2bfe99dc5fbeec54c708bcbd4a229d2567cd954e1c94663c4f5f77615c124f6aea0a49116299c2cc37bf5d25aef106ef89cfe779b1556565312f06323e8ee0213d583ae10c9b1730c297cd212f243e549b95f72b480b3c6906f32cf100b09df79e0b32202b173cbe643e3bcc87f133f5ee71bec801373ac5d39e2fcab5ceaf03aee8757c8d7a4e459c50ec94739e6d988c128046d5025c479a6cf0cfcd85b68eed72bf7e0c47783fe0eaed7c679d50fc9daac6d1195b4504912ab8b2059287841bfd0531aa5b187b242f0fece6a1f4f9054c41e8e5326880710f733c4ef8cdbc550149440ee490fd671910ce0d96ece291013f44a39ec34837abae8d64730ca6014e70bb5dad880a6e0b97e98be0ca991b2a60a7fdbaecb3b10976a28e2b827900bb1c5a50491e3b3a9c3ad088b0b10364592d635515d85f5b2f708be50ca2d84b9803234e3ad49fd364c59ab1b61fbb7fa08a964e582a1fff7eca0db1b86803e9100f4a1a1d6967ffe6f5a73bb3d85be66aa9acaf18a1cd593db1169b7dc99f2c18b0bf93bb158cc80049ed4204da76ec9311a0cdb096cfcd3bad3e2928f2421c9fc732a3cea2488e33b83b2f60e88232cb7e56b81f9adb95678c7cbe71d848a397a70d806ac403f92c0b772dac12b915532ae2f0c6caeab5e93d49ea4d32795b317189321ce2185ded49ee3718d462c375afcec29c976c9201b0cb3c8452e51dd534013638976192e5307029ec125e07a984c68d922053f834176893c00c8c2d319dfde174ba8d305ad55ec3bb7ec1c805d2c747168a0f69d0702e0f5fa7db1e853acf8218fe1b684a765f57a7c7a1f2c3ca23d362010b2a672213000b7c51cd6cadff0d6a7d1501b45d1b0331186d0fb421e4f06143ff4b3f5e50a3d8410c739d1edf82520e992aa3e98b01f797208790c26e3c935c1e6cc59bc767e0e88a8b8952380e35b4d4c0c06e051429b3334fadce6fea8938b750a9a2f75f281996f3159db654026ebde5edd552028cdc5b58438ffddbc91b99b931cd242c70e4f75fa205cbc34c1b5a24e2aad036cc7c34c914ab371886520b8255ce7251d6d674ab86c7bad08e8768d5c8599443aa3014f34dc4f56b8d539aed29f2a81f14274b10d117d15c11f0a7ccf2f5552dba71cdf628d7f67594a52483d65066d704f97069191fc73421fb9cbc1e8b27ac7b7858e8cdd398b9989fa7383de3b4c73b98ec077fcf8b6010f231642c37bfdec51e7b06389d9a96a54ee66e759c95252b03126317e24129850905a383a6234491bc9a17030859de1192295a4caeba56315484f83328da88e9abc2f6f3293dacd0ac1151c524c44d1a79156c710e9d5d635ffb87b09a99fed916e00ee047c66017a44edf9b6d0eab655a07f6560b6bd8fbeae80af31d83d485c9799bc90362755982111552d2cea42b260e6c768f47d6c72a1d47f3730b53e7cd8ed28ed08190c605fdb22b563aa4c3e8249f0d6f7bd6a7ffd01948919d53770e2aab40a1fcef782f9c36e82a5ce9318b2bdee014f994914b61f15cf81641033eb94287f9e78180d18eace14d6189534afe0ca0439b61a6db0d2fe985011660b5827ce088c79144e741be140118da2186959f0b58d3fd4ff64ad13354180fd45fe7a9666e8c3a103f9f34e87502b69a068d827e86e0884ab6adadc7630a73967ad9a5ff89da7bc01df558b8e6551071882f9c39c8067310e3a2a8c7ac2ae944d9618f0fffe0d925e2ffe4b752af01e8dbaeb1ab78bb2223b73dca7a631e23583f44457e840047e5a3d8ac8b74fac091e538841331d71da7e0c6dc0c48ab4059481ca866ed34be2a404a304f4e11cc4a82fcd66108791f08a91c5a5ba70a3f6b3951ab4c707830d24a6f6580f48b4820ef4b3331a63abca589e379b85f08adffbb3216d74257fa87b5b27333a10a4836d4d19a7afbab794315fdc092ed5a5880ff57e601885875d56628fc85f185b49e2bb31e868d97ff7d84a63f09f0ad462bb536222b476fe8609b644e1d01b4b965e56226a83844592b5d38a3371ca97b5a8b13a9a7b9739c884ca888c96042ac0371784863b6409c939f3d85fe3460acc8234f23f24fc9040266b874ca08eb421140183df9538623ba14b749df34971b85df57d313700d8327bf3e98d2b40912110be8540758c3d2e30ec6ef0493d2e077c2779f26ab84c9a98edd692be9e4b174ad43020878effdddfda6798fbfa122cf8da6de32dc8ae1222fc23605e222e133133d48ef4ee9d6050f3ae2539ddac02d4d3f44f7bca1363b6fb96cc1c2902f1505ce426ec8653e4674165852ed1e9bff60b16f2d670e40e4601523e515722131c86d6192e3fb5fd8127fec996217ae8520d268c4a72d7f6c59475dd8ad54afdda641f1d6485a8a9cf80a0a30961f11b1aa4f3a64ba2a8a8339e8821a352263b61a3d73088ac7c135af866f7e1359825b6060c0696232895c126f8802fad63eefc3d54fc92a73a5efb4540750dfa4d6e3a85f461ef1c068955cffdfaebad0ff0d05007988f5996e5f89a48f9084fc8e556d6ef9f51edfd69572273b8a6e0b961428e074112c6287596cb059afe0f8c70751d56fa0ba100789b3e9c0f0e35df1f46952605bc85407596ecce9958ad658c40830f87b61da519bbd1490a2a33894e6f7ead652fa2b6ffe4f49323a30d88fcf088775284cffc2e30e69b0b1e9afc57f7ab5e0f1637ac1a8437c9f544035584c934f8ed02ad33dcb7e9dfc3aeb81d23e35fc9ec20f4ac9cc2558bfe82d0e476701f09a8ae17530e95b5293a69c71fc1981615bb262da0f87d1a151d2993c54a8fc37754e10e95d94165c4d74c5f56b183c35bd59904536d629491e29ed7529fd937bf093017b6aea677b730ca5df67be250285e0605a7df3ac082b52ac9ae8dee17bbb83b924eb454ae07d24d1557438097087a516cbe8091ba7cae33c5bc5ef551266f2e3f0901836b6d95239ac9cf55f12c6792184bcc70ef902ee122c0c8e0dda2df045e2ca733c9ab183939aa7a0f418fad26690b1e12fbbf2accabbf71c61acc74fa260f3458774704b3123c88cc5a20b895c99b52ee393e1e8d60e5f6a2eefa0199258f5ec2b8d611e542b6c60fbb66328432cfca8a07c30c407b84d959bf99ce44d9d5d9fdba8fe8db9c8089d13e6a863d8494d2148e6547904a19db36135e7d76e57214754abaec150d6ba4fc607daec2bbfaee78e56a4f1df1c5c7df35edd1befe1a9ea258c0181b27bcf562c0d9da099f87f4e43f7365531f08deebd54efffda4f3abd60afec77eaf90b98974618310e859682c723142a250d18a035da12ac4e33f5b208dcacefce4eaa2bb8ae655c299cf119f0f15367d812e4f208512f5a6bb138b14782ea6c90aaa9c3576d27507ddc9bced11f4925670945a95054b57e55e52033f7d5b03c83b14d0fa701d5e1cdaee33ed2c183da9b93b4dac9888c7aac8d59f427043f8d09e1f948e6826f5d3cbf152782442d2e626b72a8e3e1012fb4798b4a8812c6b0c9f6fdee7f9a22831bf848277b2513f63189b127cfd2d6d3e9670202ff454475f1644f09ed12f7e8ca613a7a88bb377ad7973f34d776ca017ba43e975438129803ccf70bcb44f09f1ad0afc37bcb9a0d3af2fa8c70eabae83f9cf1db51d561f121f111a16d9f68aeae25752f1f3dbdc627dd773d40a9a46ce6e9565a104249dd408b93cf274fd5f2e9b65b89298fb5b79f33654c8226e17b08e128e2a4148722a3c2eb1a24582b008276619d0c85b0017c76b47535e6de5836ad31e4a79b71e618c7674d32d2972af7716de8838135a38fcae0e3ba0068ef5f004e46f471002c5e97e292ff4920b5d5213dc9599674e25951c31d7a4953810c8c7c0e8b3eed3107eed54058f007933b366aa44632db4cbf3a6f40a5c9542873588d82f959cc34414a5de6540b520742ab496256022176978656899f24c1ec9ecbc3d292f1bc331818e779308eb4b04b21550cca500d10f95960c92a58eaeb1bf59001cceee5b7185b8e67aa86c757b090ee4309cb178859a5b6b7d1014626ba00b93bf815b31ba0bbaf14b35501f640a98417172432c694c6f2d6965f42c7fba97af4b8cf93ab61a00fa5ea0be8b6ac3af92e74fb2144f3fea33d37b3522e842296118300973a4efbc1a1715ed9e47ac8758c2877ef72fcfa1c7c84e05523ac81b38bd7c905588a93023a4174a16bcdd2a12c8d88cf222a067cd82b1a5041b04c29561deb94ba64c2d2c88aea33d241c367b77236585c1c5550e77b674062aa400228abfbdd92acaec6ce76f5d0a00fa24d5a40a02ac9271f1ceb489e1080e165ac4fedc10fa177b8a0cb137cb502c6b6e2328d903d668be5fa82e8cd414d3227cd07eb0ae1060993c4328b88708fff3d9c57af8336cdba91efee10bd37592dcb33d25dc58662af410c962ef9b9dfc63c7731d815b7ba20fc0ff4977bcb879b91c3af5b52362dd231e45b4e34837cb20115e12f643c90cf9b4ab425ece3da5380cb824f2a0ac8fcdd1cae486f9678054d9eae14a874f2922f44ae27cfff7f220c42218b96294b8485ed7b3bd7bd24902cc583fb1917d7bd162fe59fb3df00f5bf82c3d08fca8b9409df380bc1442a9a746b7c7423fff72e1225677ccc3095738eab6153f2b9c3ab32f0db4c59707ba487796816fdfe81aeae5f1dff4003ce2935f6f7ef813eb1dbc0acb40f8fd1e58b790d750eab52f968b6f83b90afc8cb6bb21e71041c717900e3defa79b0285daf60b7486a1a9d2c0804634b87869e689f75fd3e06e07afd2750c31ea1cd0ed68547f83b09798fa01e2f58c5f0acdc4abc5446bff6416822f68f001bb67aeb9cd4629905a91b65dbeb91ccc77dc2db4fb23603f07e1a0100c48b6a347fe892fbecfa267e587e5d982f521cc8702c3b963d91f6e354b9c786a91d6652d3b3b2c061de51cb9bdff853717359dce888f41978b4ba840cee820a2306e9abec38e8bf57e726a9454c424f65764cf85d151d56bb02f03f3fcbdfad0a24f62bcfd2436c24047ff0669fa50a6b3dcb363dd39f20dae5f2f3e2ad6ee76b8d044ebcfd71568add9debf1b22ef1fd5963f15a032a4db534790cddd26b7234979ea21768cf5ebc064e81749068fda587919fae2345022917a8b5bfe77951a0282bf09a01841272d41654ada8bf3cc5b90084aa2e8ba649982194aa20cfbad8326f7a0456c345718af5cfdc55ff4829e64c44e8a790c9f4afb79f703e62ace988ff82afc3fdc0b1cbc58e583013e8c4dfaf72841c1f351bcc39f505cf9c6a4b222e0eb9a782c02c0100e520370cc193250ea16fe279ccdf80317f268a251971d3a4acb7a36d39dcd7032e3da717465804c152f39af823d02d3d973f6f6e6c4239bbe7220b1dac9965a84900f1a66fa81b8c09756f2d93279d4178a785700b312509e2e21b65d1ecef11f55580715edbaa7fd2b7643bcb55cb08be0c2529fee5baaecc52964b151434afa97d5dedd01839837074207ecccada232c39d4271308f523d6e5ce122352cc9a66c3ef509dd8a1f0b61bfd15aab2d0d8539b57f31075a0ee68120c2735e449468ddc5e6fdcd3bc0d4975bc257b232df2969ea06c05fc4037d65efa31f0106e8bef64f96a9970c6b974158e1653fe8acff9b3b37e58181ac4ec10c53a14aeb2c9db4c8f91f9f89a5177b97d6509b49122204abfa0b959c3a0822af5d0df0dc031bea58df728778e8b4ab181b01ca639b6deff516b0fea38f588257dcbb9e468a94a937cfabc30679effaa95ea1c6b9bc5062cb9d35ac1ade68596df526ad1761f9221a959f5a612c24c156adc8db33b31d6e0862858292aa0859ec5ab9664d98cc8290c8d5498b4af42046017463fd626225e25c15eddbd09b5b03ee12ce0e310590d8642a6471cfabc4849329177564c75f20c139eb3fc9d76d5cb3a70806409370820f3603dcbbab7bfeffc1c9431338fced5b22ce2a24ab9bc76639dc2562e8c9533ed264d98e35f8666a223dc63885dbec2fbb73d3eb84c69f612b4f9019944c3b643cbf4bbdd4b729a8d24e72a33bae819fda6767a2f4e73d8e8441261865e05df411f5dd5534db06035a191fe49132f16faebe121b3381f081c7cd5792b632dea847e84c383b070f9bafc4054d85a461f5ffd1cae3447af15a5eee43ac6ff5c70e3ebdc6bdd0f368b9adf48edcf8470ebb8e3e15a01d4e0729b51b33013aef616686d6b7648733adfbd76102098977523188bee3bdccfe29b1953f8e872e1dd0c7310df507f251ce997af4bcbc64590cfb10b48d542688ace9d9e2b8b52051778bc08cd37271eeb7f25bd5aea7912046ab6ccab1ef4dd350ec32335b7a493d33619be69201fabc0be7f026f93959f7df4c7feb4c0eb4e15886aa1224a57c718ca8208baec65a3fcbe015f3c85ab4242edcded0d939ebe229b2a711444fc801248bdcc2d3603c80de27571d8c87ed450952cf49a2255ba1a36dcadbcb87a14caa0c3dd45cf804a5d438b5a046a3b91656bdd0465cbb9cb173f8892d14a99b7a900b04912cb6fb9d104bbc8d08827e313658ed9818ca05de17afe8bc335e284674b6e7458e86ad46d617eb3b62afa51335907f4b325ca1c5114758b3d1f7320462c32be92530d3bc9b33a4ebef280e66c782a93591d9f6dad88e1e14bf8b9f0f1c095382d6413c538afaaae16085bdc151365d465d967c82b65c0dfebb6cac749dfbb14c5ffdea8a65e60d7d7e8884401a387e9925f67606e85ddce462436f32707742829aa1466aea094f7edb1be71027f7c690e830274cc55b92c1ccfd4390326a799b433bd9aec7bc5bfabf6d05f2d826af7109f3c037973cc2600219db2e5af70b984f6ebb9b69954baee934e01a1f5f0773b6b9752bae9be7c63fad3dd2ad02562c16feb9a28d62cca152230322b1609a6104674196166b5d8a0e0f14615b5d927b51cf9ffe49e40a49f8443463d0d87205bcecdae0ba7dd9643bb1523723d9d8ffd8a6a837f55de720065ab45ba87ec2a6fc3e567deec607a52884ec7610f27e719b40d31faf7e27136cb930a9e97531bf40564e02dd71dbd91724343813db0506ac956f37e6ca516acfebced78814b33835dd3c47ee3860d6dd947077c06cfd5cafb795d7ba20ca7dde81539ded75fb556d070926afc2905ab3ec366d88cedb5fbecf33f84a118eab5cc3bcd0887462c3b72edeb4927ebe83f74972398590e21b4e083cbaff1cde92c5926d0b770ea3f6fb54044d21ec3a6be2df7718e01be4dbc04ee09d456bd4dd29163472cf7b23699cbafffa44acd95a4b34b7379213f2f5e42f1867e0beb73b4bdad3ff147b1f744413f7c6c5091efc3c1241a88ea064cb4291769922166c52d8afa59ca0e87183c3ecf33b8d7b7e7a629848769a320c9d433cbf4b06385e9e63bbe71a62ede480594309526b04d8c43b96ced399d73c29b02c16020f9edc0931e682eb7a000ac00d705a59cf61c87d2c3c0d4218c8a5d2ec667978c2103cc5a806a4a1af417619272cf2c6e0cf31866dbae73a34e81616411645b29471e63556d48a7062ba72ea7371078756382280c159f3509c2deabd1061056a96ea6b4abea359e5e390d710766bb92faad981b3fb2de98e86da938aa3e4f50c67c30f4689c0cab5caf6a52650cffa42b41ee9297a5a2f840e1115b0605aeb05a13d01c7729ab2bcc26546048a98c4b0ffcddfb54b9427d55fde979bce5ff35f1d7973f404f74ece3814d93575cedd1eac8f8a707c3b31126f68162b2c654d63f328545a9c93a2fd2d62b656907a75cd3b15e904e452cec6d97444d250326476c6c517120e2852457642425ae9eb7c661f17914cc5395d1134d8fad14f3b2488ce4b5f919820da5378e82b84a86d22176e810820b6a7391f522f1b34ae28776b49dbc27ab082f97adbc25329707af3e1635f405ba603904a7f7f6a16281e9d53e34f9a3cc5032403d18bd9bb465356590df996fd26dbc28a5f2a6b7c3805459a95cae585cfb5ebdcb4d86cdab091d2e214b602bfb592cf4d5b5002eb4cec171e18f30779d843abbc76e0961801dfa9d34a4bb8bd634477586a8e53055891b71f2e5ab7c32896a5b22b618a35fd0c07cbedba29b9e020eca64e58c28dfa971534fddc1cbb287e934977ee1e7c8a2dd7616c0376978d1ce21b920707441d2cb30b395f401175ac47c0cf793c03075eb4145551331b29ad37a47c2027c290a93acb2538849ba20a41ca6da67dc9060a54864f58cb4f485508f1a64ff09ac9fe1ef606cebd53c77b0d060361b80a859b2a316ab2e5dd07d05e57f5d32b26af54f43f83eb6c215b686ad2931127cd21ad3e2e6c584e9176c48018796de2695141fb81b7b25fd60cf8cc55b62740947daf518306ede5f39d232f97ad3d4a106ffb771ba181e0618596e4211435398ef1068fadd6268109dc7244c45af1237456b96433e1cc69c5df198b2294ca3b2e8d3eb5895eaafca33c21768cac617a060ae693fc8683e6469c7e81ea7d43dfdb4232bcfeb1955962dc4c82c81ddeef9928f92bb5c291e3cbcc55089940c37f8db6fd4a8b8b6f132470b075c3cb6f830ee49f524620282a3e49867f1bfc9177409878435db08687c2868175fcbad6dc2f2a71add1402f4174dea6b0d8101d0191f89aca42f7086d327075fd28fb3e32a5429e64674675a2a453e5e55c01b61bb334a1f2f60b08a1f402079b1a798df1b00e47c5fb3eabcd59209b096c94b91584fde8879ed990e62f20969476c6e64281284be0d595c0ba6157023fa93d5a1f5e334d3c493f3ad19fe97ab35aeddd81c70399fb7131883e7e1800150be6ebdaa5c7b85378b67d22ce02a28066000605d01e005092a81c685db021ba00e0653334388083fee6491a00ded9fcd53693e17eec7a9370c12d27da8f822c2958a31b7e54db05d6b9ba6b591b82f122401078bff62859d0930a5dae53d39b413b1e43f0aecd0e866e0179f43c8843bfd5ca8884b2e190f40077c5386e617186c898285fa6e1f369ea35839e6da035922b6c839b80c60f91808dac586b1c38baa754f4299b9ccab2efd196d2f369163885de29534d605455f5fb80fc4dcde481405665f93bbc4185e0ef5a595ed6a2423b1d95a66072dfd0a89179bf6368251a03aba6d3173bfa6d82787ac6c110f3ac7c8115f926d9cbfeacc136a9f3962f23b8e08a48789d8640faae2c18f3556a5d3d49607c3ef87c0d819663d8fb21ab509adc4602db4ffa6c48fafc957edc6cca6f51f8652580076bba1a555aaa4624ce833edce2c85830ee8e8da111e0447acce33455a2b71170b69674f6221c72208175c40dbd57404d3c5f4d1dcf49855c71a7cbc1b2c00acf82464b896fc1d4df582688db9a9ab39c39e1a1642838688e8204da507020fec52ec64586ddb539a45a23d9cc4b7da47a3c7ea7e7381249a111b4c105a0cf58283f3d2de8a362fc2e9ebe5cbd1f0fc9e9d210b9c7e723d69bbfdf1f9c9c777a42e0be82c6f8bc809c3f6c9fa51c384af80ca26b120db7dcc4d3968ae959999115aa28557b20111ecbc9da07305bfc6a0b11b37278f68407ff529a7c61aca4a0e4d94f7f30f46abe077c4bb7197dcbcf0ec7a7097eea7dbb7d27fe9a7f49776a4035d18437a04228c9f7a740ed592c221e9ee015b65946904d9b2ae8b7603d011116851a1c23a77b43b2cb0cb312fd956feb01edf5d8a46eee31166c605e5a9a8d5b8405e883250c6396156ed47d216a655618ae71e4cea789f446c73ac83ca50a9ad8816be7aa86cf60fc59990bcf123f3f108f85ad8455d33946ea5cfb7c9a21d999e1e418b79c3b725c3d550c76139380751b050a7854cea8063df4bd5179bcf1ce78d002b868c6f143d798f63069a9cd946ca1690b0ddf5b41513a21b5b8f9a8ad0329aa26556cb94b45134e1b9b2e9f1a4cf44474ede8e208850ac274953bc7f524980259c22d3dd8326fbf8e2f16209eaafe992b5c35d75655c08c1db55c7729ec16c071f5b08014b745de29a276b1dc9e637c9aac07b9375cb667b8d6121e730dd8b56f46259ae5be794ceba565aec616b69afddd755519dcd2fc3e096c7d4e5f103fbcffa19f910866c678dd09f36e6c4568ebbeec55c999b94ff677fe2cff66d21ea688cd4f710e84c8111801623a71615c2372ff711cf7e0c07cf80b0862595836d2980bb7dc75a7b1fdbf4025266822f5e159551dd81585cbb694060a487c7f2559d15ff4cee8bc4ab1d16acf6a31b1b18aed8a9ead9b084ef4a682a7c5a2d962588c580a533f175cbd6191cb4e98a8685347c94a05c540bbc75b13940d2499330153c2bc40a6bc290355a3a21b06e54f3fcbaddb9e2c6309f6539b1ee64edaee6b3d089056f7096bf7105b0f7063c5aa04e2a17d0df98eac01f84ba48db0eb7907f70b90ae11250143a0c2cf771a7fc582511e20ec377c8a6e1c19813feffc339ece3d3a0dd6b1838bb70aedcde508ba338c1cdd3df1e4929effaab9e4db850009f0905980c68f30fc38125104a696fbb3064409109df695767e513279649200e9d98dbc3124b6297e49387680b6a3ea748850aa4d0ebc429315b4e5bd18b0d809959aaaac393fc536cf3d18d986aa05f6f8e2f076f863814a9bf68e2aa11b84045b337ba6de323b7eecfcc4909640c20132e1b01626a2628bbe2ee7fce041feedceab86c8ee7fe353715a74b41b003b7909583e48aeac3880c726bbf1ce4b83beb880d7dfd9984a792f642dbb25d6745134360b8d41a7e3a1ce86a91975439ec2cf80516ff3ef7fb748933eae7139b632b360ef698aead665153551f5f468c909ff4fbe4d8bacebc3bf8837fa0fd35151ddc7a0a4e104245276ad4ccc92a807ea9fbea23eb23ca8ad48a99d5f4640328ab7459a125af7c25818b76454dda1ac8ca6b47c65f7e06571f509fe4c3158bdb807f7191e0a285cd6db32bf6cb9812878d8ec364452511be9826eff1d39c0cc8e4edd099b075b59dc1fe38281d1a7907c204f7019266b6269978d08ce2191f7f8b97552d5b009f99d6728d2f5bf44366d384809dc9daf237299f95b5479c05b9bd9693dd62e116e1eb84165f9407291fa116dfeec86b1ddc80bb17e07a9b0a8d5faeef9e1a83c812b911383feb945966d1533518b8d5010236a8ef1ae993765e2fae74db26163313b3ac588cf2ddf9cc36827f10020dcd9e0d2b4113b04117f537c5cc4809850a769f9a180d7f44302821307df480ed3f934387910adf92ab3ea1592fc42c603837cdb89d923e779d68df59a62234fb364a04da5cac9e9c488301a5628f5cd386a1299fe657c25f30c69dc096577e8ed71aa56223f2137fa9b3e66c1ff1e7b365dade6b5ee441dbfd9d168d78b3e75309fff37ee4174dcee813424435b7e5cb0f6762b4477317834e035d89855b8fad3637e6cb2c72f21214a95b55a04e9d0335bc28c4f5f1b24d33e553404b5be3a351071016793605e61189be424ba02428f9a8061d11cadd4125faea1627311a4bdb59698295efcebba47c027f7a7495661fa31c0aa08363cce3ef0057e52741f63d48c4109f669260c5d2765930f01b90369934ea12b6142743a6c52103294065b0c5555a1cbc95e1ce88d9507f699129f29fcfb7777781c32f50d36dee698e2b3ed0b4d8bbe23d42389ef0f57b2e671bc790ca76a05096ad5e65c22da06f8a5d5091eb6c19760c377385d7ae5f1f69538fa7948eb83f8eeaeeae25284b637d5423131220212c0dea5a6a1114842a2cb757c8013f916304cabc870ffc43765196e4788140d7a10d8e056beec0f67c7b1bea52515fc8f65914cf28ef2daef077f096db5fecf65534547eaca54ff1c72e45d6fbfd3c819638da442b622438f904c75fe0484e87e77740d09c0774523a0041f3f023af7c18345ddf897c0cb3e3e68bc4f90c086f8a52e9deda282865c613d7830a59e7e9764a729dbee6bf3e5262ef1e4d93512d41e6d05b635b466e3ab3a96c3a3156c67f844af1337e55d9bc78fcd9bb9ef5c14dd1510c95dca37d544c349d7ad549c5b3fba20cc47216f68689427b83d7653a794241824b7b713c5cda8e6144ea3db2bcd8c9e3802ec8d585c197deccd244786accdc5f80e9e0d7ae4458f2e78194bc7dfb1ca956aab0f3827bbc31f150b0bdbb55a50106800bb3b27435c6dd24719f8e1578a8ab2060c6815c23a0362226c026ac9296dfe552d50c2e3f48f5f4bce4a5dc6de59267142732caf77022fdccad73309cce5750b8366295cb881ea788cbf89644307550ac1590a79673ac20cd2582bf471a8f3a8ef312e369ec673ef9f3e3c39104e589ec74c64906039ebad118969ad1b056e9fef153488c3cf9a49278faddd1c2a90b37fc95e5c34bb9832dc85d43ae2652e7c8f2cd2430a67547ac6aacfe4a8fada9d9c0a801bb83735dbe5204c2d8e8b08466c10aaf0cb6d23b9d70d7fc28154563b7396d55399aced4020492bcd72c4ac8569b0ae32f28cf74832b40de244eeac3bc6ec5189ff65ec3d9ae2eebc0112661b0f27fe356acce3db0197755a85e8b22829ceeba6c4a6eea105246bc43119b0ecc7133df00f112897d337040ad83370828c534d9ed9539d1b8a182276bbf39be073be4090b61ec80ee1d85ddc1d10c5049d11ae9b0e3098b64749b4335b0b891fa8fab45c9b400017b007fb05fb34f6928c2d84e7fad2c7a0ccc32fa4c6a6a8f2a3da4cfd75ad98be4b56362c1c15dda8f9b3a270f3536d5ed46ee8d938dd5f839566597ecbbb8278cab859a6c3bdb415b650de43cc76d6364e0f66f06958f9854edfc06bf3f59b70242106342abbbe825ea50c9ac1058a3678981e77562e389a30e16c154c743ecc666d12e71d26cdcc549d83e9fd35026a5fea7f0a1e96872625b7a4a7a4cfeeb2e2898683498656d45302104fc39123a78c92570722740f101a98c1d3da655ea6e1a2ef2fed2e33b593a1aa87b8a28f95e93f158995d912eea7bf57eb35ce6ff53c8644bc676b064a38c9ffe3f7f74698479adb15ec52c11654155be7f37b7be24f0d667ab7d04b6cb4271ee25c161f9ef4ca5b14fe0b75cb9595a69866697c6bb5409085bdfa275c5dba24ee1c916cd529236645a3a6a78eba89923590102292596387f7994a75baf29e382e7044a80e8ecdaa6e3a3e846f832be4c568ef9689283f349f473b4734f48b0c7b250e794442f7f1181a8249005927e0d48b69e4dc1516fb28ef34bea6e272540c50baed06ddad1a98d286670ea2623e2d474c4f03baae15a002190bb50f0a971d0f1b362d4ae61721a9ff84b407412dffa432203cf0157ce020ec4c29bbc3ec9f4dc23b27c380741c90fbcc75ffc0c071015608863ff2af3495b49f86d54526783338d292113f6c02b4b44e2d38a0a501150a4a777e7ddc8addaa84507dd24a790ea342fcc3f3d4eb689ee4a03970483e3dea1db6796e20d9b2cb8b8def5f76827b6f8f2ae3cc87178f911bb72eb817949743a1e812e7ade48a3bc0a0c8fad3b159dbfc9c32541bcd1ec6964ed3aae153ecf9ef09a027ab9e4ca2153d56de1c1e750cd80a6e2e0a2a32ae7c2c6402bbfca54a3b929037cba25ebb50270a3065f213cc257ee3e5e10bdf4f012210caa29eaccae850c68ea5ea874486bfae7a7e1a652e6826d01760d25a475add2d46acf0ed019bd547950387f3dc19459607ff9117f282bd609dd910f54223581c103fa7cfbf9859cf8760206c3c7247ac4d3fa66c63aa2ec0e3b4fe89f66d6567eccba9e15c0e3e5332dfb94835fa3f42b83252bfe83e75457c46054714cc792436c0cd95c48254b75eec21899d3829ed58878acfb1b33387cd20bb1bcab6f938574eb35e7c596b709c64d933d30c89e50947b25fe6db6c0941ebd0dc85751e5aa7a9f5d61c5286f70bbffee2e4f25133b8eb9e38b25e4d1aa30e4de21ad6a9fb6f1c076ea78f5ec88ff771aab12d603f7aa870dd775727080da6d5110ec4c060dae1e0d391d2764f9ac3a56136371b86eb36d05f8257f39c4c2a5bd4b974deb366e33b8e4f5891823ad72e61b1ba733290d2bf8e2b5942f22ef9615defffc6d0247cf5b4e7c30aa4231bf59ddc4e4bf946320443c99365a58f642a0312644bbbedf12f6a8176835b08398ad0fbc23e2527f6788aa99156256107f6441dcb90a6abb0710894a4335555f56d11f8447b5dd53c3a5d57ab7407bd349e26265bae433912edb015537a8b79819f210708322e15216e719bf9d699b1c70ae4001fd351eba62a2a0561816abe9dfdebf82af351c03613304c2545f81c0a4fdc5c4c05f333252772b85225cd9b7b116db3376bff20b3fcd6c922942a2325d0ceaf359c284e0eabdf2642f20cfd0cb4b996f3409d0bd18436e56abaf83eb3d635ee5e556a922ce4c18624961c4399a0652aade687602a34291456c1cd95f2537614b2bcd2d33f88765764e5ad68767cc69b9a2401b38f50128a3aa7b3963b2c9657487decdfdd5336da988e962c2c4c56d5377109b598e19f674db66c4d907c3efe70cad1699417a1297405f90b4810f08737a0a07d7bf15ef7ffa3de562065709f3043c5be78911b991974088956f8326d33120ffc11f6290b4754350901041eafc77643bba7836d0822f71cc6218e02bffbd0dfca3e4c313ee8b5a63dee7234d54e0c177635cb9c7b76576194a9c3bed274288829a24e206312a78e47a74a8de2e3d5784c33a59582a693413c77ec94712bb640acd7195bec88980ea9fb1599d5f9015e8f5792368126ddf169fd23eedf7d31384329a3036013fc948918d58aa4c5597a78d5271015e34adec31b0496a4090815825ff6b108590c40d6806d6b92600e2dbf6617afb56a9206cd619ba819e4fce3c3cae419d705c4aea17a30d6cb6bd97834817257403d65faa662e4c4effd9117efa15d60466250a1c509f5e391ca25eddc7e0e84ac05c8ee1e0367dbdaddf7dbb7da8805505051ec24bc15b1a3494571f756b4b4161b835ab65e762d9b7e739552ee4002d69e69092540c0564a71e290678c7880610d3c3c2a618e58d393a3467c06942c40d18503a5736a6c1b8834dedda43214211d47a315f7e1f7d4914f0f3dab2851c844d9f347230dbb129c072d26c3f3a2961765680a7e400651b64fb0451afaa72beefed2e7242453060d0bcdf87355dbb45d80fe0ae92f3a14070936bb2c8232d2b66db8c0cf618a3dd23dbf84c6e6957b0586485eb35f74ccd569c314c491f49614431cb458dfffd9e8e2710304349fedaf9b4ab7e36fc90362492a4cc2956991640a54bb28a533799cc6841fe6e3c27674a5863950101253edcf4b7a63f1cfea11b9c77f75205b9b8f2f5c2e197fb34544832f22ac6049c47ab6f7135bcae0b72e81922635417656794e178dc80497df303fe25574ebf715bbe30505aa61c0254d2f899219b38f4a091394b5e505355e6ec7a4322eae33dfbb6c43a8d5d49ae9b560424cb8f1118784d676f07f31bd87c903a1e49e3302e54a09925d4b3414b1294c40864ebdb6e111277f075589040d4ceb43873d0b9c7230ec469f1e27dbc62c674f7116c0365dc1da05a90b388c9a230876ba673dac8583208febdf314d9a10e2c0a516416f43def6d0e7c14ef96a9f1011a841680be3ee385fbba629cce8bcde1d389ce290ac3ac06f9ba2d5a089978a500bf6b8f0a56644b9ac73b34de53037e0ae91717d5ade04b2346d8b51e049aeead60b5d9b370ad2ac5163aca7e4dd83763d8b11050593ecfaebf34a038af0b384d8dec6a3d825816bed5fcdb625b32c3a35eebc6b3b290a2cf4f2c4ec3b4cfff55259180244434cb160d62a1efb0781d0c7528da1fa2ab7e955beca97515f0982c9f98f2d0f9856aa83e66a0d93c6d61d97dd03a74786c3c6c98a986d8f7c1790f387806c6562ca62cf63f2eba0db6eda6ff10c21badcbc1015bc3b405f3cbd6bce8d6f860dc2d9e697da978a7290f1f195357224b85eb03f70ed69b0d14f87f3783819b14f7a147eda1cb06bff31ed44259632ef94114e0aaeff80d307bea058aa6ba8bc96c04854c6c182d0a8265dece6f71fbd6123d530c63d74d1a1243351d13edda801fdf9df4f42c0da4830a801b42cb8f4ee24fe6f06b6f44c0110e592d7129e1a914f738396b002e8216107aa81d70dc97a9f942456a685a05c6b2d73d1c111aca7ffa72f16e187af20c983635fcfbd9e250c0562b11a5430b4694398b914bdef8a6f4f9afc32019b20a85317fbba6edbb05803a4011cbd8247827cee00d97ae0b248a458d4c66dbc302d799412e2e26b844bc05892d7605707295c918d093c5430bc7c6a16cbf3d6bbce258f62844bf84a79e8f9af325f593d7a78d8662c7824fd0456f4263dcf37b2757bcf43ee63182bc39f2893a017d27f11bf74d02ab044442915e160d988f2a3f967f65af2a4b8d69dcaeaedd9c37b04e196cf7f2da289aeae93b59964f62749f2e42e21ac1eb153f682e21d1651a5160aab993847b078b65976428fc0a199adb6901c36d3fa5363cadecef25bae48c28d07448ab261ecbdbc861359a3fbc098fa321f4465241b64328c055df8ca5ebdd003f2d627a55e8deb4429e36173a76c46651f4597127dc3291423f60111cede2b1ebd981e83d7d43e374664d8799de493edc26748c15e991292943097a1f61613dc0f57ebd202717eaa43dffe4e7eff2b7704b91f469730cd806d70a31da34010525c79b4595ab5ab5279a88d085a54d0404606dba5fee60b0e1bfd0bba2676a61fa11260f6a012507efb8661e305e7917411718af5c33574af7ca11be60a6ece17f66a86a4ce207dd15b2b9a92fd25c3cc4087c02f0a19c4cbdf30a3c3fed4a6892ff05253779dcd16a1581ead33829d431222b916b8d71ecb4ebfe35c85347a979bdb7d869453374d65856b5ef523cf833ece0047012ce66d8547c9ac298d6ed719ef60e0115d1b63433b19de9c0cb8fcab9f680ba573bb90dde5d9ea00fca4adb123604cf154ce31cfc03eea3cdf0649bad2b94c00aa2f30c1325e9fa4cd717afac31d2066dbe79d0f787aa1f64936d63072595711cd32c1c9b856202c9b301fbd54d1467d840153b797513da5f611f0635d43866230682c810a6e148cab7b07c8b45852e14df94afa3897efd640eccd02352061fb473e852f8013d90852e82b9d1719b5498f0fc2aa2cf2f971a56d578907c40846dad2b2b4729a44362631ba2de4c69d18affcf64c3e1a20f901e83ce2e325616f04fd85b24654ebebbcf9f6b15e975f39adbad591710db1a6db4761342761558b1067e4be4d8ab572f55b3fead399b5f893c790cef23e2235503cf8c5c1be85ea748653a08c35837456a1097784273b28f5d3a3c552e0f2506c8b18f49379d792e45d3bb5cafe6265b55e847f167bbd3c786f04b18517c27e8beabf0c47ab7cd9f94e6583c8b911d0790bb2b07769c3abd56cb3ee8d666ac1185c928eb825d7aae232e30fc62ebb5ec0f40740a0ef20e0777d4e46eb256d1040bf2728f09e8f5970373ea6e3b4783a60cb06bb5b5b7a0ce1bcfd015e15d065e01f25a7595991cd80b84bce7842a01bb2a7a3112d66c885a27130d601f01bfbabc31cdf7ea285a2d0623a88f4d370b619255b6720355ae8b55d8e2768fc9e4f8374ce2c4bfddbde815a3675988f431102792d5b22dc01a933812717c1f3810369c25ed3edbde830b24d5b94516d2637c73c97512536ec09b6ef82c8119fd388e6331e1066973fbbf5be43e65d879659d58b70cd8069fbcabd2b3873a70c6c1d593450dda03348ddac03c8c018602744bcc73b264b3e7b47ff608ba614710e9176e39b0ceaaa5a68fa6b427b1419b29043ea083a546209886f6c4808f12fdb16e259168e3b434ee4d956e980814f6a7301a71b84b70f9a3d48589466af2730569e7e350c78f78e9ba5c4690a6970fd4d95dd5e002da2d62e605fbb795dfd17cdebb0ef43b1b1c5048ebb8f833d67f281e6b8149162f506a3e40f65596eb1b1888bc4bf8b8a8a4330c20f8d15daa5cb5cdb3badca68b2993af0efad72ef10557c61d62634c916b757fce0a42b096c50722bc5dc86c0aa213044439f0ed6ba8a448e2fe2b32a4ef33727d356b20a959abf63eb9f269dcfe090fddf1d1a85d8e5d027cbc0bb7a895ea40fab30a62430c9f25a13baaaba51cc161fb06efd238912228580219985f8beaa9d9abe47e1603b7d12b6308ff97aeee7b4f3b1eabf4b5a151e5989bf5845f9ddd3c6af31c9cbedf0a9a72c2cfad0c3344b30264d351558c13236e11495be9d4104537a373d1728107ea2593c7543bc2b290664ed73d38847e688abd5a72d5af7cf0a949ae707a362682a7c9adb231066c09c162dfd7cb5c143369648d00a467bd10dbc7ccfa08f5a7f610bf507526a3f0dd7836ac907bcc72fb909fe88192d5ae3c493cffbcfa2bcd3a0412c96319958a92d32e30834be5f3a3e5f4ade56d25aed06d297d7de1a27e76621f33e31c556665137f15ec22f538a60b04b17e9793d8eecf2f2f044a42c2dd5a4094683399e59cad0c97aee9f45ff544736d6bc7acc24080a986e9ad565aac2aef69df3f0e47e2068ea0fef311e00273b4452a0fbb1d18423da82d469acf2257becad3b20f2bbae2a6d74666b1d39dab159b44020af7440b37739de7dc3760b8b0220ed02022c45d224eb48ce801c6a29aa07780f15a10431975c9a603c6176507c0606757d6924d889be8bb30e14cc08613e8879f7d7291522afc6c0328b9a1c0687bbbd15cf49a637ed23656b79da488b581eed9f48258cb648e16867f7b77e61ae8f91761c0741d0918327151f25c8e58f795153a04e6f89e6d4801b72b4557f3521a324b5f9377351474c6b3da2f6afbb52c0cfbe9bf727d669c6a5e8f47be550c32d622c9ae3064b6fd1eb9008782707c7de39de3d2e9821ea74ad9cb011e02d32864991bb89e81e592ec65bb9a2a9b91604e1e8bd73c3111c47ba24d79bab0322d92778f6e498af6fd201815387cc4272fd7b93824cb22ed7537478469f2180f125a1a8e37edd25570e4f86b37d4eac08474f64963e4352ed00a5b9561d30a64f10e5972603a04fa347e704655fe8564eb66079114f813f018e2fba5d8e98ee72f3f4e67c961973c6e3c25d1407c11ed8345a2d92cf034312f5858b8638308a15f76861d8b677fb37fae816e9e8d72fda0b5c772e753373acf1d6af45d7842ad83b7cae6ccfd1bbde5a8ff9c8c531e16781c8c6e740bf4c19f8f339b57b07fb4c8a1228fcab027820325272386e85db87ba621f613a4e9b8a38e1d48e2196bcb79971d6a319d08fc384b48eca3b8934314df07884badb4167e22d4473bb2d46bb1fd682022af40e77d99106576c8267c4e9c8cb7d7b6862f583da0ca44d3033ad98645c21b4a4f7aeca606466b5b1e8a68c5bcbdcd38871ceaf037b3a4c1ac9becb5e25697fdca1712eee600b88dc8827a857eb7b6bec9056e81034940056c41900c7b06dc002d765140392bfdc9470a32fb1208274ca021fad64b666f17b28b5e54f9c1c606d62a39b30a6538025fc478ae56a8ca97e856bd1df8564177fa3c6f633d886ecf59da47c39f1fc0a2ae1d7652abdb1c706d6a5347958bf629c163ad6c7f9b33f22d5abcfd9a46aab6136cfd2fdeed40220a44e91ed3b6fec6a281ac906c129586d82d0c87bf0a2e86fb4c5cf2c912c4e0a604893979d5c0a891b7039a80b62e095ee071d37173d02d9dbe4f1e407c2f4387ac36ad34edc07ea18549bc399d55f04431f9904dad87b5f5704e98a9ab3c43969a7e0a1c2c17cdd3b4ce417b351922398a32aef99ccc8e5d506eeab8deb4025db19b62ec093abf8d55586f07b5d3dcf5e8ed84665ab31a86b1d06460d5328eec8552f233446f7b431b805574590e6560650a3a6a29157a8a2f694c419692488bf158068b3d802c88a1326e22e0d0f632fd6dcfdf351207a213949cc8cd44a4e73f337f098285a1f62c3faa22e4ca341bd82fcf1a5752dcc2e6b2fae6084663348e513f49532d908dcd0d7780e03e9863d52afe13a2376bb160728fc2ddb655495bc77d96398fad6301b9e6b3e881efc596404a485cb811adce0c7ba4ca1c4c95d5ae30e38d51a0202aea93c7477a007e47c52f7066bf201b660acdaef75283bc21798277121f9a3570f7e8876aaaa99c6ad969750c7d88c515e67ff3f4e734af7286c2bcd205235ac90308799133ab6c708f250ca187b275d0048cee82f40dde0491b7984611cbb73997866546ad2188b1728a232380677f12fbdd76deab05fb87ddcaff08b8c78f24593ddde2deeef4270d8ee4bf2fef6518c900d69b04ae9c62bcebc9aa60445c38252bde0db89f1e1fbc566749c687e32664573a32c90a62ab1faf5ee40adc5348256646e8a18629d3d4dbef971039bb9c8b2c7eda57a98da5f6d6260ec6e6021815fce6f22ef9256cf369e2bf7a5e27e112dacb25d78c9bdea7631b9e53b723004f73f2019059cbf78c54144a1a1225d4df6b7829ee45beb683bb3538d52fcc83ebdad5fcae7ab90cb35192884c897d74633c046842386118e6d7aac1cf0d28e792254fb3a278cfaaa284270a2f03c86e388f91a8c16426f3d16f2ebe4207df963d8416cd6faec174fba5f5a07d906fecd5ec4c96e43ef9c53d118f615a73dc337fe1d0238eb945e5916cc4460c3e2e7aed0b013e340ba2005d8df42f1ad0d98ef82998feb4d0907f99983f6136eaf9bf984b8e95823e06a6fb06978de5db1dafa6c90734498e4431cf852e74f4e4387a878ae6a4ae96330c00d862c03b87a52aa4809cfef67c9b246f212b0c8c24fe13f2c8c21489824e51406c16a4af34e41b64b9d97a1b9e4a63d0ad5d07cc78c63de0dc16156313d0cadd355ef3883bd00eb2536372ffc4e366f1ed142f9b7ce38aa54b7dd78a4b5531634da9da1d872980df525115986fcd5eb02dcf3bd0b0e887da0b7d66613784cf59cd008dd0191ad47549b1c0af9a6dc73cbd8c7fa1d206ae68072fab60b24511feedae1c335a9ce6fdc13cb62f7b223a77d21a534f96cca72821ab3a048bdfbb157bfb1270319542fbaf4afefc39645d77b1f71a8437fa8a85170582ed0dbf1304b8b9185cd2e737e3477b7941abc4a02249fc9f17cae2d7cf771b0a0cff726a0cce49c9de7662a865ecfe5f62400edf481429937a3c8dff056f7f17e505b3954a5e157956add62d2ad92b18992b66379eb1e19d236d98676088f2efc0a5d30b663cf6028771955129e10feb2157e05d27555a76da87e7ec5ff47682b070c033172535ff4137a7cc4be091eff57faa630420ace91bbac6b6194383ccc7800d18568fcd77a25f9f960dc2800eec0fcb44d33f3d0bf217c165d2bab171c5e045e1289d30f7bbcfbd26d6118965893ca29cd42316a63a00dbc24fe8ca9aedbf494db87cffb7c13e48336df201d3d9fb821f397f8beff56f05911179857db397c9f79330bdafddbd26f5c0aa0d05dbec3f6e18718a12bda65434bf936a95c9474a4ab2c6464d855d33b21322235eeffce71b7a275cdf22ce51b49adeae356e74c58ec1a3c38777fe51bb1d76e1695076f22c933a97cec24b5d8834c03e7d7864fd924b59d6c9418cd525703d175b553f614b85a0b3f4915142df7872728e594ac9b9d7e0dfe7706501fc875c50ddfb17dea10209c1f605cc72d136aa20f4889e726eeeb4536b8dfdd9e68e8012690a50797a7dd4e66b6d76a947cd6f89df39c0c98947579256906d4a940eafa745fa4d1e06972929cfcae0c845afe676501e2ea0e517bb85f2e1509b0f26119a4317f6d5cbe4304594ea47cef3d63c2e2e570d7a36cfa834a6e2be4e85566ad624f4fa10975a4ad747a6596edef4fe81db53f05377e8b435ed6a2bfdcd5c30ff34c08d5f515f36a4f413f2b4fea4c95d65b4515ed4819173c885ff5af52dd8f8f39aeda7cd71ff221eb320ad1db3b21087b7067d6814868ca7732fbe9747c797285c237fd83cefd0927abbcdd2b2c839ea70eb200e9d37c4494cd7651a36aee4abde5a9ac1ad84c552b4dbc1089d08afcd9ea2e56c8a77fdaafd0aa0cb914c34250013873a4609acc54eecd871d735317b559ed5afb593092bceffddc411abee6897ef5a2746888798fb4b9f38f16c6b41a593d047791a27f288daa4afe5be4c81cc5f4daf5b691db7927a3647bb043ec363e0e37350cb4eb547bcf221001ef93e8e042925b347709965a93b11398747e6d8175e3e3138c06efb67c26a560b97aa9a9af83b2b3e305ff289738b021f6590c9112fd77d89d1438795931ab0ac541eef555039e7271cfffb32e640582b077aa4dd4ced84a3900a3a3de8d744d350f7ba18cd6f9cd7d388616fb43f977aeec14a1991a128b4ac219900148e082fdd86837dfe993b898a07503f1dd43764653d095d03fe1b876e650d7b4ca07288196e56532f9e04633a5499d723e14d2ee313a9413d7a824563b89cf96f7e4234eb9617fc674d80fa63bd4345996fd684109eaea90f497b71827ff9ef56aa57fa5ed3b104875a1fe20e090c2f7b9cb0019aefe400172199f01ce00f2ef7176d07a927da507a24d01442310cb9e3032a2b423ff7fa01c78706375b8b5b900290ca57ca0dbc9ccad9756377d4fb9917799d868e25b55f4dd83e20b3152c85d24558308b4e84a31cfc6c1ce00d4725e87f4670fe39ec538975525503b6eebf71e2534be23ca5071261075dfb954d43d5dffe9aa4cfe00e171736a794f82910519bd0ea43c2af270afc658a638f7a036b57708f14da6cc14648701b08fac44d35f15c2b0e4d579069bdb655eb640ab5291e0627e75343e03f0e4d024cfb7d6d8ed62b2bae14fd41ba57a328d2cce1f6f9fb2115b6bc19cc6bd928f69bc4e4cbf991fada3859a341d36e38cc8c5f97a512fd82722860baa0ccc094f0fba4591795374ea23c34483b6032a632eecbd709ce31041dcb981f0fdbc1ee9e49a0e16bb35c84182eacd580cb2a6f9353e27852bb5cbd8c8b5a77b1c030ab7380420a662150711ba4f5a9895f18d8b77024fcfb2a9c9ef67cb79813be12b66c95458ea3f5bdceb7401a02a16dcbc0d6c82ee492abb1e7f98c574929283df8d260f8bd666ef1c17daf6dd2b0849165ca885d76e4a1d1fef7cb6ae31fd243e354a6101d6712cbc7dea8bafa7238c5fdb5e4d7610ec66163e946480083c2966a4a6258b742309d07e4cbb22262074b41a73c14825b59cac4f0f5527c33b65d919a001a4c991043449ed88b56ef23024d5e96cf0c37986b37293b06295b4c647b20df16a2c754d5f5213ac982e08846e2db6cf72742f810ce7a9b8eb7cd66c496b47a4487907766181988ab8eb7dbdc28a456553b4b36f68e1fe71eaaf8b87e5632f0af2a8387bfe038e3fdcfb42aebbea3b8fff9792eb2129adbf44a0fe221a88d018ac1403a078086d665b787e4dbbc28e15a4f25552f87e1e81805d6b69dc5bc7823903ae4c2b86134abb5488fa1bfa65fe9c22e339270c145d7b09fa6bd3fddcca5d036870021758ce4854f5b0f6ca11040cd012f1d18284110b860b15c3cda5ff8c531a9f043f933b5a53575d8692bbc92ae40b8de2e2d0a21301e1a7fb5aae52fff2cae7cd5031a1073ef92c271e68f7d5380ea9ce0f0a81a385e370c59b4bee744ce0be78a445da60c94fec818e26b516e4111e7c2b59874d0dbb77754dc18b83287989aafbd2b212cc225a35df1f9a820ce1f2bb42d8950f9f8681fdcc392413dd763b95b1fa6a9ba9b3ca285b244e8cad6339b1ac56b1b7e3076ebafdb3951800c2e2bdf2b184ce9611fbba7ca98a3deeef96c8827ed8aa7d65e5d3daebd63a2bb03f2e3d4c04e500264da6a63e7fb47c024607133df8f44ec32406b1f2da19f6e3deed6580bcc1b6d5d174be463b094d9a18bf514ae8ffefe397eca3da222f86cc518a1a5dcfb2a54e3e616f95613405d2a84a227e129df7eca527c79161099a93b07de4d4250b333e4cad51b754faa8e64da1e269e24fe8dd1f7673def4d2861e6284e4f9e3edc0c15eb0637b11c7d49dcb82f7f8f362fc1c9808435d9ee340c06c746383991026ad61555e8759ebc12af5b7879a5dcbd2778e13ae441fd3132b909d0e563787341c4a97b0fa0ead999e49b50be9f50ad2b8edb7c7862f0031bb6a2e62fa093d77627b2dd77de0baee79bb24d39db268f6fd39ebe663c62d809852bb648e76335a57613618e1eb7a6d0e8d98f79eddbe36c2260c4e315f3c3c64a72f680cc84ec7c7f5ed0ad9638490ad2ec0ebb430adcf5de125d91959e16adfe0ddd08917293cf1272b0c6ec2590878766b3ae99a36228d4818c926cb5c55d1c7883fbc1d568412fdafd1c3edb6885aa2602a0d6391792e3da5955cc1a47414c8b0dbb42cb9f3fb75189a92b5c0aad5d1e0224eb892aa79a54f85bbbf7e572eb453f4ddcdd11c16f6af0eeb8e48bba419963eeda2b751159aa0e41222a8b239b475d8d055ad49773dff86df8366a1b39ebf6f0fb78acddd98dd909e0c5310b4fc2ed290b421bcf301cc8af2fbe0111da4e197fbfcb4ecb87907e4efac00146a8082c642841302feecfbdf03bc93f058d2e0d5f0caeffdbc5089132d7aef42a94a8c7c2076d01db0f5fee02999c97ebb8fec39d3e93cf038536271e659c028ddedb830855985612ea6edf8808384d381e4abf52a665842809c59a37d9f12c2092f9ac2420d95d76b4f5e0ae0dfb98530bed013c95fea9195781f4e4a7d31881b6f61463b82a8ee8ed220df25694ea5710998a67c73086f64cb4c4ea506cee135911db0d652ab505e464ada00ee1610c992141e834c1823faba83d3f179413428d7f7b034ba0e653448de8d4abb035ca1c441f4ef4aba2ccea6a3129bb62237fb6f4ff46e54b43989564f11fac2885121e574509668b23c614f84ff743c45d09b7b1481cb971e949c8271ae3d7b9203ce7d7a381a072e60e0a9fb02b96ad25445ee7b6436dce25ead9a93490fde736b2719d889681f1e890f31d5dbcf7e7419a610c79f7a8e5dcda8402d9fbb6c82819d1b2ca67291649a2eac83bd09694f4168e93c6de61da221dfb17db4312d37068454829f41ca32a783b790f68f901e953f88932b2f12211e3a6b1d18f93bbceeadca962d40847ed3c35b6f6b6085b8781f53d81680fc2b9a86c54b725013bff9760f3dbf4c46c8ae8c800c42d475de87f8780880f9ad81b4d10a5adf9e5ac9f15f0da0f081ce52edd44b1beb982e9d67d3625e14c8d313c001bd41960d51afb92c74cea640000ef8442483c12e5d36d269a0884f0395e082e247cf87622bc6289b3d8dbfb7d7b196b6b77f8fc11e16230aa942d6c781a2f5d865bb9baf586f9f69717939d4e0947793877612808f6dcc95ea54bcaa60b977c9e685ad7e2bc9c5d6c2f1ea95abf2ec1d50f07c7c4895c9c3043efa8c4b45bb7ffb2fa312f0638fc663699e6e873d36e89d3cedb145b29fe7494400519bdd3d5dbf703f9e617a9ed7e5a753057c021a2b79501967b008cf6b29acec81289627da6cda61c565af369f4b618b379a7c55f0532bc66942306cc615702b099ea118afd45b577ade671737237dc7a4c6bcfe230ffcb754b223553acda25195930044eac68562dde61743c882a3fd8cf390ee2525a5d5b33c9c605acff2deba892ef3aced5179058b8419301977c6b89f31f8408e3c4efe2e1daa8b3a310a738c994fb427e47ebde3c7934620584796f5515d41cc27d1052f292185ceca74bf3ef2c220aac87c2235e093a678b16435936666d701ffdb34547ff848893e3e51341824491a8dea52c017881b57ff47c0feaaf95c5b1d2ce3e6317a626f73fd48d2d42a1b85207eff3936cb2b838cb164a668de6a612f62470b86a75076b5d6abee5ca3ad070770afa458e60ca06d03e89f44c23940bc6ef4f2f40129fdacd4ddfda329f3fc4a62e42e46932b83dd54f1dafdec0a26175963c202ee77ab1d46ef1176920603eb397183208db807e7c932553b50de3b83d31c36f8258d620277c8218b687557a17589686ce0ad0c1a9f27f06448411fd564e9ab415aafe46f5cea89f024173d2806e145543addbe3253d33453c8ef0b02db5ea8d120e03ac9369814c5333bc64d120183c5f44607e57586f4252876d3ba81924768b1c9c543deb9468ae1688771383556788dafc7dfac5400c05d71906eb5534608f95f54b098edb5ee93d860cc82b9825fdf117f89ff33c96cf4f726b1992665d7d01cbf9bc5a9eba2f7e6ce486d2ced97588668382c3d69514ff7f325658aa8ea2eb8cca8606c7ae5092f8c2940e82d7b8d84875c4202f8862a98acfac48c1887b454a9f524d89161e0eadec2484c16463413367781030efa2799ae96a3ad71c0c4394197cbec0a0533b00af1af4149deb0860b90ef36fd4858c4473063302ee1dd3a68b6464d689b6708436e793278c844eb1c39456ca1f4d72068dc30c94d3e1519eaa404e582995f64937d6df605af84efca15e5cf4b0be57e59c5347aef6fdca3e13297727e57a12903eb73c109058be8c1b4c63adcae4555d2317b49968c8c36d862ae4a8722ac27c87d8923b7c538b3ee1289adf396b862dd4ed17d09a6b0d74756d107c4026eac0abecf5eeec239ff4008e1a5619f71b5c0b1ddf09cc0550f802520f5370a45bc0b6069a86a1d63e88360c9c73ddb3355145edb86659f7e2dcea5f6bdd95d3bff1103943354e2310b275bcfd0f212bb1708aad7be0fbe96bc0afad8fd5238272fb8081fb66f19daa0232a68f0c0655b8a213f90d08b0f80ef7d6e80badcdfe987b66ace996291e25c9d57790ae6b849a7279879327642f8bff3d2d1c4d8f6aca10dd812bf56fc6c33d17a815d7f47ba5f5a9b6ddfb4841228ca27c99f59d90b760ab3d64259fc387407b76fc2f8761e4b39b4bab19171b28a7c32faab312e57bd5f2fb1c32175721c3963b71b5a823058a344c65cd79264fd132eada93e64325de0cdb413ad342ff7e7af7e2062326ee9235b2c61fc35e0af93e4051721396961336a56c1bf855b432865cb1cc3161e640d54675cd51ff9fdb79d29a8abef4d693a8215d16d0c22dddc2566b62f9e24f616ed4655436181919ec82951129be000eaab557e61ecbf772928971506cb230517522cf790ee293d55e7c3a23a0038923657bbb272dce161ee3a43d88c9f9a3cb4d67ed96c39d426aea3ed729d42285ecc3b951e9260a74093c9c1460e9f73d85f69a5df2814d6dd7e2412d13e00d26257659776b10db4e7f48b8e6d2e830231a39b6f3cc3217e76acc9f636c470bf79bf53890a3164e20290f75bacc22ea78ea2e87b89842146a1b1f92939418f1d90c8c67d1ed63d0217891be45be254b75120d85f7b2a0534bf0c4b850f54d61183153a7277b20773c13e44b045ffde224f741434cfa0114214058225598bf643273b4f03c5ac3a3d12d7e0286ad666cdc99d87a862bed45684f4859b24178810a5c169386fd88a9cce432ed59fb9e00f017090de4fa435b9ebcf105944c90accb5590092600f54193c8c81091158fae12b1a5b219a90daa7e0b67184bcd225d07ef0de79e83c52732710522b0b397fb32fe55317f326f5b65c9126c029966f8c0c7a5e08b1fc03720bddf7758eeafec4d34660416f03b622abc0cbe38a63f4cfffdb05d4d5bca6b08c7d9b0a48641c157339ea1899084a9f64ea9a0ce41de068a79edc235dfdc51918648cdb2d5e7151d755cae452f1e0cbbfec0f4f90ce12d74faab57a43578da9924e01a5fee5935da8f47a22c22e56918641bf03345ca606b6141a6a81c9698e4448e3e8bee36f5846573f3a86b155da9f85a32c6ab80056a71df0bfc4c8283ed2accc40dd5689a0a1468f2d5ba06923d17b6413bd38fd8f4d73daf1812b7126a813df1e1347bcb9e67c80fe7fc8aead497f6a5c0dfbb124cb72b69ec78590174f1faa003732125987712dd9dafc3207552fa7885a2e8798954ae50e7fc76b33f9a0e443e02e8e9f6625fa2f2ebbf48b15995d9eb7c7a51a199ea68465cb5e7e75dfa4a4ac0ef79f501ac13a19a153a66d45a39ba877305b87b38b5e402f14ddfeab6af898708c4d15b5652ba69784a9b4523311774c31bd314d6010d86fbcf6993fc6fe8f01c4700faf43bf9f2cccaff364725a39c0d461ee13ded02979683184a15eb9cc0513c4cd1444c678be3e0a67bf93c59e37ef911b8a856cb4672fd4fd88646a5a2dc20b7734536dfd551d1abb0339f077d7e9db3d7660974ff3e9df06a2717d7bc99b91d9bb98779a9a0879f4e013241decde62f408efbf4eec25446069f78d1597d0757ad3bbc4d476a20f2ec5f069b7c4687e23574d8e03bdb8d3f811147fba06e04919cd9b61fed534854d00037dc6a54ff2d89e31bc942abb58724da95ab63e114e36a3fd4aecc72cf65370eae05d08d53327eff29c5994249a1ac597aa00c5cedfb7a5396bcd22bd6867a703a228c8e8e5d9c17c610216449bc2ba6d96de799451aba4a7b16098bd67b64a5528f91ed18da710873974c241cd0c35d96b9f3217ffcfd7baf645912424f4535588c993a966f281abee70d87308d32958a620a31f9cada52e75c35cf1857d49796271e8bb08aaae6647a2cf70fc77a6dd2af5f646ac4811edf3bb537a836cf9f5564518435389e12456cb59e662876b934da3a4888a897924ca3209831c0705b0c855c92d8cc28b50cf0be7a2ff86abd4d4c0746c15c0bae75a05b8fbf687128980339f24055152ad8a5192f57593740abcaf3fb85415f9dfa73c76e4039c01189685a9ce6d57f56204bee0554c6ae1599cb0e8f93c1a12f02504e0e6d17db9e9c5998fed13f006afc0e857fe02a9a758333c3dcb45c04b2c65bf7870107fc42d4725d1aaddcee1b4ce1917bbbfa5e0b9fe3d138d158204c20e673325d2ebbfbbecf93f85d942dffd6dfeaacad992807ac40835b89a4053f15c7222469e318aed626704fbcff870c337a82157e1f433d8e1291ceb96a2304f2bea425a57c9b901009815e617b4ab3f674b2ccb75c0d955d1b25850881ecccc34a53c7e56350e99a69f40026e9cfdd626d32bab6ddb0f35446a05fa9b8ed85a423f63732b36a45d63d183af3a379225d9ab01374e988e325a3175d5d4307f95d17dbbcba6a6b702666aaf9e3df57214d282433377542e115d61bb1343a58f7962df99dd7ae9fb843d4972a09a8846565678a906fbf09becbca3e15057a0c788ba615608dd4ee7f31ec2754e69bac4ce495b5176194f1b4a49dd9c23e2b30187ed8cfa20404d868496a3fc79ed0e037ce56c981f1cb0395c875e78e8d20cc91eeace5d8d41e6eee96afefe69acf95ef68a6e30ac92835faca1fe222634c5bcee100649c9961430b760c9879b659a5ba4a73ee3b7442e6eb6b82f246dc4fcbc37aec1fc7ee48891f5d9064f0efa862204ad1b1541a1d4e700415012346202cb84a2b0a584b697cacb724bf432219aedb0cd7b118f72aaf1941b3f81463ddd1f80c9dafbe7fef79bf8eef3530987ae1b1c03fe1193b5618f9fc24f4424cd39fbd035101a4f562b8c010e6fc5e239de526914e7ac5a9dcdcc6e0672276d572885e0d398d8ee7f69f7e3755b0bfddc9d773401e03aea3604c04add61cc70fd090b75ee3e27eb6399d6be9401e85a002936a2ae04c933327393e528dfcd912ac136df2b19c2d2ba4ee296216b1433d250f430964ff14e12d4190a8ac0d9e956077620cf814da4f1bc4c335f8dd303556aa7957fc1ed8ecefa1d81b199e247f747ab24dba1fd4793fc380b838ab6404df4be09bf45e94a174ba392d812c7c9621a6223b5d3dfccf92897004ce84f18af813bd72014021f9bd166a8b25a9cc1eb6704a7b34c6828c178d0a3c52f8c27428c161776c9365acdc6536c2d2529946c8fca6da8a174027f7a7cfc8c9e2f8109d1348e97670b327ab0b5e76031ab1bfe2881077ba887ed260d5d76cbbf7b0b907800841e9fad28c6895be612fa56747074d6ad987cc918dc2a3536972570b38e79fd8d0b63563adcfbaa05ed329979d46853aa638b797e1649308da29b156b8b7a7da168a29b3b63b8591d6f478ff346a2ace7924369e4776583aa2cee298e0e2a82d5e2d136647516ffaadc6856702c770416e41d9c5b970d31fb18d661bbb458143dd42670b7d8625a70ed1e722f4eebf4b4157cb883d632ee04e120c73a4235e928ec115bac76672b031a1d18f4f32aff42cdec1990de58c54f6b89524897407fbbf8dc3f6813e5dbf9c6a55ef48a2c3041ca6e4ba84cd22b73e25bc20672a118d61931a2847fd6b99d69dbf03e19252bbc29bc0228e890f2bc6fbf2fbbb65d711f34e38116cf1c1de658839bd5b5a8bde5d91d583b08384c14edf6e74ba69f1a921910d48ae46296d45fd8e7256710cc783c53a7772a208547910a2bd49a30490c119b4f0573267e7ffe7961e9a528ac114d7c362634f0d339ee56fd22a89aa92ce95b1a43713a5114adaf68b9ebbb782edc0e9691291669d434e4442a38c5912026456d29931aeb6c1f6cf0c003a22e86f8abd3ca77b8baed0900ef863d9b228a0caecb8d695ca6f7d0013de20f85d216b7405df2f309e2e5e35049822721456c782695ed378260c92ce6595cd8fde0a01c6c3e6c93c6df047e7a35c7480fa0043db2e4549d33545f8eaf21aedb58b0dd7aaf39dde743d6b32394a896e6732427ae0dfcc614f4d9345abbb0f718fb895c82dff763a84fbe04b3d88ff2f842021d57355f3aef55525d8a34b1d4769e095e060c648a640d01b7021121b69d6163ae59c884e7dd551d588c2392551d42659609c007c9e47094f4c207c3facff65b18454341145d7790a0e3d74c6a622ca2162431d0d7afb455250b8de308fba3ffe66bd0fac54faeee16ad563d88a61273375808c604913f6027c9ce04499890e5a89e5f8054dfdeac249aa6a7dbd4b79aedd74a9dd4ba4bdf25db0bc3d3c34db68f3f4004eab9cf74fb47829e73cbf991754a56cad50ef89bc00ca9311c9b2a3be213cdde10f145d8f9ff50d8444ce16dd5a9b0db5fcf9e53e62b89b46e87af22e7947d07b3ec76c433ed925ff9f26adb01cac51ad60e675ad48c92a2e600fdd9fe348afc3e2f7b80a8ef57f584e0e918cfe73367a5627c2a61d623c1debca5da568c004cc9a10f38ff7e58be7ccfe42b7a67e850836bc5ed74afeefd08832e94d61aaaaf89633ca757795466720c4424714fbda01f59e3c4d183edfedf23dd4b1ff1e8f9b065b086c66b0068507b7caf7323a580a12f950913292e22c0e3ff4e7d34e4aafb6c898968a140c011626b914021c796ec6150eab8cafa516354cb6150459cfafa94c0f6620c76d7c60bf616b6f5a662f0178696391976bc339bee1c6a65f06b7d50fc664604333459299a597095ca7a09fdfb25fc6181c6ceb87ef45c8343b0359dacc6b49b1bc536d9ed1b2f288b7a086c0b4f8933512855c1fe334e23152fcce8cb4e96cfe6b55d24c1fa15731dd8d48f9612d19a06ed2c84eeacd30639c579fdd09d9df3f5848fecd20c50959d4336419bcd31f242cb9537a871d4cd2ba740b07c4ef7b70f5354c43d64e0ece5d71ad58f22aac4f24c6cbbc79d463f86f732423afe27397a1b1efbd8babfae2d559d4e625d9c7a06741cb53b12e5e520e259ffb3afccc1ebc95739e1916bece289de1b77a79197427401510e99dadb9d9e586d4eb225d7486ad24ac33110f995f4e15a543daf1c3a7309aeeb06d2617bcbd4059926adfec4fb957131126b58b6b8441a1037bbd789159b39682a9f46590b8aaf45d71f231bc0391ab3be87ddf5cf1393b55b08dfb0772e5726c49c71f958a00d7b7dfd456fca9aa24fdde02b70852a2d5e1c6536629c26e8313b8f4e8ca5dd741cbbaf20931aeed2f928f45e867f4b1992825d9df418d5d9e5bc42ca0042cfcbbb5bf8806a2093645e5dffc7ab0028fee2ad81e7a2860033311fb7bcebd2ef61ecb806bd07b54c43918ca20c751bf31fcd091bbadb5c8bc6573cdab4cd062de4104749059d779ebf43e7a086ffd6e9c0f32143e977b4422108181fc7439590c9f19108bb6cb23da49453d5639e6c3290bbca13db73a9697734a41b51905376e6c90ee6951c63b1c3c1a46767fa0cf0e4027dcc5c6958a2a0e1f81839cc9ea519fb983f78bf7a2dab51880dbe4ba0b144a4d9a7afde58646c1a1c4102a7978dcab22d48687d49c6a2d162049a3f95649a18b7672efa527c638c4f2b27ee8c110bcc7d9dfedc6b60bb2e565ccaeb3ca60fb018ea4268cd939a4b200fd89fea4a255faddd37ee09a029adc469b3ee2cd99134cbb54eadc67821338d86aa72fb31717068caaa79c91d3adeda5329118352b92871bd37d1cbad00dfe137bc85fc6a46fbb1592f01e2c5e60bedac594d907f6f2a47c3f8cd56287c1c3fce4d3214e4bbd90b453f575051430ddf35b70632378eae8be0a64737c335e725fc4468332c8c5fb27928ae4ec56948626c2e92345a620c34e5c1e9ecb3249fa83347a915ce8791cb67dedc3e9f1fa688d06e42a19db2727bb26c470497179d6a0e87f28aa2bedf7de40ad231b56711ec481186ede7bbc0178f928fe56571e2a4f890e8743696c3ded06d3d82a0812198b2451f8c298a1e8d41273e8bedaf0681fd5b4e81bae8e1c99dad9a8d982627ea457e3179807c93c0b16414b441d7b1990148899814dafeb63d668367e54d402b2cde9aad38d77c1a2acac4f9f90ddcc051a0f6e7baeb21fd05a5be86d71ea57f6cae538f1acc043bee3bb06ba0fa4efe6df2e28fd48d5c1e14ae0d7d27c6dbb0d322f9b3b2baf733f379b56f99b13ed52f043c3d19361e781ff095109d01700add46aa370f29bfc02c4551d5d150e77614b80cff4e1ee5ae530a4b39bf24e9e0ef0bc145f9492e43e98116f3a869f03fdc32564406778a4345a4d1eb40352651206824832d21a0b043c643397206cff792a3cf763d7ae69b9f894443365c1d2f4c53707f3f0d1d6558f896e2d808f2d2a048dd63957cc392b9b33fed06e65e96fb7ec02dc76a43fb55a412680a1d4cdc559797f58ee19c56e2d8a72af51ee0af88eea69a974da98b6a577e2a3f040185b6642dabb946b45635e88fce0ad8127565b73b2060ed565e2b36d6949389a8b964017983cdad37b2cc95f5297e91f4e0ab0a487183af56064c4ed35f18b73b6b1ce005214d70e54977021bd51d0fae7a0bf602ea206746d2f6814e43037605a0b6b7b2a6025abf40ad2deb5e25cf786e9509a50ad8aeadebbc4107d1abcc8babeeb09aeb0b19349a68d775e96a72f5697138d9e625c292fa88dffcfcc6f33545c44d6052e461ff056b8b16f229fd16d80d0cd99e1a940b8d6d2b9144e02edd62a0b27ef67ed04ca167a939bea884b27f0544ee5c00fa1227e3f198712d9e3be5d6d0ec285915de0b50c9f0c880ec218288f385ceab586890d6b629ab347cda009838c8e2f4f5c5375035288ecbf01790d6734ffff322f138d4498901178f58c5b348d3ebfc9603982102747a7b8db7f0f870e0583077d865f20282adcd93958ddce3dc6f354e9e55a416495ca488c0b9773bc7239bc558d39ed715d2c0a128fd236507810e5f75b62ad6a4a1d8529bfac28b5d14aa1c294d952e60014726b322386fc286b7a2e7af3009f1f038f052c58074a6bf595c70b71fbfcb1fa57c89322d544311dfe960700e358235dc9783ab2fdf23a42d3defbbe562530d8dd5aea681bec3620d8a3db45966ae44a5cc3d9b484f4ca75fc69c66d7c526526c56ed6caab1559c0aa6f6c9ae5b762e46673bf18ad1df1f891db790123ef960b4c04cde37de90551455babb746daf1db4feca5c2c503555294284ad61383a68c62bf06c3f13a3f1b9bfb793f821de6a64cee2c5ffffce7cd4aa23f0b5e02c2484c0b556c1b0c8fee7bdef3f3290fbed9ec67db23fc29a9fac95d91430e588411cb237d86c37ab8ba957c3e56a7e5a65f25ae24d928852617933b27b6eca9952c9f0442c183c2787b30793e9eec4d691127767b6fef339517046373ac78beeef8b1dc918e802d226f727e97bf0d34f0ca1434ece6207f683bb9c8769fbe68d22374d34deadaab3c978a7fd5f11eabfa6beb155fa87683030ae59080ff5adf86b784b37fe2640c8476c0b32a7064dba000022f9ca003fa9b390c245778889ce2349b8fd3ad7307a7ed7f1b6c794f7176269094356f6ca9b9c1382b710188bbc157c413714aa9995daa03f2cf13723f27276a5227d707c69aad5700dbe1d08fe273cf573ee5bbe0b8da6ed3aa97d035c7969f247572862f74c8091babbf9ce389fe908479f9ec872150f978a83ae29599d526fce9d7c226d5a21393265bee2692376c888e303dba98cd585b8b997a442e68b55f82ae71f23afed475847db655bd82dc2ce130d849cf65f8f5ea1642d0d04d63e6c3d947dbaf7306bbca372b412b2a92483c26a001d861afba2364e082987f924ca3be5145e87ab9a1750fdb7d9828734ff6037fa5efaf12c785fcac3ce166a94e9028599495ac53310c2f4b6cd727e943c4777652b1b7a869abd45241b15d4656662e484dffbee4c6c043d9236d4dcbe1e7b4b3927645a400c9ad1630b1180d46808cf7854915f7b59cd578f8e968095b19dbb9aa087ff74e48b3d44036f1619f170a44c34e5f2541af6c7bbcd6168871452fdbf07a786968909ebe836d30bae3dc5fc43eb89263334a4c7804ced5f96b02f9553e9ff7ad2b5ec47bfbecc76cf1ba91bd476ff5eba794116e83e63b40006a302de6ffab9951f7980f4f53cd8af7d581534c5799985299a306652aac91eb248ab9dd536f5890cae1392fd7ab9b9520e5dc2a2b1fb33aa6820c4623a048cca04f1251e450c3a6f8d5a6313c071357f8501ef6832def06f541f641c9f97b5f6da852a163d1b538a79a6331bce5e7296bcf50f63240eb4dbd1c26c480a9fe2849e577c14f4a90d7ad8fccebe84c4f9afb0e93f3cf05674a53cff76f807040942655653ff695bfd004f8f9cdcb3d671d519603b4d97be3c48a1fbf5e9f7cc45f109056f3efd811e3b47a4c6c68d331920b808517a4509a1745a29e25ca85e8d18c2ab9338e620deac524a98bf091c56394320f6b4cc252a0f68d897fa28a9db067fbff5d93389b6bf48d8cbf664b2c3aa37eed9cd671137f2cdc00aa9e332ead461d646dcda96d1f4db2d0173ce41ba51c89fb15eb4ca16c31ee082bbe1aaebfd2d7ee406ebf63f403c4b003976c953ba9f4243b1fa90de7aa22ce99ccb17d71c72cb22e14fd0b24aedfe8ef0331c6fc633b20c29d554fce2f656f6ccec307bb48328d3138def0558649df8e98c74c576b98c9fc74a7fd745dd4c96ef557c992af7345277c9d5bccbaa2f7ad59b2f395ca493c3e21ff86e8e03f50a0d3862c6481e47bce0bae3d4612f06f816106835aa4cabb57f584fba56dd302e3f8af220b62d312b08083d33ca991b881352173bb81e1bfc91334bf6fd743a70bc58ebf481ca5a86ac917fe64a741be05abf9007728477cd355f074babc25b7e3ec4a8ca7909673f830ddde98731a32b997690f3a5901d0fe85bd2d8423a7967316291f3588d7c3b387c5d19be170716a92f5ac375767e08bba9e88060ed4adb4cb36f99ecfde456e4c34e07153a4ac55700a47032d9d881becff5753cbe9d1440557487e501ec34479f7fbb2b15adac5a5746f8be05ad089f702d87cfb3351037dae86c6fd40297b1cab9dfd3503d4f501703be383611a49c52b3af04b4d1eafcf4a3a8b3581692c7a79c098f8df060b083b909061269d2a93f59d83763cc4935d222dec40fc774a04120b70fb7d2671003964f8b72888391bd7e61640f91c65a1afb296ef071fb85d19e62ec3fdb9c9fe8e8f6ba701a7be37cd64c01c023c88c175f479498cb879ce04137ccba141ae5671201dd342742ea9447d98a4560a582e05e253fa5a93d5efa63de7c7909a254ba273fe6589699cdbaed82916c2d6b4d10b426099bd5fc107307e14303acdab6f0ddfae9b97e8cde0a7dd4344ea70c44fcd18e59661db8d65f487c8eea5902a1e1c67e783fde04bc1041715fef92a5cf38edf4cfcc782ea744549cf6a4cf1264764149928e7dc9ba450e806c2c0897f98b4ddf263e2e558e1edb0cee133c03214b70f6a90578cdedf08ad5bbf5e0b2c208d4c1c24e7f3c496e28a082fe81f251fc76ab1d3fbb0a358b43739c2b6cc1418cc49255d3aaedfe1ede17fa9f726bfd4de36c1ad0a8fb8fbfb50c4bd2ed121cd917570dc3a5fed2332e8d28ce175011b8f42698fe85d5cd3ee604f8476f7f9102d90533ba702934723108db1d0fa76ba0633ef01f21fc34f5eed4c6f0fb4e4071ae0167c4794b5cd7da2c4877e60cf9b69538dad60e29a1ee483951d6525607ffd7bbc70c5231456e3499541162beba45ca6bb4f719fffe0796b33e60ff6b2d138466aac9f770b652ade5e1568939442047e69533e9423c51f80686f5c9a9d6a0896d8a123609df31b2be8cf19f687c8fe0a16e40cd552d65d48be087f6958cbd1985d23bbc68299e6560850d68843d2135d03a18dbf6889c423db103f6b14dfcbc8bd882bddf356c4ed12eb92c7d706ae4a209def169a545b403e5f6182e94ad267ccfd75f24083718cae525e0efeec79aeda6aff53f10a7dcd1c1f44c0c18c19ad3fc8031c28410cd070103b0e4fac8d860e624eb3d27b85e20f9784a869501610354a356a073d2877dcb4e17f2bbe46fed6cb947ab098a50f7196bf11f973700d5614d2f1439b8f664e999e63f60ffa77d46d3db9c82c2fc645fbf14e14ac472e0824ee2511bd5643a40a5ca3eb5834b7fac532c416f8e6e60dd21a2c233e47ed37859a316aac58aa0ddfb3a1d3ee4863e48f73f423c5490ec2e62d29883e5aec30aa13b2636413306bf58af4edde7f6f949ebabbaca38d3e911d68449aed8d374d37dda857f98bb4a1bccc7a02b5548a36a43e1f8ce3c0778925efdbf5b96ff140507ac6f8053d5bcb007ff9776077ffa30a995258ef86c32d29e04ce27b2ae70f8ea53a74250ae88eb715aa11c01bc5d437c82ad4765f2847775e661ac5a32ceff9e58cc443b370daef6ef89ffc779c7d9f7477be2c42c520a32bb788a236cf9a76578c1c83bc2effa79331bd6c2e6a57c1a077309ceb1936665579285a2fa22d69a1e1357d3030d56c2d822a6d7ec65de17295a36758d02c9b45cd56b16555eaa313a77ba44d426b19b3d99390a39e86532a832a193feabe363c3457b91ae2bdeb4fc82db7c9c0556f9a24c7ce4d2133b76eac96f17b009357c1cffe528bb82d66dbbbf192f2277f9a7aa83614dcc002113e57c1fd560f410ff0bddbf0ad871dcd0fd3fd861e6578936f3f7578cc6fa608910300caad302eee8cfb85c594e18f050eeacbf64775a49531a4e04f4d212b967e65132302f93a8b8f3f927577fdf0c10d8fe7919ae28a1264e1ede6dc742b4c087e30e1d01885f41e720da06d64a68fa69527f697926ada45e3a84800c2cad6001ea8daca153840c0cc4fce67c9467944cc547ab191ddcfe2ebf7648af2f72c6d85dcfabb89c3021715a989df781f6fc6ef410084154565a03fecaf25af1403df50ebf2ae43291237e43b90ad2f6a31b5604a7e6a7e499fb5e1c04661d04f0ea4324417b3bd4bb4de355cf0b38b5242b2345b2a48dd7b5b5e26a56d74f9de533daf01eddf7a532299689c4b5260c249aa5935213e353d97b2f394fc19f97b28dba7b121e20bd05d7e0ae0067852a400b82da22dbb8ce52299879e455e7c6b482dbe0d39bab2bfd3a3b7a4a13f985dbf5b911c31840bb16d6f68143ec4efc14a19854fdb984a300f3e4886c5f1245cc823179850ee3fba223de9a7f836d53a885343b694513f51827fe639cc71244feb85997bced8867011eab1287797dd52a13b4f205373557960f8453ca1b82aadc3293f1293969da1bce09a7b54584a25f31d40bb3df2bc57bb5e14f850e5f2a61f30bfef16624bba3fe6aa1a832c9ca40da8f01d62c070ea3a7ebf02cf54cad6d1dedd9aa4e195cb34316b5a5ea78cb1a4aab1bec2bce6f4cc9ed2ea8d9bfad0d8047e1f19ee53bdf072404ca03934a3f7d61e88243d529ad6e54a729cfd0d4f747c32fb4606edf75c9b215877ba34cb3034cef65c90c5569cbffdb9d9cd36c207e3a92f88202a2e73a5f3660a0480d0ccdc4faea31493d8ad9112de3cfd9b7690d973c762cfb4e216f7e4d4058da499623c098ded16f8f625d849f36a65944cc30f9771f339be4511d8126163e4c8672af13e72a8f9ef183b1345361762f28912c4de60637221a21af89c63a070b89fb69c3ec045dcfa50300bdcc1e2d84e44011acca1c9159ba39d2e54a5fbc69fe5990bcb86c5e2b0b1ae86c77460b81efdaed309c42f31e01cc3f25a25458d702e677c30a0654654330bb87b92d617a28bc7de38514c7ec1ae8466336228390cf2de948827a658b5114dd35523ffa19fa045964d7c3fb9ec42da8cb57caad41df58a3044de0ff8b6f2916255739b7a13ec7716ca7b9c1eff40614ab0dee55dfc7a753321ef63859e7900a9164d2b6032ee73eeb5bc32803f3bed5df6880afa333f049dc44105f974d8db5fe8a5b0b71fce60a71e3ca704e91628045c3fdbfa3b46bdd0d08241dd2851f8f478b571101c07b9c808fba9ab0ea86622c63ab61b135b3de721ae2f09b9e1001ea3c80ca9025277f69c4569c580509c56e22a9c35fbea41e0e015d269557e32ee65b701a686c2d705320b9d47d0c905a3cf79fa4fdaf37d373c00916bcbcc52bc81d378b450c6f8dbfe70b5585896a99101624e887db3655eea5d26e630c9bf697dff6158f941bf4aa7ff90ea78d95b2a0c4060430c3fd87b724e03ad73ff4052b2a7336038d68ec3c79bfd05372cf0535ac18e49e35e9df5ad2206ea74aec1c64837223575d9579601b291da065c3b53a4bc25dfcd904a21d584b4bb9800de5a10052880d06ea9a98eaf07ea0a6a14266068b36bb67b80de0ee445d4b8e74437af45ad92ce5f395de9aa101ba7d6535b3d71f79c2402b3ca9f48b8c00999ff29ab36c41ab613e1503dae133a09b0a83226042a4341ce53e55b8086eb0f387d228ee88d48c5e71d9519e4daffec6b334b45f90d550cf418db11a111d91d9ecc7bc90961effb2090f89df1a953c75a4ef619e117049679386074b7a75782c3811f67dacf10c8a052b73a00c7c64edd1a4da4e12e82d060fd5f2cd26bfb7d1cba95579902849463c2044f7a3164b3373518226f1f7c19b9028ced14433fc1edcecd081cf945ab9e084233820a4fb3892b69fc33c3659b935e8dafb6eb501ef059cbe81df804427abf593cb62a9fe1d3e95fcba31b5ebb0de5c432b5e3eeb8690627cae95f2a136c45ed828c016a3300d9a2779e8d071f6ccbd7a45b4a34ffb0c58feee0be57645ae34d5031ddcfa7a4cbe985edf0b84e7dbe7dd9f09c52886aeb231334b1673fd7a71abfe7b6fba9761fe66f66397394a63a2a056e77c756130dc77420609e31c1d858fa1f550ff489ee2f4510f78ee2b2cc57839c8dd656e3e75e6e1ce3bf75f8222972443c913a8db1793e24d4ddd4bb50a101d5b8c23dadfa7e12c05207842fa8c85ac9bd045e38747b95a037d99aef0e676c9af046370b41f8cf5007aafdeb83b0592a644c7c42f52df4f067690e0031501dae1a02e6f89ede65da9ad5c7de5f8fa5ef816314473b18f794bc0e1bccb05ddd41cf322b20f84191c80a0c2c1d062523bea384a139786eaf32b16bcc61edc084c7b8416b3026fc1d41a8dde52f61eab34a1906a3f1475814b2dbaa4ea05b6e7f490d751e07eb2271e0c653703a7bc7a3bdb7246e8f1140b4d7ce814ee839a2c4d53a04bfdbf99078fcc5810a8123066cd7b0917bea524b736408c0e5bdaebcbc9b51a9ded23a517e83475973d25067034879a57aaae5194e00245938bfaade93440cee2bcec18dd0305fc25e3bd3d54b9dbf068d1f38a5e22c26945170362c031a6ed698ea471bbe643925e3104f1f1e272ac6c0a41ff58911863f38ff8c24ab2cbf724d4a85b37e82eb785167d01e7bf2c315b2092272ce33ae125160af15a69c2d1df9cc657a05ae5c0f403cf4c327e19d9027ee592e3a5b4eab15d2c8c8ba7afc95b4633dd573d572db01832403ad38cf80320dcd02e7e8dbb307ffed25b05779a1eee5a25168f6dfdbcf39632d018cff068083b63630a376f6a2e1e5bcfb09833a9cbd6e4b462ca14762f32592300132826ef604f46d727f38a7ee2da1d8dd0266070527bda258ba07da8ac51432cc3d6f3b4c859438bf2146087c03cf6930391ea7ca29d6f07a3b695d04ad790e8fc5007022dc399b450a20aa6808fada962b200a0725a929d3d613a202a6221daa5081c77ff319866cdb5077cb06f838ab972b356800c4fc33463f5b8d622bdc384d63fab05aed0c2c1c08b67b02a043126dd386637abd7564ec1d6235980afbad2054d1c383d70a5eae209b6ab9bda3f95e51494288d5abf64c87557f9b2e5784a3bc6e155666dce4c714eeea2b833d42519aafc519a54ba3230d4b47e6831fe4b59563a6480557fe41c6376c07b58ed1e3bb6bda0a8b6e50fd1f3ceb07e34f12417844f9677639918678da08081f35d53a90e92da3346e9a6eb8a448eecf380e3c40d175e00ae83ca128abdf19f762b24364e68070288eb497195d2c7fab9342aa7be89e7c7ddd91b703e66a8cc8670a235f01dee18764d8e7ca2bd616fc58c402a1f1b3b446e6d54a44222aefad30dbb2c7101bdec0cf9a2a85ee213189366bc63c850a5ac03c25ba93f2127c64388ddfc4499fedc1027d95162b40ec7f5f4b0702b73aa2db362a8f1df9593fec226ad5a0439963076f73e3f17fe4dd72034748ce014ed40d440fa731d6366bf3450010040c4a813ce4f920b1d4a770d2df1d8d8beaea12d568934eb85ae3f8b0048ad2d865ecc9dffd76a489d1114b900e59de9e5ae4ccbae559a20745fe8b5cc37702b389eb86ae64ccccf6300c40bb7559dce483bb7441c66e10fb7168c65ab6f02194a5fdc552e756eb4111fdf6071ac39db82a408956e984d1d5200d1c3d463036b3e5f8bafebcb320157aa15f6e04d332d48bad44f03a4252c67bc347303b72d0cc8260ebc2596dcbfd139a7a376345eff234b935b84842ebd464d5e604291e8bbd3b239e970127997bf4563b62204a527cfb1771057565d90b908994c8359aef601c7fc10380a6f548aca2d0e5f6d89ef7144bf8b36fc35725d3b155cf5847ad835aaa83218adc73596df5ef1341799f67e31ddc3eabfa45a694bc9a8ac7642acb3de6936224c7d737fb9b77c2d78d4f1884ec02df56a4836c562a2cd997a36f22e89d6f457033f010ba15aef71f84bbef120094c9d63a7527b6e541d651fe2990b91faa1296cc304071013eb89398134d5395c050938084881f778d9ec1f35ec515f9bbdfb07f35efa7e9d8ca0dc7e28afd6ba2dc3cde39469d32dd477fa37859cfd99de6bd3b154954b482a5ece53fdaf7738dc699c05570dc68334d40015e176f59e18e6705ff0d7a4a3b439a596b744d3dac996edac359226788e386b87d3f6ed44c66e3becd3d64440e4243eb76583b3bed0134a1522d87ab4f659985e1181521da47d95d7ec2c9892c5b2df9a278765daabbdcbfbddd5746af1bc43959c07b2571adf87f79538911ed1d9569be5cbc8016a96f62056bc1baf472a7826bcc9e23fa054b712827a6bc06862f10ff1e3ba380abfbe12dac2bb0e7752c504015b32155cfa7be7983972188345259ed61c7664a158f4ba7cc381623333cdb9b1c360533ca7e1e383922045d46accab374c6da5b2429c981b19d8e70739b76dacaa52829a8a69b6558a1f5b65e8cfba8f518f0c68a77bc76bccf0d78c21098f680d1ee098638e0004606d454f47f38bc7103e520a948efaab6f5e9a4b8499698653c9d48462ec9db7a92a91e0e1c800f3e95637fabac79ea6cdda7f977ff336d72dc42fc56a1762b2aa0771c975155048276936db969e725676c209ddf93733cc2fb268109f988add3147b348fe97d24f3c36941f4403d305c58503080140f92bd69c252a9129dc4bb158eda6a3a716d7155286567a68ce64c3db61040f2580aeabc657e0382deffd7a869f4c45b57346c1e5cd44e57597bb01f2ad0dcebecf64eec1bdf156351ea1c77f10f0bd4c7c7b1f0f46096582392c3f6909656eeab543cb2ea7975e6b184606e27f39a365f8a2bdbc25ec3c606e412ad8af54f430363bbe1d7b0221d48d3c5c294e0bec0a2210d76768bbd2ffe0acbb532ed29e2ea72715c6cee9d38014c1e2254b779aaeb32c7f9fefae7032b370ebab81c7bb40c892e596939913a5c8bf7b9c83380f9379899734314ab0a9e2f2117bb7d0b82a2921987374f563fc777438ea7c432565c8fa543e2cfb0def1d07eab565fb330df6b78b98b5d6c13901d06eca03bcda4a4070d47ed78e3cd6ea81704ddf0484e5a6084fe82a6ef1083ec23f4fa8f0f3763d73c51592682f16af4274fdd9427e42fbad3c68f1967e961d5a5ff86ae1d18fd4c14b1e8d4a474b0a10451b281fefd1f794c505e03260bed7616fc9c62d135d5a7c300421c5da54d938d87925ea3d33cd5ae3b63b854017d42ca8d917c818d1f352356c94763e9e9c1d3207952aea1a566723990b8653c52e4b0d579c916f079f9cafcbb9f9ad72cfba7ed32522abee71051457107e8e88bc5e257addce103201c9176966fa022693c45a86bbfced76965f62641f5309b5b0c92e1ba9d4ba31bcad3194f62d08bc7645e17c3d2efb18598d1b298846ba8600c27b8b2823823e58206621e9f06cdbb2b0ee2873c728988548d7ae734e92969794b8fcee7b3ba52dea1f7efb6c19dd72dafe2ea82b4742f9669d9024b5f191e85bd50c3c2921370e6ec8c0876ab240f0e4aa36251965ce338c13f4306b327cc2e6fb16162b15e69170e016e488856546e7609c9eaf4bd30f427210e8f12aee3d5fb529818f34efb3d386bb7490d886241ea3bf3967ccb0674445eb604a3e04c89b57b167b895274bf33830b54f2d04845ae5b1db53e2987fae089765e6c35991b51ee4fb9c5af7a9a1a552e6943fa2c22e2068d10ef4fcf252830e12289d7c201e99222a18a846588fc5f55b27344bfffdf0d3c7a24168bfbf79d342b4612ac16a966d6f36fd70b19a6882123a95e50835e955bf342eda8c53ca77045321c3f076dee7a8f9a1c00c7601f37a62f763eed8dc1fda45905c826c622ead6e495a1207a2248ce7659914c24e70ed3c02721f6fdb35a2d68cdcbe255c4cda0425018fb587218cec5cd8703a40e51eeeb47aa53fbbec12d76d446c7309fac63ef4ca5e2aa92c2d5fc39073f4e63c2df07af9f7734a82e4b527361023d0e4d654fd2183b0926c52a75e509ad4061d90eba62e09d6e0b3a915d7dd164455eaff58fdb882f5df2a37af135c74a6eb31e0ef13a9d3e1b19317abed1b4c098f68115f82c4bd19ea3e2723dba349b4389a7c983107aba4513060cb46a7698b2a6eca1bac873ddef0c8e8271c673f7387f9cd1765516c30e531d59a7d4dbafd1216c2982656795080b5c349c1c24c62dcbacc34a3a41814f359516081368e26de40dde1049ceb56dd60a6148efd3cd7c44348240e99b979976a739c22a813bb5c60e7f322a2a24f9955cb6a9a88bb094d4cd00c511b5b0d23bd48662bf5d428f36accd8b6501404eaf6072e530f9842aafeefc0f92ad64842822ded8deb2330fa1157e4476b28e0425ace3d58c9e75e04190e03b94fb125ff6b67e183304fde19aa1584bf6741878f3717c38b4d6e69f5df0f87604edb8ade7049343f0b3d6023d48d1068d682dfa1e6aed3b24c3ffd8e1ea3b7ca85054f70f5062b79efc6eb9f60cc187890c116c2ddab95989225e8aadc873e971e3a65e5f41b45215f81ced01df8b6e6ba3c753b79d472944126e7f17570533d73bdfbd320f80f5b0022c3b84ffe0ab86dba380864e1e666cf567ba23c37d3458406267aa310e986240a0ce229c55e3b0cc4461994e0e1072b7cc7bc341b5159f20559c98fa3f7ade5f2a081bef72583cb2db47733e220a8cbc92296254fbd968c3ea33bc4300a63664530359c0c8e2ce83586f8fb154cf8b3f8732c38cb3474e5801a00296ca2941e48ae7f2552d537d920235c27fb56162671276cd24c04a75285969648fc1e89fdc70711690eb88889e2aa2a2d2125fccb8c33e0656ac6764aebd48760e1c0ba229faaefc98553f7f2d97d21667b2489ef5e6406720361562a82fa07f22540ea4bba1687da9096f4387392d06dc178121a9cfc73d2ff8ea6150f19ab89f3e65a68aed69646d210012d844365d11291df9cff45938cb7720f22b12558d021745ad9010813f242c42212c5d52167de247bde11610fc339ffaf7c7ea159cf26ef24d8926d4d4529b618b55472cfa430a72229fb896ad8381e4a5e5584bb7433c49e19ef27411ba4c7e5c23b672c636735ec39743101fba4686fe0690f30dc199ca5cf7ba79ff2da409c6c3ec91f8c7cb16b2bd5c5a5f3b60f1311e935fbb0cf2a91764975f17da7d76a39d7ca4032459bb3be81aa039de389c65b197d4f0e3d7c9f64a3aec1160dcf1b030e929f21b93a36468b53c064590ec3f165b2129c9e9b9703407c189e5128446c3312c0ac5eb4a689aa5ebd9386c772bc758320567dabab0e050feff15f01edba7525db1a29e0240df7c39fefc19e62453b89512f68f0174dc51021dd429c75c0e15aa3cd4c05d6b54f214890f753c70f444ff741027a9a94ef0db10357058c23d2fb59f9266dc5aede7fdc923665c21f553e01ccbd8793161cedeb29f93391f613f6835f94f7e8b42a0fd0f7cabfc0a60de540edd1d4842e8723a22e203d4445b3a1a4586e6993fa90e11550f256c893770677a8a7f53db32a2ce89b18f56e1448574c4a31595cc824c63256724d35e68c787a53234f83d12ae247034d4da0a56ea073a00c75fda6f611e4718456e3e7dafc98d9be2c6e8a83a01e1cf9ea26ebad22a34d658fd9ff783bf4dca656cbe07be7d98c3f4168fed07824222b89cdf1a9fdb18a54769bdd76b439af3fde5320e1db3f7f7897051d026b6498d40442158406072c3216c8cf85966de9f74f36692fb48066456d4a63da4ecfd156fdd4c66b7aba167113431e612431fa3c111cb19dbc0073a58c4d3358c6602396910cf711eaddb86457e9f41d8d08b1675608ef4582ef175370d6c5c7aa875eca672c67a48b17d94bb79fb1e7ea9a81ae17caf684e58d3002f00f0cf2168c23968e7254f01242eebc897f94676534385d53cf394ed606da7c3fd25fc1f0dc4b1c65bfcc39561238f0e338af86c4280044fe474a17a517f47a17f9852b30543afb1205779c1e8342743a7ce475ff5db7303986af9d0e210f143d15329b025a3c10f5c5282c839d259a64e16ea23e30d69476305f275746be16101cd574a5a57416e815e904be2bb839aa5602dc8ab42996c28ec3bad22cab795e62062354437ca7bf105c0e20df4358086ee31fbceb5e896da0e46d44c6b874c867d48c4288efd42941151bc0b5cedba763ce9d639a7c2d79ced87821bd7f08f6f5c0cf24eea9ac28bef09f0638d4e2ad63a5690a505578c29d5b9c465b5232ccb892724b276f7664f3c5b441209d3e279cf7b2606b4a642da7059bb9d4daffb0492cc7dafe7204d9da914ffadedce0d40d628192a1ea031940d1a408ac74f1f7d827474b9758422761200c2c2e8d93af85f8788511fa6c19657fe5c3fefee3b95b6da52bd75b52a400f42b8d5f1cf45bb10dfb64250921975d69c61bc104f883f3d77884c4a5dad9eb9786423826d58db6913236a427a505e1f63b1dffbb69ae08d7306f7597281ba366eed6b6b33ce3c695a8c4385307062a8e682e493176b68fe65d05aa92baf02810cdb803310244e3e342d87e20c8756ccf8bac1de5a07009e2f53362372b72aa5234a1a489e36cfe5588790862e09ac4e4d2933470d7305f8624e38ff68522922d8c66af5e39517ab0f3cdfe051450fcfebd6cda8cac0ebde19a6bca9ee895bae10b36f446c8e693249d4fed40e82dfad240b32b569f6ff9b8d830868103517f111bdbb16f56ce45f7793d2f7688fa2046c0f6fdd66126a56e87863c6d3eb797591eaf03e9f710f0af498e6f501489c5eee8e2cb56c38838b2ab1b27849f766b3c3ebdec7a0fe84dca37f4ffa6817700f6a873f1f49ef5e881b9fe0f387e8e911d9dafdd4dacff986f15ae31d6fcb8ae8e3e560196c603e6fbcffe0d4bb1358a54acd1c54a10dae71633b4ed85540d25903e5316423dc5dfb829eadacaaab29c3fc1b5098814f6994a5abf062b2f729e38de5b44f9685657e8000ae1c70d4fdba59f5202830804dcbee3bced6b640cb8ea84aa5f81601ee59f589bf3ed030ceca6da8bbfad2fca01e0083846801e8c881c663a9f35a4f62b084e34b29bd34a19c0cec773b5520627d7868c58a4329bc2dbc3f679863bd2a48bc3a3bd805318927288bba87fedfcfd693d0c20c45dae477adb0269f084999b3d04d31de70765d1ecd74b2c32a251ae6cb9dc9d8cc413e54f48bf3c4aedafe627d2975d12561252ba71da8ee5ca676a5d51502a1921da0c0edb1c3982649beb3b9e604351d828756ef507f52fd92544d87abeb472c05581a3f3cdcacb136037b2fd5167f47822afb1480ab4c17ffbe65822c956b7d8f2529577ce80ec22184d7dfe18eca334f2e0270450efc081dbc2b7a0e1b20fd6b16ade0844d830b5d0c92ca469ec564076b37ba58ad3a1f41a595334a10f10ceed1096b4a583a408f588fde0f7313c2d00a1385f212da820102007b5de8acfc54bd4f621dc2db18e4edaed9a4e83aa09b5a26af5f5d195f1dd7cb44a4678312041a581b4f65a2de713ec5a68d35553a687f7a8aa394b478ebe842895042ef7eab874f9a99f471d58aef71db8040f4775badcf5b622336b2201dcfd0f7f83a85a9c86a708197f0f0dcb921c5fd7ff497230ddadf9d952f3317ec71d5a9f984d6dc1b3357ac02a518d7ef4451527f5559e3963b0fbcbc2566de61ded6ff209629c2dd99d3ae1ff5d7aeda663ce07464c3455ead669d4a7f67ded0701cd017eea69c4bb8a8b65fe557d0bc992782204335445c5d4c599ba32b9622d70f98b8e624fd238f87097a139a08e71c3843e8b157e035e6ddd122ed09df6dc54c258b39bd0b3c541833aa4c2fa38d3f63112066f4c564c7954867ac63684180d7b0b75eb3a1a678e2baec6989f3f3c8a8d8e836249856529f3f8a2030e959e1d4d17f2d4df554a279bb6135b8448e4713cb8d842bc48f9cc7b69d25d0b465d6e946ed6222fb751f74a0fbc356a33555135a5e448706d29a653072c39c081857509e10a250a24e4d98cee4a08da22840329e74e0b96ac476e54ccee0bb5a4e647cb49c7ce78202cfa2ee72ef43c5bd2f6f2b26f0354f391f45e82de7cf5d5c48a3d4d188b2aa9f24e2d7d7f278bf8f955403f30f86141b5efbc12ab0b0ae8cf583097e3b06fd54c7b1a55000355dc1fbf38ad183c14560d6907c36cc390dd391411f5400d8524dd1d4ce2fe39285cde5380f326cf55e4f075dfe42aee935aad0f99ef65c5fd66344de328991e7a784f09c0fd3b8a893f2e984d6c5d4b8333a09749d989bfdc2077d29b6d7ab36af99d2cb38f7558f3a2918ae505116d78fa7b7c266aa0950ca731773c50e2ca909dce3036092207666ba871fd806d5922649c8cf1695619b4b9cdc1c58b229e865f4d6e084766df979349c83931db5a0fe4640b30f1ef0c79efa96c672fb1ade8b14fd3eefc13d6d4363b6b7c36b0aa381d17cc9f9ca5cb73a7c5d079c3ee5ca3495e54025472d242d741596838b4505dada4e98c111db0c2a9889074fa340ad26f709d29207524d4c3dc7c534acd9ff1799968d496613c2c50accd1853572e6923634720579b24365b2679ba9d205101c146b046db797c094bfecf34634638d68fdfcf3c9f5025435d409100b5197bb02e7de9801a46421e726b73f59c39923e23f91597283801b4e491931f702a5365fdddb289af148f2a996ce39424fc7ea936a5f7b4f9afd638d4f9e3a7d73bc41f13399ec551755f6269588dffd4400cb343beb8ebfea9a8f17125577f7d781cf6a59575f571bf768633669059d332f3d8ec8f62047374fffb71e004603ae0861382557bd507473bc2cf500114d8dfa8e80f3c4eb6d17cac49ca84a6605d57a916f9e9c6c610891cde46a07a4262663f9dce41ebedb1a108a53dfbd80b4ab381a4f9fc6d2eb287537c73dafc9c5003283aee0990751d6a3d04ea24091e0a3998b3d5da1d5332a9539664f60fc3c480f5517f5ec2036062accecd8d58573d3f86840c5f0912ea7b062383c836f2a732cb1cc27760a78676ee7fc77b1247f85e71639d2b9f224e2db2f6eb4637edc5a9f4b9bef1bec76b9077284e1d341fd86cd829e23d969e22efbab13a78a7dfdde8bfff7ea8629102c2de4d0455c9d28d72c1d1d3ef779cc1b35732cdb1ed5ce37a61804e261da0e329c702dab929b8477674563463fb218371f59640f606c3d64e03dfe5420bd284ce1789a6d70ac8ab007beb990b325831ed833f7c9cf1bb7132b6d957cf172665de5da53d2a01606da73d239c9bade94eb29bd4823357f2a6c35c35ec19262e2623fae26180df7e3cfc2990291b8d3b28d7a0fc25dc344b8c1ae1a528f563c71bbce31d54b3683c004eae2b87a4ab55d17d690a8d95359aa6350373e8e57ed626f7382b4b1e7ee9e16f60741e97f52fab2e7ab2034e20d20d8b1cf2589ce6422e6ffd15e4a408d455933dce94d847505ff7f821c99ea4371eaa4f90a1718de9b5d31ff044f7997e639ec0d3ebafea6c6ac2957aeaf442d4ec1371f3696682e51b14e45fbf697d824e116edb72fae58f4c3b8c2d6eace5c3fa2de131aa1c3a76398da359d4603321e964c9ed3fc2d3b5eba6003735a19d435709d77d67abeb79eeeac3ad98f2080d2eb28264a6a69707ea19e2666f22b821af6abf29e4d7204049054e223342cc0619ea57ebe3cf23fc39176d7febed03428d8f7956895555b029ff056a5cef211da0b195c19e1f8a163d147284d037a4651dcfb795cb8881d6558a5e887220b90f77b887f76bdc5e75e43259573bf40bed3e728ffb9f5a04681e9196fded010d6f397ca37b22cdde760fc0dabb649913cf3d1ee604e086b80a53072c4d33df83b602ce711a008958ea496df41514110309fb7450439f09cd4ad0b1299783b87b9719e2b47a62ff38c7b52dd1cd83dbecd7ff9846a6f00f8feb680214f7e647626690355c0211c75eb754e0f9ec3dab1f151203a339819782747024603f43757a425d6cc21919146ebbde5431106f0ba99ebc103e1f8378063a6c2f0ab4f5a4fbcdb5ef7f07d6b2339f3ca558cb02133d8a776e43b0ae8e281f4e6c0735f45e0d7abac15bde07a86e73af07415c40d0f506ba3ba38de3e59fef4ba4ce7eec867f861fdf564eea5d9a322b23eb3c5effb7f25d9554e1a345e3894a8d6341ab4c963f05ad74d23daac356310cde67587da2c69ac85b31c087b5f0fca3273d8d962bbed83e46618b07de278aae49f8bf673ff5950ba54256c7381a7909e6cf5826be53e3fd14262e9ce3e43a3121d427d9086d2c103d22fa28461ffb30d466fbb78f8a7df90840456683cc186fcc457ffb1918081574a5059ed72e3e43373a4c3b6509c95de738527e074eca31fd0ad40dfe268011613b84eac9f49c6d8593000eb2697d049e9f274fc747c4661bab64c310c61d57170508986847e861a6b12478dc9a66b6e5ebb98f841536b534a3479559eac4db59513b7f3e0b70ef26a7d634d5a6b5f78be2922c1a4a6f3a91cc1b1f87de9a8858e20f70c3c0d1a62016cbbcff292956c86593cf5e7457c5601d4cd9493cf1d71e80705af7925bf656e495e7fa42837821fb66a345628ef8b27b49c8ebcb42aaa8f1aa4b92e3e302b9e07a15c045ebe056ac12fdcbad5caa63f7babb37e2f93fedc5827931dccea9d8f1a1ed7a8e05bc7054b83ba9b80237ceaabd4b10f9456353fff441cb792da90b0499ad39a0d3aa6e26e0b581abe0e8dd45817b9f6371ed25c732ab905214a338de54875007577406cdbaf7f79d9aa8e81dcf0c92be76c87c6be2fb82746830b3e6834cd26c5efbab4d8a88c46399e58205e5f8c10118a828cac27bac553ef3eaf7724d5403722e898967e6c161771111b13bf4a5a657bfa5043ad7c64c5b2831846dc1819b6d0ae1cac9467dc78faa77b2868dbce68a3b4ba347f048e98bb46e6bd6421164253c13a1a714ab06586db25a6903e45fccfa77ab3c777146e48454495f1d8455e1c5e1c1b4ae6b19a33c9a401d094cea01b4520ae936b444937babdb27e867204c6c575aa975a3c55bd428fa8cee2589863e582dd6baa3d7548d8dd22d8c65c75a42b307233f5bbb624d7100e3846e3aa3706a5d99b6899a74331d1c0001491c05c9e9750cf91fb4bb6d06b8a5428e675c9f7bbcf33fbd03acb47ac7dad0a7b0f0f7606f85047a1e47eeb63ac7fcf5201d6cc285e2addb956e44cd1c337306b4cca4a0b7dfc20346103db627a069f77191dea405a9c24569be779b5d9b8e2bf8ff352c98e67f9a19e8901ed2a72c8c6014efcf5500697ffacf11e523a6bd7cabcca57cbeea80954cc1c7ba03ca01d5e47ab33ff1ddd198d0351c0f1e131dfbfd1831e85af74fa2e1bc2f9023e75133591097d2c0f8dccfa9133944fb82caf41407f6d1d7688b43a736a384d5fab1ae8cd201811ee48dd4dbf2ab2f97944a1d46fd431bf1f5c2552bfe0055cb7f56336bbb4398fc3024d559fadc35f0d19a6219f351f4f0b1ada70809b927f3c7aa38d77c672d49a7b0f8e862cffb97064d841aa8d58ac6c3864b66dbc4ecc560259ac03adbe21d5c14981d96d2005dcd4dbe539a3c737d5b74307b1e6dd9de7226bffe43a9228902bcc427c173a9eb5d37a024874cee79d539d90cd1bddb61927176a88526671cbd94a56861bbd1d2ba82eda3e89d2f61b94031a664ca0e6e81bdb6b4023f82b2c6cb4bb98a196bec3270e4c8140f64f5267ea2b457c2637bcf415629f8ad343223fc820549b6fa4f589457f93ad34d0500490d85038ba5bb3e662196ec6c214d1cdc537d5bac1294460e46651afcbf8b52de58becb3951b33911375d6eefa4492931edce1606f400ca942f1abcd19f087842170102d1a1df752bc1ea87b6fa33e925f56534ba3a128231759c1ca6e7ea343d7c02ff60df7b00cf0709c30a9151fcd6f6d4f9d5947691099f8eadb9492beecd3e77119a369f02ac5e36acf21e256ac906255e2907f14cb35f833af121c54c89e997ea8e5468551bc756c0af205c3defe2bce99fe2a42f4f110dcf5ccb05c2d1f9e8e70cd3ad381fc16c601dd8498a784547e6acb2912a0c5054875a4ec933689700dd678af8c1cfa7ff10e059d9c9137701cd7a15456014df8922bde1e01dc15d4fae7b75ff3ed2b74a09c82c65c96d6b3f22103052e22bdb18dd1213a4112fa2e8a43e691c417f17c88a2ba011e972a654554010795f48cf117ad4d174bbf5fe65aa1e847f760cbff26cfb272b163f8a0d27a5b0a0b9b3239ed565caba234c5869e9cc0878db71333640764a829ffdcdbbcdfdc131c69433530404ef00f97f46fcce037eceda85bef4793942072a9f2d4ac30bfad10e3832577d777fba16c25217630173829e615b82bbe7aae45526dfaadeb14e22f7d57b1204d88716c852de61d4399344d7b5e3de37774051bc8ac595f72e716850ac87d97466a612eea15becd99a13777ca7dd46bfba701ee6872b29ccf6865a56dc245075ef7992bac655e389b2d85fffef9009b9a926558422c6beef0f13c291f80667e1d2b48c3a6f050ca5aac03664c76587b86acf92f1f1bddcf557804af307cf26ce8b8962043de6b61da80aaa9ed28b2f40e789deacf8f90375c2a84fa7040e8e5e36e4d2637d277241f45a72a19d606fbd6ce085047c0607e8163edb06b880a418d8abf6964af81d3baba70d189b38e7636a751a4f2f5bb2f47810dc508229725821a935ae9db36b68b8fa528428be15b4a515fb37d7ad4ce5fee6a9360d6033906a6708bf974303405c60f9d7cb4ba59829731dcb0f2a6ebb912bcf1a46e2a45edeff714378ae4af8bbcced13680a78db827aaf5dfa16c446892ca3bdcf0af34de468ebd8ea9bda4e11961956545c5ef73a51963d6a2eb9a4abfe9c6c0ac972d6860386fe1b5df2a3248f93a6775d0179f0ddfab512e71ca7ba638768ed77e4057a255dfe1f0f46dd290adf1ca6e27290055e983896ace3fe65073a3da11ed5dd520791a9498b221d28ef574f2a09552b8f070fa96dfdf871702a9972fdc99bcc4f5cba5e49ed602db8b6483a3c6a820aa045e62a504b24bf86c109bd2f0320dc19c90033fadb231bee321e4d345ccb1a8307a5b6c124403c79076bf3d9f9242948ee22105a80598702cdce55fecdc4a8df24c57c732a1222ea152d170ea7279516b14a9e8baee61c4d570e4838414951f3f9262149a99dc78770c045d3fdb3f8fba83f2bfaa6bb293926988df9aef9672a38cb852a16b6c9d230f0436a3c0a2ed2efe5bf1775303e39f8bd94045e29add1d882afaf104d31f62b8dbe9caeaafdba5b90d958377ff555ad32bda220b396c451ee9a729ebabaaf2278e00556df5733215fc264ff76eb5ae73ca6f1ebba1f44f877abc0f62c5b6a927c7920ad6e94e613f8acf16745214dff7659be16626a40075d5a9954692ac44c08a66af79e476e020daedd36aa9e341fd1dced06c0d4c95608427bcdcfb94d1fa1819a993fc4636261b147557856a1f17aa379a183cc2c61116532aebf9591444b8669469175550c7d1f6438d89d1e78d274ad7dd3bd2e1fd0d7356954b5226d1000831ac545e60e1cc3827a63d1864aa9f17cc955648228a49b7e71c19c93447c7fd89d48cffc3099fdd6b47e20ca290b07795af49303326c36af916897f85d1a6a97bec8d880c096648d237c5a8d3591f5d6cdf002d9b7188a6e62b8bcd9cdf0e3eee17a9ae2c65893c14dd786a37046ec31adb27b4f299d61dcfe88247a7cc5fadb0b17226d0fc009466926d6e135387de1de6cf19e8e19492d44963fe3559e8bbe139eac27f05e16a759cad11116feb813b91c5a3e0119ce854d3da64f9236f75511b41dc5b25dd4f1a6692632a718b45b6d0cb5628e1a87e3571f3c7cf2f2dc5017eb2c89c61ec42c6daa4d425327407b9a5bde2fd0dd1e482262c6772570e10e69806109dc1a03e1a6fefec15ee8dfbc01a1178802c154c82056c4cd6ea92d92119cbdcb6979e7b0aaed7afc7f67d4a4e9522f94365c5a0e7bfbb81004530b819fc2137aa4a4deb814f85f346ca8a7967f2fce74aa1a246a357cde4b8dfe84e5f629ce74fc4c7f4d80daecada06a05518d62cc065226182b87def035ed2cdb371eee783304b17c1c080e8cbf02c192495599e1f353afd0469917cc2e2179a09f6aa298fa7da083785120c8a9a8100259b86f737e719bb7787b5ea1d9d4f9968c4fd10df767d1e6cbc3be63b0bb37aa160682f769e2c4b212cefe194652e04032d0a1794618ed9e6bd776cdd82e23e2dc23166741f5ccfa1f651b5a65f794e4598a08b5025ff6ba14c7067b748b675a5903c8134dd9bb5fb639526095280c5b88ec8b6f73ada051adc36a58348f24740a83c1a41c2a4221fc29f9b1eeb100da3fbbef81aad86fde3527563e976ba08e5bc9e3286f606821329e37239f9f4b7e331c8a32586a28207477c0719bfedb6763ccb640048a5dd96a0e908cee94653961e3785964a92ce88983a5b2e0594e0f8bab4a2898554143e9d6f9e6f90043ef29603f6ac42ad49e31d37634774465229bbace3a3b43963bc5c7bfe8bad06310223c71e49eb7c856419f28314e2622d0929248c2d103640af6afe394eae51fe83591fb5d7d9aa52015f8ad3bc88439e1ad12b92419438114dccdbd5a26141090f9e3e8c9af2bc10726d3fde408770035819425807b140888cddea165cc7543c49c306fe6ecf1829c1095bcc2e07e6d664c522252a084e47fed785c0886cd2dd65b9a994913769ce3479971587378ab22c5964961dff62ea4c32b2d0dfb95a7b5be400a92e5229b0eb04521e4b303db11e5f83f5fde336cb317a0e0616dce32d9a3f19cf82dc1b918983b91b086dfb4bc553be55de4e33dd39f5c7ce155da86aa7ea8096878deb076dda7f9e11b6fb1e8d67cafc76afd93f93aa5e5f394d088955b5c57fc66ba129bbcca01d14fbce812ab3ee5f44c323f690ac21885350e156041e74449b1378dd0b821d444efcee80f981356ea7738961415026fe345da5cadecc80c83f986e481e1e46115218ee7e4129bbb59644e67afe21af8f9f288e546535f22e39818e7780e2ae43cc495af55c9942c67756f83576bb11c8766c8e6190fc35c339e1d57d7ccf90972e9ec1350b3895174d42f8bb9f0d78c68031ffbd4649587a1070d7a1074141870ac3b5af37d2eb1dea75f142de4f7d344c368c1b1c61a8779e77e171568a2e535c381a3cb4f95cef3402644b43e04734918859cde7d62f0606ddb0b32ba64db5fd7185d4a705cc940b0239d9de94ee3655cc4429bb2ac99288e2015f7ba23d5bf02ce7777696e86b9aa82f88ccaddec370c7490a05cdf17bcbb6991ecb3760a4a9baf6e928029aa3d8e17bfc8afdf26e86dcf9bec13a5a5ba24ffb343c97a89f3f8581b3e197c5b92a93c14eb2848b49b6b1c7279bb2436f46b94f58b39376fbbeecc44024f180e4c789c9e551b65f2802738ddcad5feed5f2d4ddf625097123267ecec2b3899855bfd167b0597cfb08341c490c816ee5dd12712955d736f6a99f52ad5c859acebdbd04fac567244aee72216300a7c62af306c8228f81beb280c08579e6af187d16eefbb641698686973e05d515a5c3956ef9650a3f2fd0f1fb724fc6a8501390355d370ac8fd406c6e08c974aab4b2643f385788142bd284e955ef65542d7937098376cd0c2f54c119623d57780ae9c9d402615a08b47c58bb60b0b677e2add69b15e4462780f56cb5bca6e11e000296250c46c055eb15243c9d1a319344d1963c31d10ed7a449a540c0c29ae82a72183a3afc600266ac2b1cebe73d7786cf2638caedcc0fc172c08ccc323e2b593cc142816a643216545015c8f7f3c17f0c5e6c1c9e07839e86470cf231d3d5d9892c6d3269710dd549166d722fd40924d5b6e8c714716c42794494337af16b3755da3993753bc4404d9d32b7bc448cf0f3173bbb8772dddf5e3f1bc4d6dbc87226af2136116e59a32468cf930d68d2b911ce9850faa6a74a676ae7660f2062d3ad5cf7ceb8a990ff043c1bc7afdfa6561163b4cc5a47226ac548dfd593a398396f3baae0c05fdb9032bdcb16af55abfd2bbe77d8d028a34d451a5b767c03f2ecfa912bb0b2191b31594358a0fd58916108b4b0cc6b49239d2119ac0f289e54a479ebce9c7bc2a5ddbd16a98b45c4c066948bca40b4a08add5371f4087d4ac28ff605f4e7016918c02e0216523046b26e5f5fa9f2382b2fa371942c4dd337943612cab95f1f6fe3aea044b5f622aab84af35f98f5fc3913cee0fdff7faef926549d7a33f011101e1a9946130b02804a2c9fd6c4ad598c1caae89dd3d911c139f5a02dfb9ac6180375a631c0c66947f115d55c5e94e57a75c4a5473aca91b0ef65584a8d4cde26029edb74b1971a10415cb2f0c17955e1ba35f000f032c63eacdef4fd65c0861aca68023877e3fe8d62b5a60e65508332a5e7bb3fa8c8a5dd1025ad0bf70a5d111bc9a7e2767ba3cc6d0ff4245f474bcacb409e1d8e5d11e6ba8f9e28d4c4db1c5d2373e174879d13edf0a71b3ef3aac4d15b2bb8dfe82a7735218ffe7c8f7c4f1872e9266ab1cdba9dcbeb17c0afb7989c2eab4714ae39be2b73c875cdd3ba8377a5dc04b51da82bd84a382fac29f814bbbe1551f985528d4f9c2003e1620ee8cfc8c7be61f4f78aba2ea5c6b3c777079749d3b92552825c39f938400529621b42a6f63723cd0d38b5e2f81de8f4b0cea5a17af01fe0654fb025caf505f5753a3734a8fc9ec1a26d82a5e78e43bf0491395922e307cee8e4d650c720b6ad72cd8fa36209ccda14334cd08daef1f64d9b45f382daf87d1123ef976529e6c360fceafd3ed713408fb01e08bf9d1755408724acf98bbc0e65323eeb83dfa61221aa46fe7964b20fa6d0c2b9c589f0cc25a4f7f25fe52a0ef33ab1e34b1cf6a082f47e2a13ea9d9a1c4ab9f22ebec0c048a8f3f1820093b45808d309698d625a4544e84337c75a1de7666657ad28e142bee9989ded3ed8b3b54f5c2784590661d4263cf09bdaad7ccbef771290e3678ac06a2c6fd0554dd64f20ee6ca903fe6b7100ef2fb86af6afdc18972f23adb23aa9c668a631eef34cc37290cf41367832b3fbf88ebf56143b57d31b8737f192864d2e886fadb14c6244c16cce844535c8c6e33910066189d7615867c001a3f53102d174d8d5fb0f41d757c2bab78f67eb727e5cb1a748fce8ede146f27027a396624f7eab081aed88216ca36c5ef2c4fab14585b3afe796950a397ce05e0418931af63753eb83234e126a5f9a7e4a8d08e5b0cb54847a86887134d8c6eedabbd3ff763e586959db576a8ce88afeed38db8f1aed78df50fd1f4498b7cfdd60b22f2f11101b2813f012b139dc113b00edf1b54c64462549e4964d0d0aa59298f2c24e097eac9a42ce2f81ec3a23823f1c6d2045b74518f9c541fad7c8dd454e4443f33cdfea063ae4dbcd327694a932b85d85943ed77e6572604a8503620ba8c04b385890bf2182af58345b3cc8fa6413bd622f4e71847d883e634cc4e4a11ad52743bc257616fd56d1519fe3fad290e1792f141a742661b2112653cb4aaee5e4e970b8feb7a197581058c8e9b669adf35b1577e6054ba7f0a6063b76f728138c8b36c56428c3e32d0f7d5c9980d301c4ce02987ca3951420d4732aa88c5227563b57f1dc713ed2bb0c3798e25e149fc80a41b319861418ca7065e32c4f36dfcb96bcdec44d604454311eafb83c020646e3b75d7712b66b54ae2c1a9f19ae4a2b2d8fe53b9a26441c362bedf9fceb42218b10cc9c52b884788378dbb3dc390cbb31f48b6cfabc1e52c39fcdaa285c150e1cac43ae677a41755475a2b158a88bd8c597db94c6ba6e097084f01b10d370d83ce0514d11f64191471336399bacedc482deccc11af523ac94a14cad4213b3b3c30791b6edfa9be61078a04d4e96468d246d68272530adce47e96352ae487d1e05adcf630c2b002b0ef69a1337860543065e581e3572982c6791cf9d52441a8af7e64b32a183590056b505efd060278d1126ca73d2870dca083123c3d7b0200770d676c07ff1bef15beb3fcc61843cc991ae345dacf036907f53dff6a97cf12ccbf55d9cac1fb745a2ff486128f0092c45861b31031f0566d33f1c736755edba83cdbe8d07961b46b814474a94e84d0cdf7bc92e6e5adb81e838beb79d44d9ac2a850cccc20615afd07e17c820882141af65556f418b95a1452115389d73c04f5aa84ffad4c254262fc095fe1b8dab8d64e83cc26f5ae26a66c5e8a3f678050ac11965bc44e453cd7fa8f2b49c0e8ded180e1fa02f8555df653f762aed3aa9a6bd4a6b28173ca28dba6ececfe47305fd9fb10af41d26b5369736e497a2af2ff08306e37ef5877e6e9c9d8819d0a5f41630e9ecdd4063965d14607f22cf286b405c754aa575a5e15ceeb5200c5b82fc829146e4e6ad1225de09b227f8659b87a471ad4fbee7e517a1ebac811fa8078e3d4cdd54223c07a4f2a109823ff3beab46c52c1ade5e241392f0a2cdb11cf41695febe9a510d9d88e0632a407b9d573f069d55e0b5d3072ae9000e07541500866da88bce9a1acea798e506d4550896959cd946940f39a0e6100890bfc132afd957f1b4164cfffe4f16a971a01104d1c47b06ca67a59aa55897f2e840ab414b4fa6cb353a50a1ad87822f521ebfe6a3ea837061a81ed07e336b29c39d7405632207b5942a944b0796302b86e2c693fde7ad551522a4c0bbaad75e20fd538b0a88e7e6d478201967197824c5bfdab5d7430079a37f92844b3d7c36080884bfb9e457ed4fec32f4e7f502ef296b9b6a12b532c3b7b4c0a16d803300e5180250b495871e351f9bcd95d29d9b0291f904671a65690568c2ef55c0c175acfb664a7efe2c6d5153b12cb3ce7266a3facee891badebc097bd61fc6ce6ea2c9776f1c0daf82b7cc52e9a4bc68da616123c1f20eb5630ae223c5b6b97f06c983a211259fd9ab189d18dc80997fe25d24abd4cf2eb17b983422224d0e4cf85f43fd2f745382c489d40b3856d03799f8b58c8ce9f1c94b0dae4f0b14b4fbb1d9b586beb6f17b82248f68169935c25bab78078c5e7432c2be3928b57772838acf0fd9c0a55141d9f301547f885e49bae043d792b19d73f919987d14cb321e74344edad2e4ce69f560a0ea95626725e832b48aefa871ca13517d46095778af6a7903b439b1c12172f5e728d399e2ee7b0d12b73e32e6fa068cc1308c4aaa84f34b7977e64d3c10c6577691c2a13b152f22e77c03d7f3ef01f3712691f2f2a3c18d4840aa4a7d7bbc4350fae585359c7bd57078f87e0d047bc6b1fc5bd3654b13b74fb918e1299aae6d9debf1f1e6cedf53b96e3ed0191d91e804249d38e1fc534c16407ce9880e75ac2a33c65ed82fc73ee51233b324f99c2b42f5a6d73043c22268b5257091370430d1314b334f9a714ba6eeab13f6323c94f190e4ec73d38ab76e421c5fd08e0ceb0f92abd86178055a0b2fcfa1a1b05953dccf673877cd1dead540b9b481dfca4f443c61ad9606da9b92a1307b8f223a8b4eb68246722a504c71e1f7272edff5746fc3def83a4158f3b588db2714ff2409a2ff0b9eaf283efb5a6d970ed872c9d005e40d1a1ed9e18ee7450ee5a5d9e6d1ba0f9ef011b67492c2773ebe87df6ee674ad48f11045436d3e1a3dbab02cf3bab29489047fb25dbf1e46b015aaaa419fea0e6ebc81a4916ba48b6fd3166ee24a534bf55f8c17e871b1d49496545b3a6b1395ce3a95c3e96c2c9d92bea3e5661b119dda84324b103220b0f83b58268baeb742cc2c8e5b2c7b1e1ee9207cfdb99c80381b35b6dec016b2af2c80bea808444456c094db00b6b409a14a4b505b53b9fff087064645b4d34fb73bd7c1737fb43212078926deebcda28c18041d212fffddebb5e4aaa127a63a854e01c7d8c26fb4e7d5c4f2784f9dfbd5ad28ff9f25cfcae205de83fa74832bfa2f665cec0f2a30d8a8d3201a935f341cb844787c9856ca201c4016fa863ed054cdb0f876747cf9cd518bd53f96eaca706a168402af901cb34a583c86c4ccddea804faaa617b618b5ff0452e2ac7f0a2d2b6486173643788e63cb69b19af34f26e3234ff15a52bff13542d20e11b973bcf7fa1029f0ab47f38ef62a876eae93a3457bd4e04eb632506fdc51c176bb3e5b86da3f3d6a1808d107299e6b7e2351037154f63911933efbbc9411692908f8cdde7a60eb3c58df54070fe1ebd92c3cfe449e9190fe3930bae6bbff4e7829e2b102dd2f160a3a7aa882fa5e9ae1cfdce7043562e0433dcbb72654759776e052800119d08ac6ca9e2cdd7568708784fda5ec251241ecb193dc1174c5703e42d039ab331b55df28d112a9c4ef270dde9f34d2646d7e3c087a69af5cd5ffb68dfd50a6e6e0f0eb5e17a139311a0d00058e7bec8c97e8f32e82c77ffcc23affefd3a064c1c4afb508ea5d6c67a911276901cf43164793c621f92686f6d1cd7e05a82443f80373255a9b1ea754c98d4a7baa136ca1ec5be473cc5f10e67c702f5357825527c85ae796046a224ec5bbeff9a4d1726c150f828ab2414291221600a41eabe40035d22b0ec3ede251f7631fac132c12705228dda849d6fa986a31a2f7cda6c544e2ddbc695ad05ad6b0a5c126b51efa1e45b439c071090592a6d0ca0f6b412c6e38f9f24d2e1be78cd7af063d10472854db06544e3286fdb5c4d84b8f068355bb856cb35fdb530db92a0827030674151b3452a51a6b72fc1b5b71fde092372c97dd79f30db186f90d84736e21bd66dd8f4f62423dfdbac437df896a05b61b6eb62dd19acf3664b02f956ae1d920936fe25f98172c2217436dcbb14bf6d22bc5d4634d3a027309942a9b9fa95f58acd7acaa5f52ff71dca8f684d860f9a5479a6dcea0e128a2b7bccce9b37c5e35e77eb526710d36ac8ae343d08d5fb9797eb4b1da2bd8c2ab725827a0fa1487c59ee8777cae833184a776d40d4cbd3595bde44fdddcb170aa2de8edc3a65c399b52aa5640e26a78bc0f8d5b63630d28adb806a6414a69dedc8c70a76cc723dc2caf0e6e4cf9564ac5919c61f69fd6fba939f79cd9e95e63d06888803d292622a0778d15d4636073ef5a1e7c8b9f6aa9310cd95bb866b76cb1b82b8e3eb99a722a691697d9dc49cfcdc78ba6ae967b99a1744ba7ed2ad80890aaea0d73d243c47ca0266bc33de35b768e1e888ed8e26a64e82535af93c643c92e1a5b3edf16c6cb13abeb236db8ffc42f155ff64ce3052c909c8cce963d07be71e80fd187c7d1d925d436ecb3f35646ba1f83eabd2812a3e9183dbf213eeaa35ce5af3ce74280c7aa07402751350dfcf30fb6f92d64cacff2e8f78d24dde4ae1f0fe712cb3733269ff035cfc01fe3edd0dcbbad5405582854706eb203c23384c5e02219c2d9f38c985ac40f89911503874a4f87a120797fb5ab401765de8a0aec3f6cb5407cd9921ddf937dca346c2fc19a20c98cc142dcedb9bb735c55935070f198d0e2ec9c0fe18ae5bef2055728065fcdc2569ad2048928cab945684b3674c6bbd0fccf823c8500b03706f4faecd4e59b0f5535f6ca2bcbb7292d849f60b0308109bdbf3fd4f91a35a32bb990d5f7b40502c3e18030b1bb47345cd97c850cdfe1e55224370004525feb55ee6a2e7173130a4f54c3e7b69f3a0ddf0e7e8dd1f8ba0bf1e6576f31ea2c554bbce7203d6b12b931fbfa6b7a1fec52a2b7c0d2f96ac8ad58ee2ec18a566e3c4078644c0a8b0d0719f7aee4504f20a77967e09792ab70e739373e1112b97bca4ee003986af4befba87013d4465d6483f29d47d1ce1c67c825b89913c2fb4ca3486d5478642d62f4e00a55b9440db2cd10d90ec60a4b5dc3c7e66f5c792e510f941a38dfb03d90a79090405921c3d53bbb6f8c162dc2685ad06e69382671975e04ff823b6b9a21d1ba3e500d424c81d4bac37ecf14306367b4769f29998067ab73bb40653ce2e439cffe9758810c6aeba42021f0dae71ebdbafab5fd8c991d79de4365e79f0b745a06883738dd71152bc234e3bfab283cb08f583f595f617a262a6e472eb4ab00772ef30f31ba54f21aef24110dae1abb7b2113f2c2331a28bd4cf6e5a2ef4c9981d9a29bb55c69f4ebe0108f63f00b7262fd2f810782d0172e28508334d2db696fea554ba690a95f82754ac8d7068dbc5212042209c241b139aaba10eb9b29a44e8911afeb7471500e1bbc7cf93463035b2ef7701102bbf1eb153b7d3004fde4db947b8b8a22c303edf3edfa54e81a059dc2610c93eb756c847812f6b969f3dd5eba23a52b77401e74e2857f46789678c7734198443fcb07b735911e06ceab7a07ae480c55a1621aeac92b56b6a53ba197b3463f5b1672d4e250c6afc26ed5041609ed0b0ea3f1d137fa5afed7f9e57644e9a81d5cc0a7c050bc57abfe79fbd86a7c6edbf9105c28223e4c7efb96fc99d9d0eac7fdcb2741b7a80ab84d9d826a4604bdca3e890e5322e62d37498d95e31ca9c966afc581fe2bcfabc8de9f1528cf8fe5e10270b719e69de515effb09d31cda1f1c237369a2c72956a9ca85ac9918a99b0ea8dbff470a7480b125b85b2476675c6da976b31b59b378898c5df6ab73edae9124517ef0756dc0e84ebe11ed77a62f253b1ce776678c6833aaf0aa5ab2fc0276641733f3baf9b2b2f9ddc4bf22b2446e4998e7ae344df506ec31e20cbead1ed08303fdc0c4d1c4d93627906fb64f268049f53bd5f41cd20cb21749106bf544ba070bf3cca28cfa9e2a336c7438aca7df93fb3cf1a38586b9bd3ef4ecaef3e53a8c17752569568ae750dfc1b6eaded662e64841dc7c4bfb6bf5412eef57ffb2c0e656bbc4af8b37af68950af5a1d51e9041cec2e5dec0257e005c23925b262cf2ed95d4ba5bcdb01e0dbc1c8980baafdafb85aaa79bf12a86bf84c9ea18e173e4ebdb41a07139dcf3d970ae2d3e3380a93e981c9e676b82ab3531eb3856b4b1a203a5e519b78970742df848727e18c73bc51df7df3f7836b324a4038d50523a6e6d429b48e44de3f3035a39b9a1c8b3bb1406fe7ddb2ca89ee53f42484a2b6f86c9563ebca3a5d29f7a74ccd82eb7990e1378b6a85f6d7e337a6166bb512decd52cca4056be550e57d5f8fa8919d37258c655346571314a0d45c402f450679a92263423a7b552abc341f934c233e992b27d68a3e3796f5a0eec50a08e4a3bc22032d5619ef492c85450df2a3a3a0403fb05a05162b20a3bfa0673b321fd2d584f9eebab8f7a6c93107d65c7884a9f760d8a4f67213ac0187cb5d5c9329f61d820a14e012452bc2d4ec62b9fd0259fd41148f46ea9e92c1b9eca0f700ff171c021829cd39cbfdf3035747fb9b63105a2043ea72ba17efeca87fd450d27916c3b195dd235dd079893bb491eca81ae9864eb50f37f97f7c0d80bac092dc1532db31305a24a4a9fb537c4d059f864ee7d47a5a7479b9cc8ca9a185fc3b94a7255055b9cc17a07715c124a475bf72b148147aae5ae5781a6f94787509f78b3d2e2bca0e4d3fd6fc36d530857d380fdbd46fae07b3f3b7b797bb9d880960f1b786347db9021c7245edcee3d71a4f5022a95d518ae8bfea08dd9e9dcdb8c22da04b00d300b45e9af7334b3254c32c125a8b9b8d623ca178319528d71682a3095bae0e928ba84ad02c8894edde7bda0347479a48af912672102bb51de7b0b3ded7265648b7b518fb6e95ad461e719c1158a43e57a40579fae708e319f75e65a1f385c9f90ce92c7df7936eb9cf726256d65da474feca10134284e5cf7794c4ed6f689fad7782b8ca873c2e16d3d5273d9ed76754c676798f8359aba44c3b195f1604a03266d4a61ce97526c6b3ca47979f099a9ddc1d0fa8960f2287d91ba03e0886ed07aeb4c4730f9743023a6389b7d3f9cbbc3d978073ad2275637762d40cfb64d4f6b5704f276a831757716500ddae64552b15a2e3cd9cf48b14087746f1e78d4851871e66278d8ea06e6e4e5a77ab6ad651c7cf33df18736cd8a3e132f5ab77d11d54e6b24bde112a98f7dab4c8031a1407468e01aa0b721197b080bed704ba8ef1966069c2b651ce3aec37d620784d672a8b248cc5a0b8c90f4da76d6ae2935cc1e4d8bf691221628ffdcdbb90eaa8a2a5e4517cdf9813493fea7790e9b156c9b081b5d9a9a57040d555d54baf1ec9bfbca643eb43a444fcd991a81e8936879c2a18f3717301d639233caab7b31f79d0f54344542340fae66b2453b6478e863fa9138c5df6ecdb834af7acefc98f9d4f9da77012bf2d5c31a93331c6ae5d2475efb585d74b0130886d2f15fe75f103c0b159153e21a0008c9b6730e0c61a18b5034ac745ea8d799e27218220104626942135af27fb2abc876b0231eb0cf92866a70157d610fba6a6f7c48cd38641f363a8b0f6776b7c597543f1b062755247625899026efe94df59f4b6cd2edd64acb74a63ee226d59a45ada514429ab7428709cbd00f4b86d55710283b78e6b006df0e78a38a63284ae636ed0bb3d53bfa0f1a1074d602250a21c899eab1bd8d0dc456370c3fac6dcff7e7c5d94e1bec18365488658669e3e4b17b1b31442abeacdc65afc33939a276073206eba7564bc07926fc80bf4e26cdaefed03034648749d0a95f21ea09a8500d374715bc507bf0270379b5853e64b22af486bed4460a5c24f7395c8fd132af43a6f35e1c86a318128e3ee4e04e0836aec635d22e770a40abb21fe40328ac2c55d923a76113dabb285086e098fd845d58f68092c53bd719f07c91d2578a23b61b17ff87e37a5d0ef22456a5d039bedaf99ffbd74bf2b7515e9e2cfbe831c828dc74f1d1380f0260cadc59cd6007b6d1af9d57d1cdfbfb05f42174d46ef020b6edf5861ea353b85e8e59ebc0076b6b14ef5041bcf086ba606150edd0b9f4bab75ba2c154b6f6e932980e736080e3448568c7c1f33942e401aa207fed9e5ae4db23b89eafd5a042f6033f55e4053597532c3cd8ba4351cecc908e4d80092b45abda91dae90bfedc55ccd60a479c6c635cbe2f08ba7f0dd14c3e69ed86a3590415bc5edf7a3832ff60b4c60817b345c41eeca43bdfba9fb9fc021e617b69f346d0391eb0eed50915fd4fcafec48b04bc42549133f164601d906f060573e3b3ac48631734339dd3de71f6c9bce2cb4d25d8604d4809f2d219c182db1f3e1307bfd27c99337279bfdfafc88ad480d4828365ee1a32e389104e72c903ba8ea5d2bc00e07b8b2c074a42311fbb584e45c493226f6c262e85b85192d6b68ef3efdfc9c603f7402f50bc72c0d7ed1e8b794117a1d413ecd7b2808694e6c6242ca69496b6ebbd65e6d2c6986fb82bc06f99cc2ab299ce8d25e23261ed282c82500316d9ab2a8c73cd45c9f3e05acaee0d3c3551790927dc32a1609b6d6c863183bb48307b489a3b58ff827aa65c8d52345b40d28faca41f6a4ffab9f32893b7ecdb124dfef02845268b102961d2820959de8ae297f6c6da19843844c8fc5ccf6f38ce06bae477935b473abf9cd48414f80b13066ab2d842e66d474af3e2170acdc770fdcbe410875b88a6680f2c9a995fe7c0decfb6af93c0d7e3cbc7802489480b548537769ce1122af5c357e3e88163f569b6f8da4b4e0cf379f60902f797a59ef77726d312a4ab2bfb8a9ac0384e2f5e0dc4c3c40750b9ae9453de8b33086972ac33067c102c62945c455daff8083d76e6afbdd29162aa1cf02e4ea817ea76a40da77db6a16afdcb6a6c147cf46951749b8fc27c11a97a0338f431e051373e35f62c4f38e767d4082a367886b9e638089a6287beaa5890bbb2897bee600ace7971fce004393355d0638117c9af1308350aa997669c115baad10a04cd841513455c410d5da4872c7268d91cd94ef7ca8ec2fbcd0a0a3372cdfd6a9d51df25413cf3416530b348b2e0880f137a07185d15fba7cd4d1795b76091b8b0ef622dbb9902897afd0ed69c42d5669a7e5ffe6a5138f85e829abf3c45cc605d38861c6d71b3d68c36330a5393c986a312d6bcbf37ed44b7c7b3a2dfb703a792195ff8075d5a180abfc75ead5cb501654f98c15121dcf33611adcba50bbe1be024f84abbde27d97f9e535b8dd5aa6fda79bbc4947cf4364ae0f5d1b08edf3d66b7ced6623f102249e233e1256a9700d00adc9f0151f8176f402b3eec280f5c7b732b0c5ebcbe91b57f8717b69642b80e8fb82ec1807031813b31cd12ca1f32fe98bbd9f81a0896046e2de36e878f4d50bdf5cb6dc52ebef5817579cb91eb2eaa5147b34c829ce761f39788546b2991def2a3d81a9720c50e49766422b759dc0cf2c561f2e09cb7ec158ab46f201294415a597fb288c5458d3525f0ddb71f6db3cc529324e0cbf4297d8e67031fc9d746714cfef6501ae467fa7a3e79d8aae19a02533a5ef2779f712d4fce8214763d6f93da517ee1757fc14bcba3eb803d20b4d148e78de172021aec61a6eb778674f9284ddab40c27c66c5ab19268d74df2e49029314ddd756f8ec248245a8e8ab09378c76c3e62c1dc35854edb3468ed4364b6d1a21d5cde6f4d726674fe74fdd45d93a6ed4432d34bd6a0c3d3e171057649293813b7c7bb165674218084a71bfe1aec7b8810e51bd52d1b3473ce60993321d3861b0c48edfe9923b63aea7e3f352e29a2dcd28ace1a2ebe522d4b08a0414a2e469114cd5be67587b7c09d1c1eb49d4f34ef97e26047d3ffa32622fe0846ad0cac5f94bed8e495a03425c525a4384f577b424a84fb0231d5604190fa5116ae3011b1bcf59438d6c3f167bc053ec4d6cfb36b334f4ed800a31eef12c3b6659a827fae520b5fe946398087782bfb7bbeb98f14ad35e718f8367d7c160bb2a8a744370b8888a69dc30fb9f99ad7abe31b1c908ea24942d4b3d5e2632af1da25f83b2cb205acff525afe17e373f7029cacfba0816854c56e16c4af4396439f7026ab593d12bed3c45c0d09cac6ec42f62267e470b01b9665fc96cdbdadb71000227dfe1796c2f1c1141a71a7f055803b4c4c16d8581761296f361a532461ae2d72f16ab1581af72306a5e7b07b261c743f213bf1e6086cac8f492b6ea59ab217234b4e1e8581d87b80f9b3b80741c755bb79de840e0b4e8f16e6b1ad6262a42639a6f765ac904f769c2627396fc16e88bf1c6ea9d4081f059fb29525ada5842408b125c6e719d08d9e69af33908f64dba487610d1e12279c8c04f17ef08705bbd84b5d03d1c9188b5930abed9f06f78874582d488916a6f4640baba0b2edbe0a3e1153c62871e9e1d449ab3afef5053bd17f381364478aff4b98a19bae88b3c2da88a5dcd4db791fb8fab00a0b729ea16499a2db6fc26c2a87f03b2ee73ddf68ce7f99ece67f7e3b80c541bfc4a87ffb62f44b0cdc8d857d5343e7895b7f636f554ca520ee5ee812c33c83adc43f07f21bd16e363bc5e69dda50c1bd361d1026ea64e38354fbae60f7f1119aee3bfdf5829df50f6487172ff8b41b910db8f2dc4835e66dab14fd830d322dda5092f3b57f85081ffd2587fbb8c2268f06d1637375bab6b5bcff01327ac3668cade0045d77d961d44f5792f7bc9fc248d6cbe7d296fdc23c4c830fd7115d471c5abde115bd16c08ab414ef7e75643ef381c6512cacc1502a5f1eeeeaa6daeec804243326446111a48ae883679844d7ed860f01e45e4f6babb2b25c7629f69e96b7e829830bd714c805c63b56aecf147cd852f327357b8eb0f3a7db991036363a94d21d8fe35644c099b8ea186e47ecf20cf4c11584d2ee68c6f00a1662a6e0d91dee99940e4f5aec679458a6a24e28f8c40ecf0fa6ea9f2856e665bba3f6c56af712e68a8784fb8228edbc1deab99bfc4865982ee8973032e1ef7bc44cd86519072fbc6b1faf0a6d25a9467394cf1d5857183dc11b00977b0e9a3d5278c2857f792ee1d8710eb3810ab3568ded861d247ab94144034de591cd29e6c1db88ea8da766079b564944fe09fcef592b9584f80047c71f60acf3a7ee215977aaae549d6304a7c8b83e9f37b2bc6ad3decf320c177d8b3ee5818d0af8ec7aedd7494c486296d7cdcacf83495558d4c633499c5b29fb18d999f7a940977e5e469bb1fa91ed5d894fdc233db22f2a64dd17a68c0309a2d98708595959d4de5a67db9ee430a626125e17fb8ad48f89c053dcc32a5e64e51dbd94ce544744adc57d8e0fae00f4c44be27adb45081ac687d95a343daa87db2efa5cd4a166e496640766f56af3d1f6836c806caad7202f5342ead223058c2c3f1289da133f61d45265eee26a3107d00a9f9d8c25e30aeb8c472d20841c9fba3561abf22857f1941ec76470186b377a811c485d97c8118376fef564198ca5559c3203490071b922bbfc4afd8521031eed13765da3b64bea0728ff2da143d5a3f72cb1fc2e9367a1a1b804d03634f63161b6cd998fc14f1a8d3940c6e73cc603020211d2e10964b1e4af946d391d510cecd5f3d4bcc7b479c70ea960337ef3fb426eaff9b845512270d36cb677660aa19753bc94c231285708f6749a3722c7cd5acad9d6b80adb6afc25ba6332edfe1510e89fb2b0f7e3a4c7e92e3a588fd184535fabc304e400f4d8e6b228e461aaca0b53889a35b8a396d4c7a1b43c610fb02dc9fbceda6fb5b8672e85cf08a33b54cc266a26ee1e3d9a73f2d9887f2692a6b842cbaf91db8add640519a51371a38598ea0d3744357464b054068c50da463fd46258bd8313dcd544257a9425334f2138b6f26be31de8a72b38c289072f8380a8074974d51b7037edde73edf9df2ed1b605a847fa79f37045b9005924411d1a9cf63d298d5e6b0fd2598e7856d407460bab1ac0dc5819171c59e7b59bdbfcc2b20f342cef36241792cdeb412111b0a6ee545a03f3dfd83cdb952c0886bef159538b5cf4a4b411c0ff629ea419a5cfe29a36ade4f0ae3a3d67ce2c6e9b92c284d97a82bc4b45a91e40a1a049bf3f862d11d546014145db91be419a327ee3af775bcdf9d4d19058b9e0149ae4c16430df2943f35a9aca991e274af5a412054d2a18e04894a4fb22c994c7dc1d8cda8c6f54f2bd49c3ae009bbd268ddcdf63c080493a338c245a185b193e0c0c0bfd4a1930a12343a867cb2b458149414eb3afb49ad223aa5ca690423f3b728098a22dc3564315ebfcc19e62fe2ba9d3425c71ec2366194565d87faab1e08bf15bda9108ca05a2272206a833651b4f708e97b5af0ffd26e65dc59154b978ed3e62383eb3251e430920ea5e892d2f901ecbb83b34af1dc2a2dfda68379ec1c1dad061c82023cc5992c3874f1eb2094d28e97cdb9145219a856d643625408183fe8597e46ef783f50067cbf7558dff71570869b0395dd7062f1b5ef7654739fc959b2fd87c912a03d866f8701b5b54fd6db30539aed0276376fc8b265bf9fd916c09eeb64c79e39772204d5c372340f312e2ca2bf19d5d1f1be9a47c85ac33dc0d9cac6a1e382c075ec3fd264d4dbbf03b4e43b5224443653607ffb94c0c3c9a4adfa6fdadea21d5a5958081b8f624e529b615c20ae339cb5d5dcb3ce430ace9327786a60ad73c9ede17744845275801a63939ff29f849606b29911262539f60bd54b708c7dc9b0c354fd2f26b0ef4dad3b8762a8efe717fa03a4678f00ef5b52b6d4d3af48be4bb29c9b4e30a9d7a87a6a321b8ad1be3755a3bacbe3fd0ecafc4745fea8586df85932a62100415ad83ffdda44408b8d690d3c705b80e480a6ed2744422b5eb49f4fa36d3a0b63f3693cb2850c1ce81c7812c8807d12572b6d042680162247f588841b2544baeed6f2ce93fa89454e8a417723641a4679677da8d0dedee58ca0b08a6286fd655bbca2195a0baa0e3a04a10ab18b36ab3a4588c3455fb9b17867c43da9b23a6889022a6636ca2dd3599f3b49848ec9db33ebec9dc0638a245895aafe059b8f5d251d497f8e0a78758c7dfc6303b722e4fb3d33a1b796e550a2bfbbf7cce2934579a7b33c3499237133c2d8ef37cc828f01046b48c0b8b064a8cfd521e79a15bdab79bcb332272a7d5699728516673d591bbe9d6a54f00a89e1b2f452acd9a91941a1e2900ac04161ba5b66ce74ccb56fb3ffaeb26e0d9b72c777792a6e1a6a2b4b4c342f178377ce6519b6e28797dc8d236045c8e6d7d7e5a118fc1b98f08ff584b5b6a2b1734d90d33292f558306e1d920c3b5b2cd2700a037f7e7986c3e2ed538834a9d6b764db44a7c5cf5307ef1e6d1d66052524e4d6a87f64cbe483f7c8c8ec73dd506e511ee5cc1e202b03051a7bc1e5d0250097591e6c07374bbcbebc748fd536ed2e44f4e320f33a3c4bea894e45240637f89e66949d254d6d2e86a7ab3a02008c17c5ecf4c6c4a6117dccba5e2187bee895ada2eccc08523d56fe41e12f4b870a9dd38c9ddd74815ceececa5e0df3eaabafded0be917da3ec4b05bc35309f0e351fe05bdadf9357dd8b7dea1a8ede3525ff3a95f75e7ff8b37e0c871f2bebb1a49f6753d3b9d8cfc6d2a82d63f0abc2d5a1c163ac55839711a8945e439bb7a73351312cd542a7be5e0cdc9446316ca29dcacbe5286d151b5ba5601f52394cb43d41af27a50ffe344b0708b2856e6f1389472b522869d342362419ce8bfccb2fefd14d09952f6da1dfd98647d8641acb429419948769046f1d0d99d2d4a69b4d796b6c4fef6744e6d709ecf06d39f490e66ba7216e45e3ba5f03caa3697997e2a5900e48c65e14b74c6157d11948de977ce5073f539c9f44a91b247bd54321a5c1bbb640aab3c2e9e342b42db6d196c0dff50409a8f94b4895e51b64ac9c41e5836060c0336e1320986cc3e74621114cf2877b2093fa685173575a36d0a363819589052dae85b9b4be18fa8b089cb161d70e3d4215dfe7d06bf14625adf5a6cb45f88a7fcc46ef9f6a1e6372d21f179d48826866ef4448263fc21773b20f657e66c0a821c4109b720d60e4b8f45dfc407a14c8b71ea01b49c0bb7aa20c03a9f6f33d48e100d694fbb8500f445e681ad8da706dc70e84f106e8b6e711178f5d76f07933c2329973a647f4584741da90cea31534cdedf6a934503a1f7d0721f24e2a3e36eaf02ea17fd6abecab3ffdf0e296cb4d426c33d0ec9d1729127029c9e55d2eb50da73049964ee88da294233032ccabc6dd4ccfae2eae9709f97319f92a9167480e537c3b2df8350bd2265b86918a60478674115dc8ae048f90c15d5f110513ee7c992fbeeee81754f7e3e294fbf9afd589c0e900c78931e483ab105abbb853f09ccc263f447b5d9073cf8ae40715c6c7d6a5f930f834531df0fc4c13ad4a3ad766c4ec2ca9c6b4b9ce9b89535ec567429db5a2bd4755c671a36b3c775d59eb7534cc23929764a2a4daa0694f19db5728e0b237e2c095f551959adc90756f2305451cf167f972b79d0fcd563c52de85fc1c1dc2670e09a51daa00f6a21c3bd26cbc779f2eb7225af882a254f1293ac8c306e28df80980b6fbf2765a59e446a9bb62f60235add08d9c2c94f6bf87a29a753efab7e6dbc673f4f4baab58a876ebafd7411bcf236907a1f06e11fec119c7b4913536026cbe50a881d04cac2be096c849589676c97e31298e596081454e54db2f097de11fdb4d2dadc0ea96a5c9e958cf7700f286d771e0aefcea37fa8468bc460e4b54288c3efbf4af66a0aa284065eb501002907a8971183e0258da414782b9c5fe9399db0b0c881c28c0671aa99c1f21d3a1e06a5cf929ed89b11dd34c4fccda88c6c61de563e65983c48f96030fd18f1e7e7a2223501109ab7944e1bf855786e08ee8c41ac21f6b15287355820df9d5cf9bd1ac62bd38827bb289a8fe7140a047a16bec06be1df54926686224ea1879cdc31eb97d5b814e299d1fad25b98450da67e427cceea5194294be43ddf8948adcdab39ab7cd00fbf37e6a13732b48916165bf6d8523beffa191c3835e6c329c03f04a13c76d7a87d338d599195651f01583fb14323f98de0f9331c02cea52c7e4a12adc5b3f3b49d4a5fd5bf7b6f6492bf634c3857e730d1fbc78cc382ca418df863d5c94de33c872d7130f5cbdc961b6c61a8dcb60d217f0095a97455b97cdc8aefa1705b44b89c992d1ca3d5368fd80f620e8822174de1c9dbbea1d043ab9e3488cad2eb5b6abf4a9cf0105e3a9d52a1d20f238666f1173e284f7783e512ea063703370a30305a83e31331cc5717f2283900550e3f665cdc6e20b4a51d5eb386af47d156baebd0c08d2c9380d49149c2076845d50a0adc8dc5654c2b1227f800c59f833644fc0f258540a6b6f3e07b317367a8e4aee36e7fe6d12cf082ccec5acb0dcf40e3b73008fba0ced630174647de494ad782d679c60551b84346637320b78c02323380f962177f1560997accf91c8aac6fc64c3e7b2317ecd287036467de9dadce8c3cb1ebf9fdb7dd6e88afe78887785ca9cd4e5d6edda247789669e6b74ba339d312b25f68e01d47bba159e59007888f66a06cd5d6bde6fb511c6e246a5146b94c78ff43e98dd813d11fe4bd68dda30e1f65e29d2b9e9b6cc38e7505bf98da03e63846fe9360e893c79941d7b9ec4291b34103e50689cb0a3322f6fc22fe69d23a8978025da2221888dc1d4ba90c69cad2c3e4e455791f3568c1647cfc2d65014eb584c218ec1dcc59b66d209e06efd23326d7cfdb66c713bffebca964a422898f0b59797defe5649c5c7acc44c9ad4f3f7d66c7ccd4de32341b63aeff06ba1a5b3d2debe7e5de7403cf26c4117cea5a1b4e8a73fb7f72172488b47c183abcc3588c72baec32c8e481c02476a1744d782086a094c7a51aba51da4573b9a11b9bd0cbbc0cd3f59572c8b50ecdf11f09503a5a8621c1679c7a1569a91eafe27e50105d0416c607d013538c223418f6aac1ba5af0bbdaa8204c57f7b24acaed9cb1766d74eeccdade4296c159217eee43e8bc3b1d21b588eaa42749275517a0058b35572fa9fc07af798a37a7b3fae0418a2f82721822475bcd2f29e35b190535ed0761c94f52885c8651785d3a65c27bee333d1c1de7ac36e4e9f06967474cf80f4b8ac1e2e225fffc0c9a7e00cd3ddc79e8a440aadd4e1585114edf0fd02fc52ff4a6f98b0ea9aa5ce3fde96723362b9a78d070684465d7fe268d7a8bae54622c814a7fe81817b871ed22c273a7b064e9ec9fc3383e18e39620a0d2732f18c905d5ec62249fcee4604f7d56eab8d9a3e7ea6ffe073f3e1ed2bfa522c18ba1534bebeac195c9a3b044e42fa89c8dd4fa0c44ed4396ceba3c75dd64cff40b20424716a416faf7907568abcc20a71ffcf4950301ffdb39e6eb5163261a4bac96720ca6fd5ff26e429e18f36432c0ad173b4751c9858c7e5c4c5bfa3f6527c68c72a1a7ea571aef2049c049473c5cca7f2f02b29530cd68220f30cd797c669bea14094cb68a2f79f877d8aff9b5e4234eecc805f0abc0c546a07503c83234df3a5f5b52bb2fe1635af15669cadf9cdb057e49ccf0958145adfbbd175e5d4b41196d7784256199cd0d301dcd787769e8d0c74982b10dae2e503f1b2df05cd2e453e2d79b4156759c94ad484d27b0e7c62cd8c8d2c23d4c56c1cf8dc318aa37d3189d0d40a998da1b8b8f7730ac38e5682d0af89b29154deaba23e3cb1e3e10205635598f5eb96ecf89752075c08571eb806fb5a7505b8e5c904a4b7758db5a7e5b3076522936c3dc224825935c9dab5fb7fd71a5088bcab75528b538bc4a0e5d90d807e57b5fd704124e960d0ee53d3be43e69c954f99636822b878812ce7f9580bb911fba7785b840ffa699f5eeb51958cf2d01dcb08a9bfa5488dad4584829f52f29a46c32fe518803ea3af8538a0b1d7433ffad2424427caf1ddfa74eebc6859a8aa592565f5f9a6155ff331dc28b4cca9d91b84e660e8d77ae4da0312fc7b957ec7b285f2f5248da80c927b97433afdd6ebe43a1ca705b75dd1c7281a3f3a67bc4b3ad26b2a74ea8d01c9c9aae42861baeb038d6464a3ff122b71ec022aee308a52dccfa50ecbe51d1bd6805aaee9d022a1286bac1e60cdaac49faf0dc36053559b353ec622857c7e739b3b7e979911a591b19c3ed39f3615bab88379eb9751bdc41eb835f899f12449cf2fc632adc827f62b2c8dbe986b618f17352958717f69c686b78147f961360878e781933fc70f79c40ee2c7418253fbf56e0631c67ff0b940e9693fab2ac76f66a5ea5b0fc05805fffc310d5d4b854a3ff80dad18428999fd28595e505f8ac01f054ef834aa909791e887c4c4b882ea7084c252683b3a17c70c914929f5ee7f1dbcced59566dbe0bfe8e3fa0a72f94ba25f59f83b24d9760a763c87c71bb403b3c03da1da3bb701aab3a7d9466b36506768d9cf45862da0476a1ba67543271bf17c148bcb8669a1416658ab9f47836ee670c7edf0b52f3a8714a1eca21858a4d26ad8d3d9464cb31879b0a04c51c33707a09c5bf2d5469bb5bad9e6363f76052e924268e73efbf02dc1067035de5720338c2eeb02483243c0759a0829c22b1d2c70be3b47a3625b67f06e2a4f9c5ec77a20a63e7e6ab487fcaf0a293d3a37a48dbf60a6fad050adc0b223598091a521ce47a26a08045c705d38cf84fc8ad1a3b3e4f3048d13171754fb97ffbc7f30f4f6906b04034e84bb9f1d4ad79b278d73f2771d37a5b66a86b51c0716a5dec08cc40dbbc77881a060178cd8c96a747fa81d2fd63c03276e107f66f06c95927d6ff799c9989bac32f1f7f3d589ac9a50077a8b4f333f4077c70c6856b133a2ac6c1f3467c2bb7e9e8d12955c98652f8d853222fbb1fc8d01ec3d74fe8f7476e6878f41f43afcbc5b86d9d5bec08c10e494c541737e4e169a885113e1c807bc232fb2dfa503f4486e17e395358cce9cc31f8eeab183b3ba6025a8296ebd6dc9d96e8e8e7cc459b1f82bf9fa2eeb796d30344baf5a047ec6351137d0ffa6e90de9193afea1046cf684f401746097cd8211ce8ef7142abad48931da11f97fc1fbbd1eb3f7a4850062fb243909c2fb8809e73ce79aeac434e5e1c02fbc50f9c67ebd86b1bec01e0b088d48c5c49f1fcf2388d4004a630a06c1f692a0a2ae9d19fb8aef684ce8026da31e869d68f6b7c8233381b7f2bc1071b95d8113a2c64d197026f3d1dcc3ffdc01a257974f1c883edd90ec95d881135cb1e3abff8b4965c4deb9d448278867ffebb0457e593ed4fa3d9a1d0eae031576bf58830ecc3fa19e5409303af0a7953eefff858861ac18ed6d386aeae408f9cdd8c8896ec5a37160f733afeda36588335e886aafcc0b42ace021b77bac88da6fd4406d6d3adf7adaef0b1e00a83c9789ed5eefd9fb9d3f5b3d3c286213a8bcd7eb41300b66aa086b9c48b2e59397dae90889b70c11b1fbb1be0ac6a0c74dacc663893874b2788f4c09a459de0b348c55d651522a688747a77527be7ed4850c0bc58c4e1acd197ff461565c833839088dd19e44bff71b21f3a01666cce965b8df4d91691f2bd47bfb9b048ef9b3cec6164c4d704f4915a1a8373c580c1122ff26aecb2b56aee44e2f91e5054d6bc7028d701019326691813e5609b6778729743244b689d98cfefc160e15753abe9acc523e2bbfba4565dad002dcca11df4106e8829abc3b8ff04c325ceccb00c8cc1601945b5d7a32ff048b5c51d1a1bd0bb792cb2f65665e621408865d2d1811e83844f407706dc3c5bd0d5e9ebb35c090b0c23569f3ab6ab13dfe49f0ffe3ebd1374198efb129c1183e4a96076aa8488209045d5da2641d5f2c1374faf0609de2e05d487aba5c72c60de1516a4cd0832aa8e6f7bffbaf6450572be615cfc8a5bcdbf5e96c76ddd23dbaa9d6b5bc6b34148375efcecb72f046c62b8a7cc7a796d9815b6c066991dca3d2c2ca128b9cfb9c744ff23093e9d63504edb41a78e7dcffcf89bba8f41954695468f81bfd9e231af678eb0895286b10dcc3e1d2c0b2b0158c4be8588006cb96e4bdcd8c58c0808c39e4af8716b5931fe92ae1887ad398b293df59f5e8089809c591379d5f6d967ed91ed0ca025beed38d567666cf5b00dd58463648b3797d9ec82a818cc73f13962937bb066e44df5ac3caec6db03ba643a5439b60ec113ff1ead01ec7f04c78d42ca527cde1edfba89d69060471c27a11c5556e551c8669ef05a99cbbbfdff6bcab79ee9848114c5cf5329f2ce9d8a2b744e1fa9f9347a8d044b965cef70f78b419475d121ec96ad0db3ff85a21c9cd975852599e04dc0fd341e1ad93efacb6f3422add2fdfe95d89b7c3cbf160ca30067cd2b98bbf04ad329dea6bac761d720e319ce618d6c8aaedc3ca148e9181819ea626674a06b6ad5a1c8ba9eb1a57a1be16a5b67138efbc6b3a874557076a26930506e4f1263257f9dc0fca1d0fd87716ef6c27e00c55a9c6014fa8bf2fe3737ac001a8c1f4009096d8ceafe05321331b5bbd07232138ba854bbbee9ac2311e81ee846c5ea33d0c0a24c726756aed2cd4234f3f3912bd207ce7c1c2fe083788e173b7d81288bc08b3fd57370d4b5ab4d0c24237dca663ad07af4464dab3d284792fdfbae55382462cb9872378758c35a03ffda23952a7a2259b2a2e0b249996ee8d4f6b64919479c0babbe129dc86bfbcafa437b9922e11e4f391ed93bff129846fc4c351dc97947dd549def5fc5d4b0dc7aaa520d816a493e816fd7a8ee42a1bc6cdd4326ce8b48330841a65523b877e2b46e7312b93855c8ed5d5bb94dc1a07f4f1ebc4bba2a068b79504cced7a00b710194a81e18ec23ce3ee0c388c9175253c030e5522caf96cefacd82f2715a806ceb6b9f6c00785a82e3b9de80015c2fc7fcd71eab0d75ad2edd465a8b735c0d018d5d7cf948e74bb7086c187710cc0022aa9260fc33115a46e7854cbcdf0018fed3e160ab578b7140e13a8b6adc73df5ab9e40b4610d6d510ba400912ae114bcf6fde411f0803e8d5e9bbe9b0381376a2550eef63d054993a004f894557d7d9994e8bd5bb781c21e1afe5058a084d377ce00373ddef2df67dc13849ecba7e893bbdf13059e9bf113e722b9efebf3d4c914197cccedd685cf025983cc824e9f597b3b0d8aed581378c1282c7c84e5152c00e8896c7aabd29c8251fff92c206f277688adef1ff67c0d4037a43f01607495841386ed2faa15e388e4f7a840aa5d697dd4ca34e009890e57f754759b3d5dfb68f0feac17d0d6cfbfa0a0607d68fb3b425b7c5c2bf9f7c05a6d36ebb15629b77c7a2b0d84ac8ba51acd99ccf295f7e7ee8b4e3f9d522279168d4153fb969881f35be1b6877dbbb40aed755781533e8f0c40b67923be451a4a574774b5dde383ee771962015e92280fd4045b39b435fcc0406c0e45a90fa84278a23ad6ac1b23fc151fbc6fe94dc1f537f826de94935daa7f3f8458e7eeb40b054b9c1dcc716edc49113859ff39fc1bf96bdcd3317863f7c7d78933cddb55d5f012166d23dea602b46adb43532105145e3a60639c0500bf9471ceb6201ad8432035d1253dd6bfe60cbaad5b068005d9dd3f95a8466978279a789546dd56020e3f9f2592397d3ee6461bdd42c884ca61f600e44db0d295d6357991759ede4f61e263214027e32f80cd30ee1df4652b518fd9ae2815e7a4b0444ac6861ed16daca6ec900631b212372c465a6598211b6b72b43156e70b319ccb8a799641ae4c6e3a1fd7f5c84ce3e1c276de75b80c2fb5bb72d57c8d08a99d8cabc38378813b9cc50bfa045ba85c3dea9ec728892af9811bc355635352df06afcdb3c3c8622b596b245c5754c9609ec717f92139e127b6555c964e86d9c8ca23ed6de16a53e542e73bf9530ec2f0abfe082731e2af3b1bb306141e271fab1b1b4fc120081581eda82d91b03832eac57965a3fa9a66670548382ee49d67ad4fb1d463163f4109b601f56a6fb0886f58e2e653f1c9135dd3d256c8bc3ea88cdf4664b0e245c1f573382dbf5ca3e53d2a30e808e841b59b174c3bd65118c53aa3874a0d700395b7c76e496c04d2da4e646561aa31c9f92fae6630accf2f56221df7260f2f0eba292234b561db85ab3fd62071299182d2f688f3c28178eeee99364439679492332c362399c3d2f9d07f277e671dcd04a6e49a7672545cb5c07db014848ebff79187410eb2aa557567a3556d7c622d49ba640e8815de01e4a722401b2d53ce939cf5d40846ff2c18356416c439be9eeb7ad74a55234889936af135123bc454e06e1d23631ac67c5db44e6816baa9461884b830f7b02f706e13e839fc92e2ed9d177c0e0a9529083ce5c0c9b215ee256b996732a0beb2855d8f102073304d0361048abd97572721894f2bbe576dc66712b2fe68acf7f4057b0e589d715bd68c1e7b4667705d164237a602a61efe1f89c80957b8499e03d685050041b4606be7dc693f33885da68b3ab1b5920b7fc99cc1c3d5256eb6bbbae92b5f8e736318795a59fd21057838f02a8d27a957dd3119e2e06181ad06bf9169123372a46a1b3b754d7c0414a63294cc693d97d6eef7020cad06fd76e6119cf2a73bc8e0779a3e53349bae10b802eb4fc08fd0f1c1d2c602980d0b076b0ee78f96526c9cf8c7c2db60833590c4e7109c2b6cad8b348c4bd652f25524926578f9f4b6bd23a4c590791b1605c783aa508c5e09841c78425191f03f5ee4e59237e2eba162d39552a25968d8c97d1f56300919b306ca6b38047c3ecfab90742c1cc369b0b4d9254e9163afda66523ec13776a26357236a76acfcff9ddc0615cad8e3e0a66a443679dde1e571605639578f5ca0c15ea6a60eaa50c778999222c49072d9fe2465cb97afc7b4a8fef32e4ac9b7e78baa112600bcab6f66eb02d90a34ebb219a6c335f63d8e9abbdaffe1b1baaabcdef4c99293ad7df55fb4c2480fe77ebdcff89258c58c33aceedb50866f1aa09abb119950a2f7d5bdab001a68066deae72fbe76a489e9e25b293db2f76f9ad7467a5eee14164e0325915afe0ce51414a8c41ae67ff729da5046467191989873656bd408b0b164798d67bfac6aff8e515c8cbbfac5dacf842113eb450ff393b139d2e18037a53234a2ad8d35bad86a37763a860583232ce66e7147d656064d5967941b8c4e8b8da577494f4f0cd33f7cbf0aafc5dbb7fe1caa1341a4ddffecbc7ed854e124d613ebe415ed87fbf552654ab475d4d669dce3a5485dc1080ad43883389bce93779290ad04f55b845c0e7a76362a881ee59d7244768d3a14ce3fd547f5e6bce10dded5da72d352c81d84ac77ea7d32c9f9a6d27f9967d1b9c735f9c2333e91b6f66c2189e8fe75c57e07a3379d3774afac860adeb30b63853464f3e5011af063771849e7f5f9109b199c030fef9446ff6cc6b0b56fa91aca20affd58c0d0a7aef7074bb7bce046d6fb34f84de7b3a29a69298b0e70352457e457dae00090a3a181c9596a76da67a630a34aa9fa7e3a49f5c9f164fa3145358f4bae19ada6a07d962ebeb329337c6bfafe7234a9aa9c4eaa22a3ffac78a02e09f705416a4e3bb08151882094061305ddf3fcf32f810063c7fa07e4a9794a731545643d733c20b2a5eba44503a1115015fc474a73334016087cc6bd7d5d991e29671d732a1c3f5a8a2717ebee8db2afb0b3cee3af80960abf47d7c60ac0c05cf54e7d031cfeac8b9ac2bf7a668e0308b7cb6b2b31c2ca571b041ecce168d8e0e0c8af9156e049068a54407753a18a4e701c11a6d0233d7cd85f4222e9308aa4b8771f69501fea0e3a290dfa5e59648fca7c0344436d678e1130ccefb77da44ed387e7f33fd18d0d9f51e70c9b3e7d18dfe286be206207effa8e881fc8d73a624f32947b95e8a44cefb2b98bb3e322379eeb23087049b5091abbed6a579af075e1e1c71a237847f83de4224699791bb478a9cfcbb5ccc3e32d4d0dd08d6a3ce2637f613d2e0b65b8bf419dbe638a0b47b67ca9803f39f511ea9c36eec60232efaaa4097c25bc300adde52e4c42576686bd43eebfeca4643c0ee2750fde7ddaa1580852891d912f0800cad337ff6f436c901b721e7ef10e1a293779cf774256285249203b3264c68e3d90ed663f9184f2b083aafbdc5fdf262edd93b9ebf47f00a926d7b99fd99ff0f8d2b9c07e6d29be8a14309bf63f1945aff78b3e6d094f620d1f6f5ee8d791fa2a805c3b10758db77e6ba7bf5cd6937ffd87669290189ad79d269402d88678d40c9d79a9bd7e715c68cc1ae7fc445f687921ad7c203f97ac8fdbeb05db9ac48b6ca9963dcd232a2abe034c81254ba3af25c718105e7b8de9af98fdca4949cfb502e419e5c0bcd7b8a4acadd10bed22a6a3ea446096cf21e9fe4913e951f1c460ec796722db5d16cb957cb035a1732dc331210264fd169808ecb518cb129fcfaf8f78315b8eb80f0df7e1953be3aaa36f5a1df2dfcb49ee86a965a920ef099953bd53144ec49b2be1e49bcbeb3aa3838771aca159e291b502b8522f83d1c6d60a09c6e663bb3dd9ec9034f308620e7dd9d18985e5a3cfb6a73ff953fadaa748dc7d20d5070451f6d450cd94e6fc6a35d91f3274b232907e2c06f95e596329a88c1647f9fe6e1e1d5fb67ce5eafd7e6aea3f2aa3ae9b85db8fd6a3e64be0da71d8b0c22b09bf8491d17fde820d2aed96312ca18307df6bade0cbba87ab717660b64012a34bea436fd01aad95cdd671e3d022007d7ac058544100d3d1c61a93312a62b3127280792c0f3e1fe33f60b9efd6c4cbb3d332182bddaca3ef8d4765773374494d8d7ed3c20a16aec95189f532658d04a8074f7f3e736550955ebab5c57d26491ba3165b98fb6b1887bb683542123a29cdeb3f6d4e34d5ced292fe5d15202a44db22109f2c5ec4926a5908fcd2e5e31da260d46953598d8b736ee621148fd6401b3e8bd1708d92ed9b560149732aeb87860304bed9cfe12dbbee56381810a0e8fd5ec1cdee723438f05c32eeefd30e464d2665410b5cc04016ca3356ea9ab597b8809e41261a0d3a1a5dabce6ab298162963a7a7d89fba5d945cc0d8a8b716cdc8733c1129feb9ab09b1cc866bb8dd10f5d31a46f4d6887cf506be963519325ac96d7876fab4047aa18ea58d727319a4c7e05b67a6f2ef476c2874226a541f53a33dd5bd3fb08e45c4f3c280cae440521ef0203c68501cf90aca52b3ff324ea87122ec28eead96b939ee450667145e0ac8edbdd800adb3932b7fbc7e3c3b406843f115a7cd8f3ef176118a2d553a15d53e0a4ccdacf3ea988f65995f11f7aa74fcdc38f07f1f791a1c3bdd666e1d3165fb83d74ab8c248df244821efd5b0c99e3f6186dac904bb00beb247cc5fa4ec23af5bb3012d04b2882767535917f3dc1008daefd482be5d4aee5957894b0ca42065c29318b0b7d6ba6c62caa7e40f24cb07462064684c935bfab4e961be9c0c82cf1441f95cb15e478a5621cf85d7be9c31ef3934d8f2119d8a84122e6f7a6641d405462a7426e020b20c302b237e280ee6655cebda5b640eb95f1c2661040d6d73d974b48b26d135be10bdc01e712a8e9f686539a536888d60d9896d6f946a19caf74573b7707a8d28a95a3532a7358b9993efa40b14c043d88fd3c41856703e1596b2310f6c64b4db5b2285e7b9bb55a7091c3488d039461a32b2cf0383646860267a6514840e4cdcfcbae575dc53e1ddfc405aa5986f6d98afe40d0489bf5b98849af5bfbaf9287da40a6130c530f7c6195f73ef94ccb43ba1e42389cccd46ac830fb8cfccfa86340e9b8bf37bf9ae9ae79e4962367aa21378486dba1e6590f09cfc64300d0118d10706e46dcd8be4c49da76a4c0a3472792899921d9349975feb1fd4f22b5e5df78df8cc6a7ff3611a1f57cca5b614a70bcfdc6ac343da1ccecdbb5cef7135bd0cb7a424f4097b13693cfd49b234c2237d7135e42149a010216b3def70e649f2ef4eaaba4a48106dc2a1f71ca4d8935205669323c8001f13a0899ae96b1db63f2b2db3b6aeabbe239d3aaed9505b9057ab61afdffccb479766ef6887979bc12b9827b738b8511b74d801b1d042a90b023b3df129a97db1517afcb0253fcec52f13ca9ac027d0df1e04a8630cabff219cb24c0b539f3d3f5ec477bef0e533105c94ae9051e40cd1d2062b982684efe9694986168119465dc64f9852f649233f94c234d902d588a9838110716d70e0ced25d2633acba790f0265e09887a3ae995550d2e928f9af7efbfd56c90c948b7c90317e751e591c6fcab0eeb959a4e97f3e2511c4898721d880f5616005b8df10ed4381dcaaa192d6a0ba7fa4a2f71bb19bf5a7d27e8de4107e9b899d81f838be8a1cb31ccb751eee23a77ed2c68c01e0834986206b3e9b55eebe7ef9c35f70cdea52c0c97ec120b08c3230eaa82f91a6ef445e9c91d4954d1298f519c77f1c1498c8158193df890ab210a5a698d12b91dd38c49e5b3902e4ac46eaacc1895b4283301fc2249b21090c7850600b444567cb7234bf4e073af4cadae78de46ca81d1582e581ba2007a835055af5f3ecb6888c235b40948639ad16b35708d4e29150ac8fe81ce1b469ea91d83eb949c1a151bd59b3f551658d28eab23a1dfa426a103d31fd1e2e8f7cf1ab50566849c13fb3d4135d2f183ac8b51e3ac9bca3f71beda629e446620b5064131952e042dcf873a8c50ae5fa1c9acc6f90aeec3a36560a20f01f5f62fa86a7f476d245bbe8fd6b552897bf210985daa346aba7b0236f424cf6d25e91544b3bac6f8d1a420dd2b3ad3fbdfad80785677da05340972b16244ecd62b1617eb5c9057d7c8f16d4b5c66055c355db01b3f51d608b63a5c165309d5aa67452cc3ecc7dd1f071d47208269716ed0c11278444dadca8694dc21ef4d23f19a2f33e28f382660d6d439928353c450e0a862513fab5e51475e6f19dcb9638080e0e8458ec81cae9efb876f6046c97385c0c44ae1af6b9c8d38e28c9396f1ecf99a965a90f0e921218f802e07088d808742ec2355fc7ace98cb19f712264dfee645e9de201d60ada3abca07db021709ba7616625859070f0c20430c5c8f8fd8b0a9977e36b50f12369d3c66ac76d7de89c453f66d4abf8fda3c849e20fa608e68ac9002631b5eaff53e4f5f5f2710311b66ee0fa1e20bc17ffeac7faeb03e457bcf27aceefc7cbe15d8a14b4a9d5fb062f83d3da714d640e9c02dc7f3812f735e2ba2eb47d6105c12beb7bf3e14dc40fb241e583deaacab2d09723445ff964adeeac0fe56d9876736a354de11fce1e549488ac11bd76172a01eeeb74522f3f0bf1a3402e03aacceb61c09e75e832c66de6cd323ee24518d1e1049e2a67db2afba8a1eb5b416fb37206042eab8ffcaf99de258aa72821ebcf336ab43af41a0f5d617d82c8cd9cc9f0e094dbb8389fe478bcde91f229c0dcb079ac8362b707e244140d9b5babca90a9f934736427ce0784f932eceef6e9247c75cb9ec2b23cf5ee459610dba848bee00d0be39bf8e3f16b0e604dbe8321cb1d8420234f554f5742107727575c7d8879e0f17ca3e7f0b70d1249bdfb33bbfe0fd36cd9859086aa70b1a97a1dcb3b61ab41dfd5c94e4ac876fc09aaddaa65fd5a0261893a76934ddb335cdfd9e8c10078c7ddff848066c703c8c4105aadbc0de0afe7794a82e82c2899b0bb6e615241b890fc4179d1485930a1162e488da791e4d7f0c08890860e27f3a1185f2bc27977d773230037f75341f01a4edc8718e03bccce4fbab331db5215d302bc7a77e6a8e0f9609411d2d462347fdcafb1bf63d00ab5b92b1f0cbe641395efe99ec9784243a026f463ef48856c3089469844fc9265381781c5d5aa8ec5020d23463a989c6ca8d37c86cbc3e78e149766b38d48b9e8fc5d38a0907c752a3b55bc2038628b145ba9a854c32a397ad72d61918eab59d8d86e52d05ac7b2072ad1e379d26c678529cbd575457b1c62128217901e643bc2fbf2714e1426263c943b41c1bcdce4cffd335650877b43a5bbdf1b43cc85cafd1263061c34918942e01fd21c0902bc1d5a335a26b098612eedce422fc04d06b418b3a060f35537831747daac53d5dae697bd9084462e1ae01378b01dc4fb933620a672249554d8f78f7d565fdc5194de3373dde9239045fed8e53b9efaa35f7c320c79482230da382c5ed44b068f4b54ede499c41dffaed33be74dda7211164c3ac9138a7d48a49e8f5c11a908a9ed734f8ca6f02729f31fdf4a3bd93b3dd258bf95d28609e91a2d5331a9619e2f83e6cea5f6b6dcde63114a3a2b006442570ab5183eedcd32ed32a624fbe39056ed08ab3a8e45869ee1c3361f1ebf72417d84adb4bd73df91d64da8886d9de3c5b58b0df9abe2b77f7903750bae1bef0a1118bed68dc5e4e101357440e89cff22dab509764411ec57ef2549ebf31421185518b046da4fdc18a1b16f7d8ad74106cddc295682baa75b7d659e80e27ee749468595cb617c0d764fbab1a3bfeeb7ff0f3d4d408e0a0a757b28d82457bc9a8488e77c946a574f05f0cf4815bcca7463db961e83513835311157a290d29b87c43339384576d25f7f61946fa6a72c6c9bff691ca4f8bcf220f4a91a7ce7d68539111b28b55c3c2a17cf31710e6aa2fd26a10353a4275d11913008dae13e398820a0a76cad5a50d7b9e99a17d67899358bb1eff95ffa18d4d75ff9194348329d1048460bfd4d4e1c97fc31a01c84922b32f97106ff9a4bbaf23b095a064e9c52612d5121d2074058958f3339a923410eb205a3778e2568a327bd1fec70afcd209f4990d61e6c23f06e1559995987e50363d87f60e09d06b79cf6741e02bed3de464911719dfd50f27aa30b1b0e373a2cc385d1b19a8ce6063110987384048775d6d6b8e20038bffc498c28b999f4a70b937f9f84a387d8e156dab4ba2d1a03087cd2f7b22f2e3b7e9a7ffcc266cf1b6e5b73ec3ea58fe5b12a9a0548968dbb9b152b1e9cf3cf51de1cd1eb5d1caa96f9ca70a529a9f2218a064ede24badb5830071a0cebd63df79844a726a61ec0614db457b085273fc1aea46064ab1b477c9d38fba64cdd970fd6b94f732eabcf2316f916bcdc1bcf98adf4f714711fd8c0df30a3687cd841986084110d184f79bbc79d18edd864b40f7ce89174efca733bd5c6558a252e4e7f30c22e867215f7e23e9db39817e1186856210959a9bfefd036fc42f1b5df0cddeb8cfd14267283b5ea014be4e422aafa6249e6fc43844891bc5f0ecec93623295a3cf854b16c1bc7b21bdc30f877e8d2d93c7b811df13cf5c1113f08955166a1e6af9efd4240cb0dabfa579c8fec6fef39a143944c7fe3982072db0eae3a2703e40acb3768669090ac0677cac858a0d9bb42ec10b59f69521f0ad4d556cb6ee78e433b3ada95877a6bce91ecfcdde0eef818783911f96fc831a989ac99ca9ee471bfe66f7283e00faaeb0a3b5f2804a547d5394efbf9c21ff4d30920e0f8509ef80708e5417a869446fb636593371644ce19d90a43bdc32919533f3c56b5ec60ce84a345375d9e70f6354a175b63a3464aa36e4041baa97fcc021f80766c385519e6893cb9ac850866864deafe5c00d3308f1a2b6d2bb557c5600c93a8e2aa7470c8de2799754795ae9e55accc8353b8376199a4c38043466806729ee823c9b6a495f8da85077e20acc783fa36503ef21a969243642e658e78f8465ac2d0afb7d40c117b4438ab3c12cd00bb786b6e5f21819abee388927681394793937bfa194fba8125817bbd212beb150bbf7bc9de82efd936aa16b7de4a3c394e4d033b0fbb722bae518899df8f1ab269e109e6d0bf076ca975fdfabed6505e29cf9de9a1ed3899b50cf2b5211be7e4f5c77891477a8cb5c42dca203bcba9a885b2555786afe05d79cf5748cb4a6c3d5bc6c2e2e3614e780ccf4923a34b4ce7dc81eebe0afe303d1c3468d796072fd33d85c4134aa7350621c0c55b053a59f70919ccec86b5680c16ccf54d6836f861ee18f6a1e513cb472e988e105ef668dbab5786f3722f137cca46fd8d1efb5adca830a7869a2e33a49ef2eeb5fb7e99a4be6713dc44615077a67a841fa0fc689e307c786de9ab05b94367395e59ec8e58f472ab55cc5ba043a3ac369988721985d609638569ab826d1e2c45838c176baecfa89f7059a9e1f0ed9ed4e072ba7e44a81fc187286483a3b0480b4934e273bcf6c98b09c09e40a790177d71089c218840eff71097fd983159d21f1b9e2191b42295ccb5b0df7929bee1a74de5eb96690d1f61a12bdf9e2eadeaa05ebbf9db18c74f3c05f1f2f670b22b895a0f947197c87bc2b08747c9b99f1b59bc14035f6a9645b38f35d269a93af8abc5f3edcff9b9d02e931087c86993573fb6a82171c5756cb223a5e2c38b5bff15462f3102c15634098ed2426eebe00dd2469cbb661b953863d217960e207ae14b8b795810ced09ed821622c69e88a38e815d85a890e352bd5ec5f7fae818694a02ad9b34eed34719eb78b7a91f8d50a9c48646a55ce174c5c51026f5f825414d42fc8d084378fb3c8780d231ac8bac7b709c451c4401a01502ed552b0b6b479c3ffef531e0b0f94d764d5c052544797b8932e41a8724342f89be86ac1038f6a02ebaca849c62b19109937df4c89deb115e6bc59728901245c005d31e270f29ea7ae1f3b27511b9a3a131ff59a8fbdd61b7432131270d189c241f0dbb65f65928ae4a0a2ca3c151d3b8f9dc3b8e065df1f0c713def817a07bf07c302a98aa8fb29b8cff11d80b0b03a72e62b803c0c3a66ffedd75257f59f09ff727133f368e45c8395a12a25be5e5285592f5ee9d2848726c0360967b4ffbbeb70916958f50ea42cf8573e8727d2bdf811036395ecd60465596a7bacb375bdb2fb4dd95474574f509bdbea9baaa2959af5c380589e883f895eecc9e19f573af7c15d865ba4055446c01a1ee8c95f84f41e0ff4db2379efdc6684075e280ec1d09c5743fa38f7d6627fd339a9e9636b3c521e0c946523bc8471af5001505ecb42b6f6dbb03326e3e9522b7aaa450b0fe5fc474651a75b896cb8daac28f9c2c6b68b071f4c8cd9ca31fb6b0068293c268dbacddd4a993b49ae8a55243ab56f9be5d72f3173e306ccf0cbcc6ff775a3c6c17466fbe6289a04abeac64b4fe515f5195f0b4a6315ab9d2f19d84b7e6350fa2e9b5f81263c1beb9f9425842bdf790e8ba94f5b9e15a47cd22a7559f6413308d00d17b2020f02fb81ddb492f0ec27abf078fde972b34e6429669b08246149dfc8f4c031771a511d061b9afb052e563fd06829ac3e504013d51730dcedd8dbf4bd268238b385c93fd8d8e3a5c716b5f54a78be1841225b328e70262053fc9d789b09fd4e5b3f532d5d6920df27ce94d14e52edbb219fec913e4ad4fdefbda3669124547baf8ef36b566989d08f8913802e4212c54e5909be35f7da8224a5081d3632b6693412889c45b233a95b7dedb1940c5416b3ddec5b1f9a23f481567b4605087da22777589001fa05faa97a73111c6c8ad1dc88ff7331ec571ca817d400c9e816ed3a98c857a880d4c621c26d0f53a5164cfe4ab3a620c89e27e87841f0274821d9eefb6d75fb3e550c0973527ae8004680d8434b6b8ff28f8d35c449733849dfea20509a3da6087d17c101e6ced9a9b0971ed504d49f320ddaefb380574cf367193ba188b73def351025841c5b29b298ef3a0b93d6acd3b0d0b3b6920907d931047c84a22cfb475a828873bee7cefd25633eca77229d96bee2bf05acb64c0c0f287845f787be74f271eadc35ea1698a4601da097888d0a32a1df672f307b281988c88229b03e824f9d8b84db3c2f6483aa0a56216a8d7d556b209e1c4e07680c2d060232f84a07dab0a80e8f69f7bf73e0594d77af4976b77aea3371089040955b9316e7ae9df003fc21d475c1649a9bf98746f45d730c7b5d3f4fda990d75499a541755417adaf105b90c3ffc1c03e435a4aba4e66a3fa908e233871981e45c9f123d862045149c1da3b7bf1665ab0a1ef9703c9c753fb46591d4fe4869cecf543637173b5a17474e2740a5a97512163f7e047cdbbfa43431aa76af84242e6629f8068eb12bf4b5ec9dadc3db5c2bb18ccf3bbcb8a2e358e979d27dc03cd5ced6c692a94864c4e28ffd662e5d2797a06f9b01ec6ddbaf8bea33658b192161852ad4e9a174d8ae7ef75d9654eec433e4cd82946f770d40b10c0be06f5c4f477dc45ba334816120c0da3db0a306a8378b3e1b3ce390456feac3438e15f8417b0075a44cc3af0b1803d48593f1b425b165a7a5ea9dd87ea59d54a2e215614c4bb588aa62d0b068f1d29ba988477269f8817bcbfd649b5b23323140c1d0d93455ede75299f6397a3f65fdd9b5c491e448c97a6aeb64edba1b476c6739e70a1d665b7925e1261fe6f7e539971308a895a2bc7870a3d1ade430fba3d6c9b60aeb3fff6f3348e9ec1e650831b3563a0afbe476cce9951979f9044d45b054fecea80cbae14753143896fc72b03d701b62d870393c372163e2eccbd10f3d912f12bb0b8f510c28cf6c6646fe53f5d21f0505d68f3232d143a9a633e7bd933c280b0ad6ba6bb8781fff793d2688c3b87d136fdc35167c2baa127eabfd8e22b20e1f684e15a26f4f36391690fa58d96cddef9cc38658372a61534f7ab35220007ca96c50adf44db6abde37bf7ae16d5119f377f2acdb403e88be06a38d174abdc816d7d67f8229855ac2c555c82cad1b830094d1312eb29e7db25608831823d5c4af8dced7a2119aee5d077ddbac058bc5dc2cb90e645814f0c4c2fa3919b2ef6f34759b61dd147e6b87242c6e67a45318e4d08899c660ce775f5365d2befdb051d95a15793a56da5810d4805f592623ac4c52adb1a0203e9286592d24b25367f031748ebfa6629e060d323a051c77c6d46f9d2e803b7bb624a93d941bd9751b3d709e558cead18f1eff7b687e2bb7642a1e2ea40eda84848f5ce8944edc8d24ecb1abb1763a5f3c976a9a4ef1d179d97177475aacd3e1a9da3f984425a1159f0bc2afa2a261d5afe6a347ef948846ee2b143638c70e0b79b3930e2b7b365fc7d55fbed182ad9e7523f68a0e1b14d919efaaae0a13b375d48ac2f1ca5f214f6bc2e7418105c360521e13ce70e1a27d43e344a4720bb5977eca460a4081f405bcdbdaef4ead15f88cf12031edeec33c3f7e6f4a2247dd41cde671b0f099605697539ba4f7ad2f659859e9f35d51d3efad62d670fd4a95158e6217fc23c205f2f6e8aa016395c3e3c641f8351b58bf90a87169cd1bcee1d7ba26aa54cdf9c57120dd6aa9506d42af38322589490ad533b4246ad4e4060a73a277906b814535861adf4c7e47bb476e1e51170e6c03129604c061709ef1a9afc20bff82495250b189f2938255b787a26f90b3b2d20c1e82705135bc915d1dc528d14127cce0f9179b5c791756c3a3a3e819d26d791603eb738b8c08dc1123c17733a0c6e78a642f0b62361de0cf7741dbe45fe10561ec3b8ca9a96654373878fa1041d66830c21150472bdcd7ee7fb6826ee097f23429dc506db1c237d82ba628b0c132d55ffbf27d18ccd49adab78017cc8f03cbf25d2662813f424e51135b0549a399faf74ee83c180777cbd8a98ab1431cc6b4457b1ad91847e0583430b3c92eafd2a6b2f328ebe72d50164630af3714ae07a02ec688d50d8257fdaf4e74c9ef40551a357cac5c7b6c1e3d4d0fb4d22dcac05f5e7798aa5887eb3454f0e1c47e95aa2e6b8f519475adcbbe3092a37fd1f23ef937979deb795043b04fcd8fcdb6ed413b66c7f3ea0a50daf316d7885faa417a007a7ae4c3374ecfab2e02884e5cca651457b69998462a2ed526236ef5b97a15316922da5c8db050c69978a9d09abdb90cef613fca98226437202f1919524d8b1360284e1e56f0abc8bbf6b8b0d12f55e5f6a824314231564a7e7057f4f1b7fbf4124b1e473b60789885ef06cfda11db61cd0964416025804e6831edce5b2c330e46a864ba1b2b794c568110069613b3debc50dc7a82d41155af87bdda7a007c555f03f18400269a7a59600bec88f4cc882bfb21357ba8fedd5ed76407b8c24e01363f8a4209d80449c148c6e3456ef4247f1966d2e5161eda0be76f20a9818bcc5cf5fd916df3656b1a785bca4c8054682629fe17188de599ae0fd48d86e99baba9885b75760ddfb2719fd8b43be5a7b81cfd97f2b24ecc91eaddb29f707e4b4e259b6b37c73a466517a5ca1242f55e58c650d6c432fa38829a0e1872f2e615cee17ecd5e798af1053ce952d5256f0078f1fef873367b277dd78844b96f8f52d7afc21a32de34f15d9f03721dd4ddb98ad86bf2d68f6220b6ed84498e01ccc3877b4cb33dc6de4931b3688e7c81f84d22a8a619b90ba66395311713ead96416c6054bc17e78e71d5723f7bc61eb3065754c4852659a5506ce5126196826715d70fcc7439426fa5703fc1050ec3af1a3cb56dc9aecca9bb2e07ba40c6ac24bd424a898bcfb314d1fbd5183795ec8be35549827b6c3887b96799eedd1e71bf3c45e4c6679957681ee25ca3b4f447144b132f952d8ac90e5a2f36f96cdf1420cecb2790b5df18a42b1b66fa80532c17d6691b7ec98bd8a9bf1925d72ef67dd440fc89e67c4c9c305570174a06f52cedded0e024cfa996da138574a7581f639ec1f1b3fbb636067d1ac18aa23b478be746ff04e61cd1d31aaee00c3b9d24d38ed7d9c9569c870df3ddd5c1f4f1cf9419fec7274b5b608f891f5af8e52b2001e56bbfbbea2551943c9242cba59244ffbd3a0d7a3e5186e1264f492fef144a34609d189e62b96edb70a4e8a9564d5b720f44d2d11498ac5a3d2d9fe29c544104bdd95d8ab826f8674e343740476c7a91db35a8a37c5026207d8354fed1671d767b79cec07925089ed2ad89337fe6c1b12d62b14dfeaa992d15f32b495480d4fbffce9f16e42e2753aeeb44ec649f692184191198346b7b4a3be44e2f63d18150a4720b7661938f722dce24580cd82067c289fb9bee652dc7d52d1dfd7016d4b7431be8b727b0b0262b5ace1621ed17440546dfe31bf347bf50500b2e3896a47897e19f7d41b4651a5c34fae6c0888fc240e136506322686edd94811585ebc7b72344ff2b74278eaa75be542910f5cf919e1659efa057a35bb79040d6d4fb040cbfc176fe9d09fdbd35b247b3c02a1b604055ca9a7a83a10894bb48afba419b20e32d5f8aeedc54e43c4fd352db06dd7bdf8ce027b2983d1059f9fdd1bb10282263458f65f9c4a076289c97b44f85652840e5183d499dfd0442fc786c9c94701f6310301561aa914e1fc315d2520219a9c6aeb5b3c05f910f1ddb78b56d5c24e2780dfec941cf626b2479e19c8473b72bf52454eda9af56aa64aa8aaea1963549300a39d8fe44f7552abdb46457ccf53260edde98b4a29d091aaa857051db1a97ccd9adf2fe0a9846e7a2a5a616b65428b86521fbc50aada561fd3d9f3d2aaae8cca980c516bfd90d3cad868fbda4a6821c1211a80bc1dc4a18a712f6253d9722d1abd1d22264e202265cc863ca3078f9b80a0ba49352c54be703da7a3faa9cb723c42620c250d49995be51f72412a78dac4aa47e878812d7c42de697903474bf93ed7b060f5f449b6537ffc0a94a0432b8f2f2779f31c82544bc3050bff9ec517f8bef0f7aff4f55613b836fc17061b2b1899687f9dc463e54ea1b126a7a4e904ed6abc68fb99170d9e8e30a8dc89e4666d42a556e48ee48e9adcb8ce671083320a5f9bb40e2bfea419aae0d497322994357ba33cef07ef72c519fa4584917011e2b55f91e00314d823626c105358074e4b09d37a68f60cf6dfbca3c1d829d194dec71f80686f4685eabfb7d8b8476347c52505e6ce70fbebc57b933aed69319fabcf8a307e5c5aa8cc34748d06b0b98493ff41fecdb7b319760218f09c581c4f991a05b280c1ffa7565ce92e6c9dfb76f3ccd50a0e8e5f253a3a9ced6fd55618a33a3451d0a93e9130993daca5cda49bde61b233e9eb5d1ef429d622a9a12f64c315c079ae1296206cf33e59f487b812ccf2863e5178909648412d11108cdc1a24d754b30812181205a62a75fc1290a27662fb75a45b7e0c985fbc60ead0052a95822ae742553c09fd66e9ed240f2bf38403aa68e8873decbfb7b79a68dec9c02b67c381e6c030de2d9de570df5f222a321af4b3cd7cc3fdd0508d2af2fb220b07003e297b2325d6fa7c682087a0021ee85c9188454393a81ffa49b2f6f394da3aea4c16f387fa9b7a7e9d3be8dde385fe5e60763b3db1e8f2bd520f3a456d50f8ee7a74176c58c9ded6ac590adef7871e40c5393a1e9ae435c2b10d3b5ad30f984481525ebdd4b6f960c2a1aac79c39a0c392c19da9c44cf0b4006ce1597097b71fb5daad2cad839085a6dfef66b2b4a3d53db8dcd9aca1d560e9808990f07d161a2f765ca5149e7b97afe01a3edcf7e1e00660291c8ae0811dfba945d374738dae1b074a5dc47b4f84e233c31d160f642bacfa08f470ebbafaab402aeaab412f649fbcaa96e991f5d97183cf752cd847d8eed07df224400b884bbc991cd2251e770e689a28d937e4b1c8d9cf6b37b3540a921836b311fcde4c6432c9a9e3957604be57a3d128af50332df87c04361ba3cc2410ec0a02ed225b96291c6b18795a6cf3ef44e0369db0e5ddd846aa0a5f286f527966a4e52af0564f61e1dae8fdab85f353d826c3e549a5658c8b5654dea73eca4357c64ff00f510d32f069b73c5bfae10e91ac16dd89b856ee985a1fde71ce3d6720aa389f2041bc5dc17b2041fbc7d0bb7c3d4bf2d51c0c860796363fef2109f286800939ff9275fe83c1bdb7736dd95ad7eb0bd2fb445dd271fe685ae0cca8b33a411d8da3959a7a2a9c536dc4c37c47e6fbe2f48b0200de028923ecf7fba10f673fc4fc16fc16271df11a239a2a17f8f1121f346325a22a4fbf5ebfb2ea2667f021e69484c1c0484f83c8d405c0aa2fca77a39394bf6cdd75b9a649987927fad52c1d0ea0e4a6b8ce668701fb9b767c8d89524cdf67be9de0b04e18df6963b02c9e33fac7924f37a8f168b148dc07ae4ef99a01f0f4432d241538b60552a956009b8e5369ef99477379a4dede4b4833c55ad35bb0fefb4176335afd188fa59177770ca7d13f0a222742bc5244802d8d5d98584fa3f9459893234bbcac36ab5dc7737fdaa74a4a7a97e9fac717fc2109b2213513d0a5a182bfe04d0e75c2f8c4684435f92ff336ca3d0b12d6e1d3bed9479f44584f1ef0b16c8b5fd4c5bbf927c1b054ca8b29e991ebc09c18548848753dd1d62f5634835b548fcc76a2cc46c58a58da0aedf1581f4e82c9be2b8a90a08842ade6570954366a3d1794de986f546d941cb01766963f22c4c5b67160a46566d6a588dd046c8d9ab6e48a3889c309c3fbe3648441989916bbbf5eb3c2dc73b663029e37a1924a0d89d1bc83ec4ee1d1eecc271c28096c9b69acebd9140b8b48694a68fed6737229b5030af548d0b272617971f382f7f394f8329c57f64cde6bddf4bbbe03632484988f441af33ebc12974fe96a2fc0b6833139e9f6feb367b4620ce630709a93981f1059a3b849600ce9c52aaec6228c97a348edae425c25846fea14ced5779339b69286614048e3d1815c45e9a801aa0b0b61ab3917d142ec82ab516144eed0d9e5f23ad9adea9674a586311957763a1ed5f6985e3d3a497c389011be5a4c8711ec3aa2e803b82180e64415ee65a84696bd02c10a18dc64db77732644aa4676e4cf5572d7520179f84999ad152356ea6efea0d448c97c8859d139ed336338ca66144bbc71f8fd302780a46c9faf47a15309c501685a36603beb01fa401293a31049c5bf9529f02e6648e8a565bf0c823f8e019652c15dd5c6e2ce7850884d8d692d60ac7fd25e32b4f878253270f47da7af439378d03f49f34b7ea08cd0ac58792634274ee40582946ba613263192415012b7a0ac017960f350656195ca79d753e38d0c141fb85b44fc98aa7338eecb22e59d78072da1515e5892e537624f3b1a04bbc217753a6d839f479ebf29df1c30b2d3575084006c745188638ff3b9723a71ed3d1a82bd741ad09abb6b2dde7353f06bf60c3fbd0e4e45764300938221d451e69bc2001e5cad0adb5debdb859875d418ff11df0111310b86c39f1ff79085bd965afe9ca964683274cbe6bf86d0da04d602881e9ef8fef3d8bf1f47b84d73b056a345228fd2e93049e848e1eeabd3f4aac194977a27214c3d7fc956c7dcc4bf0064ad0b961ade520fc6fb8883ffeac819b6867a64888bf94479d66b6ad408d184ea25f31f003bfa5a84f681d925f975d8a73bd5eb4f4f16477db4ddac5cffcfaa503419b8a53a97085152362aa45af14c11bc7cac7fb0911ff816b80f78bbf62da6badd03ac931ed625569cacb0dcc5f5a8b54d419dfe2ef83eb854d6f8e1f4b89cd1c8485bc86af725dd0b5188f8e56aa428e58f11ed4ff6acf9ae625f8f6b287467cc1935eed8db174bd7b05aa9bba5aed165019b2f3ea22c79e8fa274cf2917e1bcb4d850bcdae0609ed7a70401e87498af46d95a342b98bdb40977803942681cfa93e4fe5c8a2c6523946503df1a23817bed3a94ccc591aa969396730064acb69b6cebdf8d53f3196934d1666ef560087c18daf3ef1474780c60fe0ca2d2e364f191eb938dcaa2abf60ff2d09293059f054ae14ca728602a8d22c67ce1647d0fb14a04a031c529cc9828789b61956d38843937837e29cd730a7d021f80a927c041cd4b76358a3f953d71bf3f14bd96a5e5b23ff5da9b29ad1add5c72a88bade7493d15349b71a26973c99bac6e226449bfa94799aca1bde2d3ad6272fc4b04260d0b0aa1d1358647674cee789c9157b7eccc67d4ffa1a0e5ae42512e8a5260c1f6efd6fe3221c8a66e5dcbd61b8aed17eb60d997945ee622d56f14d945eb146da0de4241ccd5f1861293d77a957b09a782652391b89ba652d51860faa0e3a9a6804b95633cc7af5a40e5b78cb2eaeb31e12ad5fd120f1658b2542dd33f50d7687d5ea7b4953ed1a69a3a6085ff15be50e59c8bba334dce41aa4ac6e4597b7b64af6ce81d41233a0e46212bc79964926d1dbe845cd3f93338adfe05dfcc5940a4f27b6e8e41337a4d1401614d0f615780588cd1f3aed1f381ac0d3109bc25e615d82843df7aaf6fc6ffb36765ee73778897e0061c30c1e876a3a004ab060d5e0299a46f7d82ea65589b3297c918d6e6e7d6839b0bcc556c6341e8c2c7ce29b156a750e7942d190dd727f1a73acf74ee70662666cbfb2bf955b0a9d66576ce8e2b661e2bb414174bd10246eae2d1c6730f245ab4de64918dac0db28b84851ac973ff08d6e1a880da666dece49fb6680cb982c68ea902fa6ac3c8ce918ff5add870b4d1b13c3ff68c3331b7b2242855620087fdf4a17c633723569e08a5832e831d2f72e067639bfeef966e5c5fb082827756fb404a7c06036942adbf6efcdf7b9ac8cf4fb115cc1c0ccc19a604c958a0b8c856bd81170c978778d7d55e6275b17df062dbbf12636813853bfca780240f946df9b8166f9f578ed4fbbdaab0dc6ef6e685ba5d9e3234a1e2582d1a35c38d21f97802f8968a8e9cfeed152d4f8fbdf646f8709b05b2de636f141fb9d8a939435d796ed4a8a98e0fda65175bdf93a25949f69bccccbbd382f8c91de4d9dc4a944939adb965c030318a9356f3e71dde0eb805c229917d811934fda8cb19611eab5db116e2bb0de48c3f0505a509bddec9696e403d4d63e58bff6a3dd50948ea3829a4c5298b32cd512acef964b0bbcadfbd1a3d434c58155d7ebebf0918bca9dbcca0fed17509b507d89ec193cc43f8cb80cd8288d90d9472ca91db1b3af43f6b0a649714e51f875330971ddbe24031c3ad2edd7ecfa67643be0eaf16d5214a3e8828083513789d1c51b2e77a320df488148992a9f258e3463f7a6514c49716ea7b28584bdf9f4d297a4cfe98e58e0c4e9394e17588a9910a770066cb4a4f7c3c1c0941eed4240111d8bca2981ba55273a36b5e389e2577117a2a38aadb05bb3676fe72a238f5e97625fcf66e8761534c6b8c00d9be20d6861951d5cca4dbfa95c04bd9aab9b9a6636cf531144689c0b768bbc2baa32a364a4ec69ccf12e2d469912c5d7b608967c92f1635d164363bb45f334147b0443877ebf09868432295800e01135b2f09ed77ac98099595c06daadbfd370ffc49d537b63ed01e6cc182a47b10c493c99ebd26c757b08adb0e26f12050bd00aba4b7ec4a54a082e1cfe298310ac1653810657def1acbb3833062941a0e1550cd7949204ec0cc1d4dc22fc3dc83b539d73249a63c8c1894189af57ade5f6ec2b091887c200818ad9775bddef4fcccd0eb68db5881d7a1a32d9767111fe84d746099fe405e68955e7907368fd4493b2fecf97df92d07133dee37626ef66df6da8d797b291c334213e66c129edd04b75da3a6cccdf22041babc653ce7c94cf2657b78d27a5cb88eba988b506971ffee403a7f76c54c2a5eeffa8a44d6557e1f5d3dbd4c3a7100865fdfcc1f1bd2b7483acbab1fad6656a0988cded5ef1d56699ae7ef0b4dec49325460f7aa5772d911e4ed1282e9bb19264aa92f4d5db586cc744c3e1083d72f3fdb74f10cb02f1442bb9579dfc68f05e19573544b8509e733e115be521cfd98f3dcb08506443c047bc8ad2bd0487ba70b502b81a04b16b638b41488fff9c2ed773f31283955375c67450e5bd1b0c6c99d089ebd6af4e1087b0e4ec561dba9ab2b797596a4312ea40a1aed977bd7ca14e56662f6550a0b1be5b551f78700b1b031078e6e26d73c5e0b37939a41126fb098b0b854e10d1c1756c723f838ed242210d7c9458b6df8efc258205e292b7d43c99dc328f534d2b93ab68662d277d7f85fd1d32b001594fac6c7b31002849b35da309120f5762365080c79b27e92aa8538877dbdc58287fbbe255d3786b8e790d92100d49aea4288635a1e4736664a69441a712b30d143373fe93a9153e6cd60678b83183b7f6bc1c5bf385e75a1028fd10fd1cae95b399af816126cd722547481b2b3a4f19cc244bca31e8558903ff95ba234f0c6fd0d973d4a2196b830bf70222e747d0ba5e7bedda2ab4b3279eb8e8993bf49a55642265e728f1d8d2c23f8d1209331e2db8c01510703f0b889ff5614da19cae1d8727a8c24ffecb7de1620eacc6e3a5aa503f15d3209bd3fec287dd0484ef21d757f097cabe6f495a507ae747a9c85b1bd43f8d89f3a58c91942b87432b96d8a9149c14ce2524ea4c2cc68cf6fe87610ffc058a23cb65efee723f701c78dd754152f618a8a6b5bd0c50807827bd47b25b20ed8798b102cd35964019b880008ccee6ea02cab09db394b47c6bbf433d9e442c1ce107bd2f3f319e1ceb0c66fbfd5eba095b4528f255a61fa68bf47d5d8cb9004355026e6190d8d0e0899936f48187057a38386139a9da163fd3deb4020b8d9007beaded28333e74d1be0ccaccb4b732e512f8903cf77f2e4f9f0af3372b393ee6f2537d359a690902525b0c2701cc487e004861fa9bd25993e928b3ebf4269ce169134955934a369cca22002ae718d6953f801926c6c0c1e822d0810761f177aec43ec579413e811ebd407ab03b5e07ffa65512ad6f15159c67b476742eeb31a2a7edd86a0ac99634b8f2ec682b1609b9c101ae789f5f561ef5b6e147ff1e7215d3d147e18f4e170d1b2686b6a7f3a6bd9e5a309268bc6321126e673ddbc9b3e9d3d7568b1e29665eeb8bbe06d7021036d83f1a63f78e2939b974ac7470512df8373a7283dd55df2e91a43a8e58028ca4f74de8e44182eddf50d84a28f52185203268df4a9e6db9c647d4c6d58733de5d10bb52ca65de2257691029fdf329e37f5e61d0f2a29bf024b9a1160ad98e359181f06b81f1ba7285b76e057e93b4feb98c16239ca9ab7c4002b5becedd9ed626aadfda6d29eceae190cc01d585f39486b019d9ea35ac3c66de125244f5ed159f0ad808fcd3bd52fa6d9150e103f38033383c7b12e6288ca7df1113b86784c0de9442ac1394dd31ef888c9cf101814eeae8799754896d73a9cc8e9fb90c06e236456fdb357d8f9fa075ac626ef3cab88ffde1a25b8e97354f20d6f853fa6e2cdea9dab99f06b17c1a29f796afe6ce177f2a3edcc5b4b9ee6a7c135774c46997aac129985f7d97aa718375b2ee3d8d56984b6205efa14faa1aa3c29a8eefcfb31df284f074ebb1045b5ee1077e8777ce1ae429a838bd659b6db66b6b9bf8ce6f7578ba1eac7b9f580bb4d0d782de27c207925b6cd3356bceed125202178ea2adabb9c02557b87fb59511b9bf3c2363cb3858d1584a2d1920f375261ec08fd0f7d8b31f2ca8b6b884946f0ced642bd1c4d9f53aaa5de597a24caf2d56d919aa6895baf02426b46ac47b8a57bd39068005d1f5942bc0ef4b295eeb9668d5b163c07fb7bd597022b69403ac696421f3d415228f53c968d79f595259844677097037dc436d381e10bce9f420682c3641cef7b5c7aff0ee6338dc650033ae01f6bae7825d52c9f58a199765da1241607f224a4d6a98d0404ed3d06a4a271e1bc63b49fe1c2a544fbddaaed528f6aa48b7d6e204e9ec8d1e8b209f4e4cd478c411361f652b550005322f7e3501e26ae0e4d6e78e1dd846d1a64ed5693e7e187009042c1b25025f82a6d19f3e8865c9c1169ef0ba7143def9dda264fb0584a728ee972ee026e22b7a90363d532ef6618162bdcaa8fcbba8948a540014136d8589b709baa034c0a6a439e0d18168f3f28f4e5f79a22382d57da88eb58668e2600ef7dfefa25979e96c887665deec6a9917381187f6fae89d114114b8539eab4a76bbe3469324330d98ae28d9d54e8b854e21cbbf60211d82797f1a87b5d8d030302b34723a36488b11797edff7bf76a263cbf97d03d80cf9bbab7a93168ce5afc018ed9109434d94bd764145fec09751318bfb8aa55d3a1267058c3285e6703b4be03f573da8ac6598182e9511b701d860bebbd871433703ff2da56bc3aedc7257909a82f417586f36dbe82574a5645145ece3b171a4c8fcba256edbb8d3684bc6fbcb1d4305122610a150ccd856ad3d4fd5b57f550cbe1e0bdc719647636c86d2ab358420ec39e8f6f8573b57f361a28333f5b21a50fa77179598f231aed6007397a3cd96fee932546e62627fd76775f3bd0922a045ec8971bdfa217f0199bb264557571eff6e19fdda22d0cd36ccf1dae8b04d97c91aef38e35fdbdbc9fbeb1563c097b5af88ba04134bba85337b3b9560096c0d753028150319301020156f0e036145f8649b4bf2b0df71374e70a6b9b2f8ce3f7c8b398f777d2ec623fb7366f9b1de2939a305baca25a38a9ee9fc085c815bbbc6a5950089cf6876fc2ce0b750a9febdc9831609358ef6a6247f1d12678011e764f3770bd4a9731806f299fc1bf6eb07c10cc292a3dee42333a5b3f8bf8ace650dcda1df8d76c81f6b91d60da4d9c91e3fb6135462b4a011b06dade54b65471576d6748c2291ea1c1df3774223d22d8fddd0dc0e29ec0c3d86779b1a1c8b0c4889009a293a1f45cc325e0d521f52482a811f6b5a64a9a08c6fde276e3ce2a50228639ccdff271c4f033eb104ef8750b22a1564ae48e3d0124697949e5dd2fb943b8a523869c0140f6c46db8bf5de3b8b05a84a48eb7e1bb96237df1b041437ce0c063b7da745a37137ce4d3936af6f27cb38cadaeec22fbf4689efb3282e9c162cbe7a1fb201212be61ab45823e50ba3b7af3e5cce77cd16bcf1949c40f28d87e39d0801eadf20313ef052e95034b2d1ecec04ba0eecace3f1f6fe568bdbd2372e1acbdf857283fc8791e2688187df41617dcd5b8b0ef2288a16a845b418663a8a4b6647b322b9e3075bc1dd7b160cf77c6c5a9ae18627d267e4656af44157c5e88207972c5cdf704d8419f0d6d619e604035ee1c13dc79f4830c05a5305101f39605c3e128aef299960176b043a0ed4acf746a883ee17368aaa9333965c88a55c0ec54bba557322b0f63c7f3c46aab2396d9dcc2fe4465d53510bd71d2410721d52d1d365f998331e0fc13a92a953bce67db65821a2ddc7130f53f2cd075f7650df8f2dd6bcc7504161169f7fdef2c52dc381ed57709c43b09e0bd798f4fca3009a0802acd665cd74e788d91b623f8c50534f225c376ccb1c5c4f00abbcbab59fac078c9e0c318382f23d81e2c24e737f2179eba1fcf794b2cb9ee5fdd597adab868fed89aa48e5844028a76b95f9d73cbc2d63655c3d9173c678883bee09f8b6a69e3fc6ac001e55ce894b018cc4e00889c9daf8a64a2ba900e44a32ab266663a528b8ce2a3d917c2d8fedec31f825976d1965f746370f883da87081a81a8455e2656ffff6f0ba1e25f34eabf67071f907b400262dba2ad06ec7b63edd782a1234daa820a1be27e145472d3e2468c0e2dfde236e5627bac96cc253a06b35d27d313483cfd6c9f9ccaf219642b1463b2d2195a0b222f1cf175916d5925adf80b9274bccf8d0b9bac96d60e129923ed02a88bb0c6602b7475d9388902269e36e07ff2377704914b5cecc7ca2c5e71b3f92a3c473b9f6862f04e9d1a01ddf1dba4a0675c33e039551fb961f01cfaf81db9e06b2a35d96e17c9d619aa55795dbb1b311f846884e00d6e87f6abeb06e02fcb5b1e65e30e2b07cec4994d3bfd5ab8c09aad04447afb507635fc56d65daa195abe27c39510fd2d8d171e1fcebc30bc237de21ddbe62331d1a75350125d1d3cee5b397f0ac95bc40ad4a795dd9609a917b6d330311f93da66fc62b54b65bbca34daaa616ca639ad3dc56a91268a36c70e327389022673cce7a34e1af7299fc896aeff59e16f46619f6efb95db24aea501e78f4b5c3cd49c4dd28dd962682f93a798a65cef8fb686a6360bd05affb87afdc837de1c0f5a02d62729bd09c13e72d9718df50cef304db5a7cc956acaf39a425a2c74e0c8360d54d7e4cfb42352f4a2392fa61e16791e47114f701ed9918036a0870f314a84ca033f8e3dbad0a1141d254e07ad4b868d14ff921c0550712dd5f0b6ae815190811377485129823c4b4107a7176abd871579846d0683368472b8396a4b80e625a7bfd38269b84b3ed4e61e277a3a896e525dea57c2989bd7d924144b9ce039435e49cf33068c875928b24d1d8b1eaf9e0091233d7cfd9a81c6720b26272d65322a25ae0c421d6c2019ed2ba7f3c2bd4f4e7043785ffe44f4d1371ee3e4e8b37912db2ceb2de7511b154103990708e64ed370bd640c1557278a2349d42dfd0ee08f8528e334c00f3c6c968dbe07fcafa7f2822962816a30d132f7e98ca442b257c3cfd697a5f1f322ff27d072c2777fc2cf0b1beb217776a64b3b844f5c5bffc03adf7ffbe80b2b72cbb1a41bff15b9388eb0379435680443056fd2410c4cdaa24b724e6e51009ff49cbc636f841222e67441df54125dcc6098548ffe460661307514c0762b2745593dde930105b7e7aab0f65b5f06ec9481032ed5e9bfe87d1d67620986177968257497a502962a0f30960da73a0ce31e093fcf8212160005d521970aec32d8bb3564a4901f66c3de01892229a0ea0092bc7683c1f51e21e581ca2ccf0e5ceb3651ee271afb70bb9fd594583f9a77b5132fa66562a99299154a12bcad89ed3675c9cac082ea7fec46e91f4a0757f2504a954a3c78632d8f5c053853d88e2c5a45ce8cb6b146d60a00ea2a838887ba093a0f4b8d3f60c775fdaf196b0285c04937d54d1a629924b8b4290b97f9d77b1678e3114bcb9615e02d438903824a5cf16632141b7491601f6582d4e0cfa0f99ea91570f4e8da1d6c76ed4c5446a2d1bf332bbe28cc34187368f57a1605aab024d6fa5df0d156546cccf9087ec96c48792c22386d737d942d1bd34ead2706ad27f3541ebb95f9ab0e26459a25758eb78f552f26e9496e3c42b9e44bf8c4eb9459b8f37067276451a0edf6baca4e7b1ffea2d2a3dd79aeeb12d6bf27a054aee6e4511786b85235e1dff5e821ade77173d71b780476742b9f57f5c7f94ed8f83e3bae901c7847e2b2e73f312f82d60b727f46b7722482aa768f99a96f7cc656d7c625915689530f4b79712edc829ec51f4f21d935ae01ab6a15e3d2110a8a5abec058bb68c110256e86853aa0f36c070bb777a79e61be989b5007001aefe0e8b46ffbf0720ff88cddb12af7033e97b4b5d2eb1b32b97bf1c98dc91e729890e97f826dc9419f29f7841a7cc8db3531b65fa94e9bc2f6a299831ac403117e516edf75295aaf95809ad013455a009f45adbd42f1b5b1be60b88816efb3ba7d30755a49e9214283abe653d100c2d15b4535ceeeefccf2096bb64b343699c7b3af62a8739a72745ad914cf78ad88826ce5fe4d13f0c57fa866d63cf0d3f3d86bf3fc325cabee3a357c37dd5dedcdb782d0f6f3a697e74cc40295b290250c40ead790830ca9f81578b2c4cbb768c26edef75e747fbf9f67e5d568138605312c8afe513d5761d8166ada111805a23fc914ce095c3cdc0534e55c7a3910f8440a70083a9943b50712d1225ea097f5fe67e065a5f2ef34ed2562136aab54adfa540674b9827b902377713851b3f84fdf7b9a066a37b425b25cd7d31c76d96f5fc20e9568320fe73d89b096a7a0ddc3522477ae65210e3f04ccbbbd45a3b734822a3bceb53076cc5ba295cf7f9dfdf8bdccdb588595ea3ef1d28ea868268811589843d8b4f299c84192eea8df1337438c5062fec00392aeec98d201c278d27a73e811781e93b3f24fa9bbc0c0ac1e678af7b503d9e13c1c08ebba845aed88b1fb99713411717773d7a6838ccb06d85187218958cb6f998079235883de67a4b02a0da6e7d1fb5f7a996964e4b5bac8db39b932ad8994bff156be6e5e79d3839931fcb437ee729446e33fe859d439af1d52a580d42233bddae02b459e70c2febed563bd3f21782867bfc59a81afb11c226a91ba0fdd5ce377e748c6736ea7d0be143960cd43a4c2f644212444a96eb5ecd1364c5528789b7bcf0494e23df1e3c964f1674fed4ed7f3bf213ff8446eaa7be32dd0ab683af37b49a4001628ba073f225dc6fbd82419e0dbdaeb1bf0b08f92a53c32d33a710519bac19684bfb45fb60260e2bc8a5b484366aaf16c15911a75165970b7c36e995cf19f2a76cd42d0e2c7db9be3a4595137b4fb4a2e6f5bcc1dcfd34356dca0c21da1eca6fb147a0910372d0d7301df4952024c1069c054cbf0e7251c91ab4adb1c3fac7fe9484bef6467e1d8f6633d821f5ad9171ba1b12c81e3224da58af4e7f97a319071f17d84f9ac978664ba07f17475dadc09c935a0fe4fde273ad7ee76dba24c9b87647fbc78dfc7c25cf927d731244d0d42d1e1ae022583d9b363afc351f7a1e9cf1d607aded150c783ee11e782ddf6ec775900c664ea880d823753c2d0b694e7aace1e02a2c33078d567584960b1f25da28379e3f8398351dcf5d57f8d5fc4c7e29f795766e488838cfcea9ec9a9f5c05ee3b511e031aaa45526c07fd041923b04fa3b26473fdfa8035184303fe2919aec76e9a7afef21871384cd61d9efb7f0a88901f7364a8d2f14d443302d91c58559543460f3df13dfcba3f89e0821889fcfb879e1bdcf3f9a408b54b2a51f786169520c495957559cfee93b0220d110f6c3b7937c7e87f58910265b119b6ac943aa0296fe44f8b2f54a796c0164dd73f499d2365c29c0eab645487441ab8aa30a581538d61d9840c71f7b640644a64e76c805b5bbb769117c312317da1477371262eb2ff4e7af29831d905a56d7d599b3bec1d3a25643e82cc7c3536d277fa0fb17afa4b375e5a15dd8d98031ed91ff19752ac05c2cd82689e6ec2a443462840fbddb5a4355e3eab5601b7ee72d97007afb5e6977a6cfe5943ebe8b694cdcca9f321bbe18ba302d123e85aa659ba8c04269b9f0207d0c3bd42534a34710111c01eecbb4bb55d87bd1ce20f116d73e4aa5de567222abf347a6b4c2ce0945ce47286a2cc9f687709ea3ab39cbebeeea84bc21835fdce14f5928a9fe89fee43c9689abe6bd001ccb3829c9731145bc7cf5f294887726c7a48132fca11e79338818037610393982404b17deda56bc2e15d511990aed2becc6fa10e45e785b0392d54d632be2499a74fe1203e086c11c92714f3bdd99f35eadb53156dfc9ce5306bcd04cc67cc5441ed7d4f0a81e89078ab2afe3d2ed69124eed59983229ce35b2f43d9f0f2346406de2c246f758c0bc783b8b171d4f695b758d8dffeb0309f9802f573c9fe2d4e9f4e034481739eff82e87cd1a783d0710b2014dbf2005e5a5b57eef432d6fa6f570feb7ed652400536c7a76c16e91c06164fa20ba5fc2af2422de22a7d69165a124ddf748d2856f400728c180f0c90ea85980bb75fe921a5f7a49a21874398bedf11e0291704877f46ed3bfdf9fecc06d7eb1b63d1e1316b38dfcca366ef5cc647962ea2e7d3c82eb3544f3f578b27def3f6e209dedf1b9c01550e24327bebcf5b166e6adf055266e759ecd8025f51fa8501ab1a5976074d0eae5276db409834112561f388daab2bc75a466225e30d0c5d3848c78eebbd7e7c732f1ebcf65c5f2da5a1325d57cbef7a8edbec674bdd104c1a6eb3d3f7e723b6a250eb1354e02fe3941385670ff45abc6fb3af25f0dfd50e41717bc0a9cd25fe5da1e0c4275ff33909c1ac365468f98de79e8bcc344d984834306e8e32a3f3dbc4376bc9dce53bc66759457a9cedd0b5102f31829fa7cdd34b0b0caa2c0d5941d772404e6e2c757c88dcbeea5aaa2a8409db59e3ba36c63ef2aab9b3d159c2765cc62b66c2826091d83fc75d2ac86be591b34f49f384c62099b1fbba283a5c723ba2a3aa01a0bf370ee4a23330853daa81614234c9319e0f5aa16e0d4d8e659d36d85b42ed0f47f1cfebd3d4ad044a57e722b8fb7dc10929e083a48c056077810b666f570b24f26eca15a0420aaec155d168217271e59bd88e62624ca0ad397dd4bbe141dcb9ac9c5b98d9dc9ba6c14c0bcec4a1add8682a587aeb9b099f6a62d38e65b9e9417f58d317272e4936c8b6047b2e8c9417b996bf8162418c1ef6183ef1fe346acdf5c0b1ce11f42139faaebf99dc36bc6696fff894e4103c2e90525a353d7cf2c77d0a2a365434019155903e23ddf919a597c0ffd51fe7aaae8a4e8da2db8e126cdebcbb1db10c290c1f87185b668daab6f2caeffe38cadcb1975c7e60e0354083d040f80a8a46e2cd80851cc504d6a579ecaf778a3dbf9858156471dcb6d512c7d25c892adc8c7e0bab8c23c768ff2aeac77772f03ea40c8b8b707415ea9b6ef6857c35450cc79b11cd9fa52a4f1ab0d26782176d57d79a8cfaf27c56d58ad061586a4ff1d5dfd9db2ed0a49dd7a21ad84b6ab618f1d0b331666eae433d4d73d7aafa359073c44161f55eea7280c72d421281f30eda7bdf2d43976512849ab83cd3f4ea99836f5cab06e15dae7353a3fa785c4a46e8b011129418dc665b7fe2ef66c8953d70545ef4bc445a6a7c9c08b2d8ef962fe497028fb6daedc3eca9d47edf1d7fbada46bb260487445b3deafd6e0f3728955f893661360088596ac162f60b03cc62063e75d49237f7311bc5d321a886982c3cfee3ff011a50ee92841c8d09e8db5565be99c6e1f3c0ebe33571b0d7c0ca0b257eccd2bb0ebc736d1733e857018bbc36f8ed845ba54968afa0d936224a268afe3daed3edbae9d51f052dd6464406ba815e0102246167d79032c8f0b0167a4842a70b66c901dbc5e8e2dfbf698b78b3627c7ed83e697bff29685ee560359ea57f9d3b247fed8e9d61a96a9e03db5a92de6b8320e96ba38ecffe9030817fdd9cf556381a8c2104e204f5d1409c88541139599c09f808ec51213e5a83da8572dd0b6f51e27598c99fbc5fdc7e8f898d4f24f8221b04567b19fe2240b40b1a5d863f41a1060a4b4150f722d3d7a169b767934e1fb7a49cf4749fb11276f682e007ecaabf5a6fe421cfce3b1eb88e4993c707bf449b3a1e52e69142b389489a966357c9116af070c8d47fef08f7daa73b855c61588aa70f028f6dd61e72e2c68d763f5f69e6eb5759eeb67a310d24783c5fe2314b0a3896a72702e6ca34ed2dd6dad07183d0c426f831c1afd5689b35e4d539c79a14c428e0d3c288c7dbbd9d3602dc5b9476c23a0ac1ee0f68ae5ce89a7d9a06c0f476815bc041446e18c49c8ae625ab5b71fbd0ea388bd3e1e948a51cddba21c4d57db67bcdb5823a46ba11f3296458e7e6338a8fb5dc8e2a180a6403b255f5bbedb1f3eee2541edf90d53304930802b1e34e5d3ba0cdc3fc73f4c1928c91246c598abdded7193348c5ec50a21fa605f1d19f2da3aec0f20b79bb2718dcef8de411cfdf8328d60ef4446344bcce610fcd744fafe7ded9cc81040aacc082155be8dc4bc4e8e81f123f46ffdcb4b21e8ef01bd217a5282e33db311f46949cef5d61104fcfd1665e4030c345d04d578d6b05738711232bb3bd8f5bc25c630462a9fd5489ba64f503d79636e467fcf83230d798d3943f49cdd037c443499dcc9c9c42cfcad4d0e3185e2aa0a148d102b8750421d24c85fc89041b20d8533efbfcd09065c7bb959000e96e89d216d196e4a7b38a1de12ce3672717273dc429ad2228dcde4391add49e5f1707399614b6c6e894372ef83459fca8028eabf60205746d42d5d0fa61e9cffe27a3963760e8ba857b0cffdfb71864e98b5ede68910ee8f84eaf16d32043db9d350814ce2bf91d897242e36914e4ccccddfe39a5f73e709609b007b02ed6a0349c27ac25af21d2cba8fb089cb8e04f4e92a4520e6575e7715e88cb4b0adf61965e144d0bdec76b88d2e07e845830daf74bcea154c55eb00befb003865807134f89c91e825ea5145532e71a689e5d9b7bb5c136862e62548450a9952200e8df7599d499386d3cc5245bc7c5b05c3d3d276bb40e237756486320065a7787403405e22abe604a24bb1a8a22747985b9d8df9bf52bfc10e81159a115b26e1dd8dd88532efd2e6b3e1d07549bf34ae3e24712bb259410a5ebdbab5df6b2ac256775dfe5a2f7f8ad6a84ebb7af829d06da92d48816eb3f28703bd817b1fb69e3773d5ae31f3038015ff1e3147b9b49a607d40d0a3ea4527a5d64b7edf9b725a57e68142e23d93bfb546e459f3b3059fdfce92dedee5dae548886c2919bafc6966f5f432ca8b16697c06835a180410760a6420ac1ac787d5a11211d260aa82e08177f7d528fca9269308743f493535c61c64f2dd74fc1cca70c7a6e199b9d194820d6fdac6f99d2b2be08bf4926a978e33ca296d27699967324d707f4b123cb4af6e3df085f69027a2c17f725df0cb9b4ce9cb97db246f72ddcd3f4e68591c887cab814a431cab90e67c4697bd128f56760b18675772779a2b4b5c6863b0ea844d551c42b781053149d513f3c787ae1e613b0fd2b5aa93326e156511c335608e7f21a4bb17175d48084d4351aff1b43dde65fe08c56a058dca805012684378c538154c7162fc01640f55582763826e788219fe40a35beda73ba60f949f7275c9d9a5b8d0874fd5c706c7ea8ac33e7536de66e572140b914b74c32040faa0549debfbb25b4d7c07390af449b8370dc5a65ed5180780489d76dc08440d0a3ddeb6aa49901a5db163e2ccb2de3bb83ed997837bb10aded4e63343b9251446b7464c2b09a1e01ebb9815e5913f76df7a02bb43191ad3815f3178ba7b2d67aa7fdfc0234ffa0b563ada932c63c9e3b71ec6571156259a594e210c9a6ef8f3e5ec89e7615ab880b289782ba8e034e506e7c6d9e50d74f3366f2bb108bc512b03ecb50c0a68d27c91ebe302152095111fa867a5fd82fc6df7813469b3dd97eec23c19e1e3ba25a84f9b46d9a9996193cce7bc899134f12a742b5c96f9ec90dd3e92c24c48281d77f82fb86006a4248849d88bc4157f998986e640494d7326de11ed197f06e5e30088b8752959dd7d49ee4d1ecd7b06188b01cece644668963f36e1e3c3d258ed133744b35aacb9d680baf59da8f7223df117ca92812c7afe4e375cfba511b31ebdfc4f6dddce60003325bdec876a11f611a957b93033fa7ff169799b57eaa24a0045e17c18329f585e7bb20f2fbfc705e62b1ec8af818af75ec122d037e700b58661ab0143b1ddb316f5d90950a54e969dc213deaf00da8c7ddfe99cf91351754d0fab7cd05af60c13bab0976aa6e82481719879953ad9c5c34f6f386fbe105b568a1ef192f8ec68f8db51840a5d630407e24f8b9e69858f4341a888dd9baeebe516fd618e833a37b8a3a7051506b6b9062a8f3f88618c6ed37032c1a410b4e405434f31f2b8abc498de6abab667ea41b81bd06d060ab750ceaca2304858f61810abdb442ee1afc944186e41175bf322ff07d5db45705edb7219af0913b1eac3faf4151ca84de5983e55adfbaf9b9d48092f4b0af3abb3b1125127a99c109d90d338524d0a0e09f6585857263abef3691cd6b31e4c69b0f196b8f97302b5dc33776dc8f3b019f2901445bcb2aa91f004feda7e1c7a3779a33186aea378863510f7b20cb5b26d6d264ad643d23f4e23e78aa26b98763ae43d70b6f3cacc5780ffd6a651baae483f3e5bd494528c2e5d697c1ca6a929cae2d083c40b11a4992c592386c5248720458e980f7f5d64c8277ee19032618c6f56d51d94d458cbec5c09448bde17e8d60417d7c408705e610e80656e256a1e7fc04e6c534787f1612933a215189895a1c9089da5953becfd4261c31246b41c000a4618756838c51a4aa3441eb6d8dea79bcbaceb9c6a55a7e5dd5fddeec63fd7112d3ce42a6fb0ebbd4a389a57a2bbf7271528f71fa207d216233d983f40be19b4ef99f668bafb3409d897a2e98ab80b62a899aca0a65169bc5f95bcccc18d54f80b861972b6472537c0814f78d0af5a9ccd52576b57d839395457572bc3805c8c1b2815696cec33876acdd09e8d5ffb46e37dbec12ac7706f0daf352bcd1eab29afdea73233bd6ddcb5837a60b5fb5a26fa3d40af5f1a7671f6d8e6b4fe8d27316ecb67c16d21f8e9fcc895d911e197732210d45762ea90bc46199224f9ba19feee2502bfa94c4715942ad7280bb4d8cbc7a2ce7d58b06ab7bda759e054b5b9d5bce334b9204474b1e3d204ed61cd61b42d956c654d5c9d39f62c9e55bc6f912ea6594e92afec9022868cac89f3d35f4139a7baa90b59bce0c076e01b8d3b6b1f1e026eee4af2c345a748f59b7451324c974333f12eb943fbc3375ccb93242ea7070ce937bd456d4433e3b84d59a81e484c265ce9e8655dbef142a8804af48f4a95e514baf78d76f8a6bb8ea5ac1a0d014b2c18cac9830351ddaac32b9134c6ad234cd7d806b2fed76a3fd81b1dcc4cd3346a52453a22e46a0fca4c42ef028db6b77bed6ff722a5241c04bc8839f99e772469ce4075af2f4faa10b12592efdfa53bf38dae6de34026be67aa3ec083555fc253f7e94fd0291c75afdb1cae1a382126e9bcad1bf04591f28eb4b4bb2f1a0c0971ceb93d0b56e5ba30dab3c7a6367f57aa45f454c883eebe65c4ef142c97ce274b50ed9f7af3cfe77a6a1a647fad3e71ee9b7c783b09210027ca319c70511dbd20b351a26658d295ad44fb8722f266a4f53267e7910c13d8cd75bd0d1d113bc95ed85f19c0b234022f7688eda1ab6580425eb3db43bba80cfb7a13947d0097d80cfb882eaca0878a6a6bb3647343e2aaa55c06ca3cd93317061c4827be6e8f6d4fca99fa9f4817ee57962499243c44784de357ebf335abc32176aef46325be1dd3952aefe1d06399230d7470185ea65d70c2a67fb0c5c81713e1f2dff584f8f2c5a166ef733010d6dd644475d73d8c7a919049a026b0e1db0c2d0022f2a17d9c541cde49986ac9c8ffa647aeb1337ffd9433425edb416ecfadbb25a90340fe2482bf0a02de1e3734449af8e45579104b1fd65ec7bb4ebaa6629636ac288dfeee3fc3f3df5c135d6a428b19d3909c107f5a562ba1722b4f522a028c4348985ff756d7050adeebb7475a456a6cc0b8af6e14237b9cb983a1de4a126a1781fca5593f0173403b37aa355bc4eb0caa2b7fb49ca9454549e3b95941fb6e0b601fb79d64a35d59893315094256ab04f2aa61a834ac89d652e9ce727aa8df1d78aa4f1f8b7c66058b398c57bf8e815a74410778935c9cb3f5c7e8435987402c24fe284fe6f0bdca9740594ab5b5bce9b9cd40ca587706d51ae1e437b77e5c59ea5b4c65e3065ccb3c8a74ae29ffd50944ae24965a69bee008517f7bfdf53449bf7a038b5f80065b713f99443d89912c925660f09c091652936409578861d8f8282ffb69644964e5653d7d081d650eaab17e132b937f2ad32b169bab8b2ea1037d3a7187c8aeb34de9ee65aaf243543e8dd3059bc7ee8ee0aeb4df64fcc6f649935b7a3f9cdf6e3eb71b628e8630102cc482f67e3119a58508bec79ab66a8f824589711560c6959d92c4ee8613f9fe948eb6aa36d608a8b2955bdb5df4cd601a4884127d09783be37b84643b2a5169766faf96a68fa3e0c4feca16965c9cdbf280eda065008a4edfe12fab08fb2c972592e94555a6c6be934b12f6240b82c574b9d5a847601b1c1f14e7ff6b7db7626c132046150bde9b8e6f6c3d127f72f8cc6ca1f18028a76dbffc7db603bc56a35b06152742c0fd29de1e44d457beab9f2de7ed113267f213048831a38d4480520ee0d48b85abd52df35a038fdfb88b526c3aadcad2475d5e91209c56fb42fd1980802099a0283dc9eead6c16846ee820523597780292f1bc898a6507c7eb6f83d8c2cc2ef8ba464b7cfd1ac266a092271509946be0ea9bf73276b106964e7c6bbddbccefdc5aa293f795de508ca518a253a733175ba7574d0b7b83aa013993ec756a9b35610396e209769d8b2c4b119707e49df21cd90046a99a89bf671d39aaf991fe3e9b18e53ba7a477c23321e670ec70ff67c60aebe2aeb6719bc0ee4edd070893944ece5b0be88a558c8daa4da60864e4585b4e00626a696f0a4720e0625ed1516017d5816d52f599c700e31c3db670591ee2b303eaf29a6112bece3af4caa79dc9cd789329591e1021554748e0bb45c72117ca968a3a67e59d8ea6b60fb841587ca40a18c920352e55d5497551691d6c2214784897555c7f614c99c89d0afc79a37287fdd855a4e74c7dd143bee6416f0a408214756060837c083d72a9c801d985100cf6013458170aa5a56d5aa9922e58cf8b33333a5d75420acdbb6d32ab8f371eb032dccfb1ab8f8e5a442857ed33ac05bd4c463d4bb3966530b269fdd4993341cfebed6b214f709ce5138a8961b57016187dfe74113e828821d934d1056e26e20ffd8a808f187236deddbd39638f85c760c7c877e69658df321831ee683585eae03f874963971e1f8faf151cdd98e1787fc386c79d01e46f10159326b383437b9d508ce484b08ed23c7b68332869527d275ec07973edf97e246e0628a69813b7bb0562471b161f60fc08a56c62dc518b8143715055590d13f17b08c900064a6b7f7dd2558bf342a13eeba3b6f6bd648c48ca02a22e2dcc907faecd42c44fccdb846ef723c023c03f56d6df473866bd7b33787e2f9b59eb43cec0e7f83c97f7d373bd9713e49c4bd3d31bdd0b614c46c8a39671b527654f7e563b14c10dff72edf1a8c9d878d23b53698fc74ab599e9cb59390a0a2a60f03f2d11fd179cd0fa4f769255438dc98ff99c3d49c978d93e0e8035d78f31b98d0566dbd6e828023f836bb976aff8752691d9b2128eea47548b38f22965e6c6286193d79f716d0f7ed3cf87a051f5173a5d7b7a3df19dad61393e15ed9c5dcf91d86ddb7de3b748d15873d268988d8f7fe1327fde34e9c6259c3b7a9fdda5ae083ec329db33868fb9d1431a68cfc3af951486e7ce0a8b6940783b27568a27c7486f18ce7fd09a7b2c2303258ab51845dd9beff2ded7228343ce0a760228e7c3342182b5c8d22c888fba17a57884e6158fc16ab47567dccd5a7aa462dfdfb84ced3500c4f573601acdefb3f59476f2c204a9c04b1e5ed636ff0d34d6fa18ef04f87d930181c0a46fd6095ed41e49bf5f4e89b76897caa207094e31c748260be368eafc925426653f512fe000c143555da0806bc094b94e9990b8385d76732a3e7d98cf0c08d3aba7dd0045338d8a06b60bd2dfac2b08ca6e07b822e51000fd2fd13924dfe7d74897e7ba5b8e7cb8b8404945237ddaa2fb7958b23ccefd1a621b57efa185a51cb7a967ce25b7ea1b3ac3d362b264134a9f65b628df759356892e1b4d39450d24231786d9cd3baafdfdb03c6911f94a60a3bb59ac6d3f5c6a6a3dc8c87e2c368c5d29c6b217aa2a07508f54672da825553bf49d029d49044159399c16492a0525bb37fd4056e72cd40dd5fbebd523922fefa1e35a5bf2ca69440aa421c9403a3bee4c7abfca6a515d13650eea084d3a9fd20f7cc178c2ae1c5c8e6d4dbdab0d57766c6d2dd4915759b6e7ef9819c02f58b5f71279d77fbacd27fc7e8109447f8c049d43934ea2e17c2c5106014e1ad33c8c28921e3ae1bc31f02ebc5e14b9ace676fa46490aa5a20167076e161cbccd0cafdf09bffb6ddd4756056d7ac53171dacf2e76f051fdfdd3157bfe258fe8bd54a9d59d24cd43a636495cc53f2b489f82406cf05c848dd8dedb9afe3c35e8e154d15f476698979faae4f2c9cc406cc88c19380af73315e1f91c706d8ab62280dfac2f17d6a5998947b9b24848b0a232a35953ca247aaf73be2c02d55e3a8c8403bfc884e98c90f6b64fcfbe7c2ae3655930ecc4ce8f48c1a19919d87ce921a718b626ee77474df7f47d341034e131c62815ab879b995c4dfdc67705a9e73cd618bf324c0e408c944cf54e98ba6eae88ee2b513788795c2a72d57be01483abb09628b828e7874efa8c900d373acdc7df2c36ee75cb57e756ae35ef85735c8889fa0a251b766d0a13ff357c47e1e9bdef515563dab206659fa152996c830fd95a9c5898418eff56867d97d7e8d026d571100141df7a746f7b19688a1a4ef3b65ff4888792a6cada4458571fbb2504401bdc2668bb281baf71c1c1847b77c9e7aeecb5bf93e0148e26d359032c45198c7c11b34cf016b17bcebdb5dcb5c50a25195bd09b3450c9983b59341a07307b0bef2c07ceb0ada41bb18237929fa504dc6b90cf1863593919cb4ae1c1e07f73adbb80eda31844b21ae6fbea382c4f2fb87aa120dcc25775c783e4196f36af1ff8ada982e246f8cf35bb56f79973aeb6bc1058cb6c06815cc908e5564164ce11bf358ced86ea6e6f1b244bdf3282b83854ec360ca26828b2b1a00b2ff8617c73a39ee68bfb385b01ca5779cf0035543d7aff9a00146465710de5ea50234d8f19d280de5de6113eeec5fdab4d676c6cdd1165f3b81e500d2ee0de7d91de190704019f2393b41b6023528bb7b1806c58d0a95af27bc9b2f654d49307ea368226fd23f2e9ef99c1958c8713533577714eaa57e100dd0cd132bb545e2c76e7d589ab84a49998a5ee0c728205e2fb60ac0aa182e4c2d74cf1c2a3fc57f0c2ad266f6d064c7947e609b63e18befc7c345f094590da5ff77b0a7e42bcaa62c8ab969779c6267cd5474bdbf41d58b8514071c7a9e73c07bd5f3b0814941b1b1f7a00d89d085b56a2277d3b59cd752c000cecc63def78bd4b3a0360bbdac20713c67ed412814b931afb52d6c8e3e43d7bbfe07b5327b879ec26fdab3b19762cfe55c426b671d383528f965e25b7c0b639bc726e5ff69f504e58c8a3b0bf2ab178a8f6a45f7236619baa151d4b29677e319e46be6bdb5e5e4c55fd9c35c428749adcc06840bdaec99b269a666647904ad2bed3db5668543a1a597ae8fbea046ce42849f13fa01a0c70b3c26234f389cdaf227cb5cf14e62629975e54aef96faa82fcd562e639a329203dd1e0338dcef941000dbf6fb289672a256b7706e40f89ac5d6d7c066ae16bbcdc03e58848123cc94d66352b99dcdfba1349d54fbcc338e255eef10eb1b6b1ce984fcc7c322086676cd632221147f2eb2f6ce92b17b823462fc7af4f84719a3f70aa89a7c4322b50de1f4df36fc426042b1cafab18f06681c85be2adfcf1cede9e8beeccf50a4f9ba16bea6b70e918ebc2e79e20dfbca911c8812344d4b46b0f63ea6843e7a0089db015a0aac910b2acf2318df450a9ab3d120bf933e4144f184d587a590236278e1b636af4a5e3c3150cf8eddd9fa39fddbab62356d6c3e7710b00ea56a329f01fae23b79497cefb102804bba771fed70fa9ebfce634829d9fc55d71383e92940fde794e66bfa067c17b1834e3cbd6b560aa6885436e5a886eedc490568a86200f1f4c15b7ed84ba8da09e30c561ba4332458cb78a6309ad5fcada15fe85c5691ab4f4936448e8a3504ea21fd2afb4f73809490c7f78b6b86cc5091ff662a3844abf59a90086022c1b9e7f64b5a41ae7f15303d083d498a9260c153ad448d2edc2ca6b56a019e44dc193265e3470de64e673b29410c777f616cdc241091b6cd66ea0d5d1cb457f6170a1d20d657207c37a5c311ad5c65936ebae839ab28a533b06b3fd2dd033f6c30927a04c3516732a88d88dcaaac70e9d973968ad1222ca84956c2326d973e525991fdbff8823f0ef2795f3ccb91946ecbac39c54dcd15a72f111023baf9e9418253c473629a0a7731ed71fea0804a6f243a71ffd341fcf6187b8bdd761bd1d28939f113c7d1cab3e81eb91f600dafbe41b35583df851a8e71f2b55123ac21099499b360fa645d5cf43d9eca695cb280aecaf584a4b7b2ca6952bdf571d64ca13543f59cd25e72ff28ac5874265051ade60bccda0179c3a7fba23cb3d6b564c5e3de8cac5acabff9bf99ef43635ee304d0c7f229df885657b8a171260260b78f5be36a9bb5965f43726aacfb7cb7769b9072fe2f3615eec64eb9b9c7f0cbaef9746d6c9597039fb29fe98c9cb7841c81a9b33dffeb5cbfc2d94ee2ff58698e898bf9fa9a3367b4bf2e27d141228f9b5e059c9a2671efcd2a02fe4ade550d2c4261ca24f8694326cc9dd0d2fbbf1ac4f963b62a9097bc8303a8c55c600499d6dfd4e675c6af3cf0795a3810a9cca23298d6f00a4f872274ee8cd8d18d7808306d1d4aeb26b8b800042d8fe3f587f5c175846d722bff3568c6a5a0c6e8010f64d6451bcda672f6cdd7b0b02c7ee0b7327b8388ebb616ebb62b5dcef158638ffdbb3a932ea0ab41959fe2a947d788a47a8c5ca66e08cdb20f4216ff917d60941d55c3be32d4560a84e862bc6790066ac91655ab948f3536df35822107a1d4d4c0c091972e9e6a82d1781001b27dbb56229003cbbb3ff22cda8d98d1dbd120401327523425ab1c02a5e01faa238253573576a0199e635253a260090b35b2f8543520f293fb61c00d221b393cdb464fef3310a4d071a274b28645425249d99b99a1cbfeac5709e7a2493c5338c625ca1f018803617d0274dc228f120f5e4c291e1f327f8e23c827a47da97855b2d433e1fe43e90dd8e12abe4d6e2eb23954736187021f481da4c44147f5ac5e853c692bc62aca4d12044ae435d8d1b4726fdd5dcf3fc4bbc201dd210b67e2c76648514c87f12ecbe10f02dde38fe46da7445a066d10554a88ce1231548e3f3494ff3381f76152bd4ba9c8f7c1ccdd0d97cc45dc877eccadf7d8caac99790d76b4bd40f9776304d8632022b8e9c2bca7d970e4447fda9bdceba5ea243fb707b29d0c601588c0dbb9e9e6681d4074bea852b76ad2f634b2571d02f1c12cf5f0e79dfee16ba0bf4371941835bca84b621904225d7964b8927bbf809a828c1839920c087dca48a9c8036c05c732d9e24467e7680fcda7ed25651a3265d5ef9ede8d8ffc8ce80144e79fcc27f75b07ffe36501d3a322cd846746b29de16af34c0980e4ea262849dfc586c4b932f1b782a984900ce01bc818c0581a4062a1031aba4728b0789d218b8f46b15d093e374b240ef0c165fd541da083410c29de1f33fea586bb1d787c171b040a988778e6f796a08518660fc896de7621391db1e0ba1f2cc8bacdb147a2f22f92a636f26f70cbabb8c59113edf6c2cb7bbfb48b6699f854ea1b9101df422aa18b6ced2b1db0ce1ab758391ede01d36e7978ba01353931268b0e0665ea82022a95aa60fbb6a992c7fab309d0ac194664a49e70bcd48edd983a9c3bdf7f2435eb4238a0a08afb465d3fc5442d12ed999e3f1f5e01688f7279ac6af288a7f2330c8df4ebee7cf00e6a61c14d9d454f40a2290f3ec128144c4933fe0cc2046aeaf861d8931c8c98259c56a56695646440d9c6bb63c81918132617a4ba15775802e80a5864884cc8e9b9892b71c115efc787b719fcde466904376546a4021ff146cb2f696a6c01c257025e9c04a2e5eeaca91812bbd7deaec9ad80a163355157d5294e20d5206964ec82bb0040f9e25a098b6164d10108050c19a77585c99b38db82960b7f58e6a3b1d43b49abfeeb54133a3c463b2d98da2cc137d78c49bdb6c9cb76fc4bd3bf666385394408afe9cb4ae84f65129c1e35fe51f6da321bdd937074dccc43513bd250af81e7dc502e71bef8d777fdf1160b49ebdf7c1ab7c34819936c5459f4fd2a1d7686ab69fdd995b369f4db93059da40e1b05ebf8a92a36891c6402bd1b55b7a73a9ccc93b1ddbdecb1a42a141c208932202f91200c09bd3931339f863752afbe2cf3913ad8e584ba02be3af8ae9f1d63040e10eb748ff94fb8a4a4e475002946a7ee403b912f739aaa2667810fb640685b2fb3bce94a602b8d2fa31ada70377800fd46b0b9795d05813f2ccbbf191b17dddc3a121c7969eff136f98b72a0db4a1c3429444df0f10f13a1ffe0398d4ac42fc0249c1cc32900dc455377b4fd959292d2b067939e1a0bcc275b852bc9d9dd0b38dc907b4a863a967bd9001629e2e1252089091f8f98c81d908891179ee3e31808b96e3fcaf718820594382f75921473bbe0ed921daeb50d83411a9fea35c83523ee3fff6e4eebf1368cd053045afeb019f473ebfa167b1f1166e09a3d43feaa9bfa141c71e397fa60acfce5058ac2528c202e8c77fad1ed8149f06cd7cb487a0426014490af304210bf68ae64c3f6f09a061f5bd00a5bad4afb8e5b7dba266d24e4ed1b4d97a4d1556eebddbed22ff339381481fa2b9cbfc902e1608ac7aa5bc93c514b426d7f4bc1e9b51373b484fb482a49dc7f007e91deb46ba2e0f141e669b18560c8c182ae303af282fd069c49c950193aee43e8880f3c854865ea12a25ff2588796cf2cced05add24e61fe92f666a9b115c9f250ea5d9e761f9110f6624ca26e25338aa8158f9874b8152b9e81d4113d1724985e8da1de8d26c31303797d41f1e7f100266adceb95431e3746fd7f951219e50d3415de15d813ed094a5f67ee361c681bf1a621040ce637ad145b46803b9e1ea9754404f76bc99b820c0bb6339a0b52e1bc62f3ebaded8f2704f20bd16ed9aa123e7aa03df73f30d5c9eb445d836d9cfaf3e2df0d2b7f5bc80333098bf3b09d88546ceca60e743286be64165823acf6bc819bbd5e793e3dfc210e78839ab5bb3016fddb9f0157d2a557fef8a8771a21b18677c98b84b625ea5066c6b61835862b2b8588c3bbbf4adfe3fd74cfcd092e17792b04ba09ba0cd345f8271396210d01f8a7d80eb46b4c970fb871621bb56ac709c33cb9f18d635609d1495a5d603ca9803d0d3c153291c9c85fa88ad8c6d2eda5a0de76a91000fe70f925b6a9c227e7d2d62f5c3410912f55032749b527efeb5ae40d0c905b8d84c531f5323b948cea048c8daf5016d7224e6bae613288acebe2a2b56da468145a6fc5d645cac4d642a58384c0e1e88d46071acee24bfaa0fce3b96ed7ddb973bef31fad2a6c577d31cd8c5ed6283e8a8815c6a264275daae8fce67fbd50b7f3456345751010b8d38d377b0ca12e33d5bed2a9d9d9050708edd80e78ddacf3a9a169b6b555d3efe84bd25db5ea880c07d6b753cb81bce3921c3c661257a06b47e9b27073bc5b6627e58791eddd36ac12d32b1d54b55b37e85ea3d6ada939572953937fb6968fd1c42129b201d262ae1ec571d13a512e33b6feb5f37a7eb03d62f4e119c3936caf878b8ddb45a501715f501046a99669f398b01c821560d6e26d6936312f2f9c1cb3c25cd1fdbb74cab663497d03dbc5753df3b05f30a8b7ddee82a4222001a8a56132bd6e8ccd8ebfcf4372b9c20ed681338ffa9d909a34fdde5340638c20fd5f5954e05bed6a825b9ec3948716e597a60fcc139d53b48e9599bb2fa6291a1b85ef7b164acc8abc8002d3d3680721fda4bea57a02f78aca661e6abe4a9981d183655a2e340449f0f8b961114d529a4a1d1d94c8ae2b21ebe608470bc427d4e2d6c1e1476b0c39ca1d636d7ae3de10c8e5759e6526e92d0cf82858b56e1626d9870a52aede031fd54dd970b0af6d0244b73189d6f08cd23bdb42c365f941e89c858a62183cdf6aebfa2f8c5d54f7d9831ce1d6282091c1678b6c585b8b39e7bf35a5a86ce6549b01dacdf850ac4795181c0d6615be10ab5d43c92d0d471b74bd27d35ce1aaa22c521ef9939712666175ddfc32a9a5635cebd41939373f4788530cc7c2db3e0d41306468a5adfdffe7e667b515468ddda683ad61e4e120d98daf6a11745aa67d6a429487e315a23a3dc36fef3f2011c2765cef603cdd94239064f3cc5d17eac98ef66330730a1eb24b20577e9fc2d7312a525f0d5281dc6af9db91f8d619823fcc7d368a4c74741c277f240003c161cd4bc7eb0ab21a67c4ba9ed10e11d5c0870c1e71c0275f686f0f54b948ff0d0afb53952c1b9d8138fdc8cffc67781ee886e90f8041890b1423106f4ac1d7ebbb1c213e64e5d3076dbca96d405baa72bf1930f079150a88535ac56389820ee340272d91664e0b2a848a3735dd4e70884526c900ebd25f55b61575cb0cbeaac550d96134e80569ccde816c0fe13aca3fa3ec0b4f1117fe0bef13b286c34f9d1d27195ae7f99b438f22bd67cf90390de1628a404c3b44555266a0549558bcf9535f70b9d3c7263c50cd75fde128667345be7c393f98df2adf7c1b24a6a120045777e7355b126e093c0f33cfa1c98ffd203c7a94cb60f093741991beee02a3fad5c3d3117e3be99e911aa542b7676062b550e49f62dfaf25635f2b2ff3104097000414959344174b2f7867290e41d64faee39e693f7709e119b7faad7251b2ecb4e06f82e080ea84d339274de8063e8e8051d275f3310228095b070e58d8c27915143631097b67ddd3184ef314e98675c6479c90dd40b8d54baf8fb351e07dbda1cbc72931050c287a50c54d71cc8e6ad4010526fbac82a6c7cd8681f8f6aa6ee70cf596b67ef76ee78bf2fe485c0743fd996ebaf30d572b50f87282d5e55a1626c1779c937f1754ea56ffcdd95457dbbc4cec093c6a46775588f8c4f2f2784bba4864b16425fb8abd0cea49231a197e380ad27f8f0a753e210cd3ac8d3cbe0b8f6b4a5fa3e373bf96fdd42bd003905f629183e8d39739160b6427818b9f251e4b7d11d7728156e469f26dd933147ea1757cc8210f3da29b8e96fb92324240372e5926ac33471dc43f54035589ddbbc0965b883689e4bd588ce71167b19a83c274eb7aa0e16b3df512fde38e8d5c29239b495425ee7168a8f2feafae1c73af78f7918eef5ebb31cfb538c20b659f1e1f609150c7be8e51cf34e99b7fa454e8582d3b65ecd9397b5a154d1a0251c4b66464a03beab9adf0289dd31d3a2f8de75e3a2c28be3bcf39f57c038fa798bf452f55f72ca9aeb7a9f6a7c41dfb61d977daf87430f8e7c705dc12fc38f2e9e98cb5ff0f547b78653e2a8a9ad471a5577809a4dda3b9deee80e43aa7dca8c045fd6fca3e3cdcb3e6687efa6fb047046582cd1148d53d63c00360e59ce44f33d35a0d8ddb34230a2ff03eaba8f3b5750b5aa67860519844a7d9d8489d21a268f3d0f2c299292d2a4cadad6c47ed1445d4b862ce2df350bce04bfa1fb4e618af4860bfcb118a6b7f598d6adbc3efd0761ec43705db12151753be6687fb6a6f1093742e125770e5921ded5938696f637bc550383a3e0e83e23200d195a6814bec6a14438457fdaf10eb8611838c4db4e440909056579ea647b79376673dfe19be872c96a305f3f9f51461eb520f5b58a705cb656d298918439d98df6612b049886d04bc3d0c98943dc05687dba51a3a01447e10c3f6bce6cf95caa4a3e59e679e7d1e20212e5bea363f43200307ab13b05e971bee044da900bdb0c24b6b7dbe1e9ac4060c95e1c674d7837b3645850b9b9015e8017ea8a79501d6533e972fa3f4cf247cbd3cf239f054e1f30250be1bad69f0cb0f1df8b1d901718b56f1a8d7b7a8b11462452dba362fe13a1be88771f627e280a56e7e1600d6b0de271632a8e6480df5ebb06ff73f1eca4397cd00b288911b57f7c984072af716f492c3e4912d8ed458c27ff432bb773c7e21614e4d02d7ad7bd10fbf72ae665f4683c4e0b99febdc47663937c848ced979a696529ef51944016e6d8a723b7d3dc9515a0fde3a1aafb441a7b40241f82f0836c789d3cb22788c383668345b201bf24d9cd8898257ab6fe7c2a0616aee0bbf437e54b761bc77a741ff941de13459a78642614b44f507a69a2f412ed85d87b6f78d5c9e71349b4ddc18adb85f105adac4f3cbd157b1a0811263a1c5dfd05f7d3209f270d192258aa76ff8cfc93219ac46893f5e48295a095724ab1fa95e9685ccbbf0651df49425c6f7dbd563b6d4326331ae871d06c65c2220c0dfeb8d0e89b95a5aef976e7c15e62f2f009d893ef1101a4b350d21b1e584a614ecb72e8c7ce1313ca7c31168e4195915e4c09960d3d7e53051ad853e21a78a1dc868ca09f57a1890254aea53119a34821f2dddf6b76e537704a07de9e94aa602cc10eee47270df6d6d2ddf2ccf0c6a0ba446a11665361dc5419e90b5d4c3ee72c0af2233f940fbbc9064814c6aca63c8137061dd269e084a4fc88ff2ac394b0b7a6474143abc70378f43480285d2d840280fb87de20f52641b94db30a1837c09707362f243d381927911e2521a749ae55f2b66264cf8e2c7de539fc03b8ba95428ad12bc53e41fb27d6a2426e7c894479fbfdb0485b26f88b29f332685d59b9ee17cfc3b2c7141e0f63effc798c81c1d999ff41c8a697796d71b0eae22331b3afb46d98225b8e2d55044d87ae53c7952797bbb94897079b832901be7526740ff801e6143347da0ad2fcf1fbb9946fe80b64c1058e8086f18a6dc6709b6e78104cf48644216c425e138899a78f8ff07ccf82146b0b2612941e9de4dff097d43140dffe350810fd7f78d76c9c5b8971fadd13fdf56bba1d97787e22e06f11d312e6174edb0c26fdaa1c0cb6ecb7fd33ce88648f08ca497547e1317c9bd6546d8dcdbb7d79ef099f43c8e53f0f8a77bd021324decd072c162af513e99c7283150a30ea86b01b23f46d307f6693df4b5f277d0c6f3c9ef9c3300672020d50e65aba57512ab8eb5476720a0db00417bce2c9931c673b36f271a61ddf0b7e8cd765082c7e436e15cf4927a8b695e940df6efafd63ab8b4b0938ebbda22ee9b3c9117606876489710e6a117d3c03db9ad617a704321eacba8e95c9650b5e7c5f04db955dca91f3921bb0058141b883bb3266081b9edea751360041665c5687985f577f88aea84640a8d0f6d9e25ace7a1e168e495a366d980db2239d088bfc9eb65de4b5e09a353c94d218a22080803f09d94a0ac38f0f4f1e69489837e07d6e6abf96b76c237bbd1e327192854edf4f7153b8a4934a18f959786d9a828d2b497ed991df3006428f65ff9268208df6500aaf30ec848616fd6dda97832ac374bf0e1dcec1023ad5647ff0c9206725381382e32d556ae0c91381d111fcc3cb41d20f10db719000155be043e38e3fbd35b357e4a9203149b07687d29215eb6a54d9e3047b0c70dfc6e597dabc260bb5f36a6e702f52f2404549f05ec2cb4dc9ca3e626069d0f31faf56adb0c2ea31442ca3a2484aff60993c6b6117d062db60cc99543632c2e8e7e608c6dd3c25086b4ca9de76fd18a54201d53136dc9ee11c0da335decbd4fe90a9a0738a57446130b5c27643bbc841321bc789ed6209a7c2f1f6e9921e6189d005a88fbca59366babff32f48aecb3ff3bad67058beffb6a0e5baa3a201e86ec9ffcd449f278db920e738bde2fd5f3199de5506c061fd5bf51cd73070931f9c804df7152a5c00b58042015fe3ae52d30fc2711d1a26a9d7f407517931b8396ea83b85b622ba805479fdeb8fd4f0c67a9d9cae593e7f9db1fe24f6fc36d5fd8eb213050bb1bf460ad65787576f7612cc717664a56398a8a5443e3ffba3bff838a975d66f32adaaedb64f49d7782865e9ff10ebf6f84b4a24274f2bb1fb92116a46a757385bbaa0bf34fac0cffd1b1332855fbd8018c11dba8298d8ebdae1bc880522a1686b9d47b5f80916f1936402ccd184372cd16e3a4302c361606dd256d4a044590aae07b02a2b7af4ad4f85f6cb73425e2a2529857a5867e6f5575d300923785aa9fc726011cd22ab82f9c3afed939ad13fc20f1bb044b096081bbd6a1be14bbe696f611ba706567f99fd260748c88352c5e8af28c2c4b18a1c9cbae0e6465ffaa62cb81c220f871785892f566cc7588998e0410646a4c11f29506a6f2c05570f5caa56131cb33bfb2dee7b45e215e80ded46813f168bbfb4ea79e2a5f60c61cd0ce8c61cc2fb6b75c45c1bb67a4e0808b5648f2f678f3f04fc9c53aa14a9b95b1826a986f8b73f14becda4ce7f9df7f217a9aa325a883e02790cc5f24927cb07bd1b13ef9a41e663281deca72a1c769ab3c80ce8702e0a3028e55dc2ae6e89809f1c89321a40418f2937ae4cb75733246336a98837c69cb7aa7efb58c9d3fff2015e3626b8241994935c528b9698baf230c9cdbd914d0e4f1e9eed2b20587edc2ee1ad91e7460898a33755d3ac5986baaef232a418c710edb935036eabab3249ee148634519d73060fe94553d9c42626a8333440275c798ae1df59e1c2e751a0e3c4d842ff76bed87c91a766d03106254a0abdfeb2517ec9655059922e4c4ee657b2c6838028c8c0e20cafa4c3603e478db7f136b0e4fe7ba8d7f8c2a10cb0b1e1565be45bc8cca2e0ff3adb5d34959b3cd39db5907f91feefa5ef5f407a938274a08ef2dc3fceba92880985d2db9a054d969ede589384eac1981f07467124389a7cea64a255ae23627c27a35a4b62c1727b96614c22bc03276af7920f6a6d93b33daa68d219db7fe5b02410734582f710ee342e36f01f0705eb120501e7f7ec0bc75657f248b327ecbe0a08d1bf9eccb0cac46a7b4614bfdbd8a120316cd4c5534bad6f106ef0b751d904ad6d93ac74f13dca039f17518b41315478527785ae4aaaf5dc12b9c9f9d9c43077063dab84e9d694593a4b2163deb2c9426ad88c18fe40fc765e84c0662ccf032231be52e213f8f8b5928ce056fffbd3d82444f6d423730e2e876ee39bbb6142e419a8c45b4a656936d75828e17104180f8055f51a5289f82c8d47ded1a0c072fe502c8bafc372a4055101f34eaaa6ed725a7da6faada704d1f26128e22f2e5bf4fb58a5c35620a417cdc8833a4d13bf2c8937406afcd4423f33cea9a0a8fd8b157eec7403104520a8f081c17705ff27f4cf8935491e004116d64e5bafe305f72efe5f295452754a53db42b501cd9b66a9fa08446629d21bfcb78bb4b7cbffc6e36297ceb1ba484f04de2799bc994c5709563195230e72fd2789d2a3b9d33760bb83be9021ce229b88206407ec97254bf24373a840a5db24bfef0ca5414f424af6d19de2761dc7ce016d529afc37a9bb89347b799960e377d003eebeb31291ed59612fb914b20778a2aa6f8743abf26743af64a203d043e4d31f0832287c8563176b02ba99197e4e34bdf158afe54067cb77b0bb633e3a7cee7dd602ce4ceb2e988468bdd4929bfa6e99afa51c9ce0d3fbeaade6b3d07f00163e50068031b7c02d40ed356caae1131f881adf0dd601ecfbde14249aeb0fd986a914c83b8b3496c4969c7360439925935628623f10d721ca0412b9f84369f32f5965498f850faffe1645bebf21960a04ace0138abaeb1c0ebfca502c777bf68793d1c25da8c118ea1367e077056caf805ede63a4e1af75032c8e5e5e3c2a254812ecd59c2bb973c5d5a2f551068dc0496613f54c874374ed73b05bfcb1411fc33cead03af18b46c65d08a197e824fde4c6d5f18705aaeb1ea2566bf807be4c4e918a56f8ed764092044630e4c90024f6b17c9458cd486a13392e9569225d8cd86b90e822c715a656c559bf960b550e1745feaf04878fdc45bfe5a2ac31aa9816678315689aa24c5587e9c960a68cdd215702aea7c6f42ef9268468004405ae7c9a8bc45dec91e0b67c58442a23b90759276a8eaed94b53cbb335b22e24eb48a2ac5ff1005398c08638c7a35c2c1e4be7a4324a27471b145a68506ea607b355c146261c1c94d45b68cc8ea615ca22b8253493993de0285cd117ad229b799b5f35fea0c5c5117551effb8a6ea3d51d77e739ccea83d50568a0992540a58824182a2ec01730bd2ae0053be088aeae04d4e184613f5d1a73fb9e1e61326e05a29532a69243a08437aebf0c66a2b8008edfa4f0fcf3584aad096463f6eaf0f17266daaa104dd4f7b5d53b225bbbaafc57a5ed238fe245bb81807c9425a18f43a0739d630befda86f220435310fbe34435fd1ce0d0533e8923b33a45c74092a41859841838b0a62e263cac5f0f45019b0e65630e95f33585ea1c5b8021d8d6cb842f5f57c9f765f360d1cf4a12c3803388deeacc1ad57c222365cba5a175334ea69d9079a5af352052653ea2ddad9a3ddb30745c679d97f245f03481a95746e89aab71e8da61d9bfa1635384513b030cd96467fbee2bd61a313d93a01cb157925c3086465f196b47e4f76e98f2a7e494c093d2665efcfd747cd2bc0873711bfd6648695456360735f1fd8190a3a9ce09b1ec9489239e1a4f29bcb67f4af7dc7a5c96c55ddfeb3275892efefc9c641fd1fd16badb1dac1c474cb661b65d2cc46ec45fee5c3ea2a02df459034d08cb8fd5d2441eff37bf51f57e90314e5c83587f4d2e43c61f77c25a5f9bb2021e42be2fd7887d3d9127cce455da2b9b1779f90b8ff5c43e5678b25bde3f29b039f7cff3b5f23ae72900b1e3dca03d21055af971605d00242e3090fae7991ce73fa5a6893fdedf0eef7015debccac29d68eb87b7f50d736d132acf901032ba565e27f93904a882639b1166f34f89c7cec8daebb6a9a3373bee3d58f14ce73ded62920616e58730221e081a1ec45e01f164c5b812d8049cdf6a9debc22b79d02c0d588928db163bd42a8d5832db08699217b44e8c4bc63f46a45d3ee4cdaf2089132a8439bf6ba783b145fa75b40c041f099786f6b18afef8438bade68bd2d85588fafd8fa01bd9f1ce4e337c08803663703d7f71574d30ce342c70dfa6d5c6b93f8fb56ceede3a0c5e901483c40621182884b5354a00fe138db00432f6817b9a2c0b1745fa20862b4fa59b59c4f2963b8a43a48ef68075b09bb8b1e8d64306a073cd0a9cbf3f66ffe3bdd6058014c4f2a25bc3a49d3842fddab31aeebe3ee2d2af08f227196411cc2cf12c7b257b6953cc6ed3bec0f1527a68ae078ee115acfbb0239a8e1631fd5b26bca876fa226aacf6648b76d88b08eadcdf9ee727f5e6c1c143ebfade6fde9066f62368ec97833fc60d36dc56309d40d53be13884c95a352620c95576a09be90220afac5711768c39ed40f00f7758e216329a6801f3d212b7c4b3e4a121462f2fc24208862c910134c1e6be7dc0852a891e6452f577d5b22b768bb518213fe5b5f50f2ca77751acaa601219b957c1a6703acd56f2a3ca1650c4828d0d6b47a9cba29db3f41af6d883ccdfd4f50945b7fedbd273f51ed786724f5113397a4e840f63b58258ab37e43ad5aaaef8ccdd1b68145ad620338a09d28c1a180aa3cae66f2f04e9ad7ca0f45f018421e0f5dd29bd23cb85adaf942f93dac818bdf6fe4cda1daca50a7b69d0547c9b6a7a476e8fd9014590feabba1d3969dcb42ede3ef82ba0011f247f0d9666b096685f2652c64a36124130a255f5a33c36862175526ede53dd3c97d7130b6731107adcc328129425d7eba81590575fc92f81ff1fd0b97d9b3bb7cb8cedb3654bbc03d067c7906ff76ab34a23148e691e2b5fd5de530ca02ff07314f8a39bd475d3684f142d0aba95a87ad6de0cf7e053da9bd09fe4dfc3ded37f2d780873fa881584f3ecfd4a09f6516a8718844419139bdd317d50f3bb004b38675150dfe22c3281f803d0f364597b598aa370dd6be4b81ac2ed9f4269b4d480b81b6b9be6e512298f213e4e75777984f1e69cff6d0212959211c92f2586506ce447a0601d23e9e13c0d5123dd13a62e909b6923223deee141913bdb3a2dbd2a4be96e053e565d1bb1babf3d5d04d6a7bfefd3df79512b98c69696e6c138080e8c20dea4f08411e61c6180b4ef516f0754d5cebf3d6a01622a511dafbaec5e8f470e50ad9f45c7b3c65db8898f270534eff244cacb97ebdca3dfd9fa1589619017458a6f9d4e931816f934176ddb1b79c0cf79eedbc79f8ea73349a0a61a8791277999d74131238aa1e1cbbffdeb0c4d1aba092141555bfdbb4f93c749f5c4c19ff64986905d3a526231e8ff6d4af67593235713c6307a16a15ba5a980c3efec7d795f250fe547349b1eae9a19340724dab0a9db6536e97fff7f5e44e735903d37290de2d5f30aac6161113717e52c2436c72fbddf963e313230a2614c4dc403e8ae112e7afc5eed1676438cf35d3df90249a4a75891ace1bfbbf93846b0a5f853647759ceed6825c3085a9c6cf64df61888ef1f7e7d1fefd9a2bda220418ba5eca8611284da0adc4e97bd3aca5a17b4cf29a1eb60c807c5bec2a78c62e298b267a79520725e2aa5c0cabc8643146e0ab85423eb55206539d4f9f1b9f819a272e97523d9a36dc8581fd9a92afb2043398605ec07f316f3437f49edcbf322daaf3415a067c78a0e74469fc2442f882aea346cdc9c8f4027e7fe32709558aeb339c8d317b95931b1cfb5ed0bd535289bf508773c705fb1ae937619f40e2cc3435acf605571344ec5769751816c16fbbbb421569523816200e304d6628ec2141f1aa8588f3a905ae76c237fab7ee5662ab087f7adb755ca5f02def06a492a42360046c7ffc4d12274bba79a996f759217635d39425656fac69e5c42ae1f17039543b7e0f872c5e40517114b8b3bef6d158be2d9da88f323391a6bfd19ba91d8ab4cc63892a54fd14d41aeeca13faef91abe2ded111518af5a31116ac88423d764800398c2fd58be187863398efd9d235f49c52bcad7c58c4b0310a614f358db7aaa3741ab314a72d1bdc739e07b7bc83aa7135e139403bc3761eaa2e8b09fa5a19abe1e998c8d7f6f325a25327f85a4e3dbfbe8ba7f8d3a9425b43c3dd3ef0111068ad0c1d47cc091121075ae569b176617841a4956f62721dbd75cdeed3c5d6edad379feccc9dfcc9bd96390b8f5e161d3656a401affbff9b4010427bc6954b5929c6272509ed6bda53811a83ce8a0042dc7dc7c29f42f129356b3db0cdce7135dd56ad0a143b8afef2ed355166da58cd555ee2b2c5b4ca1050f62eb4a1c0d88119729ed9659800ad125fc0a954325c12004a50c0d12c2bfe4c2572d1fb86abc58175fa39b2d87eea6204da75310b7b193e2fb88feb282838d86b9c8abbc6a5efe5360a4f18be81c30d828371303bc67860e80d2e296f38dd66a0c3a074f776b41c929367963d85643f63d06f6e2f43284c00b3dc7854bc8527e8ea8e5d0866ec70dd99e25c3fa29d3be3e7068a84aebb37daaf885b45332a18359f7e8c8c3b28d0c93f6a8f87014c3aa02ce92d05c1c58afdaa4d73b78b6761576a6ddb053628c8f7d10301270dad9634b5d38fdbb0aa84947168ce417f6ac2b3fcb9a62d65d06204cf8bdbeb4e7abf99656d78633e8cb339e691ffdf8d837b88b31c87b6fdb3753f7c1c5ef9c5cb005164256359b5266ba1a626e8903468cfb4c5ace84a65c3832b92d85bababc0bbf1e6a3d99bf60f3af405c8011a03d3f306930363e00fd30ad43a2d86ddf0095b38b28571e65982dd86d69a22b930f43b0bd3806778dad625b4da89b5d4fe9788c0833c0e658e1875689964332b62d0ff9b8b5518ea39406a544b984c801e8149539d7adddbabf87c24704f4f3f33e428247548d9ef7f1b32afd9fdadb221ba50d3ee34df9fec1570bb6082930695f658eb128a4b854a5bcdfe1d56af004609768416c034f5f52d367e95b2bdde5b4b1182e99c6768283b955eaf17ffdb91f1243af5d6a523283e512f61f3617c5e3fcc86d4b79e7d280cb998120ada0b125e7fa23e43596e4f543e7100b79ddbbe063a9e381b678b58c342be4b1e1e475dfe50912158383a972848d62b17ee297a80d63ed995232bfe90173381ed7d4dfddf4afe549cd611c90fbbcddecbeb0270812ada63298b8736a841c5b5271eb2e8d80a26e71ae82042087863a8e1d3d2b9d63aa6614cdd1fbb040f29ba3c7b4eb8ff0862bf6f1c4ae24aa67a7ffb2f05f7c716174cdee5d3db608cecf6509717c027185aa6743dce4f7d6cf1a158700eb2eef4613c20446c0a33e920c13720709a6896e62d02ad69c86b98001412ceddc0a8c9e2b15bf32857705495743bb3f1bfe55188f0b5f8f0e4bb7e6bc1707f7e9ee65ec5b10982210662e6f3e6a1b5e0666df7b1b8aea5af7093475f478977741d7be68ef158abe757c6229c0e2203deb453f6472661f246ce02107cfe081352c11013dcacff3b8992d837116815f2060c8ca86d1008a1dcbcaca576d71ffe42102f161913025ab00729d50b52c305aad4d6c64893cc7fc4ea08b7c1e3edd53e596bc2051821de4da7d757904723a8bc2840225e53b9634116e89cf58b39d8770c103c83d75bd22b11055878017ba2cc6be70a06425001444edfb8db21fae267fadeaf3841a1f3d95bf23ef1a9189bf40634456df35019d9fb22236c9df3a8688cc9f4980b77784d0a36e80fa624c783056b9f4b06d1d970bcffcbffbcb44e2e2a5e8b09253010a4cc831ad1f5086745e9b9b1650ba7b8d6c5df1959c2b11f2c119b556212d44fe0a0bba4d4638d22f3a6762786efc9bf1558e9b4b350db5176fcaa6fccc51649051796a0c337b6f36dceb64d6dd5908ec1ebcf11247a75a323fc69a0e118e814da833a7e897ed8349ff0960ce0c13602c286fcdb1831ca8e4d702449d776e2d65b401c3f7e0aa23731c3dc6f16aa5e684d8d1d761d8a560d609c09b2f4188db39bb8bd59d2ba51c0b3a0c42e57baee15db34e0e588f5499cec05da7858a5d7425383cf1334a27c68fb5dbfe8cc90915f618999719c73c67a8e67e49c247cf3785d043cf58b040cd4fda33a55ccf63edd9c6d76b09e9bfc6923a36975645be2246f2a4fd5047dab69454b314c40e074124da22af018829ad5e32b7a27128a4e48b39c9c50e67fcdfb83b5e223a35e4188123012aeb8bbefa6cc6933c944f1ebe0309de0d17542e026c49fe13548c5d08f24478bf073a4b0ba3a3f8d62359532f7fe976c579cbefe30ebe9e2bbb05fc004211ff8cdb1da1a9b1c5724f299ff50d4dcdd989fb33e1587120c83acc827efb0dc529490773f1821779b9c8db1e93f01c5622a5480accfcae486c43d2781585a0143756db26e1b9ac7317d70b5484519ffa4c2c3a36008888db80dbf964e1b7ed96dc1e5ba2a0367539aa00708ee63e77c313060588728e7ea74c48e5bddc906353bf2f9a0164612d9d940dad17ce6c6a54c2a039f28fac93dc0f705867fcf12875b580b671a502de65f5732466c32e19e029f5457d903699061180e341c0c5464f3d1e609e757238b39811e88f603e3349b54ba27e1fd4298d779520207abfe18e670cc07fc6d85e444a25bc29b5f86740d0e820858fdc82a714596276e3bb6173a8a37b9818df8bc9fecb6f5717d63a4e1315cec8247df5ab9a5b7c1e1adac9e029cd04b812f71427f6cdc2c1d553b3f7789d73aa86e6e1267b890b24ebfa6e3a85d4629a174e05a039c3576b4228b96510fca3fb6149e46f368ab4f0c01ab602b62296b51f159e452be882f0331f00ed5f590cb6488f1298751ad53231a79305926e2578b2a856533dac9d0f7df057fae611e7c39f62a341f44aa4fa96a21a35208b16ea57e6bc781767683665c8754851bd51050722c5bf8f216af98879d571ef84917bef3fe60dc8ceadee50debd5b720f10459b9947b9ee321ee93a0853d0ffc2cde6f203c7e65a90af9117095768c2497c8a84195799364bcc2cbf5efcc4ced37f3175f8f764ffcf038e723b01ad9eee73eed3316399235e2e3531dc6944b840a1461f03fcc09a7fa2ffc882e266cf13b83e0c43192f9c0b7ac9d53cfb69827a14f3baa3032411944b6174af8d250d73ba70f95b5cb49368aaaeac8ffa77e2d47cbbd4bcc89cc790d934463514cae695f821e86fad6de8819589cbc58af1853a7097e4da0bad263de32bddbba4a7f266296f4ebb2c3df50c4bc1fce4501a63242ab0992749f7d08ef02bc17beb5f2779924601db06e876d2ad99bbcf8e2450b8567ffcff167a8e73f084005ada703560ddd4832b87f6a90eff2a0cedd19c6ec41ff902343cffa157af2dacc8cb9ad7427095cb31de6f8bca278b9072ef442ca4fbc49798e0e6b8f7960badbe036b86d79b44962254c45573056c164053b402fce5c4f9975afbd0f0006da9e6f1abbcd3cb713f3ac878483605a7abd1e0a3fa1303d2fc431469a69f24580a6fc571b363402b5085799a78cf78dd5e4562b7ffe2158cb8ce944ebac06de97a04a647ca9f8724d0b24c91ee85f87a8be46c34c8d4194b046e90af75d03824dc36b36bf681662cd0fa8a77e94ff295e691a58c2779fd86a17dc25c890b363bdc92a13801830651ed52dc8a3e1995538d999d26d0621a98851d80cf3dd02cdd68d3befe86700fb311ac56891014e967341ea17d05415d2d8488efa1dd00dde49d2a4a46f5b1fc7667782b0ae6d6d5b9dadffd5b36d7ba4de06bfdfb6993db4a9020d85019e4bb562c110f92abb3ddd8642032d60674754a54f3e35b2ddb0a1797565482a3aadd24160b20de49c91c24e2ca65a6f22598744e85e1e9febf76c0d607e53e8001539895ff2967be951372cc65a77be18cd734cad3941b18875875fcf3d3b2a96f6acf84c711c6a57f8266c20412db08368042568b7b103adb1ed5f4efbcbb816680a5abbdac81eae6755238da72494227a174f3a3f0acd3be87d8e4e99f7435e8f0df46fd75fb5acd079017106e243c67942fbd6446d62e6a4edb1bb913a382342c42bc5f752c36df96520618056a7dc918be2fa52cdf8b6e414bf7cac7b1e8fc8854ef06f0d9886888e64610b77cea228cd5c9e50a8856c8e30ec7c748118cfc31b3c692aa75a1fb4f3da9f6a116caee5efc599c7a13bda79e4f80018881f5f426140704b58c7de4d5c54ea1d8ea5198b55ce0d251ffeaa3935937eb075be1ebd5a86ef9689bd4503b8a4ff6c16362d7bd20a769f25a2cb7dd91bf88be487c38bc04cd69c3a26354548ea20e44441a0320cec37ca0197fed2f7fecdb430ae52eef11a1e2dd8405afdb125bd5206e368aeeb15860df0700e69e5cac1f316727db70590d994f95b7868d55e388384a09d05d78f0beed2e7235b0b326a290a9303a80b1defedc9417772c22c4d6ebe2fad027d0df778ce7605a9f4e8d172e130f4715fc926b561194d6a819a462b25c4ffb6021be04715cbc0ad705047cf8feedefc0f62030926eed7b1b3a47e108802515fb9e0185d01dc049418052314e98022cbd5fbf40476c18cfcfaac7af7cea83fa07a88ea7a787d2faac72a0b717b92cfc30d6693050a1a265ed7f53d8112402b2437d5e77265f7e4ec917ce3e15361787500d0609b74ea9d08667c8c1f48de6b2c5020dc94ec89780125b1a1e6e16fb0453f17c2cb29a6b25d1cee385bf3fe4d87de48532b13bec49465bb4ca3dc0df7217c88ce12a849f567e09677051d1b1ea09e6908e87e6e73631e90fcd4415fe9cdf09aad163eeaf4418af719f8bf7d9dd58df66b42fadc34209c4e3347bc74646acccab3f6adc47258dde2779b237a50a66f2b0171eeb29608bfe9fb7fcc451ca7992ced4e3e4d30996568e0218cb38a86700525ae11ece5c638abbf81a6f01081339e857b5d73a6a8d13af4d81428352d97dbf4432060bfa38f2b1b069b8cde447ccad18fe16bd77aa7ec3da3fb7b7b27ef94a71be8c101e92e045f234a349477012b4e5a32a2af29140795f5dba7c32659ac8872b712658eab0c33e885bd703e95829cb8ded9348841d2b46d6900a1cbe71251aaa4821d9488a4c87c75f7fe0f124c93e4595ae0d312364941a7fc444dc680c556a7672604955a7545d245fb568788d9c6c3d1276f592694d0cb42386f6ad675a5c093163429ac69a152fb7abccb2745f9e0395feed4054c34f181bec5f904878c6809399bc2c347ce30507014b07a3560353e90840ffa69762f0aea3eb239f920e1ea74058fd0b13c9cd3bd331f2ed5e0adc2f2463590c968957cb9b7c56a8d587a04bedf327bdb3ca9bc39fada1b44b2835d38bc9daa8e371b121bba020fff3e6c79a578738a776c9bb8480c84548aeab1c4d4dceb76658e1f8b8582c0aa5bba198aea69e35d548c9a1bc2d693ea8e3c7bede941c0957a3f8e4bf33601221fcce1b4950ded55ffac4476d850eaa52676452fa820d1ad9e0fe6dab6ce16501c529495c50ef78cae073f6207315ae480911db288ebbc95401bab5869eeead994ebb4396dd044687d600678a47b41463e99a0cd776e5242188635a3f5bc369edbc7141cfcc482bcb82774420eeb3726cd3fbe73699080487414afcd8f2a306ce1f53f34d802ca3470914c9eed915461b7bab816011848156801c7046817d9a1fd259d25bc26006c99c953524ee36a07ced4fbf0da4c5460b05fa5d25017bb36407abd42c92e35d5e4677072678214365260fa6cebb38d9823d35d3d6b2d7e1839efffcdd3ecedd563aadc2e67d29504ff6b9987407dca9f4345c7895e82c790670e7bc5ee3a3d97bebe10b8e4439fad814b0303d90791012b88b806deda6a952fe6a4c5600ca696a647ec56a6305b4e1ab4bccc508b7ddabdf26cdc871b81f0d435af560d8e1397c4606f9e6d9865583e5e6117a5701d5d466ad5f7b4bb50f95c7d646efe7416e241f25f2fbb2afcce9a2cced4c390717ebce7fbc6538d8525939051495e9b3a9feda09f28e2b745e5713968025f0180c32a71f624a4dd3a54483acc7123dd18ef0ada3506edb76697c9a8c60d701d9cd935461a9cf0a16ce7b422be6a1e9a1cbcc88c05013a4d9d5a6e40654e219f96c31fe84400bbdaf8e3381fa51f46efecbf13fe17ea78a2ad15ca21c0edbc71946e0a93cca9fa1da3d6f5c533537d4cb4a534efeef2e78541b34548adf10f717cd7643a235aadabd6223bf898a6bb5a81eb41cf144d27378865965883f159818725dc78e32823d3bc11d534b3be5aac2c055b1499608d71468e43c6849c2bd62afdfd3aaf2aa4905dc2e88578de1a82b360501bfa99e72967397d9d7b2197f0112d5b14ad33677e255c5bc9dc2e7a4e713eed523e65a2f3b51141af1cb020839f6e079f9710f011799ce65123fda0c38506f369b9b04f1b889a7cb7062bdccd3ebf1cfeb38b1a119c08e2024f22ddbcff7fbb83098deac27b82be193b7df41e153f093183278fcad60062faa9eb7082f9eb5da807e027d42e745c855b6b078f92448ea73d53bb9c1c5fec03f1c0888ae3aba3aa72a4f730e7021f0bb461b8591b710a9a70287510e192b6aad0fc19e517f7d1f377b50c83dd2cd7b3bc75662a0199b9fc860c472423b09709016f8afef9425be78d5bea404083ea5e06f3998f54e74f686cada7d08bf3782c9c2104790a5bba4df835f80fecaccce72379d7c0f2333b8685d848ef5d9a198a6fd0812b5b606ecb600f03352cbe794ba9a9ec865b504f1d4751a72d8f4d7ae07d23d6c1d80689464a104f4b1027cb7ce9a0bc92b617c328a5df96c9d15dd7b6c1921b97caebbe43e6471499ec8277c80c13e2f0262e38d988e4786bde9068e9ad591f69e5cf91d4f67ab73fca87143e2084a6519c00e5201138b65de5f6b62c1407e982e8cd207c3ea76906de1d7cd02310b0a1a9e29d86cad7951fe23157fec8bf8bc75c942e5a8bd5034e5f4f45eed55ef99bbe076b9f14d5a29dfba7cac2576b3c948d1440bda1660f9bef5a8b08a4c06e04edb76bd26f03f6fa93f0b92d2787e46224558dd3ef7df0fd388d37adbd8b3526780cfa5519ba18b13929dbbb1ee99a8f6f283f53922d5cd37164f55a71ad462f1ed456c5a3f661ac8ff692ed0998e3fe005fba7768b16088022338eb5e07e11eec1ee4ab59ea56aabfad3cf3f2d62432460b9fd8f2f25ab0f4d8f6ec2387d59ebb6194d2fd32a91a2ecabee6981630c2b8b3fa97f5b550beb31fc94b19fc6560ca6c3916a5153b4b0eb1eb04bafcf42eae6d8b577af7466beb602cbf2486c1d26bb4a39b60f407722394d1a17bc1bb5be6aaa4e31ccccf07d056afb0f3e73b2fcbe92069a4a57d7e1c8c69c13ec60b24e2ea8c30acb6d54bb53e4d569a3a6dee9d55c3a9465783d4b00e540b69527318007bf1c89e158f6d5ac9e7ead44241fc187970547265d9e0880ce823ce7f1599d49bd7dcf90ce89cf160e4da6d55d45ed5ad03302609aca3a91ce953bf1b3fca517d7c0d9f2d9004a4883f88585ffd322d4f1de7bdb9603cfa403ba0f3c7bd6d1e2e0d2aae1f87e6c62e0dca6aad7b06bbac04a68275759c9a68bf4e509b65d0cfe1725a2143383537600818d34559d8827ae6ddd7fe2f8f05d11bb36a85aeb20bf21c9ad8e8001a6fe677d40ce1e2a7ab373ed6263ce7d7fc2e425fcb79079b0e53ecd9df8fe34c7b5e3c1c2cef25f6bf2d23b441ee74ae0d694a9d82386e987aa6c5fb794d4ebe2a1b9a073747f6f168aa9702f8e260fed35c2c183230340c32b007d16e72adfa173816f1fefe7c9c98fb3376360876d87707bc7f48c8c35732a014d64f4bc873d39a701b7bd9c6ab736656d13708b574295a5020669de4760b0950a28974bedcb20f19b85d1ba09eb40cb954e9cd53971e8bfc28079ed10ae09892d405d380086774c933e492d40dd5236d37e9b1e1b7630ad94105e60fc8ba64dd960011904d60761279c552decf45dbe6d2654ca4049e7514a4db19f4d3394ed976b4e12b504c1893ea841ae2758c2ba06d6413b7ece70f8d121635a0265e4293cebfeea86d043fb04c0acee03519d9b53d8098827f3c76c4140f98fbfb9cea97468b0e967a52713f6ab511e93f3347241666088038e8aa81841bdd3abe3f95c222181feefa6447469670a9e6ba2457565c913a94cb4b46883780380abaf8cae927d8077860769bdfd299fd814e714d7e41e021f60159536accd39265b598d941ef258dab441de10e64198d302fbca8723a8ea93ab9189ca2e3a1b4888c933e5de9fd0f80ded300812b24de3137f609750efa78fd406d589c1dadb4f25e83765c7bfb215efdb635cbaad971b31e5c9555b3e4acd24b674e46d95026dc1de71b13386276fba5f916d52692bf1ab56f288328befd868448de19817aa7a5cd54cbab862a84c2859caa9d6a03c40c337b7fdf46077ea05ad5e47cd7218e446e7ab47a8edc8e3b594b7f3fc49419fde0b5c24ff77f6d30733294b33e27f8d13f71fd067fa35c4e09a8518e820d50319f6d004bc0e09e1c50fd64f2f13e2d4dfa599c136d2e736656ebc10aace7377d90477e8caf6d62de9a119922626c59f01987ea7e77435d37722f614fcf4826101ee3157c549e4ee354418cdf2f40861335452a99137764aa4662c3f53225b9f9f68af9ef356a17a863efb56ee6808a6788802c938c5053801a88a029e202b3134c00b860f8201b0feda6d192167bfb0f6cc2caf08c2be97f74666e02a809c04ab28931002af1577d5b5b942efeb8c1d73a7b08df079d446c16502866479b575c3a634fd48e3d3c5eedaa8f885e49faebb97f3abab262295ff5ab62441cd36053fc725f54da66295d991126e821831350edb9237718d2a1d12a016eabcebb106a51827f8a72d06d7256e99d0f87a7ba87b6c55248248bd53277db899d86fe6d386e82e4ae42ba92ba84c223246aea69f6d6386656e6c2ff8c755bf1ed1d692488eef0b5e8566c5367cc9333d69073260a0b914c99d8570fd0c8a892a3f99af3a597eebeaacdf4b8121d6de44440796153ad4ec4f9e17723c76f65f938e7580c2642f47a3ff374acdab67332752607a05ca20812b46a6db311022832e890a824a99479909144fe1a9b0645aa9486adf05be266b308fee51340716de3b8007fea3a56b4786265b4400e1fab52d19101281703a48b6eaed4c62b9b307b18364f7f066606f0a04ea3a54a1b429581aca38537c72cf60ae707b10df6f9a900cb2240d0231702fe25ac2d76c3fa5958f306ebfe38482089c15a10a0c940273f6e6672ee78623df9154da318b2808d3604b380516c005de613043d982d81e8d7a72db9921162face7ce9414a47046d827850668810d91f0b61438e6df6ff7f0246fca8323000c814215bb82eec50bd652abb3f2d969eb134e9d90e61ce11b7c82da4f44820d0acf77f656830b005307742ea8741c5a76c430db12a5468255b806c8c5d2e043ba283ac64320a51b9b3753ec67f94fa5e9964ad6827a12c98d6997e511ed30672c52cb1ca372095b5b84de0bfe3ef476ccaf2e2607f3730a2d5f2927dcc471d126fb4c41186d95cf286777bf60b3d2f3fec6f57885b555a8c7850e807b110c4755d76cb6f1a3612ce1d0a62843e4452addc43b5ff94d1d43b0d167e0a56a7359bdbd4e2cbbcb8a6a284997db610a8ed5c80bb74d1c8f17d7c4576c45488e1e54f0840948427fd1cb4e3bae4f82d46a63a4a065f6850dd3295f66587f960195f7492129dea59b8258f421b1dc841fb54cfa9a85839fd2817c9c62ff7b7a3f7e7050ce470d43794b725ca9b3b387e83108a407909ce76d699d67e1ca01fc80ee6e16a23b2e980d1f0f27b66d7ce0ca8146736df38c3b7a2a1e04e7fdcb5d90f943b31bff3cc61b020daa8d3655427d60201a2e79bdaa89a1b159e38e9ab14a8fffd698c8a3e31ded2f820012679ee243e6b34ea34cd125be957975c1611f622527516a5ddd6841e2abf4f9e7742ceb204e1016091702a5fb66c7f07e04ddaa630b1677d9285a633a46f171213aeeced5779a9159265689bf7d6b6eea37fa657b29ca8766adbfa6d9c6d1867a7d6b83b51c3b4832a7372ac694b591ede88fa8116f5f6d9429b451b7bd0cd1fb0ae79988b1bc678ae47f453a81dd2f1d1069d3a0e22287d27182b2713cf4dd3de581c2bb8866ba856d90cf71b9d35df9ffb8b01dd7928743f5bcddddb73975bb5d8d3ac419ea69f5fca0d7aad09500c286e51af317d88a61344246a4de4b0f0e320c46fde6f60867cf44e5cb9549326363a9de7b3bef943c22ac9c8f4236f223a5fec1042d7ed813259e64270ad37cdd0090730551a7679398e1c0d2f561fe3e9176f20870b1d292367443a4cc47b7b925f6d4c0158289e83ff3239fcf364d1d2c97371c3cd7c493fc2b2b92bb02840e514967521da0c9181f0b7f0a3877a08ea596c2c431cc50e885c92cc7bb9906ebd245092e453858d4866974f6303a6baa64edadba93b111248d9a06f8fccbee21b8a2557719803838368fefdec50d39f7dc771cb5171f64ce261dba756328f54e34e4146104b1bde072f8b877db2cd35895f8445afc42f8cd864f47c36dedc0b3fcbf0be738a059e5901dc30dc414d4b0edc1aef0ef2eed545dfdbe93975eb1efaf5ee2ef46dab1d9f80577ad002b5e124e0082a83b4b04d69e07db8adf4aafb4681ff73ff02d21e834b73f6b9ce3493192f5be5e1f66dc6bf2f99d069f2c726c93533923ea4afbcac66447bf2d744a678017f36dfbdc1b28e951a5938cd22042a4658e8f4807430e592256b1879dc237ba00cc5d3681ddc1e1fb7f8c5231bd4250a2b9f2d13e8e0a851f14e81569006c972c0fdd3552be016e26322e1e2e3396b8d0ab124fce132c86cd6a92f72e17763dd4fc35744ac3f9ed83947c2291f30fcbd7ba8653f71be736199a94a498b0b961ed81b66ac85c4768d51c756472da3886a3283141f253412d3f76ce974739a3954f58b5b76bfa3e6e968f7f1cdffe69b1cd526e15262516bc7e74b03d19300a478edf415c53fba313b56d16754fe744ddb4119708fce23d343ac52a7a14b8ad244b4070171087b6fbf66fe00084c1c3ea2a2aa32d8380d6665c03b8a30b9fba569f3e8960ee564087743dac5c0a8d3426f7fe5c16597f19cc0099a9b680053d20fa89e6c5d3a2b3287e14b34896935c27404cfad32c13d809c3c36801d33df88434946126c3aa9b0b46226944f8e3ccd4e97fac22b3ec2d00960d25d271ac63ad5ed8cd56a43a421b6154bc6ac70fbb422cc3ec1728b49e46c32b26b6f7fc3dea97a38dbc2e363cc423a231aa3dc6d83b71f2ab6032d8f6cb41766b0e9f183e03b269f646fcc480d081e100a711aaae5b4492c538374c1edc64a775e23b0bdf5106b7cb30fc9c842995c4f6a0047b9e8d97626f190febce86ccb062af646db0810f18eee2aba9a2f58f8ea4b8767f106f0102345e143334f1722d612fac88a01543ba3c14ce8dd8e7854722b37a1b6eda5ed4bb6320abf93142c9d13ec87e591287fbcd6bc1b98ba1abcba1aa5ea614eff4d306db504300b69ece702d5151111e99a924b886fc25e7bb49afdbe7ccb031f235bc57908a56710c004e838364acde189daaeac4d6380826d3918cc20c0c4a8f78caa7a61300bb8c09e7e2b4aded46a9306f0142065850b319e8e3b7f6219a133c8521eda157136a489b0961332e7694e68a44711c15280e574d588417e11c41e51dec2fa3ea372d70d78c643e64403d790b6295709ee80c69eaa03d61f8a105612dc3809603651137546ce96f0279809dd249d1fb62979c00c449143d64fd0fc6a32f2c1490a134c7bd8d7311162aa51795d55d8be5e1606a862d21946886a1b8d0f0629e566b4e1f9e1f4d9c85ea7f29bb5d508c8db39cb2c7e77a0f300b8010a56ed0024623b4b3fae1161fcbd065d15325c67a576f94fb04e99e4eeca4c6856111576fa8cc66e0179dd859268d6b341f840e1d3bec58456c7fcc8ff69fbe6ed4eaa39896cfde19ae3cd45f2558b2d8a06f28910c6094318eed93daeff9e9ed5da1388929963c3e1f852711f577b3834794c11c50153ad95098c96bcefb8e004aaa5d04bb8502a351c849db9f51b707acdeffd7811c136ea8803df21bfe6fef446fa0a2aed24c173754a4c62646ab81c7d8a4008df3851c0e93eb4d8d6fe63ed26f9656316597667be248f79ea4a8d202e7061cbd2ef0d15fe15a11ff2039bd398dbd317aaf8346c51236ecfd4e2fb6ad69346c20fd6496bee0b11de9acebce46cf3a4063bd0c97e9ef71ea2bbeab31065c00a584e092d26c41225db40782f33805752de6d98c63ee89cedbc44d9e9c728194123e7dbec63d46191e934f7b2e35ea06d29e75949baf1bb4ea96568a874ba6f96ee43f8a2480aac1f3bfebe7fd2534adb242387134fb41dc4988c393f59fc17becf2b9c8bbd561a8d419a93a0a5763c107f2c62db57f2d90ae60c6fe838cde89933c0c3453f2d619de83725de17219816b8dc4acc023104d463969dc00e5aa945a61b90bbe574a6748ed41e989f7f25500b658fea218a92920275a55b2296d214ead10500705a58b17ee564f42a1fbb8dea286c368c5d16796abfff8be32152dbadec38ad61914ec5c5d93b91d41866491fa13502c98b56c1eb7ffd2b931a7dc06a9b37a47751b59c1b2a8c28f0d9ca6d51a1da65b371a80c856e017838eb6944316dcf3bcebceeaa6a551b654a55775acb4b982ea75f1aa22a670d7cc62b96ecd0268c53e4d31e350b3fc83929472242256e4c2d53858cb43bea332319d193eaaf50a11830be9b1d33e9f80fa447acaff11bd5915d4de0ed8c1591341a2fbf57ce46cde6b7c0e6697e1a3225c82917c1a00b083da205f54d426b63440e328a7c717bb7e96231322c90d4ec0fd370adee784b6a318a54f18c181f0b0a9cef7042495a5aed20772b3fa0556dbf875765d393f292732a2fa013369d25313e827b6bf89b4a68a76bd83d6dbc2ae6f84fea6c7ae682eedce16efe0bc2e18a8c7f44d35f3c1cf394e47345e3dd0296c02f15a12f239d7da14c77f0c9055e99ff741be4af32970efa8b74c0091ebaefb2bc29342c1e46e1e90914daf6b5ab4db354572010a361929f88551b51264bbcc0e9eb6f3d99a4fdb5849fb6de389d7e41926256c68a2f5e30ee5fd82b26e45901dd1d3be1c7eec72434865cfb902ccdf3d552109a18ff59723acb43e05a726329e22e175191df225881137f96e1106d4812cacd81f9640921a864143da5dff1d40718264357ab63b5638e91fac940adfcaac6d4e9628496c1012b391e8337eb5357434ba382b5b553a146272cbad7e463b69a11fedf50ec1e65de69d9eb72e43fa286288f0c75fbe7e642b67777a77b2e7f745cb647463f5356843df161fbfbacd078a079abb5a76a040660d2ee928340bc2d52f61b783eeb4f8ecae6e90828dfd7c22a784d6845e5bcc3eec9d060ee1b39e4e4342544d802b089463af42a2e4fbc01bc093577404bef456204695d7bc11d3f320d5a9c8a396195520443e9fa3acc9b16acf1d62ae784e4732a5a95d9f857a08ab797a3948082c275509221e65f077a782e6042816fcd1c0237808d539fae2a4f219e09d8d48bd4e715b6c02b0f747b956f3b84817995f8e869b98d136776a67b060e5bc4a700f6988e4316a4e64433ca6336db4524a16253440f230ddd5b771d7953fbbeb9c8b2a9381eb2c844cf9a99254999157c2ef5ae526c0b70bf8ae31a3d1704ec1f24eac4dffc9e1a7d2616bbd05f459844b1f9d12a6f1da0d0d59329fec394801781acd570b413765dbe13f25a5288ab147f957c328f48cda45dec3797ca171a07aa432d720ee16b02583dac5eda1161e8dc9408002365980b713271c5e712fb938297edab7deb7122257acce6b82f5e0f9e2b6d556c24589a1c31c59ea99df844448926331560f857e65d482d1bc10e5eaaacfd8b6c6553f420d4799be4a9d6bf2bdb1f2c11139059863fd4e69761a6c853e718b14ac0c0c328b90a4eed3d2b53b55f5a73e0bf245bceab54abbb37d78a9c86c9ce7c9d61896475f686a653b5f90ae6a88a75b31842ad616dc53446b26daec504dc78672687b1cfa022fbc8f4c5125df419502ea2b60ee4f01578617a31c1da7f2539181a3d50aee51b51cd84bcafc9a060fe5eb9d56708248dfd0a637161c384f7a971290eba3ca86f3e2a1bf8705df091ee418da7826d64dac8ea62f0149a2ad0e066f517648f1d1a7d57d059290162f551687a28714166dee2e01ee10eb4952b6d3969a7a98699b920807a5e65289cc12ea320945f2361c31029ae10d0312bcca0fcda9d631c781f935156df2ac45d032029bbc15dfe580a9db7e6b303af1255a3fad0b2b93973d1fe9f080814d8ee14e71fc5bb3658a334bbacb719ff31786c742160bd9ff89741487861ad4bf298636e256e8e03023cf7b139fb74d88d030869514cbd3262105303ca3b94d7bf3a58b550e131289f5f818f07756add411f9b94a00c35e9d1861adab43a8130f93fa6018b972b8fa781e2d522be60ee5f279d14aadb03c1395f2136c0631b5169d0652369271cf1a2394f7b41e341c9f4292b27e572f730466b293a15466d9b2bd71cdbf519032ed92d6780bb6019ddb7ef9d289585d4dc9d72cea5e64dc24589f30d1016d522dc8f72b709be08d9af2cb59b926340e793632755003ec05803db62c00f397a479f6866389ac66f6be478d4a6787d0bf81754d5c1bae733fe36957d68e6894c733313714224ac5ecb5e8183a5981233215b9fe746a0e0d3cdb61c6012d48a26919645e0b2fad175e37f452d08eb2ddf14ae340b6fd48135da90bb39382e8a36d0a3046f45a89d3fafcab064a27911504ec90306afbb64142df32d11c13cfbb10a3302cb545f535b035ea4e507e2039b8fe7d6bf25923b3795e9470ff0bb8ea7fa9c41fe4927ed47da979377f91b9cd1dd3b42ff9d2511c5c8fc7e3553a2c9e4347c1e93bf5c0dbc46b86a3571f81e2d13eabf7b240f3301e3ad4a21ccc1bf336a802caa82f0c5931b42b382080370b6761d8ada258c53471ed9898cc9e65d5ecc74d404dd57f56b7c23afac2401aedf54ae17c788a0f8f1ee868e0a94bcb5c180b396eadf6137e0923f0b02288472324e1eab10c278bf3582c4f17555a3a02933574ad1893b8ea5d0b76a9132ac474d3c13949d765bc9d18c12a7e75a1900d614870ff2d701659cf4d7f1aed 您好, 这里需要密码.

2023/6/3
articleCard.readMore

Azure for Students 使用指北

准备 一个有 Azure for Students 的微软账户。 Azure for Students 提供了免费一年的两台 B1s 实例,两块 P6 64G 硬盘,本文将介绍如何利用好这些资源并且不会因为 Azure 毒瘤计费机制产生额外花费。 B1s 包含 1vcpu 和 1GB RAM 虽然配置不高但也还能用 登录 Azure 使用浏览器打开 Azure 后台,点击订阅,如果有 Azure for Students 的订阅就说明白嫖到了两台机子。 开服务器 返回到主页,点击 Azure 服务->虚拟机->创建->Azure 虚拟机。 接下来来到比较复杂的一步,项目详细信息部分不用管,会自动填写。 示例详细信息部分: 虚拟机名称:你的虚拟机名 区域:推荐 East Asia 和 Japan East,分别是中国香港和日本。 映像:即选择你的系统,Linux 推荐 Ubuntu 20.04 LTS;Windows 只有 Windows Server 2012 运行比较丝滑,点击 查看所有映像,找到 [smalldisk]Windows Server 2012 Datacenter-x64 Gen2。 大小:查看所有大小,选择 Standard_B1s。 注意如果是 Windows 机器不要选择 Azure 混合权益 其他都不用管。 如果是 Linux 按下图配置,Windows 自行解决。 入站端口全部勾选,接下来配置磁盘。 完成后,直接点左下角 查看+创建,系统验证完成后点击 创建,等待一会即可。 至此,你的虚拟机创建完成,IP 地址可在概要中找到。 连接 如果你会用则可以跳过。 Linux Linux 连接需要借助 SSH,推荐 termius 软件。 以下以 termius 为例,其它 SSH 软件配置也大差不差。 点击侧栏中 Hosts 选项,Add New Host。 按照这样填写,其他部分不用管,填写完成后点击 Set a Key->New->Import from key file,选择你之前在 Azure 下载的密钥文件,点击右上角 Save 后选中这个新建的 Key,然后点击右上角连接符号即可连接。 Windows 这里以你的实体机操作系统为 Windows 系统为例。 搜索 远程桌面连接 软件,打开后现点左下角显示选项,输入 IP 地址和你设置的用户名,然后点击连接,输入你设置的密码即可连接。 其它 如果你的虚拟机为 Windows,你会发现你的硬盘并没有 64G,所以我们需要处理这块硬盘的分区。 按下 win+x 键,找到 磁盘管理器(Disk Management)打开它,然后按下图操作。 题外话 其实 1G 的内存说实话当服务器确实有点小,较大型的项目肯定跑不了,小型的还是可以的。Windows 的服务器可以运行一些软件用来挂机。

2023/2/2
articleCard.readMore

AT_ABC286C 题解

洛谷题目传送门 | AT 原题传送门 思路 观察题目可以发现 A 操作最多只能执行 nnn 次,超过以后字符串又会回到初始状态。 首先考虑 A 操作如何实现,一种办法是将 SSS 在原串后复制一遍,通过移动一个记录初始位置的指针(本文中为 iii)来实现截取 nnn 位字符。每次移动指针代价都为 AAA。 接下来考虑 B 操作的代价计算。我们可以判断之前截取的字符串是否为回文。回文字符串判断应该都会吧通过移动起始位置和结束位置指针,比较两指针对应的字符是否相同进行回文判断,每次遇到不同,总代价都加 BBB。 值得注意的是结束位置指针的取值。每次 A 操作执行完成,截取出的字符串末位下标为 n+i−1n+i-1n+i−1,在此基础上再减去起始位置即可。 回文判断部分代码: 1 2 3 4 5 6 7 8 9 10 /*i 为 A 操作中起始位置指针,t 为总代价*/ for(int j=0;j<n/2;j++)//回文判断循环变量只需到 n/2 { int x=i+j;//起始位置 int y=n+i-1-j;//结束位置 if(s[x]!=s[y]) { t+=b; } } 以 A 操作中起始位置指针作为外层循环变量,范围 0∼n−10\sim n-10∼n−1,内层循环为回文串判断。总时间复杂度 O(n2)O(n^2)O(n2)。 一些小细节 观察数据范围可知需使用 long long\text{long long}long long; 最大值可取值 2622^{62}262 即 1ll<<62。 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include<cstdio> #include<string> #include<iostream> #define INF 1ll<<62 #define ll long long #define int ll using namespace std; int n,a,b; int ans=INF; string s; signed main() { scanf("%lld%lld%lld",&n,&a,&b); cin>>s; s+=s; for(int i=0;i<n;i++) { int t=a*i; for(int j=0;j<n/2;j++) { int x=i+j; int y=n+i-1-j; if(s[x]!=s[y]) { t+=b; } } ans=min(ans,t); } printf("%lld\n",ans); return 0; }

2023/1/28
articleCard.readMore

洛谷 AT1898 题解

洛谷题目传送门 | AT 原题传送门 一道简单的打表题。 我们可以把题目给出的 121212 个音所对应的输入字符串先存好,然后直接字符串比对。 然后按照比对结果输出对应的音符即可解决本题。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include<string> #include<cstring> #include<iostream> using namespace std; string s,str; string s1[20]={"","WBWBWWBWBWBW","BWBWWBWBWBWW","WBWWBWBWBWWB","BWWBWBWBWWBW","WWBWBWBWWBWB","WBWBWBWWBWBW","BWBWBWWBWBWW","WBWBWWBWBWWB","BWBWWBWBWWBW","WBWWBWBWWBWB","BWWBWBWWBWBW","WWBWBWWBWBWB"};//输入给出的颜色打表 string s2[20]={"","Do","#Do","Re","#Re","Mi","Fa","#Fa","So","#So","La","#La","Si"};//对应的音符打表 int main() { cin>>s; for(int i=0;i<=11;i++) { str+=s[i];//截取输入前 12 位 } for(int i=1;i<=12;i++) { if(str==s1[i])//字符串比对 { cout<<s2[i]<<endl; return 0; } } return 0; }

2022/7/20
articleCard.readMore

洛谷 CF1036A 题解

洛谷题目传送门 | CF 原题传送门 本题难度严重低于橙题 思路 这道题思考时,不妨设第 iii 个三角形的高为 hih_ihi​,面积为 SiS_iSi​,同时,题目还有已知条件底为222。 根据三角形面积公式,我们可以得到: S=S1+S2+⋯+Sn=(h1+h2+⋯+hn)×22=h1+h2+⋯+hn=kS=S_1+S_2+\cdots +S_n=\dfrac{(h_1+h_2+\cdots +h_n)\times 2}{2}=h_1+h_2+\cdots +h_n=kS=S1​+S2​+⋯+Sn​=2(h1​+h2​+⋯+hn​)×2​=h1​+h2​+⋯+hn​=k 由于 ∑i=1nhi=k\sum_{i=1}^n h_i=k∑i=1n​hi​=k 不变,同时满足最大的 hih_ihi​ 最小,所以 hhh 的值需要平均。 分析到这答案就出来了,即为 ⌈kn⌉\lceil \frac{k}{n}\rceil⌈nk​⌉,也就是 ⌊k+n−1n⌋\lfloor \frac{k+n-1}{n}\rfloor⌊nk+n−1​⌋。 代码 1 2 3 4 5 6 7 8 9 #include<cstdio> #define ll long long ll n,k; int main() { scanf("%lld%lld",&n,&k); printf("%lld\n",(k+n-(ll)1)/n); return 0; }

2022/7/13
articleCard.readMore

洛谷 CF1040A 题解

洛谷题目传送门 | CF 原题传送门 基础回文数判断题。 感觉题目翻译并不是很好,需要注意回文串中不能出现 222,例如 102011 0 2 0 110201 不能作为最终答案。 思路 直接把数组从 111 到 $\lfloor \frac{n}{2}\rfloor $ 扫一遍即可。 有以下几种情况需要分类讨论: 如果原串首尾不同但不是 222,即形如 101001010010100 这样的,无法变为回文串,直接输出 −1-1−1; 如果原串首尾都为 222,只需要把两个 222 都换成 000 和 111 中代价最小的数; 如果原串首尾有且仅有一个是 222,把那一个 222 改为和另一端相同的数; 最后再特判 nnn 为奇数的情况,如果中间数为 222,ansansans 需要再加上 min⁡(a,b)\min(a,b)min(a,b) 以形成不含 222 的回文串。 然后这道题就很简单了。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include<cmath> #include<iostream> using namespace std; inline int read() { int s=0,w=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } int n,a,b,t[30],ans=0; int main() { n=read();a=read();b=read(); for(int i=1;i<=n;i++) t[i]=read(); for(int i=1;i<=n/2;i++) { if((t[i]==0 && t[n-i+1]==1) || (t[i]==1 && t[n-i+1]==0))//首尾不同且不是2 { cout<<-1<<endl; return 0; } else if(t[i]==2 && t[n-i+1]==2)//首尾都为2 { ans+=min(a,b)*2; if(a<b) t[i]=t[n-i+1]=0; else t[i]=t[n-i+1]=1; } else if(t[i]!=2 && t[n-i+1]==2)//结尾为2 { if(t[i]==0) ans+=a,t[n-i+1]=0; else ans+=b,t[n-i+1]=1; } else if(t[i]==2 && t[n-i+1]!=2)//开头为2 { if(t[n-i+1]==0) ans+=a,t[i]=0; else ans+=b,t[i]=1; } } if(n%2==1 && t[n/2+1]==2) ans+=min(a,b);//n为奇数需要特判 cout<<ans<<endl; return 0; }

2022/7/12
articleCard.readMore

洛谷 SP3591 题解

洛谷题目传送门 | SP 原题传送门 本题双倍经验,同主题库P2926 思路 又是一道桶的题。 首先暴力,对于 N=100000N=100000N=100000,复杂度 O(n2)O(n^2)O(n2),显然超时。 考虑优化。 看题面,不难想到用桶记录每个数字的出现次数,只需要遍历数组找到比 aia_iai​ 小的数即可。 但是这样仍然超时,继续优化。发现遍历数组时没必要全遍历一边,只需要遍历到 n\sqrt{n}n ​ 即可。 注意以下几点: 对于完全平方数,n\sqrt{n}n ​ 会计算两遍,此时答案数减一; 奶牛会拍到自己的头,答案数还需要减一。 然后就可以看见一篇绿色了。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include<cmath> #include<iostream> #include<algorithm> using namespace std; inline int read() { int s=0,w=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } const int N=1e5+10; int n,ans=0; int a[N],t[1000010]; int main() { n=read(); for(int i=1;i<=n;i++) { a[i]=read(); t[a[i]]++; } for(int i=1;i<=n;i++) { ans=0; for(int j=1;j<=sqrt(a[i]);j++) { if(a[i]%j==0) { ans+=t[j]+t[a[i]/j]; if(j*j==a[i]) { ans-=t[j]; } } } cout<<ans-1<<endl; } return 0; }

2022/7/9
articleCard.readMore

洛谷 AT278 题解

洛谷题目传送门 | AT 原题传送门 思路 这道题考察了桶的思想。 定义两个桶,分别存放给出招牌中的每个字母的数量和配件包中的每个字母的数量 有两个小问题需要注意: 当招牌需要这个字母,而配件包里没有,直接输出 −1-1−1 并结束程序; 需要特判当配件包里的每个字符数量如果是 000,就要跳过本次循环,避免除数为 000。 思路不难,看看代码和注释就能理解吧 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include<cmath> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int ta[30],tb[30]; int n,m; string a,b; int maxn=-1; int main() { cin>>n>>m; cin>>a>>b; for(int i=0;i<n;i++) { ta[a[i]-'A'+1]++; } for(int i=0;i<m;i++) { tb[b[i]-'A'+1]++; } //上面的两个循环是桶的初始化,记录字符出现的数量 for(int i=1;i<=26;i++) { if(ta[i]!=0 && tb[i]==0)//特判输出 -1 的条件 { cout<<-1<<endl; return 0; } if(ta[i]==0 && tb[i]==0)//特判除数为 0 时的情况 { continue; } maxn=max(maxn,(int)(ceil(1.0*ta[i]/tb[i])));//直接进行计算 } cout<<maxn<<endl; return 0; } 求管理大大通过

2022/2/19
articleCard.readMore

洛谷 CF141B 题解

洛谷题目传送门 | AT 原题传送门 思路 这道题考察了桶的思想。 定义两个桶,分别存放给出招牌中的每个字母的数量和配件包中的每个字母的数量 有两个小问题需要注意: 当招牌需要这个字母,而配件包里没有,直接输出 −1-1−1 并结束程序; 需要特判当配件包里的每个字符数量如果是 000,就要跳过本次循环,避免除数为 000。 思路不难,看看代码和注释就能理解吧 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include<cmath> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int ta[30],tb[30]; int n,m; string a,b; int maxn=-1; int main() { cin>>n>>m; cin>>a>>b; for(int i=0;i<n;i++) { ta[a[i]-'A'+1]++; } for(int i=0;i<m;i++) { tb[b[i]-'A'+1]++; } //上面的两个循环是桶的初始化,记录字符出现的数量 for(int i=1;i<=26;i++) { if(ta[i]!=0 && tb[i]==0)//特判输出 -1 的条件 { cout<<-1<<endl; return 0; } if(ta[i]==0 && tb[i]==0)//特判除数为 0 时的情况 { continue; } maxn=max(maxn,(int)(ceil(1.0*ta[i]/tb[i])));//直接进行计算 } cout<<maxn<<endl; return 0; } 求管理大大通过

2022/2/10
articleCard.readMore

洛谷 AT2561 题解

洛谷题目传送门 | AT 原题传送门 思路 桶的思想。 用数组 ttt 存储 aaa 出现的次数,然后循环,用 kkk 减每个数出现的次数,看在哪个数时满足 k≤0k \leq 0k≤0 的条件,直接输出这个数的下标即可。 注意不开 long long\texttt{long long}long long 见祖宗 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include<cstdio> #include<iostream> #define ll long long using namespace std; ll n,k,a,b; ll t[100010],ans=0; int main() { scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++) { scanf("%lld%lld",&a,&b); t[a]+=b;//t为桶,增加a的个数 } while(k>0)//当k<=0时跳出循环 { k-=t[++ans];//每次k自减t[++ans] } printf("%lld\n",ans); return 0; }

2022/2/7
articleCard.readMore

洛谷 AT3525 题解

洛谷题目传送门 | AT 原题传送门 思路 分析题目可以很简单地得到,如果满足 pi=ip_i=ipi​=i 的条件,那么交换 pip_ipi​ 和 pi+1p_{i+1}pi+1​ 后得到的结果一定是最优解。 我们要做的只是从前到后遍历一遍 ppp 数组,如果 pi=ip_i=ipi​=i 就交换 pip_ipi​ 和 pi+1p_{i+1}pi+1​,同时 ansansans 累加。 看到楼下有大佬说当 i=ni=ni=n 是需要特判,但其实完全不需要,只要数组开的够大,也不会在交换 pnp_npn​ 和 pn+1p_{n+1}pn+1​ 时发生越界情况。但为了严谨也可以特判。 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n,p[100010]; int ans=0; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&p[i]); } for(int i=1;i<=n;i++) { if(p[i]==i) { ans++;//答案数量增加 swap(p[i],p[i+1]);//交换p[i]和p[i+1] } } printf("%d\n",ans); return 0; }

2022/2/7
articleCard.readMore

洛谷 CF899B 题解

洛谷题目传送门 | CF原题传送门 这个题是让求输入的连续几个月份是否合法。 直接模拟就行了吧。 需要注意闰年的情况。 大体思路 先打表确定每个月的天数,因为有 242424 个月,所以需要注意包含平年和闰年的全部情况。 因为输入是带有空格的,所以预先打表的月份天数之间也要带有空格,我们可以按照 平年、平年、闰年、平年、平年 的顺序预打表。 大概是这个样子: 1 2 // |平年-------------------------------|平年-------------------------------|闰年-------------------------------|平年--------------------------------|平年------------------------------- string sample="31 28 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 31 29 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 "; 读入每个月份时,需要用字符串,注意有空格,所以要用 getline,但如使用 scanf 读入的 nnn,需要用 getchar(); 吞上一行的回车。 输入字符串时,无需进行任何操作。读完后,直接使用 sample.find(s) 查找。 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include<cstdio> #include<string> #include<cstring> #include<iostream> using namespace std; // |平年-------------------------------|平年-------------------------------|闰年-------------------------------|平年-------------------------------|平年------------------------------ string sample="31 28 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 31 29 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 "; int n; string s; int main() { scanf("%d",&n); getchar();//吞n后面的回车 getline(cin,s);//读入一整行(包括空格,但不包括回车) if(sample.find(s)!=string::npos)//判断是否合法 { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } return 0; }

2022/2/4
articleCard.readMore

洛谷 AT4787 题解

洛谷题目传送门 | AT原题传送门 思路 这其实是一道递推题。 打眼一看,这道题和P1255 数楼梯是差不多的,只不过是本题又新增了一个条件:有 mmm 个楼梯是坏的。 如果没有这个条件,我们可以定义,第 iii 阶楼梯的总方案数为 fif_ifi​,从题目中可以很容易得出:fi=fi−1+fi−2(i≥2)f_i=f_{i-1}+f_{i-2}(i \geq 2)fi​=fi−1​+fi−2​(i≥2),因为只能从第 i−1i-1i−1 和第 i−2i-2i−2 阶楼梯上到第 iii 阶楼梯。 加上那个条件后,我们可以定义一个 bool\texttt{bool}bool 数组 vis\texttt{vis}vis,如果第 iii 阶楼梯是坏的,那 visi=truevis_i=truevisi​=true,否则 visi=falsevis_i=falsevisi​=false。 有几点需要注意: 每次递推都需  mod 109+7\bmod 10^9+7mod109+7; 如果连续两阶楼梯都是坏的,也就是 visi=truevis_i=truevisi​=true 且 visi−1=truevis_{i-1}=truevisi−1​=true,直接输出 000 并退出程序(不判断也不会超时); 从第 000 阶台阶开始计算; 赋 f0f_0f0​ 和 f1f_1f1​ 的初始值时要特判第 000 和第 111 阶楼梯是否损坏。 直接上代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include<cstdio> #include<iostream> using namespace std; inline int read()//快读 { int s=0,w=1; char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } const int mod=1e9+7; int n,m,a,f[100010]; bool vis[100010]={0}; int main() { n=read();m=read(); for(int i=1;i<=m;i++) { a=read(); vis[a]=1;//标记该台阶已损坏 if(vis[a] && vis[a-1])//判断是否有连续两个台阶是坏的 { cout<<0<<endl; return 0; } } if(!vis[0])//特判第0和第1阶楼梯是否损坏 { f[0]=1; } if(!vis[1]) { f[1]=1; } for(int i=2;i<=n;i++) { if(vis[i]) f[i]=0;//如果该楼梯损坏,则无法上到该楼梯 else { f[i]=(f[i-1]+f[i-2])%mod;//递推式(不要忘了取模) } } cout<<f[n]<<endl; return 0; } 记得结尾要换行哦

2022/1/27
articleCard.readMore

洛谷 AT4810 题解

思路 直接暴力枚举。 有两点要注意: 如果当前求得的最小值为0,直接输出并退出程序;我第一遍就是这么TLE的。 数据范围是 2×1092 \times {10^9}2×109,再一乘必然会爆 int\texttt{int}int,所以要开 long long\texttt{long long}long long。 上代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include<cstdio> #include<iostream> #include<algorithm> #define ll long long using namespace std; ll l,r; ll ans=2020;//ans的初始值只要小于 mod2019 也就是2018 就可以 int main() { scanf("%lld%lld",&l,&r); for(ll i=l;i<=r;i++) { for(ll j=i+1;j<=r;j++) { ans=min(ans,(i*j)%2019); if(ans==0)//如果为0直接输出并退出程序,否则会超时 { printf("0\n"); return 0; } } } printf("%lld\n",ans); return 0; } 岛国的题一定要行末换行

2022/1/26
articleCard.readMore

洛谷 SP5450 题解

题目传送门 蒟蒻的第一篇题解 题目大意 这道题翻译言简意赅,不用我说了吧 先吐槽一下输入输出样例,这里给出调好格式的: 输入样例 1 2 3 4 2 3 1 2 0 0 输出样例 1 2 3 6 2 思路 先画个毫无必要的图理解一下 这个题分这么几步解决: 求正方形边长 求横边和纵边上分别有几块地砖 求总共需要几块地砖 显而易见,正方形边长为 lcm(W,H)lcm(W,H)lcm(W,H) ( WWW 和 HHH 最小公倍数) 然后不难得到,ans=lcm(W,H)W×lcm(W,H)Hans=\frac{lcm(W,H)}{W}\times \frac{lcm(W,H)}{H}ans=Wlcm(W,H)​×Hlcm(W,H)​,也就是横边上地砖数量 ×\times× 纵边上地砖数量。 下一步就是求 lcm(W,H)lcm(W,H)lcm(W,H),通过极其复杂非常简单的思考,可以得到 lcm(W,H)=W×Hgcd(W,H)lcm(W,H)=\frac{W\times H}{gcd(W,H)}lcm(W,H)=gcd(W,H)W×H​ gcd(W,H)gcd(W,H)gcd(W,H) 直接辗转相除法求就可以了 上代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 //By makerlife #include<cstdio> #include<iostream> #define ll long long using namespace std; ll gcd(ll x,ll y)//辗转相除求最大公因 { if(y==0) return x; else return gcd(y,x%y); } ll lcm(ll x,ll y)//求最小公倍数 { return x*y/gcd(x,y); } ll w,h;//记得开long long int main() { while(cin>>w>>h) { if(w==0 && h==0) break; printf("%lld\n",(lcm(w,h)/w)*(lcm(w,h)/h)); } return 0;//完美结束 } 记得绑定个人账户提交SP的题啊 这里再推荐一道题 P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

2022/1/1
articleCard.readMore