[kune-commits] r985 - in trunk/src: main/java/org/ourproject/kune/app/public/css main/java/org/ourproject/kune/blogs/client main/java/org/ourproject/kune/blogs/client/cnt main/java/org/ourproject/kune/chat/client main/java/org/ourproject/kune/chat/client/cnt main/java/org/ourproject/kune/docs/client main/java/org/ourproject/kune/docs/client/cnt main/java/org/ourproject/kune/gallery/client main/java/org/ourproject/kune/gallery/client/cnt main/java/org/ourproject/kune/platf/client/dto main/java/org/ourproject/kune/platf/client/services main/java/org/ourproject/kune/platf/client/ui main/java/org/ourproject/kune/platf/server main/java/org/ourproject/kune/platf/server/domain main/java/org/ourproject/kune/platf/server/manager/file main/java/org/ourproject/kune/platf/server/utils main/java/org/ourproject/kune/wiki/client main/java/org/ourproject/kune/wiki/client/cnt main/java/org/ourproject/kune/workspace/client/cnt main/java/org/ourproject/kune/workspace/client/ctxnav main/java/org/ourproject/kune/workspace/client/editor main/resources test/java/org/ourproject/kune/platf/server/manager/file

vjrj vjrj at ourproject.org
Fri Dec 5 18:53:54 CET 2008


Author: vjrj
Date: 2008-12-05 18:53:45 +0100 (Fri, 05 Dec 2008)
New Revision: 985

Added:
   trunk/src/main/java/org/ourproject/kune/platf/server/utils/
   trunk/src/main/java/org/ourproject/kune/platf/server/utils/StringW.java
   trunk/src/main/java/org/ourproject/kune/platf/server/utils/XmlW.java
   trunk/src/test/java/org/ourproject/kune/platf/server/manager/file/orig.pdf
Modified:
   trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
   trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
   trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java
   trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogFolderContentPresenter.java
   trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerPresenter.java
   trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerView.java
   trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java
   trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatRoomPresenter.java
   trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
   trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
   trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
   trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocFolderContentPanel.java
   trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocFolderContentPresenter.java
   trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentViewerPresenter.java
   trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentViewerView.java
   trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java
   trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientTool.java
   trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPanel.java
   trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPresenter.java
   trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerPresenter.java
   trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTO.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/KuneUiUtils.java
   trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java
   trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/FileDownloadManager.java
   trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/FileUploadManager.java
   trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/ImageUtilsDefault.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientTool.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiFolderContentPresenter.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerPresenter.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerView.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentView.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java
   trunk/src/main/resources/kune.properties
   trunk/src/test/java/org/ourproject/kune/platf/server/manager/file/ImageUtilsDefaultTest.java
Log:
Preview of uploaded files (different than images).

Complete - task pdf to img for previews 

Complete - task Text files preview 


Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/all.css	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css	2008-12-05 17:53:45 UTC (rev 985)
@@ -41,4 +41,4 @@
     padding: 1px 0px 1px 1px;
     text-decoration:none;
 }
-*/.k-textlinethrough{text-decoration:line-through;color:red;}.k-textnormal{text-decoration:inherit;color:green;}.k-textunderline{text-decoration:underline;color:gray;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.x-toolbar-body table{width:100%;}
\ No newline at end of file
+*/.k-textlinethrough{text-decoration:line-through;color:red;}.k-textnormal{text-decoration:inherit;color:green;}.k-textunderline{text-decoration:underline;color:gray;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}
\ No newline at end of file

Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css	2008-12-05 17:53:45 UTC (rev 985)
@@ -816,6 +816,15 @@
 }
 
 .x-toolbar-body table {
-    width: 100%;
+    /* width: 100%; */
 }
 
+.k-preview-msg
+    {
+    background: #FFCCAA;
+}
+.k-preview-msg-lab
+    {
+    background: #FFCCAA;
+    padding: 0 5px;
+}

Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -108,7 +108,7 @@
             public BlogFolderContent create() {
                 final BlogFolderContentPresenter presenter = new BlogFolderContentPresenter($(StateManager.class),
                         $(Session.class), $(ActionContentToolbar.class), $(ContentActionRegistry.class),
-                        $(I18nTranslationService.class));
+                        $(I18nTranslationService.class), $$(FileDownloadUtils.class));
                 final BlogFolderContentView view = new BlogFolderContentPanel($(WorkspaceSkeleton.class),
                         $(I18nTranslationService.class));
                 presenter.init(view);

Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogFolderContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogFolderContentPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogFolderContentPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -27,16 +27,20 @@
 import org.ourproject.kune.platf.client.services.I18nTranslationService;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPresenter;
 
+import com.calclab.suco.client.ioc.Provider;
+
 public class BlogFolderContentPresenter extends FoldableContentPresenter implements BlogFolderContent {
 
     private BlogFolderContentView view;
     private final I18nTranslationService i18n;
 
     public BlogFolderContentPresenter(StateManager stateManager, Session session, ActionContentToolbar toolbar,
-            final ActionRegistry<StateToken> actionRegistry, I18nTranslationService i18n) {
-        super(BlogClientTool.NAME, stateManager, session, toolbar, actionRegistry);
+            final ActionRegistry<StateToken> actionRegistry, I18nTranslationService i18n,
+            Provider<FileDownloadUtils> downloadProvider) {
+        super(BlogClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
         this.i18n = i18n;
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -22,62 +22,31 @@
 import org.ourproject.kune.blogs.client.BlogClientTool;
 import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionContentToolbar;
-import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
 import org.ourproject.kune.platf.client.dto.StateContentDTO;
-import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
-import org.ourproject.kune.platf.client.ui.download.ImageSize;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPresenter;
 import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
 
 import com.calclab.suco.client.ioc.Provider;
 
 public class BlogViewerPresenter extends FoldableContentPresenter implements BlogViewer {
-    private BlogViewerView view;
-    private final Provider<FileDownloadUtils> downloadProvider;
 
     public BlogViewerPresenter(StateManager stateManager, Session session, I18nUITranslationService i18n,
             ActionContentToolbar toolbar, ContentActionRegistry actionRegistry,
             Provider<FileDownloadUtils> downloadProvider) {
-        super(BlogClientTool.NAME, stateManager, session, toolbar, actionRegistry);
-        this.downloadProvider = downloadProvider;
+        super(BlogClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
     }
 
     public void init(BlogViewerView view) {
         super.init(view);
-        this.view = view;
     }
 
     @Override
     protected void setState(StateContentDTO state) {
         super.setState(state);
-        setContent(state, BlogClientTool.TYPE_UPLOADEDFILE);
+        super.setContent(state, BlogClientTool.TYPE_UPLOADEDFILE);
     }
 
-    private void setContent(StateContentDTO state, String uploadedfileType) {
-        String typeId = state.getTypeId();
-        String contentBody = state.getContent();
-        StateToken token = state.getStateToken();
-        BasicMimeTypeDTO mimeType = state.getMimeType();
-        if (typeId.equals(uploadedfileType)) {
-            if (mimeType != null) {
-                FileDownloadUtils fileDownloadUtils = downloadProvider.get();
-                if (mimeType.getType().equals("image")) {
-                    view.showImage(fileDownloadUtils.getImageUrl(token), fileDownloadUtils.getImageResizedUrl(token,
-                            ImageSize.sized));
-                } else if (mimeType.toString().equals("text/plain") || mimeType.toString().equals("application/pdf")) {
-                    view.setContent(contentBody);
-                } else {
-                    view.setContent("");
-                }
-            } else {
-                view.setContent("");
-            }
-        } else {
-            view.setContent(contentBody);
-        }
-        view.attach();
-    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerView.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/cnt/BlogViewerView.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -23,8 +23,4 @@
 
 public interface BlogViewerView extends AbstractContentView {
 
-    void setContent(String content);
-
-    void showImage(String imageUrl, String imageResizedUrl);
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -37,6 +37,7 @@
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.tool.ToolSelector;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
@@ -91,7 +92,7 @@
             public ChatRoom create() {
                 final ChatRoomPresenter presenter = new ChatRoomPresenter($(StateManager.class), $(Session.class),
                         $(I18nUITranslationService.class), $(ActionContentToolbar.class),
-                        $(ContentActionRegistry.class));
+                        $(ContentActionRegistry.class), $$(FileDownloadUtils.class));
                 final ChatRoomPanel panel = new ChatRoomPanel($(WorkspaceSkeleton.class),
                         $(I18nTranslationService.class));
                 presenter.init(panel);

Modified: trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatRoomPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatRoomPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatRoomPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -26,18 +26,22 @@
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPresenter;
 import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
 import org.ourproject.kune.workspace.client.site.Site;
 
+import com.calclab.suco.client.ioc.Provider;
+
 public class ChatRoomPresenter extends FoldableContentPresenter implements ChatRoom {
 
     private ChatRoomView view;
     private final I18nUITranslationService i18n;
 
     public ChatRoomPresenter(StateManager stateManager, Session session, I18nUITranslationService i18n,
-            ActionContentToolbar toolbar, final ActionRegistry<StateToken> actionRegistry) {
-        super(ChatClientTool.NAME, stateManager, session, toolbar, actionRegistry);
+            ActionContentToolbar toolbar, final ActionRegistry<StateToken> actionRegistry,
+            Provider<FileDownloadUtils> downloadProvider) {
+        super(ChatClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
         this.i18n = i18n;
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -100,7 +100,7 @@
 
         createEditAction(TYPE_DOCUMENT);
 
-        createTranslateAction(TYPE_DOCUMENT, TYPE_FOLDER, TYPE_UPLOADEDFILE);
+        createTranslateAction(TYPE_DOCUMENT, TYPE_FOLDER);
 
         createDelContainerAction("Delete folder", parentMenuTitleCtx, containersNoRoot);
         createDelContentAction(parentMenuTitle, i18n.t("Delete"), contents);

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -76,8 +76,8 @@
                         $(Session.class), $(StateManager.class), $(DeferredCommandWrapper.class),
                         $$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
                         $(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
-                        $(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class), $(DocumentViewer.class),
-                        $$(ContextPropEditor.class));
+                        $(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class),
+                        $(DocumentViewer.class), $$(ContextPropEditor.class));
             }
         });
 
@@ -107,7 +107,8 @@
             @Override
             public DocFolderContent create() {
                 final DocFolderContentPresenter presenter = new DocFolderContentPresenter($(StateManager.class),
-                        $(Session.class), $(ActionContentToolbar.class), $(ContentActionRegistry.class));
+                        $(Session.class), $(ActionContentToolbar.class), $(ContentActionRegistry.class),
+                        $$(FileDownloadUtils.class));
                 final DocFolderContentView view = new DocFolderContentPanel($(WorkspaceSkeleton.class),
                         $(I18nTranslationService.class));
                 presenter.init(view);

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -46,7 +46,7 @@
         registerRateableTypes(TYPE_DOCUMENT, TYPE_UPLOADEDFILE);
         registerRenamableTypes(TYPE_DOCUMENT, TYPE_FOLDER, TYPE_UPLOADEDFILE);
         registerTageableTypes(TYPE_DOCUMENT, TYPE_UPLOADEDFILE);
-        registerTranslatableTypes(TYPE_DOCUMENT, TYPE_FOLDER, TYPE_UPLOADEDFILE);
+        registerTranslatableTypes(TYPE_DOCUMENT, TYPE_FOLDER);
 
         registerIcons();
     }

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocFolderContentPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocFolderContentPanel.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocFolderContentPanel.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -21,13 +21,11 @@
 
 import org.ourproject.kune.platf.client.services.I18nTranslationService;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPanel;
-import org.ourproject.kune.workspace.client.site.Site;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
 
 public class DocFolderContentPanel extends FoldableContentPanel implements DocFolderContentView {
 
     public DocFolderContentPanel(WorkspaceSkeleton ws, I18nTranslationService i18n) {
         super(ws, i18n);
-        super.setLabel("Folder properties, translations ..." + Site.IN_DEVELOPMENT);
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocFolderContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocFolderContentPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocFolderContentPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -25,13 +25,16 @@
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPresenter;
 
+import com.calclab.suco.client.ioc.Provider;
+
 public class DocFolderContentPresenter extends FoldableContentPresenter implements DocFolderContent {
 
     public DocFolderContentPresenter(StateManager stateManager, Session session, ActionContentToolbar toolbar,
-            final ActionRegistry<StateToken> actionRegistry) {
-        super(DocumentClientTool.NAME, stateManager, session, toolbar, actionRegistry);
+            final ActionRegistry<StateToken> actionRegistry, Provider<FileDownloadUtils> downloadProvider) {
+        super(DocumentClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
     }
 
     public void init(final DocFolderContentView view) {

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentViewerPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentViewerPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentViewerPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -22,32 +22,25 @@
 import org.ourproject.kune.docs.client.DocumentClientTool;
 import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionContentToolbar;
-import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
 import org.ourproject.kune.platf.client.dto.StateContentDTO;
-import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
-import org.ourproject.kune.platf.client.ui.download.ImageSize;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPresenter;
 import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
 
 import com.calclab.suco.client.ioc.Provider;
 
 public class DocumentViewerPresenter extends FoldableContentPresenter implements DocumentViewer {
-    private DocumentViewerView view;
-    private final Provider<FileDownloadUtils> downloadProvider;
 
     public DocumentViewerPresenter(StateManager stateManager, Session session, I18nUITranslationService i18n,
             ActionContentToolbar toolbar, ContentActionRegistry actionRegistry,
             Provider<FileDownloadUtils> downloadProvider) {
-        super(DocumentClientTool.NAME, stateManager, session, toolbar, actionRegistry);
-        this.downloadProvider = downloadProvider;
+        super(DocumentClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
     }
 
     public void init(DocumentViewerView view) {
         super.init(view);
-        this.view = view;
     }
 
     @Override
@@ -55,29 +48,4 @@
         super.setState(state);
         setContent(state, DocumentClientTool.TYPE_UPLOADEDFILE);
     }
-
-    private void setContent(StateContentDTO state, String uploadedfileType) {
-        String typeId = state.getTypeId();
-        String contentBody = state.getContent();
-        StateToken token = state.getStateToken();
-        BasicMimeTypeDTO mimeType = state.getMimeType();
-        if (typeId.equals(uploadedfileType)) {
-            if (mimeType != null) {
-                FileDownloadUtils fileDownloadUtils = downloadProvider.get();
-                if (mimeType.getType().equals("image")) {
-                    view.showImage(fileDownloadUtils.getImageUrl(token), fileDownloadUtils.getImageResizedUrl(token,
-                            ImageSize.sized));
-                } else if (mimeType.toString().equals("text/plain") || mimeType.toString().equals("application/pdf")) {
-                    view.setContent(contentBody);
-                } else {
-                    view.setContent("");
-                }
-            } else {
-                view.setContent("");
-            }
-        } else {
-            view.setContent(contentBody);
-        }
-        view.attach();
-    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentViewerView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentViewerView.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentViewerView.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -22,9 +22,4 @@
 import org.ourproject.kune.workspace.client.cnt.AbstractContentView;
 
 public interface DocumentViewerView extends AbstractContentView {
-
-    void setContent(String content);
-
-    void showImage(String imageUrl, String imageResizedUrl);
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -108,9 +108,10 @@
             public GalleryFolderContent create() {
                 final GalleryFolderContentPresenter presenter = new GalleryFolderContentPresenter(
                         $(StateManager.class), $(Session.class), $(ActionContentToolbar.class),
-                        $(ContentActionRegistry.class), $(I18nTranslationService.class), $$(FileDownloadUtils.class));
+                        $(ContentActionRegistry.class), $(I18nTranslationService.class), $$(FileDownloadUtils.class),
+                        $$(FileDownloadUtils.class));
                 final GalleryFolderContentView view = new GalleryFolderContentPanel($(WorkspaceSkeleton.class),
-                        $(I18nTranslationService.class), $(StateManager.class));
+                        $(I18nTranslationService.class), $(StateManager.class), $(Session.class));
                 presenter.init(view);
                 return presenter;
             }

Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientTool.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientTool.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -45,7 +45,7 @@
         registerRateableTypes(TYPE_UPLOADEDFILE);
         registerRenamableTypes(TYPE_ALBUM, TYPE_UPLOADEDFILE);
         registerTageableTypes(TYPE_UPLOADEDFILE);
-        registerTranslatableTypes(TYPE_ALBUM, TYPE_UPLOADEDFILE);
+        // registerTranslatableTypes();
 
         registerIcons();
     }

Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPanel.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPanel.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -21,6 +21,7 @@
 
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.services.I18nTranslationService;
+import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.BasicThumb;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPanel;
@@ -37,20 +38,24 @@
     private static final int TEXT_MAX_LENGHT = 15;
     private FlowPanel flowPanel;
     private final StateManager stateManager;
+    private final Session session;
 
-    public GalleryFolderContentPanel(WorkspaceSkeleton ws, I18nTranslationService i18n, StateManager stateManager) {
+    public GalleryFolderContentPanel(WorkspaceSkeleton ws, I18nTranslationService i18n, StateManager stateManager,
+            Session session) {
         super(ws, i18n);
         this.stateManager = stateManager;
+        this.session = session;
     }
 
     public void addThumb(final StateToken token, final String title, final String imgUrl) {
         DeferredCommand.addCommand(new Command() {
             public void execute() {
-                BasicThumb thumb = new BasicThumb(imgUrl, 85, title, TEXT_MAX_LENGHT, true, new ClickListener() {
-                    public void onClick(Widget sender) {
-                        stateManager.gotoToken(token);
-                    }
-                });
+                BasicThumb thumb = new BasicThumb(imgUrl, session.getImgCropsize(), title, TEXT_MAX_LENGHT, true,
+                        new ClickListener() {
+                            public void onClick(Widget sender) {
+                                stateManager.gotoToken(token);
+                            }
+                        });
                 thumb.setHeight("100");
                 thumb.setWidth("100");
                 if (title.length() > TEXT_MAX_LENGHT) {
@@ -67,6 +72,6 @@
         } else {
             flowPanel.clear();
         }
-        super.setContent(flowPanel);
+        super.setWidgetAsContent(flowPanel, true);
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryFolderContentPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -43,8 +43,8 @@
 
     public GalleryFolderContentPresenter(StateManager stateManager, Session session, ActionContentToolbar toolbar,
             final ActionRegistry<StateToken> actionRegistry, I18nTranslationService i18n,
-            Provider<FileDownloadUtils> downloadUtils) {
-        super(GalleryClientTool.NAME, stateManager, session, toolbar, actionRegistry);
+            Provider<FileDownloadUtils> downloadUtils, Provider<FileDownloadUtils> downloadProvider) {
+        super(GalleryClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
         this.i18n = i18n;
         this.downloadUtils = downloadUtils;
     }

Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -22,32 +22,25 @@
 import org.ourproject.kune.gallery.client.GalleryClientTool;
 import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionContentToolbar;
-import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
 import org.ourproject.kune.platf.client.dto.StateContentDTO;
-import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
-import org.ourproject.kune.platf.client.ui.download.ImageSize;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPresenter;
 import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
 
 import com.calclab.suco.client.ioc.Provider;
 
 public class GalleryViewerPresenter extends FoldableContentPresenter implements GalleryViewer {
-    private GalleryViewerView view;
-    private final Provider<FileDownloadUtils> downloadProvider;
 
     public GalleryViewerPresenter(StateManager stateManager, Session session, I18nUITranslationService i18n,
             ActionContentToolbar toolbar, ContentActionRegistry actionRegistry,
             Provider<FileDownloadUtils> downloadProvider) {
-        super(GalleryClientTool.NAME, stateManager, session, toolbar, actionRegistry);
-        this.downloadProvider = downloadProvider;
+        super(GalleryClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
     }
 
     public void init(GalleryViewerView view) {
         super.init(view);
-        this.view = view;
     }
 
     @Override
@@ -56,28 +49,4 @@
         setContent(state, GalleryClientTool.TYPE_UPLOADEDFILE);
     }
 
-    private void setContent(StateContentDTO state, String uploadedfileType) {
-        String typeId = state.getTypeId();
-        String contentBody = state.getContent();
-        StateToken token = state.getStateToken();
-        BasicMimeTypeDTO mimeType = state.getMimeType();
-        if (typeId.equals(uploadedfileType)) {
-            if (mimeType != null) {
-                FileDownloadUtils fileDownloadUtils = downloadProvider.get();
-                if (mimeType.getType().equals("image")) {
-                    view.showImage(fileDownloadUtils.getImageUrl(token), fileDownloadUtils.getImageResizedUrl(token,
-                            ImageSize.sized));
-                } else if (mimeType.toString().equals("text/plain") || mimeType.toString().equals("application/pdf")) {
-                    view.setContent(contentBody);
-                } else {
-                    view.setContent("");
-                }
-            } else {
-                view.setContent("");
-            }
-        } else {
-            view.setContent(contentBody);
-        }
-        view.attach();
-    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerView.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/cnt/GalleryViewerView.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -22,9 +22,4 @@
 import org.ourproject.kune.workspace.client.cnt.AbstractContentView;
 
 public interface GalleryViewerView extends AbstractContentView {
-
-    void setContent(String content);
-
-    void showImage(String imageUrl, String imageResizedUrl);
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTO.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTO.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -52,10 +52,33 @@
         return type;
     }
 
+    /**
+     * Duplicate code in BMT
+     * 
+     * @return
+     */
     public boolean isImage() {
-        return getType().equals("image");
+        return type != null && type.equals("image");
     }
 
+    /**
+     * Duplicate code in BMT
+     * 
+     * @return
+     */
+    public boolean isPdf() {
+        return type != null && subtype != null && type.equals("application") && subtype.equals("pdf");
+    }
+
+    /**
+     * Duplicate code in BMTDTO
+     * 
+     * @return
+     */
+    public boolean isText() {
+        return type != null && subtype != null && type.equals("text") && subtype.equals("plain");
+    }
+
     public void setSubtype(final String subtype) {
         this.subtype = subtype;
     }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -384,7 +384,7 @@
                         $(I18nUITranslationService.class), $(StateManager.class), $(SiteSignOutLink.class),
                         $(DeferredCommandWrapper.class));
                 final TextEditorPanel panel = new TextEditorPanel(presenter, $(I18nTranslationService.class),
-                        $(WorkspaceSkeleton.class), $(ColorWebSafePalette.class));
+                        $(WorkspaceSkeleton.class), $(ColorWebSafePalette.class), false);
                 presenter.init(panel);
                 return presenter;
             }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/KuneUiUtils.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/KuneUiUtils.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/KuneUiUtils.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -77,7 +77,7 @@
         return tipHtml;
     }
 
-    public static String genQuickTipWithImage(String imageResizedUrl) {
+    public static String genQuickTipWithImage(String imageResizedUrl, int size) {
         return new Image(imageResizedUrl).toString();
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -53,6 +53,33 @@
         return type;
     }
 
+    /**
+     * Duplicate code in BMTDTO
+     * 
+     * @return
+     */
+    public boolean isImage() {
+        return type != null && type.equals("image");
+    }
+
+    /**
+     * Duplicate code in BMTDTO
+     * 
+     * @return
+     */
+    public boolean isPdf() {
+        return type != null && subtype != null && type.equals("application") && subtype.equals("pdf");
+    }
+
+    /**
+     * Duplicate code in BMTDTO
+     * 
+     * @return
+     */
+    public boolean isText() {
+        return type != null && subtype != null && type.equals("text") && subtype.equals("plain");
+    }
+
     public void setSubtype(final String subtype) {
         this.subtype = subtype;
     }
@@ -61,6 +88,7 @@
         this.type = type;
     }
 
+    @Override
     public String toString() {
         return subtype == null ? type : type + "/" + subtype;
     }

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/FileDownloadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/FileDownloadManager.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/FileDownloadManager.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -75,16 +75,24 @@
         String extension = FileUtils.getFileNameExtension(filename, true);
         BasicMimeType mimeType = cnt.getMimeType();
 
-        if (mimeType.getType().equals("image")) {
+        boolean isPdfAndNotDownload = mimeType.isPdf() && !download;
+        if (mimeType.isImage() || isPdfAndNotDownload) {
             String imgsizePrefix = imgsize == null ? "" : "." + imgsize;
             String filenameWithoutExtension = FileUtils.getFileNameWithoutExtension(filename, extension);
-            String filenameResized = filenameWithoutExtension + imgsizePrefix + extension;
+            String filenameResized = filenameWithoutExtension + imgsizePrefix
+                    + (isPdfAndNotDownload ? ".png" : extension);
             if (new File(absDir + filenameResized).exists()) {
                 // thumb can fail
                 filename = filenameResized;
             }
         }
 
+        // We will send the pdf thumb not the real pdf
+        if (isPdfAndNotDownload) {
+            extension = ".png";
+            mimeType = new BasicMimeType("image", "png");
+        }
+
         final String absFilename = absDir + filename;
 
         doBuildResp(resp, absFilename, cnt.getTitle(), mimeType, extension, download);
@@ -98,7 +106,7 @@
         resp.setContentLength((int) file.length());
         if (mimeType == null || download) {
             resp.setContentType("application/x-download");
-        } else if (mimeType.getType().equals("image")) {
+        } else if (mimeType.isImage()) {
             resp.setContentType(mimeType.toString());
         } else {
             resp.setContentType("application/x-download");

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/FileUploadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/FileUploadManager.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/FileUploadManager.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -42,6 +42,7 @@
 import org.ourproject.kune.platf.server.domain.User;
 import org.ourproject.kune.platf.server.manager.FileManager;
 import org.ourproject.kune.platf.server.properties.KuneProperties;
+import org.ourproject.kune.platf.server.utils.StringW;
 
 import com.google.inject.Inject;
 import com.google.inject.servlet.RequestScoped;
@@ -116,15 +117,21 @@
             log.info("Mimetype: " + basicMimeType);
             final String extension = FileUtils.getFileNameExtension(file.getName(), false);
 
-            if (basicMimeType.getType().equals("image")) {
-                generateThumbs(absDir, file.getName(), extension);
+            String preview = "";
+
+            if (basicMimeType.isImage()) {
+                generateThumbs(absDir, file.getName(), extension, false);
+            } else if (basicMimeType.isPdf()) {
+                generateThumbs(absDir, file.getName(), "png", true);
+            } else if (basicMimeType.isText()) {
+                String textPreview = new String(FileUtils.getBytesFromFile(file));
+                preview = "<pre>" + StringW.wordWrap(textPreview) + "</pre>";
             }
 
             // Persist
             final User user = userSession.getUser();
             final Container container = accessService.accessToContainer(ContentUtils.parseId(stateToken.getFolder()),
                     user, AccessRol.Editor);
-            final String preview = "Preview of this file (in development)";
             final Content content = contentManager.createContent(FileUtils.getFileNameWithoutExtension(file.getName(),
                     extension), preview, user, container, typeId);
             content.setMimeType(basicMimeType);
@@ -138,7 +145,7 @@
         }
     }
 
-    private void generateThumbs(String absDir, String filename, String extension) {
+    private void generateThumbs(String absDir, String filename, String extension, boolean isPdf) {
         try {
             String fileOrig = absDir + filename;
             String withoutExtension = FileUtils.getFileNameWithoutExtension(filename, extension);
@@ -146,6 +153,7 @@
             String resizeName = absDir + withoutExtension + "." + ImageSize.sized + "." + extension;
             String thumbName = absDir + withoutExtension + "." + ImageSize.thumb + "." + extension;
             String iconName = absDir + withoutExtension + "." + ImageSize.ico + "." + extension;
+            String previewName = absDir + withoutExtension + "." + extension;
 
             int resizeWidth = Integer.parseInt(kuneProperties.get(KuneProperties.IMAGES_RESIZEWIDTH));
             int thumbSize = Integer.parseInt(kuneProperties.get(KuneProperties.IMAGES_THUMBSIZE));
@@ -155,6 +163,9 @@
             ImageUtilsDefault.scaleImageToMax(fileOrig, resizeName, resizeWidth);
             ImageUtilsDefault.createThumb(fileOrig, thumbName, thumbSize, cropSize);
             ImageUtilsDefault.createThumb(fileOrig, iconName, iconSize);
+            if (isPdf) {
+                ImageUtilsDefault.createThumbFromPdf(fileOrig, previewName);
+            }
 
         } catch (NumberFormatException e) {
             log.error("Image sizes in kune.properties are not integers");

Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/ImageUtilsDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/ImageUtilsDefault.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/file/ImageUtilsDefault.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -46,7 +46,7 @@
         if (thumbDimension < cropDimension) {
             throw new IndexOutOfBoundsException("Thumb dimension must be bigger than crop dimension");
         }
-        MagickImage imageOrig = createImage(fileOrig);
+        MagickImage imageOrig = readImage(fileOrig);
         Dimension origDimension = imageOrig.getDimension();
         int origHeight = origDimension.height;
         int origWidth = origDimension.width;
@@ -57,6 +57,12 @@
         cropImage(scaled, fileDest, x, y, cropDimension, cropDimension);
     }
 
+    static public boolean createThumbFromPdf(String pdfFile, String newPngFile) throws MagickException {
+        MagickImage pdf = readImage(pdfFile);
+        MagickImage pdf1 = pdf.breakFrames()[0];
+        return writeImage(pdf1, newPngFile);
+    }
+
     public static boolean cropImage(String fileOrig, String fileDest, int x, int y, int width, int height)
             throws MagickException, FileNotFoundException {
         Rectangle rectangle = new Rectangle(x, y, width, height);
@@ -66,32 +72,42 @@
     public static boolean cropImage(String fileOrig, String fileDest, Rectangle rectangle) throws MagickException,
             FileNotFoundException {
         checkExist(fileOrig);
-        return cropImage(createImage(fileOrig), fileDest, rectangle);
+        return cropImage(readImage(fileOrig), fileDest, rectangle);
     }
 
     public static Dimension getDimension(String file) throws MagickException {
-        MagickImage imageOrig = createImage(file);
+        MagickImage imageOrig = readImage(file);
         return imageOrig.getDimension();
     }
 
+    /**
+     * FIXME: Not working, returns null always (bug)
+     * 
+     */
+    public static String getPage(String file) throws MagickException {
+        ImageInfo imageInfo = new ImageInfo(file);
+        new MagickImage(imageInfo);
+        return imageInfo.getPage();
+    }
+
     public static boolean scaleImage(String fileOrig, String fileDest, Dimension dimension) throws MagickException,
             FileNotFoundException {
         checkExist(fileOrig);
-        MagickImage imageOrig = createImage(fileOrig);
+        MagickImage imageOrig = readImage(fileOrig);
         return scaleImage(imageOrig, fileDest, (int) dimension.getWidth(), (int) dimension.getHeight());
     }
 
     public static boolean scaleImage(String fileOrig, String fileDest, int width, int height) throws MagickException,
             FileNotFoundException {
         checkExist(fileOrig);
-        MagickImage imageOrig = createImage(fileOrig);
+        MagickImage imageOrig = readImage(fileOrig);
         return scaleImage(imageOrig, fileDest, width, height);
     }
 
     public static boolean scaleImageToMax(String fileOrig, String fileDest, int maxSize) throws MagickException,
             FileNotFoundException {
         checkExist(fileOrig);
-        MagickImage imageOrig = createImage(fileOrig);
+        MagickImage imageOrig = readImage(fileOrig);
         Dimension origDimension = imageOrig.getDimension();
         int origHeight = origDimension.height;
         int origWidth = origDimension.width;
@@ -130,12 +146,14 @@
     }
 
     private static ImageInfo createEmptyImageInfo() throws MagickException {
-        ImageInfo info = new ImageInfo();
-        return info;
+        ImageInfo imageInfo = new ImageInfo();
+        return imageInfo;
     }
 
-    private static MagickImage createImage(String file) throws MagickException {
-        return new MagickImage(new ImageInfo(file));
+    private static ImageInfo createEmptyImageInfoWithNoPage() throws MagickException {
+        ImageInfo imageInfo = createEmptyImageInfo();
+        imageInfo.setPage("0x0+0+0");
+        return imageInfo;
     }
 
     private static boolean cropImage(MagickImage fileOrig, String fileDest, int x, int y, int width, int height)
@@ -146,9 +164,16 @@
 
     private static boolean cropImage(MagickImage fileOrig, String fileDest, Rectangle rectangle) throws MagickException {
         MagickImage cropped = fileOrig.cropImage(rectangle);
-        return writeImage(cropped, fileDest);
+        cropped.setFileName(fileDest);
+        ImageInfo imageInfo = createEmptyImageInfoWithNoPage();
+        return cropped.writeImage(imageInfo);
     }
 
+    private static MagickImage readImage(String file) throws MagickException {
+        ImageInfo imageInfo = new ImageInfo(file);
+        return new MagickImage(imageInfo);
+    }
+
     private static MagickImage scaleImage(MagickImage imageOrig, int width, int height) throws MagickException {
         return imageOrig.scaleImage(width, height);
     }

Added: trunk/src/main/java/org/ourproject/kune/platf/server/utils/StringW.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/utils/StringW.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/utils/StringW.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -0,0 +1,305 @@
+/*
+ * Copyright 1999,2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Copied from GenerationJava Core Library.
+//package com.generationjava.lang;
+// copied in kune from:
+// http://svn.apache.org/repos/asf/jakarta/taglibs/proper/string/trunk/src/org/apache/taglibs/string/util/StringW.java
+package org.ourproject.kune.platf.server.utils;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * A set of String library static methods. While extending String or
+ * StringBuffer would have been the nicest solution, that is not possible, so a
+ * simple set of static methods seems the most workable.
+ * 
+ * Method ideas have so far been taken from the PHP4, Ruby and .NET languages.
+ * 
+ * @author bayard at generationjava.com
+ * @version 0.4 20010812
+ */
+final public class StringW {
+
+    /**
+     * Quote a string so that it may be used in a regular expression without any
+     * parts of the string being considered as a part of the regular
+     * expression's control characters.
+     */
+    static public String quoteRegularExpression(String str) {
+        // replace ? + * / . ^ $ as long as they're not in character
+        // class. so must be done by hand
+        char[] chrs = str.toCharArray();
+        int sz = chrs.length;
+        StringBuffer buffer = new StringBuffer(2 * sz);
+        for (int i = 0; i < sz; i++) {
+            switch (chrs[i]) {
+            case '[':
+            case ']':
+            case '?':
+            case '+':
+            case '*':
+            case '/':
+            case '.':
+            case '^':
+            case '$':
+                buffer.append("\\");
+            default:
+                buffer.append(chrs[i]);
+            }
+        }
+        return buffer.toString();
+    }
+
+    /**
+     * Truncates a string nicely. It will search for the first space after the
+     * lower limit and truncate the string there. It will also append any string
+     * passed as a parameter to the end of the string. The hard limit can be
+     * specified to forcibily truncate a string (in the case of an extremely
+     * long word or such). All HTML/XML markup will be stripped from the string
+     * prior to processing for truncation.
+     * 
+     * @param str
+     *            String the string to be truncated.
+     * @param lower
+     *            int value of the lower limit.
+     * @param upper
+     *            int value of the upper limit, -1 if no limit is desired. If
+     *            the uppper limit is lower than the lower limit, it will be
+     *            adjusted to be same as the lower limit.
+     * @param appendToEnd
+     *            String to be appended to the end of the truncated string. This
+     *            is appended ONLY if the string was indeed truncated. The
+     *            append is does not count towards any lower/upper limits.
+     * 
+     * @author timster at mac.com
+     */
+    public static String truncateNicely(String str, int lower, int upper, String appendToEnd) {
+        // strip markup from the string
+        str = XmlW.removeXml(str);
+
+        // unescape temporarily for length handling
+        str = XmlW.unescapeXml(str);
+
+        // quickly adjust the upper if it is set lower than 'lower'
+        if (upper < lower) {
+            upper = lower;
+        }
+
+        // now determine if the string fits within the upper limit
+        // if it does, go straight to return, do not pass 'go' and collect $200
+        if (str.length() > upper) {
+            // the magic location int
+            int loc;
+
+            // first we determine where the next space appears after lower
+            loc = str.lastIndexOf(' ', upper);
+
+            // now we'll see if the location is greater than the lower limit
+            if (loc >= lower) {
+                // yes it was, so we'll cut it off here
+                str = str.substring(0, loc);
+            } else {
+                // no it wasnt, so we'll cut it off at the upper limit
+                str = str.substring(0, upper);
+            }
+
+            // the string was truncated, so we append the appendToEnd String
+            str = str + appendToEnd;
+        }
+
+        // escape after finished processing string
+        str = XmlW.escapeXml(str);
+
+        return str;
+    }
+
+    /**
+     * Create a word-wrapped version of a String. Wrap at 80 characters and use
+     * newlines as the delimiter. If a word is over 80 characters long use a -
+     * sign to split it.
+     */
+    static public String wordWrap(String str) {
+        return wordWrap(str, 80, "\n", "-", true);
+    }
+
+    /**
+     * Create a word-wrapped version of a String. Wrap at a specified width and
+     * use newlines as the delimiter. If a word is over the width in lenght use
+     * a - sign to split it.
+     */
+    static public String wordWrap(String str, int width) {
+        return wordWrap(str, width, "\n", "-", true);
+    }
+
+    /**
+     * Word-wrap a string.
+     * 
+     * @param str
+     *            String to word-wrap
+     * @param width
+     *            int to wrap at
+     * @param delim
+     *            String to use to separate lines
+     * @param split
+     *            String to use to split a word greater than width long
+     * 
+     * @return String that has been word wrapped (with the delim inside width
+     *         boundaries)
+     */
+    static public String wordWrap(String str, int width, String delim, String split) {
+        return wordWrap(str, width, delim, split, true);
+    }
+
+    /**
+     * Word-wrap a string.
+     * 
+     * @param str
+     *            String to word-wrap
+     * @param width
+     *            int to wrap at
+     * @param delim
+     *            String to use to separate lines
+     * @param split
+     *            String to use to split a word greater than width long
+     * @param delimInside
+     *            wheter or not delim should be included in chunk before length
+     *            reaches width.
+     * 
+     * @return String that has been word wrapped
+     */
+    static public String wordWrap(String str, int width, String delim, String split, boolean delimInside) {
+        int sz = str.length();
+
+        // System.err.println( ">>>> inside: " + delimInside + " sz : " + sz );
+
+        // / shift width up one. mainly as it makes the logic easier
+        width++;
+
+        // our best guess as to an initial size
+        StringBuffer buffer = new StringBuffer(sz / width * delim.length() + sz);
+
+        // every line might include a delim on the end
+        // System.err.println( "width before: "+ width );
+        if (delimInside) {
+            width = width - delim.length();
+        } else {
+            width--;
+        }
+        // System.err.println( "width after: "+ width );
+
+        int idx = -1;
+        String substr = null;
+
+        // beware: i is rolled-back inside the loop
+        for (int i = 0; i < sz; i += width) {
+
+            // on the last line
+            if (i > sz - width) {
+                buffer.append(str.substring(i));
+                // System.err.print("LAST-LINE: "+str.substring(i));
+                break;
+            }
+
+            // System.err.println("loop[i] is: "+i);
+            // the current line
+            substr = str.substring(i, i + width);
+            // System.err.println( "substr: " + substr );
+
+            // is the delim already on the line
+            idx = substr.indexOf(delim);
+            // System.err.println( "i: " + i + " idx : " + idx );
+            if (idx != -1) {
+                buffer.append(substr.substring(0, idx));
+                // System.err.println("Substr: '"substr.substring(0,idx)+"'");
+                buffer.append(delim);
+                i -= width - idx - delim.length();
+
+                // System.err.println("loop[i] is now: "+i);
+                // System.err.println("ounfd-whitespace: '"+substr.charAt(idx+1)+"'.");
+                // Erase a space after a delim. Is this too obscure?
+                if (substr.length() > idx + 1) {
+                    if (substr.charAt(idx + 1) != '\n') {
+                        if (Character.isWhitespace(substr.charAt(idx + 1))) {
+                            i++;
+                        }
+                    }
+                }
+                // System.err.println("i -= "+width+"-"+idx);
+                continue;
+            }
+
+            idx = -1;
+
+            // figure out where the last space is
+            char[] chrs = substr.toCharArray();
+            for (int j = width; j > 0; j--) {
+                if (Character.isWhitespace(chrs[j - 1])) {
+                    idx = j;
+                    // System.err.println("Found whitespace: "+idx);
+                    break;
+                }
+            }
+
+            // idx is the last whitespace on the line.
+            // System.err.println("idx is "+idx);
+            if (idx == -1) {
+                for (int j = width; j > 0; j--) {
+                    if (chrs[j - 1] == '-') {
+                        idx = j;
+                        // System.err.println("Found Dash: "+idx);
+                        break;
+                    }
+                }
+                if (idx == -1) {
+                    buffer.append(substr);
+                    buffer.append(delim);
+                    // System.err.print(substr);
+                    // System.err.print(delim);
+                } else {
+                    if (idx != width) {
+                        idx++;
+                    }
+                    buffer.append(substr.substring(0, idx));
+                    buffer.append(delim);
+                    // System.err.print(substr.substring(0,idx));
+                    // System.err.print(delim);
+                    i -= width - idx;
+                }
+            } else {
+                /*
+                 * if(force) { if(idx == width-1) { buffer.append(substr);
+                 * buffer.append(delim); } else { // stick a split in. int
+                 * splitsz = split.length();
+                 * buffer.append(substr.substring(0,width-splitsz));
+                 * buffer.append(split); buffer.append(delim); i -= splitsz; } }
+                 * else {
+                 */
+                // insert spaces
+                buffer.append(substr.substring(0, idx));
+                buffer.append(StringUtils.repeat(" ", width - idx));
+                // System.err.print(substr.substring(0,idx));
+                // System.err.print(StringUtils.repeat(" ",width-idx));
+                buffer.append(delim);
+                // System.err.print(delim);
+                // System.err.println("i -= "+width+"-"+idx);
+                i -= width - idx;
+                // }
+            }
+        }
+        // System.err.println("\n*************");
+        return buffer.toString();
+    }
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/server/utils/XmlW.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/utils/XmlW.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/utils/XmlW.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -0,0 +1,161 @@
+/*
+ * Copyright 1999,2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Copied from GenerationJava Core Library.
+//package com.generationjava.web;
+// Copied in kune from:
+// http://svn.apache.org/repos/asf/jakarta/taglibs/proper/string/trunk/src/org/apache/taglibs/string/util/XmlW.java
+package org.ourproject.kune.platf.server.utils;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * XML helping static methods.
+ * 
+ * @author bayard at generationjava.com
+ * @version 0.4 20010812
+ */
+final public class XmlW {
+
+    static public String escapeXml(String str) {
+        str = StringUtils.replace(str, "&", "&amp;");
+        str = StringUtils.replace(str, "<", "&lt;");
+        str = StringUtils.replace(str, ">", "&gt;");
+        str = StringUtils.replace(str, "\"", "&quot;");
+        str = StringUtils.replace(str, "'", "&apos;");
+        return str;
+    }
+
+    static public String getAttribute(String attribute, String text) {
+        return getAttribute(attribute, text, 0);
+    }
+
+    static public String getAttribute(String attribute, String text, int idx) {
+        int close = text.indexOf(">", idx);
+        int attrIdx = text.indexOf(attribute + "=\"", idx);
+        if (attrIdx == -1) {
+            return null;
+        }
+        if (attrIdx > close) {
+            return null;
+        }
+        int attrStartIdx = attrIdx + attribute.length() + 2;
+        int attrCloseIdx = text.indexOf("\"", attrStartIdx);
+        if (attrCloseIdx > close) {
+            return null;
+        }
+        return unescapeXml(text.substring(attrStartIdx, attrCloseIdx));
+    }
+
+    static public String getContent(String tag, String text) {
+        int idx = XmlW.getIndexOpeningTag(tag, text);
+        if (idx == -1) {
+            return "";
+        }
+        text = text.substring(idx);
+        int end = XmlW.getIndexClosingTag(tag, text);
+        idx = text.indexOf('>');
+        if (idx == -1) {
+            return "";
+        }
+        return text.substring(idx + 1, end);
+    }
+
+    // Pass in "para" and a string that starts with
+    // <para> and it will return the index of the matching </para>
+    // It assumes well-formed xml. Or well enough.
+    static public int getIndexClosingTag(String tag, String text) {
+        return getIndexClosingTag(tag, text, 0);
+    }
+
+    static public int getIndexClosingTag(String tag, String text, int start) {
+        String open = "<" + tag;
+        String close = "</" + tag + ">";
+        // System.err.println("OPEN: "+open);
+        // System.err.println("CLOSE: "+close);
+        int closeSz = close.length();
+        int nextCloseIdx = text.indexOf(close, start);
+        // System.err.println("first close: "+nextCloseIdx);
+        if (nextCloseIdx == -1) {
+            return -1;
+        }
+        int count = StringUtils.countMatches(text.substring(start, nextCloseIdx), open);
+        // System.err.println("count: "+count);
+        if (count == 0) {
+            return -1; // tag is never opened
+        }
+        int expected = 1;
+        while (count != expected) {
+            nextCloseIdx = text.indexOf(close, nextCloseIdx + closeSz);
+            if (nextCloseIdx == -1) {
+                return -1;
+            }
+            count = StringUtils.countMatches(text.substring(start, nextCloseIdx), open);
+            expected++;
+        }
+        return nextCloseIdx;
+    }
+
+    static public int getIndexOpeningTag(String tag, String text) {
+        return getIndexOpeningTag(tag, text, 0);
+    }
+
+    /**
+     * Remove any xml tags from a String. Same as HtmlW's method.
+     */
+    static public String removeXml(String str) {
+        int sz = str.length();
+        StringBuffer buffer = new StringBuffer(sz);
+        // boolean inString = false;
+        boolean inTag = false;
+        for (int i = 0; i < sz; i++) {
+            char ch = str.charAt(i);
+            if (ch == '<') {
+                inTag = true;
+            } else if (ch == '>') {
+                inTag = false;
+                continue;
+            }
+            if (!inTag) {
+                buffer.append(ch);
+            }
+        }
+        return buffer.toString();
+    }
+
+    static public String unescapeXml(String str) {
+        str = StringUtils.replace(str, "&amp;", "&");
+        str = StringUtils.replace(str, "&lt;", "<");
+        str = StringUtils.replace(str, "&gt;", ">");
+        str = StringUtils.replace(str, "&quot;", "\"");
+        str = StringUtils.replace(str, "&apos;", "'");
+        return str;
+    }
+
+    static private int getIndexOpeningTag(String tag, String text, int start) {
+        // consider whitespace?
+        int idx = text.indexOf("<" + tag, start);
+        if (idx == -1) {
+            return -1;
+        }
+        char next = text.charAt(idx + 1 + tag.length());
+        if ((next == '>') || Character.isWhitespace(next)) {
+            return idx;
+        } else {
+            return getIndexOpeningTag(tag, text, idx + 1);
+        }
+    }
+
+}

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -100,7 +100,7 @@
 
         createEditAction(TYPE_WIKIPAGE);
 
-        createTranslateAction(TYPE_FOLDER, TYPE_UPLOADEDFILE, TYPE_WIKIPAGE);
+        createTranslateAction(TYPE_FOLDER, TYPE_WIKIPAGE);
 
         createDelContainerAction("Delete folder", parentMenuTitleCtx, containersNoRoot);
         createDelContentAction(parentMenuTitle, i18n.t("Delete"), contents);

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -108,7 +108,7 @@
             public WikiFolderContent create() {
                 final WikiFolderContentPresenter presenter = new WikiFolderContentPresenter($(StateManager.class),
                         $(Session.class), $(ActionContentToolbar.class), $(ContentActionRegistry.class),
-                        $(I18nTranslationService.class));
+                        $(I18nTranslationService.class), $$(FileDownloadUtils.class));
                 final WikiFolderContentView view = new WikiFolderContentPanel($(WorkspaceSkeleton.class),
                         $(I18nTranslationService.class));
                 presenter.init(view);

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientTool.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientTool.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -46,7 +46,7 @@
         registerRateableTypes(TYPE_UPLOADEDFILE, TYPE_WIKIPAGE);
         registerRenamableTypes(TYPE_FOLDER, TYPE_UPLOADEDFILE, TYPE_WIKIPAGE);
         registerTageableTypes(TYPE_UPLOADEDFILE, TYPE_WIKIPAGE);
-        registerTranslatableTypes(TYPE_FOLDER, TYPE_UPLOADEDFILE, TYPE_WIKIPAGE);
+        registerTranslatableTypes(TYPE_FOLDER, TYPE_WIKIPAGE);
 
         registerIcons();
     }

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiFolderContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiFolderContentPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiFolderContentPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -27,17 +27,21 @@
 import org.ourproject.kune.platf.client.services.I18nTranslationService;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.wiki.client.WikiClientTool;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPresenter;
 
+import com.calclab.suco.client.ioc.Provider;
+
 public class WikiFolderContentPresenter extends FoldableContentPresenter implements WikiFolderContent {
 
     private WikiFolderContentView view;
     private final I18nTranslationService i18n;
 
     public WikiFolderContentPresenter(StateManager stateManager, Session session, ActionContentToolbar toolbar,
-            final ActionRegistry<StateToken> actionRegistry, I18nTranslationService i18n) {
-        super(WikiClientTool.NAME, stateManager, session, toolbar, actionRegistry);
+            final ActionRegistry<StateToken> actionRegistry, I18nTranslationService i18n,
+            Provider<FileDownloadUtils> downloadProvider) {
+        super(WikiClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
         this.i18n = i18n;
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -19,35 +19,28 @@
  */
 package org.ourproject.kune.wiki.client.cnt;
 
-import org.ourproject.kune.wiki.client.WikiClientTool;
 import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionContentToolbar;
-import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
 import org.ourproject.kune.platf.client.dto.StateContentDTO;
-import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
-import org.ourproject.kune.platf.client.ui.download.ImageSize;
+import org.ourproject.kune.wiki.client.WikiClientTool;
 import org.ourproject.kune.workspace.client.cnt.FoldableContentPresenter;
 import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
 
 import com.calclab.suco.client.ioc.Provider;
 
 public class WikiViewerPresenter extends FoldableContentPresenter implements WikiViewer {
-    private WikiViewerView view;
-    private final Provider<FileDownloadUtils> downloadProvider;
 
     public WikiViewerPresenter(StateManager stateManager, Session session, I18nUITranslationService i18n,
             ActionContentToolbar toolbar, ContentActionRegistry actionRegistry,
             Provider<FileDownloadUtils> downloadProvider) {
-        super(WikiClientTool.NAME, stateManager, session, toolbar, actionRegistry);
-        this.downloadProvider = downloadProvider;
+        super(WikiClientTool.NAME, stateManager, session, toolbar, actionRegistry, downloadProvider);
     }
 
     public void init(WikiViewerView view) {
         super.init(view);
-        this.view = view;
     }
 
     @Override
@@ -55,29 +48,4 @@
         super.setState(state);
         setContent(state, WikiClientTool.TYPE_UPLOADEDFILE);
     }
-
-    private void setContent(StateContentDTO state, String uploadedfileType) {
-        String typeId = state.getTypeId();
-        String contentBody = state.getContent();
-        StateToken token = state.getStateToken();
-        BasicMimeTypeDTO mimeType = state.getMimeType();
-        if (typeId.equals(uploadedfileType)) {
-            if (mimeType != null) {
-                FileDownloadUtils fileDownloadUtils = downloadProvider.get();
-                if (mimeType.getType().equals("image")) {
-                    view.showImage(fileDownloadUtils.getImageUrl(token), fileDownloadUtils.getImageResizedUrl(token,
-                            ImageSize.sized));
-                } else if (mimeType.toString().equals("text/plain") || mimeType.toString().equals("application/pdf")) {
-                    view.setContent(contentBody);
-                } else {
-                    view.setContent("");
-                }
-            } else {
-                view.setContent("");
-            }
-        } else {
-            view.setContent(contentBody);
-        }
-        view.attach();
-    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerView.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/cnt/WikiViewerView.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -22,9 +22,4 @@
 import org.ourproject.kune.workspace.client.cnt.AbstractContentView;
 
 public interface WikiViewerView extends AbstractContentView {
-
-    void setContent(String content);
-
-    void showImage(String imageUrl, String imageResizedUrl);
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -2,7 +2,7 @@
 
 public abstract class AbstractContentPresenter {
 
-    private AbstractContentView view;
+    protected AbstractContentView view;
 
     public AbstractContentPresenter() {
     }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentView.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/AbstractContentView.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -1,11 +1,22 @@
 package org.ourproject.kune.workspace.client.cnt;
 
+import com.google.gwt.user.client.ui.Widget;
+
 public interface AbstractContentView {
 
+    public void setRawContent(final String content);
+
     void attach();
 
     void detach();
 
+    void setContent(String content, boolean showPreviewMsg);
+
     void setInfo(String info);
 
+    void setNoPreview();
+
+    void setWidgetAsContent(final Widget widget, boolean setDefMargins);
+
+    void showImage(String imageUrl, String imageResizedUrl, boolean showPreviewMsg);
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPanel.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPanel.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -1,35 +1,43 @@
 package org.ourproject.kune.workspace.client.cnt;
 
 import org.ourproject.kune.platf.client.services.I18nTranslationService;
+import org.ourproject.kune.platf.client.services.Images;
+import org.ourproject.kune.platf.client.ui.IconLabel;
 import org.ourproject.kune.platf.client.ui.KuneUiUtils;
+import org.ourproject.kune.platf.client.ui.RoundedPanel;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
 
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
 
-public abstract class FoldableContentPanel extends AbstractContentPanel {
+public abstract class FoldableContentPanel extends AbstractContentPanel implements AbstractContentView {
 
+    private static final String DEF_CONTENT_MARGINS_STYLE = "kune-Margin-7-trbl";
     private final I18nTranslationService i18n;
+    private final RoundedPanel previewPanel;
+    private final IconLabel previewLabel;
 
     public FoldableContentPanel(final WorkspaceSkeleton ws, I18nTranslationService i18n) {
         super(ws);
         this.i18n = i18n;
+        previewLabel = new IconLabel(Images.App.getInstance().info(), "");
+        previewLabel.addStyleName("k-preview-msg-lab");
+        previewPanel = new RoundedPanel(previewLabel, RoundedPanel.ALL, 2);
+        previewPanel.setCornerStyleName("k-preview-msg");
+        previewPanel.addStyleName("kune-Margin-7-b");
     }
 
-    public void setContent(final String content) {
+    public void setContent(String content, boolean showPreviewMsg) {
+        final VerticalPanel vp = createPreviewVp(showPreviewMsg);
         final HTML html = new HTML(content);
-        setContent(html);
+        vp.add(html);
+        setWidgetAsContent(vp, true);
     }
 
-    public void setContent(final Widget widget) {
-        setDefStyle(widget);
-        setWidget(widget);
-        attach();
-    }
-
     public void setInfo(String info) {
         setLabel(info);
     }
@@ -40,7 +48,27 @@
         setWidget(label);
     }
 
-    public void showImage(String imageUrl, String imageResizedUrl) {
+    public void setNoPreview() {
+        VerticalPanel vp = createPreviewVp(true);
+        setNoPreviewLabelMsg();
+        setWidgetAsContent(vp, true);
+    }
+
+    public void setRawContent(final String content) {
+        final HTML html = new HTML(content);
+        setDefStyle(html);
+        setContent(html);
+    }
+
+    public void setWidgetAsContent(final Widget widget, boolean setDefMargins) {
+        if (setDefMargins) {
+            widget.addStyleName(DEF_CONTENT_MARGINS_STYLE);
+        }
+        setContent(widget);
+    }
+
+    public void showImage(String imageUrl, String imageResizedUrl, boolean showPreviewMsg) {
+        final VerticalPanel vp = createPreviewVp(showPreviewMsg);
         final Image imgOrig = new Image(imageUrl);
         final Image imgResized = new Image(imageResizedUrl);
         KuneUiUtils.setQuickTip(imgOrig, i18n.t("Click to zoom out"));
@@ -51,25 +79,45 @@
         imgResized.addStyleName("kune-pointer");
         imgResized.addClickListener(new ClickListener() {
             public void onClick(Widget sender) {
-                detach();
-                setWidget(imgOrig);
-                attach();
+                imgResized.removeFromParent();
+                vp.add(imgOrig);
             }
         });
         imgOrig.addClickListener(new ClickListener() {
             public void onClick(Widget sender) {
-                detach();
-                setWidget(imgResized);
-                attach();
+                imgOrig.removeFromParent();
+                vp.add(imgResized);
             }
         });
-        setWidget(imgResized);
-        attach();
+        vp.add(imgResized);
+        setWidgetAsContent(vp, true);
         Image.prefetch(imageUrl);
     }
 
+    private VerticalPanel createPreviewVp(boolean showPreviewMsg) {
+        final VerticalPanel vp = new VerticalPanel();
+        if (showPreviewMsg) {
+            setDefPreviewMsg();
+            vp.add(previewPanel);
+        }
+        return vp;
+    }
+
+    private void setContent(final Widget widget) {
+        setWidget(widget);
+        attach();
+    }
+
+    private void setDefPreviewMsg() {
+        previewLabel.setText(i18n.t("This is only a preview, download it to get the complete file"));
+    }
+
     private void setDefStyle(final Widget widget) {
         widget.setStyleName("kune-Content-Main");
-        widget.addStyleName("kune-Margin-7-trbl");
+        widget.addStyleName(DEF_CONTENT_MARGINS_STYLE);
     }
+
+    private void setNoPreviewLabelMsg() {
+        previewLabel.setText(i18n.t("Preview not available"));
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -4,13 +4,17 @@
 import org.ourproject.kune.platf.client.actions.ActionRegistry;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionContentToolbar;
 import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
+import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
 import org.ourproject.kune.platf.client.dto.StateAbstractDTO;
 import org.ourproject.kune.platf.client.dto.StateContainerDTO;
 import org.ourproject.kune.platf.client.dto.StateContentDTO;
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
+import org.ourproject.kune.platf.client.ui.download.ImageSize;
 
+import com.calclab.suco.client.ioc.Provider;
 import com.calclab.suco.client.listener.Listener;
 
 public abstract class FoldableContentPresenter extends AbstractContentPresenter implements FoldableContent {
@@ -19,13 +23,16 @@
     private final ActionRegistry<StateToken> actionRegistry;
     protected final Session session;
     private final ActionContentToolbar toolbar;
+    private final Provider<FileDownloadUtils> downloadProvider;
 
     public FoldableContentPresenter(final String toolName, StateManager stateManager, Session session,
-            final ActionContentToolbar toolbar, ActionRegistry<StateToken> actionRegistry) {
+            final ActionContentToolbar toolbar, ActionRegistry<StateToken> actionRegistry,
+            Provider<FileDownloadUtils> downloadProvider) {
         this.toolName = toolName;
         this.session = session;
         this.toolbar = toolbar;
         this.actionRegistry = actionRegistry;
+        this.downloadProvider = downloadProvider;
         stateManager.onStateChanged(new Listener<StateAbstractDTO>() {
             public void onEvent(final StateAbstractDTO state) {
                 setState(state);
@@ -41,6 +48,34 @@
         setState(session.getContentState());
     }
 
+    protected void setContent(StateContentDTO state, String uploadedfileType) {
+        String typeId = state.getTypeId();
+        String contentBody = state.getContent();
+        StateToken token = state.getStateToken();
+        BasicMimeTypeDTO mimeType = state.getMimeType();
+        if (typeId.equals(uploadedfileType)) {
+            if (mimeType != null) {
+                FileDownloadUtils fileDownloadUtils = downloadProvider.get();
+                if (mimeType.isImage()) {
+                    view.showImage(fileDownloadUtils.getImageUrl(token), fileDownloadUtils.getImageResizedUrl(token,
+                            ImageSize.sized), false);
+                } else if (mimeType.isPdf()) {
+                    view.showImage(fileDownloadUtils.getImageUrl(token), fileDownloadUtils.getImageResizedUrl(token,
+                            ImageSize.sized), true);
+                } else if (mimeType.isText()) {
+                    view.setContent(contentBody, true);
+                } else {
+                    view.setNoPreview();
+                }
+            } else {
+                view.setNoPreview();
+            }
+        } else {
+            view.setRawContent(contentBody);
+        }
+        view.attach();
+    }
+
     protected void setState(StateAbstractDTO state) {
         toolbar.detach();
         if (state instanceof StateContainerDTO) {

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -332,9 +332,9 @@
     }
 
     private String getTooltip(StateToken token, BasicMimeTypeDTO mimeType) {
-        if (mimeType != null && mimeType.getType().equals("image")) {
+        if (mimeType != null && (mimeType.isImage() || mimeType.isPdf())) {
             return KuneUiUtils.genQuickTipWithImage(downloadUtilsProvider.get().getImageResizedUrl(token,
-                    ImageSize.thumb));
+                    ImageSize.thumb), session.getImgCropsize());
         } else {
             return null;
         }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -45,7 +45,7 @@
     private final WorkspaceSkeleton ws;
 
     public TextEditorPanel(final TextEditorPresenter presenter, final I18nTranslationService i18n,
-            final WorkspaceSkeleton ws, final ColorWebSafePalette colorPalette) {
+            final WorkspaceSkeleton ws, final ColorWebSafePalette colorPalette, boolean permitHtmlButton) {
         this.presenter = presenter;
         this.i18n = i18n;
         this.ws = ws;
@@ -53,14 +53,14 @@
         mainPanel.setWidth("100%");
 
         gwtRTarea = new RichTextArea();
-        gwtRTarea.setWidth("97%");
+        gwtRTarea.setWidth("96%");
         gwtRTarea.setHeight("100%");
         gwtRTarea.addStyleName("kune-TexEditorPanel-TextArea");
         gwtRTarea.ensureDebugId(TEXT_AREA);
 
         final Toolbar editorTopBar = new Toolbar();
         editorTopBar.getPanel().setWidth("auto");
-        textEditorToolbar = new TextEditorToolbar(gwtRTarea, presenter, colorPalette, i18n);
+        textEditorToolbar = new TextEditorToolbar(gwtRTarea, presenter, colorPalette, i18n, permitHtmlButton);
         editorTopBar.add(textEditorToolbar);
         editorTopBar.addStyleName("k-toolbar-bottom-line");
 

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -115,6 +115,8 @@
                         colorPalette.hide();
                     }
                 });
+            } else if (sender == editHtml) {
+                presenter.onEditHTML();
             } else if (sender == fontColor) {
                 colorPalette.show(sender.getAbsoluteLeft(), sender.getAbsoluteTop() + 20, new Listener<String>() {
                     public void onEvent(final String color) {
@@ -264,6 +266,7 @@
     private ToggleButton subscript;
     private ToggleButton superscript;
     private ToggleButton strikethrough;
+    private ToggleButton editHtml;
     private PushButton indent;
     private PushButton outdent;
     private PushButton justifyLeft;
@@ -291,7 +294,7 @@
      *            the rich text area to be controlled
      */
     public TextEditorToolbar(final RichTextArea richText, final TextEditorPresenter presenter,
-            final ColorWebSafePalette colorPalette, final I18nTranslationService i18n) {
+            final ColorWebSafePalette colorPalette, final I18nTranslationService i18n, boolean permitEditHtml) {
         this.richText = richText;
         this.colorPalette = colorPalette;
         this.i18n = i18n;
@@ -348,10 +351,9 @@
             richText.addClickListener(listener);
         }
 
-        // if (basic != null) {
-        // topPanel.add(editHtml = createToggleButton(images.editHtml(),
-        // i18n.t("Edit HTML")));
-        // }
+        if (basic != null && permitEditHtml) {
+            topPanel.add(editHtml = createToggleButton(images.edithtml(), i18n.t("Edit HTML")));
+        }
 
         // super.setVisible(false);
     }
@@ -359,28 +361,28 @@
     public void editHTML(final boolean edit) {
         final boolean enable = !edit;
         if (basic != null) {
-            bold.setEnabled(enable);
-            italic.setEnabled(enable);
-            underline.setEnabled(enable);
-            subscript.setEnabled(enable);
-            superscript.setEnabled(enable);
-            justifyLeft.setEnabled(enable);
-            justifyCenter.setEnabled(enable);
-            justifyRight.setEnabled(enable);
-            backColor.setEnabled(enable);
-            fontColor.setEnabled(enable);
+            bold.setVisible(enable);
+            italic.setVisible(enable);
+            underline.setVisible(enable);
+            subscript.setVisible(enable);
+            superscript.setVisible(enable);
+            justifyLeft.setVisible(enable);
+            justifyCenter.setVisible(enable);
+            justifyRight.setVisible(enable);
+            backColor.setVisible(enable);
+            fontColor.setVisible(enable);
         }
         if (extended != null) {
-            strikethrough.setEnabled(enable);
-            indent.setEnabled(enable);
-            outdent.setEnabled(enable);
-            insertImage.setEnabled(enable);
-            createLink.setEnabled(enable);
-            removeLink.setEnabled(enable);
-            ol.setEnabled(enable);
-            ul.setEnabled(enable);
-            hr.setEnabled(enable);
-            removeFormat.setEnabled(enable);
+            strikethrough.setVisible(enable);
+            indent.setVisible(enable);
+            outdent.setVisible(enable);
+            insertImage.setVisible(enable);
+            createLink.setVisible(enable);
+            removeLink.setVisible(enable);
+            ol.setVisible(enable);
+            ul.setVisible(enable);
+            hr.setVisible(enable);
+            removeFormat.setVisible(enable);
             fonts.setVisible(enable);
             fontSizes.setVisible(enable);
         }
@@ -416,8 +418,7 @@
 
         KuneUiUtils.setQuickTip(menu, i18n.t("Font Type"));
         menu.addItem(images.charfontname().getHTML(), true, submenu);
-        for (int i = 0; i < fontName.length; i++) {
-            final String f = fontName[i];
+        for (final String f : fontName) {
             submenu.addItem("<span style=\"font-family: " + f + "\">" + f + "</span>", true, new Command() {
                 public void execute() {
                     basic.setFontName(f);

Modified: trunk/src/main/resources/kune.properties
===================================================================
--- trunk/src/main/resources/kune.properties	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/main/resources/kune.properties	2008-12-05 17:53:45 UTC (rev 985)
@@ -30,6 +30,7 @@
 kune.upload.gallerypermittedextensions = jpg,jpeg,png,gif,bmp,svg,avi,mpg,mpeg,ogg,mov,tif,tiff,mp3,wav
 kune.upload.maxfilesizeinmegas = 10
 # Images are resized to thumbsize pixels and later cropped (centered) to cropsize
+# (integer values)
 kune.images.resizewidth = 400
 kune.images.thumbsize = 100
 kune.images.cropsize = 85

Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/file/ImageUtilsDefaultTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/file/ImageUtilsDefaultTest.java	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/file/ImageUtilsDefaultTest.java	2008-12-05 17:53:45 UTC (rev 985)
@@ -26,8 +26,9 @@
 public class ImageUtilsDefaultTest {
 
     private static final String IMG_PATH = "src/test/java/org/ourproject/kune/platf/server/manager/file/";
-    private static String[] images = { "orig.png", "orig.gif", "orig.jpg", "orig.tiff" };
+    private static String[] images = { "orig.png", "orig.gif", "orig.jpg", "orig.tiff", "orig.pdf" };
     private static String imageDest;
+    private static String pdf = "orig.pdf";
 
     @AfterClass
     public static void after() {
@@ -37,10 +38,15 @@
 
     @BeforeClass
     public static void before() {
-        imageDest = IMG_PATH + "output";
+        imageDest = IMG_PATH + "output.png";
     }
 
     @Test
+    public void convertPdfToPng() throws MagickException {
+        ImageUtilsDefault.createThumbFromPdf(IMG_PATH + pdf, imageDest);
+    }
+
+    @Test
     public void generateIcon() throws MagickException, FileNotFoundException {
         for (String image : images) {
             ImageUtilsDefault.createThumb(IMG_PATH + image, imageDest, 16, 16);
@@ -164,9 +170,11 @@
     @Test
     public void testSize() throws MagickException {
         for (String image : images) {
-            Dimension dimension = ImageUtilsDefault.getDimension(IMG_PATH + image);
-            assertEquals(400, (int) dimension.getHeight());
-            assertEquals(300, (int) dimension.getWidth());
+            if (!image.equals(pdf)) {
+                Dimension dimension = ImageUtilsDefault.getDimension(IMG_PATH + image);
+                assertEquals(400, (int) dimension.getHeight());
+                assertEquals(300, (int) dimension.getWidth());
+            }
         }
     }
 

Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/file/orig.pdf
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/file/orig.pdf	2008-12-05 16:22:07 UTC (rev 984)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/file/orig.pdf	2008-12-05 17:53:45 UTC (rev 985)
@@ -0,0 +1,445 @@
+%PDF-1.4
+%µí®û
+3 0 obj
+<< /Length 4 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœí½M¯d9Ž%¸¿¿ÂÖøë«o	ø¢€AÌ¢¹Kä"Ã"¢
óEÍ,òïxxHÉ®½p÷ÙÌT"ÊŸhºú (Š:¢¨ÿ:ÂMþ÷ýÏÛûûyûŸÿ÷LŸoã£Ê=•8òíü÷[xë¹ÆÐoÿ<ÎÛÌÿþ×ñ׿Íçí§#ßþÏÛÍBÎù¿OòOÏ3{-×ÛýË‘âÛ(éVÆÛêíË­´ü–ë0ÂcÚ[ŠÝ¥·ǭΆO5½Å:tJñ­Ÿ¥¼…R½ÀÛÛY‚×xá~c£Œð¸¥Ù—ÙU#ÌÚH^¢'µÊãn¶êái4š…±CÏ¸ßþñÂ’¿ýçq¾ÕÜÎ2&Ss­–ùG,yœQF'”ó-Íš[­o©ÍO„p†h„Ç[K{*ç¡Iô”oHY³¤Ñ5Kšn¬ Ù'áÔBbÏ3Ýßza1JÓ"bJødR?Iš¼íÙs
žýüóÏ ùË[Ÿ	9càZÍo#–™~Ké-ÍÎÊáíŒmRÂ[–BB>ßÂü£Mf†.ý²t}+sÌï%±PQÂ[ü>¼áaïø$¿5É’ç¨6éH{‹H×7
¦ï³YÚHyË’¤ïóÃ0¹ÊìÐ,ZÒc¶rV1Û—…Ðg3¥Ò†9ý&a2»'42t£”ÉÛ€n„6¦ÈI¡2>3KœÒJœYë,c¶.ŽˆVÆSÊдŽOKÝ)Ò/‘
+I·:t<†4c–ÙΊOæÈRmœšÁš2%^š!ÌZi™)
s0ƒ¢¤‡“„2âx¢Œ)ým:¬½)H‡Œ|×îç·Z3D¥t¶ô%þÏÓCæØÔ	2‘Mھ܌ œ…ÞisJ{PæÔ’Vz!N1‚DBOoç™ß!¬BzyK}/vÈÌÞ>S8Rߢ3EjÂ3¥~1sÔ\tž@Ýôɾ2vÂ,\fžwÆÛa„Ã(äÈêŒþq„©ÇÖ¶…XYUEk$¹0«a²~ªÈ*­é
+ý6™ÍZSHç½ç ¶i4Gì.zÃ)֝#„©bÞHNq6ùg¯”ɺ:
+r’(ˆ„,
:gŠŒ(©ÙØR
+D/d4¦¼å3‚0f/éq†r¬
+T×[Z>‘²ûÊ1€Hq–é~„4uNV‚¬¢ó“IéÐßSßOE暀"lBxº9[´º›æ˜ÔwsÐó¬wªNðYÆì\-hicÒÔ!2}çÐÌ©Œ†M1‰à{¬AÛyª¤)7fßr¬»Ö¿ÈŒÈјŠ%­Ñûr3‚L‚!-sœȓ¹£ÏE¦@•IS
Yk¦Æ
ŠèºÚÌΖsÊÝ™´VS¸ç¬*çM'‡³OM‰B˜%Ì•€3E„©åB¸m•„4g^÷f„ç@Š*ÓV2m½¸;a“Òó"ÊF>̳…[&ÑàRì9t‚”&KZgsœõ¤§¾ˆ¶ŸãNQMUwi«ûLË's>åHt-bŽì9E ç§JæXG¥™*3ÏªÍÍÓÞ“ûÊâݽŒ<”Š,¬à‰,´ÖK€…dQçªT"
+–ÕS'Ô¡uD›if‘³`}Œ9ºìß·¥ÉfÃ!$e´èÏ‚ÕMT
+
	`žÌzkW“¦©DHË"¬…iÔÄÕòKßîïö÷—c³êˆs½—?zNSåLóî^Õ*Ä‚|bü¥™¯Šñ=Ç­'™Œÿœæùbkš'þ˜ƒðטÊfšOW¼MÍ<ù¦PE™‹sy9ç<eúóÓ÷°ûK96:;°Ú0›ðáêûT‚StÅ’™¬ŸÕK:£úPXý·Øó«¿þþ¦ÍáGtÔ\ž¦*–öO|™\‘vÈÀüÞJ…ýUª9G±á(²MÜßǏo‹Ë\²KÛÄ@›i*hÛæ§HGgÉ둍Š-K“S“‹lϤ­ÇrÚãuv@·_Ù1Qe·$b[D^gqsYMNyà/Ùg‘Ú´çº+ÿÊÒ}8¡ë*{÷,²W<[G¤ô9³§®a™e² Nkì°Z0wžh—¥ç¾3ÂZ6‚l±æ?V“‡Õx7Š5êá6›åY¯žÙpˆf¹rFEe.}6t †Eþ˜’2í`•Ñe-™eóÊü:vYùÿùÕ™ËßÜëN+›Ï<—”:ÅÄ(³'3Go‹’Å\ï·:÷^cÖÉäQóÔëCgRZ—… 0=wzÙ‹k]vÝ+´ôdšdé9jS[þÉP±IYš¥P×ÝÒÞš‡Q¬¹Z˜õå©ó…gnü1sâ›ó!ÄÙÈ’¶ù`ŸF0ÑãMv€Ç"ˆM¶ùÄ¾ÃvrQ¦8O«ÝæXRõäóÁ6,íóÁ&Ý,ÏæƒÕèóÁõXm6˳^=³a›‹36͆¢èØDhé­Îµ,Î-Ü9yõE6bÀ‹H˜öOÀNÔ#D‰#@ ™<¦|Àš¹%MkLµŠ2ÔËKgÅ¿¬Ï’“l’Qæ¶.`So„:À]+Ï“‘Zí Åšô¸9AÛÌò¬G`¯}åŠê¥„ÿ»~Á2ÿþ—¹·›k¨0̏Ï>'ø¸Íµìmê­:7Jùrü·_>ŸfžÛ_~9~8Ï3Ìÿ"ÿKŸÿò¿Žÿã/ëjK!ÿø#Ç:M1Mc<¢Wa2Ì5ß(ӐsKÖ%ÌÁƒ"ÍžÓÆ9a†­¢b€Êyl”ÉEAT¬Ì¹ÓÎ+EÍV!‰Áž¦?“sàd[a%1yX]wÏ ­y¬´6×
+co.88ÔÏLùÈPÏ•quŸM+qvòÝ¡þ«Œužÿ•ù_ÿµù_Ÿÿùßßç?Îÿîó¿Ÿæ?Ïÿ~ažñùSøAÅ$„C3–ÂÒü7Êù3þÝ~øÛ_þCÄé«rÃMñœ[ø¬½òTî³ïÔÜ[Ô³µ)ÐÚµðÔ5ãtí¦6fŠ6þ©ìu$¹­6~¯c–é\† ëSò4&û»ÌdøõîßVõï›måë³-—c“¬*°Š5ÝR˜KTX”Olß|º-§›|º-ŠN/S§›WÊéæÍâ|K!BÇi:X
+«,$·	glÂyZì¥Y‡XÛaœ¼pÆ–¹ß0_=¨©€C¶˜kŸån#0—æ€åƒ
–£ÑN>N°0§kV&GÀ*µ°fÙÄŒsŽ@ +®Â˜ÞÇÀ²ø 8£`%ºXiÏ£ð?iÒàúï£0—C¦m¦áZ¢¤¹—ht‚lŒ°FÁ)dœ•ÉQ°Jm¬Y6
+IaaŽÂ´ñ`–øjzËâ£àŽ‚•è¢¥5>Âwxv6yŒ±²ï͵å5üdÝ‹MLz15ÕoÁ	[oØ¢¡‹-;S¦‘¦ŽYý¬MºÂŸ“OC}¤ÕV¶²æ¿çè^“Óf³æâv€¸°[yžÔêÜð¹)`
¶òØ›K÷7K`qäCFŸì‘Õ¨KüŠÑ*Wʾ|¿Ý¸ÿÆ4×qÍeÆÆi$Ϻ7ë>N+:–E‰ÓÈüÜlåcÌÀ7ʲðEMr+ԍz«×ÓlÔ¦-#?ˆ-Õœ¦ùIÃ"E0;ß(ËÎ_m<Ë´¾]ùhóÊ¢z˜â—ó˜3K*á÷,’i³‡ÔÜß,?moB›ÛζuNàb1îÖø N‹"h° Î>þ‹`ão”5þ‹¢ƒe…úø[½Ûø³m› L«`Ôµ”£>–8Á%€”MœB	`¡K.<¼ðéCB0
¬:—„3e¿K9~n"}	CP*ŒL|C%Äi Lg×	I„¸ì:a.du,JLr¼Ô7à×	¤l:Á)Ô	,téÖ»dÂÚ¶d"Në2…E‰g*ôX“	£,™Xm¾ê2qå‰ÈÄ+Ÿ>"qþÿÙÙ6wOßÐA…¡þÀuáÒߐ‚1pZµ)†ÉàXǃٕE‘#>±b—bp‚+R6Åà*ºë]BÀ¦-ç€FEM*ó\ HYãï"VZžãYϬ &𞏌ý,œ5Íد½Aõ_aÈÆY?¶)/žC­íS¾¨„OùÒŸ˜v,‚OyR¶)ïNyº¦<ëݦ<Û¶MùÙöV%Nyä²My'ø”'e›òNá”g¡kÊ_x‚)ÿ§Myáy¨²Õþö¸±	8öÿ[?V´m3mÓ	qzXÖþ4}gC%•¦ƒHûùX3ùâFÿ¢r·BiÅ^¯[þÞ6·ücªzI‰âKVV¡Ç"˜õï·þE›ï…²{/<¼ðéCPÅ	¢9sãàW”~ÿœXPXHŸC‚ハõ	vvÐt°_#¡Äª¦„Xã3²ÿýs¨[Ù*žù_ƒ•ÀåÙ÷þS ÄímÛû‹]X‘¡ö„9ÁöþFX{§p»nerïo•ÚÞßše{ÿl8	öþâ!!gÄ$hzßû[ßû;{+Ñ;¥5>ïý_¸óû{¾µÔüVRÙׂ!ž†Oæ߈ð«ñµ@ÜjÚÖ'øZ@ʶ8…k]këÝÖ¶m[j„•¯â[ÖÒ¶8Á×R¶µÀ)\XèZ.<QMpåÓÇ4A|K¹”ü-óOQñϺð	‹O‡Ï'¿NÓ?
Šs	,âÃZW\€Ý\YI‘Í5ÌèX`ã‹ÐÞW–$Žt™»|¥ˆÓ*3Ÿê§ëÕ’àÇCFXÀ	óh±F†¬Qb³­8öêˆýˆh1ç·Cõ/þsJû‹Âó¿ûv@òw]²m?°*|ý¬ÿü´­	ÖÈ¿bß1û€…uM«$¾§5nê'Éeƒ
£ÂñúHxÚ”	K÷8Aµ„èªÇê\ªÇÚµ©žÑy¬LÕ#Û[›êq‚«R6Õãªêªçʬ
+/<úê‘*Zõð
Õ#FÂÏ”’´ì†ö¯„9]÷=¸©î{aQ`\Æ
š\R6Yp
+…….a`½›0°mKÉß°ª”Þ¤,,‚É‚Q–,,Š¶že.Q¸pD®\úˆ(H
Ó–L߆'Ç2BN¦·óãv–ÞwQ\BüãDÚ5ŒŽË
+*	r0ešˆâñK
+̽ɻóÄ‘Îá鈟»g³Ý)™Ø€0É-+0†·úÃê4ÂZwHXë	¶Œ°D_xXåZxبµð°Õ,Ïútaþð,ÖüÆ…ç“¿ºðü¢“¿=íDt±¸ëúÅð“š)?]‹ßä%6Woñÿçñו¤öœÓão7¹„÷‰©zW$ÌýaÁu39ÿœ•;åñ±y2-4º 6s‚¼…\ÃYßU™^ñsyv·Ð=–í­|]ýcL7™?~7ñ;&R6gÊHÇ4£.
+§(+7uà^‹ØMFp"¸¯,µ¿ƒ"<Â*TŒlVyHÂ'‘$|I‚SÁJ°$«X§yÖŸ<ÖP+‹ý¸t}Ÿ;ùÙµô»]¸æ¦lL1¨½ÌåùþÌ9¯F
¯™¾ó¸çï:•’¡ÿésUSÿ“Ì®ãºëÎÞe'šì¤­Ér]¢‘Øú6páTŸµ:÷zImì{˜ã«
âî„cQf'áw¹(­<äÚLÞ‹5ÂáUçúV£Ve­³LôÊ…¡÷(¬êX”Õ£xžºËWNüòoG=ÞhwšlsäBü{½d©tN¤;Nñæ8Ÿãï•—»Øúw¼uþ.M•w)Χxsœb}xî6¸såÄäÎw{·Í•®"üUîšÍ%$Žwç)À„m¬n›öÊÜk4ñÌ?óÜžôÛ_~zõzT7‡BÿÜÓP¹_3úfLMMtÙ{„Vq	Ù=Z{Ú{xڏ<”°x,px°Îí$”íÚNBq5uQä2(Oí ÔÒ~ª„íÔ<eëôÂœ‚¾ðçC§ "¹ßs
+ªGžŽw@6e÷«÷@f¥r‚ˆRÓ®-–"	âx#³fZ¼¿BÐObé](ÿ¸’p»	=›u–ÔôäZ,ù­ˆÝž†Š8ý4IÉ]Ò"F¾pT^ï.rÈYa`âÊ–¤C˜ùäž'çzƒNˆ¸4iŸ‹ÿødÆáåËL at v¹s3‡˦áÈ÷Ó­éLJî©Ã3øáÉçU@î•ã`e*x4^n$TžéÌÿ*Üø<<ím7BÆUC|-;¯2U´tñ\¬Ñ믇ón¶.çÅØ'ÆÃ9^HEÈÝÏ/øDn“ ɁT–[³üÒQÃ]HiœË›T—O\¿œ­•ûèž\½!A®É~,hÓ¼ÇHˆS¬8>ÎùmÌðRŸ3¦hÓÄãIî}–›5É;ÆJ.búï…@&‚È8w€£óׁì—3¤úªrð!ŠžÜÅ„ŒkñþuÁÅH”.JÉ9ÃK´‡³®ê~ÖøúÄ÷w‡b.+F€ðsÎ6›*€ÕAx€ W«I¤\Š•^„•”h½W2	Ò[ŒÉ–‘Ló÷’èe2çÈ9˜Ý³¼ã±¡³¯ê
ÙŠ-!7øïžÎ°%Upb•U|±™n7&9õ¤·JxÜ.Ý_„Ã)ÿ 
+|'û:y$áHÐ&Ë^†ô)j2TO"âF4AB†(qð5æ¨D‚p]¥Im4ªWÂãvm·QÜ02¤…㘓´ÑÓV§ £–8D ‹µOÇDvÍøR>É¸
+FŠÍ“š‘¶Ö­¦¼Û:H^£Ë³KžÞ¾ÞÆ‚„):Hu%²Á;ŠâÇÛhB4Í­ÛÊíGñ!xÊ­
8¼ü§=8cžÚˆv½| óöËm#ŒØîžê»„„[×B´.’?œ 3~+悶øZÈ»åJ².:kÌYÏÞ¨Çs¦δ|¦—/yîÝS]+dPâ\ ™Úט‘|yä·X“,Iæ!ÆåQê®Å×GiYòÑZ¾ÖǬJÍ×ÇÜmÕõQîïËãP%Íõ±ÈÕÖ±ÖGK{ۍ`ë£^ªöõq®£îŒéÚç\Clçëß¡”3Ý0}}œŸ ù¦ŸI4˜Zžñk¶r`Íòrèå;[!™\cA‚­òõX+dÖå¤ÄžÍȬºÝÀln¦¶@"NKY+dÖË̶BæÏ‚µBæ¤}å
+™õÜßVHK®Æ“ÀR¾Ö%*-Û9²³&SJwE;kœ}âü»ƒ¹’Õ!FÄ’S%éš#ÐB1 ¥t-T´·&•ƒIüx†)!šwn¶V2!È}"‚2àóNpò¬Ir<%#(ÃÁOÖ_.uWæŽÐôJy(ö³VeQUyÀmù\ÕºÔä„–,}`òáÒÄ”g•U$>9!ËÒƒ;8‡eE
+¯¸'@øVjÇíËPÓŸso6Ö¯¡¹%öÒØ´K%ªŠ¬‹q!"mšeyL¨ÇËðJGG¯ÈÞB‚(¥Ms"Qñ.w†¥ÍœÿÖ"¦MA rF[šS6}jôAuZr×?4¡<ù¹+O+ß”§TŸª+O6à' ºQÛ¾tgÁq†«ÎÒ°1ÕY¢#-ÝYºÜŽvÕ9°‰rÍ©ÉÕpMSoʧ-ºÞ”¢å<e±¥¡%ζ*[$çéÎr½q›u}r¥)wpÛšÚó{(NüYzJ»í<	¢·Mi–Žˆ_¦4-¹úB•¦`C維âq“Ç´&ª_ÛŠRèt©J‘_ZS"›HÌ,ϐtÑ Ö”›Þ¸mkZS¶í=¹Ö”Ü\kZrµžjM|½öRz}âÔ–Ö,ôö3Ö>±þÝÑ­)±³Ì.×Y’G4Âcz=nüà9yxþžAÇlhü'¨³‚—øœ<<ÿK‰ÒêªóeÍn‰W×ì–øC¹øì®Hâã:óÉ“ó™F~ÎKúÐA'>/Áf؁òá[m3PêO>A«¦o}šì’;"ށÿ®†L7Ô¬«Ž™>{4Õ"óSHÏáé}‚ƒ@ÍeŸS¯Yé‹5§vƻٸºûÄxHÕ,›õŒ¿ HµßCÖDPs_¤r%³J8tVH²	)#ûânˆÔHfr3gøU¹»¡3Y/1ìlÆJ<¸œ|ÂWúкB¨Ôíæ&$«.«2®fÅlN!¥¸¨;ÂŒ@uB ™&qù©¾Â„–]oÍÚö€¸/‚œãë„‹\×ôÁ/”"&…´ûMW™vêPÁ-Lî%rkhûJÓ=»„ ÔÕ ´&D0áAº±dR[θ~Ï8ÎǦ{TOËŽ7X~ÄlARQ-Þ%	ä#ÊæÌ®ã…(Óëì q¯xV`‰'UŠ2à܏É^´EñÙ±I#Ô…b-BRHs|2%3‚zÁ"ó¦h%[éª,†fÀÅ÷hDjbkk“ò
+aÈ€ˆ£2…to2ä²)F1ø>ì3ø¾ªy,A1±Qäͤ¢¨àfµàŠÎAÚžA¶t˜`êÊUáίi+ç¢ãlxLQ©è‰)6¯3‰ÎHÀB2|Kª™¼Òê»›¼F’,Zæ÷SÎÌüC7B}XË2õ‡u´žÑ1šup%ŽÑPÆÀ>a0UuƒSsŽf†»Ž~³¤ì(,y<é~î,uÊT½u¡‰h³íÂRtiPaB{ ÐLÖždñþžxþò•s,ëŒ&ÝEïHK,|ªb¥üŠ[ݘqTzn·æþ®ÞqÕŽ
Úæùœ™’ç	rH4Î(;¥OIœÁEÀÿò“žB¼†LˆæHÝÜÆñbÐ1wÔ“ýO[
Q+H<æŠè…ãtf,I6¬'ÂWOÏÍ¡]Úb@àï¸ÅŽˆºú±ŽPôÀä” °z±@b'E¡4ØÆ%Bô¿H€Ð8MHÏS²çAÐaMAsJºËFA(@³ix(ùX"æ©ë?’%1aáp®Á´äñÔ”û©I%%”ŒûÖ-G‘è”ûGIÊ`Óø’8GÃï]›'\åkA‰%v§Dæ“»)ÁKCóD/!áw-:XNÔcÓ¬˜ÈÒ2‰«ÛßE5°mo7ºÒáÛ\ij$튬B8$r]²"%»QI¢%…@6œ`¥…MS3Jb7tl/õ)ð]â@ìM¬Ä„ ABWlÅ‘”Šnˆ’L¸„Ñ`ËЬ¼„ä^<kÜ‹ÐŐBgðY9UÓLo_<¤X‹Ò‘ „´Kƒ*ÍG[B½²-3rXŒTFÜ«Éš(n"«ÆXÃJ† צŒ–»`BsDÆ
xÄó¿@~&>MçdMc\´ù	¦„$e¡@;!£šQ}‚­$'Å,]¤
+b&n$2#x&˜ƒ—.Œ3	É ÖISWFaŸ~_`W€{­jneŽ–Mqs$kÖ옞–×Lu$+VAò€”ÞxGˆoD¦	+ 'ŸÀ°N®†´€9¢	fOIwDoeG+ãS7œh-iEë– É…ó´¾A
IôG¤‚ŽHj¨(W‹Ï´Œ#úIÐAC¯“0Jar±Ÿ/ˆª[µ-r“ÄÉ„¹ˆ$â‚B	J2äNÆ°*!¾,‚Œ1D
‚tø‡ÈéÕå11õbB ÝVUåͲó´—‘”T ’¶MâpJ×ÙTUTÇ–_Œѱ9A~ €
X‚$;Eªt2$R@ÐC3@*†5³“Ižµ}gFkDm*3içÜ:^@)N—†ŸÓâdò5ýÚ§3;ß‚ÎvàRQ7Qœ£vÍ®ê ‰ë!~ÏÊiYä×®ÃÒzFc††é—É>í0Ñ
c0?’¹©nH'‹/\DY º4BxCÛDÔй*`úkVhi؉“0’J¢ÀM¯$êthN/ÃÍÞ8›cZ¥€·òkÔÙštM˜‡Ö…êçÐuYþõkU]û{|?‡^~œ4âA+Áž’VÞ0ß·kW’AK—ø©ýäôCN›A‹Qy«Iºg·R£ê‰¿ë,‘¨ùY»ÜUM¨ÖqVè÷¦A”%™æz ¥%->²)8@vq— ´:Ùü‘eP3j¡¨£"o$dýý¤ZÒæÈVZµV£HT´·á‰É´uÀ×+ÆxÖæ-®“Çr‰ÖÏôLêâRg¾kÈw´~
+¤d'¯êü]
+ˁ­±âãÙ¼|p# zYÂýóW˜ûBYeTþ ˆ:0»<VRnMµ¢É-s#Ù!’ŒPèÇ­ã"
+b&™_N×%‰ºQ¬¤jQ at p$
59°‹	VŸò7NƁÀà°5õsÈ~ÓKà0Pl)=1·°hn»´•VifN}ÑéÉlDS†<"‰ØâO¦Ô¢µ>ed—Îisšb./RdÍšu±©Ý-
+
+)öM1QêâHƒßi4Í SY4æÇ‚Ôô›“¥É‰GÓÆg3-¢tô.è]»[BÐX‹ar D],ñ©UCµÙšŠŒl|}ªÐÁ¦Ð ý˜/“QMÃd’ŽM?)r$ˆ$ó;r±œ3H^͈”ÁÆxÞM┨¨HÂwÒN¥x&µßScáqù=Óæn(<R½ÊR¨n‘Pæ5²-ÚŝÀIžÐ]²°ŠŒ½F|×A+ ˆ•r˜Å4Ì1’,fVˆ.’ššÔ¢k$a&àAÒ·‘Åp8µ<cÀ™U-žŒ¦3ä‚–5`‹Ä q’#჈¥åÄãrI:믈@Ó	BPS=c[x!ãYŠØ©zTX¦Ùd”çh”UzØ2w('£É–OÒAyŸ)FÁÄ s/fs£ ¡ÈáŽ]t~Ý$Ä-ž)E(ħ²kö®C× …A­˜Äæ"´ïɘ'žh‰vUT.qÕHSVTçÝQv°“d¡‘tÑϳz£ëN'à‘y“ÕèKzÇ0FþÞU-Hfçßrz!?µŠ K.U›IzªØ2l¤‚gEäwšŸbÑáûÊ]¸,3ò'…˜	Mo¯`Òœˆ~tuhª
+’œ¯ª:(ºfÜ®„ ¡(#qLŽE	ïŠÌj¢*ˆL!i#ß‚.ZoàÜÅ~ÁÁ¤‰úšòÛ:‹3sß¡ë…È9-}ûAfFnºN%¼#A…ÔÕ¨*„:l{ÝAe- |y+®
+aèW.˜®õ5ç#˜³©¾Wês_ at o4£*r¢ú®ó©®³Zu1-Z³<°âÛàqÅÊ]8(†s£DSUUcÑýÖ€Ÿ¸j)GµO]¼Ÿ÷áØš.i	“æxÔ¸ïs´°U	Z@”RН‡XóºÂm–àµà-‚ÛÞº zþöù^ß]› æò‰ó3lvÔÜæØi›³
+rá6p†~‡Î)o¶9àÖ¸èŒãFh¯Kúè§:1´zÄÈ" ùãæ¦îT†)îÖ}RS³ÙòrŽ‘ûÛ6T>×æÊ!Ò¥6ƒtªš gŠ²ÀtµŠ--ë2¯»X!]]žb6KavÝÕµXJâ|¯"id5Ø£_°ü"f²¾ž:w1 Ï9aqO\­¸Ö@·­<°è¹ø»Ö¨2Vaº|ñ5»B†j¦l¸‚Ã>ζ€k}UÕpÔùYÕä{.[ª“Шºë!š‚ìi†ð{[€¨¤w|
+‰jtÕ<n†‰JZí`E‘.*ŠŠâb\ÀA…¹óÂ¥UÚÐƝŽA£B	yÁ™’6tµá8°q><zh¨ˆíÚôq9¤¨dt/R›Ú:…zd-â$†$.ÛŠ?à‹ª˧6Ö*}é‰õN¢A.´®B"«cx)zÒMŸ
ë\â5±3Ü{dz­B«-*MA!J
+?(Xf›¤iåkÐJ¡´Öžrô3Ü7½VaÕn¥h­
+ãr
+J«7‡N/ß<PL‡ÃøÂNA!ö9ÐüN8FÑS¤ƒŽâ-(Dm^ÃO…b& *rh†o‚®:‚
+ÎsNÈÎM’ªTÍKÚÖ Šh©l8Oãèª`0*Æ›ö“»YA8[®ØˆJé$΍‡£*%ø‹!®u©H÷ÌeÑ"%W;bï„ ¯€ ŠtÒ%@U¡È•ƒÃ@U!¨9¦¨ª4"S…Y<eÛVRõ­*fPq;=ØF֐UÉA¨U, at U'7CVÑËS!…V!pÙ`®M2hW΃¨ƒ
_E'ÒÂW‘>Éew¦`Ä* ]ÜçxXô²c¡¬˜AÑ;Õz¶©ITœÛT U(pw3¤=éÐ!ðzi±Vˆ—‹/%œg^h«»-Ÿšâ‰BÂ"û©Ì+ìWÄ%ííƒu‰§nTT+·´¹®C1Wèÿ³Y•‘VvÔU5„Ê»àTÊ«›Á®:Â58/µ’D —êOߟÐ"1g³vkWi¡¯ÐD’U
+ìIƒ_—>QüUURX¬A±g~¢¢¥¬¤uÏ®,Š(´ªŠJ¥a¥¶-(<æñ“´î‡E!†•*›xº±2€Ü†Ãjn_Óîš!'³ÓVB±HwÅF—½ah«ÀQHVZØ¡Ðuu:©¡JÅc%­)Þn˜i<t²Ù=‹@²{¡õ쬵Þ˜¡©=‚–©²Y)F7²<‹/x¬sV¸‹”
+U¢KiyµÄ{Vœá»Gõ‡¶iA´Ê9U²ÚӍöRçUAZÞfSÛÔY«Â´_MQÙPé€- VÚ|,˜¼ŽH•tâQXb:‡©EŽJÖf¸T®H
+Öêð±ÈU	[m•œ
+v7Úƒö¬¶:Àjo÷ÄùÔuŸXhµ¢»Jµñ„”Š¨-æyԍiËšîD÷¶ÅrÍ
ò@+OŠ¸ÅïÜuèÎd­ßƒRÕ ö†Ý®Léé“Ê9¬x«Åj&é|©vŽ;¶õ[ pŸl+ÚZ¶ÒBV¥cÁ¸ 5¯Q
ºrÒŽªõvµ¼ø…uF \ÍbP¨<Ê…6cÔ•.ÐTËUUsä¶ëôf°D3C[.ºÂ°É™Ëwæ¥â¹rN^çJ2èˆë.„ºº‡¼É 'K
+dHZOÒ€êJR­éæS.ÂgpÁº(C—‡FÃ&"ΝA»÷NŸÚŠøͶ{€pj=‚î"µˆ“û
yóf ¯$3-xvAYa/²pŸÐô
+홂¼HWnÒ± Œ˜ÌæÛ%¨6CÙ€^)žû#ÒkÛ"½0¹òõ"C\X¯Z}ÉÁ^” Uíh/†½íEâl÷Âè¸9Ú«FfT¬xÐj7 Uñ^ÈL&BÜ´S*¶†øâƒx¹ÇHÜû*æ+é¦Õªb¦3›ƒ¾D×÷E8Ħ™àÅ=Ó‘À¬ŽG¢¨—’¤Ó-ìW%ºßü•ª§¢Ãº¯‰<¦3øW(=³ÎAmP¶&Udã
FY
+k5CA]5/
 ˆ´#÷%¥èy¶®e@óa80„‘i»Gž+ñÑ!L=ǝ³êT‹)ѼŒv&®p0Q?ÕH6ñ÷8“!Ây³“Nx'ÖP7Ün>`1²šLíŒ^O§GÔ–«Ä)0ŒžiRaÕ!7†¡A2w&ÏføaR
Ôk<KrÙÐݵ‚ò”áYŽj(<!您]u;« ±jÓ¨pÈ6t`Ô/ù„G^M7
+¬FŒ2ZPxVÍ‹¬b`êµ8.ì
+DWöNøBgÿax±îKTe/
’	UÒùÜ9+ŽšëÂÍžµyt“¦ 1Œó¨»@A©<Q^¦u¦>ÕÝd'âWçtÇeNÚÝvï;¶÷}x.ÒCÑ㵉TüWÒÜ+ÈŽeh?Þö^
+,d‚Ú«€½Ò;b>OŠâêfV
ÞLç½`¥šSc²Ñ¶ªÃ²ûÀ8*4m;¼çZ•%C—éâ
Ž¾) JXˆ²ß)Ãðí\ÍSF–´@e‘¬|©ÕQ¯D‹$Vß2±`R6÷îƒÎ
+-?Á^Åì(k¥p/o`r2Kl¯UYh¾¬ë?Ï« ºœ4Vp¡ó±4™bÌ{¡)ÄÛµ’;+6G…™—Ý @3ÒُµÔŒØ¡f-ö>EíwÞÚô½Ô×ÆUáf™ïKØð;Gp³XñÄŽ
n†™N§$<VÔÝ÷¨IäFÔÑæh»'C›±¨N¸4JÛ9Ã&Ú‡gª!iúËâÊÑгê
lÞrà«A	!Öɉ^à”¸ fdÐ#_…š·5GÛµj†hÝi¾vâ°žuÝAhŽæ„¥@³t„«4µ¤Ÿqf¡tÉlg?µ  ÍÏ5h¥†•ãÌ0¼7 Y#úwˆìDõdށæhÃ+‹9y h¾Ôaâ¶Ãz;qeEš£9UÒ|ù5î;F¨ž†Iä:}Ù 5Ï´riAÍétá&ÔœN"€„š%GÞ°fùCnX³\ŠjďNÔ»Öƒ8ܝP!•t¨Üײqtíh@³|h<QÎ~±PcÛ7ž€æ8Ü?”@3f5ñ;±A¢í‡	4KZ­Ušã:ÌÁ’‚Ó¸s½ó	4G=WY at s4ONÍ°™v^4«+òÂ	%×Àƒš}þ8ÐŒ}4ým‚êe0¡f±=íÅš¥VsÝEèœö¶#Í¢¶é= H3ýqvU²O¬:“”×Õ§&Qf>X竝³MQfÌ´n¾º
+	tüTÙ5„U]6zð¹7¯ºÆ.@úÀck«í>Ü>>þˆþаö-ŒY
+$„LŒY>¡¤dÆòFûQé+ìõcùõîŸ fË‘˜±	ªâM3c¥ JϪ2Ôn!ÌíցÃÌPÚuàƒQë4ƒ]ɹ©_è!qfQót0Î,Bí`Ff9qdØð¢:Ìl«L“ŸÄ™E™4âþ4#}°3Kš@4qf¹-IåœYŠHl‡ ÍšºF±"D=®m4Š´qæ¤Ï4Añ8Ç™%KÝ°fÜÊl7Çšå‹|UÓ/ÌÂÖÌJk–tÑc>bÍBé}9þ¢ˆ´íÞ’™<6{36ã¶9v·xæ`3³8ؼ
+°™•m…^)AËT7E¢Í’Þ}µHj  ÍèÙͱæ¨G]…9{‰7K	‘0, ç­Î¸ZEdìÑ¥ºc'µ¸é€s
+<¶hÞpµÒˆ7§À-¤ãÍ";„r±!”/²¶x³·Û!çH
Öˆå‡CÎ£ºAÎBá;S‚õ¤ˆ³”ØâîŒ,9>U¢*g/ÂgŽòá3vú@UÐ‘[_BÎé$òÝýŠ81g!°bÎÉü¶‰9KzÐw8êl=³¹¬*‚ìk9AgjĘO¤çLu7u8>l¦11ghÐÛ†8.¿
+8ÓÆ:žŒ®@غªª×ý˜ÎB¡gnÔµb4¶Ãz1Àôî¤ 7K²þͺdš5&O¡èæÈÀY–—Ď芦؄ÎXˆ›F¿×S"ÎÑüB9cå%ÒÄ9V7WO}Õ¶fž;sRR! æ,„œ—qŠv4«sԧdž9é$–Ãw3Ç”³“Ig ç˜
¿pÌ9V^i8å7ºq–d׈8Ë¡ÛbΑîÏ
+9§˜È
+Gœ…Ò¸chÅsŽ9c•RcM1g¡4ž¾rŽv´MÈ92¬Ï†9˨ÒáWM§®n †9‹1vÈYDm6ƒP¬]Ãœ!7)ìs¤‹bÎÂ#¢Üˆfsl‡¡ÛæeœbåÑQg†D¡Ÿ_t•úu.cÛb s¬îÊк_YSy@ꄝcu,›¨³ UZ@çhC
+: õ69)î!LÐY†³(ÈÐ9¡'èŒB‹pÔ9ºtŽæÂHÐYÖc–0¸y,nrtÆ2¯{µ637VÄœc&šk˜3
+9髌
rG˜ºhZ·tŽ:ËÔj‘ÕNÎÜÖv–™dì]ËvŽ™»…›}Ž;ÃJ"Ý1Ë™°³ØVÝÐ6$q2Át‘O¸Ïh…äå¥ŠÜYûB …È30Rì}íNøƦÒó°UÊéY—Û±
+™î·zFŽÍqYŠP CžQHâÙªËU÷SŠ<cóÒ鹜}BuÍ!r„
+×EØ~±Ò
Ì gLRú;ÃЈŽûtQ†Þ¶^ûSé›+õ€}¢z"ópPUɱvIDŸei?µ]°™°fÆÛ>':Ç*ö|,<€à³¤M­6ûbMsû䱎bÏ
+;¨M
+|ÇMÇž/¸°
+a3ýç	=ð»mȳo,	‹¦Ëë"úÏ	‘gØq¼ÄYthéócìuèsš§‹¾ò÷6ºƒ›þ`…®»ø”¨AxPW–F at 89L Ö„#Ï—Z½	„UzŠÁ
+=§àw=›%nÈs²ƒWGžaG¯[µ(“­ò|©•€Ômƒù “ÃÎ"åÝ@d]áh¯)ì¬X\.ÍX‰2ÓŽq :q{êªpä7œ…Õè àŒµ››š-¦pvFÀ9f¿VÀù¹í7ORnv«‚p³¤C4µ,ˆ7G»±B¸ë 
ߪ@­~™çŠ6OBÉø}lÎÍ9¸±¡ÍB"-z ñWÀ¤Û“osîu¬hsŽ\€yn”¶38vH´9Ïp#G—jÀÍ’æ7ïYðd_ðɼYÒáÉ·9‡´Õ·YÚa×yÃÓÄ`&E]a8g
®¾|›/=ÑÞE
*³ çlŽè
+9Kn´¡Ÿ%}>cÎ9úå\`Î’®›só¥}óÒ!èœO®­óéw2!Bùt_eCóé»*Ëbç<@/•XÅ{1¬ØnG*ê,yns¾|‚©šÏLsΉp$1gÉ6÷f‰ýJ€Ù0ç©·sÎÑÇ˜³ùŠÎq­Tq¹ÈK§
+¢ne¹dó“1ÈYF‚g’€œ%ÃØ}›¥ƒªrÉ­+FŠ›o³¼\›ž}›…d. Ñ8ØèG 8Ópk
sË…WːÔßXKÒؐª¢i:UrNÃnÔrž„–6ßf<È÷äÛœO^6«6¥rÏäŒôäÜ,³RÕŒỂ ˆ³t“Žz2Ë­ÂÜ»6ÉÔ"ÀÄÁ$†8'»:e¨3ƒÐ;ê<Ó6;‰:§áwt¥3Îê,Màpt’y‘6ßfÆŽwØYÒjnêœíb<Qç4Åd•ŽÄݵYzj2 ± ½©;§á~ „1^+–:BóüTÞ¥gÐÜsÆk ºÑPI58É1g]/ä,_œ–C%¤´'Ïf×
„œ¢ßçlwær–%뎨Sù)ç9ËœmOˆs^7(a»g»³HÄ9'?"ÎP%iCœsZ·Ó ¸æcçˆsN,"ÎO¸×
q–õɳ9'Æ1qÄY($µßœ…Ÿ›%(m\1&N›s3¾¨;à,9ê
+3a•8à,¿ó@“€sÆmÛ…7KÚ`ï¢i3܉7£U›s³ä°"4v{¦“ãÍȲâMì…of¥ÞŒx¼ÜSeÎX¡'ÌOÎÍB	yÛsò04‘‚a7!²·ªÇB[‘6ÀyU·VmþÍ`å„èéoÎÉ‘/ky›3bQß6¸9'ÃÞ‰7çDtx³7ÛñfaxÞ\œ%šs«à,¡‹Ó“s6C—€³¤ÃŠG¡cØž çl±¬»COÀÙ‹pÀ™Ã¼ çœÜݪÐ<¢oñæýŠ®~M‰7!<ù8Ë¢ËM1ðæ™VüxsŽv;ÅÑc_ȉ7Kš´ÔÔ)ë‹`ç~D‡Ý:&àŒçPhLq?W\…œi`OF™s@¡'$‡œåY•±ù8Ã&ëæ|1¿ø	’:ç“*• ³,%‰À7½œe5aŽ¨ÖÎV3/³:æœ4°Êá^βÖÔÍËY‚֝(ÌGÈY^cîä,aÞ6¸95VopsjŒ#A¸YÃ.gIã	mN[G›åõ²98ËôŸÚœªuÉÑfyÍ„3Dm¦ÊEšpsª.†psªv8R½–Hƒxs2¸Óñf>dìx3s,¼Y4r‰7'Ãë‰7§Fõ@¼9é£z;Þœ=ÈðflÜ,†ý•‰7‹˜Á‰Áðf>Çìx³ˆ@o;Þ,c.@¥âÍ’Šmá͉áhnN™Üœ:=]	7'»cp3Ÿ°Øðæd7oN*žxsâ)ÁÍÉn–W‰ªf!Üœ:gñfIÓ?YñföøBQÁñf¡œ›“sj<÷5¼YD:*DM¼9™gñæd1؈7ó•’pR{òr–zô(BíÌÆMñæd×hÞ,¤Á,Ø)4¿¿(Bê¸mhsZî.ú,‰Ï>¢Í2“_T®äŽ6ã}ÞìƒFòÉG´9U:9Ú,Yh1mN§ÒÉ9UÛIÙAy}£åC°YcsræóCîäœÚŠÁD°9Ùg›'!Úž¥¨tœissNzIîØÀæÔý `³ˆo<遳]Ås7çÔ×¢;YD¿ñ|­rn0²ÑfXûmãùnÎD›“ù’:Úœ†ãÑz¬=ᆖµ_xÔK=‚¥…Y¢¶£û'K‹BÇK‘0XÑf1ðëæë,»Ý²brܹ~¯ð†7!?ù:g»ˆP7[;Vµ¥;ÍGF.!Þì–ˆãÍLBÑÕAÃÀñæd—Þpö=%ñb<»Fá­Ü»™+3glƈ,UÙvQÒŠØ«½³)À€Þ±`[±v€³¤Ë“³s²{l„œ¥„¦Mu˜À]®låÞkUð&ÓýÆ!g±ó^PÈ–³z× rvcÜ0çl§cÎ’¥l·Œ¥ˆ²y;_ªuÌâ^(î,K›9'Ó¤²t˜µ'Åm¹;‹fÁ2̢ʛ»36©OîΗZUR*íAGŸ“á úœ*q<¢ÏÉ"E,ôYtk Ï(tsw¾TrgÅëfdÅje–4·T”fùþ̇ºNv=øó¥Ô+«wÇ›õ]oCìÄBGc	ˆÚ›i»No ´ t!ÌM Z’”gÐòÁæÜ\ô‚ȱ¶6i33!ÇŸ'Å2è(Ù±0àÏ%ÛéˆÁÏÅC	?K	Œø¹Ø},‡ŸKöP´
+?—ìÑ+Û¾ S²û´A?I»Ùy…Ÿ/±ÎYˆXÂÏÅP~.™Wj?KšÎd?‰š2±3…÷Ž?_êÐz£_Î$üÌ×d~.ôŠ;=ȝÁÏòô­…ÉC–ÄM,áçK%Vñ^+6/…Ÿ‘‡—8‡ÖG˜®ÅÂÎ: - è l@—BV. ºqÐ¥¸‚ -9xû ôL§çø¥øEl=Ë:ÍÇÒP,*…Ð…בˆA—Lkß0h!$]Öá¾	¼ÿcÕ.ÙöŽA‰÷uˆA[/‰A—`‡¤€ nÛè²X°´È[2œ3ØMssº¨ÜB ‹„.ÑCÀ‘FUé‰$á"Ð>‰–iÖyTåTêJØ	%™÷¶{=±¦ ´´Ê€ÙKÉ»J‰¶Gd?ˆë1†sVvŸ¢Ä KðØêXùÈ»Ã@h4¨Ýu]5_¤31è¢W"…BÉ6°9(¼Â—|Æžyw}.
+’îû,ÐkC=V2!hù‚²
+ZF´0.@èb.‰BoŸ ….´….Ž-:]ìª*aè’ˆñ†–é>t“CZtD¡Ó60¸ÝÜ%Ë3«ÄÑojÁœ¹Í-óv,+ï®sÛBž*Œn3
+ùI$ºzûˆ–,/Cµ…n‡%Õéa Z²ðÄ	842ðÜó´:ìà“¶q)6,D¢KeüÑÅ¢Kõö ¢‹Ç@%]V,-¢%GW Úë ]^Oqèƒ_T«C‹Lv÷¦0ö ÇÖ
+¢!Ðc–\±X,ŽC¯€¡‹…†%]ô
¢
†&ÅaèR=x„JRõ»cÄ¡KåAaèRi…†–txººáÌ%Ž—
†Þ*«YônÚ*‹%âÆI¡É\ÝQ4o·]pkl•Yx„¡§”b&30×âh †.ˉŠ0t©îÀÝÉÿBÀ8áz®¼vFmKºØ³„¡‹íê	Cû
+BJ|ª„ÁÔŠ¨îFJÚ™t)æOºXÌG¡K±KÂö…
+71èRì ÉAè’kš ´¤›îŒBKšþ*D”‹^#=„†­¦&“YªOÖ'v&B¸˜òá ´¨B:ÛBž(ŸBÃÌÚÍ®H×R/5®§¯€­#&.><ѯºØôjŽÐÝÖ'¢œõÕ§¡±–,×gý"%‹uÑs­$3²ah,`ì-M"†–uÔ‚qt.´gZphy2qÅÚ˜©ÌÛå²1´Q Ô‘èb‡Á†‘:(-IIT$úo‰ÎÃáEV19"Ñ3%YáE”a‘}`;ÉKµ¼õ
+$:Û¶#ѹ/—#±E„``¶¾Œl7Œ‰–ĦDKŽNuÜS2ð
+
‘h}ցèÂÃzâÐ…~-C:¤}áжk0 º06Ä¢K´ÀÚØ€eáÐ…!-vÃ%SJòXEïLˆ¡aägÑb144€è›-¶Qø׆C—àñ8¸ãÜ
+‡.§cÛª O»«è@t1÷-¢Ëɍè™.Q£^ ¼‘´ž:-âÊÐÉ¢…’è-@´<jœ˜Ö]Îiö®ÑÅîkˆ.|k€8tt[ô`å¼}¨€+ŽC:ÓÏ€t2q6²ÅéWò®Ê“´TÉÍD¡e¢Ñp
+·4Œ¹ŒYDŸÿÂ\sˆBKÞ샃ÜXQáåš-¡15o-^1è<ü|GL¹Œ¥GZÊ á:Û›8¡óà‘ aЪBÚlC•W©Ôâ=éj@ÚÔšAЇäÉPÀ ñVlñ,>ú?+=?°%OƒÐ‰Hó´Ì
+:‚.æGZf…Ó)‚´8]̐´âR¯¢/Úl
+ ä—
+À?i\X_^*Äü¬«>¯œh˜‚–Íî]²Gl
‹Û@ta§sКÿzÊ_7+»ÒåAw–…;6 ³C6úJ(Pa7ó.Q¶ö%ácÑrö‘¶7ø­K"Ð؉V(ªÕêîô|©öΦô`nMQC€tÙÏ°Ô' zË :,P륅TN±bKö^©ò¤r¡v Z(v…ZhØÌ:5@»n t©~#” 4¬húðDTëH˜¹5+ -kOì4»^ƒ–½þ¼á`Å­)C¬ukßx/øó¥Rå;ÁRÇŸs_n"ÀÏ;MmâÏÙ^ÇZø³ë3âÏ(T?þ|©äΊ·ÄŸÝr þœ»]
-jW˜ÓžÁÏÙÞå"üœûºÕ´å{w<PXåÿÚm*²žÛ–;]ÎâDÊÓxòDÞ)åMó?þ»<Í» ÿ<þk~!Ï~’º¸)ö!PãýËÅSfê‘ Ï›/N°ÃÂ©%}*/ä†~‹ Gñ÷•¥v,æEimÉ«<”±·	6h¤ÿ´¤bÖåÛ
+ñ4«™ÌuÛòX™Ø\/Ý¹²@žˆ|eË¿ßþó+¯DJ|°È×sq›FE킲NEùÎېòæ#^hôGùRbЇ!Akü÷§ÏþbÒg=]ÞN|ˆ1jž³ë#ãù9Åhb”¶Ä20‰gWß 3G¹Ö±ÒO.Êj6‡€Y„ ›/'‹R°ØóÈs³O„ ”y/×(‡WžÅEë²ö­Ï:à»÷(¬ëX”Õ£x'ž:.×¾ðâ—ûþ—秔£‡²Wî³´ëØÛ{Ÿ‘ÿÉXý,ã&olJX±4wå6û•OŒí‘ÍŠw=CÇ[¢Ÿƒ¼îŸûW)Zcí*ƒPo¼’¡.ê˜;Öôuu‘†.µ'ÐS]Œ`Û(EijF…_9å¥ áüká:é>Ò
‰Sô­.,P¡èQ» þä¡â…«Ç"½K,”çfþñNIl/ß)­Ó6îòrii5·(íüõ.Œ†µ>¶Ö×[Hz=Ü(ÉCi᩸±)|,BÆñÑ}eé	>R nz¡]#å^/	÷›5„ÇmèÛ=Fêt`%2yXwÏÀf=Anå±_V¢¼_Øó»‡åkhз§Wm1i¸ð5Q<oâ¢Ä|ÅÇÂÓ6Fð‘p‚²Í´ð:} ¼]>1œÀYÏ×+ôX§øh,Š¶Ýµ¸ò«é>´š±ªs—ÍE•[>iÛ»j\¦¯~úÏßßQŠ³£¾1%eÉ—3­(æõìªÚQà)jG	c1‰ÀÙ2á‘w'èeÂûÊB¿ÉÇFåeÒañðjIPs
+M#E,"E"ÿŠ¥Ï2•ÖZï+[öØ(Úx/“{ሙUÏ\ú¨YÕâÜc[=%ló™Â‹eõÃn!‰´½¬-Ä‚%r®´†–Ú´6DüqéIÈã;#M#4|]0ä	)XªâÊ‘EWãQ_'L-ÛasBÙ×òLk˜Ýc.ÉÜW–‚P 9¬ÈÂ'(­N¦ñÐZEÂã&õöEU×*+ÉƒÞýw6é±Úh+Ž}º0Zú…1}m*¡¤ó«*ᯒ_,§Oš9o5<óçÏ»QŽ§Ë‡þ~üüéÝØ—âù=²ö5{Ž,;#ã›ˆ!Zs‚n*KÄÁDÌ)&b‹ "aEšˆy¥.cÞ0²„Sï%e)†'1;ræ´EѶ{™&[W~ˆ¬½òH…íÏ’Ô¹=õ!‘=è÷!‘kuÙ3>‰|LŒâc⎉•éƒbÕ®A±¦­AIEm	”¤×^Ö 8ÁÅkPœÂA±2}P.Á ¼péÏ”¢7Ä·A‘£ÀçA)ïÞEö€XLmPœàƒb'pP¬L«v
Š5m
Š O³|”¬O§¯Aq‚
ŠÖ 8…ƒbeú \8‚AyáÒGWè2'›`h]5æ.ø}½¼ëàwÿ†ÞDðê&Ó]®bæsÚŽÜ
ϝoÈ›¾•µÙS/ÇÏm™‚¢ÑÏÁÜ®Õu·ñ’™7~þTm¯.%W~»°À1VYf¶m¹¹¬"’aNha,ß»4üê¯Þ¶ÃîêqÛ¶emÛÃy]ÛöEy)h߶¯Â¿g­Sß¿‰,OæÃÚÄ‹*'ïkå¶1lÖëWO»øUÔG$>Ÿ­ '9ýÌí¨ÊYâ;6i¥M*Ä}’»ï5E–M!\kó·*ýc6ò=òÇE¥k0ÌMTHY¢’N½´DeQ^
+z/\xý±n|@8†údmÂ1ò6áç-›pð«gáð¢¾
+Iý;É04èÑÚ#Å”t÷dLRF‰zCÐ7’ž¶}¤|éìø¼<Û²Æcí"½Y¾‹œ–|•ŒFºÇ2-y¬]¤çð]ä¢h˽LvÌj=ö]ä+‡>2c‡¬ ß&@ï7Î\Ý5†b[ˆŽõ¡þðŒ­ÿéÀ_Õ¹¤ù“Çš[ß‘?¼íò×4¤âBþœàÈŸQòç"V¨#V¯NÞ6œ‚gsJÈz	Õ§E0ÀÉ)8-Š6ß5ÀéÊHÈŸ>"!¡|à$ŠøGâKAO.Ovô2G]î¤9‰œ
+þÌ?üLÙjf at 8*ñ{´‹œ÷ýU¦ªŸÆµýñ·Ù¹Ÿ¾®v:|9üq$±P[sŠ(ˆƒI£ê(·Ì —ûŒž®p#»¯U/ú<6Š.^dÓà<‡×J‚h
¶ŒÕ<Ò7ÂÐ݇•y,‚V{ß² eEЦ[‰ìØ7Tí\9ô!¡â,äšQmuŠ{³Œ÷LãiƒÚàÏËöÂY¯ç·Î{¾.7¿IXj€§öbE˜+º„`XÂ2gî %
/dÂâi–E0aYX/Ò„Åk]Âb-[ÂRôò¡KKѐKZœàÒâ“#PZ¬H—? ./<ú˜¿ß(.S%ùS’¿n,~D­üM~ûºdô¿š<µµx}Ár[«&/Ï~RF	bAÇ2ÓYß›Z„Š[À÷•¥«çòc£è[º^hWWÑêeú~³†‘ð¸õt#ôÞIV “‡Uy÷lÕc´ÝV»ua Ïæ|D"æÇa.‚p
÷°0­˜_;áþµ<Ù'¿O ¾e™ˆ«§ô­XßÄÝBœÆŒò€K†„¬1J ßV.6òNð‘7Jõ‘w
+GÞ
+­y¯·ÚÐ{Ûª}àËPF	ò¤£Œ%=Á†ß)ÅÆQ´ù^(»÷Âh…>}H+ˆS.… }U^|K~§|Ïз—¡o/Cß.Cß®Cß^†¾¿}¿}¿}úþ2ôý2ôý:ôýeèÛËзËзëзw†þ7Mÿ}è¿>ÿüü)됇öƒbM°RÿLh>Ô›ôèW/"0^D`\D _E ¿ˆ€µm‰@UO@Úp¥q‰€\Œ²DÀ)+ÔEàˆÀŸ>$M<â¿C|bä;œÄþ´‘§Æ„\=->­ø‚%—mÅ@Zn0úÈ/‚¼S|äEɵ‘÷z}ä½m>òS#â2ü4ÄÀ\#ïy£¬‘wŠ6ßµ‘¿ò'ß/|ú®~Bì¿cò¿o{ÌÁrys“ˆ^îlÑB§¹DŸ½$Â	.FYáJ„êaõ.‰°¶-‰Ûµ¹8%òV¶KÄ"˜D8Å%bQ(V¨KÄ…'ˆ>}H"
+.’~X"Ê~fb§!¿wð5iãÒK9|^ m[4è¶2,‚IƒS\EÎ5iðz—4XÛ–4²¸KÃ(ip‚KƒQ–48…Ò`…º4\xixáÓ‡¤aŒIƒû·ç1JÉŸ/‚û†´‹)›8â#;4¸Äal«›8”³Àÿ±Q:”³ZN½­åâ`„%FYâ`Y+ôX­w¶m6ߣÝ{áÉ“88Ÿ~«8$Ü‘úº¡`Pҏÿ‚çuÅmàIÙžç¢@×ÀÏ=Øé‘m(¾›¨zßܝö™êV«éM(aSJðñcK°ÎmÐÙ®mÐÙt/“]{áÇÓ ;~ë 7¹¨ü«:€Nä<Äx	Æoy©@Gÿyà?塏¥ŠûÄ1ørû”ë	né1I¥#X‘>	/ïËåÈcQä¢-‰,R=á|øØI®†«äªÁQŽU=)R5’¤YÐì<*6Ò$ r­|,‚V~_YØÂÇ¢°«Töó•?"	ï0írîø‡^jzE)äw€ðX‰GÎwIAÄ ¹Á(J­òvŸš_RJÕ¯ eð
+ª19Pã¡bØ ¶Š÷¤$Ñ4d€àÉÊÛ?$ÖŠ‡Q¬,˺qé8ܯ¼ø[¢¬½iäÙ'¼|ÏAõÿeW†ÆtÊgÅ­ß/·p'=ËSÔ@©>c9&Aî^„Ã)¡r¶,ñ­¦ºä²yÚK5ÂÁŠÓÐàEÕ4Ë24HÍ;«æpŠµÄ	ÖØK‡Å-á…¿üÛ’^\Ä GW½mœ™Ã¦¼ò²BŠ˜¯oÉš´(ÖìE±ž­¢?VÿbÐjãú¬ÂÁá=Šóh‘V‹Œ²:òÜ}aÓ+K„O=]˜Ú¸HPÓÜg>‰µü,C‹ä­rŠóÉ)Þ=/zñ‰õo|ò6úg=\DiQŸœä-rŠwäÒ}ðé…%“O1^‰1\ùÕO1¼ði‘¬U‹bM_ëÞ*Úùdõ/>­6úgñʧEq>-’·(^ùtí>nÚ½°DøÔôõ Ou`EßøT‹ÎÄU¼ ÷Ïón‘¼UNq>9Å»çE/>±þOÞFÿ¬éÒ÷(‹ONò9Å;ré>øô’ɧÃ…˜B»ði®>>¥P®|Z$kÕ¢XÓź·Šv>Yý‹O«ë³qáÓ¢8Ÿiµh\øtí>¼Ë^Xò«›Õ¶|âU§oYÏe»çü·m³’õ½8·ÍŒ°l3£˜™UämÚ—mŐ7Û¬ÈæÉ6+Ucº{¡Uœ´…»§ÝF3‚ÛiF åešifUº±f­z,‚¶ÛÊc·.Œ86cm1ç·k‚$–krÐÌa8’vÿ’Aï	báïz£7HÒgšgëL¶[¡ævÖõDzÎdþ%ø¦š‘Oz¹ÒŽ²ni-ÂáÜJ߳ėÙ'"ël¥Á­³Sä¤/;je¡¥õÁª9œb-q‚5öÒáÍ:[<€u6.Ä0÷õÏœ	xqqg˜YÞ,’5iQ¬Ù‹b=[E;¼~gÐjãú¬]X´(ΣEZ-j.]»¯ÖÙ•%›u¶ñɬ£Å'šP[ñ4³v>9É[åç“S¼{^ôâ“Õ¿øämôÏhf½GY|r’·È)Þ‘K÷wëì‰OfŠ,¢[GÎ'3¡Vaffm|Z$kÕ¢XÓź·Šv>yýΧÕFÿ,^ù´(ΧEòÅ+Ÿ®Ýß­³g>ÑÙødÖÑâM¨­xšY;Ÿœä­rŠóÉ)Þ=/zñÉê_|ò6úg4³Þ£,>9É[äïÈ¥û»uöÄ'3EÑ­#ç“™P«03³6>-’µjQ¬é‹bÝ[E;Ÿ¼~çÓjãúl\ø´(ΧEZ->]»¿[gO|ú¸u–ìù-ÖÙ´®N	þgÝÛUŸùE·ÛAÿ{<¦Ær›ÑЈFQ죆¹Í$ÄÏÃÝfŒ°Üf”RÎå6cúL°P9Õ ÛC2žW·£,·£˜Œz,‹ÛÌxq›·™qu›ï¸ÍŒßä3±¹Í¤o¹Í…¾°´§›Â‘„"?±œ´ÍÁì×+Y`âYô¼vÎS×i'þQŽÝ_'q]ÀRþ—Ø/·ÂtŒò˜}PÒ(EÞ<lz6¢Q§Ð¯l8¥ŸxQó±Q¢ž°Y¡=#íáõ’p¿yÛHyLJÁó›FÉ5!t®z,‚Ö{_YضǢ°ù^(»÷§W>}å
+Ò74™®z˜',’¢C#·F"\–ˆ…¹k¶c:îAÜ=‚@b¿¿(YC¨Ù;XúxûaÕ2­“£t\ Jk8]-ðX­óîY¬]¢M·2­k/ü°ayæ‘ÎòŽÃ(ˆv–iÉF¯Ë‰ÚGGçWϧŠ¬Gc26ê=]9ŸjAÏI’c¥ªq+ô	r„3
+}ýØ([çû–‰on<vRÅ=–U²¨YíJc%k¢RäX)Øy"(Ÿ4‚lóR¢Uß·Llàc'i/VÁìç+p>õÊ4®bs(º>îÊt­5̹,Gjò ÖÔ•š8¾\¼ŠÛeÛütG÷½Ž…\r;²î)m%çmKd×?Š–ÿ‘¥¤k¦ÄLòßýzWóõþ3›øóö÷/hª„ÓŒIÍ©—B(Ý
ŽÓ­ÐAøÌõůËÏÁҁhƒ´òï¯7•¿§´×¯2sœQ¯ì
.C?òßö«ÿê9µVCCì¶5‘u4ÂXiAD¶¬‡/³w÷Rýºù¬~·]"9žR¸ð½ï3;2žµÉrÇUã[Šroå+d杕)¬v…öƒâNúo<iGü©f©Ä“Íbpëó†_¦9Ó(85ˆû‹QDÅüV§…—G!á)‘ûÊ’ä±”ay9h™
+ÂS^+	s¹cÃH˜EšFÈ}î—³¨©ƒÞýg6é±Úh+}º°hãk>bˆJŒ¸:„DðùžÄ'á_w}ã&ʧ8ôõ±QÖe.‚qZ^Ö””¹XÄÖ²ž”™®ˆÐ=æ‚%c’Üó¾eêxæ±S¬“Un/xôðXu“"åXI’‚†¾±a¤Ièpœ±’‚Úï[6ñ±“´«`íèw°¾pì÷ۑߘšŸbiZeöAiéB÷g£Ì´FŠÅÇÈ)kŒŒT}ŒœbcdåV#V]×Yóê"ñ'mˆªú6YÁÇFñ!2JYCä$"+8Û=óF‡èʯß1Dß5.õ:.õe\êe\Ú˸´×qé/ãÒ¯ãÒ¯ãÒ_Ç¥¿ŽK¿ŽK—þ2.íu\Úu\êu\ê;ãòL¯Åhú¶˜Dr•wÎçZ&OÒ÷
+äþ%ç¹yE„Ø®J9¡žt2rÊ\ØϬ…"a×ÄÉß
+í£àõ’p¿yÛHyLJÄûFIíDìp+ôp뽯,lÛcQØ|/”Ý{á	bþ¼ðéÏ8Îmµ¤Ö€0¯Ñ[I¢%uÌÑp‚†Qš„œ;qê>–ÀB[+x_í°zp¿iË,ý¸Á£oe˜µ‹ùf2yX•w£¬q0ÛÍò¬[ÏŒ€mqåÍGL‰eÒj(Œ-…%y‡ý»î]ãÉ„ß}^]õ¡ìZ5ü¿ ß‘VŒò .aô’¢†ì©µéA‹0¥Õhq0‚ç+­ÌV+g«5bJËŒ0G¹áá#Tµ#Y S‡Õx7Š5ê±Úlg½º0BGùÊœ
s³sC;‡y6ªÁó÷% O@] ò^$6¾í¡þ÷Þù4íBÓµ¬æø¼ªÊë¶Û¢Ê÷Ñ}1búØ–TËâ+ª¸ Z‘¶0j•Ç¶œZ«Öj:“·Lý›®Hµ—Éô±–R˱VR§°íV&»ÆJ}½²çO²n¬šqâqÞ5$lã@Š3uDÝ…-B~ÃÊe„¹KX:;)cëg¥NBdv°b'¬ÁpÒ
'k½àc£híÛˆh·a|@ØǾ<
‰óêO	†³ÏMo#¢çÑ}Õšx‘*î3kØاFMpèY³­Ìvö55˜Þ¦)ÛÔ°oŒ«V¦O
V»›¶
…µÞ
+eç|nhúi ŒA6ì݆9»q´ö)8\1䝋3:é!$yi‘>
¼‚e­O§n”Šp8÷-“’-Ç(òèÎVnȈÞu¬ÊI‘b¬‰$I9s¿+ÇoFú$Xç`ÉÇNée#±'šöÄË>Vg/<Âð¼2îOÚÈѹ´Ë|<v ‚Ew çX”œ+^Õ­2ñEë,B†CÚݳ4‰‡ÏBŒ’ôJmrk¹ ­×ӤѦAìVyF ;%ÉõÕ¼Ìc´Ú»g±¦=6Š¶Þ
+µÞ]9ûÿʤŸµÅ©q%Ü´JÒ¯Ggÿúëÿóìÿã7ÏþøÉ/½ixo:söÏÕÝ2o³\Ï2‚LcÙ§·Âw)¡06”Sª
^ij"«Æá=¬ÎꃭYÕ#õJóæ„Ôõ)Zx¬´Åéu
+›õØ(Úr+’{á…Íûgþ|lâãqµ(
+	Ò#ïR~ÏÓ=ˆé§(¯+†ÂM|ˆDSmç7/^·?-¼‰ª•háÑ,Ä/7/W\u#O§b7éûÏãÿÿàx
+endstream
+endobj
+4 0 obj
+   22398
+endobj
+2 0 obj
+<<
+   /ExtGState <<
+      /a0 << /CA 1 /ca 1 >>
+   >>
+   /Font <<
+      /f-0-0 5 0 R
+      /f-1-0 6 0 R
+      /f-2-0 7 0 R
+   >>
+>>
+endobj
+8 0 obj
+<< /Type /Page
+   /Parent 1 0 R
+   /MediaBox [ 0 0 595.275586 841.889746 ]
+   /Contents 3 0 R
+   /Group <<
+      /Type /Group
+      /S /Transparency
+      /CS /DeviceRGB
+   >>
+   /Resources 2 0 R
+>>
+endobj
+10 0 obj
+<< /Length 11 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœ+ä
+ä ’ ×
+endstream
+endobj
+11 0 obj
+   13
+endobj
+9 0 obj
+<<
+>>
+endobj
+12 0 obj
+<< /Type /Page
+   /Parent 1 0 R
+   /MediaBox [ 0 0 595.275586 841.889746 ]
+   /Contents 10 0 R
+   /Group <<
+      /Type /Group
+      /S /Transparency
+      /CS /DeviceRGB
+   >>
+   /Resources 9 0 R
+>>
+endobj
+13 0 obj
+<< /Length 14 0 R
+   /Filter /FlateDecode
+   /Length1 7884
+>>
+stream
+xœY	XSçšþþs² ûaH@""e	 ÈŽ( Š€,EAE‹àEK¥nmåV­E[»L§½•Úö6Ô¶ÖÑj®Õéííí}:]žçÎÌÓ}™:s{;UÂ|ÿ9IL°}fž	ÆärN¾÷[Þ÷ý€ €†€Ukwófråú(@”Ï>ØÚ·-6&ŽûŸÆã‘Ží®ïÀ÷' "û;ۚ׿ҬhˆÎÀsYx"Ô!‰ÇãxœÐÙ½­ïAùxü ?½qSkóHåCÄÐÏ×t7÷o†Õäm<ޏDZ›{Û6Ÿ/Û‡Ç'ñ8°«âZŒN
+¦•X‘”±ˆa%Ri¹çÒ§ïM§¶àÓF±¹ß×þ|Ê&úþ†ïF` [‹÷â`—34$-×ÉáeNë5cÌiµ*X©bCTÜt®‹!*P¹s Æ(ã•ªPèÇ´ª«WµÆ˜‰`,—–{šÐwhUð¡-"„S+N­ÓpÙZSK§¤œ–ÞAõ­1f¾5Τΰ˜Í¦x‰T¢W›Ô6u–-3èÙÚ)£¶Ì’T©O˜šjh|¬k5y½?Ýh¶3¶¹óĵÓ?X:ÏQ,37 µè1аS&M˝PÈ%bÓ„6$˜N ¦
+U©X1ÆgƒÄjM6á]‚•rÙ-d<6gÂsédhˆTÂÊTܧ•.RmœhUbV$¡ )Fo¶˜íjS¦
±Øô&µÎÀ1ê®Á¬æèÑ©³g«»¬ëÞ&ó.›ûêE÷µŽ*z³z7Ç~Äö¡ÏI¼ÅpéuX O¼N¥NuÙ¡Œ:
¯Tz)G^×®!€3„舷 ÙX —†‘‡£@]ÅiœL¸\¨„V‘eÇ>ý:)ÖÃoQkã±.:Î`K·geb¥ê£“[›ÚÏîÙ¿²êžª²}ý×7”/ZV²n{™cÕbQ1¼¯¨Õž:¼ç•‘þnktãô[¢GªKÛ¶—8V”4o«ÈÃhì3ÿžŒ½÷‹XÝþXããAçÁñëXùbýV"c¼XeN㏕¨uBsf†µš…•}9:¹ ÁîÝçûC_¹cUÙڍe‹–-×ÞtyÀÞûª –É™n¬YÜÜW–_U†s±==xÇ°¶F0CÅs¬1"\§€Ô´´Tú §‘f "Ü›slB¸·ä®P"ñ€0q¡Ñœ$ „OÝøÂILqŠÁ.ŒûˆÑîh¨[ýüðáååƒ'ÏíÎtdGç—»‹"†—íXbßµtéN#‰¬Í[œdØwi³°ûÞ¬=ÙKæ‚+W·ü½tUM…€£q|„u3 Ž>§ÁW7ž$¼=ª X·ÈHâíQ“RX7r[ÝL@ÝTHd#§â8Q@zèÁ¯CqÚ2g7éTÿ¾GËRÒÊŠ{×vß¹;JNÎõ–ç¯ZÜ°©²xY1ÒǍí¹õëÚ†7wÙS›Ö?“¹}lù¢¦9KJ:6U8x¼k0ÚU¢Ï‘o5Ðîdˆ/ªñá
E¼“ ²P>Ì«^”,€’ïò	â%H­‹(	¾»¬ÅKEJï¥<ÚXÏü™âùÖ$Ž©©¶¬“%Ñ–^—Àv‘æ„ŒtsB¹Íš`ñö×ËØ_´.½³ëâö¯‹ÉÄS—H¿ºÌŽîjBDŒ·&"ŽSù×$Δ魃w’h}ÈmÃt{QÜ%´%m´4—6väÖ5µßªY‚ÅØ\^¸¬¸i°2xÝêBݪD¬á°BЭp\T­ÕlÍòé2ux(¯GÀ«‘Ωóˆ‘î×ÅñxÆŠ­œŠÕV$'Wè⦖e¯ù}OZyvvlrRlƐ»‚|÷øzGÉ°½¿Uˆ3gæ3ñ¤x$C‡3™†
+Ø'Iá€êÂe”Hüî8O×øj  IN’ø L’ˆpàCÎÎÖ¹ôä)C¢<(J®`ƒ¸tlb-fõ­ZHÍqXO1²ìqŒ›!͵˝Ouuí“öî7<~ã­æT×	÷Í?Ü¿¨jäОºasÏg¾\T]ùNõp™ãò‰ujlruÑ“Õ+¶þëHñùÖ7=ÿÖc3_‰zÅm ƒ6A2}PÆå2…ê“ÜqTŸú»] 	8rÚ€
+¹§©{ÐɈü܃+Ĉž'o~ò‰P![º#jQoÂÜêš9îà+QóJScÉ÷âÚ…)YÕìó7£D¯[òççÞlao1ïù7Ñ:ä²Hœì`¥Ì.Ôz%í£È©Ÿ÷¡!íÄ,@#UFê”2´µtré­ÖâƒËœ‰Î ‹ÁW#++S-ZÇe<04z|÷ƶç%/ÜaŽÑ¡¼¼¸³ä©æúÆÊw³7Oí.Ë).²Ï­[Î.0Dâwþ•÷ƒV‹óÊ«	Ÿ^†¦—åç›õÎ÷|«ØH$£™˜þ–ÚBZCœ+ÞK†ý*a*d¾|`Ø"/ݍ‰ˆ·Lô[$âÛ9N¸D&•øÁW&hš¤´—u8kh”h"âX™»}`͇d´±_tύž9GN«d»pÎÛ…ç‡Ý_n„y¨à@o«gîýê£cn}­_IøúPå‹ÕÅO~R¥ßä³]îzaö3ï&“nMàìK±.ŸcìAÐR RÈ1b‘·@Þ‡±B.•ÌŠxBÄz5}ਃdâ@$”²XÖ¤emœÝÆ2ŸúÈýŸüôÓ'÷~ù=Ñ»¿&—ȳ?þè®â*ù–y‚݉®kµS§Åt&ÒÄQ†œÁÈN”VƒʼnÆ[´ô[q|¾Õe"jBÕL¨)€‡(}R®ñª4f1óš™aöj²³¡«7¿tndφye[jvíy¬{(ḱ삎šáö»™û
+ç§X´A±±É‹6Ôäg¼SQoNŒ0ç,lªY4GÐrí%Ê,—yûCé'Ï­ºˆŒðvýQÊö–HˆC }>&=r$±Mµ¬~4$~ÓR†y¹©Ž¹$i¤¹ÓÍ\g~ækš=AK
+~EÂÃYE<MˆÂ' Øp¨ž˜–¶”ÙÂÚ´Zæçï¸ìù©†™«O³]ÓÊò;l‹X2ý2SÂת{æ:é‡i…„—”i.œèkñÈnù»Ï3þ!ߟd±Û,)‰æéó‚,K¢É’›i¡~aæ‚;Ô¢¯	†hèÇS Ÿ=”'¥Ï}FD(eÔ/à·i"
Np ƒ»ˆA04´ap)…~yÉ7p–Fb¸±àÀio¤ã¼igÅOòâÓ›ŸRF´W·ÚÑú˜Ó­‰fê}n.èÏl'—–mdß ;©JHÌ Fˆï	ÑÞgßåT«UÁ]{ˆ]¥¢Ä!“ªä³Âx˜TN‰
‰<ˆ©cPc˜:D!e¤¾ŽqE N¡ó•œAÄE!uí}5ÿÊ¿ìñ¢#S[îÈ›ÚÖ;¥‹Yõû¡†ê‘î0š'–VL…/G§ÿ‘Ö¯I»¯¦&Ïz`«oíp	1©!ìÎQZ¿ QŠÊ¿1u)ðÄÁ)4L¤ÿ‚ŽO/7Ë›‘™³ûön]ßsqÏ®¶?½¥º º¬ý®ªœ¥lßÞá×û»:ï°Ý7<þÁýÍ—W.nî.+nX\¿µÜ!ðŠ=Š³
Ö‰hU(O^®™`tg
J™ÏæLâB¼LHSoösŽ6}<
“†fàÒmÌÑy‡²v--ÜÒ{.r—ù™¼ÒÔ¼•É--©	h}vµïzq×ÝÁÌë!š¬Å
=%ñatàè¾F
êXNN3$ØW{¥*Ø[ë3t€Å”H¬Ô‰]€%â
a¨ñ6µg#XéecúÎÇÆg(û[dž‰ÍüJÌn#,õñ5?¿‘©/øݺߛšš"ÆÊsìÜõß¹ÛÝVŒkëe_ÅÚZ0ƒCÎè(o¬A
+U”7V—–€‚ÆéÊȈRx¼û\¥oE ¸I
àq‰ZTh“	,G‚‘°Á V.8‰ãÄ\‚·E„&álΣ~þv^è\¿Õòl[Ïe‰± ÇÞmêyàwUΙsb÷ØpφfÓ¼ìÕu-Ã_ ƒ[Ê‹šÖwU”4TU§µf¥.®[¹¡pu}Ë•=›ËËþô¤»oã^Ç’¹)ì§KŠÛî®È,_¼~û²;°·¬3×Ew²÷ ¥§9öŽ”
¹Mò¸|QIYÅšÔC—0>¶°¬Œ)J­Vtç”nµ=ºf]xCJºúã×ö7…·6s;‘ž5•ùÇÈ+nË@z.«˜~“üypÐÉ”ƒw/äñ>,ÿWV‰ÿ§5¡°ú#ySSx/z_ ]d=ÚæÜW1KÞ<ç™ Ÿç¢«Ì8²Þ}‚¬']£@ßsÙí±ø½hÞ¿5Æ;~L¯QƒŠ%¾ý1§R­º ¤Y«‹fïŽù¾zR¯cVäÛóÄ:(¡P¼:¨Æ™ãqš2mü¦E–MO)S/¤~êàÁ¨„Ìûwê:ÌØÅíÍ›æe^*ª¹H¹×D¶'ÛEãQ*eZjÚ´ÙQ^mäÕ	¿Rå'½¸t¥Û@ø¹0•W1Y3gk¿†fÿšž2
)f»ý–ºÒ8qíǾ‚k¿0HA§Å§é–¾šâ¥¼{ÇU†Ï½†bŠ§#Xóè	¼n1êŒÆ€ý­W_¨ÑòQs¢šz-^Š<k¾¬œ¹éû?Ù¼7I“š×кõXßÚfÌíز=?snWT"ù;)™,x±jÍ%cî‹C£ŽšùYkÊ®õ‘cË×Xê}Èݺµ²Òž–KL˜ùšýö“âaÝ„F"6´ø-™„“ù«ßýu@÷c™À¯3PÀ€EÊZ% `¾=IOmˆmöV¹’–üÄÀ‰¡®ý遲æ§W{*‹ë‹›¶U5³ƒŠ
ûßÿ§{Ÿ¼g95ݹ´¼}{UnméÚþê<ƒ…å3Ÿ‹ÿ"îAžIƒ*Ø<Q€DÁÓ~a~Þ‚tUu™—
+§ßQ-‰^0G,‰küYÆùyi¹è*HEaAú|«$Ï»1œæR"C¢”aQ·Iô¬=-^9Ÿ
+P°³Vo2›éâ„îPä0z“Dâ]áÛÒÙ˜óÏ=×PÕÙá<6öæ©çVWw¶Ÿ~Øé~©&5µ¾nthää¡ßVÖ­ÝnÔmmYP߶¼ðñj¶1%~Ñ’Ž¢»ÔjqϝÎcϽ…w©îìp;9uêdcÕzgÍ–-;ÆŽ®.j¨?¾ûÐóG~»4ÿæÄA¢ÍpÞy°cEáA"	‰ùMå`…UØÀÿ¶ü/Jÿ_¼¸åÃ=¼˜ƒÛŠï0gB*ȳSŽ+”Æ0™Ü'1ô·T+Òæ[õ¼ÑÀĪx«¡7ä–Ýú|éÄÃû
+ÓÿåÙÊGMŠ'O4­t¬{¡ê€ê½÷ˆL;ÐýøÀ™åQµä}í¼='î¾óÉÌ0>ëL-™FšSƒ™þé~%N¢”ÌÚß¡Žt¾UlÂ8˜ÌÝ&‘2j•Ö@¦lX]üÂèîÄÞ­æSíç¶Ç¡oÈkÇÇÝ_¸ßwÿ³ûëF~]ìf× ×2ÃÃΨȀ}‹˜hU$&v\¯£›-.s¢Ÿ»
’Gb+£#}ð0GGÍVN§2ˆz	a Hðüò/&R¸üã1+tr<Ç©8ñ¬uï˜fÚ<]ëqžm5üìšê¾‰Ã=¿y‹åÒÛ;lQ«VÝT6•4oÅÒ:tùU-5w?®PYVÖ¦6mN=Úúù£ÛÜlwô´¿bêgjóÿšs~@3D×÷ŒF¯c¤¦,»F­bÍõþ)·H íµíî×ã^ˆ9'á$…¤}£Àè,}Õd|d€bñU„?xæ?’ffð˜™Qçà/„d¾?èõ"ãY)²»èN•¸ú
+A%S!
hñÞz0 û„A8D@$D¡›ŽÁEß&HÀU»b’¸«n6Âø3|ˆ?ï‘6x®ÀKpœð6ôÁZè…à <—aîƒÇà4Ã!"†É&ØEÖ’¥à‚‹ð(žÝ

p
Æ`ÙIj`FÞMê¡“¬Âù}Ú`Þ…gá(œƒØn‚¯ —Áü 5‚OBJ¾»·¬®)4÷oÀÊxècï6mò¼îÂÙE©•ÿë*¯“™þo<eÀß)»èÉÝ­G2~ÔÆ^€mÌ™"5ÔãÓÎ~
+vúžLÀþøtÑ[Š¿±Ž‰>ƒ½Ì4D²)pŒÿÝ· e¾€R&ºXèÈgˆo|æ‚ȍÇ?¹€÷¨m"-Þ÷X‰¶‘õXô`égÙ¿A>$É°œ‘á=Ç ‡Y	Vö=¼÷J [+fÌõwh´>f
+˜³¬’ÝÍ~À~ ªýN,§ŠûÄïKb%{%ç%?J¤J–UÊ˾ï¿#ÿI£R¼´8èEeò^å;ÁLðÞàs|&’¡û¥;‡Á§ðˆ%j<"A,r&/ V8KÊöŒÖCqg©ïþæ : Æ
+endstream
+endobj
+14 0 obj
+   4938
+endobj
+15 0 obj
+<< /Length 16 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœ]“Ïj„0‡ï>EŽÛ≮vA„²½xèjû 1·B7Jtûöù
[¨ ð™g¾8IOísëÆU¤ï~2­bõ´LWoHôt]"•°£Y™âÓ\ôœ¤!¹»-+]Z7LI]‹ô#,.«¿‰Ý“zzH„é›·äGw»¯S‡WÝužèBnYÒ4ÂÒ>÷¢çW}!‘Æä}kÃú¸Þö!í/âó6“P‘%Z2“¥eÖ†¼vgJê,\¨‡p5	9ûo½ÈÖæ[û.Cx–•M$©*@9(ˆäµè *A
+TŽ GAÒ‘Wè#È€8ÒF:p=BÞ i"É]#R¯‚Ÿd¿Ä~èZ¯*AðS¨.ÙOƒØςؽHöã
+ð+{üJøIøULð+فý¸üJt¦à—£¿;¨à—s$ü4þƒ‚_Á¿}*ø)ì’‚_Å‘ðSÇ8P<9Ûhmçà>·æê}ÙxXâ¬nS::ºŸ§yš·¬xÿÛ6Ý£
+endstream
+endobj
+16 0 obj
+   394
+endobj
+17 0 obj
+<< /Type /FontDescriptor
+   /FontName /HoratioDMed
+   /Flags 4
+   /FontBBox [ -136 -250 1094 898 ]
+   /ItalicAngle 0
+   /Ascent 946
+   /Descent -253
+   /CapHeight 898
+   /StemV 80
+   /StemH 80
+   /FontFile2 13 0 R
+>>
+endobj
+18 0 obj
+<< /Type /Font
+   /Subtype /CIDFontType2
+   /BaseFont /HoratioDMed
+   /CIDSystemInfo
+   << /Registry (Adobe)
+      /Ordering (Identity)
+      /Supplement 0
+   >>
+   /FontDescriptor 17 0 R
+   /W [0 [ 250 468 282 508 508 483 508 212 508 464 250 740 629 612 373 395 464 365 363 261 382 237 211 624 496 343 416 509 574 211 173 264 237 494 494 770 253 457 291 477 291 ]]
+>>
+endobj
+5 0 obj
+<< /Type /Font
+   /Subtype /Type0
+   /BaseFont /HoratioDMed
+   /Encoding /Identity-H
+   /DescendantFonts [ 18 0 R]
+   /ToUnicode 15 0 R
+>>
+endobj
+19 0 obj
+<< /Length 20 0 R
+   /Filter /FlateDecode
+   /Length1 2432
+>>
+stream
+xœuVLU÷?ç{_÷_õ>®€å½WPFµòúž0dAFØy@TôuºVC;ÖÐFÆjZÒ,‘4Ä6†¸+aY²
T‚ĘÆdf³kØFüƒXÓEø²s_q]»ôûÞ÷~ï9÷ûÎù|Ïùœó.  èðsÀhéˆÆÀ÷ é9ÒV·¼|Ìpnd“ü+ ôî‹íï`îËQ Ù"ù¯ûØ·öÏÙ´w@l{1Ú{¾n	@=Eºâ6RdýÐyžäq’×·u;þƒ*õ(Éÿ¶åCGZÈVꀦ’¼¡#z<&.ˆ©$’lÄ~òbì“ï_$¹šäB`,VB«@v(³”É ‹¥ ÂÄÓ‚ÒiAfZ’àßþBŸÛçΣÉ@…ðƒ7t¸aíÕûoÝ+SÚVµ¼`BI(èÁtÓ©£ÊÐ0e
É WG̓˜¥%c
+Æ ép–NÖsÈ:™/+ó>‰nY‘MÁíBðmJKMKö¡|†"»]i©>£¤XÛÊ·»ÍÓù4ŸÅ<܁ŸÍZÃ{U¼Ìwñ.~ÏON^ÅdÔ'Ç‘½]S‡MÁßáü>¶×Õý…GŸàøËÉiþO>7}íÚ$áG\Gyi"üI‰‡€B²SOÐ5
Г€1EGÝ.BZVV–_ˆB®™­È)_ŠÇ·Ij:÷ãÝ]Ï7òíxþ$®=¥–òíÏÔíé[ìUÃwÐ$ûv|T‹ìû ÊqKY£¹1Åtè¢êÃ5¦¨¹(F¤÷ÎPABÓŽŠß_ˆßã€)7/×|M%Å%ªÕ·¸Èo/ÁÇøM,ÀJæÀmŸßú¿ÒÜyfŒßŸ 8˜ÖÉSÍ8õioÖc^Á?b_è뺷0°kÏäU>Ãg'¯ÕÔ¼c¡裔Ëü‘ˆR¶›2‰¢Ã¡k¨Qê@r`LMPe–§FÙjò\`fC<(îâ’â"Üê †/.ÌòY
+Íå–?¸…µøwq SQæwø£&}t©ûìž:.òNÛ7C'Ñ‘éà¬
yEîÒ@þcIn¯„ÞÇŸ*D/‘%;/wËæâ"âŠ@~VQ~d_UÕ™ÃûwVeØ>µ»«vî¬:xàlUÕ—çÕ°‹Æ•)ñùH¦\¬w eSÕu:a‚í„;ÑEþ$|)A[+aJR<í”a}^nÚÇˉÒ›š&ޘ潽Cœ#Ã?a¨9€|`ôÝßàV¡Í‚]˵|÷Ò„5¼=^'CT'mătbBahƒª0´59^Ô¼êR®ƒêO}ª‚ÒpáWd $>oZj‘‘,}ƒ´¢Í
+b¤¢µ=Ü|ubÛîãkàœßù/Þ¤¬¿º|·êÜÐÌÇ熶¯Ïbå­{'{ÿ—|Ž/_GóÞÏ:»ºçm>w(tTÛ¡'œÙ"Dªg]Q’¤˜®Á×L .}FØ‘òBqt‹ÛGD˜áŸó£üªÐ¼Œy7oŸíÃ+Â	^Ãï/.¢ŽÅéGMŸò›oß!ÎêLöðÆ×Í ‚A«HÒÜUWVè
+++.XÝ!CV|ÕlÇ/‚DZ…Z–LÓ	xª——óV¦ˆåaµSÕ”J¥<+U©@l¦„÷…z¡Hð³y6ÇÆXeà¿ðü§ð"5’w°OàO±_ öS„~jC&¦¡‡¨Ä€Ã4A4B8ét҉ĩÄþÄj½Nê”ùEuRP{Õ£j³ºK-U]ªª‚ò™òå#å=¥_yM)QtyNž–®KÕÒs’)‰OŠ \ÞNMBµP@ˆÙÖÈ\”Òø!û^gïžÇ÷Ý[ø:á{‰ðUR^KcÁQê07a„C©)ÞdÛ•äLtP³SY†¡ÿ°ˆÑÓÜc†÷Õ#ù ‘ÚãøëÓJâ˶øbéù
F\ßR~úZ,?øê‚͘áK(䄍
+£-Új	9´–1£Fë¥P¨§¶ÞGãø²ªëí1Ǩh³”œò¨»ë}™–ù^Cf´µáGõfù0³Àœ'ßþï¶mýΝRN¸lþÿ~\ö0®r{ÒJƒ	:6q(bØ {Ê-!moÚÑÊ
K0Ã#ȤÈË3ÒcÒK4ÃéV‚}V²–^Þn…¢F·õl&ÝÛ·VE¦UÙÐ`If˜L n·˜¶ùéÁ€QÞ¶#ø=¸AZˆ·öj—˜Ð6-Œ†+(`¡Úz+ÔÔ`ûèQÄ!¸!x*˜Ê,o~0^
4¯ôwìMÚö%.øöàÃKƒžÄ¦xÕ°Õú¡k‚¼t ¹ˆóÏÀªþë¡9h³¾º¥Z\§y [û-®]è”4ê²åÕ½ôÞƒš‡¨”Óiž¥ù€úû1*á
ö;Nܺ†G¨2Ë©R8½±ˆ#¬Á®ñPnâFÁ/ä±\f²ìdC1bÎÄÌ;ÌJíRKÞ^9{:±Þ¶½¹ÆïÿA)?'
+endstream
+endobj
+20 0 obj
+   1898
+endobj
+21 0 obj
+<< /Length 22 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœ]‘Ïnà Æï<…Ý¡"I›6“¢HS{Éa´l@Àɐ@„òö#¸ê¤YéÇçlÃ/íµ5: ÿðVv`ÐFyœíâ%B£6,/@iî”v9	Çx4wëpjÍ`Y]ÿŒâü
+»e{|b Àß½B¯Í»ïKGGÝâÜ
'42Ö4 pˆ×½
+÷&&žÌûVE]‡um_«C(çT’´
+g'$zaFdu£zˆÑ04êŸ^‘«äð);ÙYvÊ›DE¢sAt í@t$ªˆJ¢g¢ùŽDgÒJ¢Š´2Õsy«lã£m¹x;N³N­nMjƒïpÖm®´~Pƒ3
+endstream
+endobj
+22 0 obj
+   263
+endobj
+23 0 obj
+<< /Type /FontDescriptor
+   /FontName /Emblem
+   /Flags 4
+   /FontBBox [ -83 -210 1162 835 ]
+   /ItalicAngle 0
+   /Ascent 688
+   /Descent -215
+   /CapHeight 835
+   /StemV 80
+   /StemH 80
+   /FontFile2 19 0 R
+>>
+endobj
+24 0 obj
+<< /Type /Font
+   /Subtype /CIDFontType2
+   /BaseFont /Emblem
+   /CIDSystemInfo
+   << /Registry (Adobe)
+      /Ordering (Identity)
+      /Supplement 0
+   >>
+   /FontDescriptor 23 0 R
+   /W [0 [ 750 646 333 566 606 253 312 627 606 ]]
+>>
+endobj
+6 0 obj
+<< /Type /Font
+   /Subtype /Type0
+   /BaseFont /Emblem
+   /Encoding /Identity-H
+   /DescendantFonts [ 24 0 R]
+   /ToUnicode 21 0 R
+>>
+endobj
+25 0 obj
+<< /Length 26 0 R
+   /Filter /FlateDecode
+   /Length1 7972
+>>
+stream
+xœÍYy|U¶¾·NÝ®ê½zOwÒIw¶ÎÒYìB `É&‹ 2h!t!²$ÆÄ…EIˆˆ(ˆÎàBÀ-Bp".ã̈"OuŒ¾7Œ?ŒIåê¨ó{óþ}¯/•ª{ëVݳ}ç|· ”¢#ˆoѲ+Èûo ÄñŽ®Z´z•¯¥à©K„8o „n_¼bɲ¯ÿÞEˆëS¼¿yIպşžÿ±¯ŸÆg‚·/›—ÛIH\Ž
¯ÀÓKâ&ìïÇ~jŲUkï|Xûöÿ€ýªªêE3â†ýˬ]Á¯'`_ï[ñëÛWܱNó=öqMváÈb¥_Ìö£´ñÈþu¢yŠ¬ŒãI^×Ùžkˆt¶çlO¾Íâ·¤ù-þÅ<é_	ñý_(m‚éòýZ“I(Y9ø9áÇ“Lr^¾.%™Kõ1è“8¯oŒÞ Ÿ¦7øü¼“>Nö²–€óqÇ^O‹µ)PžåÓü^Ñ•ãðŽ1‹ÇÄT.ÇL&dI—ºzÎv÷H½R¯ÅZŒ?”¡»¿çŽ|ßkqçOU*H¦‹x)DÿÎM>â˦´L.
$| 92O7O?Ï0Ï8/ižož^riʆ¤
¾
þ
ÉRÚ’Ú|mþ¶ä¶”I|ü’¤xåì†ìCöCŽCÎC®Cq‡Ü'í''']'ãNºMe¤¬¨° ‘„†KÏ£¹´pØð‚ÓåHÉ¥)ɇݙD©Ã®IIN_ᛸóžù¯¿¿îýWf]á7ݱjͼ[w¬ÿêÍ%]£.¯Y]6wâœkr‚÷-Þz ˜õõ’U3gŽ»)+'¯¹zÇ3Atúe
+þ)gŸ=qÉ²´ÖZûnÉPk" 1
›9hÉwJ—ºCýݪ›òzBý=gßÊ?ÒâBSЩíŽÙ¥¯ç`'úljMa)1×;&§­Àá/,°¤ú_——;nl^Þ¸ÿ|và›övZÁjrǏÏÍ;öÇŒHfVâ;F¡¬†¸H…ìuéˆdl±ó"©Õp»íåq‚d¡A- É‹“.•ô„ºÏ¾ó^wIJ—¥¸8…2ªBÅ_Gâ;£BÉ&0Ñ!8Ät!]Ìs7¸[Ü{ܺ2[
+ŠW`ñ;ü»M_T`Bc§~¼oßËtžr`ØÄIc¹Íâ–Ö=÷ÁñJ:Ey±r lã
7ÏoÝÐü;Õ†‹?çç`\ÚI<™.'r¢£–ˆ³C\yÄÚd(Oµ‰§sV‚t©'„¡þV,Úz$¥[êµçËVŸWö6xáò}‡{ÇñN<+Cû?“‰#!"DƒAàçôµï±u$m^<uAù‚:ÿöwʝմnjØ*qD<÷aCý¡vZ ôÓaʹÃG_9ñ²êsJŠPÞù q“;äd—Ec0Ú¹õÚ8c­™ìÖ–ó$èBéHSP
+ò<(q÷%´p7z?jh©7dQ£ZZ¯ZÚµ´‡x†,ý|C|{<w5:<Ñèð¨Ó¢·©ß¢ÆDÌÊj`Ä쎗Ü{´ôYeWÁ¾ÊÃO óç×6nØËúÇEŽGªÏœãŠ+zõÁãÏÑÏ£z`ì»h÷8òœ,jmŒs­…0g“Q[k٭׉\‘‚V1`šòÝÄjÀôH]¨HooH9}ÁÚRlA󏐈D%N‰—˜äœ’KŠËóÈD¦2'ƒÌËl¼CvÊ.9΁Ksêdõqš²ŸPàŽêéÆ6¤§e¶–«pŒAp;áÝ›>uSë{o@?X›³ˆÏT¾¿qúñvŃP˜½ô•êJS4¶”bþsÔ1‰Éb¹ HÌÔ&%ø “Ôz3·ÛÄÇCŸ²ÝÝd+çõîÎÑæ‰A_‚9@
+Ó=B‘3+GUc.„q†1×ÓƒQ'õþõËhÞscæS£OKr¥Ü†Üö\Õ±DqÊD£©ê(®p˜UÍD¨–ËEªÏø‚þK;KË­ê÷íþd]×—_«{r8­PvnkÚÒÚº¥iï¿å‹ÒÓ?©(©«%<ŸõõÑáóÃ*•¦“o|úñG;ÓI®à(‚ºêýÙ²´4-*|âÀã¯Eð æQ•r¤Þüç}îj7GËÒ¢é2&“ë
+HvÂUlß±cûö;·}­|IÝ.P·òÕÄoº»/\èîþf"C¡!及¢¼]”2‡ïÀõ
$…Ü,)±xÁÈo÷ 0’k}ºíö&O¹ïóîÔ¤ <hSÐ+‘€1?UŠZ8„Å£û'#‡†l\œÿ|CZ{JJ‡¬•6p%¬;§<&tÿ¶¦æÖÖæ¦m‡éRÕ¤—/w¡IŸ¸p˜›´´óÌß>úøÓ7^¨<ž¯¼Ñקœ™Vâ+ÕÜ©ÚÏ‹ò{H¡ì!»ZÀ¸Ãð¥EÛåñ¦ƒ‡Ø=š¬x”õì[g‡Ìدf ü#Õ	j6å‰¨Ž¶\-9júὁ¿¶«Vô|}ûn¯t4ßûÐÎmk¶x赏 !É ½&/_ù®©ñ«/¿üúÎú+øä{Q/Y!ç
+F»‡êZ¯ƒZ¶;ÞjZ«k’ˆe´-!¨1mãH>èÑHËOŒaÔ­Z4¯¤·×ꏖj¬Ì/æ%5$µ'ÁOÐKŒB/[z?‡ÛüÅb;³UÔ<QÕ~`¿Âï)_‡YF-?¯T-ãýÓ‘G~ßzì9Db,_ŽÂà˜©±-‘e«¦V¬áI-Gƒ$ @åëbÅq¨4baÔÿ¬0ê¢ré°ÅäJ»š	è~Õ¡èáH$Â䈺Î>å׌ëI‚lŒDScҝ8“t©¿+„ëKͺéœE²94êÉÅ5ÿãòåìÚ°a—rj=OÑ0=¿laDiPžPö+
C:œüœ¾Iz[#ž7j1Hgû»¦¶Ûn*}^‡µ‚/)‘JJæ^Cž‡Úr†H죠b÷ò‹~VÔOÝP\4}zQñ
#¦OQ4}šºF+Ê_•?^6”ˆ5&½E ¼I:Ûê¹"¾­p¸Õ"qB§zjݵqã®K—/+§FèÝôV4ÝÝ‘…Ë”€²[yT	Deãúöɤyl”÷Iú!â'~"~
$Ì–œ
Ž°g¹uéOÄÏìàÌDÌt©ÞLbæþgâwIEB¯ò¯ÄOºÂü¤(óÓû²ó³gd¯ÈnÌfª­³ÑL³o™ÚnŸ}z;+Z³HÖƱ*C—©Ï4d3“2}™þÌäÚbÝHýHÃHc±©8qdÒHßHqòˆ”ɺÉú)†ÉÆII“}“ý““çêæêçæçúæúç&G´Uº*}•¡ÒX™Tå«òW%/M©ÓÕéëuÆu¦º¤:_¿.y]JÑÞìölNe‘×/Ydê/!c‘¼?9ýÄJvìä‘c5/¾öþ!jºTq¹©Ærø…Ç~sç™—ß|FùF¹X78‰Î¦ŸhÞXµªhÔu¯þîÄ_r²•Wk¾»®²¶¤hô+{ΊÆØ`â½y…‰tÈÅ:-'î1šŒÂ`ÂÓQ@ÛðŒÓŒ¡”LˆAdj
+€ÝÄdÔŠ‚†§DkÖsféì[hr„R
˜;ØEWHÄ‹±Cí¡SDê”IÁ)Ÿ0KX$¬Qµñ|<shº4’Åg±,m–.Ë4‚äK“ÈõÆëM¿"¥¦%¤Â´š_ÍÖhÖŠkµkuk	h8?U³FŠ6v¢´OY·Ž^8H³iöÚ²FY‡°r û°²²<¦…AÜc±Ù{X=¬äù&A
ã”Óh˜ÕÂIa
3G‡$Â	¢@%Q0á¡7pFI…iœÆTM$ƒ|µf¡,’ÙdÔ£1G‰Ñ¦ÛUk”t£5ÎöXnvQý7dá'±‹hœ«j§ƒÙd6ó,C“aÌ0-ÙV
ªJýZŠÕ›š’Àº‹KUz&ÝËÙË9¶
|v ~ ©~?çåNÿ荰ʾ‡":Iéˆù¹‰êï
+ò\º‡Ãuâ8Ùc6›ô:N»Çd6‰{»â­H9Ê4œ0†ãè4ÑË™=„s:pfÔj€«Õ󻭏z9‡I‡Á€LN4pËf /&³=–bÒ4µ´F£Bê}?ÊÛ,ÖW,ª¶Lª-湤¹t)]KyÁì2Y¦ÃB0ÌéR)ÅÝÌf°›534³„9º9ú
+ƝQ¹&,¬&kèZî.¸‹_ÅViÖi×Ö"ìî0ß!­¶¬ö¬Ž_ödE¿Œ(½½B¢èщÊÊ_D’;T[·(t›¦¸¤hÜïïÄՏ³ï¼E2¿9~Ôh•“Ô¢)ÂøŠ'©d“<I¯Ó‚A”€Aây˜&ò$ø„jý½)¶jÇB‹‘¯6kwŠW/ò>ÏÀí$>“†¹M©ŸÉm—R«?Må+ÝNX^;;Õ,hA¨ÖVK4ÖzC¡ï‘ ãÆDmWL¬ÑlˆÙÃ¥në Õù‰ÜF‹Cš?ÆoüðÞÄÛ3ο¨ì½0nÅÂOÞØâ÷Ïÿ¸øÌ@-
ìxðÁÊyîÛ-3•	úá7
<eTþéä®Ãé-mm[†tgnÔ]DF=Nö“jǽ¡Ú´Ð¥«Ö
+ÔaæãR°¸`ü¤:‰Eï÷\UêKK,­çõÆÔÈ?2?^-ÊWD£Còò˜SÔÍí£âC»w?¤\VÖ ˜¯~J5JߧÊë_q—ßùðÞ¾6U¶ÏOuv|<TOW~ÎöcMò’r¼g9©Á¶/7,…òD‹Ùœî
—I›–¨’­!Î-1§‘¶JIÕI*Ôðj„¤sȸP–¡ô¬u•q±ýc•3½[û¬XF·ÒɵԾ§&í“3ß~ÿý·O~O7ÿù\xÁ
+ê}KæSòuÊoQžQ^R:”gö<¦rAB„3h»8j“¯·…1÷XØp’FÐØ%AÐLsجOuP-²…NÉ ´ÚD°6Øp‰æT‹+Õa±Sµ©z>Õa&©œ?ºê>ÛÝ­FMwqtó
WèFÌÕÊ©
+?tD3‘Ù£¢o“V­f«[ˆ³&Y3¬yÖL[¦}„õZk±­Ø>Y˜d½Ñ:Å6Å^*”Zç[çÙæÙ—
+ÖjëRÛRû¡Áš¤Ñ è"ØD»S°‹v[º*¦ÛÒíÃ…±ÐVhŸ(LÇÛ&Úof‹7ÛfÛÃBXÛÙW	wˆ«l+퍞=žCž“žTÄê=Ôâö:e(~iŠÉ5'ÎÐç8g ;_?9ÐqB!Í
+9¡zÿÇó| òG‰ð÷üø-oùñ®ÈÕ=Ëfä¸:’Aî’óâýz7æsZëÞ&¶Øü[Rš[Òqof¨5qnFü9ÉÆ ÇLzæIvfeF©Hlo¦‚PØn¥÷û/£Ÿ b Ì—S¥¬ê¬µY|mF'íä:¡‹ïb]š.G—³ËÕ×éîôÕmháU¾nûÙY›?¶áR
+cÛϼ‹÷oØ´jesÇ~eÿ轕‡ÿÔ{žrÛÖ/¿Gš_þÂœ¿¢Ó?[][}Ïz|à/‘•S&ßû›'¯[^x.3óÃØw#›—¢ØtÑ²;ŠK‰ár”*&êǃš¿c€ìÁ-R·›ù®]®=.Ün¦øˆ2„ÊXöE)o(br&½‡Rf ¡¥7ÐáØ&ÅP©¬VWö*«†¾Ô ÿL 5rºà$V]­Høwd¨µ‹»MZ#Í!F½ Ãmæ Ã’ï•.•t‡ºûKºÐ±„¡æ‹÷Oãæ
ýd>ñgdÞ%ó^l12ÿR9)§Üµ‰T­¦1nå¥êg¤+±`èóÔ, ³n\2›f*çzžnooù¹qÆ2÷Ôé5­÷Wö?ýúµþÈ‹qî˜uA=;¡Ñó0žyl8ògpÿ’ÁA‰ÍÐ ñTñÑܤ>φ£úG‹±©Ç=­y™™à†™Š
ßí NÜgÇanõPY‰Ou7±½‹W7zx#Ù‹×_ºèø)^TŽœgêÜwIÍÄyœÚh^Tîøž¼÷Î_Œý½daô~¼m»àmn
á`^͈>±—tÀ(¬doÇŽèSo’Ñä(9¨^³·IΛIÎa‹oŸBŽ“óô^²Ÿ¾GêI3YÉ«z{©c1‚m!{/Ú¾#·FWVÇ"ì=ŒŠ½$‚zǷÓL:Êa1-E
9z&áèzá˱¢m|T¿˜W‡ëéKÞænå2ù =ˆë¨k¼ï?HF£¼‹QÒIxpªüpìJèf§ÈaŠÆ@5B=™wë €îÒxI9©‡Ùø†é8ÖL¦Ós¸
+ºçE
ãY`Ð'µsi“ÃíòM¥¾?Ìõçÿ¥ë“_;™Ñn\çëœQŠÌwn;Kh‡4±OKùìßÝü,'8uF©¯ýÌ„ñCoP>Çf•â¥ÚÃaŸ0>'eœLìî™o.ù'I£áÖ5ïÏ7\9ÿðÁÀHcµö;ìŠäJ\â_a™â%ÄøÉô¯0Vÿô‹çÑb|<Yɵ)PDFñÇÉb Eð.™Â’ðÞŸ±Ÿ„ãuÑñ)8o$‘}Üfr
+Ï­¬Ž<ͯìc¯^RÏ
©aI&‰¬¯Áç_#‹5ÍÜ÷j~ˆþ¸Ó¨PaÎhBhÍÆ|6”ŠÇ~”:Œr{ñ8!˜Éˆ¶nBt%„èñlø u:KˆŸ‘†áñ'B,+±â¸
¯íaõÿU¢ÚÆsZ’Mv9âTÀÕôì6ìó\£üéë
+œ¶Ák]©ìµ0¼&ó]©ð{#¼z*À^
é t–ÁÉz8®‡cz8ú²
ÁËvèÁK
+¼¨À
+<§À·_Ï÷AûõpHgëáž6ÁS
ì);4ÀïBðÛ0<™ûCðľ0{B}ax¼ÍÄOƒ½kuloì™
+Iðh.ìÞ”Èv+ðÈ.‰=â…]<¼ÓÄNƒ8o§	vÊü|p‡v4òm&h“ù‡Ò`û}ùl»Û¶Úض4ØÚjd[m°µƒÊ²–o}PÇZÐÚA‰<™Pvò-Õõ¬ål¹[϶X`‹Ì7ãUóHhÚ|Œ5)°ù2¶ùlnä¸?=PÈüý(×ýi°i£…mJ„Mƒò ¿Ñëqéõa¸/îuÂ=mp·ÃaÖ¨@C•ÄÜpW½‰Ý‚zÜYgfwÚ Îµm°Îku°fµ­éƒÕw$°Õ>¸#VáC«a¥¿V f…‘Õ(°Â+d¾º–/ÖW²1PUi`UT5ò•¨”ù.郥ÇØR*–”±ŠcPÑÈ/YœÆ–”Á™_œ·ã¤Ûû †EX¨ÀÊçç²ræçÂm
+”)pëT¸¥æ)0w<”*ð+惛˜†™v¸)3n4³õp£¦_'…ô0%““E6¹
&…àzØõ6˜h…	œŽMpÃøq66¾ƍ•Ø8Œ½NÏÆJp¬e×éAÖ‚¬ÚqmŒásؘi0ºÄÎFO…’Q:Vb‡™¥ƒ‘ÅV6²ŠGXX±FX ÈÃ(fg…
++°±av(éX
B×hYH¡˜®ÑB~^Ëy¹–y|n¢Žå: ·‘ÏцYN³í,8²Q‰l;dË|Šž†ÌŒ|–yd `ùÀS@ô‘fŒciešbe©³ K±BŠÌ'‹à÷Å1ø’,̾N>	K²@R#Ÿ¨ƒD™÷¦@‚âSÁãÎgžYàÆ·ºó!N.êRÀ)ÃngŽJ°ÛlÌn»ÌÛl`ÅyÖc`AóZð$3ÊonÞ3)`ÄãÀ(óôØÑË#*A‡stõ 
ƒ(X˜hÁbšz`øá†NÂ+À—r: ³€(@;hx}3Íþû#ÿ×ü¯?¬:ÿ
ÿ?
+endstream
+endobj
+26 0 obj
+   6009
+endobj
+27 0 obj
+<< /Length 28 0 R
+   /Filter /FlateDecode
+>>
+stream
+xœ]’Mnƒ0…÷œb–é" ‰„ªtâ?*íÀ¤b,CܾÆÏJ¥ZéãÍó<_ê—ZÅv’
/ÔZYž§»•L_‰”Ô —@þ-ÇÖD±KnÖyá±Öý•%ÅŸNœ»ÒîYM?ED¿[ÅvÐWÚ}_|jîÆüðÈz¡$ª*RÜ»r¯­ykG¦Ø'ïkåôaY÷.í/âk5L©g–ä¤x6­dÛê+GeâNEeïN±Vÿô´@Z×Ë[k}¸páIr<TžROÅt€–2h9(‡¨ ¥ #" ¨™€ZháïˆA$AÊSz1(Dö t-O9jŠà¯ Á_&@Á_ȃ¿üåèSÀ_jÂ_¦@Á_¨	îL…F¸õm,Û=f.ïÖºqûEósÞ&<h~좙̖åŸ_>zµ»
+endstream
+endobj
+28 0 obj
+   336
+endobj
+29 0 obj
+<< /Type /FontDescriptor
+   /FontName /DejaVuSerif
+   /Flags 4
+   /FontBBox [ -769 -346 1679 1242 ]
+   /ItalicAngle 0
+   /Ascent 928
+   /Descent -235
+   /CapHeight 1242
+   /StemV 80
+   /StemH 80
+   /FontFile2 25 0 R
+>>
+endobj
+30 0 obj
+<< /Type /Font
+   /Subtype /CIDFontType2
+   /BaseFont /DejaVuSerif
+   /CIDSystemInfo
+   << /Registry (Adobe)
+      /Ordering (Identity)
+      /Supplement 0
+   >>
+   /FontDescriptor 29 0 R
+   /W [0 [ 600 513 319 401 591 644 478 640 602 640 560 644 319 390 317 390 685 564 722 564 752 672 765 1023 596 801 370 ]]
+>>
+endobj
+7 0 obj
+<< /Type /Font
+   /Subtype /Type0
+   /BaseFont /DejaVuSerif
+   /Encoding /Identity-H
+   /DescendantFonts [ 30 0 R]
+   /ToUnicode 27 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+   /Kids [ 8 0 R 12 0 R ]
+   /Count 2
+>>
+endobj
+31 0 obj
+<< /Creator (cairo 1.8.0 (http://cairographics.org))
+   /Producer (cairo 1.8.0 (http://cairographics.org))
+>>
+endobj
+32 0 obj
+<< /Type /Catalog
+   /Pages 1 0 R
+>>
+endobj
+xref
+0 33
+0000000000 65535 f 
+0000039841 00000 n 
+0000022513 00000 n 
+0000000015 00000 n 
+0000022489 00000 n 
+0000029394 00000 n 
+0000032408 00000 n 
+0000039687 00000 n 
+0000022660 00000 n 
+0000022987 00000 n 
+0000022874 00000 n 
+0000022965 00000 n 
+0000023008 00000 n 
+0000023224 00000 n 
+0000028257 00000 n 
+0000028281 00000 n 
+0000028753 00000 n 
+0000028776 00000 n 
+0000029009 00000 n 
+0000029548 00000 n 
+0000031541 00000 n 
+0000031565 00000 n 
+0000031906 00000 n 
+0000031929 00000 n 
+0000032156 00000 n 
+0000032557 00000 n 
+0000038661 00000 n 
+0000038685 00000 n 
+0000039099 00000 n 
+0000039122 00000 n 
+0000039357 00000 n 
+0000039913 00000 n 
+0000040039 00000 n 
+trailer
+<< /Size 33
+   /Root 32 0 R
+   /Info 31 0 R
+>>
+startxref
+40092
+%%EOF




More information about the kune-commits mailing list