-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathposts_to_import.json
More file actions
1 lines (1 loc) · 116 KB
/
posts_to_import.json
File metadata and controls
1 lines (1 loc) · 116 KB
1
[{"id":"53cc25f9975a16d2349b7351","title":"Atom Feed with <a href=\"http://www.playframework.com/\">Play! Framework</a>","body":"<p>\nRecently, I implemented an atom feed in a scala play application. Coming from Java, I immediately thought about <a href=\"https://rometools.github.io/rome/\">ROME tools</a>. They are quite easy to use – like in this example code for creating a single entry element:\n<pre class=\"prettyprint linenums\">private SyndEntry createEntry(final Post post) {\n final SyndEntry entry = new SyndEntryImpl();\n\n entry.setTitle(HTMLUtils.stripHtmlTags(post.getTitle()));\n entry.setDescription(createDescription(post));\n entry.setAuthor(post.getAuthor().getName());\n entry.setPublishedDate(post.getDateCreated());\n entry.setUpdatedDate(post.getDateUpdated());\n entry.setLink(Configuration.getInstance().getBaseUrl() + \"?postId=\" + post.getId());\n\n return entry;\n}</pre>\n</p>\n<p>\nBut this seems overly verbose – quite a lot of code to create just some XML… With Play!, there is a much more straight forward approach, using the builtin template engine.\n</p>\n<h3>Controller</h3>\n<p>Create a simple controller:\n<pre class=\"prettyprint linenums\">package controllers\n\nimport views._\nimport models.FeedConfig\nimport service.PostService\nimport javax.inject.Inject\nimport play.api.mvc.Controller\nimport play.api.mvc.Action\n\nclass AtomFeedController @Inject() (postService: PostService) extends Controller {\n def createAtomFeed = Action {\n Ok(views.html.atomFeed(FeedConfig, postService.findAll())).as(\"application/atom+xml\")\n }\n}</pre>\nThe action simply returns a templated view, setting the suitable <code>Content-Type</code>. <code>FeedConfig</code> is a simple configuration object:\n<pre class=\"prettyprint linenums\">package models\n\ncase class FeedConfig(\n title: String,\n subtitle: String,\n authorName: String,\n ...\n)\n\nobject FeedConfig extends FeedConfig(\n title = \"My feed title\",\n subtitle = \"My feed subtitle\",\n authorName = \"Me\",\n ...\n)</pre>\nYou should be able to guess what <code>postService.findAll()</code> does ;)\n</p>\n<h3>Template</h3>\n<p>\nYep, it's just a simple Play! template:\n<pre class=\"prettyprint linenums\">@(config: FeedConfig, posts: List[Post])\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<feed xmlns=\"http://www.w3.org/2005/Atom\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n <author>\n <name>@config.authorName</name>\n </author>\n <title>@config.title</title>\n <subtitle>@config.subtitle</subtitle>\n <id>@config.feedId</id>\n <updated>@if(!posts.isEmpty) {@posts(0).edited}</updated>\n\n <link rel=\"alternate\" href=\"@config.baseUrl\" />\n <rights>@config.copyright</rights>\n <dc:rights>@config.copyright</dc:rights> \n\n @for(post <- posts) {\n <entry>\n <title>@post.title</title>\n <link rel=\"alternate\" type=\"text/html\" href=\"@permalink(config, post)\" />\n <id>urn:uuid:@post.id</id>\n <updated>@post.edited</updated>\n <summary type=\"html\">@post.summary</summary>\n <content type=\"html\">@post.body</content>\n </entry>\n }\n</feed></pre>\nFinally, the <code>@permalink</code> template creates more or less SEO-friendly hrefs:\n<pre class=\"prettyprint linenums\">@(config: FeedConfig, post: Post)\n@{\n val titlePart = post.title.replaceAll(\"\\\\<.*?\\\\>\", \"\").replaceAll(\"\\\\&.*?\\\\;\", \"\").replaceAll(\" \", \"-\")\n val datePart = post.created.toString(\"yyyy-MM-dd\")\n config.baseUrl + \"/\" + datePart + \"/\" + titlePart\n}\n</pre>\n</p>\n<h3>Recap</h3>\n<p>\nYes, that's it. While this implementation is only slightly shorter than the Java (JAX-RS <a href=\"https://jersey.java.net/documentation/latest/message-body-workers.html#d0e5370\">MessageBodyWriter</a>) implementation, I like the less abstract style. Also, we can omit another 3rd party lib ;)\n</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1405887993803,"dateCreated":1405887993803,"dateUpdated":1405887993803,"comments":[]},{"id":"53b1796a975a48b44727c742","title":"A Slick Silhouette","body":"<p>According to <a href=\"http://wasis.nu/mit/blog?postId=539ada9d975a48b447276baf\">recent research</a>™, <a href=\"http://www.scala-lang.org\">Scala</a> is the most hyped language for the Java VM. Since I don't like missing hypes, I thought I should have a look at it.</p>\n<p>I quickly came across <a href=\"http://www.playframework.com/documentation/2.3.x/ScalaAnorm\">ScalaAnorm</a> (which I think is a bad joke), <a href=\"http://slick.typesafe.com\">Slick</a> (awesome) and <a href=\"https://github.com/jaliss/securesocial\">SecureSocial</a>. Since I couldn't find good examples of how to do custom views with SecureSocial, I started looking for alternatives. And yes, there is this great project called <a href=\"http://silhouette.mohiva.com/\">Silhouette</a>. It does more or less anything SecureSocial can do, but the corresponding <a href=\"https://github.com/mohiva/play-silhouette-seed\">seed project</a> is very wow…</p>\n<img style=\"margin-bottom: 10px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAj4AAAK1CAYAAADIReS3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAMnSSURBVHhe7J0FnBRXuvZZu9/eu3r3rntcCMQIxIjbbnZjxDbZzW7cIAkhTtwDxEMSQiAJ7jK4uw9jMMzA4A6DDD6Dvd95j1Sfqj7dXd3Tw0xPP39+D6fqeFV3nfPMqeruBtOnz6CcYcPoq6+/pg7vvktPP/0MNTylEQRBEARBUEbr4Ydb0osvvkQdP/2UevTsSUNzcqjB4ME59HmnzvT22+1kpkaNGksTVFm1n/YfOFD/tL92VVUntT+8xPuC3xt1QfukqvyqhCAo7QpeZ4FrsTbFY5JzrIop1xhYPR08eIjuueceER48YurYsaMzvib02SP3OuMzQbdedhGNHDWKHmv9OHXo8B51/eobatC+fXtq2bIl/e53v6evv+lGu/bspc1bK2j9pi20rr5po19rnSqvMa0x2hBPm2NqtdH62Fq1flO01vm10qeNtHKtXyuitIFWrFFa7tCy1evjaukq1jqfyoxW2lortSSoFX4tllrj13K/SmNqdUTLIipJi1ZJLVoKQemTeV+533PJyX7P+64F57USfV1FXXeBa1MqcP2a69p3revrPzgu8FjhGkNsucYgMz7JsSowfgXHNznmWWNgcHx0jaGusdaTGJN3791Ht//zDtot5s+t2ytqXLt276EPPvxQmlJXerR2RGlbUBVu7dqzhzo++B+qWFxMa4cNkNowfABtHKFULrRFqj9VaO0U2i3Vl/YK7ROqDCHOF8zL+1wH18V17tL1czvbhbhdbn+z7g+L+8f93F44n267/CJavnyF9DiPPvY4tWv/LjVg08MrPV9//Q1t37HLbRgyXcLQJDY9brOSDnmGh+U0O0apG57Vjos16oIW8syOUWBQCA4a8QzP8tXxTY/L8LCiDQ8resAMDqhRhsc1MAu5BnDfIG8N/q7JITnZE5N74oKg6ir4PnO/F8PLvgZ814bj2nFdY1L2tRi4VqUC13OU+WEFxoaI3GOKEY89rjEpYoD841hwnPONgYEx0lNgPOUx1j32KuNz2xE2Pu9/kIzxMUpgflgO4/PJff+mipIFtHZwb0/rhTYOYfWkcqEtQtuEKoYq7RLarbW3mjL1sLhern+7ELfH7W4W4n5s0P0yfdwyfw7dfOlFclWQPQ57nXPPPZcatGjRQt7e4pUep2nIdAlTk/Gmx3GhRRR9gbou4iNleJTZiWN4WL7BL3qAtAdP5+oOyzEQuwZt36AeGPBdE0J4RSYh10QFQTUl+73nfm+GU/B68F0rjmvJdc05r03r+pUKXN/hV39YajxxjTWsumKAasP4vPve+ykYH1Zy5oeNz0d33UbbigtpZd9vpNYIrRVa3/8b2iC0UahcaMuAr2mbUIXWroFf026pr2hvCHG+PY44roPr2qnr3S7EbbG4XW6f+7Fe94v7x/3cMmcG3XTx+bRnX6X0OOx1rrn2empw4oknymd6+PaW0zhksoSpiW94WG7Dkg5Vx/CwgheXX+oC9F2UjotWGZ7Ypic4MHgDhlDUgMKDTAqmx2V2UlrhYTkGX9cg7RvErcHdNQEkp8ik45qUIOhIyX4vut+r4WVfI75rx3Ftua7BqOs0cC1LBa53Mw74xobA2KEUwvw4DJA9lgXHOXsM9I2Nerx0jaX2WGvGXzMeG+Ozc9du2rxlawhti62tSuVxtGPnLurw7nvSaLnSWR917EItbr4vlDivqw4Wt/XRHTfSlsL5tLR7J1outJLVoxOtEVortL5nJ9qotUVru1BFz89pp9Auod1aHZ9+ztc278eLZ3EdXFeFqHObrr9cyLTJ7XM/Vgtxv7h/3M+NM6ZQiwvOkcaHPQ57nVNPO4Ma8NIPRzqNQ6ZKGJrEpsdtVtKlI2p6XBepUJTpCVzw/sEghtkxStXwsOyBzRr4PAUGyCjD4xhoXQOyf8AWsgZz12CfnCKTjGsSgqDakv3edL93w8u+ZqKuJ8c157o2fddu4NqWClz/LvOTsgFyjV1Cyvz4DVBwPAxlflh63LXNjzE+FTt20vqNm6uvTUobYmj7jh30Trv2wvjscaaz2DyEhfNu2FTuFB/Th7deS+XzZ9OSLz+kMqGlWiu7KK0RWiu0QWij0GahLV0+oG1C24UqurzvKdgv3v/kiaec8ZFyqi6us1yI22CtF+J2VwtxP1ZYfeN+bpgynq4/5yzP43DInkcaH34qPco8ZKqEqalN0+MZHpbT7BilYnhYlulxXZRCqRiemKYnoeGJHqBSMTxpW91hWYO3a3APL/+k4pp0IKiuKPh+db+nw8m+hqKuL8c16LpWo65n63qXCowH4Q0Qyz0msWIZIDPOpdMAmfHYGJ8tW7fRilVr0qPVEa0MiFeN3njzLdpesSMqzShoJOLBeVeuXutUuWjr3euvoA2zplHRe2/QQqHi99+gRUKLP3iDlnzwOi0VWi606sPXabXQOqH1H75Gm4Q2S71KW7Q+erS10+TY8D7n4/zlQlwH18V1stbqdlYKcbvcPvdjse4X94/7uXrsCLrmzMae8WGv4xkf/ph3lIHIRAlTUydMj9Po2HIYHpbT6NhSF1ss0xNleEKaHtcgEc/wsNK7whMYIB2DqGuw9Q3G1kDtGsiTk38CcU0yEFRXFXz/ut/j4WVfW75rznFNuq7d4PUdvP6D40MyK0CusckorgEKbX5YcQyQHo+N8dlcvoXKlq10a/lKWpombdxcTq+98QZt217hTGfZZoK3XTLw9tLlqzwts8Rtdfj7JbR+xiQqeOclqSKhhUKL2r9Epe1fkFoqtLzDC7RSaPW7L9BaoQ1CG7U2W/qw1SO+9m04ntNNXlOe6+I6WStZoh1uj9vl9kuEFul+cf+4nytHDaW/ndbQMz7sdeqX8RGmJr7hYbkNSzqU6ipPSp/YclyAyRkeocBgYMs1iBily/A4V3hYgUHTNbj6Bl9rUHYN2skrMmG4JhUIyhTZ72X3ez052dea7xp0XKPB69h5rVvjgVRgvEibAXKMcSxlgPzjYnDc9I2pgTHXk2d8/kUbN22mxWXLUtTy2FqqtERr/cZN9Oprr9PWbdu9uKDYQFRUVEjxdrLpRhtEW+3/cgGtmzqe5r/2rFS+UKHQgjeepeI3nqFFQkveeJqWvvk0LRda+dbTtFpondB6rY0BffhwS18fTD8+EPF2PlOe6+I6WctZoh1uj9vl9hcKLdD94v5xP5cPG0RXNz6xHhofYWgSmx63WUmHPMPDcpodoximx2l0IgpneGKbnuCFLS926+L3KcYqjzI74Q1PlOmxBre03dKyBmHXIJ2c/JOEaxKBoExV8P3tvgbCy772fNek45p1XdtR1781PkhZY4cZT3xjjB53guORGadcY1ji21/+cdIeQ31jqx5vg+Pw7j3K+JQsLqNxk6bQ+ElTnXq09Ytycg+jRx9/kSZMnhbRlIgWFJdQ6zZP0spVq33xtriOjRs3SvF2+PTpPnFbLxz9Myrp+RUN/st5NFQo56/n0Qih0UJj/3ouTfzbuTTlb+fQjL81ozl/b0Zzr2lGeUJFQguFioUWBfROixt8fTD94Hg7H5flOriuAiGul+ufKdqZLtrjdrl97sdI0Z/hQtw/7uf8D96h83/+g3pmfISpqfumJ4bhYTmMjq2kTY91sQYvZCnrgvcpzm2tI2l4XAOnkh5YA4Oua1BOTpHJwDVhQFB9k/2ed18T4RW8HuMZIFbweo8aD6zxQsoaS5I1QK6xjBX/9lf0mGmPqfHMjzE+xaWLafSESVJjJkyOEk/sYeG8YydM8WuiUuGCYnrs8Ta0fOUqGif2XeLya9askeJtl+x0Vx0sbuv5P/2YFnX7kgZcehYNFhpy2Vk07PKzaKTQ6Mub0Pgrm9CkK8+kaVeeTrOuOp1m/+V0yhUqECoSWhjQ29df62vfFsdzup1/gRDXlSfE9XL900U7U0V73C63z/0YLvqTIzREaLDoY+67b9C5//v9emR8hKmJb3hYbsOSDlVrlYflMDpGPsMT1/RYF6O+OF0Xr/mrxnXBuwYHlvnrKTiouAyPPUBJWYNX6is81kBqDa6uATh5RQZ/1+QAQfVd9jXgvkaSk32N+q7dwHXtuvajxgdr/JAKjC8uAxQcp8z45RrbWK6x0IyTrjE02vywIuOxZ3xKFjsNjxFP6tu2bQslzhtlfLQKFyyiRx9/Qhif1U6zwuLyy5cvDyXOG13HVClu6/k//YQWde9Cgy47WxiKs2noFc1omNDIK5vR6Cub0virmtKkq5rQtL80oVl/bUJzhOZf3YQKhIqEFl59pqe3b7guqm+ufc5nyizQdeUJ5Yq6ZwtNF21NFW1yu9w+92OE6A/3i/vH/Zz/njA+P/vvemB8hKFJbHrcZiUdSnWVh5XY9IiLKIHpiWV4nKZHX8iuizyl21r2YKMHIN+gZA1Wqa/wWINmYEB1Dbjh5R/sXZMBBGWbgteF+9oJp+D16ruWHdd6cDyIGi+s8UTKGmvM+OMbkwJjllJsA5TO218R41NGY8ZPFSbHr7FaPKGvXbs2lJQZYfMxLUoFwow81uYpWr5qDY2bNI3GO8TllyxZEkqc11UHq3BhCbU95v+opPc3NORvzWnINc1pmNBwodHXNqdx1zWnidc3p8lC04VmC80Vym3RnApanE9FN55PC288z1OwX7z/9s0tnPGmzAJRR4FQnqiT6+U2ZgpNE+J2xwuNFRot+jJc9GmY0BCh/E/eoXN//sMMNz7C1GSi6QljeBI9wJyU4Unh01pxDQ/LHmCsAUgqMEBFDWCBAc41CPoGSWvwdA2wySkyqLsGfgiClOxrxX0thZd9Dfuubce1HxwfguNHcHyxxx6X+UmrAQp8+otlj71mPOYvEryNn/EpXUZjJ86IaFJE44RaP/GynNDDiPOOnzxTa5ZPRcWLqXWbp2nFqrVRaUYvvvqus16XOK+rDha39dzxv6LSAT1p2C1/oeG3/oVGCo0WGic0/taraLLQtH9eSdP/dTnNFponlP/vy6lAqEhooaW3b7vF1zbvx4tnLRDiuli5ou65QrOEpv/zcpp6+5U06R9X0Xihsf8Q/RIaKTRcqKDTh3T+L3+awcZHmJo6YXqcZocVbXhY1TU9yvCENT3JGx5WOMOjBhl70LEHo3Sv8LgG0+TkH8hdAz0EQX4Frxv3tRVe9jXtu9YdY0FwvIgaT6zxRsoai8z4FMYAucZAVjIGyB6DjfG56557aYEwCROnzqMJU+ZGNDWiiZ7mVUsLFi0VxuhZWin6LeOmKU2qAS0sWUovnvwHWpLTn0bdcxONFhorNF5o8n1C999E04VmPnAjzX7wRponlNfyRipo2YIWtryeFra6nhYJlYZQiVYwjutgcZ2s3IdvpLmiHW5vutC0B0Q/hCaJfoy7V/SP9eA/qKhHZ7rw17/IUOMjTE18w8NyG5Z0KL7pcRseVnzT4zA8rHimx7rY7ItQKYbp4Ys5lVUez/Cw/IOMb/ARihqgAgOYa5DzDYLW4OgaPJNTZNB2DewQBIWTfS25r7Xwsq9x37XvGBuC40dwfAmOP/bY5DM/rMDYpqTGPdeYaMbL4DiaaPWHjc+jj7ehvIKFNGveQpo6q4CmhVJhtGYrTY+jkiUr6YlnXqA16zaL/SKlOUoz0ixu68VTj6Xlo4fRxMfvpUlCk9soTX/iHpopNFto7lN3U94zd1PBs3fTgmfvpIVt76SS5++kUtYLd1JZCC3RCsZxea6H62QViTa4nTyhuU/fTbOfvIema01+QvRNaNoLralgYF+67oSjjpzxcRmIpCWMRVDJGI9UZLdfk6s88QxPxPSIiypgeoIXnlTgIvVU44YnYHoCA5ZrUPMNetZg6Bosw8s/SLsGcQiCUlPw+nJfg+FkX/O+scAxVgTHE99YExiLpKyxKi0GyDGmKgMUPQZX7NxNX3T5ijq89z6VLV9L84uW0Jy8Upo9v8SvPL/mhNBch5aK432m7au0fuNWsV/qV356tXTFOnq16Um0cuIYmv5iG5r+Uhua+VJrmv1ya5orlPtqa8oXKnitNS18vTUtev0xKn3zMVry9mO09J1HpVa804pWVkNLpR4VdT5KpaLekjceo4VSol3RZr5oO/cV0SfW60/SvPYvUUmfr2lgp0705j9vrTnj45kFywBUS8IgBOUyEDUm0QeW2/CwOC1a1TU9Sa3y6Asx6gKNYXhYKRkeljXA+AcgocAA5RrEXGaH5RocwysyGLsGbAiC0iv7mnNfk+EUHAdSN0CBFaDAuBXWALnGSlbM1R+WNRav37yVVqxcTXf850566512lF+0kDaWb6f1m7ZJbbC1OT165bW3aNfufWJ7e0xtTJPaNz+Vti0ppZWjhtBqoTWjBtPa0UrrhTYIbRyrtGX8QKltQtsnKFWkQVzPNqEtWuWi/o3jRJtjRPtCa40mjKCCEYOpz8cf0jWNTqRVq9dQ+Tb1I+xpNT4uwyMneDFxpyTxRrJlT/4RbUi7uG3PmGgjwmYljOFhJTI98QwPy2d6AsdrX2RS1oXoU9xVHv8F7zI88VZ50rXC4xoIk1Nk8HUNzhAE1azsa9B9jYZXtPlhRY8lwfHGNxZZ45SUNYaZcc031gXGQqXocZMVdvWH54+Nm7dQj1596YmnnqHbbv+XfOA5vO6Iq9sDkvV74n2HHOVS0V0n/I6uPzaiG44TOv73dOPxf6AbT/gj3XTiH+nmk/5ENzc8im5peDTdeopQo2PpH42PpdsbH0e3n3q81gn0TyEOPZ0W2b5Ny477h9atovwtjY+nmxsdRzedcizdKNppIXTDSUfR9Sf+ma494U90jegP674zT6SOd94qf2ds/aZyz6ukxfgEV3lWiRc+f8EiGjlmPPUdMIh69O6bMerdbwDljBxNuQULaIV4s/Ob2hgSY1xsk8MqWbKMZsyeR+MmTaXR4yfF0cRojYtolKcJSmMjGhmUOLesEUGNHk/DHRomNc4T1zFp2kzKLy71DwTWQCFlDSLzF5TQ+CkzaLhoZ+jIMTR0hF9DnBqtNDyiwenUsMQaOnIsjZk0jeYWFDsHb5c4L5fhsq4666Ky5ThZeE1jq1aO03VtJqmcUeNo7OTplFu4iKJNULoNkDXmOc0PK7wBCq7+8MrP9p275TM/0doXrb3Ja0+dVGVi7TvyKt+2w+dZqm18gqZnxZr1NHbCZBo/cbL8obYDBw7q75/MDLi/mzZvpjHCeAwfNZbKxEW0fPU6y/womeOdnZtH02bOoeLFK2jZKn7z8ypMCK32a3kNapkUrwBFVLZyPS0oWUYTps6kKTPnysHAHhzsQYMHkUkzZkvTU7RoqTgn6+SxJqul6dTK8FqyfB0VFpfRWDEZTJg6yzlZ2OI8nJfLcFlXnXVR2XKcLLymbtX6cbqu1ZBaIsYVeazC/EycNitifpIxQD7zw/KPZfYYV53VH1bQ/HgGaG3EALF8q/a8ii+lVvXNvOLJvhMg55roOwZSYu5hmXkoWvbdCUs8V+s5u+bEviCi4IeSpBxe4kiqWsbHHCifaDYDK9eup+mz5tL0mbPo8OHD2kpkJtz/iZPVN1YuERfccv5pfus2GKuwuJRmzsmjpcJILF6+Vgw8qxOrzK/iGtRCqVXRWqJUsnSNuODXC1Mzh2bnFToNDw8enDZ5+hwRt16WMeXDakG6tDh1LSrjZwDWyYlh+tw88VpETxqsGfPyaeLU2TIvl3HVVZeVLcfJwmvqV507Ttc1nECLxPgij1UYHz4e3y2wZAwQq5YMUHD1J7YBijzWEM8AOY0Pi+ddn9lxyTI9tnxGpSbkNz9OA+TwFEdKKRsfc4B8ctkEsCFYunIN9R80hPbv36/tQ2bDx9G9Zx8qWrRYHhuvZtnmh38wji+K0mV1y/TENDwsMbjY4gGSB4WRYyd5g4IxPEYyjY2dyBssH0+ugS0luQbVFFS8RA2Qw0ZPEK+Hf9Iw4jQeNDmvq45MULYcJwuvaQYcp+uajqNiMc7wsQ4fM9H9DBArzQZImR/LAEUZH6MY5kf88RvGAEWbH1b1V3+iDY+tgOkx8hmVmlDdNT8pGx9zUs3qB6/2zJw7n3Lz8rVtqB/MnDWb+PdKSsqWe6s+rAWlS2hWboG8EJwmJyhhRmra8LASrfK4xH9hzZiTJ++t+weJNTSvoJimizTO4yrrkmswS0muQbSaWrx8HU2dPZ/m5C0Qr4t/4uA4TuM8rrKZpGw5ThZe0ww5Ttc1HkOLxXgzTRzP3PyFPvOTsgEKjGsu81MTqz+eAdLGJ8oABcxPlAGyjE8i85PSrS+W07SkUwnMD8vhMWpSKRkf+4TK1R5hBHhFZMDgHKqo2KEtQ2wWLJ1Nj39yCeUtnqhj6i7bt1fQ19170oKSxbRk+SpasXqdeONuoCkzZtOiJSuFIbLMjdbwOevo0a8r6J4vdtA9nfy6O44e+aqChs1e5zQ0iZSK4TEqEX9hFS9ZQeMmT48MDnrA4OcFOI3zuMoajZkxjl7p+h8aM2uUcyALLdeAmUYtEn8NL1y8gsZMnConDFujJ0yRaZzHVdZo9HRxrF3Esc4Ux+pIrwtK9TgvOud8Oqvp2XT6mWdT41PPoptOa0qzhErFftkZTWiJ0KLmZ9Pa7k2pPE9odlPaPr8p7V1wOe0o6h9V35FQOl5T1sCc0fTs869Qi5tupcsuu1KKtzmO01xljqTSdZx1Qq5r35JcXeZjFeNP0PiwCkuWyj/Wps6cpzTLKDdK02zN9mu6MFee5ijNmJtHc/OKxB+3y9JmgJT5Sc/qj1pssExPaPPDchgfltOwpFN1y/wkbXz4IMxJNKaHH/4tWFhCOcNHarsQnz7j36MnB55CrXocSwOnfijardIpdZO+/QfIT23xp7fKhMErXbqSJkyZLswer4KsFMaDB5+I8XGZHpfRcYnNj8vYxJPT9IjBIxktXbleDqh8sRvTUyS2R4s4TnOVMeKB6uvhn9A7o1rQa0P+Tr3HdaICUTY4mMWVa3CsIZWtWE+jxk+hgkVl3sTB2xzHaa4ytr4eJo51pDjWweJYx4pjLRHH6shX20rlOJudcZYwPKdLXXXe+fTAFVfQfLFdJrREaOnZp9O27qfT3sVCBVoLL6OdRT1p994qZ51HQtV5TQtLVlCbJ56liy68OK44D+d11XGkVJ3jZA0cNCSmXPlrXK6xQIufPxw9Yao0OUHjw6tBxWUraYkYg9Mtfl6T/9ibk7+AcgsWRsyPUHXMT8QAxVj9YcUzQGHMD8tndFwKmB6jKLOSbvnNj9MAOTxHTSgp48Odt08gP+vCt7h4tYc/jr1s+XJtFeLz0aDW9OzwJvT86KbUul9Daj/obtq0ba1OrXuULl5C/cTAUFSymBYvW0WzxF8E84v4I5firxJhfILmxzY8xvTcK4xQj2l7qKfQglX7aG/lfhpTsJfeHb4ryvy4zI1L1VnlCYqfU+JbXfxXEZseXirmv5bUR0vXOsvYg9Qng16hdyf8g96ffDu9OeIG+iTnOZpVWODL45RrMKxhlSxdS/MKi2nyzLne5MHbHMdprjK2PhkojnW8ONZJ4liHi2MdKo61QByrI29tKpXjVCs9p9PVQp2//Izm582kt43pOed02t5LGJ0lftOzq7AX7dpXRc+9N85Z55FQqq8pG5l//edup9FxifPWpvlJ9TiN2OBU7NgVpe49etWe+WE5xoYSMe7wcU2ZKf7oDBgfHps4LBJjr9GCNGmhMFQlYvxjEzRHGJ988Ud94ud/YpifWM/+1PrqT8D02IoyLOlWAvPDcviPdCq08TGdNifOXu3hlZAevfqEeqj50KFD9FKP2+jZEedLtR3VnJ4c2pSe6H45zV88VecKyZc3UIMGDeiBBx7QETUDH9fnX3ShXPEXwKLFy2jkmAlUKgwO/1VgGx9pfoQZCZoe1vC8vdRr+h65zSaoZG0lzVi8z0u35TI5ttJpeIy47/wczwg+Nm18eJvjOM3OGxygikpXUrv+j9O7E/8j9d6k/9A7Y4UpGHQvjZ41Niq/lGvwY/XrQP+5825678NP3elpEB8DP6zN321kJg/e5jh5fI4yRkUl4lj7iWOdII5V6D1xvO+MEcc6UBzrTHGsjjJujaY37nyahs5zpaVHqRxn49Oa0k3C5HwoNG78cNpesZ6eOKtZZKUnaHqKhOnZW0XPvDuOGl/UwVnnkVCqr+njbZ6WhubOu+6loSMn0EuvvU1/v/Z6anHjrVKXXHIZvd3+Qxo8fJzMw3m5jKsu85rm1LHX1Fb/AYOl0dlcvs2TMT68zemuclGqqeuUj0GLxzT+SP5wMQ4FjQ8/+5O/oJQWiDy2+UmnASoW55ZXf9hk8XNE1Xn+J2h+IgYo0epPNcwPy2d2ggoYHls+o1ITql3zk5TxMSdMmh5rtWfqjNk0e85caRJ8n2L3tiORO3Zvpce6/pWeHXk5PTP8MqlnR3B4CbXscT71m/IZVdm3vrio0GGvDr2V9xqd1OAGGihjFL6QO2IixEZlZRX179/P2zdMmjjRl1f1P5JudidNniq/MHDG7FyaPGOOMDh8obLxscyPuFhZQdPD2razij4ft9vb7zxhN+3cu9+Xx8hldozScVsrltjk8EXOg8pcYfJ4236o2R6UbM1bWEyv9X1QmJ77qcOE+6TencjhPfTqkP9Qz7FdI7e+XIOd0ZQe1ObODjTQlZZm8UOg/Jfk7PlFUrwd5sHQeQvEsfYRxzpBHOt4cYxC7/IxjxfHOlgc6xhxrKFufdW88WEle5z8TE++MD2fCU2dNk5MiuupzTlnx1zp2bpjL7V5ezQ1bt6OGl/+gbPOI6Vkj3XIiHHeSs4zbV+WcfMKFlNu0RIvD++zsedtzmPyc1mTJ6K6+Zra6td/UFzjw+I8rrKejsR1qscWfsh5yqx58uFt2/gsWLxcxOfKPzSDxsfIZWaSVakwPvMKF8kveo31AHRY88Nymh+WNj5u88PShift5ocVMD1GUWYl3fKbH6cBcniRdChl48Omh1d7SpeukB9h37p1q/AH6h87Bf4eHPNdPtJX6P2y1Yvooa7C9Iy8hp4a9ndPTw8XGvF3emzAFfRW/1a0YctaWVCVM3WoeriJw7zac9RrVOyl67xW2/a/AQP601/+8hdq3769l5+3r7jiCpo4aaLIIatVaXJb/OMNHcdfatjl626UM2K0NAZFYnLje8/S+CwWxkfIGB+Xmdmyo4rGF0VWeN4euotWbKr05TEKbXjSaHpY/B09C0qX09hJU6V4W8aJtHiaOGcmvTJAGIGJj1C78a08tZ8gNLEVvTHyfvpg0Cs0q6AweoCzxX9FPtaDJrvS0ix+eFI+wzRhihRvh/nuk4mzxbH2Z4MnjnWcOE6t9vp4Qx/rEZokkz3OvKbn0iq94jNj5kRavWYJvXpPk2jTs3w47d1XRSu37qW+Y0tp0OQyGjxlqbPOI6Vkj9V+rmfYqEnOPLYGDBnl5eey0XlqfsWHlexx2urbb6AwOrupfMt2T7zPxscW53OVlzrC1yk/dziGP1kb+FkMfs6nSIxRLtNjy2VoworHWP5yWn6Q2v4EmDI/lgGKMj+xDVDQ/HgGSBufKANkmZ/q3Prym52gAqbHKMqspFu1Y35SMj58i4uNT9mK1ZRXuJAGDRkqjYRfbBiCcYdpasE4atXrWnpqxM305LCbovTU8JupzdAb6IEv/kZL1haLMqYeZUAi+wPohgYN6KSHOY+uX5qV2OrevTtdd9119O6770rxdrdu3VS6/Ge3pcpwpNn+6pvu9E2P3pRXxH8VlkrjUygMkG182EDc9XlFlJn5Zsoe2rV3P70/fBc98tVOGle4j14bGP18Dyva9IyhN+8WA+qk8TVieGzxt6+OGD2BckaOExf0BnHxiwEogYZMHk6v5TxK7SY+Qe+MbxPROKV245+gt8e0phd7PUzT8uY4BzglnjjupjYfz3ekpV9lKzaICW88DR3B39AtjtWRJ6ghk8SxDhXHOkEcqz4+W8kda80bH1Yyx7miSTP5IPM7p55BRQvmUl7+LPrkLb/pqSjsRWu7D6RV73emtR92pvLPvqItn38t5apTrRDU7O1Lo2SO9frrb1RG5uJLaeL0uc48tiZPz6WLL75MluGy0Xnq5mtqq0/fAU7jExTnc5VXOvLX6ahxk8RYW6bNjzJA/BM6M3ML5S0pl+EJymVswohXvXlVbeHi5cr8RBmgyOpPtAFymx+W2/zU5upPwPTYijIs6VYC88MKeJLqKLTxMSfH3OLi1Z7Fy1aKSXKsfPj38OFDnkE4fEiHAR0S6j3hG3q0/+305PB/0xM5dzj15LB/U6vBwgD1uZMOHNgfqEe3c0iEh4rptaMa0P0PPECHRJtGkXyHrH0uc5h69uhJN998s1TPnj0jaZzX21Z9jaQp5eUXUKcuX9Gs+UU0r7CE8ovLpPlZUMoPO4qLhA2QMAJsfFzm51VhdLpN3UP7qvb7bnsFFTE8ZpVntDA+d9MHXSbUqOlh8dIuf8xzxLiJVCK2XUYnqK9HdKc3Rj5D70xoKyb/5+idsQ6Na0uvjRamIOcFKlnKS9WirFPzqfNjR2aS5Icnp82aRyPG8jMEiR8MZX09XBzrCHGs48Wxuo6TFepY1eRR145ziTA8/CDzy82a0Np1S2jkqKE0oGPE9GwZ+zEt+Nu/Ke+Mq5yKrlMd5xv9gvE1o2SOlZ/fYRNzzXUtnOkucV4uw2Wj09Wxvv/RZ4609CqZ47TVq3c/aWxs4xMUp3M+V/mIjux1yrfezQPdxvwsWrqSxk+dKcbKcMaH5TI2ibRImKy8haXq2+2N8bHMT5QBijI/sQ1Q0PxEDFD1Vn/qw62vmjQ/KRsffrZnYekS+qZHL9q3r1IYBW00tNngh5ilgRAhmwi5L/TegHbUevB91GbYA/R4TrQeG3ofPTTw3/Tq2GeobEspHTx0UJkXKW1OpJkxbYl6V42QcaYPnvGScVpcVux3+fJL+s9//iP1ZZcvVV6ZX/VPGSVdB9ct41Rb+/bupfc/7ij/Opw9f6H4i2OxND5FIY0P674vdtDWnVVUvHofPfrNTmceZXjsW1tsfJ6mnFy/SakRiXZ5sh4+aqK46MXAE0IfDexIb455hd4e9yq9NTZab4i0V0a2pU+mvE+Fq4qluXINcD7Nm+COT6MWLuFjXSWONXxbHw0Qxzo6Hcd65FYHkjnOxcL4LDvndHrpnma0a/dGMQF+QxP5oWY2PeM+puKb7qe8Jn+hvDPdiqqTV3uO0G0RVjLHeumll0sTc8WVf5UPrbvy2OI8l19+lSzDZaPz1M3X1FbPXn1px87dtGXr9pjidM7nKh+lI3Sd8octho4c5z3QbQzQjHl5lFu0iBaUuY1OLLkMTjzxCtP4qTNEP1ZT/G9/jr/64zJASX/yKynzE8MA+YyOSw7jw3IalnTKb36cBsjhT5JVUsbHmJ5lq8QLvXwVTZo2g6ZOnyFNhjIWfnmmQauyqpLadmtLrYe2jtJjQx+jBwc+JMzP4zSmdDRV7hdmissJw+HVYW875e6HEd/e4pWevn37SvE2x7nyusTHOXLMOOo7aBhNn1sgLrgSyiteQgUB82OMj21+3h+xi0bk7aWe0/fQwDl7aHNFFa0ur6Q23f3m5y6hiOExEsbnrqdpWA0aH9vIyAcKZ86j6fMKffEu8UPLb/XpIIzPO1F6Y8zb9PLI14UhaEfjiifJi3VRiI/cHknJB0VniGOdm+iZHHGsJek81iM3SbLCHueyC5rKB5lffPIc2rtvK339TWeaMeBC2p7fm0rvfZKK/nYHrXjrE1r5zqe06oPOtKL9Z7SyfUcRfkKbPvwius4jbHxYYY+Vv5yQTQyre58ED/QK9ew7xMt/w423OPKo17Smn/ExSua9a9S9R+9QxofzucrXlvhYJ8/gPziLfOYnX4y/vOrDv/HlMjiJ5DI5LpUKgzN9br68vRb5Buho85P21Z+A+YllgGKZn+qt/jiMD0sYlExf/QltfPjksfHh36vi1Z7SsuXUu98A+dDvQWEKjA4dPKhCKV6t4Ti1v658PT3YWZicnOfo0SHPenp40JP0wMAnqNOsr2nzrnIvv1ztEfWpfa7Lqu+L1+jVeSrfoUNrI2meRD+4rN7+5ptu8pmeHj16ePXzNscNHTpU5uG4g17bpp7IsbHWrltPH33aWVyEuTQnv1iu+uQXG+OjzE/Q+PSduYcKVuyj+ztHDM4TwvCs3FxJExaoB57Z8ChV+E2PMBcLl7DxuZu+GFLsGZV0yWVmeBApXLSURoyd7EyX0gPSjLwierHX2/TG2A/E5B/Rq6M60EsjO1CPuQNpyVr+xFjiL1db0K8HdZ5i9ov9aTUkfniyULx+I8aIY3Wk20rrsR5h4xP2OLf0P1d+OeHLbc4TxmcbffV1Z5o1+jPau3krFT/8HE269X4aNXosffjRx/T0Q49Q6zZPUZunnqFn275ALR9v66iTj/PI3epihT3WZ559gS644CI67fQzqXnzC2lwTuyvIxgybBxd/bdrPOPzTNuXHPnq5mtqq1v3nqGMD+dzlZeqteu0TD7MbRsf1rjJM+R4VSTGXpe5CSOX2bHFY/EC8QfupOmzhQkzxidgfpIyQLWx+uMwPiyn6TEKmB5bTsOSTtWc+UnK+PBqDxsffrZnbl4B9ek/QK32sNmRhodDNg/K/MjQUt7iQrqr8+P0aM5r9MiQV6nl4Jfp3v7P0Uti8ijesEQbD38Ztzhff7q+QQP5PT73339/IE2E0qhwqOJ37NhBo0aNsvKofNOnT6cD+/cH4lWalHVMfJy8ivXpF11o2OiJ8i8A9azPUioQF17E+Gz3GZ815ZXyiwuN6THiLzScumifZ3iM/KaHpVZ8evXsZsVVT04zY6ls1QZ5jPMXlvnTAgPSKHH+nuvTTpiBz+j1MZ/Rq6M70gsjPqAPJ3ej+csXiffLJtFevGd6bKlJsqa/xycofoh72ChxrAvEsTrSjdJ/rEdukmSFOU7+GYrt806nh+88m3bvKafRY3Lo/r/dQPfc+yi1uv1f9FLb5+ibbl1p9pxpVL5ljTBHFfLTXRz++677nHWa73w5Es++GIU51hFjp9A555xPp59xFp1zXnM69bQz5M912B9V7zdoBJ0vTJExPEajJ0z31aWkXtMjteLDCvveNfqmWzjjw/lc5ZVq6zpdL0zeRN+3VrN4FWj67DxaKLal+akhA8Qr4eOFyeKHnP3mJ7YBCpoflwEKmh9pgGrM/MQwQE7TY8thfFhOw5JO+c2P0wA5/EoihTY+wdWe4aPGUPGiEmFWtEEQOnBASG8fPHhAS2yLeA5zZoyle7u9SK2GthOGh81POxpVMo0q91eJcpG8qh697+mAiFdxMo23Zb1WPl1Wpul42R9dzpfXJZFPtatkH493XML4zMvNpy7desnvkZiTv5Byi/yrPkHjM3vJPrm682TPyG2t+zrvoNyl++iNIbt8pkcaH2Ew/FLGJ13P+PiMTAzxsyn8EPf4aXMj8Y7BqNeYkfTCoI/ptTFdhAlgQ9CFxiycJS/AMN8kWxfE30w9K1cc69T4n+zJ9GMNc5zls8+il564lAYM7CNXfPbu20KLlxSKCZFNzh5tcpTR2bhpJc2ZO426de9G9z74KDVu/rizztpQ2NeUf4dLGplx06jzVz3pjv/cQxOnz/PS+WPu5wpTZJueF19501dHbSrscRp99XX3UMaH87nK16b4WGfPjzzkbMRfKTJi7CT1kLMxPjVgfvhb+efkF9EM8Qev+VmfuAbIZ37ir/44zU/M1Z+I+YllgGKZn0SrP27TY+QwPiynYUmn0m9+whsfdpvC+PBH2PkHO7t+3Y32VVZ6JsQYDi805sFIxH0xvA/d1fNNum9AB/p85mDavGu7MhXSsETKmvKROvW+rsfk99I86bqkUYnEmXzKzATiODTxbGx0vNo326Zetb137z5q9+5HNH7KLJopP+FVqld9+IvrjPFR5odNTquvdtLIvL20bksVla6tpOkl++QtrjcG7/SbHm2Wos1Kep7xsY1NIsmHnJetoUHDxwpDJy58x0DE+nzoAHpuyBf04siu1H3OGFqyli/6MLd66o7Ug6LiWIfV72MNc5zbc8+mx1rdJozNdmluKnZsoHXrl9HMWZOpV+9u1P6dN+iRx9rQNdf/h/5+43304Sef0bBnX6a8x16kNq8Nd9ZZGwr7mrL4G5mvvOqvNGVmHs3O89+6mZdfSpdedoVnelq2qjvmjpXMcbK+EuP2jp17EorzucrXptSxrpZftWEbH9b0OXni9Zsr8gjzYpufNBogXoXntkaNnywftg5lfqIMkDY/Qn7zE8cAOc2P3wCltvrjNj/Z8NxPaOPjrfYsXUGTps6gCRMnS9Oy/8B+YQb2y7L79wtjwNL7yjREtt8b0o3aDu9KCzes0GVNHpWPy6r6rDizLevldCOVJtvkdB1vh5Hydp1CXh913/aLkON0vCkj2wi0y9vc9yHDRlCfgTk0TVxws/OLfas+rbpu8xmfoIK3tmzT06rrdnHx8kVuq3orPi5jE0b8QOGEKbPjPjz54aC+9N74gTR/eZl4jyRzq6duKVuONdFx7l30N5o56H1q/e+7qOUjT9BlV99BZ55/G11z25PU/Za7aMJt91Prl/tT40s6UOOLO9Djb46iir1VtPHzblTymPr247qiMK+p0XMvvEoXCmPDBmja7MjvrvG2MT2vv1l7P8kRT8kcZ5eu3ULLVb62xcfKz9kEH3JmTZw2S/wxOpNy+acshOHhT3rZ4t/gqq74U7z8ZYrmZ31CGyCf+Ulh9SdgfiIGqDbMDytgfDLM/PBcnpTxKS4to959B9C6deuVIdCGgX/PirelmfD2tXnQ+fbs3Su/w0aaCCvdNiBGXrzOp8yJiou0Z+LNvqpD5VNtmnwqr51PpctQt+3ls9v11aPzCq1cKSZC+ZDzPJqZW+QZH171GTp9tTY/ysyEMTysR4XpGTZT/eZOOuQyM6GkBxl+oDB/4ZK4D0/yV8avWLdZ/CWWGbe1YilbjjXRce5cMJiWvfIePf3mcGp85UfU+C9Cl31Aj7w6nJa1fI6W39tGpI0Qce9T479+LM1Pa2F+tu2upHWd6tZkGeY1tfXu+x3pjjvvoVm5kVWf2XmL6OGHH6VPPu/qy1uXlOxxZrL4WAuKlzgfcmbxT1vwba+BOSOp/5DhTg0YamtEaA0UUs8YLRGGR33EPowBCrP6E8YAHfFbX07DYytgfIychiWd8psfpwFyeBhbPI+HMj5LxQtYWraCZs6ZTz1799WGQJgBNjJVVXK7SpsFGWdv2/tWvJdf7wfTffuWTLno8qofSvZ2IG+MuCouE6ddW3z8H336hXwQcupstURumx9e+TEGxP9lhJZ0errlNDNh5Bhoylasp6Ejx8slf1d6fVK2HCte0/qnrHpNhVHIGT2e8haUOs0Pr8rkLVycUPnFRktCi38epHSZMD0saX78BiiW+XGt/kQZoBDmRxogl/lhJTA/UQYojPlhOU2PkcP4sIRBqcurP+GMj6hgyTIxqZYskas9CxYWK+MjDU8VVYmQTYQMtYwRUdscqnS57cXrPHJflxfbKg/vi3Tetsp4oZDdvjQ6Jt7Lo8qrfWVsIvGRfbktw8i26ofqg9oW8vJXyeOfOy+PPuzYiSbNmCtXffgTXnniLy/7eR9pRoKGp4ZMj9PMhJVjgGHxA4Uz5xXSsNGTQn3JWyYrW44Vr2n9U9a9prmFNHIcP9DMDx1Hm5+wivwEBmt1UoplfuIZoISrP8LwBA2Q0/yEWP0JZX5Y1TY/rIDxqePmJ6HxWSMOeoU40dNnzqXuvfrQgEFDpCGoZHMgFAkrqapSbAvJbY7nfZ0u81SqeFWmMpAvsm3qlHGmjAx5X+fXZXx5vdBsu6Tr0PuqD3Y9WrrdSF4up/PpOF756d1vIHXq2o1GT5gqzc/cghK58pO3sEyt/LD5qWHDw3KamTByDCy2+DkWfoB39PhpYqCZJn+turCEP73mzp/JypZjxWuK1zSTJY9VmIQhw8fIW1CTZsyh6XPzxPhbkLJmzbdVGEpTZ+XSNKPZRvM9Tbc1x1ae/NFTKdFv1kxP+UrzojUrN1qzRX9tzWHlFfo0l5VvS/yRHkO5UgvcKlhA8+NqYbQKlfg3PWtOxVFatHgpLV66UnoX9jBBXxPb+AinxAXKhJudPS+PpkydQYULFogJX62ISCMiDEAlmwAZamOgDQMbBDYVvO+l6XJcxsQrw2Ty2PXEyGvVaZf1bUtxvwJxXNYuL+RvS22bMqY/Jt5sK6PEoTJAvPLzRZdv6NMvvqq36tipK3Xt1oc+/7J+HycrW44Vr2n9Uza9pvzcVdfuvcWxfk0dv+iSFvF3tCl1TUqfGXVOoC8j+vzLr6LUSeprpS5fi3nF1jf0RddodQ7oS6OvukXra6PuUl1sfRNR15TVI1rdlL6qcfX0xAsSg4cOl96FPYw0P9bqj9v46CUidktccNCQYfrW1n4x8e+Tv83FH2XnsHLfPiEOVZzclgZBxGujwNrH5bxQlZH59b5Ki5STeXhf1sdtKsk0rw2dpsV9MX2T9Vv5vPp0KOvSfTdpsg++fV0vh1yXltdX3R82g3x+pBFi4yTNlTBK0ugZA6bS7BUjuYokQyVlzEyoysj8el+lRcp55kvWx20qyTSvDZ2m5Rk9Xc7O59WnQ1mX7rtJk33w7et6OeS6tLy+2v1hyTgOI/1QaaodU9bLq9sxUu2ZUJWR+fW+SouUU30T+7I+blNJpnlt6DQtnCMlmea1odO0cI6UZJrXhk7TwjlSkmleGzpNC+dISaZ5beg0LZwjJZnmtaHTtOxztFfMy9srdtCKlauld2EPw17G+Bq38TGJQrxUxK6poLBINuyZDx1GK5LHljIh0fFS2lQ404RitxVDsr7UpIyQ2GazY8VHK9jf6P7jHOEc4RzFFs5RYuEcJRbOUWJl8zlatmKV9DDsZWxv4zc++/3GZ2FpGfXqO4DKy8uli9q7b6/88j4Z6n2unLf38TZ/XJ23Rcj5ZJydj9NlvEpT9emQ81jl1XakHlnW1MVlWLKcqTeSX/WH61Hbqoyq16R7MuVkfl0n5+H8Mk5vyzbUvtc+p+n8pg6vvLWv+q3yqH6aOnScnc+0o/Or+nTIeazyajtSjzoWXReXYclypt5IftUfrkdtqzKqXpPuyZST+XWdnIfzyzi9LdtQ+177nKbzmzq88ta+6rfKo/pp6tBxdj7Tjs6v6tMh57HKq+1IPepYdF1chiXLmXoj+VV/uB61rcqoek26J1NO5td1ch7OL+P0tmxD7Xvtc5rOb+rwylv7qt8qj+qnqUPH2flMOzq/qk+HnMcqr7Yj9ahj0XVxGZYsZ+qN5Ff94XrUtiqj6jXpnkw5mV/XyXk4v4zT27INte+1z2k6v6nDK2/tq36rPKqfpg4dZ+cz7ej8qj4dch6rvNqO1KOORdfFZViynKk3kl/1h+tR26qMqtekezLlZH5dJ+fh/DJOb8s21L7XPqfp/KYOr7y1r/qt8qh+mjp0nJ3PtKPzq/p0yHms8mo7Uo86Fl0Xl2HJcqbeSH7VH65Hbasyql6T7smUk/l1nZyH88s4vS3bUPte+5ym85s6vPLWvuq3yqP6aerQcXY+047Or+rTIeexyqvtSD3qWHRdXIYly5l6I/lVf7geta3KqHpNuidTTubXdXIezi/j9LZsQ+177XOazm/q8Mpb+6rfKo/qp6lDx9n5TDs6v6pPh5zHKq+2I/WoY9F1cRmWLGfqjeRX/eF61HbZsqXSw7CXsb0Nex2n8eEnpPMXlMgHmk3HbfF38uzdw9t7otI8yXQjO5+jjC9vtLg92WZcxelLXAXLxdjfw6GQ19dgPr8y+RypNygEQRBUPxQc5/VcUI/nteXLl0sPw17G/tSX0/iYj4bx09H8oBBXYA52jzhJLHt7j2hUxVmh7ohKV53YI8voerx9zqfKyTIccpzOq+pW+ZT0tqnb1OGlK6k+mLw63oRmW7cn25dpqm+qPyqU+7INo0DdOk7VafKqfXvbtB05PhVXV8/R7NmzacDAAdSzV0/q1VNIhLzds2cvsS9ktmW6iuN9JVWmZy+1beKkRJzKq/btbVW/LmtCrt/Uw2XltpIs6+1zPlXO9FnVodNlmsqnpLdN3aYOL13JdxxW/V4e3tbt4RxxqONNaLZ1ezhHHOp4E5pt3R7OEYc63oRmW7eHc8Shjjeh2dbt2edo4ICBNGfObDXuyzkkO+Y1Nj7sYdjLGF/jND4mMWJ8euiO7KHdumIT7tmzW23vtuN4f7fOp9M51HlMPjt/VJzIK6XjuCzXEYlX9au8kT54aTJOhV4dVt7dHC/yqv5xHrOvyqv2rPpkPjvO1Bmp3463Q6+sV7+W1zdTt2qXt00+O39UHLdn90Vuq+NQ8ap+lTfSBy9NxqnQq0OI3zR5+fk0YcIEWr16NW3YsAGCIAjKYPFYPmHCRCoqKtLzOY/7Zu4x84KZByJzgh1vh15ZkR6J431T1tQtQp3H5LPzR8Vxe3Zf5DbPUyZe1a/yRvrgpQXmtWXS+PTwGR9WHONTLjIvlIVkJ0TFbBiCkg3FkUlPlM8obD5WMnmlzImJKfcx+iTq8MfZZTL/HPG906lTptD69evF+2E/AQAAyGx4LOcxfYoY23kFJmrsr6fz2rJly7TxWSg9TQLjo74V0TY+u3btpl2iIg5379olpEKO4+1dvG0k48y2yCvLqXgOd3OcLKP3pez6uKwKZTyX8+rQ0mW9fDqPl9drQ+eVZUycidfldLxpT8XrbSsM1qHa1fEyjfNZaTpUx8TxqryUjDPbXI9ON/3hOFlG70vZ9XFZFcp4LufVoaXLevl0nnjniF/r6dOm09atW/UlAwAAINPhMX369Glyxccb+725wswFZq7Q8TKN81lpOlTzEMer8lIyzmxzPTpdh0d6Xlu6NGh8lPlxGB+TGDA+O0VDLFHZTh1KmTiz72mnSNsp4lmBPKJMZFvk09um3ui6XFLlfHkd5SPbkb5waPKqeL3txUVLljH7Vj6vPhNv+mDXZeLMvifuR906R/xaT5s+nbZt26YvFwAAyGwOHz4sdcjokNLBg4dkuL3yIL2xtIrarzpAry/fT2+uOODpDZaIe1uE76+s3io496G24DF9uhjb1UKGGfvTN6+x8di0aZPYrjvz2tKlSx3Gpzyc8eED2skH4hN3VofyQLmxyD6nRQ7e2jdlPPnTZYfNNqcZiTz+8ir05eF4R1vBulQ/LVl1+/JxaOX10nT+SF7dZ+ukK5nzpvrF54gdb1Q/edveN2U8+dMTnSPTttcPO0+wbR1n6pIrPjA+AIB6RBjDsWTvIXp3WSU9vWgfPZC/jx4qqKSHCpXuL9hHbRZWUoellTp3ctjt7963T2+lymFaMfkTKvj6Xiob9SYdPhjOjBnjw89xmjnANw+Y+cPsm7knSiZezSVm7udbYouXLJZpsg5uQ7fjr9PIn55oXlP7uhy36cXpeEdbS8vKUjc+3KEdO3co7VCVmn21LeJkPMepbS9uxw55UmRHRcjxspyIV+liX2ybuqRkXRyqPKotjuM8Jq8IZZrK59UrpeJlGrct8vGLo/quy5myXl6OV/WoOHuf+6HqNfntkI9r3rx59MYbb9Add9xB119/vQzffPNNyp2fq8+f6kP79u1En8SL5PWdFTkeGcq6dZsyXezLvkT6IONlKM6vqHfqtKmqXpGH+/P3v/+dbr31VrGv2o53jlRbqk5+886YMZ22b9+uLxc//A3V3bt3jynuJwAA1DW2VeyjDZv30KYte2hj+W6xLbRpF63fuJOWrdxKmzdU0KId+6lt0W66a/Yu+sfMXXT7LCXevnPOLnppwW5dW/Lw2PnQxz2o/9R5cv/QoUMyTJZd6wso94vbaN/WBVQ8oDVtLZugU+LDY/p0MbbzQoacE+S4H5lTVFwkVHOSmnek9Jxj9r28Mn6HfNA4d15uJE7WbcpxGTPXsFQerl8aGzF3qT/STajmSzl/yzQ1z6q8XM60bdUrpeJNXNmS6hofbiCeKsx2hS+eT/Zzzz1HTZs2pY8++kifCKUKK59b/rqi5LUZ2NbikzBzxkwa0H+A/Hi2PCmOfKzEfYkW18cPjLVp04bOOeccuvzyy+maa66h6667ToaXXXYZnX322fTss8/KL4F8//336cwzz/SdA59k3/iYI8edqF9cV9euXem0006jTp06yT6xbr75ZvrPf/7jvbmkYhy7jNdpfFHMmD4jpvHh9G7duuu9CPzA3KeffirTuJ6wzHqrATV4a5beq3mC7fH+Lb036D2QKiW9X6KXPp5G5XofgLrEmCmr6R/3jqKrbx5Il1/Xmy6++ms6//JOdM7FH9Fp57wj4j6jgvzVNGFDJd09bSvdPnU73Tx5O90yZZvUTVO20z9E+Phc97gYC3OLbfn6zXRhm7eowd8fonHzi2Ua32JLhbWzvqCSQY+KQXcmrZvdgZaOeVWnxIfH9BkzZijjY4//MRR6TtRzB3+qaurUqTHS3fMaz1WffPKJ/EP9b3/7W0LxvNq7d+/Q89qSxUtSNz7ssioqKpRE571tLW6kQjQSSedGK+SJfuKJJ6QBuPbaa2WnVaescrKDet9TJC4izqvSzEnzp1uy6hw5ciTNmjWLRo0aJUN2gXZeU4/sk1enlcf01Revwk2bNtMtt9wiDc9tt91G//rXv+i+++6j1o+3liHvc/wVV1whj5/z/fWvf9V9UH302rck90OcI3a7/fr1o4svvliuMnHYq3cv+aZ466236KGHHvLqj5JVpy1pfGbOkNsuOP6bb7rJbX6/GPEtMjY+DKdzu2GA8VGUT/uYXnpJmAet3iU6waakty/Px9McNiNdeTxKqPdLH1PcLIL0G59ymvZxpI8wVaA6PPfGTGp2UXe655GR1KbtWHr4iWH0YOvBdG/LvnTH/T1o7qylNGZDFV09bD1dN2YTXTOmXIbXjtlM145W4TWjNtE9kzbrGiPwc0KuW2nyGaJD6hmijdsq6MR7nqP/vvYhmlm8RKentuJT3P9RWj/nLaKd/Wnvmq9p/pf/osMHq3RqbHjsNsYn3rwmQ53uhcFtLTW/qHL8vTtjxoxV85OedyLzlclvlRPiOYwXCv75z3/KuySJ9I9//IPuvfder/4oiXjTFmvx4sWpGx9eVrIr375dqUIYG7lt0sR+RYWK27Z1Kz311FNy0r/77rtlp7t06aI6zGVFPlWfyM91yn0dJ9N1mret9r1tbluWjZRRecW+LsNtLVq0iGbPnkMFhYU0eswYmj1rtjw5kXp0WdmW6osqb7ZVffI4dT5VdwU98+wzdPXVV8tja926NU2ePFmujvG3ZPI5mzRpEj326KPy+NkEmZDLyr6a9swxCNnHE4lX+VSabl+82YYPHy7NDr9p2ORweMkll9CIESPksX/+2WfyzRrvHBmpY6uQT8XzKhmXd8F5v/rqa7kd+bG4Kp/xYThPrDpsssH4bOh9CzW4pTfFakWZnt7CYmjKp9HHYrL3mR9pViwDovP4TEu68ljIvjld2JFBGqpabB/UD55+ZQpdfHUPWrrKv2Jj7MrQlXvovN4r6coha+kvOevpqqFCHAr9VZihq4dvoEsHraWbh6/VJWLjMzR6e/6SldS8zVuUt2QFbd25S8alQtWuTTT7s5tp7/pudHj7l8L89KX87vfStuXTdY7Y8Hg8U/xRy2N8rHlNzTVKZl4wc4TZl3E8d8lyOk3s86r/0KE5Kk3Gmzqt+mV9kbZ4LuYvWXzssUfpUTFXhtFIMb+FnddKS6tlfNQtq7Dij80Z03PPPfdIde7cWZoCV/6aFPedzc+cOcL8FBTQ6NGj5W0vPimu/GHFz/Tw8d11113yxVizZk3U8fE+mz0+fs7TqlUraZKq2zaXHz9+vFxJ4xWlli1byvo55H1eWTImzFU+nrjMzJkz5RKkC267a9ev5Lb8NVwtNj4ffPCBT5yP72vHA8aHV1SiV3ik4fBWOdTqR9Cc1EweG5W/Nn0HjA9IB22eH08XXtmFVq6tkCswBw4cogMHlSnpsXAbndxpMTXvtYIu6beSLuob0WUDVlGTb5ZSs+7LqHnvFXRV3xWyjGHz9h00Yk4hTS0slfsHDh6UIRueWQsWU5/xsyl36Rq65uWPqOvoqSotJCunf0m539xH87rcRXM7/1vrDiod9pxwMT3p8LaP6HDFV7Qh71PK/eoemt/tIal5Xe+mOSLvopyX6fDhiAnjMZ3H9mTnBR7z+QsQOWStWrVKhsF8bHwGDhwYFZ9IvALFZaN/YiNanC+Z/peWlqZufNiV8RPhtrZv16HUdi+eTc+TTz7pmR6+5WNMj3KJQsKZGdeoXJra32bVs43rF1IHoOOEuC2vPU7nfVmfqsOrn18kvc3mp7i4mHKFWSnIN+ZnjkxX9XIoZNqR9drtmW0dinLt3mknn6Nh4zNu3Lioc8R5+JkmXsbj1Rg2Jo888ohc8eE0k8fUye2rc6n3ZV90nNcfsS+OkZcr2dzwbTZjeox4nx9q5vPP+eS5sI+Nt039pn2TJkJ+nWbNnBXX+Hz5ZRe5LX8UTmvLlq20bt16nzgfv6nj4TI+0ig0EPFGLmM06y1/HmMsNvSmW+z4Bm+RXTqW8fG36S/DJOxTsF3Znw3U+xYrzsTbKzpy23ErScabVaAYt5t8ZdOVx4JXh2xDJPPpW08sK81lUGSclbckYLA4nU2YNF6OOplgvWHKABDk0WdG0jkXf0LLV2+Xt6X2H1AGpVvhFvrj+wvozK6L6bzuZXT2N0vo7G5l1EyEzXsupeM7LqKmnUuoWZdS+uMHC+kSkWYzePp8+s61D9NDH31DFbv3yrgFy1bReS9/QX96oQv9/ctR9L9vDKIftOlMuWWrZLrrtliQvVuX0cxPbqRDu/KIqkSbrMpFRHtmy1tch7d9TIe3dhDhh8IE9RbxM0W6MF9Vy4SWi+2FNKvjTVSxWuTX8Jg+yxgfPbfwuO/NOXKb5xg9P8l5Y7v8JBg/m8rzJhugxo0b09dff63mVzOfCLEp4Ucvkp3X1LxtGSk5fyvDxf7AxMvVHJ2P6wkzr5WUlFTD+IgObNuqGxDGhsOtctvE8f5W2ZG2z7X1TA9P9DwR33TTTXThhRfKk3f66adHiePZJHBnuR51IKoN2U5gf6vVLp+8WbNn0YABA5xiBzpi+Aj5jZULFiyghQsX0vzcXPki5ubOUydPtmkUadMLZXumXyrk4+JbV3feeaeY9LeoNN0vPg5+0Piaa6+le+6+R670GOPDRpDbVHVv9Y6Jy7FpZMk2+Jzq+kw6v+Bs3q688kppuh5++GGf6THieE7nfPyUPZ+jyHnlNk07pl0R6rb4SXrzV4ELfi907vylvHh5lSeWOJ3zcf54uIyI33ho82DlUSbkFoos1Ig8bynjs6H3W1Z8jPqj2rNXfWbRW2xQkuqTKmMVoVm9tRETRK34aAMRMT6OVRX7llQsY2KvFqUrj4UxGXovKk/JtNjGR+47bt9FmSURF2wjqp6oeuOXASDIw22G0JnndaBlqyJf09F1/ib6xeu51LDjAmrSeRGd9nkxnd6pmE4VYdMuJfSH9vl08odFVLp1HxVs2E1Hif2T3i/UpRWrN22hDweNoRFzCuixjj3oy5GT6U9PdaI/fjGLZpTvpaX7iPqv2kXf/3Qe/frxjrR0rRoFEpmfvdtW0PSPrqOl4x6j3Sva0YHNH9EhNjvC6Bze2k7oLUvt1erP9s/p0NZPae/a92jV1Kdo2ofX0vbVc3WNJMd0uZovQm/ct+cFe263Qn6s4r333pOPVfCdBjY3zZs3p27duum5TM39/MWI/DtiycxrPKd9/PHH8sFlfmwkkfg5Yf5NMjNvJ5rXShZV0/iYSmXFOgyKG7vqqqukIeBJnidhM9n/+9//ls+gBHX77bfTjTfeKJ/qVp11123Lbp/L8LMu/ILOmTtH3tIKim9LFRYWStNjNHfuXBo7dqx3glR9KozUH90fY/weeOABuv/++6WkA+V06xzxx/HYAQfFpiD6OKPbkbLqY/HvrPALf8MNN/hWkUw/WOa8s/nhfHxeuVysOoOSfxXMmhVzpYbfC506fSEvXPVdQW5xOudLyvjoVRPbQEhkvDE60SYjLnJlKGJaEhkhxmdUwvTJ179oooxPgCiTYCZzn/Gx0w2WGUlXHkMwr9x3mSaF36A46hMEb6kFTQ2TKE+YMgAEuf/R/nTq2W/QkhXqG+k7z1lPP35+Jh3TPo8aflxIJ35QQCcJnSDU+JMF9MtX59Cx7+RS4cbd1OXLiVS1ay/NWLOLbu6lbmm52Fe1n658ows1eHsyPVGwg/J3HKBLpmyntfsO0yUTNlODV0fR/Z/2kXnDPNi8oWggTf/kBprf/VbalPc4Va59kQ6Vv0aHt7weJY7fv/5l2r7oaSrqfwdNFaZnxYzPdE0KHtN5bOevOAmO+zHndA7FnMGmif+A57mat99++2264IIL5AqQzCfmNJ7b2JREyiee17hcsg8386JK1BwaY17jx1xSNz5iYt+6dYu8nbFViFc41LYIReVyX6RzZz788EP1TMsjjwo9Qo+ISdiemGOJf+VWHoypU9cr25P7Kt7uB29zGTYys2fPotnS6MwW4WxtesT2bN4Wmj3HZ3zYKPHtL9Omale3bY5RtqXTZKjSuAx/hJ3ND99u2rBxg6rD6pssL7e5nkh96nhUqKTTZdumjJCdl49b5GODxW8ufpPweWXxuR48aLA0GIOHDFbn/lFx3sX553ycn8t5/TPn0NTL2zqN2zPGh8u54HY+++xzaWzkdynEEKdzvqSMT8CkRLDMTsw8EaJuSyUwPlHP+NhthOkT73G93JbD4CQyPowyP0bCcNjGI6bpCJqa9K34SDMRMBheHx0mw2dI5GpVtMFymZrIyo0mUDZodMKUASDIva160ylnvUTr1m6n3PW76dstx9HvXp1Nx3eYT39+ax4dJUzOn9+eJ/f/97lp9IcXZ1Deul301VdT6cKrP6TtFeo2VqW+RRZEfjRdjHnnvdWDvvtFEU0s30/7RdTavQeJS3Rcto++/UkeNXruM6qqVJ/ASrTqw+zbsY7yet1P0z65jlZPe5AOrH+BDpe/HKWDG16k8oLWNLvzjTSz081UsXa+riECj+nK+OxUYz7PPTLk+UnNUWoe0Gl6m+e7du3aSdPD5fv27Sf/oM7JyZFpnI9Xcvj3vqTx4flLlk88r3F5LmP+iA8jXujgFR7TPzWfuee1RYvUD62nZHz4/hlXEk/lOuRPLPHSFa/ycCfvv/8B+vLLL8VJVw8weSsf3ra6NcLP4WwpL1f1lUfqc0vn0+L7gPxiGpkvMDJfoMTP37DJ4VWehQsWSJPETpAnZVmHaVduc1geaF+lmzg+6R0//VSubPEtpQED+suTHckfkXlx1RvE5InUV87HKtuMxBtF+sD9UX1iB86u17wJ+Jkh0zYbHN43aZxPtqvrMPWyZNu8LY89crx8/mYnMD4dO34qL9rt2/mhd7c4nfMdWeOj8vlMRiB/TRkfg2eArIQwxicK+/maWIbFjk9XHgkbIUc+jWeAAoYExgfUVe55uAc1avIilS0rpx2VB+nf3xRRg/tH0e9fnSkM0Cz6zcsz6E9vzKYfPj6BfvPUBJq/bjft2rqDbn+gN916dy8xP+2VP3XB5iYWB6qq6ORnP6X/6pRPc7cfJF7T2X/okChH1H11JX3ry8XUpF1/WUecapysnNmJJn/wd6pa84wwOm2jdGDDMzTj8+uocOBjdLDKPXZL46O/z86eE/zzjJkT9L6Ym/gZH358hRcT1q1bJx+hGDZsmFePKc8rSn369JH7ycxrPFfzj45y/xJLfQdRpL7489pCMe9Xw/hsEwehToKcgLlSua8l4/hAubGtcrIz5odvufAzPvy9MuzGvLLcYV1ehaZuK0+UIu2zzInztr18WiKOTwY/yDxx4kQqKiyUjpVNEJuESF7Vpl13lPiEWtt864yX3vhLAvmWEj9ExQbE7iObFH6uiI//5ltuppUrV+k6TF2c165XS2zHOke8pMf1GXPDxku1Wy5D3jdpnI9NmlenDn3y4lQ/2CzyKhmbUhf82n7ySUdpbNQDZW5xOudLyviEvq3kyMM4TIpa/amG8QnTpyCBtOSNT/DTV0f4U1226YpFwCz5DEoMgyXzwPiAWuCuB7tT47NeokVLNsn9yoOH6J9dCqjBv4fQr9pOpV+/PJP+38Oj6dePjqFZK9RH3tes20YPPz2Ubru/r5hs1XOLrltUHG8+zXXX5wPou+9PpUW7TD7lcPqtraJvdS6lY9sNpeKV66T5aftlH1ot5lmG64jHzvV5NOm9q+nQxqfo8Oano8Txk9//G20uGapLRMNjOo/tbBwi4789/7jnIp4ruQx/hJznGN726pB5VDk2Pvz8T7LzmrwlJm9VqdtX7ttuJo9SmLmfw4ULq2l8Nm/eTOUsUdnmcrW9mRvgUG7r9M3cEV6FqaCPPvpY3nrhlRH+FNLrr78u01ReUY/Or+pRdan6InEmj8qn2+E+mHxWXpXHpG2WJ4i/t2DE8OE0LzeXZsjbWwuV6fHa4fq4XtO+ipPiOjldhjpex/GL8/4HH8hPdbVo0UI+nMW369YLR8ztrl23Vv6EAz/zxG750ksvpaE5Q9ULruuTbfG2lDou2Rfum27XHL85Rl7aCxof6XRlmt8U8TYb0XjnyLQpz4fYZvfNtwb5o4MuzOvKF6paHnWL0zlfUsZHoFZMbPMS/XCzMw8/3Bw0KXq/WsZH7ibok2jnLbsOWd4yRUFDJo1B9DMwhqBBkMjJ3TITrjrSkifGR9hFvt624QjU4zcoqo4oM8WrRDA+oBa488Fv6LSzX6ZFizfKsenQwcO0/9Bhur1TLjW4fSD911059IuHhtOs5cr08OrOhg3b6ZFnR9C/Ww4WE736QzCeQdm1t5I6DZtA3328M903ZSV9sXQXfbRklwh30LUjl9D3XhpMP338M/rWXW/STV+OFOFbdPM7XaUJSvTMT+nYl6h4yH/o8JZXhMlpQwfWP07717amA+ta00Gxf3jLy1Q25gGa3+seXSIaHtP5MRB+FCHWvGbmATMHynQ5B+ltK48M5baK42d/Bg0aJLa5jJprTLlY89oWMVd+9OFHST3czPMqm6sw8xo/1pKy8eHObZIVbtIS25v0gcQQN6wmyY+k+eGVEf72YnZnXh1S1na8Ok1agnb525RNnXzbir+5mW9x8Ue7+SSw6QmWcWqT6Zfd14jUiS2XP8fBD26zAeFPrp177rl02WWXyp+wuOiii2Q8337ib7DesGGDs65ocZt2u5FtPqZoc8NvgvhptuxzFDyf7OR5SbOy0v1jfPyafijeqDwAlJfzSpNbnM75kjU+TPAZnShjIoiVxxfPqywuE5Ok8WHi9skzWEbBlSBtlDiN+xQwG3LFhU2BUZTr0BjzoOXMVt08sm8OE6H7HCnnX9EJGhTP/Jj8Ii25W12B8rocjA9IBTY+Z5z7Ki1YtE5+f8++yv104MBB2lt1kG76aBb97K7BNK1MPfjMafxtzOvWbaPHXxxD97TmL8xTfwi6jE/h0lU0el4R9Z44m5av20CjCpbQD9v2oQZvjKcGr42mBk/3pl89/ikNmVtM68q30SM9x1KDFwfR//twOjV4tBN9NSb+9/scPnSAJn3wd9q26EU6vOkx2r3kQSrqfxONa3clzfji77S18D46uP4R2re2nYi7inZtVj+JEYTH9Dl6xSfWvBYUz/th536ul5+/caUpWXXofZ6f2Bck+3Bz2HktZePTlY2PaIR/bl5JnwjeFo3IfTYJXroRm4PN8nP3/D0+fNuLf8eJVzzsPJF61Emx02ScyeNLN3Eqj8pn0oT44EUau0K+1TRTmp5i+TFzlc7HECmn2tB1mTZ8fTH5lEwcGx8O+bYer/zwi8dfIMgPPPMLxPt33X2X/EZjzus/dpZoV/fVPia7DW9f94eNY5S5Yfcr0riNYBqfA1OXr95AuypNvXl5OTSe8Xn//Q/kAJBInC+R8QF1C6exSBNRt9QAOELc9VA3atL8dVq6PPonJ5hyfhI5wI7te+jJVybSg0+NE+PiPm9cs9mwtYJOuPNZuufdLvLnKZjS1evokufep27TCuilXiPoq9FTacOmyLt+fG4hfevut4Uh6k7furcd/fDaB2he6TKdGs2mkhE05ZNr6OCGNrR5/l00/fOraew7V9DCYc/SxPf/RhPeu5JWTf4n7V/7GC0Y9G9akPOcLumHx3S14rPDmwfM2O+bG3hfGgl/HM8P8eZ+XlTgj7vLOSXkvMa3pHr06JHUw838fBGv9pi6fPUG2uVnetnDhDY+a4TmG+OjJ+yNlsz+po0bhXhfhEIbve1IyJPf7l3q2xZVXlHWl8/UxaGpT4vr97YtyTjOy+lKdp1cD9fJz7jwlyHx/UEVr9vi0NeOjtN1mXZkfn2Mpk5ZXqfxG4Ef6F5UXCy/14Bv57Vt21Y+08RPqy9eskT+doh6MaL7GQm5Tm5HtSX74sun2uMlPTY0bCRZ0tzoN6kxPr40YT4TnSMZryWNz5w58mcoXPBr+eabb9Frr72eUG+99TaMTyYhV3X8Kznpw/18EQBHAl7xaXrhm/TZl5Np4pRSGjexmCZMKhbhIhGW0NSpHCe2J5eK/cU0edpS6jugkJ58bRo98sIU71NdQeOzZcdO+czODv3lhVViDj3230/R+wNGyX0bNkZcvt+UOfTx0PHUd+o8Gj23kGYWl9Ha8sj3CwUpHv06zfnqRlo65h80vsMVNO2zFrR7s/6m6MqdlN+/FY1+8zJaMOBGKh3+L5rSsYVMC8JjOn+6mb+XR85jceY1My+Y+dfEqXgdenMV59kon8OZPn2aTDdzjJTMZ/KKstYcxGJfwLfJwoofvYn0TSnWvFa0oEh6GPYy7GniGh/O4Bmfb3jFp1yepJiSDccXdzKyzwcfe9+fN3o/eQXbiyPXscgTydumHg79dbLB4BeQjYP8ZJkIzW01rw4rv0thzhHXxw+R2ZLuPE6av55YUvWzUeFbXfv379eXix+uc+XKlbRs2TIZxpJJ5/wg22CT47/1pG7n1ZSpAiA+jz/bn844701qelE7OuvidnTu5e9T879+TBdf+zld1uJLuuqWr+iaf/WgG+7qR7fcP5huf3g43dlmHLV+fRY98dI0MY5VOVd8guw/eJA+GDhaGJmtwuioh56N4UmVHRuKheH5K4155wpaNOolUVf080AbFg6miR9eTWPbXUnLpnbUsX54TOexncd4OeaHmNeUqYgjK53/8OafhfKlC9Xm3F9UtEB6GGN8jPmJMj4mcc0GYXwKlPHhA9q4cQNt3LBRfmeNqXSDFqfx8ysbhTjcoPPJOBnqjnCaXdbEyzQTp9oxbam6OI+qz1cv5xehXXckztSj8/K2zCfSvXpUXhlynMlvxHXJPCqM9MuqR+eVcbpNr09cTsv0X+aVUvlknO6DfRxeWRMv00ycase0Zfpo2vDVy/lFaNcdiTP16Lximw0b/1UQy/jwb2+xmeGLJ5E4X6Lf6gL1k6jnlvAMDqhFypZupNfbjaAX38ihV94eQa+y3hlFr7cfTW++N47e/mACtftoCr3bcQZ98Pls+rhzLnXsmk/vf55HuXnqgT1+ANllYMJ8GaEN52czZH65nVUdYxQWaXz0Mz5mzpDzi5acQzjkeYLnBD1fmHnCm0fk/KHzy3lD5eXVlmXLlst83vzDdXM+ry5d1sTLNBOn2jFtmT6aNnz1cn4R2nVH4kw9G4TxKVTGR3gZ9jTG3/iMDy/TGdPjMz6by2WD61nrRSNCMuQGpdYH9oX0PpfxxceIS6To+kWb9r4X74gLyuQR4XrRd9721SXjrX0rPipOStSh07hcJp8jNiz8VwEMCwAA1B94TOfHGHiM9437MeeDzJ/X+GtnfMZHmx/2On7jYxIt48MfQVsvGpMVCymzYA5YxXOcFHdK5lOhPGEmj5c/kkdtR0KVV4VmP5hu8kTiVN0mNOVVHtO+zqv3TTl5HF45DlWaOr5ImmlXpll18Laqw9rX6aoOle6V0fm8fsp4nZ+3vfyRPKbv3jGYdFOXDu10kycSp+qOHKudx7S/Xt6emzcvVz4IdyT+CgEAAFCz8FjOY7r8fUoxxmfLvFZQWBBtfITCGZ/Nm2j9OlEh/+q2aZD3169T20Icr6TizL7J6217+5xvnfwVb/7uGy+N4726Od2kRfLIuoJldJxpR+Ux6SyTR+2bfsp9rkuEdh+9bS8/b6t8pm8qL7ep92VdwbImn4pXUnFm3+T1tr19Ve+RPEf8HUSLFy+W92r5YbiDfI8agiAIyljxWM5j+pKyMjnGm3Hfmyes+cTMBfVhXuNjTtn48EfDuBOyo16nRAMyTss0bvIF0y2ZNNVJEcd1cpqsV8ve9uJ0OVfddj1m3+TT5fx9Fts6v6ovkMahrw6TZslZPrPPEbtmfmqezQ+v/PAPv86dw5pLc6TMj7/qbfnDsPZ2QM7yc2kux9tlvfwizdvn7UC6JZPG39Mk29Zt+fphb3txupyrbrses2/y6XL+PottnR/niLdNfruc2Nb5cY542+S3y4ltnR/niLdNfruc2Nb5cY542+S3y4ltnd8+Rv6h7sWLl8ixnVdEIuO+ngts6TmiPsxr+dUyPhs30rq1XNlaWisqWyu3hUyotXatTrck4znkvEImj9lfJ/fX6vIqPVKnjtftqvb0Noec3+TTaaas146XbtcRkK9N1Z6K53qsfR0n6zJl9L4S51HtZPI54iVC/quAH4KDIAiCMl88pvNzL2qOUXOGmQu8ecbMLXo/0+e1/Py8VI1Pd/nktOwUVyilK5cNmLhw25E6AvsmjwxFp028ltm3+8Db/vJWv7w4I3Vy7H0vv69tpWD7bgXaE7L758Xb7YbYDrbtP0YT4hx58fa+ySNDnCMv3t43eWSIc+TF2/smjwxxjrx4e9/kkSHOkRdv75s8MsQ58uLtfZNHhuk9R3l5bHy6J2t8+DPw3eVHxNasWUtr1q5Rla7hcI2M49A0tkaGap+37X0vD5fV5TmUeXz18b7KJ/dluyq0y8l9rk+XN22pkON0KPOrfdN/L49Oj8Sr8qauaOl4U7evTtVfs+8/JlPWrltt2/teHnl8qrx3bL76eF/lwzlSoczjq4/3VT6cIxXKPL76eF/lwzlSoczjq4/3VT6cIxXKPL76eF/lwzlSoczjq4/3VT6cIxXKPL76eF/lS9c5yptvjM8Cn7eJYXw2S3nGZ4MwPrJzppNB6YMKpMlOeeI85qAiiiojOqxeKJaVX27rA/Ty63QTJ0LvBFlxXv5AXOQkm31/6CtrxfnL2X1UYfCYlFS+qOO1tlUef59YUWVwjqx9pagyOEfWvlJUGZwja18pqgzOkbWvFFUG58jaV4oqg3Nk7StFlamBczR//nzL+ChfE8P4mMSI8VmxYgX169cfgiAIgiAoI8TeJdr4bA5vfM477zw6//zzESJEiBAhQoQI63xYbeMTphGECBEiRIgQIcK6ECZtfFYL5VrG59xzz5UVIUSIECFChAgR1vXQGB/2Muxp4hofziCNT77/VlfYxhAiRIgQIUKECGsz9IyP8DLG1ziNj0lcvd5vfM455xxZEUKECBEiRIgQYV0PfcZHeBrjb6KNDydqBY0PBEEQBEFQJijK+GiFNj5nn322rAghQoQIESJEiLCuh2kxPhAEQRAEQZmgahufZs2ayYoQIkSIECFChJkbnnXWWdSkSRM644wz6Mwzz6xz4r41bdo09PHECkMbnzUiUmkTzc8v8hkfCIIgCIIyV2x62PCwueBtV57alG3Kqts/Y3zYy7CnMf4mhvHhDJuES4oYH+O+ECJEiBAhQoSZGZoVlbD5ayvkPnJfw+Z3hZEVH2N8lPmJNj4bNtFqrdwCv/GBIAiCIChzZVZSXGl1SWZlypUWVp7xEV7G+Br2OFHGx/seHyH7m5vNiUKIECFChAgRZmbIqyhh8tWFkPsaJl+sMGJ8Fvi8TXzjYz3czBVBEARBEJS5MsYnE1TdvnrGhx9utrxNbOOz3m98+H4bBEEQBEGZKzYTrvi6qOr21Wd8hKeJb3w4A4wPBEEQBNUrZbXx0eYn2viYRG18umjjwx2AIAiCIAjKBLF3YQ/jMz5CcY3PvBowPqc3Pp6OP96vhqdG5zu1oUhreGro/bqnU6nh8Y3p9IRx1VfYc3qkJF+bxqc705ROp8aB/rqV/nNVXaX+vquZ1x6CIAhyyxgf9jK2t4lpfFYJzcsv8owPf6ysejqNGh13HF33fCfq1Mmvdg+eS8ed3NjKezm1ai/S2reiy0Pt10Fd8jC16/Qi3ZIorlpK5pweKenX5sVbHGlGt9CLgf66lc5zlQ5V432X9tcegiAoebEhcMW7VFpaSumG63S15VIyfXUpYnyKpKeJa3w4w6r1m9JrfBq3oOedk5tWuwfpgsYm/+X0aAcR1+HRjDU+l7dqL47LP9G54qqlpM7pkVIY43MrveTqb5Reolud5WtLqb/v0v7aQxAEpaBkzMTixYu1XUkfXKerLZfSa3w2eeYnyvgY0+MZn6+V8Tn99NOrpUtatpOTWftHLotKu/UlNdG1a3mJF9fopGPp2JMa6f3LvAnnsqj9U+mUY0VerZMaReqNyJ/n2GNPoVMDefztBeJPOTUQH78+LnPOg3y8belakc59csWFrS+Wkj2nSmHbCpnv1FMCefRr88LN0XljKvj6xlKiPjWik0S8PLdWv7xzbffV91qreoPljj32JGrk5WHF6KevjJL9+tbEaw9BEJSK2Ey44uuiqttXaXyEh4kYH2V+HMZHJ65Lr/G59UWeiNtSC9+gb6RXAF66Ve/HMzr2fku66KRrqS2X1Wr34Dl0yqmmXiE5KfnzqAnIntRiTbw63p7EE9any1jp7Vu1cMRpsxKqf24ld06FwrYVNl+jk+jYa9v685x0EbUMnrOEinX+LYXp02WtqL2Ib9/yIjrJ6le7By+gRqcKU2T3td2DdI5naG+mFxzlOnVqRw+eYx+zo59R50Ap8j50vR+q/9pDEASloqw1PsLTGH/jNj6cIWB8TjvttGrp0kd4qV9NCPZfxic2cuW/lFq1E5NAu1Z0adz9ttSWQ9/E0Yna3tjYq6vRDdGTkpKY1Jo30vmC9RvpeDGJh6rvQm73UnokONE90sIRd2nI+uz++JXcOQ3fVrh8jelCuYoRyGNeE+ucJVas8x9RqD5d2oraibh2bdtKA+TLc+2DMs1X9vmbdP3K+HC5qDy+Y47u58UPO86Blnofut4P1X/tIQiCUhGbCVd8XVR1+xplfLT5iTI+q0UCK93G57TT3A+0epP2icaEsIITTIx9rqP9I5HJ8pYXVZw36V5MD+t8L96i8wgZw9Cp3cN0sYyLNfHq+AT1nXbpI2qibXsjNdZxl7biCfEFutnkccaFr8+tZM5p2LbC5rtJP1/Unh651OSzJvm0Gp+QfdLGx5fPvCeEjOHwynntKeMj8714i1e/9z7xjjn6faiO90W6Re43poZ83s/RJss6B+l/7SEIgpJXNhsf42+cxsc4I9v4nHrqqWnRzfL2jEN86+HkRjrfJdRSTjAt6ZJ4+zyR6HqV9AT2wk1q/5KWagJ68WYrj5LqRztqeQnvB+s30vGmvov5kznKWBxzzDE+qWc4nqcbdVn1/M0LdJNXlyMuifriKdQ5DdtWkvnat7rE359L1O0m75yFUqzzrxW2T+b1FoYjUv4m9Z5o38qq+xJ1+8lrz5VH6eYXRLz3Orj6eQqd4PUncNvKOgc19dpDEAQlIzYTrniXSkpK9CPJ6YPrdLXlUjJ9dcm14uM2PvoeGEsan2+6pdX4+GQmSaO2LaiRTAtOMIn2jXR8wPi8cJOdR+umF0SbSRofWUbsx5SpL6TxSaK+0Ip1TsO2lWS+6HMbOGehFOv8a4Xtk369+YHuSHltagL9uYkNjdeeOw9LvWbmdQj2sxGdbFZ3XLLqOyKvPQRBUAIlYyZq6uPsrrZcSovxER5GGh/ta9jjRBkfk2iMz5d6xadx48bVUEM6/uij6eiTTnGkscSEIm8ZvEA3mn0zwYTaN9LxL9yo9vVE2LZFdLuntODnK3hy0eXkCsDDdJEv30XqdoSp7+ZEk1V7aiXra+xNdOp4YsQlUV+0kjynYdtKMt/zN5r2jALnLJRivZ5aYftkGZ9I+Ru1qfH350ZjfOw8z0f3+cKH+DVrH3mf+Pp5o+/rBF682ZTT8Vab6X3tIQiCUhObCVd8XVR1+8rehT2MbXxYDuOjv8dn3SaaGzA+jRo1Si28WK9CtL1GTtRR6Q1PpGva8mD/At0s4y/WE8zDcoJJvG/q0/F6ArPbPekUK9/Jx+n21OTC8XIi7NSWWlj5Tj7uGnXrIlBf22uOo4ayvchxNDz+aDrqqBPpFL2vJrrn5URn8qkHYZ+nFqZcEvWZeC80Kzvi2I46sWF0+ikneef0Jit/22uOp5PtfCI8+bij6OijT6KGSeXTJuOBs+nEhpF8DY/X50xM+r7+xA1jvZ46DHuezO2jhy+2ykdMiF1OGR/TnjY+7R6g8xqaciI8+Vx6gPsV632p22t7g33+T6ETmz0g4zs938KLj3o/hD3PVjxChAgRVjc0ZiJs/toMua9h8sUKjfFhLyNvdWl/E8P4iAwB48OVpK6LIx/p5Yn6qKP8ukZ/uqV9K7pY55erBmKCCbdvpOOFUQm22/aaSHvNHuBJSMR77TVStz58+ZrpSc9VXzt6oFmkvkjeF6XJ4LzK5Kh8x50cKy58fdFK/pyGaytsvpu8B6vjn7MwivV6RtJD9ckyPpGy2vgE+nMjf9u1115k5abdA828+r33yYs36XKBflrGOtInbfxY1vGk97WHIAhKTcZMZIKq29do46PMj8P4KNOz0mF8TjlFrdakFJpJIqbaU8uLTH59u0RPHIn3A+XEX9peuzdFPtUTu70Y+dq/QC+Erq8T8ffAmHwXy2/qVfHye2RE/EUt/XHJ1OcML2qZ8Jy2utjKf2Ps2yvtW12cnnztX9Tn7Mbo/sYMY72eVhjmPF1kjI993iLGx67PNj6nnKK/Abtde8f5fJFu9MpFvw898+lSu4foQt2e6/0Q+jwjRIgQYZpCYybC5q/NkPsaJl+s0DY+7GmM+Yk2Ptr0eMbnK2V8uJJ0SN1SCoi/iNCXT38JnhefaD9Q7gU1yXmKMggvyMnMl0fINiaq7rD1daIXbrTSpfTtE5bXT1ecUKj6YivcOdUK21ZK+fi8xjhncRXr9QwoUZ90OhuhSLnIMz6ROH3OvPa08REG12dGovrj6qf1mkopQ61eE/t9VjOvPQRBUDIyZiKMaupTXa62XEqmry5J4yM8jDE+xvw4jY/RvDw2PupTXVxJw4YNESKsh6FlfELlR4gQIcLMDI2ZCJO/Jj7VZYxPmPa5r2HyxQqV8ekmvYztbeIan7l5hZ7x4UogqH4qYnzc6RAEQfVDxkxkgqrbV2N82MvY3iba+HjP+GykufnC+HwdMT4nn3wyQoT1MLxBG58bQuZHiBAhwswMjZkIm782Q+5rmHyxQml8hIdhL8OeRhqf2M/4bIwyPlwJBNVPtdDPAbVwpEEQBNUfGTORCapuX4PGx5ifKONjEj3jo291cSUnnXQSQoQIESJEiDBDQ2MmwuavzZD7GiZfrFAaH77VZRkflnPFx2iu9XAzVwJBEARBUObKmIlMUHX76hmf5B5u9hufE088ESFChAgRIkSYoaExE2Hz12bIfQ2TL1aYtPFZuXajfBLaGJ8TTjhBVoQQIUKECBEizMzwjDPOCJWvLoSnnXZaqHyxwojxKZSeJq7x4QzS+FgPN4dpBCFChAgRIkRYd0P+1XL+npuw+Wsr5D5yX8Pmd4VB48PP9ziNj/p2w+iHm48//nhZEUKECBEiRIgwc0Ne9eGPfPN2vHy1FbLpMStT8fIlCj3j43u4OYlPdYVpBCFChAgRIkRY90P+BXO+lcTP0dQlcZ/MSk+8/ocJg8ZnlVbA+Oz3EqTxsZ7xOe6442RFCBEiRIgQIUKEdT30jA/f6tLeRhmf/Y5nfORzPv5PdYVpBCFChAgRIkSIsC6EEeNTJD1NzB8pVc/4KM2xHm4+9thjZUUIESJEiBAhQoR1PZTGR3gY9jK2t4ljfPyf6grTCEKECBEiRIgQYV0IjfGJPNwcw/jwMpD3jA8bH32r65hjjpEVIUSIECFChAgR1vVQGh++1aWNj3rGx2l8rE91WQ83c0UQBEEQBEGZIM/46IebjfmJMj7erS7v4ebusvDRRx8tK0KIECFChAgRIqzroTI+3X0PN8e51aU0N18YH/2MD1cEQRAEQRCUCZLGRz7jk+i3utarBHZF9sPN3//+9yEIgiAIgjJCEeOjPtUljY/wODFXfOQzPtbDzQAAAAAAmYI0Pr6Hm2Ot+GjTA+MDAAAAgEwlaHyM+Ym54sOal19EXb5WDzcDAAAAAGQK7F3Yw7CXsb1NtPHhZ3z0cz6c+UsYHwAAAABkGHLFxzY+2t+4jY92RepTXTA+AAAAAMgsjPHxfarLaXxMohBudQEAAAAgE2HvEupW12rhhljsiqTx+QbGBwAAAACZhTQ+wsNI46O9DcthfDaLDEowPgAAAADIRPzGR/ka9jhRxsckeis+uNUFAAAAgAxDGh9zq0t4GuNvnCs+SpsoV2TuCuMDAAAAgAyDvQt7GPYy6jZXjBWf1RtEwgZ1H4wz41YXAAAAADINueIjPEzE+CjzE8P4KFeUm7+AusL4AAAAACDDkCs+0vgskJ7G+Jso47NGRK7Ry0EwPgAAAADIRILGh70Nexy38dGuKLcAxgcAAAAAmYdnfISXYU9j/E1M48OaD+MDAAAAgAzEGB/2Mra3cRifck/zCxaKQj1gfAAAAACQUSjj00N6Gdvb7IfxAQAAAEB9I5bxiV7x2SgStOYXCuPTDcYHAAAAAJmFND7Cw7CXsb2Nz/jw8s9aEWmUJzJ/BeMDAAAAgAyDvQt7GPYytrfx3eqC8QEAAABAfSAJ47PFE4wPAAAAADIRv/GJeBu/8TlwgNZt2uIpvwjGBwAAAACZhzE+7GVsb8NeJ4bxwa0uAAAAAGQm9ooPe5oQxodvdRXT1916wvgAAAAAIKNg78Iehr2M7W3iGp/8ImF8usP4AAAAACCzkMZHeBj2Mra3iTI+6zfD+AAAAAAgs3EZH/Y40caHE7Q48zcwPgAAAADIMNi7sIdhL2N7G8eKz1ZP+QsWwfgAAAAAIOPwjI/wMra3gfEBAAAAQL0jtPHZICKNCmB8AAAAAJCBGOPDXsb2NgHjc5A2lG/TEsZnYQl906MXjA8AAAAAMgppfISHYS/Dnsb4G/Y6PuOzUUQaFYrM3WB8AAAAAJBhsHdhD8NexvY2MD4AAAAAqHeEMj4HxM6mLds9FRWXUveevWF8AAAAAJBRsHdhD8NexvY27HVgfAAAAABQrwhvfLaKBK2iRTA+AAAAAMg8POMjvIztbaKMz+atFZ4WSOPTB8YHAAAAABmFMj59pJexvQ2MDwAAAADqHTA+AAAAAMgakjA+2z0p44NnfAAAAACQWSjj01sbn4i3iTI+5cINGS0UmXtgxQcAAAAAGQZ7F/Yw7GVsb+M3PgeF8dkmErQWlgjj0wvGBwAAAACZhTQ+wsOwl7G9DXsdGB8AAAAA1CtCG58t23d4Ki5dTD1hfAAAAACQYbB36dm7j/QynrfZtiOE8RGFYHwAAAAAkEk4jY9QlPHZKiKNFsH4AAAAACADMcaHvYztbaKNT8VOT4tKl4hCfWF8AAAAAJBRSOPTp6/0MtLXbFfyGZ+DYmebSDQqEZl7iUIwPgAAAADIJNi7sIdhL2N7G/Y6MD4AAAAAqFfA+AAAAAAgawhpfA7Rth27PJUsLhOF+sH4AAAAACCjUMann/Qytrdhr+MzPttFpFGpyNwbxgcAAAAAGQZ7F/Yw7GVsbxPf+CwRxqcvjA8AAAAAMoso47NTKcr4VIhIo9IlS6kPjA8AAAAAMgz2LuxheBFH+ZrdUg7joxJYMD4AAAAAyEQixmepz9v4jc+hQ7Rj1x5Pi8uWUZ9+/WF8AAAAAJBRSOMjPAx7GdvbsNeB8QEAAABAvSIJ47Pb0+KypaIQbnUBAAAAILNQxqef9DK2t8GKDwAAAADqHUms+MD4AAAAACCzCW18dopIoyUic18YHwAAAABkGOxd2MOwl7G9TbTx2S0StJYshfEBAAAAQObhGR/hZWxvA+MDAAAAgHpHEsZnr6clS5eLQgNgfAAAAACQUSjjM0B6Gdvb+IzPIbGzS0QalYnM/WB8QB2gPKclnXnmmU51KNKZYlJOOS1N/g7kzx4yrWWO2APZRs297zKFIupgjjnxAQNQp2Dvwh6GvYztbdjrwPiAOku8iSeo2OMyjE86KOrgOkcREqVnEjX/vssUYHxA5hLe+OwRCVply4Tx6Q/jA2oHNZEmp5Y5LnsC41M9Ek3g9WGCj3Bk3neZAowPyFyk8REehr2M7W1gfEDdpDyHWpoBN+6gaw3MUi3JOQfFBMYnMVlkfI7Y+y5TgPEBmQuMD8go7L+6w4y3dn73X9+xgPFJTPYYnyP3vssUYHxA5hLa+Oy2EmF8QO2QguGw/1JPaoCG8UlMthifI/m+yxRgfEDm4jI+7HGijc/efZ6WLheFBsD4gCNNuifSePWFTLMmwuhnQMLf5oguKxR3Qgk7GaeQz1aMPjj7q8UrHInSo0mu/SOL3beaft/ZuM6JeU9ZaVGvqysteAuOVZ3bcPGMz5FoH4DUkcZHeBj2Mra3gfEBdRLfhFrtSTHeBBQyjQf24PMfAcW91VHUwVnGlvswXZOLi8T5En9SKXqCSqfxSaX9I82Re98pEp6TDjlxXlf/a54T57WQSul4whufmmkfgNQJbXzMchBudYFaxWkyUp0Y401AIdNatoxreoycY3sI02MUXd4/ucQ+/Pj5wn8823+O02V8Um3/iHPE3neCJN4XUvGMT0gl7z1CGp+QgvcBRxJpfBI943PwIP86+26pip27aXHZUurTrx+MD6gdwkwMoUbSeBNQ2DSt4OQTnCij+hNc+g+2kSjd6kOqxifYx0QTaNx0xwSeKL3a7R9hjsj7LvC6Rx1z8H3hyhM4b648Cd+fiUjS+KS9fQBSh70Lexj2MuxpjL9hr+MZn6r9B2j1+s2ecvMXUNdvusP4gNojOHDGUewxNd4EFDZNKFYDdh8DA79vpSNmB/3t+G8RWWlRE59N7Hzh+sDzvc4j5M8W7xwx8dOr334tUNPvO9tcxazALi8U9foH0mPVE+f9mZgkjE+NtA9A6rB3YQ/DXsb2Nux1POOzr7KKSpat9jR1Vi59+kVXGB9QJ4h3W8WTc2CNNzGHTYt3u8PKF2g/0ucEt0vsycE3gcSu20+sfPGOL4DVh5jmy1lHvPR0tF+71MT7LqX3RVQbdv2pvT8TE9b41FT7AKQOexf2MOxlbG/DXsdnfBYtXeVpysx51PGLLjA+oA5iD7oBxR2gk5mYww7YsfKFLc9Ut45Y+eJNXEGsOmKZL6d5iZeejvbrEvaxBhT6fWfFJ3xfWOcvKm/YepJpL0hI41Nj7QOQOuxd2MOwl7G9DYwPqAdYA6tU8K9POz0DjE9Kk2SsfNbElYxiHUfUOWLipaej/Xgkqj/Bikq1sI/b1Vas8xLPTASJ9boy8dJswuZzAeMDMhcYH1Dvif2MiDXwxjM38dJSGtiTGfCrW0eMfPatkmQUqw/JGp+0tB+P2jQ+iuTfd1afEx5nvNc/XppN2HwuYHxA5gLjAzKG0M8/BLEeGA3/jErItJQG9mQG/OrWEStfMqsLsbDqTtb4pKX9eKTP+By5913Y15SJZ5LC1pNMe0FgfEDmAuMDMoawnwKKwpqA/MWsgfeIGp8kJlN7ZcTX+ZB9iPkQbLzjC0uiOuKlp6P9I8ORfN+l9L6Iev2t+lN8fyYGxgdkLjA+IHMI3B4JNwfZf/kHJ5PYE1DotBQHdt9kGrMOuw/xVg1iT5L27ZZgO3Za3E9LhTFfTvMSP7367R8hjuT7Lt0fZ0/x/ZkYGB+QucD4gIzCN5FLxZ70feaCFW+APsLGxz8xsoJtJEoPnot4k6tWsA+BCd15LPZE7DjXkT64X4e46Wlo/0hx5N53gdc94fvGlScd789EwPiAzAXGB2QY9qSRhJwDq13XkTY+At+kHl/OP/7DlI/7m06ih8FJOp4cnYg2BP7Vm0Tp1W3/yHGk3neCJN4XUlFtpOn9GRcYH5C5wPiAjMQ1ocZUzEE13gQUMq2aA3uYiT/efB//PHC/09OHmKbDNUnbeROlC6rV/hGm5t93ioTnJIkfKa3O+zM2MD4gc4HxARlN3Aki4WAabwIKmZaWgd1uy1LYyT54y0gosqpSzT7EmJhtol6DQDuJ0hWpt18b1Nz7zsZ1TswtNiutVowHjA/IXGB8AAAg44hnPAAA8YDxAQCAOkJkJSn+g9z2ilPcT8QBAKKA8QEAgDqC/xaa2/z4nzOqvU+6AZCpwPgAAECdwbqFFUJY7QEgeWB8AACgLuF4WN0pPNsDQErA+AAAQB0k5ifH8AkoAKoFjA8AAAAAsgYYHwAAAABkDTA+AAAAAMgaYHwAAAAAkDXA+AAAAAAga4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNYA4wMAAACArAHGBwAAAABZA4wPAAAAALIGGB8AAAAAZA0wPgAAAADIGmB8AAAAAJA1wPgAAAAAIGuA8QEAAABA1gDjAwAAAICsAcYHAAAAAFkDjA8AAAAAsgYYHwAAAABkDTA+AAAAAMgaYHwAAAAAkDXA+AAAAAAga4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNYA4wMAAACArAHGBwAAAABZA4wPAAAAALIGGB8AAAAAZA0wPgAAAADIGmB8AAAAAJA1wPgAAAAAIGuA8QEAAABA1gDjAwAAAICsAcYHAAAAAFkDjA8AAAAAsgYYHwAAAABkDTA+AAAAAMgaYHwAAAAAkDXA+AAAAAAga4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNYA4wMAAACArAHGBwAAAABZA4wPAAAAALIGGB8AAAAAZA0wPgAAAADIGmB8AAAAAJA1wPgAAAAAIGuA8QEAAABA1gDjAwAAAICsAcYHAAAAAFkDjA8AAAAAsgYYHwAAAABkDTA+AAAAAMgaYHwAAAAAkDXA+AAAAAAga4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNYA4wMAAACArAHGBwAAAABZA4wPAAAAALIGGB8AAAAAZA0wPgAAAADIGmB8AAAAAJA1wPgAAAAAIGuA8QEAAABA1gDjAwAAAICsAcYHAAAAAFkDjA8AAAAAsgYYHwAAAABkDTA+AAAAAMgaYHwAAAAAkDXA+AAAAAAga4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfEAdp4g6nHkmnRlUhyKdHqCog0xvmVOuI2qButCHIDH7VE45Of5zWdSBz3FLqkvdz2rKc6hlvPd8jRD9vqj++1rU2ZLfWx3EVQ1A7QHjA+os5Tkt5UAbT1FzAYyPG1efYkyoMD51jCNtfGK1B+MD6gkwPqBuYgZfIdd4ryZnDKLVAsYnM6grxqfawPiAugGMD6iTmNWeeH9dGvNzpOaDegeMT2YA4wNAWoHxAXWSMMbHSczleP+zQjLdMcBHJn0zSEcUeh5w9KF69caeMGKep+CxBfrkuo1o0mzj488Xzgx5ZWIdmO5LVLqJt+SqIqYxc7yeqi983uzXP9xxqHYiijrHglD1m35ZinVqRKv+Z9o4YzwjErLusO+/eO8L8/pEn4foOpWC79cY72PH6+461wCkCxgfUDexB/TYs0Q0rsHZMTnIPB06RE0owcnOr3ATpqsP1a3XTEj+U2FNOC1zxF6EqPyBPsWb4Mwk2aFDdJ5w58BM3tFGjYlMwjoi5sSpFXj9o8trHAbBGJMO9vkPnKtoYvcnOCEnqj/u6x44Lq//Abnep0wydcfNa53LeO8LUYl/n4nR54hcr3PkfeFqz1PC1wmA1IDxAXWWmINivAExanC2JjF7MtD5gvGRCSLGxBycrFzENT4p1uuY1P2Tjt8IqPYs4xFv0gq0naivvjpiYOqIOizTpvUaRl5n/zHYxxd9LgN5GcfxxKw7DpEy1vnz+uKvJ2793nssaAAj5zLS1eTep8nVHXk9/P2M0WaM94Vp0/W+jn5PRFauImmmPdNnkyd47ky+8K8ZAMkA4wPqONbg7FBwbI4anB0TrcGbtKxKYg7kZqKJatBBMhNE6Hr1ebCPQ5YVk0OOqiNShZ5QovIG2o8xwaXlHMQ47+acR6pIMMk56lH9c+R3HI9pL+pYYhK7P6664tUfs58S/RqZvqb0Pg1ZtyCp1zTG+8LkDXsuo8+NObeJjA8ANQuMD8gszKBsyTc+BwfneIO1Y4BPZlKNiaPNdNQbrEPti0kkWIfrmF1xMdpOyzlwGojgxMc4TJqP6DLJ9M9MvqG6LEnUHz+x6zf9TiDTjn59nOc26riSrFuQ1Gsa63WOdy15RPctkj/WaxkrPwA1A4wPyFi8v4TtSSo4OMcbrB0DfFomfUeb6axXZdWTiNzR2/o8qPMSaMt1HmK0nZa+MjFeC3/5sMYn0p9k+ld7xsesZiSSNgGu18cQdVxJ1s0lknlNY73Ozj5GG52gIvmjjQ+j+uaSPx8A6QLGB9RBwk4+ZgKwBsgYk224CcUMwtWc9B1tpsdM6OPlvLqcKRYxO34T5OE6DzHaTk9fGf/r46430WsdPVkm07/aMz7uST4m+vVxntuo40qybkFSr2ms1znm+zoifzXq3ETyJ+q3SbfkOh8AVBMYH1AHiQyAccc9M0Dbk1RwcHbl0ZiB2R5c0zLp15jxMfV0oBzP6HgJss0OOao+n8FhHH2K1Xa6+spEjEEsQ2Fea0d7jOP1M5NtsBuu1zO2MYlFnP44jj9e/bH66cRxnIbY79Pwx5XUaxrrdY56D8UziZFrOJLfxIUxbMkZUACSAcYH1E30IBsc8D3M4OwbWAVRg3NkAPbVE6P+tEz6DpORlnoZWXdLasnH5JsU9EQh5WjH0adYbaetr4z1OrFcRb2JPdimVdbut5ffPn67HauR5I2P3R97go68j+y64tZvvceC6V4bVoIxM77zG+O4Uqs75GvqimOi3kPmPRes134vuq5FfV69Y3MYIXN8MD6gBoDxAXWWyAQURwkHZ4E9ebiU6gQRC0cf0mYm7GPxlbEMXpyJJN55MWlpNT4Cb0KP85d+JI9Dwckv0G8j1/fdxDUmMbHPZUCBviSqP+5xBc9HEsfFJFN3Uq9pjPeFqMS/L4jfBy2v7oDxEcQv7+gvAGkAxgfUcWJNQjEGRdcEL/H/FSoHX8egn9QEEYuaND7W+QgWcf2l7xHjvPjMpS6Xvr5qdNsJy5l8lmIWcU3Ojv6lZnwUUZOyo5JQ9TuOK/a5CLzfOV+88x6y7mRfU9f7wrQVfA9FnSeTx9TtmcVo4yNxHQNWekANAuMDspcYAzlILzEnXQAAqAVgfED9xlsZCPyVaa0Auf6QBmnC/DWPv+ABAHUEGB9Qz4l1q0wLrqcGCJ5zrPYAAOoOMD4gK3A9hwDPU3PY5xvnGQBQl4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyhlo1PuvWrYMgCIIgCEpK1QErPgAAAADIGmB8AAAAAJA1wPgAAAAAIGuA8QEAAABA1gDjAwAAAICsAcYHAAAAAFkDjA8AAAAAsgYYHwAAAABkDTA+AAAAAMgaYHwAAAAAkDXA+AAAAAAga4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNaQ0cansrKSysrKqLCwkHJzcyEIgiAIqqPiuZrnbJ67a5OMNT584vLz82UfysvLaceOHRAEQRAE1VHxXL1s2TLKy8urVfOTscaHXePKlStp7969VFVVRQcOHIAgCIIgqI6K5+o9e/bIuZvn8NoiY40PO8adO3fSwYMHdQwAAAAA6jI8Z1dUVMjbXrVFxhofvl+4f/9+vQcAAACATIBXfngOry0y2vjw0hkAAAAAMgeeu2F8UgDGBwAAAMg8YHxSBMYHAAAAyDxgfFIExgcAAADIPGB8UgTGBwAAAMg8YHxSBMYHAAAAyDxgfFIExgcAAADIPGB8UiQ141NKOZ06USenckRquuH2etLU8uA2AAAAkJ3A+KRIdYxPTvodTghgfAAAAAAYnxSpMeNTPpV6skGZmhNZDeICpYF9g8yv47UiyVjxAQAAAGxgfFKkZo2PZW6M4TH7xhh5ZsZfX2kOmx9z2wzGBwAAALCB8UmR6hgfe3XGk8/YBFdt4u0HkEYJxgcAAABwAeOTIjW74mMblKBhcdWh4iJGCsYHAAAAcAHjkyJ1w/iobTY7PU0GrPgAAAAAMYHxSZE6YXzY5PScSj4vA+MDAAAAxATGJ0XqjPHxTI5APx/UyWl2YHwAAAAAGJ8UqY7xiTyL45c0M0k+46M+xWXEJshOt8sG6wEAAACyDxifFEnN+AAAAACgNoHxSREYHwAAACDzgPFJERgfAAAAIPOA8UkRGB8AAAAg84DxSREYHwAAACDzgPFJERgfAAAAIPOA8UkRGB8AAAAg84DxSREYHwAAACDzgPFJkby8PNq3b5/eAwAAAEAmsHv3biosLNR7R56MNT5lZWW0evVqvQcAAACATIDnbp7Da4uMNT6VlZVy1WfDhg1yGwAAAAB1F56r165dK+fu2py3M9b4MHzi2DXykhnfL4QgCIIgqG6K52qes2t7sSKjjQ8AAAAAQDLA+AAAAAAga4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNYA4wMAAACArAHGBwAAAABZA4wPAAAAALIGGB8AAAAAZA0ZbXwqKyuprKyMCgsLKTc3F4IgCIKgOiqeq3nO5rm7NslY48MnLj8/X/ahvLycduzYAUEQBEFQHRXP1cuWLaO8vLxaNT8Za3zYNa5cuZL27t1LVVVVdODAAQiCIAiC6qh4rt6zZ4+cu3kOry0y1viwY9y5cycdPHhQxwAAAACgLsNzdkVFhbztVVtkrPHh+4X79+/XewAAAADIBHjlh+fw2iKjjQ8vnQEAAAAgc+C5G8YnBWB8AAAAgMwDxidFYHwAAACAzAPGJ0VgfAAAAIDMA8YnRWB8AAAAgMwDxidFYHwAAACAzAPGJ0VgfAAAAIDMA8YnRVIzPqWU06kTdXIop1RnqQ+U5ohjyhFHCwAAANQtYHxSpDrGJ8rkSKPQk6aW6/1MB8YHAABAHQXGJ0XSanyonKb27EQ9jfMpn0o9rdWg4IpQ+dSeVprfMLnTVP1eHbp+sy/L9Jwqcsk9mderw4tnOE3UOZWNjV2/vZJl0mF8AAAA1D1gfFKkJoyPio/OU5rDhkIbieBqir0fJ02aG1OpiO8pDIwxWly/2tamx2pcth00RVFmyDJtojVlgqx+AAAAAHUEGJ8USavxkQbFv3LjI565sUmUpg0Lm6CcHLEvO2KZLrkSFCxv9zlocgSuNuP1AwAAAKhFYHxSpDrGx7uN5MlleoJ5jZHQqy463m+i4qVxfaqO0hzRXqkwOdIIReJtcxTBNjuWSdL4b5NpnAYKAAAAqH1gfFIkrSs+PiKGx1tZibGCom6BsaKNU3Qamxbe5pDr0oaHTYoxLjA+AAAA6jkwPilSY8bHZT7i3jqyjUkQf5q8xTXVGB1OE0Zoak6kbMhbXb7+u/oWt78AAABA7QHjkyI1anxs0yDNiLVy40wPkcbI9IgR4ltePX1GRhmbRA83+/sfLGNWrGB8AAAA1D1gfFKkxoyPIHKbyhgIfzl/ur++eGnB9uVtqiiDoo2MqcO3+uQyPoxdRq0iwfgAAACoi8D4pEhqxgcAAAAAtQmMT4rA+AAAAACZB4xPisD4AAAAAJkHjE+KwPgAAAAAmQeMT4rA+AAAAACZB4xPisD4AAAAAJkHjE+KwPgAAAAAmQeMT4rA+AAAAACZB4xPiuTl5dG+ffv0HgAAAAAygd27d1NhYaHeO/JkrPEpKyuj1atX6z0AAAAAZAI8d/McXltkrPGprKyUqz4bNmyQ2wAAAACou/BcvXbtWjl31+a8nbHGh+ETx66Rl8z4fiEEQRAEQXVTPFfznF3bixUZbXwAAAAAAJIBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNYA4wMAAACArAHGBwAAAABZA4wPAAAAALIGGB8AAAAAZA0wPgAAAADIGmB8AAAAAJA1wPgAAAAAIGvIaOOzcvMeuqn9WGrSuic1vO8LCIIgCILqqHiu5jmb5+7aJGONz9xl26lxy6/pwpdGUIsPZ9G/OhfSv74oQIgQIUKECBHWwbDFR7Pp/LY5dMqDX8k5vLbISONz+PBhuuCFYXTBi8Ppb+/PpUvbz6aL3xFqhxAhQoQIESKsi+GlQtd8NE/O3TyH81xeG2Sk8Tl06JB0jFe1myFO6Cy66O1ZCBEiRIgQIcIMCK94eyqd+kh3OZfXBhlpfA4ePCjvF1789gy68K0Z4kTORIgQIUKECBFmQMhzN8/hPJfXBhlpfA4cOCBP2oVvTpcnEiFChAgRIkSYOSHP4TyX1wYZbnym0QVvTEOIECFChAgRZlAI45Mkxvhc8MZUCIIgCIIyTDA+SWKMT/PXp1Dz1yYjRIgQIUKECDMohPFJEmN8zn9tkjyBCBEiRIgQIcLMCWF8ksQzPq9OpPNemYgQIUKECBEizKAQxidJjPE575UJEATVIZ3zRCc69QFLT4xy5nNrFJ0lypz1vCstWXFdPamZ3m/2WCfqMGxxIA8EQbUlGJ8k8YzPy+Pp3JfGIUSIsA6E5zzxOQ3dpC9Sw8ZSYX5Ghip/3striEeUFfMT5QsTrqOVtJ/mj+L9xZS7l2jnssUhyiFEiPBIhDA+SWKMz7kvjZUnECFChLUdjqCcDeLiLF9nxZfSfGE4aMNyOlvuD6cm939GTdpa5dr2pVPv76PTVyvjkzuIzhD5TpXqK9JMfo7vTk2f7qPThNqMEHUE9nV/mtzfjZqKck0fnU7z9gjjs3i6la7bR4gQYa2EMD5JYozPOS+OoXNeEEKIEGEth2uFaamkuYOH+ePzdosrdjcNl/va2My30nN3iJgdvvTlpZtopwgVFTTkvt7UjNNHbhbxoo2yXTpNsL6EGs+198voLNk+11VFuSNKlPkybF7r7x9ChAhrJYTxSRJjfM5+YbQ4gaMRIkRY66E2GMKINLq3IzUWatRqQCCfNja5VjnP+ETSiXbp/dH0/vL9Yn8b5Twr9kew8RGweeH0PG2PzP6IcmmM5g3j+lfTcml8uJ4SyuUVn6UlkXYRIkRYqyGMT5J4xuf5UdTs+ZEIESKsEyGv+ljsWUtv3/MxNXpsqE5fJcwIGx+rXG6FiKmgYVb6ivl2veq5n+Vzxb42PpH0YH67ft5m48Pxi7TxWWTVixAhwtoMYXySxBifZm1H0NltRyJEiLDOhcqwSNYvoSYy3hgTK58xPl66MCvD7XqKtWkppmbD+RaYnR7Mb9fP25UijeMjdUTqRYgQYW2GMD5J4hmf54ZTUyGECBHWcvhUdzrl7u7UJBg/XD2XM28o769UxmSelT5PGZ8cuc/pKm+k/kL1YPLShdr4sJkx6Sq/f9/Ur+sSac2eW6jqKFto1YsQIcLaDGF8ksQYn6bPDoMgqC4olx8w3kqDH+ztj2+9mJaJlBW5vM/P3RAtmz3QSz9j5lYRI4yP3FfGZdn0btREpzdpVRwpP0wZn3nDVJrKH9xn4xNMs4yPrheCoNoVjE+SGONz1jM5QkMRIkRY6+EC+V05tGcNvXXnB9TwzveFPqC3FleJyJ00TObTedYX6/SZNE9+4koYH5m+QhoXfth5iC4/mD8iv7ec3uX0YRtFCpsZ0y7nD+4L4zOX901apN0dJZOpYcv+Yt/uN0KECGsjhPFJEmN8mjw9hM56eihChAjrSDgs+AWGwrR08OVbZT0AvZ9yc/mTWMIYyXROM3Eau3wOx4v0HFOfzu/b59Uh0w6nqXbfXcafDhNsWqX7oeIRIkRYOyGMT5J4xuepwXSmEEKECBEiRIgwc0IYnyQxxufMJwdREyGECBEiRIgQYeaEMD5J4hmfJwbSGU8MQIgQIUKECBFmUAjjkyTG+JzRpr88gQgRIkSIECHCzAlhfJLEGJ/TH+8HQRAEQVCGCcYnSYzxOa11X3EC+yJEiBAhQoQIMyiE8UkSz/g81keoN0KECBEiRIgwg0IYnyQxxufUR3vJE4gQIUKECBEizJwQxidJjPFp1LIHNX6kJ50qhBAhQoQIESKs+2Gjlt3olPu7wPgkw8GDB6lZm17U8MEu4kQK89OKDRBChAgRIkSIsK6HPHc3e7yXnMtrg4w0PocOHaKpRWvkqk/DB7rSKQ9/LR1ko5bdESJEiBAhQoR1MOS5uuGDXeXczXM4z+W1QUYan8OHD9P+/ftp0cpyuv7tUdTk0Z7KBEEQBEEQVCfFczXP2Tx38xzOc3ltkJHGhzHmZ8+ePbRz507asWMHBEEQBEF1VDxX85xdm6aHyVjjw/CJ46Uyvk/ID0lBEARBEFQ3xXM1z9m1aXqYjDY+AAAAAADJAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNYA4wMAAACArAHGBwAAAABZA4wPAAAAALIGGB8AAAAAZA0wPgAAAADIGmB8AAAAAJA1wPgAAAAAIGuA8QEAAABA1gDjAwAAAICsAcYHAAAAAFkDjA8AAAAAsgYYHwAAAABkDTA+AAAAAMgaYHxAxlNeXq63QCxwjuKD8wPCgPdJ/QDGJzTllNPyTDrzTEstc0QsSD9F1OHMlpST8OSq16SllzFsuWwieI6ykKIO3jUbfR5c76EzqUOR3k0HcdsPYr+H0/1+ri/XR20cR01eRzV5PPXlNU8vMD6h4DePGLgCo2FRBx7M8KaqPTCpJwbnSF6nMZ1MzRuf+O0HsScqTFp1B1xH9QkYn4TEf8OX57S0Vn44rxiocsxfeK5ByzGwyr8IO4gUhaxTlnfVofrjpcdZdXINuLJuLy5eXYn6GeZYmdhtRJ87kS4b9A/47vMRqDeqnN4uyqGWUWUN6hi9NHkskdchinK7LiXf+bHTg69LvLTgsST1OsQ7Ttc5cpGo/UTnMUh164tX3kXs/OqPE6Pga+s6P/p856Snf+72Q5wfGWFvM7HKqXjv5dXvNbMfuc4cdafx+kh93OI0U78q++lrIgy8XyPjWeC8pHxtJeqzIVBH5ETHrTtI7LaCr3O88x7mdbOx605cls9xNpg7GJ9EyIsqzhvLl64vhLgXgHpT+65peyILmCD/vqrffmNGBjUHwbp0edW27qvVETmweHUl6KcpH/dYE/XXaoPPoy9en9OkzodVTtdtl3Udn1fWGzzt82Vj9VWjJjWT30539StWmj6PVsXJvQ4qPfZxRr8GfsK1H7v+INWtL7q/cd/jCdvT+74TaBNsL939C7Yf5vzY7+HA2BKjnOyDSRPvj5bCSJg+cj61HaxblI95nCrdO85E10dS16nub+Cc+s5hsD7dH3WI0ceh4oPtJGg3bp+DuOuO/ToGiNtW9PHEPu8q3a4rbruOusOXrb/A+CQi7sXAqDeT+8JzYefX2G3Ea8+Zptr01ecRaEteRLq8ve1h50/QzzDHGqa/nEfs8AUYaYvb1hdrvPMR1QernNyO03/eDlzwclCM2ZaDYH2xysZLq/brkCg9wetU7fYDVLc+Z91x3uMJ2+MqxeDuLMy43kNp7J/A136o82O/h/V2onLcL/1+5vdxhw5iXybYfQvWneA4k7k+nOdFk/CcBV8DJtA/Xx3WcVSn3Xhlowj0McT7zkfctgLHE/e8J3jdorDqTrps/QXGJxEJ3xj2m8m+mGOR6M2n6jBLonY+dQFE0mzFmtjsQVeWNxU6LjDTtqorXD996QHC9Vcfr78h62KNfT78/WXscvH77zsXhoSvNaPqjRyLVV/U+VTES6v+65AoPXiOAlS7/QDVrC/ce8YiYXucRZQPvtYewfOT5v4JfO2HOj/2ezj2hBhdTvWxqIMow7czZP5IfHTdCY4zeM6s9GhUX8y5sIsmPmeqbHRzIo+O9L+GkeOId22FbdfEBdv3Y59rQcLXI0i8tgLHE30iRBn7NYz9ukUT/jXPJmB8EiGdvXnjOPCluy9gP+HffPJilxdK4os8Jt5fJoG+JbxwE/Uz8bGG669qx3/89sUaIXg+/P1l7HLx+594gAli+hkY/Oz64g3Asc5DtV+HROnBcxSg2u0HqGZ9Sb/HE7bHWcTrFnytPYLnJ839E/jaD3V+7Pew3k5Yjrc5L4fcVy4rQr7+vXLBuhMcZ/CcWenxSH7cUscR9RJ57QX7GjmOeHUn81pFjy1B7HMtSPh6xCa6rcDxxD3v8V+3aCJ1J1+2/gLjE4J4A6f/4opxAftI9s1nXUwpvUl1n+TDmlbZhEu1ifoZ4lhD9JfPHx+bCRX2xRrEHlzsbcYul6D/vB0YuORrGau/jvxR9cUrGyut2q9DovTgOQpQ7fYDVLe+eHW7SNgeVxn7+o0+P2nun8DXfqjzEz0hhjlOfv/K61y+T/m4RNmcDkfm+ojCOq8Jz5nK6+uLRPcxOHbJeH0c8epO+rWKd60E0kK8HvGx6wscT9zznuB1i8KqO+my9RcYn1CoN0xw8FTO3bypmFgXsI3KE6lL75s3X/CNKC8w04bOa18YMr/dh2jUhRPsf7Af+ni8uhP0U++HOtZY/fUNHsELVG+HOB8pDezOsvbxBXD2g/O725Pn3Gs8Xpo+R1ZHk3sdkj3OIInaT1R/kOrWp8vHes9Ekag9ve9r0CZ4ftLdv2D7Yc6P/Z4y24mPU/Ujcix8y6ulKBMpEqw7mfeNyh/zdfeVFSQ1bql0X1807rEr9nE4r61Y7cbtc5Dg+dB1W/2Kej1s4rZlH0+wneB59x+vJFi3j9jnShK3bP0FxicJ5Btbvgm1ot7ksS9gP+bNzBJvSvnxwsibL9iOvz59wdnl/Z2IRk/S0f0K1BV1PPH6GfZYY/dXHqdVQWTfvljjnw//wJjsRR44Pv7YaKyBS+DvB9cTaMMzQybdIl5atV6HxMfpnjxs4rUf5jwGqW59sd8zbuKfv+D7LEj0eyi9/YtuP9H5sd/Ddt3xjzPYd3Vcdr+DdSc6TpXHO8akro9A3cG+O47Ln1/jHLsC5yWZa8vXbqI++4m+jhK9Hn5itxU4nrjnPczrZmPXnbgs9zFiuuovMD7ZgBwYYl0YwIMHgQSDFwBZC66P2gHnPe3A+GQB/JdKNrj4pJB/6dh/Zam/3nCeABDg+qgdcN6PCDA+9RmzBIy/Fpx4S9daGFwAiIDro3bAea95YHwAAAAAkDXA+AAAAAAga4DxAQAAAEDWAOMDAAAAgKwBxgcAAAAAWQOMDwAAAACyBhgfAAAAAGQNMD4AAAAAyBpgfAAAAACQNcD4AAAAACBrgPEBAAAAQNYA4wMAAACArAHGB4AQbCzfRa99OpGuuucrOu8fn9cr8THxsW3YvFMfbTRVGzfQmjeep4VXN6eiC06lwnoiPhY+Jj62yvXr9NFGs77yMD1Ttp+azdlHJ80UmrG3fkgcCx8TH9vafYf00QJQv4HxASABm7bson8+2ZcuuKMbnXvrZ07zkMniY+Jju/2JvvJYg1Rt2kCL77iBll98OhU2b+w0EBktcUx8bKX/ul4ea5D1lYfo7/n7qGER0Yku85Dh4mPiY/ubOMb1MD8gC4DxASABr3acII3Bhf/8gs6/rZPTPGSy+Jj42PgY+ViDrHr9OVrBpueSM6nwwtPc5qGOqMAYs4tEf4Oy023xMYlj42PkYw3y1BIxGBYSNZq5h04OmIb6ID4mPjY+Rj5WAOo7MD4AJODKe74S5uALOu82t3GoFxLHxsfIxxqk+K/n04I6bniktKkpOK8h5Z1xDOWdKcSh3naaHkt8jHysQfhW0MmzKp2moT6Jj5GPFYD6DowPAAk412UU6qn4WIPEu73lMxNsji60V1nOoMKL0yCuR9TNbSUyLwXnNqQFVzenpY/dS0sfvUeELLHd6i7Zp4LmjZzlPIn6g7hMQn0WAPUdGB8AEuAyCPVZQYLmwDMfbHS0ySk4vxHln30i5Z11nF5pOZrmn34UzT/tz9XTqX8U+pOo+6SofkRJ9GP+6UfT0jYP6J5HOCy04MpzKP/ck91lLQVxmYP6LADqOzA+ACTAZQ7qs4JEmQNtePLPOUkaHDY6RZc1pUU3XkllD/2bVr/9Em346nPaMmwgbZ80liqmThSaoMOwmiDL7pg5lXbMnk5r2r1CBaLtuCs+ol98W6vs0Xvo8MGDdKiqig4dOCC3D+zcQUVXnC2Nj6kjVl1BXOagPguA+g6MDwAJcJmD+qwgnuHQhiev6fGU1+RYKm5xhTQkW8eNoD2lxXRwzx5dIn0c2LGd1rz7OhVd3kz2wYgNSpRx4b4J48O3thg2PIcP81oPib7tpuK/nEcLLohvelhBXOagPguA+g6MDwAJcJmD+qwg8hkfucJzslzdWXzXzbR1xGBhSip0DjeHDx2Sqy6HD6pVl0hodEDnjOZQZSVt6v4lLbjibHmri2+lSeOlzYnTuMQxPvt37aSJZxxLY479OeWdd0rsOoSCuMxBfRYA9R0YHwAS4DIH9VlB2FDMF4ZnwdUXUPmgPnT4wH6dQnRg9y7aOmqoXJVZ8VxrWvXy07Tx8w9p54zJIp8yNmyAjAFheJvjmN3FRbT6w3doXZdPaV3nT2jNp+/R2s/ep9K7bqFcYXjyzj6J8i84jfKF8WHDMv/chimt+FTt3EED/vwz6vnTb9M8YeCKhIniOn3ltYK4zEF9FgD1HRgfABLgMgc1JfsLEs8Xan57J6kLAuK0mvoyxSD8HM+yNg9Q5do1ct+Ylm1jhtGim66igmYnUN7pf6bc04+iGSf9hiYe/b809pif06RLz6bVOQNl3kOW+ZHGR5ufAzt3UtGLT1Kv7zagPj9oQH3/R6n/z75DA3//Ixr4ux/SwN/8D/X71fdp4G9/QJMb/VEaFjY9yRgfXvEZfMwvqO/Pv0e5wjxxfqz4uAVAfQfGB4AEuMxBTYnNzPnyO3U+p6Y3daTTrv2IGv39Azrlb0IiNNtn3dixxsxPkLUfveMZiEP7q+T2+i8+ogL+BFfTE2i6MBujT/gNDf7jT6i/MCd9f/3f1PsX/0W9ftyAev2wARW9/rwqK4wIGyCDXAnS2yWfvke9fvIt6i/MTn9hdvpps9NH1MMaKYzU3GYnypUap+lhJWF8TD1RdQgFcZmD+iwA6jswPgAkwGUOakJsYprf1omatPiEzrj+Y7ru4e7U+q3h9OJH4+Q3Kr/yyQR6+ePxcvvGR3p65sdVV3UUi0P71S2u7WNHUO5pf6Ipp/6Zhvzpp9T3l/+PegtDweovTM9gYV4GsYFhEyTMS7fvNaCF7V+TZdn8GDPCsPnhT14xcx+7j3r+dwNlekSdXO+QP/yYZggzw4akSBibAv2AtVOXnEl5TY6jpa3vk/UFjc+Q434lzVTu+Y2o6OIzYtYVxGUO6rMAqO/A+ACQAJc5SLfMSs/pwvD84/HeNHbGEtpWEftTUm91mkQn//V9edvLVV91FITNg1ydEeHBnTto/tUX0BBhTvpYKzLD/vy/NKXxn+SqTO45J8tncXh72ulH04hjfi5Xf9aNGynrM+bHmBK5L+rfv6OC8q67lGaddhTNPfskmtP0BPlczwJhRviTZWxqeEXH943Mts46juYd/0tafP8/Vb3CUJkVJn7Gh81Uj/9qQHMa/5HyzzxWfs+Qq54gLnNwJHXi9D0y5J+WaKhlfjrDpKVTANR3YHwASIDLHKRTEdPzEbV6LYd276nULYvJ+5AwGwcP0YEDQiLcV3lAbr/88ThqePX71FyUM3UE601VQcyqDBuVVX26Ue//0asywvjwCg8/d8O3jfj2kX3LiPelLj6Dppz0Wxp30Zm0f89uVZ82JMYAmVWfiklj5TNDvLpj6itoLiQM0JJ7/yFvY6lvZBZhUK3voyXC9Kzr+K6sy17xObB3D0375w006foraHGru2hZa5E/Rj1BXOYgkWxDkqo5MeXY6Jw4fS/9eeoe+qMQh8eJNGOAOJ/Kq35LjOPt8skKgPoOjA8ACXCZg3SLb1td8+A33irP/gP8PIx+CFhP3hyy6WFe+3QinXrtx/LHRdP9nE8QNim8KsNM+1cL6vWDBvI2Fhuf6acfLVdk+IFj+6FjWxy/8NIzaWbD39Gq3l/Leg7xR9utY5MPP2uDtfieW+XqTsEF+jkcYYD4e4P2rVgq8x5pXOYgkdiosAlRxsSdJ57YtMhVHVH2d1P2yB8R/XvePrq5cB9dk7+Pzp69l/4g4o+epgwQ6xQhNkRsjo7XpieVX5MHoL4D4wNAAlzmIF0699bP5XM9ja/5gHoNL5DtHRCmxzY7vOLDRoi1Z1+VDB99bQD9uFFrOv3ad6n57ek1P0G821xVVTTy7IbU56ffks/ujDvxN57pkQZFrs5EHjz2xYkwv9mJVPyv6+UD0qJCx6qPeoZoXa+vaf4ZRwvDw7+tJcpeKMqefSLtWbRAruLIB6x5NccpYagOKZNm6jXb8tYXr1w5y0UUxGUO4smsvrApOUYaE70io81IIhnTc5woy3ppaRUt3HWQDsrzJV4HcSyr9h6i3hsO0OW5e+n3U3bTn4TZYYN0+qw9dH9xJV0wdy8dK8qGbdMWAPUdGB8AEuAyB+nTZ3T2LZ/SxXd0puVrtsoJWk1w8Xn0lT7U4Hf/oYZ/eYsu+GdnOkfU4a4/eQUxZmDf5o2U0+jP1Pt/vy0fXjbfqRM0Ora8OM4nQjYwFTOnKiPCRkMbE0YaD7G/vXQRTT3tKCri8rKe0yiPjU9psS4XWS2KJVmfYzuMgrjMQSzxCgublj8IM/LE4kpqtaiSfjV5t1yN4bSwt5/Y8DQWhmnsFvMlj6pvbHpUF1U/t+0/LNu5pXAfdV+3n9btO0SFOw+KPuyhE9j4iLqSaZcFQH0HxgeABLjMQdp02+d05g2f0K2te4vrbL9vAjYaNqGQnnprAD319gB64s3+Mjz7hrfpf056iE6+6q2aX/HRhmTPhvWUc8ofqddPv0VjT/yNfAaHV3t8BschL+0i/hHRP9OqN1+Q0zbX61v10dtVO3fS6KYnUu5Zx8vbXPyMD//G1t6li2V6tDWpWVzmIK6EyeCVnkW7DtKuA4epRf4++u2UPcL8aCPCJiSGETFpvFo0crMyPfvFeTGGx7wnDgkdOGSfCbW9ueoQnTlrD/1WmK3GM5NbaTICoL4D4wNAAlzmIF2SDzVf9xH955n+si2e0A4d5oeZldkYN62Yvn/iQ/SdY+6jbwt955j7ZfjjRq3oZ6c9Qide8cYRudXFVFVU0PAzjqVeP2kgv7uHjU+81Z6g5IrPOSdRcYvL5e968VTNx2vg42X4dtTYK8+jCcf+nBZccqZ3K213cSEd2rtXfjT9wO7ddGCPltjmOKmdO+SDzIwxCWZbpWvt2uWV9erRCuIyB/F0zNQ9dPHcvdKEMBX7D8vbT2xG+NkbXv3hfGxKgisx/KzO70W+ViX8gLsyN/YxeJIx6vzxCiGH2/YfoqcWV9KTQt+sP0hN5+yTK0emLbudeAKgvgPjA0ACXOYgXWr+j07yO3vufGaAnNDkJCYmu6r96q/9Tr2mUoOj7qU/nPMU/abpE/RrIQ5/2eRx+mnjVnTSlW/W/K0uM9kKjW5+OvX+cQOak+jLBF3SefkTWrsXFHDF3mqSbEcbLGbidZfT4F/8l1wl4jL5zRtR0V/Pp0XXXULjm5xAg0/8LeU0/IPU0JN/T4OP+SUNPu7X1O+XP5Kf3mLk8zy6bjY9wxofRQP//L806Jhf0JDjf+OVNfUYBXGZg1ji21xHCbNxdd4+2n1QnTM+TvEfdVqznxrN2EO/E8aGV2HsT2XJ8hwK8WrP+K3cdxLGRz1fZY7DYMeZcM/BQ7RLtMncm1dB/zNwBR07cbus22WyYgmA+g6MDwAJcJmDdIlXfNj48IoPT2D8lzuH/AAzh136TqdvHX0f/fqsNvR/pz9GPz+jtSc2PrziU+PGh82YMCjMjDtvpj7C+Mzjn32wVnxCS5Th79spH9hLHp/5PS/GGB+OnySMD7cz/zx9K+38RvJHUovOP4WG/+kn8nZb3//7rtLPv0v9+MsTf/V96vlfDeRH1pmD+/d7t9L4e3wG/ul/qbco1+8X35P5TVmvHq0gLnMQS9L4TN1NV87fRzsOKBPC5sWsbJXsPkiPlFTSCcKE8MPI/ACy+VSWeqB5N505ay+t3acMj70iFgs7X0XVAfrruBXU4NO59JO+S+jkmcr0nCDqdfXXJQDqOzA+ACTAZQ6qI3Nbij/NdcHtX1CTGz6hu54bINuyjQ/Ttd90+s6x99PvznmKGl71FjW76WOppjd+TGe1+IjOvrmjr850KAibB7N6UvrZB9Trv9n4xP+F81gquOgM+eOjaz98R9Z9WJgTrpcxk/fBykoae2kz+aWHs5ueoMrp1SL+fp9hR/2MerFJ0d/ubNTv1/9D3b/fgCbecKWqx6qbV3zMT1Zw3j5awTpYQVzmIJ7Y1PDKzvI9B+UxmedzDspncpTydx6kZ5dU0jlz9tIfhQH6vdBRU/fQMcI0nTN7r2eauP/mGGLBrw/nWbO7ik4bXEoNPptHP+5TKvty/NRddNyUnXIbKz4AKGB8AEiAyxykKmNQmt3UUX5LMz/YfOJV79I/Hu8j21K3ug55t7o+7zmFGvzin/TrZs9QkxYd5eoQ65xb+EsP1bc2p9P0sILwpMrGh9laMF8YjB/Q7LOOVz8hkeyKDz/gfNqfaeUrz8j6zAPOcoIXIVNVsY2GnvQ76vOz7/ieJTIPUo8/6bfym6JHHP1/Po089peU88v/oTn/vF7WE7zVZYwP5x117C/k73+xgvUEcZmDWOJPUMnndKbspk9WVcny/HCy6QcbIWPw2ABtrjxEQzcdoDaLK+lveaIONidCq/eqc2FWrGLB9R7Qt7fGrt1BDb6YT//1TSH9KmcN/bhfGf2o7xJpfpJZ9QGgvgPjA0ACXOYgVfGtrVOv/ZAef2sEzcpfRRNnLaUJQrkL18q2pAHgyVFPeCvWbKGBo+bTmGmLaPLcZTL/zPyVdP+Lg+RD0Vwf11uTKz6M7Jfok3zw+IrzaMqJv6YF/HtX1nf4hBLf6jr9aFr+3GOqXtsU6Od9tuTNo76/+C+5+jLttKPUT1boFR8WGyGnuD9NjqPlMX6ryxifPNHnhSIvl+G6g/UEcZmDWDJfGMgPFfMKzoztauWODa1nd8SGWQkSeypSsEcYmLI9h2hexUHaba34JGK/fgB69Jod9K0v8+i7XxUIAzSPvvt1IR2tn/Fh04MVHwAUMD4AJMBlDlIV/7bWyX99jz74ZoauPTX4py1OPULGxzMmetVncZfPaPQff6w+caVNT2jzI4xF3ulH0Yq2rWVdxviwzBcYLvrgHerJP4vx6/+Rv/XFZsSu3zZBPol880X+skfvkfXEWvGZd87Jsh7zabGggrjMQTzxczt8C+vBRZV0Y/4eyt1WqY5PH6eSOq9894sN0AGOSAGuw6z49Fm2jRp8Pp++91Ue/U/PRXTMpAo6eea+pEwPC4D6DowPAAkIGoPqiH9bi39jq32XqXIVoLLqgPdJLiYyMap9uTJw8JD+vS717b3bd+ylFq16UtObOkrjU9O3uhjZp0NqBWXf1i00sflplH/2SdJssFnwjE0CFehbXatef07Va251scT2wSp+vqcp9f7xt+Tvgc1qcpxnfEw7ZjtKbKrOONr7va1YKz655zb01RlUEJc5iCde7Wk6ew/tOHCItlQdopId6rfX7NfVYPZNmlkJsuPjwefOfOT9vYWbqcGn8+gHPRbK53qM6TH9wooPAAoYHwAS4DIHqco2PjxZ7d+vJmd7oou1z+aHw9Ubtguz01E+4Gw+zVXTt7okom2z6rO0y2c08+Tf+r5nJ2hyXOKHm9n4rP24nTyWQ/oBZLPas7x3N+r9Q/UjqPwDqPxL77JcmPqFqeJfV0/G+LjqCeIyB7Fkvrn5z1N302x9m4uJb19SR74v2DSK8L7pq+WDzT/qXeKt8thy9dclAOo7MD4AJMBlDlLVBbd1SmB8ZGCFEeNjvtRw2twy+knjx+iXTdrQKX99R36BYU1+nN3AXZIrM0L79+yhgtuvpXz+MVF+Bkc/eBxPymioj7NvGztC1XdQ/X4Ws2v5Mvn9On3/73vyt8CG/vEnnqkyDzbHlVzxOYbKHr1bfkz+UGWl/H0xNleV27bSoKN/rowPfyy+howPq6EwGfxwc7vl/HDzYaoS54tfUPM6pgtTn6rzMDUZWkoNOuXSD3qVeGYn7APNtgCo78D4AJAAlzlIVc1v/1w+4/PuV9NU5VHzYGQii8XXA2bQf5/4EP3izNZ06t87yE931fQXGJqQt8x3+uwqLaaCS8+St7zMFw2q39aKljQZwmzwd/EUX3cJHdixQ9YhV3xEWFWxncZddjb1+pH65ffewqDwp7eCt7niim+jnX40LX3iQVl3EP6Swz7/990aXfGREoaDn/NpNnsvbajUn1TTq3WMPI96u7rwR+S5psUV++hH3YqoQef59KM+/P09yT/bYwRAfQfGB4AEuMxBdXTWjR2pRase9PwHY+mR1wbTDQ90pOc7DJFt8bM+PCke0OZi7LRiuubeT+jfbbrS7Y91pn8/0ZXOvv4t+umpj8gVnyY3fCjrrNGHm61bRmbSNuZnx5zpVHjxGZTH37cjQjYOtqHwjJAwJWx8chv9gTb36yHLHqrSH/fetZOm3HQ19fyBMD2/+wH1++X/k7e55jY7UZYNtdrDYmMlyiy65Wra1KMLrev6GRV/8A6VfNiOFrZ/jQb84cfy02I1veKjbnftkb+Y/s+ifbRd/3QFky7DY16H/dpQfbqonBp0mk/f6ZJH/ztwOTWcVZmS6WEBUN+B8QEgAS5zkKqMQTnrxk/ojOs/oeOveIsa/P4/dM4Nb8u2+DkefmDVfI/PZz0mU4Nf3kE/atiS/vvEh+Xvdv2k8SPym5t/ddYTR+QLDBlzi8ugzI++RVUwn4pvuFw+u8M/R1F4IZscIW122EzkNTlW3uLiLy7kesztrb0b1tOEqy9Upue3P5CGx17tsT95FTQoUeI8okze2SdRXuM/0ozjf0nffLsBdf9uA+rxvQbS9PT71fcpV6TX6IqP0InThfkRxuOoaXvprPHrqdOiTbR+j/9HaKvL4cPiPOq6mo9YQg2+yKNvd5lPvx6+Tq74mNtdrv7FEwD1HRgfABLgMgfVEZsU1oX/6kxnXveuMDMP0GX/fE+2dUj/vpP3zc19p9N3+Zubz35S/j4Xi29x/e+pj9Dvz33WV1+wnVQVZIVeoWHkR8QPib7pCdes/OzftoXWvPs6LbjyXGlw8pqwlNlhg1H20B1UMXWizMvP9fC0X7lyGU268Azq8d+80vNDaXr6CNPDX05ozE7o1R4tVe5UKrrkTPnt0v1/+0Ma8PsfC/1Imh5pfBI8MB3EZQ4SSxgOYTqOEcbnwcKd1DZ3HY1cvUOeM6NUMeXl73iJ/cnrd9F3vhSmp2sBfatLHv15/FbP+Lj7Fl8A1HdgfABIgMscVFf8TA4/m3PGde/RD09pRVfc8aFsy9zqMsaHf6uLf6T0t82epN80e8oTr/Ycd+mrXl01+YxPv599l+a2eZD2bdqoY8Tky6s2bGCE8Tm0v0pOwEzVhvW0fdJY2tSzK23s1pm2jh5Ge5cu0als7JTpqVq9kvL/ch71/UlkpafPL/6LBguDMp9/B0wYkKRWeyxxOV7RmdP0BLl6ZH6KgutnzdMrPrFMVRCXOQgj/nTXH6bspkdL1S09JtE3MSfCGCauRz7fI3YvGbVUfmPzd7vm0fd7FCf9Tc1BAVDfgfEBIAEuc1Bd2Ss0jf/+Pt3xVF/Zlrl14RmffsL4/OluOvbil6S54Y+w8+2tZjd9IvfNak9NrvjMbHIc9fpBAxp6yp9oYbvXqGLRQp2SHGq1SBimffuo7L7baPhv/5v66o+tsyEZ8ocfS1PC5sOYnqApCSNTjuvgn9YIyhieml3xEeIVFyH+aPugjerj+rxKw9+74/8yQ2Mb42NyyffHQWWgvlqyRZke/rbmL+fTzwatqNaDzSwA6jswPgAkwGUO0iE2K/xDpfzbW3c+q3+k1LXi88e76LhLXpYfW0+nwYmlIPyzDjOE+enzs29Tj+83oIF/+ilN/NvFlPfc47SsexdaP2E0bZk3m7bMn0ubp06g7TMmy4+Sy9UgbXbs53o2dP+ShvNtp99EVnr49lZwpYe3q2t+eGUnKDvdpSAucxBG3s9XCANyyow9NFSbn1SQ5kiLzRPDn+T6efdC+nYX9TMV3+6a793mSnW1hwVAfQfGB4AEuMxBdWUMzPlC/Jtb/3mmv2wr3oqP+di6WeExddjb6VAQNiJsGHjlZ9AffkK9/++71OuHDeQXDUr9SOsnDahbgwY0985bxDHwrbDIp8HktzPrY5tyw5XUU5Qb8NsfyFtQ/EOhxoiY1RhWdU0Ph7Fk5wsqiMschJVcdRE6UZiRXwzfQLdMXE7TNu6mtburaGfgO5xiYaeblZ6tlQfoDP4l9i/m0/e+Vqs9/IOkpk2jYH/CCID6DowPAAlwmYN0KWrFR0+EQeNTmys+bBCM+eEHg0cf/yv5XE7fX/23+oZlfkZHiB8g7vOz79LqYYNkObPCw5hnW3jlZ9xfmlOfn35bfkmheZCZDYd9CyqWKTkSCuIyB7EUNBv8nM9J03dTo5kibcpOatA5nxp0nEsnDSyhhdv2yteav3nZhTFFbHvke0Ln2151gC4ZUSa/rPB7eqWHddSEbdVe7WEBUN+B8QEgAS5zkC5lgvExhsCYETZA/OAwf+Scv12Zb1fxp6X4llWvn32bKhaXyFsy5re9GA6NESp45Rnq9p0GNPhPP/U902O3UZsK4jIHLplbWycI83PMtD3yN7s4/PPUPfTbybvpD9P20VFjNtKN45ZR3pY98hyZW5s2vC/F20L8njC3t8p2VFKzHPUNzbzS8x39bM/Ph6zyPduT6moPC4D6DowPAAlwmYN0KVNWfIwpMKsxbH742R/eZvMy44xjaErjP9FEYYZ2lZWqiVtM1mZK531zu6tyazmNuuAMGv2HH9HCy5pK02PasNuqLQVxmYNYYtPDqzvN5+6ls2bvpQvn7aUbC/ZRm9JK6rp2Py3eE1nd4XOhrI1ldqRULH9qi2UYtGI7/b7XAnV7SxgeY3p+0LvUMzvG8MD4ABAbGB8AEuAyB+lSpqz4GMNjzIG9b0zQgovPoKJzT6aKaRPlMcgvONTHw6g4dVy7Viyn/Bsul7+mzr/1Zeo09demgrjMQSwdLwzHGbP2Uv8N+2m/NC3imPXxG/jX19UvsPsNj1rZUbLLLNi2l/4xaQU16JwnjE5eZKWnc678+Dr/Eju3nY7VHhYA9R0YHwAS4DIH6VIm3epiGcPjlDBA84WRWfXas7Kc+akLIxknZMzPga1baNmTD9P8049SP20hynM9dnu1oSAuc+CS9ykufZvrkZJKmrn9gL5NxUduS/wvzknQFEU4TDM37Za/uP6Db4TJ6ZQrzE6+/PSWbXqOnbxDtlmdj68HBUB9B8YHgAS4zEG6lGnGJ0rNrW02LiJk7V5UJMsak8NI86OPT37iS8ev/+Ij+Rtb+fxxdn37zNfGEVYQlzmIJdt8/H7KHjph5j76e0EVvbXiAI3acogW7j5Mm6sOU6V1C4tPxI6qA/Lj6aPX7KA3CjbQOcMX03e75lODz3OpgQj/S6/y8EPM5hNc/EWF3I5tetJhfgCo78D4AJAAlzlIlzLx4Wb5+1t8e8oWp5/XUJiXkym30R+p9F/X04GdO7zv8DFI86Ox07ZPGE1FlzeVBqi2zU8QlzmIJ898CEPyh9Gb6OcjNtCPctbTDwavoV8OWk6/71dCx/ZfRCcPKqFThE4cWEJ/7ldMP+tRJG9lSbPTmX+CQhke8x09bHi++3Uh/WrYWq+ddJseFgD1HRgfABLgMgfpEn+PDxsf/h6fAwcPUZUwPPv3H6C9+6rogNj+os9UaXz4e3xq1fgYsyPC/HNOVr/FdeYxlHcG62gqOL8RLby6OS26+S9U+p8WVPLPa2nL2BFqdYe/xFAbHg6NzL75tNfuhYW08JqL1S+916L5CeIyB/HEBsToNyPW0399IwzNF3PpW52FoRHmRZqbL4WR4Wd2jHi/i7qV9f+EufmeEG/zb29xGV7t+emAZXTMpArvd7hso2NvV1cA1HdgfABIgMscpEu84sNfYHh324G6NT+9cuZQgz/U7jc3swnJP/skaXDymx5PC6+7hMpa3UlrP3qHygf1ph3TJwnTUkD7Vq2g/du30aGqyG9TGVwrPz7zs199q/G+FUvlL73ns/m5sHbMTxCXOUgkY0wazqqUqzJsgPjTV98TJoi/aZl/Rf07IvxO14g43hgdFq/y/L/uC+n/Bq+koydul4bHrju4nS4BUN+B8QEgAS5zkE6dffOndMVdXeiZd0dTm7eH078e70K3P/alDC+8tT398OT/396dB1dVnnEcvyYDSgGVJYY0KPuihCVAEFFAsHRkqCOC2A2hSB0YQFuhTMepWAexjiMutfJPoQVlwqISoWWxRZ2IGwjIEkICCAMJIEiRnRhw5un7vPee5Hg89NZ4gcl5v5+Z39xg7j03zz/Ob96zvBOlVf9pl6346OpO8fBBUv7sdDnx0RqpPHI48ZtwelHz12fOyPkTx+Xc8WNSefJE4jfxa378hecb5ed8vPyc3bNLin7Sz5StjvHrhi5x+QkKKwf/K/4i4v2sBUhfdcUme9Uh+9wdXcHRMlQvf7vNDxaUSINFO6TRkj32dFaL1f+x1/Fo4Qmu8vh/TnWAqKP4AEmElYNUxSsyN4+YJV3vfkk63jlT6rQbL3XampjXBp0mSZPc30iLvo/ZLSsuR/HRHdb1ep0wusJzausmObJkgZQ/N0P2TBkvn40bKTt/NVxKfz5EdvziLikcmCcbpj4s5xLHCDv15f3snfY6tXlD/HTXrTnxO74uYYLCykGyhJUUjRYYLUFemblQ9D1eWfIfy/u39/PFCBB1FB8gibBykMpomdH0G/lX6X3fy5KZN0Wu6zm56rVR14dt8dEVH92rK+wYqcyFeAXl/PFjcnR5geydNllKfzpYNvfpJBt7tJX1XW6QtZ2vlw86ZUthxyx5t0Mzk0z5Z/MGdnPTVX06y+E179pj6Gmv6ju+wsvPF4vn2+uI7PVFl3DVJyisHHyXeEXFKzDfNf7P+o97sQJEHcUHSCKsHKQ63kpOr3v/YsqOFp7qNO3+iLTq//hlW/Hxrtn5+vQpOfS3WbJ96EBZn9tK3muXIavbZsiK1k1kWYtrpeD6q+2eXbp/l+7Dtei6K2VhRl37qv8tv2FMFpt/Fz//tD2eip/6ihcer/zYJzxrMTpXKaWjh8Uvdu6XuFX+EhSgoLByUJMES0yy+N/rP87FDhB1FB8gCa9sXMzS4f8OXdXpfd8s++r/2f++VMf//WEqSrbJ9p8NkcI2TWRFy0ZS0LyhKTP1banRPboWNq1jX3W3dd23qyC7gfzDlKHlrRrb3de1HK0wJWmJKUbz68bk/V/eIxVfxK8V8lZ4vPLjX/U5vHBe/AGHekdZSElJVbxCpa9B/hISLAlRiX9GIOooPkASF6tsBJPsey7V3xF0fN2HUtijrSxpki6LTdnR1RwtN1pyNFpmtNjopqUf5LaWT27uKJ/emvPtPbhMNvTpJKvaZ8r8K2OysneOHC8pst9ht7cwvFUf76nPX27dJOtu6WQ/eylWezRBUS48YQGijuIDJKGFw5+wsvB94x03+F3++N+XygS/J2hFl5ay4NqYPV2lO7F7hUdXc97v1ko2mjKjpUT369J9uzT+IqG/8+L9tzXd28iiq2NS0DZLjphipbxrfuyqT+LJxufOnpV/35IjG/PaV93h5T9OKuL/+zRBWnz8CSsLtTnB+YCoo/gASdw84uWqguB/jUKCM+msQfnXptlrd7T06OmsZTdcIx/3bGdLg1dyguUhLP736efW98mRAlOg3ux4vZwu22sKT/UFz94pL7V6cF95p12GFA3oYVeRvMKSivj/Ln3VEhfkbQLqlR7vNQoJzqSzAlFH8QGSuOnOp6vuqNKCEMXobDpjJzNr0Oz6dWRJVj1Z2LSu/Kt9ZlVJ8E5l1SS2wPQ1hWNAd1lmytRH4+63e3d5z/nRC5y9n9eMvEeWmvds1Qcpms99n++9UPSYumJV2KVFfGifZssPVD2IUAtCFKOz6YxZZlYg6ig+QBJ6Z1Xu3c9Lv5Gz7Z1VUUz/++fYGTPzfpeYutqfYjGZe3W6vH1jlmwzRcVb5fFOa9U09himbBTd3k0Kc1vLyV074l+YWOnxXj8ac5+8dk1MPr0tfjotFd8dzLaBPewqll6vFKT7Y+nDBHPWVoY+cycK6Wxm0xn1ydJA1FF8gCTa3P4HUwimSodBM6T70Bckb/hL0nPYnyMRnUULj86W2WuqtDWzBj3buLHMTEuT1R2yZG1ee3vxcsrSq4M95fXxTdlSvuhV+ercOak4c0YqKipsvqqslLcG95e/14vJe91ayfreN8o685nQY9UgejwtPO+Y7y/Iri9LzYxBjfO3mkJQJBlL90nLt4/apy/rFhJRiM6ihSdjWZnUebVImuTHLzYHooziAyQxYVq+ZOQ9ah8omNH9EftcHS9Ncn9bK+OfQZOZN9nOqLMGLR01SvIbpMsSvYU9cTeXvvrv7Kpp7DGa1ZOF9WPy7kMPys595v8xxcVSsn27lJTukOItW+S5jKbyeCwmcxqmyeuZ8dvnw471XeL9/fHUk9d+WF9WNrtKPpn0QGLqaqPX7JO0xbul7lzdU2uT3UPLi+6tVRvjn0Fn0tnSFu22swJRR/EBkjjw+Zdy24hn5Lpej9qSkNHDlISopOdkM9NkO9ut9z4jBw8dS0xd7UR5uazqmyursuqZ4nGVvJG4uytlMaVjUcOYvDNulOzaVyalJSW2+HxmvvfD+a/IU+npMt0Un9n10+y1RlpWQo9Tk+gs5ngrzXHf6pcrZw/uT0xdrfxUpXR+s1TSF++RtLmb7a7pult6FKKz6Ew6W46Zcf/p+H5pQJRRfID/Q7kpPxOmLbCnvUILRC1OuwGP2dn2HTiamPbbzuwvk3WTxsrS9s3kDVsaUlh+tPg0iEnhlEmyq6xcSnW1p7hYdh84IAXjHpQ/mtIz44o0U3yuMKUrlcUnPsOyjtnyiZlN7yy7kDJTfkavKbOngtLnbYlE+fFmyFhQZGfbe/KrxLRAtFF8AACAMyg+AADAGRQfAADgDIoPAABwBsUHAAA4g+IDAACcQfEBAADOoPgAAABnUHwAAIAzKD4AAMAZFB8AAOAMig8AAHAGxQcAADiD4gMAAJxB8QEAAM6g+AAAAGdQfAAAgDMoPgAAwBkUHwAA4AyKDwAAcAbFBwAAOIPiAwAAnEHxAQAAzqD4AAAAZ1B8AACAMyg+AADAGRQfAADgDIoPAABwBsUHAAA4g+IDAACcQfEBAADOoPgAAABnUHwAAIAzKD4AAMAZFB8AAOAMig8AAHAGxQcAADiD4gMAAJxB8QEAAM6g+AAAAGdQfAAAgDMoPgAAwBkUHwAA4AyKDwAAcAbFBwAAOIPiAwAAnEHxAQAAzqD4AAAAZ1B8AACAMyg+AADAGRQfAADgDIoPAABwBsUHAAA4g+IDAACcQfEBAADOoPgAAABnUHwAAIAzKD4AAMAZFB8AAOAMig8AAHAGxQcAADiD4gMAAJxB8QEAAM6g+AAAAGdQfAAAgDMoPgAAwBkUHwAA4AyKDwAAcEaNis/ajVvl9aXL7YcJIYQQQmpTtMNol/F3m28UnzNnK6Rkd1nVLzcV77RNST+orYkQQgghpDZEu4t2GO0yXq8pNR3ntOk6tvh069pV5s57RXaXHax6Q9GOPfYD2pb0w4QQQgghtSHaXbTDaJfxeo12HO062nlio0aOlM6du8jR4yer3kAIIYQQEpVox9Gu8+NBgyT20MSJdulnnmlCBw8fDf0AIYQQQkhtjHYb7TjadYYPGyaxp558Un49dqxkZze3v9BWtKf889APE0IIIYTUhmiX0U6j3UY7zl1Dhogu9sReevFFeWLaNFt+tA3pUtDcefPs1c+EEEIIIbUx2mW002i30dIzYfx4+f3UqRKbO2eOvDBzpi0/D4wZI/cOH27fRAghhBBSm/OjO+6Qe4YOlUkTJtjSM/2JJ+S/lsUg7OcSdlwAAAAASUVORK5CYII=\">\n<p>… The only drawback for me was the lack of a \"real\" backend. So I took the seed project and added database access via Slick. If you're interested, you can have a look at it over at <a href=\"https://github.com/sne11ius/play-silhouette-slick-seed\">github</a>.</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1404139882185,"dateCreated":1404139882185,"dateUpdated":1404139882185,"comments":[]},{"id":"53a37cd9975a48b447278ce0","title":"grunt-line-number-plugin","body":"If you have a grunt project and want to insert line number information into your files, you can now use the <a href=\"https://www.npmjs.org/package/grunt-line-number-plugin\">grunt-line-number-plugin</a>.\nThis will turn this:\n<pre class=\"prettyprint linenums\">var myFunc = function myFunc() {\n // some code...\n doLog('Error in line __LINE__ D:');\n // moar code...\n}</pre>\nInto this:\n<pre class=\"prettyprint linenums\">var myFunc = function myFunc() {\n // some code...\n doLog('Error in line 3 D:');\n // moar code...\n}</pre>\nThis might not make sense, since every decent js console implementation will tell you the line number right away. But a \"real\" console is not always available…","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1403223257305,"dateCreated":1403223257305,"dateUpdated":1403223257305,"comments":[]},{"id":"539ada9d975a48b447276baf","title":"Mein neues Statistik-Tool: JavaScript","body":"<p>Ich habe mich heute gefragt, welche Themen auf der JAX2014 dominiert haben…</p>\n<p>Das müsste man doch anhand der Vortragstitel herausebekommen, dachte ich mir. Also flugs <a href=\"http://jax.de/2014/sessions\">hingesurft</a> und fleissig alle Titel gelesen und die Stichwörter notiert. — Ja nee, geht das nicht einfacher? Ja, mit ein bisschen JS-Gefummel:</p>\n<pre class=\"prettyprint linenums\">var tags = ['scala', 'groovy', 'javafx', '8' /* We can deduce from the context, that these matches will be java 8 ;) */, 'xml']; /* And some more ;) */\n\nvar count = function(tag) {\n return jQuery.grep(\n jQuery.map(jQuery('h1 a'), function(el) {\n return jQuery(el).text();\n }), function(headline) {\n return (-1 !== headline.toLowerCase().indexOf(tag));\n }\n ).length;\n};\n\nJSON.stringify(\n jQuery.map(tags, function(keyword) {\n return { keyword: keyword, count: count(keyword) };\n }),\n null, 4\n)</pre>\n<p>Ergebnis:</p>\n<pre class=\"prettyprint linenums\">[\n {\n \"keyword\": \"scala\",\n \"count\": 7\n },\n {\n \"keyword\": \"groovy\",\n \"count\": 2\n },\n {\n \"keyword\": \"javafx\",\n \"count\": 6\n },\n {\n \"keyword\": \"8\",\n \"count\": 11\n },\n {\n \"keyword\": \"xml\",\n \"count\": 0\n }\n]</pre>\n<p>Ich amüsierte mich jedenfalls. Das Ergebnis sieht so aus:</p>\n<iframe height=581 width=985 src=\"//docs.google.com/spreadsheets/d/1QdqFEsZ5TnBvdB48Qy_gOzKsx0qs_5__-HQ8R0ce8xM/gviz/chartiframe?oid=538401715\" seamless frameborder=0 scrolling=no></iframe>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1402657437061,"dateCreated":1402657437061,"dateUpdated":1402657437061,"comments":[]},{"id":"5375050e975a48b44726d81d","title":"<a href=\"http://jax.de/2014/\">#jaxcon</a> recap #3","body":"<h3><a href=\"http://jax.de/2014/sessions/accelerating-agile-hyperperforming-without-hype\">Accelerating Agile: Hyperperforming without the Hype</a></h3>\n<p>Ich hatte das Gefühl, dass der Refernt sich erst kurz warmreden musste\n— aber dann lieferte er hervoragend ab.</p>\n<p>Der Talk war großartig. Die angesprochenen Punkte kann man –\nlangsam nervt es mich, das immer wieder zu schreiben – natürlich\nnicht überall so umsetzen. Trotzdem hier meine Notizen:\n<ul>\n<li>Really learn the domain and watch your users using your software</li>\n<li>Prioritize risky over valuable. — Nicht unbedingt die für den PO\nwichtigsten Features zuerst umsetzen, sondern diejenigen, die am schnellsten zu\nProblemen in der Software(architektur) führen.</li>\n<li>Iteriere deine Architektur — sie kann und wird nicht von Anfang an\nrichtig sein</li>\n<li>Plan as you need — besonders in der Anfangsphase eines Projektes ist\nes nicht sinnvoll, zu lange im Voraus zu planen. Da man den Lösungsraum\nerst erforscht, kann man eh noch nicht wirklich sagen, was man eine Woche\nspäter tun wird. Später können und müssen die Zyklen länger werden.\n</li>\n<li>Reset the board. Stories, die über viele Wochen oder gar Monate nicht\numgesetzt werden, sind offensichtlich nicht wichtig genug.</li>\n<li>Try different things. Echt jetzt, wer die ausgetretenen Pfade nie\nverlässt, wird sich nicht weiter entwickeln. Probier mal eine neue Sprache,\nein neues Framework, ein neues Paradigma…</li>\n<li>Get feedback as fast as you can. Und zwar wirklich schnell. Bspw. mit Zettel & Stift oder GUI-Dummies.</li>\n<li>Build small, <strong>seperate</strong> pieces. DRY is the enemy of decoupled.\nSorge dafür, das deine Komponenten wirklich unabhängig voneinander und von\nanderen Komponenten sind. Überlege dir, ob du die eine Bibliothek wirklich\nbrauchst. Überlege dir, ob es wirklich sinnvoll ist, gemeinsam genutzten Code\nin eine Bibliothek auszulagern. Und ja, hiermit sind wirklich eher unabhängige\nSysteme gemeint und wir sind wieder bei (micro-)services.</li>\n<li>Deploy things fast. Treat infrastructure as code. Make your components self\ndescribing.</li>\n<li>Prefer simple over easy. Du musst nicht für jede kleine Aufgabe dein\nZauberschwert rausholen. Statt eines dicken application servers reicht vielleicht\nauch <a href=\"https://github.com/webbit/webbit\">webbit</a>? Statt eines komplexen\nDI-Frameworks reicht vielleicht ja <a href=\"https://github.com/mfoemmel/fig\">fig</a>?</li>\n<li>Kleines goodie am Rande: <a href=\"https://code.google.com/p/jcompilo/\">jcompilo</a>, ein schneller Java Compiler</li>\n<li>Make tradeoffs: Build vs. Buy vs. OSS. And stop using logging frameworks.</li>\n<li>Share your knowledge. Code reviews machen. Zusammen Mittagessen und dabei\netwas spannendes erzählen.</li>\n<li>Gutes onboarding: neuen Kollegen ihre Wunsch-Hardware kaufen. Entwickler glücklich zu machen ist nicht teuer.</li>\n<li>Fail fast.</li>\n</ul>\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/html5-css3-und-javascript-eine-alternative-zu-jsf\">HTML5, CSS3 und Javascript - Eine Alternative zu JSF?</a></h3>\n<p>\nDer Talk war inhaltlich und von der Form her katastrophal. Noch die Erinnerung\nmacht mich richtig wütend. Wie kann man sich erdreisten, mit so einer\nPerformance auf die JAX zu kommen?<br>\nTrotzdem zwei Notizen:\n<ul>\n<li>\n<a href=\"https://github.com/HalBuilder\">HalBuilder HAL API for the JVM</a>\n</li>\n<li>\nDie kreativste Publikumsfrage dieser JAX kam auch in diesem Talk: \"Könnte der Browser\nnicht eine Kerberos-Authentifizierung gegen das REST-Backend machen?\"\n</li>\n</ul>\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/aktuelle-herausforderungen-bei-enterprise-uis\">Aktuelle Herausforderungen bei Enterprise UIs</a></h3>\n<p>\nDie 00er-Jahren haben angerufen, sie wollen ihre Keynote über ein geiles\nresponsives GUI-Framework auf Basis von JQuery zurück…<br>\nDavon abgesehen, sah das eigentlich ganz gut aus, und man sollte vielleicht\ntrotz aller Vorurteile einen Blick riskieren: <a href=\"http://sap.github.io/openui5/\">OpenUI5</a>\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/devops-maturity-curve-where-are-you\">The DevOps Maturity Curve - where are you?</a></h3>\n<p>Hier hatte ich einen kleinen Durchhänger. Der Talk war ganz ok…</p>\n<h3><a href=\"http://jax.de/2014/sessions/wider-den-innovationsstau-eclipse-und-die-intelligenz-der-massen\">Wider den Innovationsstau: Eclipse und die Intelligenz der Massen</a></h3>\n<p>Kurz gesagt: unbedingt <a href=\"https://marketplace.eclipse.org/content/code-trails\">Code Trails</a> und Konsorten ausprobieren!</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1400177934094,"dateCreated":1400177934094,"dateUpdated":1400177934094,"comments":[]},{"id":"5373b6ae975a903df0edd63f","title":"<a href=\"http://jax.de/2014/\">#jaxcon</a> recap #2","body":"<p>\nHier die kurze Zusammenfassung meines zweiten Tages auf der JAX. Heute besonders\nungefiltert™.\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/continuous-delivery-architects\">Continuous Delivery for Architects</a></h3>\n<p>\nWie kann man durch die Softwarearchitektur den Continuous Delivery-Prozess\nunterstützen? Der Vortrag war gut. Allerdings stammen viele der Ansätze\naus einem deutlich komplexeren Umfeld als ich es im Alltag erlebe. Ich würde\nmeine Projekte nicht unbedingt mit <a href=\"https://www.netflix.com/\">netflix</a> vergleichen wollen ;)\n<ul>\n<li>Buchempfehlung: <a href=\"http://www.amazon.de/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215\">Erik Evans: Domain Driven Design</a></li>\n<li>Vorsicht vor <a href=\"http://flex.winfxpro.info/download/?noderef=workspace://SpacesStore/30d1bf4d-6b42-4d70-a416-3a619e648edc\">merge ambushes</a> – feature branches sind nicht immer der perfekte Weg.</li>\n<li>Do dark launching and canary releasses</li>\n<li>Use the strangler pattern to transform your software</li>\n<li>Prefer REST or simple messaging over RPC style communication</li>\n<li>Use semantic versioning</li>\n<li>Split your application into microservices (read somewhere else about details)</li>\n<li>Form small, but fully enabled & responsible <a href=\"http://blog.jasoncrawford.org/two-pizza-teams\">two-pizza</a> teams (including operations)</li>\n<li>Package your own web container in a runnable jar</li>\n<li>Favor composable tools over contextual ones</li>\n<li>Read about <a href=\"http://nealford.com/memeagora/2013/01/22/why_everyone_eventually_hates_maven.html\">Dietzler's Law</a> and think about it when you run into problems with your tools</li>\n</ul>\nAnd finally: Architect for change.\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/combining-nosql-sql\">Combining NoSQL with SQL</a></h3>\n<p>Guter Vortrag. Aber wenn man darüber nachdenkt…</p>\n<p>Fazit: wenn man das Gefühl hat, man benötigt eine DB, sollte man sich den Anwendungsfall genauer ansehen und dann eine passende Technik wählen. Logischerweise kann das dann eine SQL- oder eine <a href=\"http://nosql-database.org/\">NoSQL</a>-DB sein. Die Vorgeschlagenen Kriterien habe ich mir auf die schnelle nicht im Einzelnen notiert – bei Gelegenheit nochmal nachlesen. Nach der Auswahl der DB die passende Hardware beschaffen - ein <a href=\"http://redis.io/\">redis</a> profitiert nicht wirklich von vielen großen SSDs.</p>\n<h3><a href=\"http://jax.de/2014/sessions/microservices-decomposing-applications-deployability-and-scalability\">Microservices: Decomposing Applications for Deployability and Scalability</a></h3>\n<p>Der Vortrag hat mir wirklich gut gefallen – deswegen hatte ich auch keine Zeit für Notitzen ;)<br>Beispiele: <a href=\"https://github.com/twitter/snowflake/\">snowflake</a>. Netflix betreibt ca. 600 Services, eine Amazon-Seite verwendet 100-150.</p>\n<h3><a href=\"http://jax.de/2014/sessions/nachhaltige-softwareentwicklung-fuer-agile-teams\">Nachhaltige Softwareentwicklung für agile Teams</a></h3>\n<ul>\n<li>Warum werden automatisierte Qualitätstests so selten eingesetzt?</li>\n<li>Where is your architectural meta model and how do you map it to code? Do you enforce your architecture?</li>\n<li>Warum verwenden wir nicht Tools wie <a href=\"http://www.sonarqube.org/\">sonarqube</a> um die Qualität zu überwachen?</li>\n</ul>\n<h3><a href=\"http://jax.de/2014/sessions/continuous-integration-continuous-delivery-jenkins\">From Continuous Integration to Continuous Delivery with Jenkins</a></h3>\n<p>Kurz gesagt: Jenkins ist <strong>das</strong> tool der Wahl für CD!<br> Muss man nur seine Kollegen von QA und OPS schulen, Jenkins absichern, ein paar Plugins installieren (bzw. bei Bedarf selbst schreiben) und die Build-Pipelines aufsetzen. Ach, ja, der Referent war von <a href=\"http://www.cloudbees.com/\">CloudBees</a>.\n</p>\n<p>Davon abgesehen war der Talk allerdings recht interessant (wenn auch deutlich weniger praktisch als bspw. <a href=\"https://speakerdeck.com/bmuschko/building-a-continuous-delivery-pipeline-with-gradle-and-jenkins\">der hier</a>), es wurden bspw. einige interessante Plugins erwähnt:\n<ul>\n<li><a href=\"https://wiki.jenkins-ci.org/display/JENKINS/Delivery+Pipeline+Plugin\">Delivery Pipeline Plugin</a></li>\n<li><a href=\"https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin\">Build Pipeline Plugin</a></li>\n<li>Ein neues Plugin, das jedoch noch nicht fertig ist.</li>\n</ul>\nWarum nutzen wir eigentlich das maven release plugin nicht? Mal ausprobieren…\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/i-will-follow-him-wenn-drohnen-nicht-von-einem-lassen-koennen\">\"I will follow him\" – Wenn Drohnen nicht von einem lassen können</a></h3>\n<p>\nDie Verfolgung funktioniert per Gesichtserkennung und ist damit auf ständigen frontalen Sichtkontakt angewiesen – <strong>ganz</strong> weit weg von dem, was ich mir erhofft hatte.\n</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1400092334885,"dateCreated":1400092334885,"dateUpdated":1400092334885,"comments":[]},{"id":"53729802975a903df0edd081","title":"<a href=\"http://jax.de/2014/\">#jaxcon</a> recap #1","body":"<p>\n Heute war mein erster Tag bei der JAX2014 - da kann es ja nicht schaden, die\n\tErfahrungen mal kurz zu notieren.\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/begruessung-jax-business-technology-days-bigdatacon-2014\">Begrüßung JAX, Business Technology Days & BigDataCon 2014</a></h3>\n<p>\nJa.\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/java-past-present-and-future\">Java: Past, Present, and Future</a></h3>\n<p>\nWie erwartet sehr allgemein: erst ein bisschen was über die Anfänge von Java,\ndann ein paar Takte über Java 8 und im Anschluss ein minimaler Ausblick auf\nKommendes – insbesondere die Ideen fü <a href=\"http://cr.openjdk.java.net/~jrose/values/values-0.html\">Value Types</a>.\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/javaee-7-quantum-code\">JavaEE (7) Quantum of Code</a></h3>\n<p>\nWie angekündigt wenig Folien und viel Code. Von der Form her sehr\nunterhaltsam und auch inhaltlich sehr interessant. Besonders gut kann man die\nangesprochenen Dinge wohl umsetzen, wenn man JEE7 & Java 8 einsetzt. —\nWird also nicht in jedem Projekt was ;)\n</p>\n<p>\ns. auch <a href=\"http://tv.adam-bien.com/\">http://tv.adam-bien.com/</a>\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/java-ee-voodoo-architecture\">Java EE Voodoo Architecture</a></h3>\n<p>\nHier gab es sehr schöne Inspirationen – auch wenn ich die Beispiele nicht\nso schnell 1 zu 1 umsetzen werde. Aus meinen Kurznotizen:\n<ul>\n<li>Fachobjekte (per Producer) injizieren lassen</li>\n<li>CDI @Interceptors für AOP</li>\n</ul>\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/continuously-building-releasing-and-deploying-software-revenge-machines\">Continuously building, releasing and deploying software: The Revenge of the Machines!</a></h3>\n<p>Sehr schöne Keynote, die viel Lust auf mehr Automatisierung des Entwicklungsprozesses gemacht hat.</p>\n<h3><a href=\"http://jax.de/2014/sessions/akka-actors-und-httprest-mit-sprayio\">Akka, Actors und HTTP/REST mit spray.io</a></h3>\n<p>\nDie Idee hinter <a href=\"http://akka.io/\">akka</a> finde ich sehr interessant\n– bei Gelegenheit sollte man sich nochmal die ersten Folien ansehen.\nLeider hat mir auch dieser Vortrag wieder das Gefühl gegeben, dass <a href=\"http://www.scala-lang.org/\">scala</a>\nsehr schnell zu schlecht wartbarem Code führen kann – womit ich natürlich\nnicht sagen möchte, dass ich dafür direkte Beispiele in den Folien gesehen\nhätte.\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/moving-web-client\">Moving the Web to the Client</a></h3>\n<p>\nVom Stil her wirklich sehr schöner Vortrag, extrem kurzweilig. Leider\ninhaltlich völlig uninteressant, da nicht neu.\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/hypermedia-mit-jax-rs-20\">Hypermedia mit JAX-RS 2.0</a></h3>\n<p>\nLeider doch mehr Folien als ursprünglich versprochen - die grundlegende\nEinführung in REST & HATEOAS war für mich zu Ausführlich. Von den\nvorgestellten Ansätzen war meiner Meinung nach eigentlich nur der letzte\ntatsächlich praktikabel: mit Hilfe von Annotations, Reflection und <a href=\"https://jersey.java.net/documentation/latest/message-body-workers.html\">JAX-RS Entity Providers</a> eine eigene Bibliothek schreiben, die das Problem halbwegs vernünftig löst.\n</p>\n<p>Ein Ausblick auf existierende Lösungen (bspw. <a href=\"http://projects.spring.io/spring-hateoas/\">Spring HATEOAS</a>) fand (wie angekündigt) nicht statt — schon schade.</p>\n<p>\nAußerdem:<br>\n<img src=\"http://lh5.ggpht.com/-k1SJpIAlBPY/UviIyrYyEsI/AAAAAAAAGbM/EKzhj9VEskQ/readImage2.png?imgmax=800\">\n</p>\n<h3><a href=\"http://jax.de/2014/sessions/night-session-neue-java-kuriositaeten\">Night Session: Neue Java-Kuriositäten</a></h3>\n<p>Wollte ich mir eigentlich ansehen. Mir ist allerdings aufgefallen, dass der Referent auch eine gleichnamige Kolumne im <a href=\"http://jaxenter.de/java-magazin\">Javamagazin</a> schreibt – da war mir die Langeweile-Gefahr zu hoch.</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1400018946905,"dateCreated":1400018946905,"dateUpdated":1400018946905,"comments":[]},{"id":"52dc57ec975a3ee5aaaf5fd9","title":"Dart Build Tool™","body":"<p>\n <strong>Update:</strong> It's called <code>pub build</code>, idiot.\n</p>\n<div style=\"text-decoration: line-through\">\nSoweit ich das verstanden habe, gibt es für <a href=\"https://www.dartlang.org\">Dart</a> kein \"richtiges\" Build-Tool. Nachdem ich die Softwarearchitektur für eine solches Tool gründlich durchdacht hatte, schrieb sich der code quasi von selbst ;)\n<pre class=\"prettyprint linenums\">#!/bin/bash\n\nfind web -type f -iname \"*.dart\" -print0 | while IFS= read -r -d $'\\0' file; do\n dart2js -c \"$file\" -o \"$file\".js\ndone</pre>\n</div>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1390172140225,"dateCreated":1390172140225,"dateUpdated":1390172140225,"comments":[]},{"id":"52ab2390975a1fd8285c77e9","title":"Instant eclipse auto completion","body":"<ol>\n <li>In eclipse settings, go to Java → Editor → Content Assist</li>\n <li>Set \"Auto activation delay\" to <code>0</code>\n <li>Set \"Auto activation triggers for Java\" to <code>._ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</code></li>\n <li>…</li>\n <li>profit</li>\n</ol>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1386947472929,"dateCreated":1386947472929,"dateUpdated":1386947472929,"comments":[]},{"id":"527aafe9975ab23791ba6da8","title":"To <a href=\"http://docs.angularjs.org/api/ng.$rootScope.Scope#methods_$watch\">$watch</a> invalid view changes in <a href=\"http://angularjs.org/\">angular</a>…","body":"<p>\n… is not as easy as it seems.\n</p>\n<p>\n\tImagine you have something like this in your html:\n<pre class=\"prettyprint linenums\"><<a href=\"http://docs.angularjs.org/api/ng.directive:input\">input</a>\n\ttype=\"number\"\n\t<a href=\"http://docs.angularjs.org/api/ng.directive:ngModel\">ng-model</a>=\"model.zipcode\"\n\tng-minlength=\"5\"\n\tng-maxlength=\"5\"\n\tid=\"zipcode\"\n\tname=\"zipcode\"\n\trequired\n></pre>\n</p>\n<p>\n\tGot it? Ok, easy. Let's imagine another thing: you want to react to changes\n\tto the input – regardless of whether they are\n\t<code><a href=\"http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#properties_$valid\">$valid</a></code>\n\tor not, e.g. <code>123</code>. Maybe you want to make some webservice call\n\twith this (incomplete) data … how knows?\n</p>\n<p>\n\tGuess what? Because the input is <code>$invalid</code>, angular will not\n\tupdate your model. So if you <code>$watch</code> it, you won't notice any\n\tchange – and that's ok. Also, if you add a\n\t<code><a href=\"http://docs.angularjs.org/api/ng.directive:ngChange\">ng-change</a></code>,\n\tyou won't get notified because of the very same reasons.\n</p>\n<h3>What do?</h3>\n<p>\n\tThere is no builtin way afaik. But someone (<a href=\"http://stackoverflow.com/a/19818292/649835\">not me</a>, I admit)\n\tcame up with this <a href=\"http://docs.angularjs.org/guide/directive\">directive</a>:\n<pre class=\"prettyprint linenums\">angular.module('ViewDataChangeTracker', []).directive('viewDataChangeTracker', function() {\n\n 'use strict';\n\n return {\n require: '^ngModel',\n restrict: 'A',\n scope: {\n method: '&viewDataChangeTracker'\n },\n link: function(scope, element, attrs, ngModelCtrl) {\n var handler = scope.method();\n ngModelCtrl.$parsers.splice(0, 0, function(viewValue) {\n handler(viewValue);\n });\n }\n };\n});</pre>\n</p>\n<h3>What it do?</h3>\n<p>\n\tThis directive will add a function in front of the controller's\n\t<a href=\"http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#properties_$parsers\">$parsers</a>\n\tthat will call your custom handler with the raw input value.\n</p>\n<p>\nYou can apply this directive as an attribute on the input field you want to\ntrack and give it a function you want it to call. The directive will call your\nfunc on any change. Example:\n<pre class=\"prettyprint linenums\"><input\n\tclass=\"form-control\"\n\ttype=\"number\"\n\tng-model=\"model.zipcode\"\n\tng-minlength=\"5\"\n\tng-maxlength=\"5\"\n\tid=\"zipcode\"\n\tname=\"zipcode\"\n\tview-data-change-tracker=\"logZipcode\"\n\trequired\n></pre>\n… then in your controller:\n<pre class=\"prettyprint linenums\">…\n$scope.logZipcode = function(zipcode) {\n\t<a href=\"http://docs.angularjs.org/api/ng.$log\">$log</a>.log(zipcode);\n};\n…\n</pre>\n</p>\n<p>\n\tAwesome? Ehrfurchtgebietend.\n</p>\n<p>\n\t<strong><a href=\"http://www.youtube.com/watch?v=LVz8-4gdWo0\">Achtung:</a></strong>\n\tPlease note that I didn't come up with this myself but asked a\n\t<a href=\"http://stackoverflow.com/questions/19817602/get-raw-value-from-invalid-input-field\">question</a>\n\ton <a href=\"http://stackoverflow.com/\">SO</a> where\n\t<a href=\"http://stackoverflow.com/users/361151/chandermani\">someone else</a>\n\tcame up with the <a href=\"http://stackoverflow.com/a/19818292/649835\">solution</a>. But I think it's worth a post.\n</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1383772137767,"dateCreated":1383772137767,"dateUpdated":1383772137767,"comments":[]},{"id":"52799e2f975ab746f52d536e","title":"Coming up next: Zipcodes as a service","body":"<p>Und: ja, ich bin mir sicher, dass die Welt darauf gewartet hat ;)<p>\n<p>\n<a href=\"http://imgur.com/8BmAKL4\"><img src=\"http://i.imgur.com/8BmAKL4.png\" title=\"Hosted by imgur.com\"/></a>\n</p>\n<p>\n<a href=\"http://imgur.com/wC6tzke\"><img src=\"http://i.imgur.com/wC6tzke.png\" title=\"Hosted by imgur.com\" /></a>\n</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1383702063075,"dateCreated":1383702063075,"dateUpdated":1383702063075,"comments":[]},{"id":"52531885975acfd827904b2a","title":"Due to popular demand™…","body":"…\n<ul>\n <li>You may now copy code fragements by clicking them</li>\n <li>Entries in the generated feed will be truncated after 1,000 characters</li>\n</ul>\n<p>\n <strong>Update:</strong> Fixed typo due to popular demand.\n</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1381177477746,"dateCreated":1381177477746,"dateUpdated":1381177477746,"comments":[]},{"id":"524d3e1f975addadfcc7a792","title":"People keep telling me it's Unsinn…","body":"<p>… but I think it's ehrfurchtgebietend ;)<br>\n <code>tl;dr:</code>\n <ol>\n <li><a href=\"https://code.google.com/p/jspf/\">jspf</a> zum dynamischen\n Laden von Plugins zu verwenden ist ehrfurchtgebietend</li>\n <li><a href=\"https://code.google.com/p/google-gson/\">GSON</a> zum Lesen\n von Konfigurationsdateien zu verwenden ist ehrfurchtgebietend</li>\n <li>Wenn man beides kombiniert, ist das noch mehr ehrfurchtgebietend</li>\n </ol>\n</p>\n<p>Leider muss ich meine Stunden für unterschiedliche Projekte in jeweils\n unterschiedliche Systeme (u. A. SAP, Excel) eintragen. Da das mehr als nervig\n ist, habe ich begonnen, dafür Unterstützung in Form eines neuen Projekts\n anzufordern: <a href = \"https://github.com/sne11ius/stunden\">stunden</a>.\n</p>\n<p>stunden ist dabei nicht viel mehr als eine Umgebung für drei Arten von\n Plugins:\n <ul>\n <li><strong>Input Plugins</strong> lesen Stundeneinträge. Momentan aus\n\t meinem <a href=\"https://github.com/sne11ius/StundenTextfilePlugin\">Lieblingsformat</a>:\n\t\t txt-Dateien. Wenn mir das Format nicht mehr gefällt, schreib ich halt\n\t\t ein neues Plugin.\n </li>\n <li><strong>Process Plugins</strong> sorgen für die Weiterverarbeitung\n der Einträge. Bspw. <a href=\"https://github.com/sne11ius/StundenTagBreaksPlugin\">markieren\n von Pausen</a> oder <a href=\"https://github.com/sne11ius/StundenSimplifierPlugin\">Zusammenfassen\n von mehreren Einträgen zu einem Projekt</a>.\n </li>\n <li><strong>Output Plugins</strong> geben die erzeugten Daten aus. Von\n <a href=\"https://github.com/sne11ius/StundenSTDOutPlugin\">stdout</a>\n bis zum Erzeugen von <a href=\"https://github.com/sne11ius/StundenAutoHotkeyScriptForSAPGUIOutputPlugin\">AutoHotkey-Scripts</a>\n ist vieles denkbar.\n </li>\n </ul>\n</p>\n<p>Da ich nicht wirklich davon ausgehe, mit dem fachlichen Thema Begeisterung\n hervorrufen zu können, hier Sachen, die an dem Programm in technischer\n Hinsicht total sexy sind:\n</p>\n<h3>jspf</h3>\n<p>Die Plugins werden mittels <a href=\"http://code.google.com/p/jspf\">jspf (Java\n Simple Plugin Framework)</a> geladen. Mein code an der Stelle sieht so aus:\n <pre class=\"prettyprint linenums\">private Plugin loadPlugin(final String path, final Class<? extends Plugin> clazz) {\n\tfinal PluginManager pluginManager = PluginManagerFactory.createPluginManager();\n\tfinal File pluginFile = new File(path);\n\tif (!pluginFile.exists()) {\n\t\tthrow new InvalidConfigurationException(\"Plugin file does not exist @ \" + path);\n\t}\n\tpluginManager.addPluginsFrom(new File(path).toURI());\n\tfinal Plugin plugin = pluginManager.getPlugin(clazz);\n\tif (null == plugin) {\n\t\tthrow new InvalidConfigurationException(\"Unable to load Plugin from \" + path);\n\t}\n\treturn plugin;\n}</pre>\n Da bleibt eigentlich nicht mehr viel zu sagen. Kann ich nur empfehlen. Ich\n sollte erwähnen, dass das Projekt momentan <a href=\"https://groups.google.com/d/msg/jspf/LDQuMbWM16k/k73Y_VCE_SIJ\">nicht aktiv</a>\n weiter entwickelt wird – aber code verrottet ja recht langsam.\n</p>\n<h3>Konfiguration mit GSON</h3>\n<p>Ein typischer Ablauf von stunden enthält bei mir ca. 5 Plugins - alle müssen\n geladen und mehr oder weniger aufwändig konfiguriert werden – da ist\n man mit command line args nicht gut beraten. Aus diesem Grund wird stunden\n über eine json-Datei konfiguriert. In dieser sind alle zu verwendenden\n Plugins zusammen mit ihrer jeweiligen Konfiguration aufgelistet. Beispiel:\n <pre class=\"prettyprint linenums lang-js\">...\ninputPlugins : [{\n\tpath: \"/home/coli/stunden/plugins/StundenTextfilePlugin.jar\",\n\tconfig: {\n\t\treadFrom: \"/home/coli/zeiten/2013-09\"\n\t}\n}],\n...</pre>\n `path' ist offensichtlich der Pfad zum Plugin selbst und nicht wirklich\n spannend. Interessanter ist der `config'-Teil: da stunden nicht wissen kann,\n wie die Konfiguration eines Plugins aussehen soll, müssen alle Plugins das\n folgende Interface implementieren:\n <pre class=\"prettyprint linenums\">/**\n * A configurable thing.\n */\npublic interface Configurable {\n\tpublic Class<?> getConfigurationClass();\n}</pre>\nHiermit können die Plugins den Typ ihrer Konfiguration selbst bestimmen. Für das\nBeispiel oben sieht das so aus:\n<pre class=\"prettyprint linenums\">package nu.wasis.stunden.plugins.textfile.config;\n\n/**\n * Configuration class for StundenTextfilePlugin.\n */\npublic class StundenTextfilePluginConfig {\n\n\tprivate String readFrom;\n\n\tpublic String getReadFrom() {\n\t\treturn readFrom;\n\t}\n}</pre>\nUnd dann im Plugin selbst:\n<pre class=\"prettyprint linenums\">public class StundenTextfilePlugin implements InputPlugin {\n\t...\n\t@Override\n\tpublic Class<StundenTextfilePluginConfig> getConfigurationClass() {\n\t\treturn StundenTextfilePluginConfig.class;\n\t}\n\t...\n}</pre>\n Mit diesem Setup kann die Konfiguration für jedes Plugin direkt in ein Objekt\n der jeweiligen Konfigurationsklasse deserialisiert werden, dank\n <a href=\"https://code.google.com/p/google-gson/\">GSON</a> kann man sich\n Annotationen oder Setter in den Konfigurationsklassen sparen.\n</p>\n<p>Damit ist der Ablauf wie folgt:\n <ol>\n <li>Konfigurationsdatei mit GSON parsen</li>\n\t <li>Plugin entsprechend des <code>path</code>-Parameters laden</li>\n\t <li>Konfigurations-Klasse des Plugins mittels\n <code>getConfigurationClass()</code> ermitteln</li>\n <li>Konfigurationsabschnitt für das Plugin mittels GSON deserialisieren</li>\n <li>Plugin rennen</li>\n </ol>\n</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1380793887926,"dateCreated":1380793887926,"dateUpdated":1380793887926,"comments":[]},{"id":"51cfe1d1975ae6e154f6864d","title":"Playing Blueray ISOs","body":"I use this :D\n<pre class=\"prettyprint linenums\"><em>cornelius@homebox:~$</em> cat bin/play_iso\nsudo mount -o loop -t udf \"$1\" /media/cdrom\nvlc $(find /media/cdrom/BDMV/STREAM/ -type f | xargs ls -1S | head -n 1) -f &> /dev/null &</pre>\n<p>\n <strong>Update #1:</strong> Now supports whitespaces in iso filenames ;)\n</p>\n<p>\n <strong>Update #2:</strong> Will now start VLC in fullscreen mode & trash any output\n</p>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1372578257700,"dateCreated":1372578257700,"dateUpdated":1372578257700,"comments":[]},{"id":"51c22bd3975ae43fde460f20","title":"awesome edit feature is awsome ;)","body":"<p>\n Blog owner may now inplace-edit posts — implemented using <a href=\"https://github.com/mintchaos/flippant.js\">flippant.js</a>\n</p>\n<p>\n Here is what it looks like:<br>\n <img src=\"https://raw.github.com/sne11ius/jlog/master/screenshot001.png\">\n</p>\n<p>\n … comment editing coming soon … maybe ;)\n</p>\n<p>\n <strong>Update:</strong> And yes, it works ;)\n</p>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1371679699119,"dateCreated":1371679699119,"dateUpdated":1371679699119,"comments":[]},{"id":"51a54c39975ae87bf819ca22","title":"Current State of REST @ Android","body":"<p>\nHabe mich mit <a href=\"http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm\">REST</a>-Frameworks für Android beschäftigt. Ziel ist es, eine einfach zu verwendende & performante Bibliothek zu finden — möglichst eine, die <a href=\"https://www.youtube.com/watch?v=xHXn3Kg2IQE&hd=1\">das hier</a> gut umsetzt.\n</p>\n<p>\nDer erste Post den ich fand war wie so oft auf Stackoverflow. Dort hat mich zunächst <a href=\"http://stackoverflow.com/a/4945491/649835\">dieser Kommentar</a> gestört, denn ein HTTP-Client ist doch echt weit weg von dem, was ich mir so vorstelle. Dann habe ich ein wenig nachgedacht und bin zu dem Schluss gekommen, dass <a href=\"http://stackoverflow.com/users/6819/darrel-miller\">Darrel</a> <a href=\"http://www.bizcoder.com/\">Miller</a> mit seinem Kommentar auf einen interessanten Aspekt eingegangen ist: jedes REST-Framework das ich kenne (ob jetzt für Android oder eine beliebige andere Umgebung) hat mit <a href=\"http://en.wikipedia.org/wiki/HATEOAS\">HATEOAS</a> nichts am Hut und ist damit für REST eigentlich wenig geeignet…\n</p>\n<p>Das ist mir aber momentan egal und so Klugscheißer helfen keinem weiter ;)</p>\n<p>\nNach weiterer Recherche bleiben diese libs für mich zur Auswahl:\n<ul>\n <li><a href=\"https://android.googlesource.com/platform/frameworks/Volley\">volley</a></li>\n <li><a href=\"https://github.com/octo-online/robospice\">RoboSpice</a></li>\n <li><a href=\"http://www.datadroidlib.com\">DataDroid</a></li>\n</ul>\n</p>\n<p>\nIch versuche mich zunächst mal an <a href=\"https://android.googlesource.com/platform/frameworks/volley\">Volley</a>, denn das scheint <a href=\"http://www.youtube.com/watch?v=yhv8l9F44qo&hd=1\">total</a> <a href=\"http://stackoverflow.com/questions/16666575/volley-lib-issues-and-contribution\">hip</a> zu sein – es scheint auf den ersten Blick wenig von dem 2010er-IO-Talk umzusetzen, aber dass soll mir erstmal egal sein.\n</p>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1369787449396,"dateCreated":1405948853879,"dateUpdated":1405948853879,"comments":[{"id":"51a59802975ae87bf819cb71","author":{"id":null,"email":"","firstname":"Steve","lastname":"Liedtke"},"body":"Auf der I/O13 gab es übrigens ein Talk zu volley ;-)","date":1369806850901},{"id":"51a59f65975ae87bf819cbd3","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"body":"Ja, habe auch einen Link dazu im Text untergebracht ;)","date":1369808741512}]},{"id":"518edc7d975a540927bf5573","title":"github contributions","body":"<p>Mir ist aufgefallen, dass der github contributions screen ein prima display abgibt - wenn auch die Auflösung mit 51x7 nicht besonders hoch ist ;)</p>\n<p>Die dafür notwendigen git commands waren im Endeffekt auch einfach zusammen zu hacken. Der Code findet sich <a href=\"https://github.com/sne11ius/github-screen\">hier</a>, das Ergebnis sieht bei mir so aus:<br><img src=\"https://raw.github.com/sne11ius/github-screen/master/screenshot.png\">.</p>\n<p>Bleibt mir eigentlich nur noch eins zu sagen:<br><a href=\"http://imgur.com/gBcLK1a\"><img src=\"http://i.imgur.com/gBcLK1a.jpg\" title=\"Hosted by imgur.com\" /></a></p>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1368317053054,"dateCreated":1405948853880,"dateUpdated":1405948853880,"comments":[]},{"id":"5182de77975abb87c4257a3c","title":"<a href=\"http://wasis.nu/mit/blog/feed\">atom feed</a>","body":"<p>Ab jetzt gibt es auch einen atom feed @ <a href=\"http://wasis.nu/mit/blog/feed\">http://wasis.nu/mit/blog/feed</a>, wenn auch noch mit kleineren Problemen...\n<p>Aber dafür auch mit einem schicken Icon hier oben rechts ;)</p>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1367531127725,"dateCreated":1405948853880,"dateUpdated":1405948853880,"comments":[]},{"id":"518163fd975ae2a2b7e142eb","title":"mvn Vortrag","body":"<p>Habe am Di. 2013-04-30 im <a href=\"http://www.hackerspace-bremen.de/\">Hackerspace Bremen</a> einen kleinen <a href=\"http://docs.google.com/presentation/d/1I3hVPctME68i7BuNGkl_0VKScjrOp9UT8AA3gPznjgs\">Einführungsvortrag über maven</a> gehalten.</p><p>Die Gespräche dabei und im Anschluss daran waren sehr interessant — vielen Dank dafür ;)</p>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1367434237675,"dateCreated":1405948853880,"dateUpdated":1405948853880,"comments":[]},{"id":"51763c4d975ae2a2b7e140c1","title":"<3","body":"refefe comments","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1366703181777,"dateCreated":1405948853881,"dateUpdated":1405948853881,"comments":[]},{"id":"516f3fca975a7dbbea3dda77","title":"jetzt erweiterte <a href=\"https://github.com/sne11ius/jlog/commit/fd9bc51a2084dca60bf0a830e8ad5b8566784d36\">hipster-/awesomeness</a> mit bootstrap","body":"<h4>mobil:</h4>\n<a href=\"http://imgur.com/WXMKo9a\"><img src=\"http://i.imgur.com/WXMKo9a.png\" alt=\"\" title=\"Hosted by imgur.com\"></a>\n<br>\n<br>\n<h4>full fledged:</h4><h4>\n<a href=\"http://imgur.com/C2FvkIv\"><img src=\"http://i.imgur.com/C2FvkIv.png\" alt=\"\" title=\"Hosted by imgur.com\"></a></h4>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1366245322561,"dateCreated":1405948853881,"dateUpdated":1405948853881,"comments":[]},{"id":"51697732975a511fde916c7d","title":"<a href=\"https://code.google.com/p/google-plus-platform/issues/detail?id=540\">Issue 540</a>","body":"Sign in mit Firefox geht noch immer nicht und Kollegen & Internet haben bei der Suche nach dem Fehler <a href=\"https://groups.google.com/forum/?fromgroups=#!topic/google-plus-developers/Ctp2QTQgEgg\">hart gefehlt</a>. Ich sah mich deswegen gezwungen, <a href=\"https://code.google.com/p/google-plus-platform/issues/detail?id=540\">Issue 540</a> zu casten — vll. hilft das ja…","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1365866290535,"dateCreated":1405948853881,"dateUpdated":1405948853881,"comments":[{"id":"516f3a72975a7dbbea3dda60","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"body":"grrrrr, fefe wird über euch kommen!<br>\n<a href=\"http://imgur.com/A5Tz3lk\"><img src=\"http://i.imgur.com/A5Tz3lk.png?1\" alt=\"\" title=\"Hosted by imgur.com\" /></a>","date":1366243954778}]},{"id":"51538f12975a098c96e3cd11","title":"jlog <a href=\"https://github.com/sne11ius/jlog/commit/8a6c6402ef20221664b413e8ec90085e11fb6db6\">jetzt</a> total ajaxy","body":"Ist mir echt schwer gefallen und der Code sieht teilweise hart nach Verkehrsunfall aus … aber immerhin: login/logout, anlegen/löschen von Posts und Comments passiert jetzt nur noch per ajax.","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1364430610481,"dateCreated":1405948853882,"dateUpdated":1405948853882,"comments":[{"id":"5154c1a9975a03ac3d90a390","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"body":"Oh, just noticed: <a href=\"https://plus.google.com/115383506073786007428/posts/JobWhPjWvyE\">login is broken for firefox</a> D:","date":1364509097891},{"id":"515c4ab8975af1a9c7028e72","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"body":"Not in IE though, I guess thats why I like to call it `failfox' ;)","date":1365002936261}]},{"id":"514a4a28975ad2fee19c14be","title":"Mit Liferay die Welt retten","body":"<a href=\"http://imgur.com/Xdeyhu6\"><img src=\"http://i.imgur.com/Xdeyhu6.png\" alt=\"er\" /></a>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1363823144066,"dateCreated":1405948853882,"dateUpdated":1405948853882,"comments":[]},{"id":"513fbc6a975a2c4e524912b0","title":"new blogware","body":"now running new blogware: <a href=\"https://github.com/sne11ius/jlog\">github.com/sne11ius/jlog</a>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1363131497229,"dateCreated":1405948853883,"dateUpdated":1405948853883,"comments":[{"id":"51410c19975a6bf59f405ed0","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"body":"owner may now post <a href=\"https://github.com/sne11ius/jlog/commit/cf1c749dc2676e34f2c02397e4a45f4c95beed33#src/main/java/nu/wasis/jlog/PostsResource.java\">html comments</a> :D","date":1363217433864},{"id":"5141112d975ac721ac537018","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"body":"owner may now <a href=\"https://github.com/sne11ius/jlog/commit/bee9841a5309024432dd13af6ad75315eded1f0f\">remove comments</a> :D","date":1363218733024}]},{"id":"51383c1a975a208996911030","title":"jcommander command line parser","body":"Oh, das sieht gut aus. Sorry, commons-cli...<br>\n<a href=\"http://jcommander.org/\">jcommander.org</a>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1362639898997,"dateCreated":1405948853883,"dateUpdated":1405948853883,"comments":[{"id":"51410c3a975a6bf59f405ed5","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"body":"beware, commons-cli, this is <a href=\"https://github.com/airlift/airline\">airline</a>!","date":1363217466827}]},{"id":"5134027a975a40f4cebe0d6e","title":"Even more neues Projekt: java blog mit hipster stack:","body":"<a href=\"https://github.com/sne11ius/Blog\">https://github.com/sne11ius/Blog</a>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1362363002273,"dateCreated":1405948853884,"dateUpdated":1405948853884,"comments":[]},{"id":"51340268975a40f4cebe0d6d","title":"Neues Spaßprojekt: mvz","body":"<a href=\"https://github.com/sne11ius/mvz\">https://github.com/sne11ius/mvz</a>","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1362362984143,"dateCreated":1405948853884,"dateUpdated":1405948853884,"comments":[]},{"id":"51340253975a40f4cebe0d6c","title":"clojure-script-system","body":"Angenommen, du müsstest da so ein clojure-script-system bedienen. Da wären Sachen wie <code>def</code>, <code>defn</code> u. Ä. verboten...<br>\nDu kannst aber anonyme Funktionen per <code>#(...)</code> verwenden und dir auch Zuweisungen mühsam zusammen klicken ;)<br>\nDu kannst auch so komisch Sub-Prozesse anlegen, für die du dann Parameter definieren kannst. Die Sub-Prozesse haben aber keinen Zugriff auf den \"äszlig;eren Scope\". Wie auch immer, die Lösung könnte dann ca. so skizziert werden:<br>\n<pre class=\"prettyprint linenums lang-clj\">(def fns {:fget #(get (first %1) %2)})\n(def | #(apply (get fns %1) %&))</pre>\nAnwendung dann logischerweise so\n<pre class=\"prettyprint linenums lang-clj\">(| :fget '({:key \"val\"}) :key)\n==> \"val\"</pre>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1362362963503,"dateCreated":1380753870143,"dateUpdated":1380753870143,"comments":[]},{"id":"51340233975a40f4cebe0d6b","title":"move all files to directories","body":"Lol, mein erstes shell script:\n<pre class=\"prettyprint linenums\">!/bin/sh\nfor file in *.[a-z]??; do\n dir=${file%.*};\n mkdir \"$dir\";\n mv \"$file\" \"$dir\";\ndone</pre>","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1362362931820,"dateCreated":1380754487033,"dateUpdated":1380754487033,"comments":[]},{"id":"51340190975a7435f5ce00aa","title":"debian testing + eclipse + android + ia32-libs","body":"Probleme mit (debian testing + eclipse + android) wegen nicht installierbarer ia32-libs?<br>\n<pre class=\"prettyprint linenums\">su\ndpkg --add-architecture i386\nsed -i 's/deb\\ /deb\\ [arch=amd64,i386]\\ /g' /etc/apt/sources.list\napt-get update\napt-get install ia32-libs</pre>\nfull of win <a href=\"http://forums.linuxmint.com/viewtopic.php?f=190&t=118845&p=656570#p656554\">via</a><br>\n... but add some\n<pre class=\"prettyprint linenums\">apt-get install lib32ncurses5</pre>\nto it.","author":{"id":"115383506073786007428","email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1362362768919,"dateCreated":1380754487034,"dateUpdated":1380754487034,"comments":[]},{"id":"513400c0975af20aede4d6cb","title":"fefeliz0r","body":"try this one: <a href=\"/mit/fefe/in/http://www.heise.de\">http://wasis.nu/mit/fefe/in/http://www.heise.de</a> - and don't fear the IllegalRefererException","author":{"id":null,"email":"","firstname":"Cornelius","lastname":"Lilge"},"date":1362362560671,"dateCreated":1405948853885,"dateUpdated":1405948853885,"comments":[]}]