libjboss-deployers-java-2.0.4.GA.orig/0000755000175000017500000000000011620060465017432 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/0000755000175000017500000000000011620060460023152 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/.classpath0000644000175000017500000000064511104173360025143 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/pom.xml0000644000175000017500000000273011137607542024504 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-core-spi jar JBoss Deployers Core SPI http://www.jboss.com/products/jbossmc JBoss Deployers Core SPI org.jboss jboss-common-core org.jboss.logging jboss-logging-spi apache-httpclient commons-httpclient apache-slide webdavlib apache-xerces xml-apis libjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/0000755000175000017500000000000011620060460023741 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/0000755000175000017500000000000011620060460024665 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/0000755000175000017500000000000011620060460025606 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/0000755000175000017500000000000011620060460026375 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/0000755000175000017500000000000011620060460027515 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060460031523 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/0000755000175000017500000000000011620060460032316 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/DeploymentState.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/Deplo0000644000175000017500000000260010640504270033305 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi; /** * DeploymentState. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public enum DeploymentState { /** Deploy the deployment */ DEPLOYING, /** Deployed the deployment */ DEPLOYED, /** Undeploy the deployment */ UNDEPLOYING, /** Undeployed the deployment */ UNDEPLOYED, /** Error */ ERROR } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/Ordered.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/Order0000644000175000017500000000402411031117715033316 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi; import java.util.Comparator; /** * A base interface for that defines the ordering contract and comparator.

* * Things with a lower order are processed first * * @author Scott.Stark@jboss.org * @version $Revision:$ */ public interface Ordered { /** * Get the relative order * * @return the relative order */ int getRelativeOrder(); /** * Set the relative order. * * @param order the order */ void setRelativeOrder(int order); /** * The comparator for relative ordering of deployers */ final static Comparator COMPARATOR = new OrderedComparator(); /** * The comparator for relative ordering */ static class OrderedComparator implements Comparator { public int compare(Ordered o1, Ordered o2) { int relative = o1.getRelativeOrder() - o2.getRelativeOrder(); if (relative != 0) return relative; return o1.toString().compareTo(o2.toString()); } } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/DeploymentException.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/Deplo0000644000175000017500000000656110640504270033317 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi; /** * DeploymentException. * * @author Dimitris Andreadis * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentException extends Exception { /** The serialVersionUID */ private static final long serialVersionUID = 4495361010574179178L; /** * Rethrow a throwable as a deployment exception if it isn't already. * * @param message the message * @param t the throwable * @return never * @throws DeploymentException always */ public static DeploymentException rethrowAsDeploymentException(String message, Throwable t) throws DeploymentException { if (t instanceof DeploymentException) throw (DeploymentException) t; else throw new DeploymentException(message, t); } /** * Constructs a DeploymentException with null * as its error detail message. */ public DeploymentException() { } /** * Constructs a DeploymentException with the specified detail * message. The error message string s can later be * retrieved by the {@link java.lang.Throwable#getMessage} * method of class java.lang.Throwable. * * @param s the message */ public DeploymentException(String s) { super(s); } /** * Constructs a DeploymentException with the specified detail message and * cause.

Note that the detail message associated with * cause is not automatically incorporated in * this exception's detail message. * * @param s the message * @param cause the underlying cause */ public DeploymentException(String s, Throwable cause) { super(s, cause); } /** * Constructs a DeploymentException with the specified cause and a detail * message of (cause==null ? null : cause.toString()) (which * typically contains the class and detail message of cause). * This constructor is useful for exceptions that are little more than * wrappers for other throwables (for example, {@link * java.security.PrivilegedActionException}). * * @param cause the underlying cause */ public DeploymentException(Throwable cause) { super(cause); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/libjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000755000175000017500000000000011620060460033333 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/Attachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000626510640504270033351 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments; import java.io.Serializable; import java.util.Map; /** * Attachments * * Represents a set of attachments * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface Attachments extends Serializable { /** * Get all the attachments * * @return the unmodifiable attachments */ Map getAttachments(); /** * Get attachment * * @param name the name of the attachment * @return the attachment or null if not present * @throws IllegalArgumentException for a null name */ Object getAttachment(String name); /** * Get attachment * * @param the expected type * @param name the name of the attachment * @param expectedType the expected type * @return the attachment or null if not present * @throws IllegalArgumentException for a null name or expectedType */ T getAttachment(String name, Class expectedType); /** * Get attachment * * @param the expected type * @param type the type * @return the attachment or null if not present * @throws IllegalArgumentException for a null name or type */ T getAttachment(Class type); /** * Is the attachment present * * @param name the name of the attachment * @return true when the attachment is present * @throws IllegalArgumentException for a null name */ boolean isAttachmentPresent(String name); /** * Is the attachment present * * @param name the name of the attachment * @param expectedType the expected type * @return true when the attachment is present * @throws IllegalArgumentException for a null name or expectedType */ boolean isAttachmentPresent(String name, Class expectedType); /** * Is the attachment present * * @param type the type * @return true when the attachment is present * @throws IllegalArgumentException for a null name or type */ boolean isAttachmentPresent(Class type); /** * Are there any attachments * * @return true if there are any attachments, false otherwise. */ boolean hasAttachments(); } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/MutableAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000001015510640504270033342 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments; import java.util.Map; /** * MutableAttachments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface MutableAttachments extends Attachments { /** * Add attachment * * @param name the name of the attachment * @param attachment the attachment * @return any previous attachment * @throws IllegalArgumentException for a null name or attachment * @throws UnsupportedOperationException when not supported by the implementation */ Object addAttachment(String name, Object attachment); /** * Add attachment * * @param the expected type * @param name the name of the attachment * @param attachment the attachment * @param expectedType the expected type * @return any previous attachment * @throws IllegalArgumentException for a null name, attachment or expectedType * @throws UnsupportedOperationException when not supported by the implementation */ T addAttachment(String name, T attachment, Class expectedType); /** * Add attachment * * @param the expected type * @param attachment the attachment * @param type the type * @return any previous attachment * @throws IllegalArgumentException for a null name, attachment or type * @throws UnsupportedOperationException when not supported by the implementation */ T addAttachment(Class type, T attachment); /** * Remove attachment * * @param name the name of the attachment * @return the attachment or null if not present * @throws IllegalArgumentException for a null name * @throws UnsupportedOperationException when not supported by the implementation */ Object removeAttachment(String name); /** * Remove attachment * * @param the expected type * @param name the name of the attachment * @return the attachment or null if not present * @param expectedType the expected type * @throws IllegalArgumentException for a null name or expectedType * @throws UnsupportedOperationException when not supported by the implementation */ T removeAttachment(String name, Class expectedType); /** * Remove attachment * * @param the expected type * @return the attachment or null if not present * @param type the type * @throws IllegalArgumentException for a null name or type */ T removeAttachment(Class type); /** * Set the attachments * * @param map the new attachments a map of names to attachments * @throws IllegalArgumentException for a null map */ void setAttachments(Map map); /** * Clear the attachments * * @throws UnsupportedOperationException when not supported by the implementation */ void clear(); /** * Get the number of changes that have happened. * * @return number of adds/removes that have happened since creation or clearChangeCount. */ int getChangeCount(); /** * Reset the change count to zero. */ void clearChangeCount(); } ././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/PredeterminedManagedObjectAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000331610640504270033343 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments; import java.io.Serializable; /** * PredeterminedManagedObjectAttachments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface PredeterminedManagedObjectAttachments extends Serializable { /** * Get the predetermined managed objects * * @return the predetermined managed objects */ Attachments getPredeterminedManagedObjects(); /** * Set the predetermined managed objects * * @param predetermined the predetermined managed objects * @throws IllegalArgumentException for a null parameter */ void setPredeterminedManagedObjects(Attachments predetermined); } ././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/ManagedObjectsWithTransientAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000263410640504270033345 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments; /** * ManagedObjectAttachments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface ManagedObjectsWithTransientAttachments extends ManagedObjectAttachments { /** * Get the transient attachments * * @return the managed objects */ MutableAttachments getTransientAttachments(); } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/AttachmentsBuilder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000364010640504270033343 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments; import java.security.AccessController; import org.jboss.util.builder.AbstractBuilder; /** * AttachmentsBuilder. * * @author Adrian Brock * @version $Revision: 1.1 $ */ class AttachmentsBuilder { /** The default attachments builder */ private static String DEFAULT_FACTORY = "org.jboss.deployers.plugins.attachments.DefaultAttachmentsFactory"; /** The singleton */ private static AttachmentsFactory singleton; /** * Get the instance * * @return the instance */ static synchronized AttachmentsFactory getInstance() { if (singleton == null) { AbstractBuilder builder = new AbstractBuilder(AttachmentsFactory.class, DEFAULT_FACTORY); singleton = AccessController.doPrivileged(builder); } return singleton; } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/helpers/libjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000755000175000017500000000000011620060460033333 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/helpers/AbstractMutableAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000630111044075712033343 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments.helpers; import java.util.Map; import java.util.Map.Entry; import org.jboss.deployers.spi.attachments.MutableAttachments; /** * AbstractMutableAttachments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractMutableAttachments extends AbstractAttachments implements MutableAttachments { /** The serialVersionUID */ private static final long serialVersionUID = -1692116584854666016L; public T addAttachment(String name, T attachment, Class expectedType) { if (expectedType == null) throw new IllegalArgumentException("Null expectedType"); Object result = addAttachment(name, attachment); if (result == null) return null; if (expectedType.isInstance(result) == false) throw new IllegalArgumentException("Previous attachment not of the same type: expected=" + expectedType + ", previous=" + result); return expectedType.cast(result); } public void setAttachments(Map map) { if (map == null) throw new IllegalArgumentException("Null map"); clear(); for (Entry entry : map.entrySet()) addAttachment(entry.getKey(), entry.getValue()); } public T addAttachment(Class type, T attachment) { if (type == null) throw new IllegalArgumentException("Null type"); return addAttachment(type.getName(), attachment, type); } public T removeAttachment(String name, Class expectedType) { if (expectedType == null) throw new IllegalArgumentException("Null expectedType"); Object result = removeAttachment(name); if (result == null) return null; if (expectedType.isInstance(result) == false) throw new IllegalArgumentException("Removed attachment not of the same type: expected=" + expectedType + ", removed=" + result); return expectedType.cast(result); } public T removeAttachment(Class type) { if (type == null) throw new IllegalArgumentException("Null type"); return removeAttachment(type.getName(), type); } } ././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/helpers/ManagedObjectAttachmentsImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000444711044604716033356 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments.helpers; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import org.jboss.deployers.spi.attachments.AttachmentsFactory; import org.jboss.deployers.spi.attachments.ManagedObjectAttachments; import org.jboss.deployers.spi.attachments.MutableAttachments; /** * ManagedObjectAttachmentsImpl. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManagedObjectAttachmentsImpl extends PredeterminedManagedObjectAttachmentsImpl implements ManagedObjectAttachments { /** The serialVersionUID */ private static final long serialVersionUID = -195530143173768763L; /** The transient managed objects */ private transient MutableAttachments transientManagedObjects = AttachmentsFactory.createMutableAttachments(); public MutableAttachments getTransientManagedObjects() { return transientManagedObjects; } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); } /** * @serialData attachments * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); } } ././@LongLink0000000000000000000000000000024200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/helpers/PredeterminedManagedObjectAttachmentsImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000505010640504270033340 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments.helpers; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.AttachmentsFactory; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; /** * PredeterminedManagedObjectAttachmentsImpl. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class PredeterminedManagedObjectAttachmentsImpl implements PredeterminedManagedObjectAttachments, Externalizable { /** The serialVersionUID */ private static final long serialVersionUID = -195530143173768763L; /** The predetermined attachments */ private Attachments predetermined = AttachmentsFactory.createMutableAttachments(); public Attachments getPredeterminedManagedObjects() { return predetermined; } public void setPredeterminedManagedObjects(Attachments predetermined) { if (predetermined == null) throw new IllegalArgumentException("Null predetermined"); this.predetermined = predetermined; } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { predetermined = (Attachments) in.readObject(); } /** * @serialData attachments * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(predetermined); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/helpers/AbstractAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000541610640504270033346 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments.helpers; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import org.jboss.deployers.spi.attachments.Attachments; /** * AbstractAttachments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractAttachments implements Attachments, Externalizable { /** The serialVersionUID */ private static final long serialVersionUID = -4084792454892396925L; public T getAttachment(String name, Class expectedType) { if (expectedType == null) throw new IllegalArgumentException("Null expectedType"); Object result = getAttachment(name); if (result == null) return null; return expectedType.cast(result); } public T getAttachment(Class type) { if (type == null) throw new IllegalArgumentException("Null type"); return getAttachment(type.getName(), type); } public boolean isAttachmentPresent(String name, Class expectedType) { if (expectedType == null) throw new IllegalArgumentException("Null expectedType"); Object result = getAttachment(name); if (result == null) return false; try { expectedType.cast(result); } catch (ClassCastException e) { return false; } return true; } public boolean isAttachmentPresent(Class type) { if (type == null) throw new IllegalArgumentException("Null type"); return isAttachmentPresent(type.getName(), type); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { } public void writeExternal(ObjectOutput out) throws IOException { } } ././@LongLink0000000000000000000000000000024300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/helpers/ManagedObjectsWithTransientAttachmentsImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000472210640504270033345 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments.helpers; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import org.jboss.deployers.spi.attachments.AttachmentsFactory; import org.jboss.deployers.spi.attachments.ManagedObjectsWithTransientAttachments; import org.jboss.deployers.spi.attachments.MutableAttachments; /** * ManagedObjectsWithTransientAttachmentsImpl. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManagedObjectsWithTransientAttachmentsImpl extends ManagedObjectAttachmentsImpl implements ManagedObjectsWithTransientAttachments { /** The serialVersionUID */ private static final long serialVersionUID = -195530143173768763L; /** The transient attachments */ private transient MutableAttachments transientAttachments; /** * Create a new ManagedObjectsWithTransientAttachmentsImpl. */ public ManagedObjectsWithTransientAttachmentsImpl() { transientAttachments = AttachmentsFactory.createMutableAttachments(); } public MutableAttachments getTransientAttachments() { return transientAttachments; } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); } /** * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/ManagedObjectAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000264210640504270033344 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments; /** * ManagedObjectAttachments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface ManagedObjectAttachments extends PredeterminedManagedObjectAttachments { /** * Get the transient managed objects * * @return the managed objects */ MutableAttachments getTransientManagedObjects(); } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attachments/AttachmentsFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/attac0000644000175000017500000000371210640504270033343 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.attachments; /** * AttachmentsFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AttachmentsFactory { /** * Create an attachments object * * @return the attachments */ public static Attachments createAttachments() { return AttachmentsBuilder.getInstance().newAttachments(); } /** * Create a mutable attachments object * * @return the attachments */ public static MutableAttachments createMutableAttachments() { return AttachmentsBuilder.getInstance().newMutableAttachments(); } /** * Create an attachments object * * @return the attachments */ protected abstract Attachments newAttachments(); /** * Create a mutable attachments object * * @return the attachments */ protected abstract MutableAttachments newMutableAttachments(); } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/struc0000755000175000017500000000000011620060460033377 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/ModificationType.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/struc0000644000175000017500000000334511022205021033374 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.structure; import java.util.Arrays; /** * The modification type. * Unpack, explode, ... * * @author Ales Justin */ public enum ModificationType { UNPACK, EXPLODE, TEMP; /** * Get the modification type. * * @param type the type * @return matching modification type */ public static ModificationType getModificationType(String type) { for (ModificationType mt : values()) { if (mt.toString().equalsIgnoreCase(type)) return mt; } throw new IllegalArgumentException("No such modification type: " + type + ", available: " + Arrays.asList(values())); } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/ContextInfo.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/struc0000644000175000017500000000703211001632225033400 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.structure; import java.io.Serializable; import java.util.List; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; /** * An encapsulation of context information * * @author Scott.Stark@jboss.org * @author adrian@jboss.org * @author ales.justin@jboss.org * @version $Revision: 1.1$ */ public interface ContextInfo extends PredeterminedManagedObjectAttachments, Serializable { /** The default metadata path */ String DEFAULT_METADATA_PATH = "META-INF"; /** * Get the logical path of the context * * @return the logical path */ String getPath(); /** * Get the logical path of the metdata location. * * @return the path of the metdata location. */ List getMetaDataPath(); /** * Add the metaDataPath. * * @param path the metaDataPath. * @throws IllegalArgumentException for a null path */ void addMetaDataPath(String path); /** * Get the classpath locations within the context * * @return the possibly null context classpath */ List getClassPath(); /** * Add a class path entry * * @param entry the entry to add * @throws IllegalArgumentException for a null entry */ void addClassPathEntry(ClassPathEntry entry); /** * Get the relative order of this context * * @return the relative order */ int getRelativeOrder(); /** * Set the relative order of this context * * @param relativeOrder the relative order */ void setRelativeOrder(int relativeOrder); /** * The comparator class name, the class must implement *

    * java.util.Comparator
    * 
* * If the class has a public static field called "INSTANCE" * then that will be used rather than creating a new object.

* * If none is given then the deployments are ordered * by their relative order and then path/simple name. * * @return the comparator class name */ String getComparatorClassName(); /** * The comparator class name, the class must implement * @param className the comparator class name */ void setComparatorClassName(String className); /** * Get the modification type. * * @return the modification type */ ModificationType getModificationType(); /** * Set the modification type. * * @param modificationType the modification type */ void setModificationType(ModificationType modificationType); } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/StructureMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/struc0000644000175000017500000000446510640504270033415 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.structure; import java.io.Serializable; import java.util.List; /** * A set of subdeployment contexts. * * @author Scott.Stark@jboss.org * @author adrian@jboss.org * @version $Revision: 1.1$ */ public interface StructureMetaData extends Serializable { /** * Get a context by path * * @param path the path of the context * @return the context or null if there is no such context * @throws IllegalArgumentException for a null path */ ContextInfo getContext(String path); /** * Add a context * * @param context the context to add * @throws IllegalArgumentException for a null context or if the context has no path * @throws IllegalStateException if a context is already present with that path */ void addContext(ContextInfo context); /** * Remove a context * * @param context the context to remove * @throws IllegalArgumentException for a null context */ void removeContext(ContextInfo context); /** * Remove a context * * @param path the patch of the context to remove * @throws IllegalArgumentException for a null path */ void removeContext(String path); /** * Get the contexts * * @return an immutable set of contexts */ List getContexts(); } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/StructureMetaDataFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/struc0000644000175000017500000001404210731616564033420 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.structure; import java.util.List; /** * StructureFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class StructureMetaDataFactory { /** * Create a new StructureMetaData. * * @return the structure metadata */ public static StructureMetaData createStructureMetaData() { return StructureMetaDataBuilder.getInstance().newStructureMetaData(); } /** * Create a new ContextInfo. * * @return the context info * @throws IllegalArgumentException for a null path */ public static ContextInfo createContextInfo() { return StructureMetaDataBuilder.getInstance().newContextInfo(""); } /** * Create a new ContextInfo. * * @param path the path * @return the context info * @throws IllegalArgumentException for a null path */ public static ContextInfo createContextInfo(String path) { return StructureMetaDataBuilder.getInstance().newContextInfo(path); } /** * Create a new ContextInfo. * * @param path the path * @param classPath the classpath * @return the context info * @throws IllegalArgumentException for a null path */ public static ContextInfo createContextInfo(String path, List classPath) { return StructureMetaDataBuilder.getInstance().newContextInfo(path, classPath); } /** * Create a new ContextInfo. * * @param path the path * @param metaDataPath the metadata path * @param classPath the class path * @return the context info * @throws IllegalArgumentException for a null path or metadata path */ public static ContextInfo createContextInfo(String path, String metaDataPath, List classPath) { return StructureMetaDataBuilder.getInstance().newContextInfo(path, metaDataPath, classPath); } /** * Create a new ContextInfo. * * @param path the path * @param metaDataPath the metadata path * @param classPath the class path * @return the context info * @throws IllegalArgumentException for a null path or metadata path */ public static ContextInfo createContextInfo(String path, List metaDataPath, List classPath) { return StructureMetaDataBuilder.getInstance().newContextInfo(path, metaDataPath, classPath); } /** * Create a new classpath entry * * @return the classpath entry */ public static ClassPathEntry createClassPathEntry() { return StructureMetaDataBuilder.getInstance().newClassPathEntry("", null); } /** * Create a new classpath entry * * @param path the path * @return the classpath entry * @throws IllegalArgumentException for a null path */ public static ClassPathEntry createClassPathEntry(String path) { return StructureMetaDataBuilder.getInstance().newClassPathEntry(path, null); } /** * Create a new classpath entry * * @param path the path * @param suffixes the suffixes * @return the classpath entry * @throws IllegalArgumentException for a null path */ public static ClassPathEntry createClassPathEntry(String path, String suffixes) { return StructureMetaDataBuilder.getInstance().newClassPathEntry(path, suffixes); } /** * Create a new StructureMetaData. * * @return the structure metadata */ protected abstract StructureMetaData newStructureMetaData(); /** * Create a new ContextInfo. * * @param path the path * @return the context info * @throws IllegalArgumentException for a null path */ protected abstract ContextInfo newContextInfo(String path); /** * Create a new ContextInfo. * * @param path the path * @param classPath the classpath * @return the context info * @throws IllegalArgumentException for a null path */ protected abstract ContextInfo newContextInfo(String path, List classPath); /** * Create a new ContextInfo. * * @param path the path * @param metaDataPath the metadata path * @param classPath the class path * @return the context info * @throws IllegalArgumentException for a null path or metadata path */ protected abstract ContextInfo newContextInfo(String path, String metaDataPath, List classPath); /** * Create a new ContextInfo. * * @param path the path * @param metaDataPath the metadata path * @param classPath the class path * @return the context info * @throws IllegalArgumentException for a null path or metadata path */ protected abstract ContextInfo newContextInfo(String path, List metaDataPath, List classPath); /** * Create a new classpath entry * * @param path the path * @param suffixes the suffixes * @return the classpath entry * @throws IllegalArgumentException for a null path */ protected abstract ClassPathEntry newClassPathEntry(String path, String suffixes); } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/ClassPathEntry.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/struc0000644000175000017500000000303110642242471033405 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.structure; import java.io.Serializable; /** * A classpath entry. * * TODO JBMICROCONT-182 other stuff e.g. inclusion/exclusion filters, etc. * @author Scott.Stark@jboss.org * @author adrian@jboss.org * @version $Revision: 1.1$ */ public interface ClassPathEntry extends Serializable { /** * Get the path relative to the context virtual file * * @return the path. */ String getPath(); /** * Get the suffixes * * @return the suffixes. */ String getSuffixes(); } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/StructureMetaDataBuilder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/src/main/java/org/jboss/deployers/spi/struc0000644000175000017500000000371410640504270033411 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.structure; import java.security.AccessController; import org.jboss.util.builder.AbstractBuilder; /** * StructureMetaDataBuilder. * * @author Adrian Brock * @version $Revision: 1.1 $ */ class StructureMetaDataBuilder { /** The default attachments builder */ private static String DEFAULT_FACTORY = "org.jboss.deployers.plugins.structure.DefaultStructureMetaDataFactory"; /** The singleton */ private static StructureMetaDataFactory singleton; /** * Get the instance * * @return the instance */ static synchronized StructureMetaDataFactory getInstance() { if (singleton == null) { AbstractBuilder builder = new AbstractBuilder(StructureMetaDataFactory.class, DEFAULT_FACTORY); singleton = AccessController.doPrivileged(builder); } return singleton; } } libjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/.settings/0000755000175000017500000000000011620060460025070 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740032072 0ustar twernertwerner#Fri Sep 21 17:49:11 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-core-spi/.project0000644000175000017500000000052411071370224024624 0ustar twernertwerner jboss-deployers-core-spi JBoss Deployers Core SPI org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/0000755000175000017500000000000011620060463022375 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/.classpath0000644000175000017500000001340411113263640024361 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/pom.xml0000644000175000017500000001376211137607542023733 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-impl jar JBoss Deployers Impl http://www.jboss.com/products/jbossmc JBoss Deployers Impl org.apache.maven.plugins maven-jar-plugin test-jar org.apache.maven.plugins maven-surefire-plugin org.jboss.deployers jboss-deployers-spi org.jboss.microcontainer jboss-dependency org.jboss.cl jboss-classloading org.jboss jboss-common-core org.jboss.logging jboss-logging-spi org.jboss.microcontainer jboss-dependency org.jboss jboss-mdr org.jboss jboss-reflect org.jboss jboss-common-core org.jboss.logging jboss-logging-spi org.jboss.microcontainer jboss-kernel org.jboss jboss-common-core org.jboss.logging jboss-logging-spi javassist javassist org.jboss.deployers jboss-deployers-core test org.jboss.deployers jboss-deployers-core-spi org.jboss.logging jboss-logging-spi org.jboss.deployers jboss-deployers-client test org.jboss.deployers jboss-deployers-core-spi org.jboss.deployers jboss-deployers-client-spi org.jboss.logging jboss-logging-spi org.jboss.aop jboss-aop test org.jboss.microcontainer jboss-container org.jboss.microcontainer jboss-dependency org.jboss.logging jboss-logging-spi org.jboss jboss-common-core apache-xerces xml-apis ant ant org.jboss.logging jboss-logging-log4j test org.jboss.test jboss-test test junit junit test libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/0000755000175000017500000000000011620060462023163 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/0000755000175000017500000000000011620060460024140 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/0000755000175000017500000000000011620060460025061 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/0000755000175000017500000000000011620060460025650 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/0000755000175000017500000000000011620060460026770 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/0000755000175000017500000000000011620060460027747 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/0000755000175000017500000000000011620060462031757 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/0000755000175000017500000000000011620060462033070 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/te0000755000175000017500000000000011620060462033421 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/test/PopulateMetaDataRepositoryUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/te0000644000175000017500000001426310720557046033442 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.test; import java.lang.annotation.Annotation; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.annotation.factory.AnnotationCreator; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.plugins.deployers.DeployersImpl; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.metadata.plugins.repository.basic.BasicMetaDataRepository; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.scope.support.TestClassAnnotation; import org.jboss.test.deployers.scope.support.TestClassAspect; import org.jboss.test.deployers.scope.support.TestComponent1; import org.jboss.test.deployers.scope.support.TestComponent2; import org.jboss.test.deployers.scope.support.TestComponentCreator; import org.jboss.test.deployers.scope.support.TestComponentDeployer; import org.jboss.test.deployers.scope.support.TestComponentMetaData; import org.jboss.test.deployers.scope.support.TestComponentMetaDataContainer; import org.jboss.test.deployers.scope.support.TestComponentMetaDataRepositoryPopulator; /** * PopulateMetaDataRepositoryUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class PopulateMetaDataRepositoryUnitTestCase extends AbstractDeployerTest { private TestComponentDeployer deployer1 = new TestComponentDeployer(); private TestComponentMetaDataRepositoryPopulator deployer2 = new TestComponentMetaDataRepositoryPopulator(); private TestComponentCreator deployer3 = new TestComponentCreator(); private BasicMetaDataRepository repository; public static Test suite() { return new TestSuite(PopulateMetaDataRepositoryUnitTestCase.class); } public PopulateMetaDataRepositoryUnitTestCase(String name) { super(name); } public void testClassAnnotation() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestComponentMetaData c = new TestComponentMetaData("C"); c.clazz = TestComponent1.class; TestComponentMetaDataContainer md = new TestComponentMetaDataContainer(c); addMetaData(a, md); main.addDeployment(a); try { main.process(); main.checkComplete(); DeploymentUnit unit = getDeploymentUnit(main, "A"); List components = unit.getComponents(); assertEquals(1, components.size()); DeploymentUnit component = components.get(0); TestComponent1 proxy = component.getAttachment("proxy", TestComponent1.class); TestClassAspect.classAnnotation = null; proxy.doSomething(); TestClassAnnotation annotation = TestClassAspect.classAnnotation; assertNotNull(annotation); assertEquals("Class", annotation.where()); } finally { main.removeDeployment(a); main.process(); } } public void testInstanceAnnotation() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestComponentMetaData c = new TestComponentMetaData("C"); c.clazz = TestComponent2.class; c.classAnnotations.add((Annotation) AnnotationCreator.createAnnotation("@" + TestClassAnnotation.class.getName() + "(where=\"Instance\")", getClass().getClassLoader())); TestComponentMetaDataContainer md = new TestComponentMetaDataContainer(c); addMetaData(a, md); main.addDeployment(a); try { main.process(); main.checkComplete(); DeploymentUnit unit = getDeploymentUnit(main, "A"); List components = unit.getComponents(); assertEquals(1, components.size()); DeploymentUnit component = components.get(0); TestComponent2 proxy = component.getAttachment("proxy", TestComponent2.class); TestClassAspect.classAnnotation = null; proxy.doSomething(); TestClassAnnotation annotation = TestClassAspect.classAnnotation; assertNotNull(annotation); assertEquals("Instance", annotation.where()); } finally { main.removeDeployment(a); main.process(); } } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, TestComponentMetaDataContainer md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(TestComponentMetaDataContainer.class, md); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer1, deployer2, deployer3); } @Override protected Deployers createDeployers() { DeployersImpl deployers = (DeployersImpl) super.createDeployers(); repository = new BasicMetaDataRepository(); deployers.setRepository(repository); return deployers; } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/test/DeployerScopeUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/te0000644000175000017500000002256110665501124033434 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.test; import java.util.HashSet; import java.util.List; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.plugins.deployers.DeployersImpl; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.metadata.plugins.repository.basic.BasicMetaDataRepository; import org.jboss.metadata.spi.MetaData; import org.jboss.metadata.spi.MutableMetaData; import org.jboss.metadata.spi.scope.CommonLevels; import org.jboss.metadata.spi.scope.ScopeKey; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.scope.support.TestComponentDeployer; import org.jboss.test.deployers.scope.support.TestComponentMetaData; import org.jboss.test.deployers.scope.support.TestComponentMetaDataContainer; /** * DeployerScopeUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerScopeUnitTestCase extends AbstractDeployerTest { private static final DeploymentFactory factory = new DeploymentFactory(); private TestComponentDeployer deployer = new TestComponentDeployer(); private BasicMetaDataRepository repository; private Set scopes = new HashSet(); public static ScopeKey SCOPE_A = createAppScope("A"); public static ScopeKey SCOPE_AA = createScope("A", "A"); public static ScopeKey createAppScope(String app) { return new ScopeKey(CommonLevels.APPLICATION, app); } public static ScopeKey createDepScope(String dep) { return new ScopeKey(CommonLevels.DEPLOYMENT, dep); } public static ScopeKey createInstanceScope(String name) { return new ScopeKey(CommonLevels.INSTANCE, name); } public static ScopeKey createScope(String app, String dep) { ScopeKey result = ScopeKey.DEFAULT_SCOPE.clone(); result.addScope(CommonLevels.APPLICATION, app); result.addScope(CommonLevels.DEPLOYMENT, dep); return result; } public static ScopeKey createComponentScope(String app, String dep, String comp) { ScopeKey result = createScope(app, dep); result.addScope(CommonLevels.INSTANCE, comp); return result; } public static Test suite() { return new TestSuite(DeployerScopeUnitTestCase.class); } public DeployerScopeUnitTestCase(String name) { super(name); } public void testSimpleScope() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); main.addDeployment(a); main.process(); DeploymentUnit unit = getDeploymentUnit(main, "A"); assertScope(SCOPE_AA, SCOPE_A, unit); main.removeDeployment(a); main.process(); assertNoScopes(); } public void testSubDeploymentScope() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); factory.addContext(a, "A1"); factory.addContext(a, "A2"); main.addDeployment(a); main.process(); DeploymentUnit unit = getDeploymentUnit(main, "A"); assertScope(SCOPE_AA, SCOPE_A, unit); List children = unit.getChildren(); assertEquals(2, children.size()); for (DeploymentUnit child : children) { ScopeKey scope = createScope("A", child.getName()); ScopeKey mutable = createDepScope(child.getName()); assertScope(scope, mutable, child); } main.removeDeployment(a); main.process(); assertNoScopes(); } public void testSimpleComponents() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestComponentMetaData c1 = new TestComponentMetaData("C1"); TestComponentMetaData c2 = new TestComponentMetaData("C2"); TestComponentMetaDataContainer md = new TestComponentMetaDataContainer(c1, c2); addMetaData(a, md); main.addDeployment(a); main.process(); DeploymentUnit unit = getDeploymentUnit(main, "A"); assertScope(SCOPE_AA, SCOPE_A, unit); List components = unit.getComponents(); assertEquals(2, components.size()); for (DeploymentUnit component : components) { ScopeKey scope = createComponentScope("A", "A", component.getName()); ScopeKey mutable = createInstanceScope(component.getName()); assertScope(scope, mutable, component); } main.removeDeployment(a); main.process(); assertNoScopes(); } public void testSubDeploymentScopeWithComponents() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); ContextInfo a1 = factory.addContext(a, "A1"); TestComponentMetaData a1c1 = new TestComponentMetaData("A1C1"); TestComponentMetaData a1c2 = new TestComponentMetaData("A1C2"); TestComponentMetaDataContainer md1 = new TestComponentMetaDataContainer(a1c1, a1c2); addMetaData(a1, md1); ContextInfo a2 = factory.addContext(a, "A2"); TestComponentMetaData a2c1 = new TestComponentMetaData("A2C1"); TestComponentMetaData a2c2 = new TestComponentMetaData("A2C2"); TestComponentMetaDataContainer md2 = new TestComponentMetaDataContainer(a2c1, a2c2); addMetaData(a2, md2); main.addDeployment(a); main.process(); DeploymentUnit unit = getDeploymentUnit(main, "A"); assertScope(SCOPE_AA, SCOPE_A, unit); List children = unit.getChildren(); assertEquals(2, children.size()); for (DeploymentUnit child : children) { ScopeKey scope = createScope("A", child.getName()); ScopeKey mutable = createDepScope(child.getName()); assertScope(scope, mutable, child); List components = child.getComponents(); assertEquals(2, components.size()); for (DeploymentUnit component : components) { scope = createComponentScope("A", child.getName(), component.getName()); mutable = createInstanceScope(component.getName()); assertScope(scope, mutable, component); } } main.removeDeployment(a); main.process(); assertNoScopes(); } protected void assertScope(ScopeKey scope, ScopeKey mutable, DeploymentUnit unit) { scopes.add(scope); scopes.add(mutable); assertEquals(scope, unit.getScope()); assertEquals(mutable, unit.getMutableScope()); MetaData metaData = unit.getMetaData(); assertNotNull("Should have metadata for " + unit.getName(), metaData); String expected = null; DeploymentUnit parent = unit.getParent(); if (parent != null) expected = parent.getName(); assertEquals(expected, metaData.getMetaData("test")); MutableMetaData mutableMetaData = unit.getMutableMetaData(); mutableMetaData.addMetaData("test", unit.getName(), String.class); assertEquals(unit.getName(), metaData.getMetaData("test")); } protected void assertNoScopes() { for (ScopeKey scope : scopes) { assertNull(scope + " should have been removed", repository.getMetaData(scope)); assertNull(scope + " should have been removed", repository.getMetaDataRetrieval(scope)); } } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, TestComponentMetaDataContainer md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(TestComponentMetaDataContainer.class, md); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer); } @Override protected Deployers createDeployers() { DeployersImpl deployers = (DeployersImpl) super.createDeployers(); repository = new BasicMetaDataRepository(); deployers.setRepository(repository); return deployers; } } ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/test/LoaderMetaDataRepositoryUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/te0000644000175000017500000001431510705121037033426 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.test; import java.lang.annotation.Annotation; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.annotation.factory.AnnotationCreator; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.plugins.deployers.DeployersImpl; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.metadata.plugins.repository.basic.BasicMetaDataRepository; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.scope.support.TestClassAnnotation; import org.jboss.test.deployers.scope.support.TestClassAspect; import org.jboss.test.deployers.scope.support.TestComponent1; import org.jboss.test.deployers.scope.support.TestComponent2; import org.jboss.test.deployers.scope.support.TestComponentCreator; import org.jboss.test.deployers.scope.support.TestComponentDeployer; import org.jboss.test.deployers.scope.support.TestComponentMetaData; import org.jboss.test.deployers.scope.support.TestComponentMetaDataContainer; import org.jboss.test.deployers.scope.support.TestComponentMetaDataRepositoryLoader; /** * LoaderMetaDataRepositoryUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class LoaderMetaDataRepositoryUnitTestCase extends AbstractDeployerTest { private TestComponentDeployer deployer1 = new TestComponentDeployer(); private TestComponentMetaDataRepositoryLoader deployer2 = new TestComponentMetaDataRepositoryLoader(); private TestComponentCreator deployer3 = new TestComponentCreator(); private BasicMetaDataRepository repository; public static Test suite() { return new TestSuite(LoaderMetaDataRepositoryUnitTestCase.class); } public LoaderMetaDataRepositoryUnitTestCase(String name) { super(name); } public void testClassAnnotation() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestComponentMetaData c = new TestComponentMetaData("C"); c.clazz = TestComponent1.class; TestComponentMetaDataContainer md = new TestComponentMetaDataContainer(c); addMetaData(a, md); main.addDeployment(a); try { main.process(); main.checkComplete(); DeploymentUnit unit = getDeploymentUnit(main, "A"); List components = unit.getComponents(); assertEquals(1, components.size()); DeploymentUnit component = components.get(0); TestComponent1 proxy = component.getAttachment("proxy", TestComponent1.class); TestClassAspect.classAnnotation = null; proxy.doSomething(); TestClassAnnotation annotation = TestClassAspect.classAnnotation; assertNotNull(annotation); assertEquals("Class", annotation.where()); } finally { main.removeDeployment(a); main.process(); } } public void testInstanceAnnotation() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestComponentMetaData c = new TestComponentMetaData("C"); c.clazz = TestComponent2.class; c.classAnnotations.add((Annotation) AnnotationCreator.createAnnotation("@" + TestClassAnnotation.class.getName() + "(where=\"Instance\")", getClass().getClassLoader())); TestComponentMetaDataContainer md = new TestComponentMetaDataContainer(c); addMetaData(a, md); main.addDeployment(a); try { main.process(); main.checkComplete(); DeploymentUnit unit = getDeploymentUnit(main, "A"); List components = unit.getComponents(); assertEquals(1, components.size()); DeploymentUnit component = components.get(0); TestComponent2 proxy = component.getAttachment("proxy", TestComponent2.class); TestClassAspect.classAnnotation = null; proxy.doSomething(); TestClassAnnotation annotation = TestClassAspect.classAnnotation; assertNotNull(annotation); assertEquals("Instance", annotation.where()); } finally { main.removeDeployment(a); main.process(); } } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, TestComponentMetaDataContainer md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(TestComponentMetaDataContainer.class, md); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer1, deployer2, deployer3); } @Override protected Deployers createDeployers() { DeployersImpl deployers = (DeployersImpl) super.createDeployers(); repository = new BasicMetaDataRepository(); deployers.setRepository(repository); deployer2.setRepository(repository); return deployers; } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/DeployersScopeTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/De0000644000175000017500000000364410705121037033351 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.scope.test.DeployerScopeUnitTestCase; import org.jboss.test.deployers.scope.test.LoaderMetaDataRepositoryUnitTestCase; import org.jboss.test.deployers.scope.test.PopulateMetaDataRepositoryUnitTestCase; /** * Deployers Scope Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class DeployersScopeTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers Scope Tests"); suite.addTest(DeployerScopeUnitTestCase.suite()); suite.addTest(PopulateMetaDataRepositoryUnitTestCase.suite()); suite.addTest(LoaderMetaDataRepositoryUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000755000175000017500000000000011620060462033440 5ustar twernertwerner././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponentMetaDataContainer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000306010665501124033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import java.util.ArrayList; import java.util.List; /** * TestComponentMetaDataContainer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentMetaDataContainer { public List componentMetaData; public TestComponentMetaDataContainer(TestComponentMetaData... metaDatas) { componentMetaData = new ArrayList(); for (TestComponentMetaData metaData: metaDatas) componentMetaData.add(metaData); } } ././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponentMetaDataRepositoryLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000700110705121037033437 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.metadata.plugins.loader.reflection.AnnotatedElementMetaDataLoader; import org.jboss.metadata.plugins.repository.basic.BasicMetaDataRepository; import org.jboss.metadata.spi.scope.Scope; import org.jboss.metadata.spi.scope.ScopeKey; /** * TestComponentMetaDataRepositoryPopulator. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentMetaDataRepositoryLoader extends AbstractRealDeployerWithInput { private BasicMetaDataRepository repository; public TestComponentMetaDataRepositoryLoader() { setDeploymentVisitor(new TestComponentMetaDataVisitor()); setWantComponents(true); setOutput(TestComponentMetaData.class); } public void setRepository(BasicMetaDataRepository repository) { this.repository = repository; } public class TestComponentMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestComponentMetaData.class; } public void deploy(DeploymentUnit unit, TestComponentMetaData deployment) throws DeploymentException { // Create a scope for the class AnnotatedElementMetaDataLoader loader = new AnnotatedElementMetaDataLoader(deployment.clazz); repository.addMetaDataRetrieval(loader); // Add it to our scope ScopeKey key = unit.getScope(); for (Scope scope : loader.getScope().getScopes()) key.addScope(scope); // Add the loader ScopeKey mutableScope = unit.getMutableScope(); TestComponentMetaDataLoader componentMetaDataLoader = new TestComponentMetaDataLoader(mutableScope, deployment); repository.addMetaDataRetrieval(componentMetaDataLoader); } public void undeploy(DeploymentUnit unit, TestComponentMetaData deployment) { // Remove the scopes AnnotatedElementMetaDataLoader loader = new AnnotatedElementMetaDataLoader(deployment.getClass()); repository.removeMetaDataRetrieval(loader.getScope()); ScopeKey mutableScope = unit.getMutableScope(); repository.removeMetaDataRetrieval(mutableScope); } } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponentCreator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000720110705121037033441 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import org.jboss.aop.AspectManager; import org.jboss.aop.advice.AdviceBinding; import org.jboss.aop.advice.GenericInterceptorFactory; import org.jboss.aop.proxy.container.AOPProxyFactory; import org.jboss.aop.proxy.container.AOPProxyFactoryParameters; import org.jboss.aop.proxy.container.GeneratedAOPProxyFactory; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestComponentMetaDataRepositoryPopulator. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentCreator extends AbstractRealDeployerWithInput { AOPProxyFactory proxyFactory; public TestComponentCreator() { setDeploymentVisitor(new TestComponentMetaDataVisitor()); setWantComponents(true); proxyFactory = new GeneratedAOPProxyFactory(); AspectManager domain = AspectManager.instance(); try { AdviceBinding binding = new AdviceBinding("execution(* @" + TestClassAnnotation.class.getName() + "->*(..))", null); binding.addInterceptorFactory(new GenericInterceptorFactory(TestClassAspect.class)); domain.addBinding(binding); } catch (Exception e) { throw new RuntimeException("Error setting up advices ", e); } } public class TestComponentMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestComponentMetaData.class; } public void deploy(DeploymentUnit unit, TestComponentMetaData deployment) throws DeploymentException { Class deploymentClass = deployment.clazz; Object target; try { target = deploymentClass.newInstance(); } catch (Exception e) { throw DeploymentException.rethrowAsDeploymentException("Error instantiating object", e); } AOPProxyFactoryParameters params = new AOPProxyFactoryParameters(); params.setTarget(target); params.setMetaData(unit.getMetaData()); params.setMetaDataHasInstanceLevelData(true); Object proxy = proxyFactory.createAdvisedProxy(params); unit.addAttachment("proxy", proxy); } public void undeploy(DeploymentUnit unit, TestComponentMetaData deployment) { unit.removeAttachment("proxy"); } } } ././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponentMetaDataRepositoryPopulator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000532210756346245033463 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import java.lang.annotation.Annotation; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.metadata.spi.MutableMetaData; import org.jboss.metadata.spi.scope.CommonLevels; import org.jboss.metadata.spi.scope.ScopeKey; /** * TestComponentMetaDataRepositoryPopulator. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentMetaDataRepositoryPopulator extends AbstractRealDeployerWithInput { public TestComponentMetaDataRepositoryPopulator() { setDeploymentVisitor(new TestComponentMetaDataVisitor()); setWantComponents(true); setOutput(TestComponentMetaData.class); } public class TestComponentMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestComponentMetaData.class; } public void deploy(DeploymentUnit unit, TestComponentMetaData deployment) throws DeploymentException { // Add in the class scope ScopeKey key = unit.getScope(); key.addScope(CommonLevels.CLASS, deployment.clazz); // Populate the instance annotations MutableMetaData mutable = unit.getMutableMetaData(); for (Annotation annotation : deployment.classAnnotations) mutable.addAnnotation(annotation); } public void undeploy(DeploymentUnit unit, TestComponentMetaData deployment) { } } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponent2.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000231510705121037033442 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; /** * TestComponent2. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponent2 { public void doSomething() { } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponentMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000304110705121037033437 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.List; /** * TestComponentMetaData. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentMetaData { public String name; public Class clazz; public List classAnnotations = new ArrayList(); public TestComponentMetaData(String name) { this.name = name; } public String toString() { return name; } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestClassAspect.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000316010705121037033441 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import org.jboss.aop.advice.Interceptor; import org.jboss.aop.joinpoint.Invocation; /** * TestClassAspect. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestClassAspect implements Interceptor { public static TestClassAnnotation classAnnotation; public String getName() { return getClass().getName(); } public Object invoke(Invocation invocation) throws Throwable { classAnnotation = invocation.getAdvisor().getMetadata().getAnnotation(TestClassAnnotation.class); return invocation.invokeNext(); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponent1.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000236110705121037033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; /** * TestComponent1. * * @author Adrian Brock * @version $Revision: 1.1 $ */ @TestClassAnnotation(where="Class") public class TestComponent1 { public void doSomething() { } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000750210665501124033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractComponentDeployer; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDeploymentDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentDeployer extends AbstractComponentDeployer { public TestComponentDeployer() { setDeploymentVisitor(new TestComponentMetaDataContainerVisitor()); setComponentVisitor(new TestComponentMetaDataVisitor()); } protected static void addTestComponent(DeploymentUnit unit, TestComponentMetaData test) { DeploymentUnit component = unit.addComponent(test.name); component.addAttachment(TestComponentMetaData.class, test); } protected static void removeTestComponent(DeploymentUnit unit, TestComponentMetaData test) { unit.removeComponent(test.name); } public class TestComponentMetaDataContainerVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestComponentMetaDataContainer.class; } public void deploy(DeploymentUnit unit, TestComponentMetaDataContainer deployment) throws DeploymentException { try { List tests = deployment.componentMetaData; if (tests == null || tests.isEmpty()) return; for (TestComponentMetaData test : tests) addTestComponent(unit, test); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment, t); } } public void undeploy(DeploymentUnit unit, TestComponentMetaDataContainer deployment) { List tests = deployment.componentMetaData; if (tests == null) return; for (TestComponentMetaData test : tests) { unit.removeComponent(test.name); } } } public static class TestComponentMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestComponentMetaData.class; } public void deploy(DeploymentUnit unit, TestComponentMetaData deployment) throws DeploymentException { addTestComponent(unit, deployment); } public void undeploy(DeploymentUnit unit, TestComponentMetaData deployment) { removeTestComponent(unit, deployment); } } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestClassAnnotation.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000250110705121037033437 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * TestClassAnnotation. * * @author Adrian Brock * @version $Revision: 1.1 $ */ @Retention(RetentionPolicy.RUNTIME) public @interface TestClassAnnotation { String where(); } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/support/TestComponentMetaDataLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/scope/su0000644000175000017500000000610111001656020033432 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.scope.support; import java.lang.annotation.Annotation; import org.jboss.metadata.plugins.loader.AbstractMetaDataLoader; import org.jboss.metadata.spi.retrieval.AnnotationItem; import org.jboss.metadata.spi.retrieval.AnnotationsItem; import org.jboss.metadata.spi.retrieval.MetaDataRetrieval; import org.jboss.metadata.spi.retrieval.simple.SimpleAnnotationItem; import org.jboss.metadata.spi.retrieval.simple.SimpleAnnotationsItem; import org.jboss.metadata.spi.scope.ScopeKey; import org.jboss.metadata.spi.signature.Signature; /** * TestComponentMetaDataLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentMetaDataLoader extends AbstractMetaDataLoader { TestComponentMetaData componentMetaData; public TestComponentMetaDataLoader(ScopeKey scopeKey, TestComponentMetaData componentMetaData) { super(scopeKey); this.componentMetaData = componentMetaData; } public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature) { // TODO method/field annotations go here return null; } public boolean isEmpty() { return componentMetaData.classAnnotations.isEmpty(); } public AnnotationItem retrieveAnnotation(Class annotationType) { for (Annotation annotation : componentMetaData.classAnnotations) { if (annotation.annotationType().equals(annotationType)) return new SimpleAnnotationItem(annotationType.cast(annotation)); } return null; } @SuppressWarnings("unchecked") public AnnotationsItem retrieveAnnotations() { if (componentMetaData.classAnnotations.isEmpty()) return SimpleAnnotationsItem.NO_ANNOTATIONS; Annotation[] annotations = componentMetaData.classAnnotations.toArray(new Annotation[0]); AnnotationItem[] items = new AnnotationItem[annotations.length]; for (int i = 0; i < items.length; ++i) items[i] = new SimpleAnnotationItem(annotations[i]); return new SimpleAnnotationsItem(items); } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/DeployersImplTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/Deployer0000644000175000017500000000434211005625167033476 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import org.jboss.test.deployers.classloading.DeployersClassLoadingTestSuite; import org.jboss.test.deployers.deployer.DeployersDeployerTestSuite; import org.jboss.test.deployers.managed.DeployersManagedTestSuite; import org.jboss.test.deployers.scope.DeployersScopeTestSuite; import org.jboss.test.deployers.main.DeployersMainTestSuite; import org.jboss.test.deployers.annotations.DeployersAnnotationsTestSuite; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; /** * Deployers Impl Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class DeployersImplTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers Impl Tests"); suite.addTest(DeployersDeployerTestSuite.suite()); suite.addTest(DeployersManagedTestSuite.suite()); suite.addTest(DeployersClassLoadingTestSuite.suite()); suite.addTest(DeployersScopeTestSuite.suite()); suite.addTest(DeployersMainTestSuite.suite()); suite.addTest(DeployersAnnotationsTestSuite.suite()); return suite; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000755000175000017500000000000011620060461033522 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000755000175000017500000000000011620060461033522 5ustar twernertwerner././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/HeuristicAllOrNothingUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000007671510710120326033540 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.Collections; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestComponentDeployer; import org.jboss.test.deployers.deployer.support.TestComponentMetaData; import org.jboss.test.deployers.deployer.support.TestComponentMetaDataContainer; import org.jboss.test.deployers.deployer.support.TestComponentRealDeployer; import org.jboss.test.deployers.deployer.support.TestSimpleDeployer; /** * HeuristicAllOrNothingUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class HeuristicAllOrNothingUnitTestCase extends AbstractDeployerTest { private TestSimpleDeployer deployer1 = new TestSimpleDeployer(1); private TestSimpleDeployer deployer2 = new TestSimpleDeployer(2); private TestComponentDeployer deployer3 = new TestComponentDeployer(3); private TestComponentRealDeployer deployer4 = new TestComponentRealDeployer(4); private static String parentName = "parent"; private static String childPath = "child"; private static String childName = parentName + "/" + childPath; private static String child1Path = "child1"; private static String child1Name = parentName + "/" + child1Path; private static String child2Path = "child2"; private static String child2Name = parentName + "/" + child2Path; private static Set expectedNothing = Collections.emptySet(); private static Set expectedParent = makeSet(parentName); private static Set expectedParentChild = makeSet(parentName, childName); private static Set expectedParentChild1 = makeSet(parentName, child1Name); private static Set expectedParentChild1Child2 = makeSet(parentName, child1Name, child2Name); private static TestComponentMetaData parentmd1 = new TestComponentMetaData(parentName + ".1", false); private static TestComponentMetaData parentmd1fail = new TestComponentMetaData(parentName + ".1", true); private static TestComponentMetaData parentmd2 = new TestComponentMetaData(parentName + ".2", false); private static TestComponentMetaData parentmd2fail = new TestComponentMetaData(parentName + ".2", true); private static TestComponentMetaData child1md1 = new TestComponentMetaData(child1Name + ".1", false); private static TestComponentMetaData child1md1fail = new TestComponentMetaData(child1Name + ".1", true); private static TestComponentMetaData child1md2 = new TestComponentMetaData(child1Name + ".2", false); private static TestComponentMetaData child1md2fail = new TestComponentMetaData(child1Name + ".2", true); private static TestComponentMetaData child2md1 = new TestComponentMetaData(child2Name + ".1", false); private static TestComponentMetaData child2md1fail = new TestComponentMetaData(child2Name + ".1", true); private static TestComponentMetaData child2md2 = new TestComponentMetaData(child2Name + ".2", false); private static TestComponentMetaData child2md2fail = new TestComponentMetaData(child2Name + ".2", true); private static TestComponentMetaDataContainer parentmd = new TestComponentMetaDataContainer(parentmd1, parentmd2); private static TestComponentMetaDataContainer parentmdfail1 = new TestComponentMetaDataContainer(parentmd1fail, parentmd2); private static TestComponentMetaDataContainer parentmdfail2 = new TestComponentMetaDataContainer(parentmd1, parentmd2fail); private static TestComponentMetaDataContainer child1md = new TestComponentMetaDataContainer(child1md1, child1md2); private static TestComponentMetaDataContainer child1mdfail1 = new TestComponentMetaDataContainer(child1md1fail, child1md2); private static TestComponentMetaDataContainer child1mdfail2 = new TestComponentMetaDataContainer(child1md1, child1md2fail); private static TestComponentMetaDataContainer child2md = new TestComponentMetaDataContainer(child2md1, child2md2); private static TestComponentMetaDataContainer child2mdfail1 = new TestComponentMetaDataContainer(child2md1fail, child2md2); private static TestComponentMetaDataContainer child2mdfail2 = new TestComponentMetaDataContainer(child2md1, child2md2fail); private static Set expectedNone = Collections.emptySet(); private static Set expectedPmd1Fail = makeSet(parentmd1fail); private static Set expectedPmd1 = makeSet(parentmd1); private static Set expectedPmd1Pmd2Fail = makeSet(parentmd1, parentmd2fail); private static Set expectedPmd1Pmd2 = makeSet(parentmd1, parentmd2); private static Set expectedPmd1Pmd2C1md1Fail = makeSet(parentmd1, parentmd2, child1md1fail); private static Set expectedPmd1Pmd2C1md1 = makeSet(parentmd1, parentmd2, child1md1); private static Set expectedPmd1Pmd2C1md1C1md2Fail = makeSet(parentmd1, parentmd2, child1md1, child1md2fail); private static Set expectedPmd1Pmd2C1md1C1md2 = makeSet(parentmd1, parentmd2, child1md1, child1md2); private static Set expectedPmd1Pmd2C1md1C1md2C2md1Fail = makeSet(parentmd1, parentmd2, child1md1, child1md2, child2md1fail); private static Set expectedPmd1Pmd2C1md1C1md2C2md1 = makeSet(parentmd1, parentmd2, child1md1, child1md2, child2md1); private static Set expectedPmd1Pmd2C1md1C1md2C2md1C2md2Fail = makeSet(parentmd1, parentmd2, child1md1, child1md2, child2md1, child2md2fail); private static Set expectedPmd1Pmd2C1md1C1md2C2md1C2md2 = makeSet(parentmd1, parentmd2, child1md1, child1md2, child2md1, child2md2); @SuppressWarnings("unchecked") private static Set makeSet(T... objects) { Set result = new HashSet(); for (T object : objects) result.add(object); return result; } public static Test suite() { return new TestSuite(HeuristicAllOrNothingUnitTestCase.class); } public HeuristicAllOrNothingUnitTestCase(String name) { super(name); } public void testDeployParentNoErrors() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedParent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer2); main.addDeployment(deployment); main.process(); Set expected = new HashSet(); expected.add(deployment.getName()); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedParent, deployer1.getUndeployedUnits()); assertEquals(expectedParent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentOneChildNoErrors() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); addChild(deployment, childPath); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(childName)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentOneChildFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer1); addChild(deployment, childPath); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(childName)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentOneChildFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer2); addChild(deployment, "child"); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild, deployer1.getDeployedUnits()); assertEquals(expectedParentChild, deployer1.getUndeployedUnits()); assertEquals(expectedParent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(childName)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentOneChildFailInChildDeployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); ContextInfo child = addChild(deployment, childPath); makeFail(child, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild, deployer1.getDeployedUnits()); assertEquals(expectedParent, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(childName)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentOneChildFailInChildDeployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); ContextInfo child = addChild(deployment, childPath); makeFail(child, deployer2); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild, deployer1.getDeployedUnits()); assertEquals(expectedParentChild, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild, deployer2.getDeployedUnits()); assertEquals(expectedParent, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(childName)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenNoErrors() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); addChild(deployment, child1Path); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer1); addChild(deployment, child1Path); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer2); addChild(deployment, child1Path); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenFailInChild1Deployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); ContextInfo child1 = addChild(deployment, child1Path); makeFail(child1, deployer1); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1, deployer1.getDeployedUnits()); assertEquals(expectedParent, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenFailInChild1Deployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); ContextInfo child1 = addChild(deployment, child1Path); makeFail(child1, deployer2); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1, deployer2.getDeployedUnits()); assertEquals(expectedParent, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenFailInChild2Deployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); addChild(deployment, child1Path); ContextInfo child2 = addChild(deployment, child2Path); makeFail(child2, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenFailInChild2Deployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); addChild(deployment, child1Path); ContextInfo child2 = addChild(deployment, child2Path); makeFail(child2, deployer2); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedParentChild1, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenAndComponentsNoErrors() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(expectedPmd1Pmd2C1md1C1md2C2md1C2md2, deployer4.deployed); assertEquals(expectedNone, deployer4.undeployed); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenAndComponentsParentComponent1Fails() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmdfail1); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getUndeployedUnits()); assertEquals(expectedPmd1Fail, deployer4.deployed); assertEquals(expectedNone, deployer4.undeployed); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenAndComponentsParentComponent2Fails() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmdfail2); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getUndeployedUnits()); assertEquals(expectedPmd1Pmd2Fail, deployer4.deployed); assertEquals(expectedPmd1, deployer4.undeployed); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenAndComponentsChild1Component1Fails() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1mdfail1); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getUndeployedUnits()); assertEquals(expectedPmd1Pmd2C1md1Fail, deployer4.deployed); assertEquals(expectedPmd1Pmd2, deployer4.undeployed); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenAndComponentsChild1Component2Fails() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1mdfail2); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getUndeployedUnits()); assertEquals(expectedPmd1Pmd2C1md1C1md2Fail, deployer4.deployed); assertEquals(expectedPmd1Pmd2C1md1, deployer4.undeployed); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenAndComponentsChild2Component1Fails() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2mdfail1); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getUndeployedUnits()); assertEquals(expectedPmd1Pmd2C1md1C1md2C2md1Fail, deployer4.deployed); assertEquals(expectedPmd1Pmd2C1md1C1md2, deployer4.undeployed); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } public void testDeployParentMultipleChildrenAndComponentsChild2Component2Fails() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2mdfail2); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer1.getUndeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedParentChild1Child2, deployer2.getUndeployedUnits()); assertEquals(expectedPmd1Pmd2C1md1C1md2C2md1C2md2Fail, deployer4.deployed); assertEquals(expectedPmd1Pmd2C1md1C1md2C2md1, deployer4.undeployed); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child2Name)); main.removeDeployment(deployment); main.process(); main.checkComplete(); } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, TestComponentMetaDataContainer md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(TestComponentMetaDataContainer.class, md); } protected static void makeFail(PredeterminedManagedObjectAttachments attachments, Deployer deployer) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment("fail", deployer); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer1, deployer2); } protected DeployerClient getMainDeployerWithComponentDeployers() { return createMainDeployer(deployer1, deployer2, deployer3, deployer4); } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/HeuristicRussionDollUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000011076110652377341033546 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestComponentDeployer; import org.jboss.test.deployers.deployer.support.TestComponentMetaData; import org.jboss.test.deployers.deployer.support.TestComponentMetaDataContainer; import org.jboss.test.deployers.deployer.support.TestSimpleDeployer2; /** * HeuristicRussionDollUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class HeuristicRussionDollUnitTestCase extends AbstractDeployerTest { private TestComponentDeployer deployer0 = new TestComponentDeployer(1); private TestSimpleDeployer2 deployer1 = new TestSimpleDeployer2(true, 2); private TestSimpleDeployer2 deployer2 = new TestSimpleDeployer2(false, 3); private static String parentName = "parent"; private static String childPath = "child"; private static String childName = parentName + "/" + childPath; private static String child1Path = "child1"; private static String child1Name = parentName + "/" + child1Path; private static String child2Path = "child2"; private static String child2Name = parentName + "/" + child2Path; private static TestComponentMetaData parentmd1 = new TestComponentMetaData(parentName + ".1", false); private static TestComponentMetaData parentmd2 = new TestComponentMetaData(parentName + ".2", false); private static TestComponentMetaData childmd1 = new TestComponentMetaData(childName + ".1", false); private static TestComponentMetaData childmd2 = new TestComponentMetaData(childName + ".2", false); private static TestComponentMetaData child1md1 = new TestComponentMetaData(child1Name + ".1", false); private static TestComponentMetaData child1md2 = new TestComponentMetaData(child1Name + ".2", false); private static TestComponentMetaData child2md1 = new TestComponentMetaData(child2Name + ".1", false); private static TestComponentMetaData child2md2 = new TestComponentMetaData(child2Name + ".2", false); private static List expectedNothing = Collections.emptyList(); private static List expectedParent = makeList(parentName); private static List expectedParentMD12 = makeList(parentName, parentmd1.name, parentmd2.name); private static List expectedPMD21 = makeList(parentmd2.name, parentmd1.name); private static List expectedMD12Parent = makeList(parentmd1.name, parentmd2.name, parentName); private static List expectedMD21Parent = makeList(parentmd2.name, parentmd1.name, parentName); private static List expectedChild = makeList(childName); private static List expectedMD12Child = makeList(childmd1.name, childmd2.name, childName); private static List expectedMD21C = makeList(childmd2.name, childmd1.name); private static List expectedPMD21ChildMD21 = makeList(parentmd2.name, parentmd1.name, childName, childmd2.name, childmd1.name); private static List expectedChild1 = makeList(child1Name); private static List expectedMD12Child1 = makeList(child1md1.name, child1md2.name, child1Name); private static List expectedMD21C1 = makeList(child1md2.name, child1md1.name); private static List expectedParentChild = makeList(parentName, childName); private static List expectedParentMD12Child = makeList(parentName, parentmd1.name, parentmd2.name, childName); private static List expectedParentMD12ChildMD12 = makeList(parentName, parentmd1.name, parentmd2.name, childName, childmd1.name, childmd2.name); private static List expectedChildParent = makeList(childName, parentName); private static List expectedMD12ChildMD12Parent = makeList(childmd1.name, childmd2.name, childName, parentmd1.name, parentmd2.name, parentName); private static List expectedMD21ChildMD21Parent = makeList(childmd2.name, childmd1.name, childName, parentmd2.name, parentmd1.name, parentName); private static List expectedChild1Parent = makeList(child1Name, parentName); private static List expectedMD21Child1MD21Parent = makeList(child1md2.name, child1md1.name, child1Name, parentmd2.name, parentmd1.name, parentName); private static List expectedParentChild1 = makeList(parentName, child1Name); private static List expectedParentMD12Child1 = makeList(parentName, parentmd1.name, parentmd2.name, child1Name); private static List expectedParentChild1Child2 = makeList(parentName, child1Name, child2Name); private static List expectedParentMD12Child1MD12Child2 = makeList(parentName, parentmd1.name, parentmd2.name, child1Name, child1md1.name, child1md2.name, child2Name); private static List expectedParentMD12Child1MD12Child2MD12 = makeList(parentName, parentmd1.name, parentmd2.name, child1Name, child1md1.name, child1md2.name, child2Name, child2md1.name, child2md2.name); private static List expectedChild1Child2Parent = makeList(child1Name, child2Name, parentName); private static List expectedMD12Child1MD12Child2MD12Parent = makeList(child1md1.name, child1md2.name, child1Name, child2md1.name, child2md2.name, child2Name, parentmd1.name, parentmd2.name, parentName); private static List expectedChild2Child1Parent = makeList(child2Name, child1Name, parentName); private static List expectedMD21Child2MD21Child1MD21Parent = makeList(child2md2.name, child2md1.name, child2Name, child1md2.name, child1md1.name, child1Name, parentmd2.name, parentmd1.name, parentName); private static List expectedChild1Child2 = makeList(child1Name, child2Name); private static List expectedMD12Child1MD12Child2 = makeList(child1md1.name, child1md2.name, child1Name, child2md1.name, child2md2.name, child2Name); private static List expectedChild2Child1 = makeList(child2Name, child1Name); private static List expectedPMD21Child2MD21Child1MD21 = makeList(parentmd2.name, parentmd1.name, child2Name, child2md2.name, child2md1.name, child1Name, child1md2.name, child1md1.name); private static List expectedMD21C2Child1MD21 = makeList(child2md2.name, child2md1.name, child1Name, child1md2.name, child1md1.name); private static TestComponentMetaDataContainer parentmd = new TestComponentMetaDataContainer(parentmd1, parentmd2); private static TestComponentMetaDataContainer childmd = new TestComponentMetaDataContainer(childmd1, childmd2); private static TestComponentMetaDataContainer child1md = new TestComponentMetaDataContainer(child1md1, child1md2); private static TestComponentMetaDataContainer child2md = new TestComponentMetaDataContainer(child2md1, child2md2); @SuppressWarnings("unchecked") private static List makeList(T... objects) { List result = new ArrayList(); for (T object : objects) result.add(object); return result; } public static Test suite() { return new TestSuite(HeuristicRussionDollUnitTestCase.class); } public HeuristicRussionDollUnitTestCase(String name) { super(name); } public void testDeployParentNoErrors() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedParent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); } public void testDeployParentFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); } public void testDeployParentFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer2); main.addDeployment(deployment); main.process(); Set expected = new HashSet(); expected.add(deployment.getName()); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedParent, deployer1.getUndeployedUnits()); assertEquals(expectedParent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); } public void testDeployParentOneChildNoErrors() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); addChild(deployment, childPath); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedChildParent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(childName)); } public void testDeployParentOneChildFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer1); addChild(deployment, childPath); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(childName)); } public void testDeployParentOneChildFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer2); addChild(deployment, "child"); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild, deployer1.getDeployedUnits()); assertEquals(expectedChildParent, deployer1.getUndeployedUnits()); assertEquals(expectedChildParent, deployer2.getDeployedUnits()); assertEquals(expectedChild, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(childName)); } public void testDeployParentOneChildFailInChildDeployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); ContextInfo child = addChild(deployment, childPath); makeFail(child, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild, deployer1.getDeployedUnits()); assertEquals(expectedParent, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(childName)); } public void testDeployParentOneChildFailInChildDeployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); ContextInfo child = addChild(deployment, childPath); makeFail(child, deployer2); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild, deployer1.getDeployedUnits()); assertEquals(expectedChildParent, deployer1.getUndeployedUnits()); assertEquals(expectedChild, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(childName)); } public void testDeployParentMultipleChildrenNoErrors() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); addChild(deployment, child1Path); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedChild1Child2Parent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentMultipleChildrenFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer1); addChild(deployment, child1Path); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentMultipleChildrenFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); makeFail(deployment, deployer2); addChild(deployment, child1Path); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedChild2Child1Parent, deployer1.getUndeployedUnits()); assertEquals(expectedChild1Child2Parent, deployer2.getDeployedUnits()); assertEquals(expectedChild2Child1, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentMultipleChildrenFailInChild1Deployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); ContextInfo child1 = addChild(deployment, child1Path); makeFail(child1, deployer1); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1, deployer1.getDeployedUnits()); assertEquals(expectedParent, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentMultipleChildrenFailInChild1Deployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); ContextInfo child1 = addChild(deployment, child1Path); makeFail(child1, deployer2); addChild(deployment, child2Path); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedChild2Child1Parent, deployer1.getUndeployedUnits()); assertEquals(expectedChild1, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentMultipleChildrenFailInChild2Deployer1() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); addChild(deployment, child1Path); ContextInfo child2 = addChild(deployment, child2Path); makeFail(child2, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedChild1Parent, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child2Name)); } public void testDeployParentMultipleChildrenFailInChild2Deployer2() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment(parentName); addChild(deployment, child1Path); ContextInfo child2 = addChild(deployment, child2Path); makeFail(child2, deployer2); main.addDeployment(deployment); main.process(); assertEquals(expectedParentChild1Child2, deployer1.getDeployedUnits()); assertEquals(expectedChild2Child1Parent, deployer1.getUndeployedUnits()); assertEquals(expectedChild1Child2, deployer2.getDeployedUnits()); assertEquals(expectedChild1, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child2Name)); } public void testDeployParentWithComponentsNoErrors() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedMD12Parent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); } public void testDeployParentWithComponentsFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); makeFail(deployment, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); } public void testDeployParentWithComponentsFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); makeFail(deployment, deployer2); main.addDeployment(deployment); main.process(); Set expected = new HashSet(); expected.add(deployment.getName()); assertEquals(expectedParentMD12, deployer1.getDeployedUnits()); assertEquals(expectedMD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedMD12Parent, deployer2.getDeployedUnits()); assertEquals(expectedPMD21, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); } public void testDeployParentWithComponentsOneChildNoErrors() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child = addChild(deployment, childPath); addMetaData(child, childmd); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12ChildMD12, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedMD12ChildMD12Parent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(childName)); } public void testDeployParentWithComponentsOneChildFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); makeFail(deployment, deployer1); ContextInfo child = addChild(deployment, childPath); addMetaData(child, childmd); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(childName)); } public void testDeployParentWithComponentsOneChildFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); makeFail(deployment, deployer2); ContextInfo child = addChild(deployment, childPath); addMetaData(child, childmd); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12ChildMD12, deployer1.getDeployedUnits()); assertEquals(expectedMD21ChildMD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedMD12ChildMD12Parent, deployer2.getDeployedUnits()); assertEquals(expectedPMD21ChildMD21, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(childName)); } public void testDeployParentWithComponentsOneChildFailInChildDeployer1() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child = addChild(deployment, childPath); addMetaData(child, childmd); makeFail(child, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12Child, deployer1.getDeployedUnits()); assertEquals(expectedMD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(childName)); } public void testDeployParentWithComponentsOneChildFailInChildDeployer2() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child = addChild(deployment, childPath); addMetaData(child, childmd); makeFail(child, deployer2); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12ChildMD12, deployer1.getDeployedUnits()); assertEquals(expectedMD21ChildMD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedMD12Child, deployer2.getDeployedUnits()); assertEquals(expectedMD21C, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(childName)); } public void testDeployParentWithComponentsMultipleChildrenNoErrors() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12Child1MD12Child2MD12, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedMD12Child1MD12Child2MD12Parent, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.DEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentWithComponentsMultipleChildrenFailInParentDeployer1() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); makeFail(deployment, deployer1); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParent, deployer1.getDeployedUnits()); assertEquals(expectedNothing, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentWithComponentsMultipleChildrenFailInParentDeployer2() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); makeFail(deployment, deployer2); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12Child1MD12Child2MD12, deployer1.getDeployedUnits()); assertEquals(expectedMD21Child2MD21Child1MD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedMD12Child1MD12Child2MD12Parent, deployer2.getDeployedUnits()); assertEquals(expectedPMD21Child2MD21Child1MD21, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentWithComponentsMultipleChildrenFailInChild1Deployer1() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); makeFail(child1, deployer1); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12Child1, deployer1.getDeployedUnits()); assertEquals(expectedMD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentWithComponentsMultipleChildrenFailInChild1Deployer2() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); makeFail(child1, deployer2); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12Child1MD12Child2MD12, deployer1.getDeployedUnits()); assertEquals(expectedMD21Child2MD21Child1MD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedMD12Child1, deployer2.getDeployedUnits()); assertEquals(expectedMD21C1, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child2Name)); } public void testDeployParentWithComponentsMultipleChildrenFailInChild2Deployer1() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); makeFail(child2, deployer1); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12Child1MD12Child2, deployer1.getDeployedUnits()); assertEquals(expectedMD21Child1MD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedNothing, deployer2.getDeployedUnits()); assertEquals(expectedNothing, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child2Name)); } public void testDeployParentWithComponentsMultipleChildrenFailInChild2Deployer2() throws Exception { DeployerClient main = getMainDeployerWithComponentDeployers(); Deployment deployment = createSimpleDeployment(parentName); addMetaData(deployment, parentmd); ContextInfo child1 = addChild(deployment, child1Path); addMetaData(child1, child1md); ContextInfo child2 = addChild(deployment, child2Path); addMetaData(child2, child2md); makeFail(child2, deployer2); main.addDeployment(deployment); main.process(); assertEquals(expectedParentMD12Child1MD12Child2MD12, deployer1.getDeployedUnits()); assertEquals(expectedMD21Child2MD21Child1MD21Parent, deployer1.getUndeployedUnits()); assertEquals(expectedMD12Child1MD12Child2, deployer2.getDeployedUnits()); assertEquals(expectedMD21C2Child1MD21, deployer2.getUndeployedUnits()); assertEquals(DeploymentState.ERROR, main.getDeploymentState(deployment.getName())); assertEquals(DeploymentState.UNDEPLOYED, main.getDeploymentState(child1Name)); assertEquals(DeploymentState.ERROR, main.getDeploymentState(child2Name)); } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, TestComponentMetaDataContainer md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(TestComponentMetaDataContainer.class, md); } protected static void makeFail(PredeterminedManagedObjectAttachments attachments, Deployer deployer) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment("fail", deployer); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer1, deployer2); } protected DeployerClient getMainDeployerWithComponentDeployers() { return createMainDeployer(deployer0, deployer1, deployer2); } } ././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/HeuristicDeploymentRelativeOrderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000001202610653632007033533 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.plugins.deployment.AbstractDeployment; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestDeploymentContextComparator; import org.jboss.test.deployers.deployer.support.TestSimpleDeployer3; /** * DeployerDependencyUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class HeuristicDeploymentRelativeOrderUnitTestCase extends AbstractDeployerTest { private static final DeploymentFactory factory = new DeploymentFactory(); private TestSimpleDeployer3 deployer1 = new TestSimpleDeployer3(DeploymentStages.REAL); private static String P = "Parent"; private static String C1 = P + "/" + "C1"; private static String C2 = P + "/" + "C2"; private static List NONE = Collections.emptyList(); private static List PC1C2 = makeList(P, C1, C2); private static List PC2C1 = makeList(P, C2, C1); private static List C2C1P = makeList(C2, C1, P); private static List C1C2P = makeList(C1, C2, P); @SuppressWarnings("unchecked") private static List makeList(T... objects) { List result = new ArrayList(); for (T object : objects) result.add(object); return result; } public static Test suite() { return new TestSuite(HeuristicDeploymentRelativeOrderUnitTestCase.class); } public HeuristicDeploymentRelativeOrderUnitTestCase(String name) { super(name); } public void testNoRelativeOrderUsesSimpleName() throws Exception { DeployerClient main = getMainDeployer(); Deployment parent = createSimpleDeployment("Parent"); factory.addContext(parent, "C1"); factory.addContext(parent, "C2"); main.addDeployment(parent); main.process(); assertEquals(PC1C2, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); main.removeDeployment(parent); main.process(); assertEquals(PC1C2, deployer1.deployed); assertEquals(C2C1P, deployer1.undeployed); } public void testRelativeOrder() throws Exception { DeployerClient main = getMainDeployer(); Deployment parent = createSimpleDeployment("Parent"); ContextInfo c1 = factory.addContext(parent, "C1"); c1.setRelativeOrder(2); ContextInfo c2 = factory.addContext(parent, "C2"); c2.setRelativeOrder(1); main.addDeployment(parent); main.process(); assertEquals(PC2C1, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); main.removeDeployment(parent); main.process(); assertEquals(PC2C1, deployer1.deployed); assertEquals(C1C2P, deployer1.undeployed); } public void testComparator() throws Exception { DeployerClient main = getMainDeployer(); AbstractDeployment parent = new AbstractDeployment("Parent"); ContextInfo p = factory.addContext(parent, ""); // Reverse the default comparison p.setComparatorClassName(TestDeploymentContextComparator.class.getName()); factory.addContext(parent, "C1"); factory.addContext(parent, "C2"); main.addDeployment(parent); main.process(); assertEquals(PC2C1, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); main.removeDeployment(parent); main.process(); assertEquals(PC2C1, deployer1.deployed); assertEquals(C1C2P, deployer1.undeployed); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer1); } } ././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerWidthFirstUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000001021510640504360033525 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.Map; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestSimpleDeployer; /** * DeployerWidthFirstUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerWidthFirstUnitTestCase extends AbstractDeployerTest { private TestSimpleDeployer deployer1 = new TestSimpleDeployer(1); private TestSimpleDeployer deployer2 = new TestSimpleDeployer(2); public static Test suite() { return new TestSuite(DeployerWidthFirstUnitTestCase.class); } public DeployerWidthFirstUnitTestCase(String name) { super(name); } public void testDeployWidthFirst() throws Exception { DeployerClient main = getMainDeployer(); Deployment context1 = createSimpleDeployment("deploy1"); main.addDeployment(context1); Deployment context2 = createSimpleDeployment("deploy2"); main.addDeployment(context2); main.process(); Map deployed1 = deployer1.getDeployed(); Map deployed2 = deployer2.getDeployed(); int c1d1 = deployed1.get(context1.getName()); int c1d2 = deployed2.get(context1.getName()); int c2d1 = deployed1.get(context2.getName()); int c2d2 = deployed2.get(context2.getName()); assertFalse(c1d1 == -1); assertFalse(c1d2 == -1); assertFalse(c2d1 == -1); assertFalse(c2d2 == -1); assertTrue("Deployer1 should be before Deployer2", c1d1 < c1d2 && c1d1 < c2d2 && c2d1 < c1d2 && c2d1 < c2d2); } public void testUndeployWidthFirst() throws Exception { DeployerClient main = getMainDeployer(); Deployment context1 = createSimpleDeployment("deploy1"); main.addDeployment(context1); Deployment context2 = createSimpleDeployment("deploy2"); main.addDeployment(context2); main.process(); main.removeDeployment(context1.getName()); main.removeDeployment(context2.getName()); main.process(); Map undeployed1 = deployer1.getUndeployed(); Map undeployed2 = deployer2.getUndeployed(); int c1d1 = undeployed1.get(context1.getName()); int c1d2 = undeployed2.get(context1.getName()); int c2d1 = undeployed1.get(context2.getName()); int c2d2 = undeployed2.get(context2.getName()); assertFalse(c1d1 == -1); assertFalse(c1d2 == -1); assertFalse(c2d1 == -1); assertFalse(c2d2 == -1); assertTrue("Deployer2 should be before Deployer1", c1d2 < c1d1 && c1d2 < c2d1 && c2d2 < c1d1 && c2d2 < c2d1); } protected DeployerClient getMainDeployer() { deployer1 = new TestSimpleDeployer(DeploymentStages.POST_CLASSLOADER); deployer2 = new TestSimpleDeployer(DeploymentStages.REAL); return createMainDeployer(deployer1, deployer2); } } ././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerContextClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000530310746226513033537 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestDummyClassLoader; import org.jboss.test.deployers.deployer.support.TestDummyClassLoaderDeployer; /** * DeployerClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerContextClassLoaderUnitTestCase extends AbstractDeployerTest { public static Test suite() { return new TestSuite(DeployerContextClassLoaderUnitTestCase.class); } public DeployerContextClassLoaderUnitTestCase(String name) { super(name); } public void testContextClassLoader() throws Exception { TestDummyClassLoader dummy = new TestDummyClassLoader(); ClassLoader previous = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(dummy); DeployerClient main = null; try { TestDummyClassLoaderDeployer deployer = new TestDummyClassLoaderDeployer(); main = createMainDeployer(deployer); } finally { Thread.currentThread().setContextClassLoader(previous); } Deployment deployment = createSimpleDeployment("x"); main.addDeployment(deployment); main.process(); assertEquals(dummy, TestDummyClassLoaderDeployer.getAndResetClassLoader()); main.removeDeployment(deployment); main.process(); assertEquals(dummy, TestDummyClassLoaderDeployer.getAndResetClassLoader()); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerOrderingUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000001027410640504360033532 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestSimpleDeployer; /** * DeployerOrderingUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerOrderingUnitTestCase extends AbstractDeployerTest { public static Test suite() { return new TestSuite(DeployerOrderingUnitTestCase.class); } public DeployerOrderingUnitTestCase(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); TestSimpleDeployer.reset(); } public void testCorrectOrder() throws Exception { DeployerClient main = createMainDeployer(); TestSimpleDeployer deployer1 = new TestSimpleDeployer(1); addDeployer(main, deployer1); TestSimpleDeployer deployer2 = new TestSimpleDeployer(2); addDeployer(main, deployer2); Deployment deployment = createSimpleDeployment("correctOrder"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(5, deployer1.getDeployOrder()); assertEquals(6, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); } public void testWrongOrder() throws Exception { DeployerClient main = createMainDeployer(); TestSimpleDeployer deployer1 = new TestSimpleDeployer(1); addDeployer(main, deployer1); TestSimpleDeployer deployer2 = new TestSimpleDeployer(2); addDeployer(main, deployer2); Deployment deployment = createSimpleDeployment("wrongOrder"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(5, deployer1.getDeployOrder()); assertEquals(6, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/ComponentUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000730410640504360033532 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.Collections; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestDeployment1; import org.jboss.test.deployers.deployer.support.TestDeploymentDeployer1; import org.jboss.test.deployers.deployer.support.TestMetaData1; import org.jboss.test.deployers.deployer.support.TestRealDeployer1; /** * Component tests * * @author adrian@jboss.org * @version $Revision: 61417 $ */ public class ComponentUnitTestCase extends AbstractDeployerTest { public static Test suite() { return new TestSuite(ComponentUnitTestCase.class); } public ComponentUnitTestCase(String name) { super(name); } public void testDeployment() throws Exception { TestDeploymentDeployer1 componentDeployer1 = new TestDeploymentDeployer1(); TestRealDeployer1 realDeployer1 = new TestRealDeployer1(); DeployerClient main = createMainDeployer(componentDeployer1, realDeployer1); Deployment deployment = createSimpleDeployment("deploy"); MutableAttachments attachments = (MutableAttachments) deployment.getPredeterminedManagedObjects(); TestDeployment1 deployment1 = new TestDeployment1(); TestMetaData1 component1 = new TestMetaData1("TestBean1"); deployment1.addBean(component1); attachments.addAttachment(TestDeployment1.class, deployment1); main.addDeployment(deployment); main.process(); assertEquals(Collections.singletonList(component1), realDeployer1.deployed); main.removeDeployment(deployment); main.process(); assertEmpty(realDeployer1.deployed); } public void testMetaData() throws Exception { TestDeploymentDeployer1 componentDeployer1 = new TestDeploymentDeployer1(); TestRealDeployer1 realDeployer1 = new TestRealDeployer1(); DeployerClient main = createMainDeployer(componentDeployer1, realDeployer1); Deployment deployment = createSimpleDeployment("deploy"); MutableAttachments attachments = (MutableAttachments) deployment.getPredeterminedManagedObjects(); TestMetaData1 component1 = new TestMetaData1("TestBean1"); attachments.addAttachment(TestMetaData1.class, component1); main.addDeployment(deployment); main.process(); assertEquals(Collections.singletonList(component1), realDeployer1.deployed); main.removeDeployment(deployment); main.process(); assertEmpty(realDeployer1.deployed); } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000720210640504360033527 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestClassLoaderDeployer; /** * DeployerClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerClassLoaderUnitTestCase extends AbstractDeployerTest { public static Test suite() { return new TestSuite(DeployerClassLoaderUnitTestCase.class); } public DeployerClassLoaderUnitTestCase(String name) { super(name); } public void testClassLoader() throws Exception { TestClassLoaderDeployer deployer = new TestClassLoaderDeployer(); DeployerClient main = createMainDeployer(deployer); Deployment deployment = createSimpleDeployment("single"); main.addDeployment(deployment); main.process(); DeploymentContext context = assertDeploymentContext(main, "single"); assertEquals(DeploymentState.DEPLOYED, context.getState()); assertEquals(deployer.cl, context.getClassLoader()); main.removeDeployment(deployment); main.process(); assertEquals(DeploymentState.UNDEPLOYED, context.getState()); assertNull(context.getClassLoader()); } public void testSubdeploymentClassLoader() throws Exception { TestClassLoaderDeployer deployer = new TestClassLoaderDeployer(); DeployerClient main = createMainDeployer(deployer); Deployment deployment = createSimpleDeployment("top"); DeploymentFactory factory = new DeploymentFactory(); factory.addContext(deployment, "sub"); main.addDeployment(deployment); main.process(); DeploymentContext top = assertDeploymentContext(main, "top"); DeploymentContext sub = assertDeploymentContext(main, "top/sub"); assertEquals(DeploymentState.DEPLOYED, top.getState()); assertEquals(deployer.cl, top.getClassLoader()); assertEquals(DeploymentState.DEPLOYED, sub.getState()); assertEquals(deployer.cl, sub.getClassLoader()); main.removeDeployment(deployment); main.process(); assertEquals(DeploymentState.UNDEPLOYED, top.getState()); assertNull(top.getClassLoader()); assertEquals(DeploymentState.UNDEPLOYED, sub.getState()); assertNull(sub.getClassLoader()); } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployersImplUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000001236110640504360033531 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.Collections; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestSimpleDeployer; /** * DeployersImplUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployersImplUnitTestCase extends AbstractDeployerTest { public static Test suite() { return new TestSuite(DeployersImplUnitTestCase.class); } public DeployersImplUnitTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); } public void testAddNullDeployer() throws Exception { DeployerClient main = createMainDeployer(); try { addDeployer(main, null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } } public void testAddDeployers() throws Exception { DeployerClient main = createMainDeployer(); assertEmpty(getDeployers(main)); Deployer deployer = new TestSimpleDeployer(); HashSet expected = new HashSet(); expected.add(deployer); addDeployer(main, deployer); assertEquals(expected, getDeployers(main)); deployer = new TestSimpleDeployer(); expected.add(deployer); addDeployer(main, deployer); assertEquals(expected, getDeployers(main)); // Duplicate addDeployer(main, deployer); assertEquals(expected, getDeployers(main)); } public void testRemoveNullDeployer() throws Exception { DeployerClient main = createMainDeployer(); try { removeDeployer(main, null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } } public void testRemoveDeployers() throws Exception { DeployerClient main = createMainDeployer(); assertEmpty(getDeployers(main)); Deployer deployer1 = new TestSimpleDeployer("1"); Deployer deployer2 = new TestSimpleDeployer("2"); HashSet expected = new HashSet(); expected.add(deployer1); expected.add(deployer2); addDeployer(main, deployer1); addDeployer(main, deployer2); assertEquals(expected, getDeployers(main)); Deployer notPresent = new TestSimpleDeployer(); removeDeployer(main, notPresent); assertEquals(expected, getDeployers(main)); removeDeployer(main, deployer1); expected.remove(deployer1); assertEquals(expected, getDeployers(main)); removeDeployer(main, deployer2); expected.remove(deployer2); assertEquals(expected, getDeployers(main)); } public void testSetNullDeployers() throws Exception { DeployerClient main = createMainDeployer(); try { setDeployers(main, null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } } public void testSetDeployers() throws Exception { DeployerClient main = createMainDeployer(); assertEmpty(getDeployers(main)); Deployer deployer1 = new TestSimpleDeployer(); Deployer deployer2 = new TestSimpleDeployer(); Set expected = new HashSet(); expected.add(deployer1); expected.add(deployer2); setDeployers(main, expected); assertEquals(expected, getDeployers(main)); expected = new HashSet(); expected.add(deployer1); setDeployers(main, expected); assertEquals(expected, getDeployers(main)); expected = new HashSet(); expected.add(deployer1); setDeployers(main, expected); assertEquals(expected, getDeployers(main)); expected = Collections.emptySet(); setDeployers(main, expected); assertEquals(expected, getDeployers(main)); } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerFlowUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000007631511137607542033552 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestFlowDeployer; /** * DeployerOrderingUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerFlowUnitTestCase extends AbstractDeployerTest { public static Test suite() { return new TestSuite(DeployerFlowUnitTestCase.class); } public DeployerFlowUnitTestCase(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); TestFlowDeployer.reset(); } public void testSimpleInputOutputCorrectOrder() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setOutputs("test"); addDeployer(main, deployer1); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("test"); addDeployer(main, deployer2); Deployment deployment = createSimpleDeployment("correctOrder"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(5, deployer1.getDeployOrder()); assertEquals(6, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); } public void testSimpleInputOutputWrongOrder() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("test"); addDeployer(main, deployer2); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setOutputs("test"); addDeployer(main, deployer1); Deployment deployment = createSimpleDeployment("wrongOrder"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(5, deployer1.getDeployOrder()); assertEquals(6, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); } public void testInputOutputLoop() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setInputs("input1"); deployer1.setOutputs("output1"); addDeployer(main, deployer1); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("output1"); deployer2.setOutputs("output2"); addDeployer(main, deployer2); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setInputs("output2"); deployer3.setOutputs("input1"); try { addDeployer(main, deployer3); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalStateException.class, t); } } public void testInputOutputTransient() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setOutputs("test"); addDeployer(main, deployer1); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setInputs("test"); addDeployer(main, deployer3); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("test"); deployer2.setOutputs("test"); addDeployer(main, deployer2); Deployment deployment = createSimpleDeployment("transient"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(7, deployer1.getDeployOrder()); assertEquals(8, deployer2.getDeployOrder()); assertEquals(9, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); } public void testInputOutputTransient2() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setInputs("test"); deployer1.setOutputs("test"); addDeployer(main, deployer1); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("test"); addDeployer(main, deployer2); Deployment deployment = createSimpleDeployment("transient2"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(5, deployer1.getDeployOrder()); assertEquals(6, deployer2.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(3, deployer2.getUndeployOrder()); } public void testInputOutputMultipleTransient() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer4 = new TestFlowDeployer("4"); deployer4.setInputs("test"); addDeployer(main, deployer4); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("test"); deployer2.setOutputs("test"); addDeployer(main, deployer2); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setInputs("test"); deployer3.setOutputs("test"); addDeployer(main, deployer3); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setOutputs("test"); addDeployer(main, deployer1); Deployment deployment = createSimpleDeployment("transient"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(4, deployer4.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); assertEquals(-1, deployer4.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(4, deployer4.getDeployOrder()); assertEquals(8, deployer1.getUndeployOrder()); assertEquals(7, deployer2.getUndeployOrder()); assertEquals(6, deployer3.getUndeployOrder()); assertEquals(5, deployer4.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(9, deployer1.getDeployOrder()); assertEquals(10, deployer2.getDeployOrder()); assertEquals(11, deployer3.getDeployOrder()); assertEquals(12, deployer4.getDeployOrder()); assertEquals(8, deployer1.getUndeployOrder()); assertEquals(7, deployer2.getUndeployOrder()); assertEquals(6, deployer3.getUndeployOrder()); assertEquals(5, deployer4.getUndeployOrder()); } public void testMultipleOutput() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setOutputs("test1", "test2"); addDeployer(main, deployer1); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("test1"); addDeployer(main, deployer2); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setInputs("test2"); addDeployer(main, deployer3); Deployment deployment = createSimpleDeployment("MultipleOutput"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(7, deployer1.getDeployOrder()); assertEquals(8, deployer2.getDeployOrder()); assertEquals(9, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); } public void testMultipleInput() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setInputs("test1", "test2"); addDeployer(main, deployer3); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setOutputs("test1"); addDeployer(main, deployer1); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setOutputs("test2"); addDeployer(main, deployer2); Deployment deployment = createSimpleDeployment("MultipleInput"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(7, deployer1.getDeployOrder()); assertEquals(8, deployer2.getDeployOrder()); assertEquals(9, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); } public void testChain() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setInputs("test2"); addDeployer(main, deployer3); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("test1"); deployer2.setOutputs("test2"); addDeployer(main, deployer2); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setOutputs("test1"); addDeployer(main, deployer1); Deployment deployment = createSimpleDeployment("Chain"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(7, deployer1.getDeployOrder()); assertEquals(8, deployer2.getDeployOrder()); assertEquals(9, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); } public void testComplicated() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer6 = new TestFlowDeployer("6"); deployer6.setInputs("test1", "test3"); addDeployer(main, deployer6); TestFlowDeployer deployer5 = new TestFlowDeployer("5"); deployer5.setInputs("test3"); deployer5.setOutputs("test3"); addDeployer(main, deployer5); TestFlowDeployer deployer4 = new TestFlowDeployer("4"); deployer4.setInputs("test2"); deployer4.setOutputs("test3"); addDeployer(main, deployer4); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setOutputs("test2"); addDeployer(main, deployer3); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setOutputs("test1"); addDeployer(main, deployer2); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setOutputs("test1"); addDeployer(main, deployer1); Deployment deployment = createSimpleDeployment("Complicated"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(4, deployer4.getDeployOrder()); assertEquals(5, deployer5.getDeployOrder()); assertEquals(6, deployer6.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); assertEquals(-1, deployer4.getUndeployOrder()); assertEquals(-1, deployer5.getUndeployOrder()); assertEquals(-1, deployer6.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(4, deployer4.getDeployOrder()); assertEquals(5, deployer5.getDeployOrder()); assertEquals(6, deployer6.getDeployOrder()); assertEquals(12, deployer1.getUndeployOrder()); assertEquals(11, deployer2.getUndeployOrder()); assertEquals(10, deployer3.getUndeployOrder()); assertEquals(9, deployer4.getUndeployOrder()); assertEquals(8, deployer5.getUndeployOrder()); assertEquals(7, deployer6.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(13, deployer1.getDeployOrder()); assertEquals(14, deployer2.getDeployOrder()); assertEquals(15, deployer3.getDeployOrder()); assertEquals(16, deployer4.getDeployOrder()); assertEquals(17, deployer5.getDeployOrder()); assertEquals(18, deployer6.getDeployOrder()); assertEquals(12, deployer1.getUndeployOrder()); assertEquals(11, deployer2.getUndeployOrder()); assertEquals(10, deployer3.getUndeployOrder()); assertEquals(9, deployer4.getUndeployOrder()); assertEquals(8, deployer5.getUndeployOrder()); assertEquals(7, deployer6.getUndeployOrder()); } public void testIntermediateIsRelativelySorted() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer2 = new TestFlowDeployer("A"); deployer2.setInputs("test1"); addDeployer(main, deployer2); TestFlowDeployer deployer3 = new TestFlowDeployer("B"); addDeployer(main, deployer3); TestFlowDeployer deployer1 = new TestFlowDeployer("C"); deployer1.setOutputs("test1"); addDeployer(main, deployer1); Deployment deployment = createSimpleDeployment("IntermediateIsRelativelySorted"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(7, deployer1.getDeployOrder()); assertEquals(8, deployer2.getDeployOrder()); assertEquals(9, deployer3.getDeployOrder()); assertEquals(6, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(4, deployer3.getUndeployOrder()); } public void testTransitionOrdering() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer1 = new TestFlowDeployer("A"); deployer1.setInputs("3"); deployer1.setOutputs("4"); addDeployer(main, deployer1); TestFlowDeployer deployer2 = new TestFlowDeployer("B"); deployer2.setInputs("1"); deployer2.setOutputs("2"); addDeployer(main, deployer2); TestFlowDeployer deployer3 = new TestFlowDeployer("C"); deployer3.setInputs("2"); deployer3.setOutputs("3"); addDeployer(main, deployer3); Deployment deployment = createSimpleDeployment("TransitionOrdering"); main.addDeployment(deployment); main.process(); assertEquals(3, deployer1.getDeployOrder()); assertEquals(1, deployer2.getDeployOrder()); assertEquals(2, deployer3.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(3, deployer1.getDeployOrder()); assertEquals(1, deployer2.getDeployOrder()); assertEquals(2, deployer3.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(6, deployer2.getUndeployOrder()); assertEquals(5, deployer3.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(9, deployer1.getDeployOrder()); assertEquals(7, deployer2.getDeployOrder()); assertEquals(8, deployer3.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(6, deployer2.getUndeployOrder()); assertEquals(5, deployer3.getUndeployOrder()); } public void testSymetricDots() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setInputs("X"); deployer1.setOutputs("B"); addDeployer(main, deployer1); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setInputs("X"); deployer2.setOutputs("X"); addDeployer(main, deployer2); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setInputs("A"); deployer3.setOutputs("X"); addDeployer(main, deployer3); Deployment deployment = createSimpleDeployment("SymetricDots"); main.addDeployment(deployment); main.process(); assertEquals(3, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(1, deployer3.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(3, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(1, deployer3.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(6, deployer3.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(9, deployer1.getDeployOrder()); assertEquals(8, deployer2.getDeployOrder()); assertEquals(7, deployer3.getDeployOrder()); assertEquals(4, deployer1.getUndeployOrder()); assertEquals(5, deployer2.getUndeployOrder()); assertEquals(6, deployer3.getUndeployOrder()); } public void testDoubleCycle() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer2 = new TestFlowDeployer("A"); deployer2.setInputs("test2"); addDeployer(main, deployer2); TestFlowDeployer deployer3 = new TestFlowDeployer("B"); addDeployer(main, deployer3); TestFlowDeployer deployer6 = new TestFlowDeployer("C"); deployer6.setInputs("2ndcycle"); addDeployer(main, deployer6); TestFlowDeployer deployer1 = new TestFlowDeployer("D"); deployer1.setOutputs("test1"); addDeployer(main, deployer1); TestFlowDeployer deployer4 = new TestFlowDeployer("E"); addDeployer(main, deployer4); TestFlowDeployer deployer5 = new TestFlowDeployer("F"); deployer5.setInputs("test1"); deployer5.setOutputs("test2"); addDeployer(main, deployer5); TestFlowDeployer deployer7 = new TestFlowDeployer("G"); addDeployer(main, deployer7); TestFlowDeployer deployer8 = new TestFlowDeployer("H"); deployer8.setOutputs("2ndcycle"); addDeployer(main, deployer8); Deployment deployment = createSimpleDeployment("DoubleCycle"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer3.getDeployOrder()); assertEquals(2, deployer8.getDeployOrder()); assertEquals(3, deployer6.getDeployOrder()); assertEquals(4, deployer1.getDeployOrder()); assertEquals(5, deployer4.getDeployOrder()); assertEquals(6, deployer5.getDeployOrder()); assertEquals(7, deployer2.getDeployOrder()); assertEquals(8, deployer7.getDeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); assertEquals(-1, deployer8.getUndeployOrder()); assertEquals(-1, deployer6.getUndeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer4.getUndeployOrder()); assertEquals(-1, deployer5.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer7.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer3.getDeployOrder()); assertEquals(2, deployer8.getDeployOrder()); assertEquals(3, deployer6.getDeployOrder()); assertEquals(4, deployer1.getDeployOrder()); assertEquals(5, deployer4.getDeployOrder()); assertEquals(6, deployer5.getDeployOrder()); assertEquals(7, deployer2.getDeployOrder()); assertEquals(8, deployer7.getDeployOrder()); assertEquals(16, deployer3.getUndeployOrder()); assertEquals(15, deployer8.getUndeployOrder()); assertEquals(14, deployer6.getUndeployOrder()); assertEquals(13, deployer1.getUndeployOrder()); assertEquals(12, deployer4.getUndeployOrder()); assertEquals(11, deployer5.getUndeployOrder()); assertEquals(10, deployer2.getUndeployOrder()); assertEquals(9, deployer7.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(17, deployer3.getDeployOrder()); assertEquals(18, deployer8.getDeployOrder()); assertEquals(19, deployer6.getDeployOrder()); assertEquals(20, deployer1.getDeployOrder()); assertEquals(21, deployer4.getDeployOrder()); assertEquals(22, deployer5.getDeployOrder()); assertEquals(23, deployer2.getDeployOrder()); assertEquals(24, deployer7.getDeployOrder()); assertEquals(16, deployer3.getUndeployOrder()); assertEquals(15, deployer8.getUndeployOrder()); assertEquals(14, deployer6.getUndeployOrder()); assertEquals(13, deployer1.getUndeployOrder()); assertEquals(12, deployer4.getUndeployOrder()); assertEquals(11, deployer5.getUndeployOrder()); assertEquals(10, deployer2.getUndeployOrder()); assertEquals(9, deployer7.getUndeployOrder()); } public void testOrderedThenFlowWithPassThrough() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer deployer4 = new TestFlowDeployer("4"); deployer4.setInputs("test"); addDeployer(main, deployer4); TestFlowDeployer deployer3 = new TestFlowDeployer("3"); deployer3.setRelativeOrder(3); deployer3.setInputs("test"); deployer3.setOutputs("test"); addDeployer(main, deployer3); TestFlowDeployer deployer2 = new TestFlowDeployer("2"); deployer2.setRelativeOrder(2); addDeployer(main, deployer2); TestFlowDeployer deployer1 = new TestFlowDeployer("1"); deployer1.setRelativeOrder(1); addDeployer(main, deployer1); Deployment deployment = createSimpleDeployment("orderedThenFlowWithPassThrough"); main.addDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(4, deployer4.getDeployOrder()); assertEquals(-1, deployer1.getUndeployOrder()); assertEquals(-1, deployer2.getUndeployOrder()); assertEquals(-1, deployer3.getUndeployOrder()); assertEquals(-1, deployer4.getUndeployOrder()); main.removeDeployment(deployment); main.process(); assertEquals(1, deployer1.getDeployOrder()); assertEquals(2, deployer2.getDeployOrder()); assertEquals(3, deployer3.getDeployOrder()); assertEquals(4, deployer4.getDeployOrder()); assertEquals(8, deployer1.getUndeployOrder()); assertEquals(7, deployer2.getUndeployOrder()); assertEquals(6, deployer3.getUndeployOrder()); assertEquals(5, deployer4.getUndeployOrder()); main.addDeployment(deployment); main.process(); assertEquals(9, deployer1.getDeployOrder()); assertEquals(10, deployer2.getDeployOrder()); assertEquals(11, deployer3.getDeployOrder()); assertEquals(12, deployer4.getDeployOrder()); assertEquals(8, deployer1.getUndeployOrder()); assertEquals(7, deployer2.getUndeployOrder()); assertEquals(6, deployer3.getUndeployOrder()); assertEquals(5, deployer4.getUndeployOrder()); } public void testWebBeansOrder() throws Exception { DeployerClient main = createMainDeployer(); TestFlowDeployer mcfcld = new TestFlowDeployer("ManagedConnectionFactory"); mcfcld.setInputs("ManagedConnectionFactoryDeploymentGroup"); mcfcld.setOutputs("CLMD"); addDeployer(main, mcfcld); TestFlowDeployer postJBWMD = new TestFlowDeployer("PostJBossWebMetadataDeployer"); postJBWMD.setInputs("JBWMD", "CLMD"); postJBWMD.setOutputs("JBWMD", "CLMD"); addDeployer(main, postJBWMD); TestFlowDeployer postEJB = new TestFlowDeployer("PostEjbJar"); postEJB.setInputs("EJB"); postEJB.setOutputs("EJB"); addDeployer(main, postEJB); TestFlowDeployer warCL = new TestFlowDeployer("WarClassLoaderDeployer"); warCL.setInputs("JBWMD", "CLMD"); warCL.setOutputs("CLMD"); addDeployer(main, warCL); TestFlowDeployer service = new TestFlowDeployer("ServiceCL"); service.setInputs("ServiceDeployment"); service.setOutputs("CLMD"); addDeployer(main, service); TestFlowDeployer legacy = new TestFlowDeployer("Legacy"); legacy.setInputs("JBWMD", "WMD"); legacy.setOutputs("JBWMD"); addDeployer(main, legacy); TestFlowDeployer cluster = new TestFlowDeployer("Cluster"); cluster.setInputs("JBWMD"); cluster.setOutputs("JBWMD"); addDeployer(main, cluster); TestFlowDeployer postWMD = new TestFlowDeployer("PostWebMetadataDeployer"); postWMD.setInputs("JBWMD"); postWMD.setOutputs("JBWMD"); addDeployer(main, postWMD); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerProtocolUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000675710766170544033561 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestSimpleDeployer; /** * DeployerProtocolUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerProtocolUnitTestCase extends AbstractDeployerTest { private TestSimpleDeployer deployer = new TestSimpleDeployer(); public static Test suite() { return new TestSuite(DeployerProtocolUnitTestCase.class); } public DeployerProtocolUnitTestCase(String name) { super(name); } public void testDeploy() throws Exception { DeployerClient main = getMainDeployer(); Deployment context = createSimpleDeployment("deploy"); main.addDeployment(context); main.process(); Set expected = new HashSet(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); } public void testUndeploy() throws Exception { DeployerClient main = getMainDeployer(); Deployment context = createSimpleDeployment("undeploy"); main.addDeployment(context); main.process(); Set expected = new HashSet(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); main.removeDeployment(context.getName()); main.process(); assertEquals(expected, deployer.getUndeployedUnits()); } public void testRedeploy() throws Exception { DeployerClient main = getMainDeployer(); Deployment context = createSimpleDeployment("redeploy"); main.addDeployment(context); main.process(); Set expected = new HashSet(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); main.removeDeployment(context.getName()); main.process(); assertEquals(expected, deployer.getUndeployedUnits()); deployer.clear(); main.addDeployment(context); main.process(); expected.clear(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer); } } ././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerDependencyUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000004671610653621335033552 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestDependencyMetaData; import org.jboss.test.deployers.deployer.support.TestDescribeDeployer; import org.jboss.test.deployers.deployer.support.TestSimpleDeployer3; /** * DeployerDependencyUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerDependencyUnitTestCase extends AbstractDeployerTest { private static final DeploymentFactory factory = new DeploymentFactory(); private TestDescribeDeployer deployer1 = new TestDescribeDeployer(); private TestSimpleDeployer3 deployer2 = new TestSimpleDeployer3(DeploymentStages.CLASSLOADER); private TestSimpleDeployer3 deployer3 = new TestSimpleDeployer3(DeploymentStages.INSTALLED); public static List NONE = Collections.emptyList(); public static List A = makeList("A"); public static List B = makeList("B"); public static List AB = makeList("A", "B"); public static List BA = makeList("B", "A"); public static List ABA = makeList("A", "B", "A"); public static List ABB = makeList("A", "B", "B"); public static List BAA = makeList("B", "A", "A"); public static List BABA = makeList("B", "A", "B", "A"); public static List AC = makeList("A", "A/C"); public static List ACB = makeList("A", "A/C", "B"); public static List BAC = makeList("B", "A", "A/C"); public static List CAB = makeList("A/C", "A", "B"); public static List BCA = makeList("B", "A/C", "A"); @SuppressWarnings("unchecked") private static List makeList(T... objects) { List result = new ArrayList(); for (T object : objects) result.add(object); return result; } public static Test suite() { return new TestSuite(DeployerDependencyUnitTestCase.class); } public DeployerDependencyUnitTestCase(String name) { super(name); } public void testADependsOnBAtClassLoaderCorrectOrder() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.CLASSLOADER); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); } public void testADependsOnBAtClassLoaderWrongOrder() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.CLASSLOADER); addMetaData(a, depA); main.addDeployment(a); main.process(); assertEquals(A, deployer1.deployed); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer3.deployed); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); } public void testADependsOnBAtClassLoaderUndeployANoB() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.CLASSLOADER); addMetaData(a, depA); main.addDeployment(a); main.process(); assertEquals(A, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(NONE, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(a); main.process(); assertEquals(A, deployer1.deployed); assertEquals(A, deployer1.undeployed); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(NONE, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); } public void testADependsOnBAtClassLoaderUndeployB() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.CLASSLOADER); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(B, deployer1.undeployed); assertEquals(BA, deployer2.deployed); assertEquals(AB, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(AB, deployer3.undeployed); } public void testADependsOnBAtClassLoaderRedeployB() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.CLASSLOADER); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(b); main.process(); main.addDeployment(b); main.process(); assertEquals(ABB, deployer1.deployed); assertEquals(B, deployer1.undeployed); assertEquals(BABA, deployer2.deployed); assertEquals(AB, deployer2.undeployed); assertEquals(BABA, deployer3.deployed); assertEquals(AB, deployer3.undeployed); } public void testADependsOnBAtClassLoaderRedeployA() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.CLASSLOADER); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(a); main.process(); main.addDeployment(a); main.process(); assertEquals(ABA, deployer1.deployed); assertEquals(A, deployer1.undeployed); assertEquals(BAA, deployer2.deployed); assertEquals(A, deployer2.undeployed); assertEquals(BAA, deployer3.deployed); assertEquals(A, deployer3.undeployed); } public void testADependsOnBAtClassLoaderWhichFailsInInstall() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.CLASSLOADER); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); makeFail(b, deployer3); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(B, deployer1.undeployed); assertEquals(B, deployer2.deployed); assertEquals(B, deployer2.undeployed); assertEquals(B, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); } public void testADependsOnBAtInstallCorrectOrder() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.INSTALLED); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(AB, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); } public void testADependsOnBAtInstallWrongOrder() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.INSTALLED); addMetaData(a, depA); main.addDeployment(a); main.process(); assertEquals(A, deployer1.deployed); assertEquals(A, deployer2.deployed); assertEquals(NONE, deployer3.deployed); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(AB, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); } public void testADependsOnBAtInstallUndeployANoB() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.INSTALLED); addMetaData(a, depA); main.addDeployment(a); main.process(); assertEquals(A, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(A, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(NONE, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(a); main.process(); assertEquals(A, deployer1.deployed); assertEquals(A, deployer1.undeployed); assertEquals(A, deployer2.deployed); assertEquals(A, deployer2.undeployed); assertEquals(NONE, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); } public void testADependsOnBAtInstallUndeployB() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.INSTALLED); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(AB, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(B, deployer1.undeployed); assertEquals(AB, deployer2.deployed); assertEquals(B, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(AB, deployer3.undeployed); } public void testADependsOnBAtInstallRedeployB() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.INSTALLED); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(AB, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(b); main.process(); main.addDeployment(b); main.process(); assertEquals(ABB, deployer1.deployed); assertEquals(B, deployer1.undeployed); assertEquals(ABB, deployer2.deployed); assertEquals(B, deployer2.undeployed); assertEquals(BABA, deployer3.deployed); assertEquals(AB, deployer3.undeployed); } public void testADependsOnBAtInstallRedeployA() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.INSTALLED); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(AB, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BA, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(a); main.process(); main.addDeployment(a); main.process(); assertEquals(ABA, deployer1.deployed); assertEquals(A, deployer1.undeployed); assertEquals(ABA, deployer2.deployed); assertEquals(A, deployer2.undeployed); assertEquals(BAA, deployer3.deployed); assertEquals(A, deployer3.undeployed); } public void testADependsOnBAtInstallWhichFailsInInstall() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); TestDependencyMetaData depA = new TestDependencyMetaData("A"); depA.addDependencyItem("B", DeploymentStages.INSTALLED); addMetaData(a, depA); main.addDeployment(a); Deployment b = createSimpleDeployment("B"); makeFail(b, deployer3); main.addDeployment(b); main.process(); assertEquals(AB, deployer1.deployed); assertEquals(B, deployer1.undeployed); assertEquals(AB, deployer2.deployed); assertEquals(B, deployer2.undeployed); assertEquals(B, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); } public void testChildOfADependsOnBAtClassLoaderWrongOrder() throws Exception { DeployerClient main = getMainDeployer(); Deployment a = createSimpleDeployment("A"); ContextInfo c = factory.addContext(a, "C"); TestDependencyMetaData depC = new TestDependencyMetaData("A"); depC.addDependencyItem("B", DeploymentStages.CLASSLOADER); addMetaData(c, depC); main.addDeployment(a); main.process(); assertEquals(AC, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(NONE, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); Deployment b = createSimpleDeployment("B"); main.addDeployment(b); main.process(); assertEquals(ACB, deployer1.deployed); assertEquals(NONE, deployer1.undeployed); assertEquals(BAC, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertEquals(BAC, deployer3.deployed); assertEquals(NONE, deployer3.undeployed); main.removeDeployment(b); main.process(); assertEquals(ACB, deployer1.deployed); assertEquals(B, deployer1.undeployed); assertEquals(BAC, deployer2.deployed); assertEquals(CAB, deployer2.undeployed); assertEquals(BAC, deployer3.deployed); assertEquals(CAB, deployer3.undeployed); main.removeDeployment(a); main.process(); assertEquals(ACB, deployer1.deployed); assertEquals(BCA, deployer1.undeployed); assertEquals(BAC, deployer2.deployed); assertEquals(CAB, deployer2.undeployed); assertEquals(BAC, deployer3.deployed); assertEquals(CAB, deployer3.undeployed); } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, TestDependencyMetaData md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(TestDependencyMetaData.class, md); } protected static void makeFail(PredeterminedManagedObjectAttachments attachments, Deployer deployer) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment("fail", deployer); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer1, deployer2, deployer3); } } ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/MultipleComponentTypeUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000740710640504360033536 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.test; import java.util.Collections; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.deployer.support.TestDeployment1; import org.jboss.test.deployers.deployer.support.TestDeployment2; import org.jboss.test.deployers.deployer.support.TestDeploymentDeployer1; import org.jboss.test.deployers.deployer.support.TestDeploymentDeployer2; import org.jboss.test.deployers.deployer.support.TestMetaData1; import org.jboss.test.deployers.deployer.support.TestMetaData2; import org.jboss.test.deployers.deployer.support.TestRealDeployer1; import org.jboss.test.deployers.deployer.support.TestRealDeployer2; /** * Test of deployments with multiple deployment types that map to * multiple components. * * @author Scott.Stark@jboss.org * @version $Revision: 61417 $ */ public class MultipleComponentTypeUnitTestCase extends AbstractDeployerTest { public static Test suite() { return new TestSuite(MultipleComponentTypeUnitTestCase.class); } public MultipleComponentTypeUnitTestCase(String name) { super(name); } public void testDeploy() throws Exception { TestDeploymentDeployer1 componentDeployer1 = new TestDeploymentDeployer1(); TestDeploymentDeployer2 componentDeployer2 = new TestDeploymentDeployer2(); TestRealDeployer1 realDeployer1 = new TestRealDeployer1(); TestRealDeployer2 realDeployer2 = new TestRealDeployer2(); DeployerClient main = createMainDeployer(componentDeployer1, componentDeployer2, realDeployer1, realDeployer2); Deployment deployment = createSimpleDeployment("deploy"); MutableAttachments attachments = (MutableAttachments) deployment.getPredeterminedManagedObjects(); TestDeployment1 deployment1 = new TestDeployment1(); TestMetaData1 component1 = new TestMetaData1("TestBean1"); deployment1.addBean(component1); attachments.addAttachment(TestDeployment1.class, deployment1); TestDeployment2 deployment2 = new TestDeployment2(); TestMetaData2 component2 = new TestMetaData2("TestBean2"); deployment2.addBean(component2); attachments.addAttachment(TestDeployment2.class, deployment2); main.addDeployment(deployment); main.process(); assertEquals(Collections.singletonList(component1), realDeployer1.deployed); assertEquals(Collections.singletonList(component2), realDeployer2.deployed); main.removeDeployment(deployment); main.process(); assertEmpty(realDeployer1.deployed); assertEmpty(realDeployer2.deployed); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/DeployersDeployerTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000576110746226513033547 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.deployer.test.ComponentUnitTestCase; import org.jboss.test.deployers.deployer.test.DeployerClassLoaderUnitTestCase; import org.jboss.test.deployers.deployer.test.DeployerContextClassLoaderUnitTestCase; import org.jboss.test.deployers.deployer.test.DeployerFlowUnitTestCase; import org.jboss.test.deployers.deployer.test.DeployerOrderingUnitTestCase; import org.jboss.test.deployers.deployer.test.DeployerProtocolUnitTestCase; import org.jboss.test.deployers.deployer.test.DeployerWidthFirstUnitTestCase; import org.jboss.test.deployers.deployer.test.DeployersImplUnitTestCase; import org.jboss.test.deployers.deployer.test.HeuristicAllOrNothingUnitTestCase; import org.jboss.test.deployers.deployer.test.HeuristicRussionDollUnitTestCase; import org.jboss.test.deployers.deployer.test.MultipleComponentTypeUnitTestCase; /** * Deployers Deployer Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class DeployersDeployerTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers Deployer Tests"); suite.addTest(DeployerProtocolUnitTestCase.suite()); suite.addTest(DeployerOrderingUnitTestCase.suite()); suite.addTest(DeployerFlowUnitTestCase.suite()); suite.addTest(DeployerWidthFirstUnitTestCase.suite()); suite.addTest(DeployerClassLoaderUnitTestCase.suite()); suite.addTest(DeployersImplUnitTestCase.suite()); suite.addTest(ComponentUnitTestCase.suite()); suite.addTest(MultipleComponentTypeUnitTestCase.suite()); suite.addTest(HeuristicAllOrNothingUnitTestCase.suite()); suite.addTest(HeuristicRussionDollUnitTestCase.suite()); suite.addTest(DeployerContextClassLoaderUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000755000175000017500000000000011620060461033522 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/SecurityDeployment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000333410663426701033540 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectID; import org.jboss.managed.api.annotation.ManagementOperation; /** * @author Scott.Stark@jboss.org * @version $Revision: 64837 $ */ @ManagementObject public class SecurityDeployment implements Serializable { private static final long serialVersionUID = 1; private String domain; @ManagementObjectID(type="SecurityDomain") public String getDomainName() { return domain; } public void setDomainName(String name) { this.domain = name; } @ManagementOperation public void flush() { } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestServiceMetaDataICF.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000717411104173360033535 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; import org.jboss.beans.info.spi.BeanInfo; import org.jboss.beans.info.spi.PropertyInfo; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.spi.factory.InstanceClassFactory; import org.jboss.metadata.spi.MetaData; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.MetaValueFactory; /** * An InstanceClassFactory implementation for services * * @author Scott.Stark@jboss.org * @version $Revision: 80543 $ */ public class TestServiceMetaDataICF implements InstanceClassFactory { /** The meta value factory */ private MetaValueFactory metaValueFactory = MetaValueFactory.getInstance(); public Class getType() { return TestServiceMetaData.class; } @SuppressWarnings("unchecked") public Class getManagedObjectClass(TestServiceMetaData instance) throws ClassNotFoundException { ClassLoader loader = instance.getClass().getClassLoader(); Class moClass = loader.loadClass(instance.getCode()); return moClass; } protected String getPropertyName(ManagedProperty property) { // First look to the mapped name String name = property.getMappedName(); if (name == null) property.getName(); return name; } public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property, MetaData metaData, TestServiceMetaData instance) { String name = getPropertyName(property); Object value = null; for (TestServiceAttributeMetaData amd : instance.getAttributes()) { if (amd.getName().equals(name)) { value = amd.getValue(); break; } } PropertyInfo propertyInfo = beanInfo.getProperty(name); return metaValueFactory.create(value, propertyInfo.getType()); } public void setValue(BeanInfo beanInfo, ManagedProperty property, TestServiceMetaData object, MetaValue value) { String name = getPropertyName(property); PropertyInfo propertyInfo = beanInfo.getProperty(name); for (TestServiceAttributeMetaData amd : object.getAttributes()) { if (amd.getName().equals(name)) { amd.setValue(metaValueFactory.unwrap(value, propertyInfo.getType())); break; } } } public Object getComponentName(BeanInfo beanInfo, ManagedProperty property, TestServiceMetaData object, MetaValue value) { return (beanInfo == null || property == null || value == null) ? object.getObjectName() : null; } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/CustomName.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000300110705655705033534 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; import org.jboss.metatype.api.annotations.Generic; /** * Custom runtime component name. * * @author Ales.Justin@jboss.org */ @Generic public class CustomName implements Serializable { private static final long serialVersionUID = 5544848873825306608L; private String name; public CustomName(String name) { this.name = name; } public String getName() { return name; } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/DSMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000561110667133160033536 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementProperties; import org.jboss.managed.api.annotation.ManagementProperty; /** * Test datasource deployment like metadata * * @author Scott.Stark@jboss.org * @version $Revision: 65024 $ */ @ManagementObject(properties=ManagementProperties.EXPLICIT) public class DSMetaData implements Serializable { private static final long serialVersionUID = 1; private String diplayName; private URL fileUrl; private List aliases = new ArrayList(); private List deployments = new ArrayList(); public DSMetaData() { deployments.add(new ConnMetaData()); } @ManagementProperty(name="display-name", description="display name of DS deployment", use={}) public String getDiplayName() { return diplayName; } public void setDiplayName(String diplayName) { this.diplayName = diplayName; } @ManagementProperty(description="The ds.xml url", ignored=true) public URL getUrl() { return fileUrl; } public void setUrl(URL fileUrl) { this.fileUrl = fileUrl; } public List getAliases() { return aliases; } public void setAliases(List aliases) { this.aliases = aliases; } public void addManagedConnectionFactoryDeployment(ConnMetaData deployment) { this.deployments.add(deployment); } @ManagementProperty(description="The DS connection factories", managed=true) public List getDeployments() { return deployments; } public void setDeployments(List deployments) { this.deployments.clear(); this.deployments.addAll(deployments); } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/ConnMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000001135111113261537033531 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; import java.util.Properties; import org.jboss.managed.api.annotation.ConstraintsPopulatorFactory; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectID; import org.jboss.managed.api.annotation.ManagementProperty; import org.jboss.managed.api.annotation.ManagementPropertyFactory; import org.jboss.managed.plugins.WritethroughManagedPropertyImpl; /** * Test connection factory like metadata. * * @author Scott.Stark@jboss.org * @version $Revision: 81635 $ */ @ManagementObject public class ConnMetaData implements Serializable { private static final long serialVersionUID = 1; private int minSize; private int maxSize; private String connType; private String jndiName; private String username; private char[] password; private boolean localTransactions; private TxSupportMetaData txSupportMetaData; private Properties connProperties; private SecMetaData securityMetaData; @ManagementProperty(name="datasource-type") @ConstraintsPopulatorFactory(AllowedDsTypes.class) @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public String getConnType() { return connType; } public void setConnType(String connType) { this.connType = connType; } @ManagementProperty(name="jndi-name") @ManagementObjectID(type="DataSource") @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public String getJndiName() { return jndiName; } public void setJndiName(String jndiName) { this.jndiName = jndiName; } @ManagementProperty(name="max-size") @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public int getMaxSize() { return maxSize; } public void setMaxSize(int maxSize) { this.maxSize = maxSize; } @ManagementProperty(name="min-size") @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public int getMinSize() { return minSize; } public void setMinSize(int minSize) { this.minSize = minSize; } @ManagementProperty @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public char[] getPassword() { return password; } public void setPassword(char[] password) { this.password = password; } @ManagementProperty @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @ManagementProperty(name="connection-properties") @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public Properties getConnProperties() { return connProperties; } public void setConnProperties(Properties connProperties) { this.connProperties = connProperties; } @ManagementProperty(name="local-transaction") public Boolean getLocalTransactions() { return localTransactions; } public void setLocalTransactions(Boolean localTransactions) { this.localTransactions = localTransactions; } @ManagementProperty(name="tx-metadata") @ConstraintsPopulatorFactory(AllowedTxSupportMetaData.class) public TxSupportMetaData getTransactionSupportMetaData() { return txSupportMetaData; } public void setTransactionSupportMetaData(TxSupportMetaData md) { this.txSupportMetaData = md; } @ManagementProperty(name="security-domain", managed=true) public SecMetaData getSecurityMetaData() { return securityMetaData; } public void setSecurityMetaData(SecMetaData securityMetaData) { this.securityMetaData = securityMetaData; } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDummyClassLoaderDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000365210746226513033544 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDummyClassLoaderDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDummyClassLoaderDeployer extends AbstractRealDeployer { private static ClassLoader classLoader; public static ClassLoader getAndResetClassLoader() { ClassLoader result = classLoader; classLoader = null; return result; } protected static void checkClassLoader() { classLoader = Thread.currentThread().getContextClassLoader(); } protected void internalDeploy(DeploymentUnit unit) throws DeploymentException { checkClassLoader(); } protected void internalUndeploy(DeploymentUnit unit) { checkClassLoader(); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestSimpleDeployer3.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000473210717372452033546 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestSimpleDeployer3. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestSimpleDeployer3 extends AbstractRealDeployer { public List deployed = new ArrayList(); public List undeployed = new ArrayList(); public TestSimpleDeployer3(DeploymentStage stage) { setStage(stage); } public List getDeployedUnits() { return deployed; } public List getUndeployedUnits() { return undeployed; } public String toString() { return "TestSimpleDeployer3(" + getStage() + ")"; } public void clear() { deployed.clear(); undeployed.clear(); } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { log.debug(this + " deploy : " + unit.getName()); deployed.add(unit.getName()); if (this.equals(unit.getAttachment("fail"))) throw new RuntimeException("Asked to fail"); } public void internalUndeploy(DeploymentUnit unit) { log.debug(this + " undeploy: " + unit.getName()); undeployed.add(unit.getName()); } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestMetaData2.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000245010640504360033527 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; /** * @author Scott.Stark@jboss.org * @version $Revision: 61417 $ */ public class TestMetaData2 { private String name; public TestMetaData2(String name) { this.name = name; } public String getName() { return name; } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/AllowedDsTypes.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000517111113261537033534 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.HashSet; import org.jboss.beans.info.spi.PropertyInfo; import org.jboss.managed.api.Fields; import org.jboss.managed.spi.factory.ManagedPropertyConstraintsPopulator; import org.jboss.managed.spi.factory.ManagedPropertyConstraintsPopulatorFactory; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.SimpleValueSupport; /** * Contraints populator for the ConnMetaData datasource-type * @author Scott.Stark@jboss.org * @version $Revision: 81635 $ */ public class AllowedDsTypes implements ManagedPropertyConstraintsPopulatorFactory, ManagedPropertyConstraintsPopulator { public static HashSet values = new HashSet(); static { values.add(SimpleValueSupport.wrap("local-tx-datasource")); values.add(SimpleValueSupport.wrap("no-tx-datasource")); values.add(SimpleValueSupport.wrap("xa-datasource")); values.add(SimpleValueSupport.wrap("no-tx-connection-factory")); values.add(SimpleValueSupport.wrap("tx-connection-factory")); } @SuppressWarnings("unchecked") public void populateManagedProperty(Class attachmentClass, PropertyInfo info, Fields fields) { fields.setField(Fields.LEGAL_VALUES, values); } public ManagedPropertyConstraintsPopulator newInstance() { return this; } public ManagedPropertyConstraintsPopulator newInstance(String min, String max, String[] legalValues) { return this; } public ManagedPropertyConstraintsPopulator newInstance(String min, String max, String[] legalValues, String... strings) { return this; } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestRealDeployer1.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000433110640504360033527 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDeploymentDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestRealDeployer1 extends AbstractRealDeployerWithInput { public List deployed = new ArrayList(); public TestRealDeployer1() { setDeploymentVisitor(new TestMetaDataVisitor()); setComponentsOnly(true); } public class TestMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestMetaData1.class; } public void deploy(DeploymentUnit unit, TestMetaData1 deployment) throws DeploymentException { deployed.add(deployment); } public void undeploy(DeploymentUnit unit, TestMetaData1 deployment) { deployed.remove(deployment); } } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestComponentRealDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000476710652136375033556 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.HashSet; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestSimpleDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentRealDeployer extends AbstractRealDeployerWithInput { public Set deployed = new HashSet(); public Set undeployed = new HashSet(); public TestComponentRealDeployer(int order) { setDeploymentVisitor(new TestComponentMetaDataVisitor()); setWantComponents(true); setRelativeOrder(order); } public class TestComponentMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestComponentMetaData.class; } public void deploy(DeploymentUnit unit, TestComponentMetaData deployment) throws DeploymentException { deployed.add(deployment); if (deployment.fail) throw new DeploymentException("Asked to fail"); } public void undeploy(DeploymentUnit unit, TestComponentMetaData deployment) { undeployed.add(deployment); } } } ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestComponentMetaDataContainer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000306310652136375033542 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.ArrayList; import java.util.List; /** * TestComponentMetaDataContainer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentMetaDataContainer { public List componentMetaData; public TestComponentMetaDataContainer(TestComponentMetaData... metaDatas) { componentMetaData = new ArrayList(); for (TestComponentMetaData metaData: metaDatas) componentMetaData.add(metaData); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestServiceMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000437010705077244033542 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; import java.util.List; import org.jboss.managed.api.annotation.ManagementObject; /** * The mbean service metadata * * @author Scott.Stark@jboss.org * @version $Revision: 66169 $ */ @ManagementObject public class TestServiceMetaData implements Serializable { private static final long serialVersionUID = 1; /** The ObjectName */ private String objectName; /** The code */ private String code; /**The attributes */ private List attributes; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getObjectName() { return objectName; } public void setObjectName(String objectName) { this.objectName = objectName; } public List getAttributes() { return attributes; } /** * Set the attributes. * * @param attributes the attributes. */ public void setAttributes(List attributes) { if (attributes == null) throw new IllegalArgumentException("Null attributes"); this.attributes = attributes; } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDeployment1.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000263710640504360033536 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.ArrayList; import java.util.List; /** * @author Scott.Stark@jboss.org * @version $Revision: 61417 $ */ public class TestDeployment1 { ArrayList beans = new ArrayList(); public void addBean(TestMetaData1 data) { beans.add(data); } public List getBeans() { return beans; } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestMetaData1.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000245010640504360033527 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; /** * @author Scott.Stark@jboss.org * @version $Revision: 61417 $ */ public class TestMetaData1 { private String name; public TestMetaData1(String name) { this.name = name; } public String getName() { return name; } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestFlowDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000550310766170544033545 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestSimpleDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestFlowDeployer extends AbstractRealDeployer { private static int order = 0; private Map deployed = new HashMap(); private Map undeployed = new HashMap(); private String name; public static void reset() { order = 0; } public TestFlowDeployer(String name) { this.name = name; } public String toString() { return name; } public void clear() { deployed.clear(); undeployed.clear(); } public int getDeployOrder() { if (deployed.isEmpty()) return -1; return Collections.max(deployed.values()); } public int getUndeployOrder() { if (undeployed.isEmpty()) return -1; return Collections.max(undeployed.values()); } public Set getDeployedUnits() { return deployed.keySet(); } public Set getUndeployedUnits() { return undeployed.keySet(); } public Map getDeployed() { return deployed; } public Map getUndeployed() { return undeployed; } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { deployed.put(unit.getName(), ++order); } public void internalUndeploy(DeploymentUnit unit) { undeployed.put(unit.getName(), ++order); } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/SimpleMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000511310705102357033530 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; import org.jboss.managed.api.annotation.ManagementComponent; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectID; import org.jboss.managed.api.annotation.ManagementObjectRef; import org.jboss.managed.api.annotation.ManagementProperty; /** * Simple meta data. * * @author Ales.Justin@jboss.org */ @ManagementObject(componentType = @ManagementComponent(type = "SimpleType", subtype = "LocalTx")) public class SimpleMetaData implements Serializable { private static final long serialVersionUID = 1L; public enum SecurityDeploymentType {NONE, APPLICATION, DOMAIN, DOMAIN_AND_APPLICATION} private String domain; private SimpleMetaData.SecurityDeploymentType type; private String jndiName; @ManagementProperty(name="domain-name") @ManagementObjectID(type="SecurityDomain") public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } @ManagementProperty(name="security-criteria") public SimpleMetaData.SecurityDeploymentType getType() { return type; } public void setType(SimpleMetaData.SecurityDeploymentType type) { this.type = type; } @ManagementProperty(name="jndi-name") @ManagementObjectRef(type="DataSource") public String getJndiName() { return jndiName; } public void setJndiName(String jndiName) { this.jndiName = jndiName; } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDeployment2.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000263710640504360033536 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.ArrayList; import java.util.List; /** * @author Scott.Stark@jboss.org * @version $Revision: 61417 $ */ public class TestDeployment2 { ArrayList beans = new ArrayList(); public void addBean(TestMetaData2 data) { beans.add(data); } public List getBeans() { return beans; } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/MCFDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000276411104173360033535 0ustar twernertwernerpackage org.jboss.test.deployers.deployer.support; import java.io.Serializable; import java.util.Map; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer; import org.jboss.deployers.spi.deployer.managed.ManagedObjectCreator; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.factory.ManagedObjectFactory; import org.jboss.managed.plugins.factory.ManagedObjectFactoryBuilder; public class MCFDeployer extends AbstractSimpleRealDeployer implements ManagedObjectCreator { public MCFDeployer() { super(DSMetaData.class); } @Override public void deploy(DeploymentUnit unit, DSMetaData deployment) throws DeploymentException { } public void build(DeploymentUnit unit, Set outputs, Map managedObjects) throws DeploymentException { ManagedObjectFactory factory = ManagedObjectFactoryBuilder.create(); Map attachments = unit.getAttachments(); for(Object metaData : attachments.values() ) { if( metaData instanceof Serializable ) { Serializable smetaData = Serializable.class.cast(metaData); ManagedObject mo = factory.initManagedObject(smetaData, null, null); if (mo != null) managedObjects.put(mo.getName(), mo); } } } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDependencyMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000522510653621335033540 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.HashSet; import java.util.Set; import org.jboss.dependency.plugins.AbstractDependencyItem; import org.jboss.dependency.spi.ControllerState; import org.jboss.dependency.spi.DependencyItem; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.DeploymentStages; /** * TestDependencyMetaData. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDependencyMetaData { private static final ControllerState CLASSLOADER = new ControllerState(DeploymentStages.CLASSLOADER.getName()); public String name; public Set iDependOn = new HashSet(); public TestDependencyMetaData(String name) { this.name = name; } public DependencyItem addDependencyItem(Object iDependOn) { return addDependencyItem(iDependOn, null); } public DependencyItem addDependencyItem(Object iDependOn, DeploymentStage whenRequired) { return addDependencyItem(iDependOn, whenRequired, null); } public DependencyItem addDependencyItem(Object iDependOn, DeploymentStage whenRequired, DeploymentStage dependentState) { ControllerState whenState = CLASSLOADER; if (whenRequired != null) whenState = new ControllerState(whenRequired.getName()); ControllerState depState = ControllerState.INSTALLED; if (dependentState != null) depState = new ControllerState(dependentState.getName()); DependencyItem item = new AbstractDependencyItem(name, iDependOn, whenState, depState); this.iDependOn.add(item); return item; } } ././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/CustomRuntimeComponentNameTransformer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000301010705655705033534 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import org.jboss.managed.plugins.factory.AbstractComponentNameTransformer; /** * Custom runtime component name transformer. * * @author Ales.Justin@jboss.org */ public class CustomRuntimeComponentNameTransformer extends AbstractComponentNameTransformer { public CustomRuntimeComponentNameTransformer() { super(CustomName.class); } protected Object doTransform(CustomName value) { return value.getName(); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestSimpleDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000676611046542655033557 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestSimpleDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestSimpleDeployer extends AbstractRealDeployer { private static int order = 0; private Map deployed = new HashMap(); private Map undeployed = new HashMap(); private String name; public static void reset() { order = 0; } public TestSimpleDeployer() { this(Integer.MAX_VALUE); name = super.toString(); } public TestSimpleDeployer(String name) { this(Integer.MAX_VALUE); this.name = name; } public TestSimpleDeployer(int relativeOrder) { setRelativeOrder(relativeOrder); name = "TestSimpleDeployer" + relativeOrder; } public TestSimpleDeployer(DeploymentStage stage) { setStage(stage); name = super.toString(); } public String toString() { return name; } public void clear() { deployed.clear(); undeployed.clear(); } public int getDeployOrder() { if (deployed.isEmpty()) return -1; return Collections.max(deployed.values()); } public int getUndeployOrder() { if (undeployed.isEmpty()) return -1; return Collections.max(undeployed.values()); } public Set getDeployedUnits() { return deployed.keySet(); } public Set getUndeployedUnits() { return undeployed.keySet(); } public Map getDeployed() { return deployed; } public Map getUndeployed() { return undeployed; } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { log.debug(this + " deploy : " + unit.getName()); deployed.put(unit.getName(), ++order); if (this.equals(unit.getAttachment("fail"))) throw new DeploymentException("Asked to fail"); } public void internalUndeploy(DeploymentUnit unit) { log.debug(this + " undeploy: " + unit.getName()); undeployed.put(unit.getName(), ++order); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDeploymentDeployer2.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000725210640504360033534 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractComponentDeployer; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDeploymentDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDeploymentDeployer2 extends AbstractComponentDeployer { public TestDeploymentDeployer2() { setDeploymentVisitor(new TestDeploymentVisitor()); setComponentVisitor(new TestMetaDataVisitor()); } protected static void addTestComponent(DeploymentUnit unit, TestMetaData2 test) { DeploymentUnit component = unit.addComponent(test.getName()); component.addAttachment(TestMetaData2.class, test); } protected static void removeTestComponent(DeploymentUnit unit, TestMetaData2 test) { unit.removeComponent(test.getName()); } /** * TestDeploymentVisitor. */ public class TestDeploymentVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestDeployment2.class; } public void deploy(DeploymentUnit unit, TestDeployment2 deployment) throws DeploymentException { try { List tests = deployment.getBeans(); if (tests == null || tests.isEmpty()) return; for (TestMetaData2 test : tests) addTestComponent(unit, test); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment, t); } } public void undeploy(DeploymentUnit unit, TestDeployment2 deployment) { List tests = deployment.getBeans(); if (tests == null) return; for (TestMetaData2 test : tests) { unit.removeComponent(test.getName()); } } } /** * TestMetaDataVisitor. */ public static class TestMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestMetaData2.class; } public void deploy(DeploymentUnit unit, TestMetaData2 deployment) throws DeploymentException { addTestComponent(unit, deployment); } public void undeploy(DeploymentUnit unit, TestMetaData2 deployment) { removeTestComponent(unit, deployment); } } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestSimpleDeployer2.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000540410717372452033543 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestSimpleDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestSimpleDeployer2 extends AbstractRealDeployer { public List deployed = new ArrayList(); public List undeployed = new ArrayList(); public TestSimpleDeployer2(boolean parentFirst, int order) { setRelativeOrder(order); setParentFirst(parentFirst); setWantComponents(true); } public List getDeployedUnits() { return deployed; } public List getUndeployedUnits() { return undeployed; } public String toString() { return "TestSimpleDeployer(" + isParentFirst() + ")"; } public void clear() { deployed.clear(); undeployed.clear(); } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { log.debug(this + " deploy : " + unit.getName()); deployed.add(unit.getName()); if (unit.isComponent() == false) { if (this.equals(unit.getAttachment("fail"))) throw new DeploymentException("Asked to fail"); } else { TestComponentMetaData md = unit.getAttachment(TestComponentMetaData.class); if (md != null && md.fail) throw new DeploymentException("Asked to fail"); } } public void internalUndeploy(DeploymentUnit unit) { log.debug(this + " undeploy: " + unit.getName()); undeployed.add(unit.getName()); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/SecMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000227610756346245033553 0ustar twernertwernerpackage org.jboss.test.deployers.deployer.support; import java.io.Serializable; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectRef; import org.jboss.managed.api.annotation.ManagementProperty; /** * * @author Scott.Stark@jboss.org * @version $Revision: 69901 $ */ @ManagementObject public class SecMetaData implements Serializable { private static final long serialVersionUID = 1; public enum SecurityDeploymentType {NONE, APPLICATION, DOMAIN, DOMAIN_AND_APPLICATION}; private String domain; private SecurityDeploymentType type; /** * The domain value refers to a security domain component if type is either * DOMAIN, DOMAIN_AND_APPLICATION * @return the domain */ @ManagementProperty(name="domain-name") @ManagementObjectRef(type="SecurityDomain") public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } @ManagementProperty(name="security-criteria") public SecurityDeploymentType getType() { return type; } public void setType(SecurityDeploymentType type) { this.type = type; } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/AllowedTxSupportMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000521311113261537033531 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.HashSet; import org.jboss.beans.info.spi.PropertyInfo; import org.jboss.managed.api.Fields; import org.jboss.managed.spi.factory.ManagedPropertyConstraintsPopulator; import org.jboss.managed.spi.factory.ManagedPropertyConstraintsPopulatorFactory; import org.jboss.metatype.api.types.EnumMetaType; import org.jboss.metatype.api.values.EnumValueSupport; import org.jboss.metatype.api.values.MetaValue; /** * Contraints populator for the TxSupportMetaData enum * @author Scott.Stark@jboss.org * @version $Revision: 81635 $ */ public class AllowedTxSupportMetaData implements ManagedPropertyConstraintsPopulator, ManagedPropertyConstraintsPopulatorFactory { private static EnumMetaType TYPE = new EnumMetaType(TxSupportMetaData.values()); private static HashSet values = new HashSet(); static { values.add(new EnumValueSupport(TYPE, TxSupportMetaData.NONE)); values.add(new EnumValueSupport(TYPE, TxSupportMetaData.LOCAL)); values.add(new EnumValueSupport(TYPE, TxSupportMetaData.XA)); } @SuppressWarnings("unchecked") public void populateManagedProperty(Class attachmentClass, PropertyInfo info, Fields fields) { fields.setField(Fields.LEGAL_VALUES, values); } public ManagedPropertyConstraintsPopulator newInstance() { return this; } public ManagedPropertyConstraintsPopulator newInstance(String min, String max, String[] legalValues) { return this; } public ManagedPropertyConstraintsPopulator newInstance(String min, String max, String[] legalValues, String... strings) { return this; } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestServiceAttributeMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000335510665447161033550 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; /** * A service attribute * * @author Scott.Stark@jboss.org * @version $Revision: 64959 $ */ public class TestServiceAttributeMetaData implements Serializable { private static final long serialVersionUID = 1; private Object value; private String name; public TestServiceAttributeMetaData(Object value, String name) { super(); this.value = value; this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDummyClassLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000245610746226513033545 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; /** * TestDummyClassLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDummyClassLoader extends ClassLoader { public TestDummyClassLoader() { super(TestDummyClassLoader.class.getClassLoader()); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDeploymentDeployer1.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000725210640504360033534 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractComponentDeployer; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDeploymentDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDeploymentDeployer1 extends AbstractComponentDeployer { public TestDeploymentDeployer1() { setDeploymentVisitor(new TestDeploymentVisitor()); setComponentVisitor(new TestMetaDataVisitor()); } protected static void addTestComponent(DeploymentUnit unit, TestMetaData1 test) { DeploymentUnit component = unit.addComponent(test.getName()); component.addAttachment(TestMetaData1.class, test); } protected static void removeTestComponent(DeploymentUnit unit, TestMetaData1 test) { unit.removeComponent(test.getName()); } /** * TestDeploymentVisitor. */ public class TestDeploymentVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestDeployment1.class; } public void deploy(DeploymentUnit unit, TestDeployment1 deployment) throws DeploymentException { try { List tests = deployment.getBeans(); if (tests == null || tests.isEmpty()) return; for (TestMetaData1 test : tests) addTestComponent(unit, test); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment, t); } } public void undeploy(DeploymentUnit unit, TestDeployment1 deployment) { List tests = deployment.getBeans(); if (tests == null) return; for (TestMetaData1 test : tests) { unit.removeComponent(test.getName()); } } } /** * TestMetaDataVisitor. */ public static class TestMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestMetaData1.class; } public void deploy(DeploymentUnit unit, TestMetaData1 deployment) throws DeploymentException { addTestComponent(unit, deployment); } public void undeploy(DeploymentUnit unit, TestMetaData1 deployment) { removeTestComponent(unit, deployment); } } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestComponentMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000265010652136375033543 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; /** * TestComponentMetaData. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentMetaData { public String name; public boolean fail = false; public TestComponentMetaData(String name, boolean fail) { this.name = name; this.fail = fail; } public String toString() { return name; } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestRealDeployer2.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000433110640504360033527 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDeploymentDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestRealDeployer2 extends AbstractRealDeployerWithInput { public List deployed = new ArrayList(); public TestRealDeployer2() { setDeploymentVisitor(new TestMetaDataVisitor()); setWantComponents(true); } public class TestMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestMetaData2.class; } public void deploy(DeploymentUnit unit, TestMetaData2 deployment) throws DeploymentException { deployed.add(deployment); } public void undeploy(DeploymentUnit unit, TestMetaData2 deployment) { deployed.remove(deployment); } } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDeploymentContextComparator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000345610653632007033542 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.Comparator; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.helpers.DefaultDeploymentContextComparator; /** * TestDeploymentContextComparator. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDeploymentContextComparator implements Comparator { private static DefaultDeploymentContextComparator delegate = DefaultDeploymentContextComparator.INSTANCE; public static final TestDeploymentContextComparator INSTANCE = new TestDeploymentContextComparator(); private TestDeploymentContextComparator() { } public int compare(DeploymentContext o1, DeploymentContext o2) { return -delegate.compare(o1, o2); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestClassLoaderDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000367710756604047033556 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.net.URL; import java.net.URLClassLoader; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractTopLevelClassLoaderDeployer; import org.jboss.deployers.structure.spi.ClassLoaderFactory; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDeployerOrdering. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestClassLoaderDeployer extends AbstractTopLevelClassLoaderDeployer implements ClassLoaderFactory { public ClassLoader cl = new URLClassLoader(new URL[0]); public ClassLoader createTopLevelClassLoader(DeploymentUnit unit) throws DeploymentException { log.debug("Created classloader: " + unit.getName()); return cl; } public void removeTopLevelClassLoader(DeploymentUnit unit) throws Exception { log.debug("Removed classloader: " + unit.getName()); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TxSupportMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000224710665651046033546 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; /** * @author Scott.Stark@jboss.org * @version $Revision: 64982 $ */ public enum TxSupportMetaData { NONE, LOCAL, XA; } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestDescribeDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000471510717372452033547 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.ArrayList; import java.util.List; import org.jboss.dependency.spi.DependencyItem; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDescribeDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDescribeDeployer extends AbstractRealDeployer { public List deployed = new ArrayList(); public List undeployed = new ArrayList(); public TestDescribeDeployer() { setStage(DeploymentStages.DESCRIBE); } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { deployed.add(unit.getName()); TestDependencyMetaData dependencies = unit.getAttachment(TestDependencyMetaData.class); if (dependencies != null) { for (DependencyItem item : dependencies.iDependOn) unit.addIDependOn(item); } } @Override public void internalUndeploy(DeploymentUnit unit) { undeployed.add(unit.getName()); TestDependencyMetaData dependencies = unit.getAttachment(TestDependencyMetaData.class); if (dependencies != null) { for (DependencyItem item : dependencies.iDependOn) unit.removeIDependOn(item); } } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestComponentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000755510652136375033554 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractComponentDeployer; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestDeploymentDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestComponentDeployer extends AbstractComponentDeployer { public TestComponentDeployer(int order) { setDeploymentVisitor(new TestComponentMetaDataContainerVisitor()); setComponentVisitor(new TestComponentMetaDataVisitor()); setRelativeOrder(order); } protected static void addTestComponent(DeploymentUnit unit, TestComponentMetaData test) { DeploymentUnit component = unit.addComponent(test.name); component.addAttachment(TestComponentMetaData.class, test); } protected static void removeTestComponent(DeploymentUnit unit, TestComponentMetaData test) { unit.removeComponent(test.name); } public class TestComponentMetaDataContainerVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestComponentMetaDataContainer.class; } public void deploy(DeploymentUnit unit, TestComponentMetaDataContainer deployment) throws DeploymentException { try { List tests = deployment.componentMetaData; if (tests == null || tests.isEmpty()) return; for (TestComponentMetaData test : tests) addTestComponent(unit, test); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment, t); } } public void undeploy(DeploymentUnit unit, TestComponentMetaDataContainer deployment) { List tests = deployment.componentMetaData; if (tests == null) return; for (TestComponentMetaData test : tests) { unit.removeComponent(test.name); } } } public static class TestComponentMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestComponentMetaData.class; } public void deploy(DeploymentUnit unit, TestComponentMetaData deployment) throws DeploymentException { addTestComponent(unit, deployment); } public void undeploy(DeploymentUnit unit, TestComponentMetaData deployment) { removeTestComponent(unit, deployment); } } } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/DSService.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000650510756346245033552 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import org.jboss.managed.api.ManagedOperation.Impact; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectID; import org.jboss.managed.api.annotation.ManagementOperation; import org.jboss.managed.api.annotation.ManagementParameter; import org.jboss.managed.api.annotation.ManagementProperty; /** * Sample mbean service metadata to test tieing together runtime * properties/operations to the root DSMetaData ManagedObject * @author Scott.Stark@jboss.org * @version $Revision: 69901 $ */ @ManagementObject(isRuntime=true) public class DSService { private static final long serialVersionUID = 1; /** The name of the ManagedObject this runtime view augments */ private String managementName; private String runtimeProp1; private int runtimeProp2; @ManagementObjectID(type="DataSource") public String getManagementName() { return managementName; } public void setManagementName(String managementName) { this.managementName = managementName; } @ManagementProperty public String getRuntimeProp1() { return runtimeProp1; } public void setRuntimeProp1(String runtimeProp1) { this.runtimeProp1 = runtimeProp1; } @ManagementProperty public int getRuntimeProp2() { return runtimeProp2; } public void setRuntimeProp2(int runtimeProp2) { this.runtimeProp2 = runtimeProp2; } @ManagementOperation(description="Flush the connections in the pool", impact=Impact.WriteOnly) public void flushPool() { } @ManagementOperation(description="Close the connections in the pool", impact=Impact.WriteOnly) public void closePool() { } @ManagementOperation(description="Takes a string and returns it", impact=Impact.ReadOnly, params={@ManagementParameter(name="input", description="The string to return")}) public String takesString(String arg1) { return arg1; } @ManagementOperation(description="Takes an int and multiples by 10", impact=Impact.ReadOnly, params={@ManagementParameter(name="input", description="The int to multiple", constraintsFactory=TestManagedParameterConstraintsPopulatorFactory.class)}) public int constrainedIntx10(int arg1) { return 10*arg1; } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/RuntimeComponentMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000441510705655705033546 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import java.io.Serializable; import org.jboss.managed.api.annotation.ManagementComponent; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectID; import org.jboss.managed.api.annotation.ManagementProperty; import org.jboss.managed.api.annotation.ManagementRuntimeRef; /** * Simple meta data. * * @author Ales.Justin@jboss.org */ @ManagementObject(componentType = @ManagementComponent(type = "RuntimeType", subtype = "LocalTx")) public class RuntimeComponentMetaData implements Serializable { private static final long serialVersionUID = 1L; private String domain; private CustomName customName; @ManagementProperty(name="domain-name") @ManagementObjectID(type="SecurityDomain") public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } @ManagementProperty(name="custom-name") @ManagementRuntimeRef(transformer = CustomRuntimeComponentNameTransformer.class) public CustomName getCustomName() { return customName; } public void setCustomName(CustomName customName) { this.customName = customName; } } ././@LongLink0000000000000000000000000000024200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/TestManagedParameterConstraintsPopulatorFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000440610665114544033542 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import org.jboss.managed.api.Fields; import org.jboss.managed.spi.factory.ManagedParameterConstraintsPopulator; import org.jboss.managed.spi.factory.ManagedParameterConstraintsPopulatorFactory; import org.jboss.metatype.api.values.SimpleValueSupport; import org.jboss.reflect.spi.ParameterInfo; /** * Example ManagedParameterConstraintsPopulatorFactory * @author Scott.Stark@jboss.org * @version $Revision: 64930 $ */ public class TestManagedParameterConstraintsPopulatorFactory implements ManagedParameterConstraintsPopulatorFactory { public ManagedParameterConstraintsPopulator newInstance() { return new TestManagedParameterConstraintsPopulator(); } static class TestManagedParameterConstraintsPopulator implements ManagedParameterConstraintsPopulator { public void populateManagedParameter(String methodName, ParameterInfo info, Fields fields) { if (methodName.equals("constrainedIntx10")) populateconstrainedIntx10Arg(fields); } void populateconstrainedIntx10Arg(Fields fields) { fields.setField(Fields.MINIMUM_VALUE, SimpleValueSupport.wrap(0)); fields.setField(Fields.MAXIMUM_VALUE, SimpleValueSupport.wrap(100)); } } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/XADataSourceMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000446611113261537033542 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import org.jboss.managed.api.annotation.ManagementComponent; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementProperty; import org.jboss.managed.api.annotation.ManagementPropertyFactory; import org.jboss.managed.plugins.WritethroughManagedPropertyImpl; /** * * @author Scott.Stark@jboss.org * @version $Revision: 81635 $ */ @ManagementObject(componentType=@ManagementComponent(type="DataSource", subtype="XA")) public class XADataSourceMetaData extends ConnMetaData { private static final long serialVersionUID = 1; private String xaDataSourceClass; private int xaResourceTimeout; public XADataSourceMetaData() { } @ManagementProperty @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public String getXaDataSourceClass() { return xaDataSourceClass; } public void setXaDataSourceClass(String xaDataSourceClass) { this.xaDataSourceClass = xaDataSourceClass; } @ManagementProperty @ManagementPropertyFactory(WritethroughManagedPropertyImpl.class) public int getXaResourceTimeout() { return xaResourceTimeout; } public void setXaResourceTimeout(int xaResourceTimeout) { this.xaResourceTimeout = xaResourceTimeout; } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/support/LocalDataSourceMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/deployer0000644000175000017500000000266610663616165033554 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deployer.support; import org.jboss.managed.api.annotation.ManagementComponent; import org.jboss.managed.api.annotation.ManagementObject; /** * @author Scott.Stark@jboss.org * @version $Revision: 64860 $ */ @ManagementObject(componentType=@ManagementComponent(type="DataSource", subtype="LocalTx")) public class LocalDataSourceMetaData extends ConnMetaData { private static final long serialVersionUID = 1; } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000755000175000017500000000000011620060462033353 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000755000175000017500000000000011620060462033353 5ustar twernertwerner././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/test/DeployerManagedDeploymentUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000644000175000017500000004607011113261537033367 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.managed.test; import java.io.Serializable; import java.util.ArrayList; import java.util.Map; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.managed.api.ComponentType; import org.jboss.managed.api.ManagedComponent; import org.jboss.managed.api.ManagedDeployment; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.ManagedOperation; import org.jboss.managed.api.ManagedParameter; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.api.factory.ManagedObjectFactory; import org.jboss.metatype.api.types.SimpleMetaType; import org.jboss.metatype.api.values.GenericValue; import org.jboss.metatype.api.values.MetaValue; import org.jboss.test.deployers.deployer.support.ConnMetaData; import org.jboss.test.deployers.deployer.support.CustomName; import org.jboss.test.deployers.deployer.support.DSMetaData; import org.jboss.test.deployers.deployer.support.DSService; import org.jboss.test.deployers.deployer.support.LocalDataSourceMetaData; import org.jboss.test.deployers.deployer.support.MCFDeployer; import org.jboss.test.deployers.deployer.support.RuntimeComponentMetaData; import org.jboss.test.deployers.deployer.support.SecMetaData; import org.jboss.test.deployers.deployer.support.SecurityDeployment; import org.jboss.test.deployers.deployer.support.SimpleMetaData; import org.jboss.test.deployers.deployer.support.TestServiceAttributeMetaData; import org.jboss.test.deployers.deployer.support.TestServiceMetaData; import org.jboss.test.deployers.deployer.support.TestServiceMetaDataICF; import org.jboss.test.deployers.deployer.support.XADataSourceMetaData; import org.jboss.test.deployers.managed.support.MockProfileService; /** * ManagedDeployment unit tests. * * @author Scott.Stark@jboss.org * @author Ales.Justin@jboss.org * @version $Revision: 81635 $ */ public class DeployerManagedDeploymentUnitTestCase extends AbstractManagedObjectUnitTest { private MCFDeployer deployer = new MCFDeployer(); public static Test suite() { return new TestSuite(DeployerManagedDeploymentUnitTestCase.class); } public DeployerManagedDeploymentUnitTestCase(String name) { super(name); } public void testAnnotationScan() throws Exception { ManagedObjectFactory mof = ManagedObjectFactory.getInstance(); ManagedObject mo = mof.createManagedObject(DSMetaData.class, null); Map props = mo.getProperties(); log.info("DSMetaData props: "+props); assertEquals(2, props.size()); } public void testComponentNameAndSetValue() throws Exception { DeployerClient main = getMainDeployer(); MockProfileService ps = new MockProfileService(main); ManagedObjectFactory mof = ManagedObjectFactory.getInstance(); TestServiceMetaDataICF tsicf = new TestServiceMetaDataICF(); mof.setInstanceClassFactory(TestServiceMetaData.class, tsicf); // Deploy a datasource with local and xa factories Deployment ctx1 = createSimpleDeployment("deployment1"); MutableAttachments a1 = (MutableAttachments) ctx1.getPredeterminedManagedObjects(); DSMetaData dsmd = new DSMetaData(); dsmd.setDiplayName("deployment1 DS"); // The base LocalDataSourceMeta LocalDataSourceMetaData ds = new LocalDataSourceMetaData(); ds.setJndiName("java:DefaultDS1"); ds.setMaxSize(100); ds.setMinSize(10); ds.setPassword("password1".toCharArray()); ds.setUsername("username1"); SecMetaData smd1 = new SecMetaData(); smd1.setDomain("java:/jaas/domain1"); ds.setSecurityMetaData(smd1); ArrayList deployments = new ArrayList(); deployments.add(ds); dsmd.setDeployments(deployments); a1.addAttachment(DSMetaData.class, dsmd); // The mbeans associated with the local DS TestServiceMetaData localMBeans = new TestServiceMetaData(); localMBeans.setObjectName("jboss.jca:service.SecurityDomain"); localMBeans.setCode(SimpleMetaData.class.getName()); ArrayList localMBeanAttrs = new ArrayList(); localMBeanAttrs.add(new TestServiceAttributeMetaData("java:/jaas/domain1", "domain")); localMBeanAttrs.add(new TestServiceAttributeMetaData("java:DefaultDS1", "jndiName")); TestServiceAttributeMetaData typeAttribute = new TestServiceAttributeMetaData(SimpleMetaData.SecurityDeploymentType.NONE, "type"); localMBeanAttrs.add(typeAttribute); localMBeans.setAttributes(localMBeanAttrs); a1.addAttachment(TestServiceMetaData.class, localMBeans); ps.addDeployment(ctx1); Deployment ctx2 = createSimpleDeployment("deployment2"); MutableAttachments a2 = (MutableAttachments)ctx2.getPredeterminedManagedObjects(); TestServiceMetaData localMBeans2 = new TestServiceMetaData(); localMBeans2.setCode(RuntimeComponentMetaData.class.getName()); ArrayList localMBeanAttrs2 = new ArrayList(); localMBeanAttrs2.add(new TestServiceAttributeMetaData("java:/jaas/domain2", "domain")); CustomName customName = new CustomName("runtime-name-1"); localMBeanAttrs2.add(new TestServiceAttributeMetaData(customName, "customName")); localMBeans2.setAttributes(localMBeanAttrs2); a2.addAttachment(TestServiceMetaData.class, localMBeans2); ps.addDeployment(ctx2); ps.process(); ManagedObject mo = ps.getManagedObject("java:/jaas/domain1/SecurityDomain"); assertNotNull(mo); assertEquals(localMBeans.getObjectName(), mo.getComponentName()); ManagedObject mo2 = ps.getManagedObject("java:/jaas/domain2/SecurityDomain"); assertNotNull(mo2); assertEquals(customName.getName(), mo2.getComponentName()); ManagedDeployment md = ps.getManagedDeployment("deployment1"); assertNotNull(md); ManagedComponent mc = md.getComponent("java:/jaas/domain1"); assertNotNull(mc); ManagedProperty prop = mc.getProperty("security-criteria"); assertNotNull(prop); assertEquals(typeAttribute.getValue(), SimpleMetaData.SecurityDeploymentType.NONE); SimpleMetaData.SecurityDeploymentType value = SimpleMetaData.SecurityDeploymentType.APPLICATION; prop.setValue(getMetaValueFactory().create(value)); assertEquals(typeAttribute.getValue(), SimpleMetaData.SecurityDeploymentType.APPLICATION); ManagedProperty targetProp = mc.getProperty("jndi-name"); assertNotNull(targetProp); targetProp.setValue(getMetaValueFactory().create("java:DefaultDS2")); // test target runtime component invocation (if intendet here) } public void testManagedDeployment() throws Exception { DeployerClient main = getMainDeployer(); MockProfileService ps = new MockProfileService(main); ManagedObjectFactory mof = ManagedObjectFactory.getInstance(); TestServiceMetaDataICF tsicf = new TestServiceMetaDataICF(); mof.setInstanceClassFactory(TestServiceMetaData.class, tsicf); // Deploy a datasource with local and xa factories Deployment ctx1 = createSimpleDeployment("deployment1"); DSMetaData dsmd = new DSMetaData(); dsmd.setDiplayName("deployment1 DS"); // TODO: dsmd.setUrl(new URL("vfsfile:/tmp/some-ds.xml")); // The base LocalDataSourceMeta LocalDataSourceMetaData ds = new LocalDataSourceMetaData(); ds.setJndiName("java:DefaultDS1"); ds.setMaxSize(100); ds.setMinSize(10); ds.setPassword("password1".toCharArray()); ds.setUsername("username1"); SecMetaData smd1 = new SecMetaData(); smd1.setDomain("java:/jaas/domain1"); ds.setSecurityMetaData(smd1); XADataSourceMetaData xads = new XADataSourceMetaData(); xads.setJndiName("java:DefaultXADS2"); ds.setMaxSize(100); ds.setMinSize(10); ds.setPassword("password2".toCharArray()); ds.setUsername("username2"); xads.setXaDataSourceClass("org.jboss.xa.SomeXADS"); xads.setXaResourceTimeout(300); SecMetaData smd2 = new SecMetaData(); smd2.setDomain("java:/jaas/domain2"); xads.setSecurityMetaData(smd2); ArrayList deployments = new ArrayList(); deployments.add(ds); deployments.add(xads); dsmd.setDeployments(deployments); MutableAttachments a1 = (MutableAttachments) ctx1.getPredeterminedManagedObjects(); a1.addAttachment(DSMetaData.class, dsmd); // The mbeans associated with the local DS TestServiceMetaData localMBeans = new TestServiceMetaData(); localMBeans.setCode(DSService.class.getName()); ArrayList localMBeanAttrs = new ArrayList(); localMBeanAttrs.add(new TestServiceAttributeMetaData("java:DefaultDS1", "managementName")); localMBeans.setAttributes(localMBeanAttrs); a1.addAttachment(TestServiceMetaData.class, localMBeans); ps.addDeployment(ctx1); // Deploy security domain1 Deployment secCtx1 = createSimpleDeployment("sec-domain1"); MutableAttachments sda1 = (MutableAttachments) secCtx1.getPredeterminedManagedObjects(); SecurityDeployment sd1 = new SecurityDeployment(); sd1.setDomainName("java:/jaas/domain1"); sda1.addAttachment(SecurityDeployment.class, sd1); ps.addDeployment(secCtx1); // Deploy security domain2 Deployment secCtx2 = createSimpleDeployment("sec-domain2"); MutableAttachments sda2 = (MutableAttachments) secCtx2.getPredeterminedManagedObjects(); SecurityDeployment sd2 = new SecurityDeployment(); sd2.setDomainName("java:/jaas/domain2"); sda2.addAttachment(SecurityDeployment.class, sd2); ps.addDeployment(secCtx2); // Process the deployments to build the ManagedObjects ps.process(); // Validate the deployment1 ManagedObjects ManagedDeployment mo1 = ps.getManagedDeployment("deployment1"); validateDeployment1(mo1, ps); // Validate that the ManagedDeployment is serializable assertInstanceOf(mo1, Serializable.class); byte[] bytes = serialize((Serializable)mo1); ManagedDeployment dmo1 = (ManagedDeployment)deserialize(bytes); validateDeployment1(dmo1, ps); } protected void validateDeployment1(ManagedDeployment mo1, MockProfileService ps) { // Validate the deployment1 ManagedObjects assertNotNull("deployment1 ManagedDeployment", mo1); ManagedProperty deploymentsProp = mo1.getProperty("deployments"); assertNotNull("deployments prop", deploymentsProp); // Get the deployments MCs Map mcs1 = mo1.getComponents(); assertEquals("deployment1 has 2 ManagedComponent", 2, mcs1.size()); // Get the deployments property MOs ManagedComponent localDataMO = null; ManagedComponent xaDataMO = null; for(ManagedComponent mc : mcs1.values()) { if (mc.getAttachmentName().equals(LocalDataSourceMetaData.class.getName())) localDataMO = mc; else if (mc.getAttachmentName().equals(XADataSourceMetaData.class.getName())) xaDataMO = mc; } // Get the LocalDataSourceMetaData/SecMetaData/domain ManagedProperty assertNotNull("LocalDataSourceMetaData MO", localDataMO); assertEquals("LocalDataSourceMetaData comp type", new ComponentType("DataSource", "LocalTx"), localDataMO.getType()); Map localDataProps = localDataMO.getProperties(); log.debug("LocalDataSourceMetaData MO.props: "+localDataProps); assertNotNull("LocalDataSourceMetaData MO.props", localDataProps); ManagedProperty localSecDomainProp = localDataMO.getProperty("security-domain"); assertNotNull("localSecDomainProp", localSecDomainProp); GenericValue localSecDomainPropGV = (GenericValue) localSecDomainProp.getValue(); ManagedObject localSecDomainPropMO = (ManagedObject) localSecDomainPropGV.getValue(); ManagedProperty localSecDomainRefProp = localSecDomainPropMO.getProperty("domain-name"); assertNotNull("localSecDomainRefProp", localSecDomainRefProp); // Get the XADataSourceMetaData/SecMetaData/domain ManagedProperty log.debug("XADataSourceMetaData MO: "+xaDataMO); assertNotNull("XADataSourceMetaData", xaDataMO); assertEquals("XADataSourceMetaData comp type", new ComponentType("DataSource", "XA"), xaDataMO.getType()); assertNotNull("XADataSourceMetaData MO.props", xaDataMO.getProperties()); ManagedProperty xaSecDomainProp = xaDataMO.getProperty("security-domain"); assertNotNull("xaSecDomainProp", xaSecDomainProp); GenericValue xaSecDomainPropGV = (GenericValue) xaSecDomainProp.getValue(); ManagedObject xaSecDomainPropMO = (ManagedObject) xaSecDomainPropGV.getValue(); ManagedProperty xaSecDomainRefProp = xaSecDomainPropMO.getProperty("domain-name"); assertNotNull("xaSecDomainRefProp", xaSecDomainRefProp); // Should be 0 unresolved ManagementObjectRef for the sec-domain1/sec-domain2 Map> unresolvedRefs = ps.getUnresolvedRefs(); log.info("unresolvedRefs: "+unresolvedRefs); assertEquals("Should be 0 ManagementObjectRef", 0, unresolvedRefs.size()); ManagedDeployment secMD1 = ps.getManagedDeployment("sec-domain1"); ManagedDeployment secMD2 = ps.getManagedDeployment("sec-domain2"); // Validate that the sec-domain1 ManagedObject is the target of the localSecDomainRefProp log.info("sec-domain1 ManagedObjectNames: "+ secMD1.getManagedObjectNames()); ManagedObject sd1MO = secMD1.getManagedObject("java:/jaas/domain1"); assertNotNull("java:/jaas/domain1 MO", sd1MO); ManagedObject localSecDomainPropTarget = localSecDomainRefProp.getTargetManagedObject(); assertEquals(sd1MO, localSecDomainPropTarget); // Validate that the sec-domain2 ManagedObject is the target of the xaSecDomainRefProp ManagedObject sd2MO = secMD2.getManagedObject("java:/jaas/domain2"); assertNotNull("java:/jaas/domain2 MO", sd2MO); ManagedObject xaSecDomainPropTarget = xaSecDomainRefProp.getTargetManagedObject(); assertEquals(sd2MO, xaSecDomainPropTarget); // Validate the operations on the localDataMO Set localDataOps = localDataMO.getOperations(); assertEquals("localDataOps ops count is 4", 4, localDataOps.size()); ManagedOperation flushPool = null; ManagedOperation closePool = null; ManagedOperation takesString = null; ManagedOperation constrainedIntx10 = null; for(ManagedOperation op : localDataOps) { if (op.getName().equals("flushPool")) flushPool = op; if (op.getName().equals("closePool")) closePool = op; if (op.getName().equals("takesString")) takesString = op; if (op.getName().equals("constrainedIntx10")) constrainedIntx10 = op; } // flushPool assertNotNull("flushPool found", flushPool); assertEquals("flushPool", flushPool.getName()); assertEquals("Flush the connections in the pool", flushPool.getDescription()); assertEquals(ManagedOperation.Impact.WriteOnly, flushPool.getImpact()); assertEquals(SimpleMetaType.VOID, flushPool.getReturnType()); assertEquals("zero params", 0, flushPool.getParameters().length); // closePool assertNotNull("closePool found", closePool); assertEquals("closePool", closePool.getName()); assertEquals("Close the connections in the pool", closePool.getDescription()); assertEquals(ManagedOperation.Impact.WriteOnly, closePool.getImpact()); assertEquals(SimpleMetaType.VOID, closePool.getReturnType()); assertEquals("zero params", 0, closePool.getParameters().length); // takesString assertNotNull("takesString found", takesString); assertEquals("takesString", takesString.getName()); assertEquals("Takes a string and returns it", takesString.getDescription()); assertEquals(ManagedOperation.Impact.ReadOnly, takesString.getImpact()); assertEquals(SimpleMetaType.STRING, takesString.getReturnType()); ManagedParameter[] takesStringParams = takesString.getParameters(); assertEquals("one params", 1, takesStringParams.length); assertEquals("param name", "input", takesStringParams[0].getName()); assertEquals("param description", "The string to return", takesStringParams[0].getDescription()); assertEquals("param type", SimpleMetaType.STRING, takesStringParams[0].getMetaType()); // constrainedIntx10 assertNotNull("constrainedIntx10 found", constrainedIntx10); assertEquals("constrainedIntx10", constrainedIntx10.getName()); assertEquals("Takes an int and multiples by 10", constrainedIntx10.getDescription()); assertEquals(ManagedOperation.Impact.ReadOnly, constrainedIntx10.getImpact()); assertEquals(SimpleMetaType.INTEGER, constrainedIntx10.getReturnType()); ManagedParameter[] constrainedIntx10Params = constrainedIntx10.getParameters(); assertEquals("one params", 1, constrainedIntx10Params.length); assertEquals("param name", "input", constrainedIntx10Params[0].getName()); assertEquals("param description", "The int to multiple", constrainedIntx10Params[0].getDescription()); assertEquals("param type", SimpleMetaType.INTEGER, constrainedIntx10Params[0].getMetaType()); Object min = constrainedIntx10Params[0].getMinimumValue(); assertEquals("param min is 0", 0, (MetaValue)min); assertEquals("param min is 100", 100, (MetaValue)constrainedIntx10Params[0].getMaximumValue()); // Validate that the localDataMO includes the runtime properties ManagedProperty rtp1 = localDataProps.get("runtimeProp1"); assertNotNull("runtimeProp1", rtp1); ManagedProperty rtp2 = localDataProps.get("runtimeProp2"); assertNotNull("runtimeProp2", rtp2); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/test/AbstractManagedObjectUnitTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000644000175000017500000000352211113261537033362 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.managed.test; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.MetaValueFactory; import org.jboss.test.deployers.AbstractDeployerTest; /** * AbstractManagedObjectUnitTest. * * @author Ales Justin */ public abstract class AbstractManagedObjectUnitTest extends AbstractDeployerTest { protected AbstractManagedObjectUnitTest(String name) { super(name); } protected MetaValueFactory getMetaValueFactory() { return MetaValueFactory.getInstance(); } protected void assertEquals(Object object, MetaValue metaValue) { assertEquals(null, object, metaValue); } protected void assertEquals(String msg, Object object, MetaValue metaValue) { assertEquals(msg, object, getMetaValueFactory().unwrap(metaValue)); } }././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/test/DeployerManagedObjectUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000644000175000017500000003137411113261537033370 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.managed.test; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.api.factory.ManagedObjectFactory; import org.jboss.managed.plugins.factory.AbstractManagedObjectFactory; import org.jboss.metatype.api.types.CollectionMetaType; import org.jboss.metatype.api.types.MetaType; import org.jboss.metatype.api.types.SimpleMetaType; import org.jboss.metatype.api.values.CollectionValue; import org.jboss.metatype.api.values.GenericValue; import org.jboss.metatype.api.values.MetaValue; import org.jboss.test.deployers.deployer.support.AllowedDsTypes; import org.jboss.test.deployers.deployer.support.ConnMetaData; import org.jboss.test.deployers.deployer.support.DSMetaData; import org.jboss.test.deployers.deployer.support.LocalDataSourceMetaData; import org.jboss.test.deployers.deployer.support.XADataSourceMetaData; import org.jboss.test.deployers.managed.support.TestAttachment; import org.jboss.test.deployers.managed.support.TestManagedObjectDeployer; import org.jboss.util.graph.Graph; /** * DeployerManagedObjectUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerManagedObjectUnitTestCase extends AbstractManagedObjectUnitTest { private TestManagedObjectDeployer deployer = new TestManagedObjectDeployer(); public static Test suite() { return new TestSuite(DeployerManagedObjectUnitTestCase.class); } public DeployerManagedObjectUnitTestCase(String name) { super(name); } public void testManagedObject() throws Exception { DeployerClient main = getMainDeployer(); // Deploy a context Deployment context = createSimpleDeployment("deploy"); main.addDeployment(context); main.process(); // Check the default settings assertNotNull(deployer.lastAttachment); assertEquals("initialString1", (MetaValue)deployer.lastAttachment.getProperty("string1")); assertEquals("initialString2", (MetaValue)deployer.lastAttachment.getProperty("string2")); // Get the managed object Map mos = main.getManagedObjects(context.getName()); assertNotNull(mos); ManagedObject mo = mos.get(TestAttachment.class.getName()); assertNotNull(mo); // Graph> mosg = main.getDeepManagedObjects(context.getName()); assertEquals("MO Graph", mosg.size(), 1); mos = mosg.getRootVertex().getData(); assertNotNull(mos); mo = mos.get(TestAttachment.class.getName()); assertNotNull(mo); // TODO JBMICROCONT-181 the attachment should NOT be the top level managed object // that should be describing the structure and deployment state // with the attachments as sub managed objects // Check the managed object has the default settings assertEquals("initialString1", mo.getProperty("string1").getValue()); assertEquals("initialString2", mo.getProperty("string2").getValue()); // Change a value mo.getProperty("string1").setValue(getMetaValueFactory().create("changedString1")); // Get the changed attachment TestAttachment attachment = (TestAttachment) mo.getAttachment(); // Redeploy with our changed attachment MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment(TestAttachment.class, attachment); main.addDeployment(context); main.process(); // Check the changed settings as seen by the deployer assertNotNull(deployer.lastAttachment); assertEquals("changedString1", (MetaValue)deployer.lastAttachment.getProperty("string1")); assertEquals("initialString2", (MetaValue)deployer.lastAttachment.getProperty("string2")); // TODO JBMICROCONT-181 shouldn't have to reget the managed object handles across redeploys? mos = main.getManagedObjects(context.getName()); assertNotNull(mos); mo = mos.get(TestAttachment.class.getName()); assertNotNull(mo); // Check the changed settings as described by the managed object assertEquals("changedString1", mo.getProperty("string1").getValue()); assertEquals("initialString2", mo.getProperty("string2").getValue()); } /** * Validate the ManagedObjectFactory for DSMetaData class * */ @SuppressWarnings("unchecked") public void testDSMetaDataManagedObjectFactory() { ManagedObjectFactory mof = ManagedObjectFactory.getInstance(); ManagedObject mo = mof.createManagedObject(DSMetaData.class, null); // Validate the expected properties Map propsMap = mo.getProperties(); assertEquals(2, propsMap.size()); log.info("DSMetaData properties: "+propsMap); // display-name ManagedProperty displayName = propsMap.get("display-name"); assertNotNull(displayName); assertEquals("display name of DS deployment", displayName.getDescription()); assertEquals(SimpleMetaType.STRING, displayName.getMetaType()); // deployments ManagedProperty deployments = propsMap.get("deployments"); assertNotNull(deployments); assertEquals("The DS connection factories", deployments.getDescription()); MetaType deploymentsType = new CollectionMetaType(List.class.getName(), AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE); assertEquals(deploymentsType, deployments.getMetaType()); CollectionValue value = CollectionValue.class.cast(deployments.getValue()); CollectionMetaType valueType = value.getMetaType(); assertEquals(AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE, valueType.getElementType()); assertEquals(1, value.getSize()); // Validate the ConnMetaData ManagedObject GenericValue localConnMOGV = GenericValue.class.cast(value.getElements()[0]); ManagedObject localConnMO = ManagedObject.class.cast(localConnMOGV.getValue()); assertEquals(ConnMetaData.class.getName(), localConnMO.getName()); propsMap = localConnMO.getProperties(); assertEquals(10, propsMap.size()); log.info("ConnMetaData properties: "+propsMap); ManagedProperty dsType = propsMap.get("datasource-type"); assertNotNull(dsType); Set dsTypeValues = dsType.getLegalValues(); assertTrue(dsTypeValues.containsAll(AllowedDsTypes.values)); } /** * Validate the ManagedObjectFactory for DSMetaData instance * */ @SuppressWarnings("unchecked") public void testDSMetaDataManagedObjectFactoryInit() { ManagedObjectFactory mof = ManagedObjectFactory.getInstance(); DSMetaData dsmd = new DSMetaData(); LocalDataSourceMetaData ds = new LocalDataSourceMetaData(); XADataSourceMetaData xads = new XADataSourceMetaData(); ArrayList deployments = new ArrayList(); deployments.add(ds); deployments.add(xads); dsmd.setDeployments(deployments); ManagedObject mo = mof.initManagedObject(dsmd, null, null); // Validate the expected properties Map propsMap = mo.getProperties(); assertEquals(2, propsMap.size()); log.info("DSMetaData properties: "+propsMap); // display-name ManagedProperty displayName = propsMap.get("display-name"); assertNotNull(displayName); assertEquals("display name of DS deployment", displayName.getDescription()); assertEquals(SimpleMetaType.STRING, displayName.getMetaType()); // deployments ManagedProperty dsDeployments = propsMap.get("deployments"); assertNotNull(deployments); assertEquals("The DS connection factories", dsDeployments.getDescription()); MetaType deploymentsType = new CollectionMetaType(List.class.getName(), AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE); assertEquals(deploymentsType, dsDeployments.getMetaType()); CollectionValue value = CollectionValue.class.cast(dsDeployments.getValue()); CollectionMetaType valueType = value.getMetaType(); assertEquals(AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE, valueType.getElementType()); assertEquals(2, value.getSize()); ManagedObject localConnMO = null; ManagedObject xaConnMO = null; for(Object md : value) { GenericValue tmpGV = GenericValue.class.cast(md); ManagedObject tmpMO = ManagedObject.class.cast(tmpGV.getValue()); if (tmpMO.getName().equals(LocalDataSourceMetaData.class.getName())) localConnMO = tmpMO; if (tmpMO.getName().equals(XADataSourceMetaData.class.getName())) xaConnMO = tmpMO; } assertNotNull(localConnMO); assertNotNull(xaConnMO); // Validate the LocalDataSourceMetaData ManagedObject propsMap = localConnMO.getProperties(); assertEquals(10, propsMap.size()); log.info("LocalDataSourceMetaData properties: "+propsMap); ManagedProperty dsType = propsMap.get("datasource-type"); assertNotNull(dsType); Set dsTypeValues = dsType.getLegalValues(); assertTrue(dsTypeValues.containsAll(AllowedDsTypes.values)); // Validate the XADataSourceMetaData ManagedObject propsMap = xaConnMO.getProperties(); assertEquals(12, propsMap.size()); log.info("XADataSourceMetaData properties: "+propsMap); ManagedProperty xaDataSourceClass = propsMap.get("xaDataSourceClass"); assertNotNull(xaDataSourceClass); ManagedProperty xaResourceTimeout = propsMap.get("xaResourceTimeout"); assertNotNull(xaResourceTimeout); ManagedProperty secDomain = propsMap.get("security-domain"); assertNotNull(secDomain); MetaType secDomainType = secDomain.getMetaType(); assertEquals(AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE, secDomainType); ManagedProperty jndiName = propsMap.get("jndi-name"); assertNotNull(jndiName); ManagedProperty password = propsMap.get("password"); assertNotNull(password); ManagedProperty connProperties = propsMap.get("connection-properties"); assertNotNull(connProperties); ManagedProperty username = propsMap.get("username"); assertNotNull(username); ManagedProperty maxSize = propsMap.get("max-size"); assertNotNull(maxSize); ManagedProperty minSize = propsMap.get("min-size"); assertNotNull(minSize); // Validate setting the properties displayName.setValue(getMetaValueFactory().create("testDSMetaDataManagedObjectFactoryInit")); jndiName.setValue(getMetaValueFactory().create("java:TestDS")); password.setValue(getMetaValueFactory().create("password".toCharArray())); username.setValue(getMetaValueFactory().create("username")); minSize.setValue(getMetaValueFactory().create(10)); maxSize.setValue(getMetaValueFactory().create(100)); Object attachment = xaConnMO.getAttachment(); assertTrue("attachment is a XADataSourceMetaData("+attachment+")", attachment instanceof XADataSourceMetaData); XADataSourceMetaData xaDS = XADataSourceMetaData.class.cast(attachment); assertEquals("jndiName", "java:TestDS", xaDS.getJndiName()); assertEquals("password", "password", new String(xaDS.getPassword())); assertEquals("username", "username", xaDS.getUsername()); assertEquals("minSize", 10, xaDS.getMinSize()); assertEquals("maxSize", 100, xaDS.getMaxSize()); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer); } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/DeployersManagedTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000644000175000017500000000345210667133160033367 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.managed; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.managed.test.DeployerManagedDeploymentUnitTestCase; import org.jboss.test.deployers.managed.test.DeployerManagedObjectUnitTestCase; /** * Deployers Managed Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class DeployersManagedTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers Managed Tests"); suite.addTest(DeployerManagedObjectUnitTestCase.suite()); suite.addTest(DeployerManagedDeploymentUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000755000175000017500000000000011620060462033353 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/support/TestManagedObjectDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000644000175000017500000000603311104173360033356 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.managed.support; import java.util.Map; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer; import org.jboss.deployers.spi.deployer.managed.ManagedObjectCreator; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.plugins.ManagedObjectImpl; import org.jboss.managed.plugins.ManagedPropertyImpl; /** * TestManagedObjectDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestManagedObjectDeployer extends AbstractDeployer implements ManagedObjectCreator { public static TestAttachment lastAttachment; public void deploy(DeploymentUnit unit) throws DeploymentException { lastAttachment = unit.getAttachment(TestAttachment.class); if (lastAttachment == null) { lastAttachment = new TestAttachment(); lastAttachment.setProperty("string1", "initialString1"); lastAttachment.setProperty("string2", "initialString2"); unit.addAttachment(TestAttachment.class, lastAttachment); } } public void build(DeploymentUnit unit, Set outputs, Map managedObjects) throws DeploymentException { TestAttachment attachment = unit.getAttachment(TestAttachment.class); if (attachment != null) { attachment = attachment.clone(); ManagedObjectImpl managedObject = new ManagedObjectImpl(TestAttachment.class.getName()); managedObject.setAttachment(attachment); Map properties = managedObject.getProperties(); properties.put("string1", new ManagedPropertyImpl(managedObject, new TestFields(attachment, "string1"))); properties.put("string2", new ManagedPropertyImpl(managedObject, new TestFields(attachment, "string2"))); managedObjects.put(TestAttachment.class.getName(), managedObject); } } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/support/MockProfileService.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000644000175000017500000002676210761511660033400 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.managed.support; import java.lang.annotation.Annotation; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.logging.Logger; import org.jboss.managed.api.ComponentType; import org.jboss.managed.api.ManagedDeployment; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.ManagedOperation; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.api.annotation.ManagementComponent; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectID; import org.jboss.managed.api.annotation.ManagementObjectRef; import org.jboss.managed.plugins.ManagedComponentImpl; import org.jboss.managed.plugins.ManagedObjectImpl; import org.jboss.managed.plugins.factory.AbstractManagedObjectFactory; import org.jboss.metatype.api.types.ArrayMetaType; import org.jboss.metatype.api.types.MetaType; import org.jboss.metatype.api.types.CollectionMetaType; import org.jboss.metatype.api.values.ArrayValue; import org.jboss.metatype.api.values.GenericValue; import org.jboss.metatype.api.values.SimpleValue; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.CollectionValue; /** * Mock profile service for testing implementation details. * * @author Scott.Stark@jboss.org * @version $Revision: 70207 $ */ public class MockProfileService { private static final Logger log = Logger.getLogger(MockProfileService.class); private DeployerClient main; /** id/type key to ManagedObject map */ private Map moRegistry = new HashMap(); /** The deployment map */ private Map deployments = new HashMap(); /** The deployment name to ManagedDeployment map */ private Map managedDeployments = new HashMap(); /** The ManagedPropertys with unresolved ManagementObjectRefs */ private Map> unresolvedRefs = new HashMap>(); /** A map of runtime ManagedObjects needing to be merged with their * mathing ManagedObject. */ private Map runtimeMOs = new HashMap(); public MockProfileService(DeployerClient main) { this.main = main; } public void addDeployment(Deployment ctx) throws DeploymentException { main.addDeployment(ctx); deployments.put(ctx.getName(), ctx); } public void process() throws DeploymentException { main.process(); for(String name : deployments.keySet()) { ManagedDeployment md = main.getManagedDeployment(name); log.info(name+" ManagedDeployment: " + md); Map mos = md.getManagedObjects(); log.info(name+" ManagedObjects: " + mos); for(ManagedObject mo : mos.values()) { processManagedObject(mo, md); } managedDeployments.put(name, md); } } public ManagedObject getManagedObject(String name) { ManagedObject mo = moRegistry.get(name); return mo; } public ManagedDeployment getManagedDeployment(String name) { ManagedDeployment md = managedDeployments.get(name); return md; } /** * * @param mo * @param md - */ @SuppressWarnings("unchecked") protected void processManagedObject(ManagedObject mo, ManagedDeployment md) { String key = mo.getName() + "/" + mo.getNameType(); log.debug("ID for ManagedObject: "+key+", attachmentName: "+mo.getAttachmentName()); // See if this is a runtime ManagedObject Map moAnns = mo.getAnnotations(); ManagementObject managementObject = (ManagementObject) moAnns.get(ManagementObject.class.getName()); if (managementObject.isRuntime()) { // Merge this with the ManagedObject ManagedObject parentMO = moRegistry.get(key); if (parentMO == null) { // Save the runtime mo for merging runtimeMOs.put(key, mo); return; } mergeRuntimeMO(parentMO, mo); } else { // See if there is runtime info to merge ManagedObject runtimeMO = runtimeMOs.get(key); if (runtimeMO != null) mergeRuntimeMO(mo, runtimeMO); } // Update the MO registry ManagedObject prevMO = moRegistry.put(key, mo); if( prevMO != null ) log.warn("Duplicate mo for key: "+key+", prevMO: "+prevMO); // Check for unresolved refs checkForReferences(key, mo); // Create ManagedComponents for ManagementComponent mc = (ManagementComponent) moAnns.get(ManagementComponent.class.getName()); if (mc != null) { ComponentType type = new ComponentType(mc.type(), mc.subtype()); ManagedComponentImpl comp = new ManagedComponentImpl(type, md, mo); md.addComponent(mo.getName(), comp); } // Scan for @ManagementObjectRef for(ManagedProperty prop : mo.getProperties().values()) { log.debug("Checking property: "+prop); // See if this is a ManagementObjectID ManagementObjectID id = (ManagementObjectID) prop.getAnnotations().get(ManagementObjectID.class.getName()); if (id != null) { Object refName = getRefName(prop.getValue()); if (refName == null) refName = id.name(); String propKey = refName + "/" + id.type(); log.debug("ManagedProperty level ID for ManagedObject: "+propKey+", attachmentName: "+mo.getAttachmentName()); moRegistry.put(propKey, mo); checkForReferences(propKey, mo); } // See if this is a ManagementObjectRef ManagementObjectRef ref = (ManagementObjectRef) prop.getAnnotations().get(ManagementObjectRef.class.getName()); if ( ref != null ) { // The reference key is the prop value + ref.type() log.debug("Property("+prop.getName()+") references: "+ref); Object refName = getRefName(prop.getValue()); if (refName == null) refName = ref.name(); String targetKey = refName + "/" + ref.type(); ManagedObject target = moRegistry.get(targetKey); if (target != null) { log.debug("Resolved property("+prop.getName()+") reference to: "+targetKey); prop.setTargetManagedObject(target); } else { Set referers = unresolvedRefs.get(targetKey); if (referers == null) { referers = new HashSet(); unresolvedRefs.put(targetKey, referers); } referers.add(prop); } } MetaType propType = prop.getMetaType(); if (propType == AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE) { GenericValue gv = (GenericValue) prop.getValue(); ManagedObject propMO = (ManagedObject) gv.getValue(); processManagedObject(propMO, md); } else if (propType.isArray()) { ArrayMetaType amt = (ArrayMetaType) propType; MetaType etype = amt.getElementType(); if (etype == AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE) { ArrayValue avalue = (ArrayValue) prop.getValue(); for(int n = 0; n < avalue.getLength(); n ++) { GenericValue gv = (GenericValue) avalue.getValue(n); ManagedObject propMO = (ManagedObject) gv.getValue(); processManagedObject(propMO, md); } } } else if (propType.isCollection()) { CollectionMetaType amt = (CollectionMetaType) propType; MetaType etype = amt.getElementType(); if (etype == AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE) { CollectionValue avalue = (CollectionValue) prop.getValue(); MetaValue[] elements = avalue.getElements(); for(int n = 0; n < avalue.getSize(); n ++) { GenericValue gv = (GenericValue) elements[n]; ManagedObject propMO = (ManagedObject) gv.getValue(); processManagedObject(propMO, md); } } } } } @SuppressWarnings("unchecked") protected Object getRefName(Object value) { if (value instanceof MetaValue) { MetaValue metaValue = (MetaValue)value; if (metaValue.getMetaType().isSimple() == false) throw new IllegalArgumentException("Can only get ref from simple value: " + value); return ((SimpleValue)metaValue).getValue(); } return value; } public Map> getUnresolvedRefs() { return unresolvedRefs; } protected void checkForReferences(String key, ManagedObject mo) { Set referers = unresolvedRefs.get(key); log.debug("checkForReferences, "+key+" has referers: "+referers); if (referers != null) { for(ManagedProperty prop : referers) { prop.setTargetManagedObject(mo); } unresolvedRefs.remove(key); } } /** * Merge the runtime props and ops * TODO: need a plugin to access the ManagedObject impl * @param mo * @param runtimeMO */ protected void mergeRuntimeMO(ManagedObject mo, ManagedObject runtimeMO) { Map moProps = mo.getProperties(); Set moOps = mo.getOperations(); HashMap props = new HashMap(moProps); HashSet ops = new HashSet(moOps); Map runtimeProps = runtimeMO.getProperties(); Set runtimeOps = runtimeMO.getOperations(); if (runtimeProps != null) props.putAll(runtimeProps); if (runtimeOps != null) ops.addAll(runtimeOps); ManagedObjectImpl moi = (ManagedObjectImpl) mo; moi.setProperties(props); moi.setOperations(ops); } } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/support/TestFields.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000644000175000017500000000371211113261537033363 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.managed.support; import org.jboss.managed.api.Fields; /** * TestFields. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestFields implements Fields { /** The serialVersionUID */ private static final long serialVersionUID = 1L; private TestAttachment attachment; private String property; public TestFields(TestAttachment attachment, String property) { this.attachment = attachment; this.property = property; } public Object getField(String name) { if (name == Fields.NAME) return property; if (name == Fields.VALUE) return attachment.getProperty(property); return null; } public void setField(String name, Object value) { if (name == Fields.VALUE) { attachment.setProperty(property, value); return; } throw new UnsupportedOperationException("setField: " + name); } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/support/TestAttachment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/managed/0000644000175000017500000000453611113261537033370 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.managed.support; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import org.jboss.metatype.api.values.SimpleValueSupport; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.MetaValueFactory; /** * TestAttachment. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestAttachment implements Cloneable, Serializable { /** The serialVersionUID */ private static final long serialVersionUID = 1L; private Map fields = new HashMap(); public Object getProperty(String name) { return fields.get(name); } public void setProperty(String name, Object value) { MetaValue mv; if (value instanceof MetaValue) mv = (MetaValue)value; else if (value instanceof Serializable) mv = SimpleValueSupport.wrap((Serializable)value); else mv = MetaValueFactory.getInstance().create(value); fields.put(name, mv); } public TestAttachment clone() { try { TestAttachment clone = (TestAttachment) super.clone(); clone.fields = new HashMap(clone.fields); return clone; } catch (CloneNotSupportedException e) { throw new Error("Unexpected", e); } } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/AbstractDeployerTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/Abstract0000644000175000017500000002134711104173360033453 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import java.util.Set; import org.jboss.dependency.plugins.AbstractController; import org.jboss.dependency.spi.Controller; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerState; import org.jboss.deployers.client.plugins.deployment.AbstractDeployment; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.plugins.deployers.DeployerWrapper; import org.jboss.deployers.plugins.deployers.DeployersImpl; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.plugins.managed.DefaultManagedDeploymentCreator; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.helpers.DefaultManagedObjectCreator; import org.jboss.deployers.spi.deployer.managed.ManagedDeploymentCreator; import org.jboss.deployers.spi.deployer.managed.ManagedObjectCreator; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.StructuralDeployers; import org.jboss.deployers.structure.spi.StructureBuilder; import org.jboss.deployers.structure.spi.helpers.AbstractStructuralDeployers; import org.jboss.deployers.structure.spi.helpers.AbstractStructureBuilder; import org.jboss.test.BaseTestCase; /** * AbstractDeployerTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractDeployerTest extends BaseTestCase { DeploymentFactory factory = new DeploymentFactory(); public AbstractDeployerTest(String name) { super(name); } protected DeployerClient createMainDeployer() { return createMainDeployer((Deployer[]) null); } protected DeployerClient createMainDeployer(Deployer... deployers) { log.debug("createMainDeployer"); MainDeployerImpl mainDeployer = new MainDeployerImpl(); StructuralDeployers structure = createStructuralDeployers(); mainDeployer.setStructuralDeployers(structure); Deployers theDeployers = createDeployers(); mainDeployer.setDeployers(theDeployers); ManagedDeploymentCreator mdc = createManagedDeploymentCreator(); mainDeployer.setMgtDeploymentCreator(mdc); if (deployers != null) { for (Deployer deployer : deployers) addDeployer(mainDeployer, deployer); } return mainDeployer; } protected StructureBuilder createStructureBuilder() { return new AbstractStructureBuilder(); } protected ManagedDeploymentCreator createManagedDeploymentCreator() { return new DefaultManagedDeploymentCreator(); } protected ManagedObjectCreator createManagedObjectCreator() { return new DefaultManagedObjectCreator(); } protected StructuralDeployers createStructuralDeployers() { StructureBuilder builder = createStructureBuilder(); AbstractStructuralDeployers structure = new AbstractStructuralDeployers(); structure.setStructureBuilder(builder); return structure; } protected Controller getController() { return new AbstractController(); } protected Deployers createDeployers() { log.debug("createDeployers"); Controller controller = getController(); ManagedObjectCreator moc = createManagedObjectCreator(); System.out.println("createDeployers, moc: "+moc); DeployersImpl di = new DeployersImpl(controller); di.setMgtObjectCreator(moc); return di; } protected void addDeployer(DeployerClient main, Deployer deployer) { MainDeployerImpl mainDeployerImpl = (MainDeployerImpl) main; DeployersImpl deployersImpl = (DeployersImpl) mainDeployerImpl.getDeployers(); deployersImpl.addDeployer(deployer); } protected void removeDeployer(DeployerClient main, Deployer deployer) { MainDeployerImpl mainDeployerImpl = (MainDeployerImpl) main; DeployersImpl deployersImpl = (DeployersImpl) mainDeployerImpl.getDeployers(); deployersImpl.removeDeployer(deployer); } protected void setDeployers(DeployerClient main, Set deployers) { log.debug("setDeployers"); MainDeployerImpl mainDeployerImpl = (MainDeployerImpl) main; DeployersImpl deployersImpl = (DeployersImpl) mainDeployerImpl.getDeployers(); deployersImpl.setDeployers(deployers); } protected Set getDeployers(DeployerClient main) { MainDeployerImpl mainDeployerImpl = (MainDeployerImpl) main; DeployersImpl deployersImpl = (DeployersImpl) mainDeployerImpl.getDeployers(); return deployersImpl.getDeployerWrappers(); } @Deprecated protected DeploymentContext getDeploymentContext(DeployerClient main, String name) { MainDeployerImpl mainDeployerImpl = (MainDeployerImpl) main; return mainDeployerImpl.getDeploymentContext(name); } @Deprecated protected DeploymentContext assertDeploymentContext(DeployerClient main, String name) { DeploymentContext context = getDeploymentContext(main, name); assertNotNull(name + " not found", context); return context; } protected DeploymentUnit getDeploymentUnit(DeployerClient main, String name) { MainDeployerImpl mainDeployerImpl = (MainDeployerImpl) main; return mainDeployerImpl.getDeploymentUnit(name); } protected DeploymentUnit assertDeploymentUnit(DeployerClient main, String name) { DeploymentUnit unit = getDeploymentUnit(main, name); assertNotNull(name + " not found", unit); return unit; } @Deprecated protected DeploymentUnit deploy(DeployerClient main, Deployment deployment) throws Exception { main.deploy(deployment); return assertDeploymentUnit(main, deployment.getName()); } protected DeploymentUnit assertDeploy(DeployerClient main, Deployment deployment) throws Exception { main.deploy(deployment); return assertDeploymentUnit(main, deployment.getName()); } protected DeploymentUnit addDeployment(DeployerClient main, Deployment deployment) throws Exception { main.addDeployment(deployment); main.process(); return assertDeploymentUnit(main, deployment.getName()); } protected void assertUndeploy(DeployerClient main, Deployment deployment) throws Exception { main.undeploy(deployment); } protected Deployment createSimpleDeployment(String name) { AbstractDeployment unit = createAbstractDeployment(name); factory.addContext(unit, ""); return unit; } protected AbstractDeployment createAbstractDeployment(String name) { return new AbstractDeployment(name); } protected ContextInfo addChild(PredeterminedManagedObjectAttachments parent, String name) { return factory.addContext(parent, name); } /** * This stage check is impl detail. * * @param unit the deployment unit * @param stage expected deployment stage */ protected void assertDeploymentStage(DeploymentUnit unit, DeploymentStage stage) { ControllerContext context = unit.getAttachment(ControllerContext.class); assertNotNull("Expecting controller context attachment: " + unit, context); ControllerState state = new ControllerState(stage.getName()); assertEquals(state, context.getState()); } @Override protected void configureLogging() { //enableTrace("org.jboss.deployers"); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000755000175000017500000000000011620060462033515 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000755000175000017500000000000011620060462033515 5ustar twernertwerner././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/test/AnnotationEnvKeepTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000644000175000017500000000351611034624717033534 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.annotations.test; import junit.framework.Test; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.plugins.annotations.GenericAnnotationDeployer; /** * AnnotationEnvKeepTestCase. * In this test we keep the javassist provided annotations. * * @author Ales Justin */ public class AnnotationEnvKeepTestCase extends AnnotationEnvTestCase { public AnnotationEnvKeepTestCase(String name) { super(name); } public static Test suite() { return suite(AnnotationEnvKeepTestCase.class); } protected Deployer createGenericAnnotationDeployer() { GenericAnnotationDeployer deployer = new GenericAnnotationDeployer(); deployer.setKeepAnnotations(true); return deployer; } }././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/test/AnnotationEnvTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000644000175000017500000002152211037353520033523 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.annotations.test; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Set; import junit.framework.Test; import org.jboss.classloader.plugins.ClassLoaderUtils; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.spi.annotations.Element; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.annotations.support.AnnotationsHolder; import org.jboss.test.deployers.annotations.support.TestAnnotation; /** * AnnotationEnvTestCase. * * @author Ales Justin */ public class AnnotationEnvTestCase extends AnnotationsTest { public AnnotationEnvTestCase(String name) { super(name); } public static Test suite() { return suite(AnnotationEnvTestCase.class); } @SuppressWarnings("unchecked") public void testDirectClassUsage() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("a"); addClassLoadingMetaData( deployment, deployment.getName(), null, ClassLoaderUtils.classNameToPath("org.jboss.test.deployers.annotations.support.AnnotationsHolder"), ClassLoaderUtils.classNameToPath("org.jboss.test.deployers.annotations.support.TestAnnotation") ); DeploymentUnit unit = assertDeploy(deployer, deployment); try { ClassLoader cl = unit.getClassLoader(); Class taClass = (Class)cl.loadClass("org.jboss.test.deployers.annotations.support.TestAnnotation"); assertNotLoaded(unit, "org.jboss.test.deployers.annotations.support.AnnotationsHolder"); // annotations are loaded, OK? assertLoaded(unit, "org.jboss.test.deployers.annotations.support.TestAnnotation"); AnnotationEnvironment env = getAnnotationEnvironment(unit); Set>> classes = env.classIsAnnotatedWith(taClass); assertNotNull(classes); assertEquals(1, classes.size()); assertEquals(AnnotationsHolder.class.getName(), classes.iterator().next().getOwnerClassName()); assertNotLoaded(unit, "org.jboss.test.deployers.annotations.support.AnnotationsHolder"); Element> ecl = getSingleton(env.classIsAnnotatedWith(taClass)); Annotation tacl = ecl.getAnnotation(); assertNotNull(tacl); assertEquals("class", getValue(tacl)); Element> ec = getSingleton(env.classHasConstructorAnnotatedWith(taClass)); Annotation ta = ec.getAnnotation(); assertNotNull(ta); assertEquals("constructor", getValue(ta)); assertInstanceOf(ec.getAnnotatedElement(), Constructor.class, false); Element ef = getSingleton(env.classHasFieldAnnotatedWith(taClass)); ta = ef.getAnnotation(); assertNotNull(ta); assertEquals("field", getValue(ta)); assertInstanceOf(ef.getAnnotatedElement(), Field.class, false); Element em = getSingleton(env.classHasMethodAnnotatedWith(taClass)); ta = em.getAnnotation(); assertNotNull(ta); assertEquals("method", getValue(ta)); assertInstanceOf(em.getAnnotatedElement(), Method.class, false); Set> eps = env.classHasParameterAnnotatedWith(taClass); assertNotNull(eps); assertEquals(2, eps.size()); for (Element ep : eps) { ta = ep.getAnnotation(); assertNotNull(ta); Object value = getValue(ta); AnnotatedElement ao = ep.getAnnotatedElement(); if ("cparameter".equals(value)) assertInstanceOf(ao, Constructor.class, false); else if ("mparameter".equals(value)) assertInstanceOf(ao, Method.class, false); else fail("Illegal annotation value: " + value); } } finally { assertUndeploy(deployer, deployment); } } @SuppressWarnings("unchecked") public void testSimpleClassUsage() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("a"); addClassLoadingMetaData( deployment, deployment.getName(), null, ClassLoaderUtils.classNameToPath("org.jboss.test.deployers.annotations.support.AnnotationsHolder"), ClassLoaderUtils.classNameToPath("org.jboss.test.deployers.annotations.support.TestAnnotation") ); DeploymentUnit unit = assertDeploy(deployer, deployment); try { String annotationName = "org.jboss.test.deployers.annotations.support.TestAnnotation"; assertNotLoaded(unit, "org.jboss.test.deployers.annotations.support.AnnotationsHolder"); // annotations are loaded, OK? assertLoaded(unit, "org.jboss.test.deployers.annotations.support.TestAnnotation"); AnnotationEnvironment env = getAnnotationEnvironment(unit); Set>> classes = env.classIsAnnotatedWith(annotationName); assertNotNull(classes); assertEquals(1, classes.size()); assertEquals(AnnotationsHolder.class.getName(), classes.iterator().next().getOwnerClassName()); assertNotLoaded(unit, "org.jboss.test.deployers.annotations.support.AnnotationsHolder"); Element> ecl = getSingleton(env.classIsAnnotatedWith(annotationName)); Annotation tacl = ecl.getAnnotation(); assertNotNull(tacl); assertEquals("class", getValue(tacl)); Element> ec = getSingleton(env.classHasConstructorAnnotatedWith(annotationName)); Annotation ta = ec.getAnnotation(); assertNotNull(ta); assertEquals("constructor", getValue(ta)); assertInstanceOf(ec.getAnnotatedElement(), Constructor.class, false); Element ef = getSingleton(env.classHasFieldAnnotatedWith(annotationName)); ta = ef.getAnnotation(); assertNotNull(ta); assertEquals("field", getValue(ta)); assertInstanceOf(ef.getAnnotatedElement(), Field.class, false); Element em = getSingleton(env.classHasMethodAnnotatedWith(annotationName)); ta = em.getAnnotation(); assertNotNull(ta); assertEquals("method", getValue(ta)); assertInstanceOf(em.getAnnotatedElement(), Method.class, false); Set> eps = env.classHasParameterAnnotatedWith(annotationName); assertNotNull(eps); assertEquals(2, eps.size()); for (Element ep : eps) { ta = ep.getAnnotation(); assertNotNull(ta); Object value = getValue(ta); AnnotatedElement ao = ep.getAnnotatedElement(); if ("cparameter".equals(value)) assertInstanceOf(ao, Constructor.class, false); else if ("mparameter".equals(value)) assertInstanceOf(ao, Method.class, false); else fail("Illegal annotation value: " + value); } } finally { assertUndeploy(deployer, deployment); } } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/test/AnnotationsTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000644000175000017500000001763111034624717033537 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.annotations.test; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.util.Set; import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ParentPolicy; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData; import org.jboss.classloading.spi.metadata.CapabilitiesMetaData; import org.jboss.classloading.spi.metadata.Capability; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory; import org.jboss.classloading.spi.version.Version; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.plugins.annotations.GenericAnnotationDeployer; import org.jboss.deployers.plugins.classloading.AbstractClassLoaderDescribeDeployer; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.spi.annotations.Element; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.annotations.support.InterceptionClassLoader; import org.jboss.test.deployers.annotations.support.InterceptionClassLoaderSystemDeployer; import org.jboss.test.deployers.classloading.support.MockClassLoaderDescribeDeployer; /** * @author Ales Justin */ public abstract class AnnotationsTest extends AbstractDeployerTest { private static ClassLoadingMetaDataFactory classLoadingMetaDataFactory = ClassLoadingMetaDataFactory.getInstance(); protected AbstractClassLoaderDescribeDeployer deployer1; protected InterceptionClassLoaderSystemDeployer deployer2; protected AnnotationsTest(String name) { super(name); } protected static ClassLoadingMetaData addClassLoadingMetaData(PredeterminedManagedObjectAttachments deployment, String name, Version version, String... paths) { return addClassLoadingMetaData(deployment, name, version, false, paths); } protected static ClassLoadingMetaData addClassLoadingMetaData(PredeterminedManagedObjectAttachments deployment, String name, Version version, boolean useVersionOnPackages, String... paths) { ClassLoadingMetaData classLoadingMetaData = createMetaData(name, version, useVersionOnPackages, paths); addMetaData(deployment, classLoadingMetaData); return classLoadingMetaData; } protected static ClassLoadingMetaData createMetaData(String name, Version version, String... paths) { return createMetaData(name, version, false, paths); } protected static ClassLoadingMetaData createMetaData(String name, Version version, boolean useVersionOnPackages, String... paths) { MockClassLoadingMetaData classLoadingMetaData = new MockClassLoadingMetaData(name, version); classLoadingMetaData.setPaths(paths); CapabilitiesMetaData capabilities = classLoadingMetaData.getCapabilities(); Capability capability = classLoadingMetaDataFactory.createModule(name, version); capabilities.addCapability(capability); if (paths != null) { for (String path : paths) { if (useVersionOnPackages) capability = classLoadingMetaDataFactory.createPackage(path, version); else capability = classLoadingMetaDataFactory.createPackage(path); capabilities.addCapability(capability); } } classLoadingMetaData.setCapabilities(capabilities); return classLoadingMetaData; } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, ClassLoadingMetaData md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(ClassLoadingMetaData.class, md); } protected AnnotationEnvironment getAnnotationEnvironment(Attachments attachments) { AnnotationEnvironment env = attachments.getAttachment(AnnotationEnvironment.class); assertNotNull(env); return env; } protected Element getSingleton(Set> elements) { assertNotNull(elements); assertEquals(1, elements.size()); return elements.iterator().next(); } protected Object getValue(Annotation annotation) throws Exception { assertNotNull(annotation); Class clazz = annotation.annotationType(); return clazz.getMethod("value").invoke(annotation); } protected void assertNotLoaded(DeploymentUnit unit, String className) { assertCheckLoaded(unit, className, false); } protected void assertLoaded(DeploymentUnit unit, String className) { assertCheckLoaded(unit, className, true); } private void assertCheckLoaded(DeploymentUnit unit, String className, boolean checkFlag) { ClassLoader cl = unit.getClassLoader(); if (cl instanceof InterceptionClassLoader == false) throw new IllegalArgumentException("Expecting InterceptionClassLoader instance: " + cl); InterceptionClassLoader icl = (InterceptionClassLoader)cl; Set loaded = icl.getLoaded(); assertNotNull(loaded); assertEquals(loaded.contains(className), checkFlag); } protected DeployerClient getMainDeployer(Deployer... deployers) { ClassLoading classLoading = new ClassLoading(); ClassLoaderSystem system = new DefaultClassLoaderSystem(); system.getDefaultDomain().setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY); deployer1 = new MockClassLoaderDescribeDeployer(); deployer1.setClassLoading(classLoading); deployer2 = new InterceptionClassLoaderSystemDeployer(); deployer2.setClassLoading(classLoading); deployer2.setSystem(system); Deployer deployer3 = createGenericAnnotationDeployer(); if (deployers != null && deployers.length > 0) { Deployer[] allDeployers = new Deployer[deployers.length + 3]; allDeployers[0] = deployer1; allDeployers[1] = deployer2; allDeployers[2] = deployer3; System.arraycopy(deployers, 0, allDeployers, 3, deployers.length); return createMainDeployer(allDeployers); } return createMainDeployer(deployer1, deployer2, deployer3); } protected Deployer createGenericAnnotationDeployer() { return new GenericAnnotationDeployer(); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000755000175000017500000000000011620060462033515 5ustar twernertwerner././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/support/InterceptionClassLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000644000175000017500000000602411006325473033525 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.annotations.support; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Enumeration; import java.util.HashSet; import java.util.Set; /** * InterceptionClassLoader. * * @author Ales Justin */ public class InterceptionClassLoader extends ClassLoader { private ClassLoader delegate; private Set loaded = new HashSet(); public InterceptionClassLoader(ClassLoader delegate) { super(); if (delegate == null) throw new IllegalArgumentException("Null delegate."); this.delegate = delegate; } public Set getLoaded() { return loaded; } public ClassLoader getDelegate() { return delegate; } public Class loadClass(String name) throws ClassNotFoundException { loaded.add(name); return delegate.loadClass(name); } public URL getResource(String name) { return delegate.getResource(name); } public Enumeration getResources(String name) throws IOException { return delegate.getResources(name); } public InputStream getResourceAsStream(String name) { return delegate.getResourceAsStream(name); } public synchronized void setDefaultAssertionStatus(boolean enabled) { delegate.setDefaultAssertionStatus(enabled); } public synchronized void setPackageAssertionStatus(String packageName, boolean enabled) { delegate.setPackageAssertionStatus(packageName, enabled); } public synchronized void setClassAssertionStatus(String className, boolean enabled) { delegate.setClassAssertionStatus(className, enabled); } public synchronized void clearAssertionStatus() { delegate.clearAssertionStatus(); } public int hashCode() { return delegate.hashCode(); } public boolean equals(Object obj) { return delegate.equals(obj); } public String toString() { return delegate.toString(); } }././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/support/AnnotationsHolder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000644000175000017500000000306411037353520033524 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.annotations.support; /** * @author Ales Justin */ @TestAnnotation("class") public class AnnotationsHolder { @TestAnnotation("field") @SuppressWarnings("unused") private Object object; @TestAnnotation("constructor") public AnnotationsHolder(@TestAnnotation("cparameter") Object object) { } @TestAnnotation("method") public void something(@TestAnnotation("mparameter") Object object) { System.out.println("object = " + object); } } ././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/support/InterceptionClassLoaderSystemDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000644000175000017500000000557011006326271033527 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.annotations.support; import org.jboss.deployers.plugins.classloading.AbstractLevelClassLoaderSystemDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.classloading.spi.dependency.Module; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ClassLoaderDomain; /** * InterceptionClassLoaderSystemDeployer. * * @author Ales Justin */ public class InterceptionClassLoaderSystemDeployer extends AbstractLevelClassLoaderSystemDeployer { public ClassLoader createClassLoader(DeploymentUnit unit) throws Exception { ClassLoader loader = super.createClassLoader(unit); return new InterceptionClassLoader(loader); } @Override public void removeClassLoader(DeploymentUnit unit) throws Exception { Module module = unit.getAttachment(Module.class); if (module == null) return; ClassLoader classLoader = unit.getClassLoader(); if (classLoader instanceof InterceptionClassLoader) { InterceptionClassLoader icl = (InterceptionClassLoader)classLoader; classLoader = icl.getDelegate(); } try { try { // Remove the classloader getSystem().unregisterClassLoader(classLoader); } finally { // Try to tidy up empty domains String domainName = module.getDeterminedDomainName(); if (ClassLoaderSystem.DEFAULT_DOMAIN_NAME.equals(domainName) == false) { ClassLoaderDomain domain = getSystem().getDomain(domainName); if (domain.hasClassLoaders() == false) getSystem().unregisterDomain(domain); } } } finally { cleanup(unit, module); module.reset(); } } }././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/support/TestAnnotation.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000644000175000017500000000300411006205672033516 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.annotations.support; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.annotation.ElementType; /** * @author Ales Justin */ @Target({ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface TestAnnotation { String value() default ""; } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotations/DeployersAnnotationsTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/annotati0000644000175000017500000000336211034624717033533 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.annotations; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.annotations.test.AnnotationEnvKeepTestCase; import org.jboss.test.deployers.annotations.test.AnnotationEnvTestCase; /** * Annotations scanning Test Suite. * * @author Ales Justin */ public class DeployersAnnotationsTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Annotations Scanning Tests"); suite.addTest(AnnotationEnvTestCase.suite()); suite.addTest(AnnotationEnvKeepTestCase.suite()); return suite; } }libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/0000755000175000017500000000000011620060461032702 5ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/tes0000755000175000017500000000000011620060461033416 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/test/DeployerCheckCompleteTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/tes0000644000175000017500000002043311104173360033422 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.test; import junit.framework.Test; import org.jboss.dependency.plugins.AbstractController; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.IncompleteDeploymentException; import org.jboss.deployers.plugins.deployers.DeployersImpl; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.deployer.helpers.DefaultManagedObjectCreator; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.StructuralDeployers; import org.jboss.test.deployers.main.support.DependencyDeployer; import org.jboss.test.deployers.main.support.TestAttachment; import org.jboss.test.deployers.main.support.TestAttachmentDeployer; import org.jboss.test.deployers.main.support.TestAttachments; import org.jboss.test.deployers.main.support.TestAttachmentsDeployer; /** * Check complete deployment test case. * * @author Ales Justin */ public class DeployerCheckCompleteTestCase extends AbstractMainDeployerTest { public DeployerCheckCompleteTestCase(String name) { super(name); } public static Test suite() { return suite(DeployerCheckCompleteTestCase.class); } public void testAllFailure() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment("failure"); makeFail(deployment, deployer); main.addDeployment(deployment); main.process(); try { main.checkComplete(deployment); fail("Should not be here."); } catch (DeploymentException e) { assertInstanceOf(e, IncompleteDeploymentException.class); } } public void testAllSuccess() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment("failure"); main.addDeployment(deployment); main.process(); main.checkComplete(deployment); } public void testStructureFailure() throws Exception { DeployerClient main = getMainDeployer(); MainDeployerImpl mainImpl = (MainDeployerImpl)main; StructuralDeployers sd = new StructuralDeployers() { public DeploymentContext determineStructure(Deployment deployment) throws DeploymentException { throw new DeploymentException("No such structure deployers."); } }; mainImpl.setStructuralDeployers(sd); Deployment deployment = createSimpleDeployment("failure"); makeFail(deployment, deployer); try { main.addDeployment(deployment); } catch (DeploymentException ignored) { } main.process(); try { main.checkComplete(); fail("Should not be here."); } catch (DeploymentException e) { assertInstanceOf(e, IncompleteDeploymentException.class); } } public void testStructureSuccess() throws Exception { DeployerClient main = getMainDeployer(); Deployment deployment = createSimpleDeployment("failure"); main.addDeployment(deployment); main.process(); main.checkStructureComplete(deployment); } public void testHalfThenAll() throws Exception { DeployerClient main = getDependencyMainDeployer(); Deployment dA = createSimpleDeployment("A"); addAttachment(dA, "xB"); main.addDeployment(dA); main.process(); try { main.checkComplete(dA); fail("Should not be here."); } catch (DeploymentException e) { assertInstanceOf(e, IncompleteDeploymentException.class); } Deployment dB = createSimpleDeployment("B"); addAttachment(dB, null); main.deploy(dB); main.checkComplete(dA); } public void testAllThenHalf() throws Exception { DeployerClient main = getDependencyMainDeployer(); Deployment dA = createSimpleDeployment("A"); addAttachment(dA, "xB"); main.addDeployment(dA); main.process(); Deployment dB = createSimpleDeployment("B"); addAttachment(dB, null); main.deploy(dB); main.checkComplete(dA); main.undeploy(dB); try { main.checkComplete(dA); fail("Should not be here."); } catch (DeploymentException e) { assertInstanceOf(e, IncompleteDeploymentException.class); } } public void testComponentAllThenHalf() throws Exception { DeployerClient main = getComponentMainDeployer(); Deployment dA = createSimpleDeployment("A"); addComponentAttachment(dA, "xB"); main.addDeployment(dA); main.process(); Deployment dB = createSimpleDeployment("B"); addComponentAttachment(dB, null); main.deploy(dB); main.checkComplete(dA); main.undeploy(dB); try { main.checkComplete(dA); fail("Should not be here."); } catch (DeploymentException e) { assertInstanceOf(e, IncompleteDeploymentException.class); } } protected DeployerClient getDependencyMainDeployer() { MainDeployerImpl main = new MainDeployerImpl(); main.setStructuralDeployers(createStructuralDeployers()); AbstractController controller = new AbstractController(); DeployersImpl deployers = new DeployersImpl(controller); deployers.setMgtObjectCreator(new DefaultManagedObjectCreator()); deployers.addDeployer(new DependencyDeployer(controller)); main.setDeployers(deployers); return main; } protected DeployerClient getComponentMainDeployer() { MainDeployerImpl main = new MainDeployerImpl(); main.setStructuralDeployers(createStructuralDeployers()); AbstractController controller = new AbstractController(); DeployersImpl deployers = new DeployersImpl(controller); deployers.setMgtObjectCreator(new DefaultManagedObjectCreator()); deployers.addDeployer(new TestAttachmentsDeployer()); deployers.addDeployer(new TestAttachmentDeployer(controller)); main.setDeployers(deployers); return main; } protected void addAttachment(Deployment deployment, Object dependency) { MutableAttachments mutableAttachments = (MutableAttachments)deployment.getPredeterminedManagedObjects(); mutableAttachments.addAttachment(TestAttachment.class, new TestAttachment("x" + deployment.getName(), dependency)); } protected void addComponentAttachment(Deployment deployment, Object dependency) { MutableAttachments mutableAttachments = (MutableAttachments)deployment.getPredeterminedManagedObjects(); TestAttachment testAttachment = new TestAttachment("x" + deployment.getName(), dependency); TestAttachments testAttachments = new TestAttachments(); testAttachments.addAttachment(testAttachment); mutableAttachments.addAttachment(TestAttachments.class, testAttachments); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/test/CycleCheckCompleteTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/tes0000644000175000017500000001262611104173360033427 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.test; import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; import junit.framework.Test; import org.jboss.dependency.plugins.AbstractController; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.IncompleteDeploymentException; import org.jboss.deployers.client.spi.IncompleteDeployments; import org.jboss.deployers.client.spi.MissingDependency; import org.jboss.deployers.plugins.deployers.DeployersImpl; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.deployer.helpers.DefaultManagedObjectCreator; import org.jboss.test.deployers.main.support.OrderedTestAttachmentDeployer; import org.jboss.test.deployers.main.support.TestAttachment; import org.jboss.test.deployers.main.support.TestAttachments; import org.jboss.test.deployers.main.support.TestAttachmentsDeployer; /** * Check for cycles. * * @author Ales Justin */ public class CycleCheckCompleteTestCase extends AbstractMainDeployerTest { public CycleCheckCompleteTestCase(String name) { super(name); } public static Test suite() { return suite(CycleCheckCompleteTestCase.class); } public void testOtherAsCause() throws Exception { DeployerClient main = getMainDeployer(); Deployment dA = createSimpleDeployment("A"); addAttachment(dA, "xB", true); addAttachment(dA, "xC", false); Deployment dB = createSimpleDeployment("B"); addAttachment(dB, "xA", true); addAttachment(dB, "xC", false); addAttachment(dB, "xD", false); Deployment dC = createSimpleDeployment("C"); addAttachment(dC, null, true); Deployment dD = createSimpleDeployment("D"); addAttachment(dD, null, true); try { main.deploy(dA, dB, dC, dD); fail("Should not be here."); } catch (DeploymentException e) { IncompleteDeploymentException ide = assertInstanceOf(e, IncompleteDeploymentException.class); ide.printStackTrace(); IncompleteDeployments id = ide.getIncompleteDeployments(); assertNotNull(id); assertEmpty(id.getDeploymentsInError()); assertEmpty(id.getDeploymentsMissingDeployer()); assertEmpty(id.getContextsInError()); Map> map = id.getContextsMissingDependencies(); assertNotNull(map); assertEquals(new HashSet(Arrays.asList("xA", "xB")), map.keySet()); String inErrorInfo = id.getContextsInErrorInfo(); assertNotNull(inErrorInfo); assertTrue(inErrorInfo.contains("xA")); assertTrue(inErrorInfo.contains("xB")); assertFalse(inErrorInfo.contains("xC")); assertFalse(inErrorInfo.contains("xD")); } } protected void assertEmpty(Map map) { assertNotNull(map); assertEmpty(map.keySet()); } protected DeployerClient getMainDeployer() { MainDeployerImpl main = new MainDeployerImpl(); main.setStructuralDeployers(createStructuralDeployers()); AbstractController controller = new AbstractController(); DeployersImpl deployers = new DeployersImpl(controller); deployers.setMgtObjectCreator(new DefaultManagedObjectCreator()); deployers.addDeployer(new TestAttachmentsDeployer()); deployers.addDeployer(new OrderedTestAttachmentDeployer(controller)); main.setDeployers(deployers); return main; } protected void addAttachment(Deployment deployment, Object dependency, boolean install) { MutableAttachments mutableAttachments = (MutableAttachments)deployment.getPredeterminedManagedObjects(); TestAttachments testAttachments = mutableAttachments.getAttachment(TestAttachments.class); if (testAttachments == null) { testAttachments = new TestAttachments(); mutableAttachments.addAttachment(TestAttachments.class, testAttachments); } TestAttachment testAttachment = new TestAttachment("x" + deployment.getName(), dependency, install); testAttachments.addAttachment(testAttachment); } }././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/test/DeployerIncompleteDeploymentsTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/tes0000644000175000017500000000727710720311772033441 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.test; import java.util.Map; import java.util.HashMap; import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.Collections; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.deployers.client.spi.IncompleteDeployments; import org.jboss.deployers.client.spi.MissingDependency; import junit.framework.Test; /** * Incomplete deployments API test case. * * @author Ales Justin */ public class DeployerIncompleteDeploymentsTestCase extends AbstractDeployerTest { public DeployerIncompleteDeploymentsTestCase(String name) { super(name); } public static Test suite() { return suite(DeployerIncompleteDeploymentsTestCase.class); } public void testMessage() throws Exception { Map deploymentsInError = new HashMap(); Collection deploymentsMissingDeployer = new HashSet(); Map contextsInError = new HashMap(); Map> contextsMissingDependencies = new HashMap>(); deploymentsInError.put("deployment1", new Throwable("sd1")); deploymentsMissingDeployer.add("deployment2"); contextsInError.put("context1", new Throwable("sc1")); contextsMissingDependencies.put("context2", Collections.singleton(new MissingDependency())); IncompleteDeployments deployments = new IncompleteDeployments( deploymentsInError, deploymentsMissingDeployer, contextsInError, contextsMissingDependencies ); assertTrue(deployments.isIncomplete()); assertTrue(deployments.isInvalidDeployment("deployment1")); assertTrue(deployments.isInvalidDeployment("deployment2")); assertTrue(deployments.isInvalidContext("context1")); assertTrue(deployments.isInvalidContext("context2")); String deInfo = deployments.getDeploymentsInErrorInfo(); assertNotNull(deInfo); assertSame(deInfo, deployments.getDeploymentsInErrorInfo()); String dmInfo = deployments.getDeploymentsMissingDeployerInfo(); assertNotNull(dmInfo); assertSame(dmInfo, deployments.getDeploymentsMissingDeployerInfo()); String ceInfo = deployments.getContextsInErrorInfo(); assertNotNull(ceInfo); assertSame(ceInfo, deployments.getContextsInErrorInfo()); String cmInfo = deployments.getContextsMissingDependenciesInfo(); assertNotNull(cmInfo); assertSame(cmInfo, deployments.getContextsMissingDependenciesInfo()); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/test/AbstractMainDeployerTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/tes0000644000175000017500000000416710720572132033433 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.test; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.main.support.TestSimpleDeployer; /** * Abstract main deployer test. * * @author Ales Justin */ public abstract class AbstractMainDeployerTest extends AbstractDeployerTest { protected TestSimpleDeployer deployer = new TestSimpleDeployer(1); protected AbstractMainDeployerTest(String name) { super(name); } protected DeployerClient getMainDeployer() { return createMainDeployer(deployer); } protected static void makeFail(PredeterminedManagedObjectAttachments attachments, Deployer deployer) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment("fail", deployer); } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/test/DeployerChangeStageTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/tes0000644000175000017500000001350010761251333033424 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.test; import java.util.ArrayList; import java.util.List; import junit.framework.Test; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * DeployerChangeStageTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerChangeStageTestCase extends AbstractMainDeployerTest { public DeployerChangeStageTestCase(String name) { super(name); } public static Test suite() { return suite(DeployerChangeStageTestCase.class); } public void testMainDeployerInUnit() throws Throwable { DeployerClient main = getMainDeployer(); Deployment single = createSimpleDeployment("single"); main.deploy(single); List expected = new ArrayList(); expected.add(single.getName()); assertEquals(expected, deployer.getDeployedUnits()); DeploymentUnit unit = assertDeploymentUnit(main, single.getName()); assertEquals(main, unit.getMainDeployer()); main.undeploy(single); assertNull(unit.getMainDeployer()); } public void testChangeStage() throws Throwable { DeployerClient main = getMainDeployer(); Deployment single = createSimpleDeployment("single"); assertEquals(DeploymentStages.NOT_INSTALLED, main.getDeploymentStage(single.getName())); main.deploy(single); List expected = new ArrayList(); expected.add(single.getName()); assertEquals(expected, deployer.getDeployedUnits()); assertEquals(DeploymentStages.INSTALLED, main.getDeploymentStage(single.getName())); main.change(single.getName(), DeploymentStages.CLASSLOADER); assertEquals(expected, deployer.getUndeployedUnits()); assertEquals(DeploymentStages.CLASSLOADER, main.getDeploymentStage(single.getName())); main.undeploy(single); assertEquals(DeploymentStages.NOT_INSTALLED, main.getDeploymentStage(single.getName())); assertEquals(expected, deployer.getDeployedUnits()); assertEquals(expected, deployer.getUndeployedUnits()); try { main.change(single.getName(), DeploymentStages.REAL); fail("Should not be here"); } catch (Throwable t) { checkThrowable(DeploymentException.class, t); } deployer.clear(); assertEquals(DeploymentStages.NOT_INSTALLED, main.getDeploymentStage(single.getName())); main.deploy(single); assertEquals(expected, deployer.getDeployedUnits()); assertEquals(DeploymentStages.INSTALLED, main.getDeploymentStage(single.getName())); main.change(single.getName(), DeploymentStages.CLASSLOADER); assertEquals(DeploymentStages.CLASSLOADER, main.getDeploymentStage(single.getName())); deployer.clear(); main.change(single.getName(), DeploymentStages.REAL); assertEquals(expected, deployer.getDeployedUnits()); assertEquals(DeploymentStages.REAL, main.getDeploymentStage(single.getName())); } public void testChangeStageFail() throws Throwable { DeployerClient main = getMainDeployer(); Deployment single = createSimpleDeployment("single"); assertEquals(DeploymentStages.NOT_INSTALLED, main.getDeploymentStage(single.getName())); main.deploy(single); List expected = new ArrayList(); expected.add(single.getName()); assertEquals(expected, deployer.getDeployedUnits()); assertEquals(DeploymentStages.INSTALLED, main.getDeploymentStage(single.getName())); main.change(single.getName(), DeploymentStages.CLASSLOADER); assertEquals(DeploymentStages.CLASSLOADER, main.getDeploymentStage(single.getName())); DeploymentUnit unit = assertDeploymentUnit(main, single.getName()); DeploymentContext context = assertDeploymentContext(main, single.getName()); unit.addAttachment("fail", deployer); deployer.clear(); try { main.change(single.getName(), DeploymentStages.REAL); fail("Should not be here"); } catch (Throwable t) { checkThrowable(DeploymentException.class, t); } assertEquals(expected, deployer.getFailed()); assertEquals(DeploymentState.ERROR, context.getState()); checkThrowable(DeploymentException.class, context.getProblem()); assertEquals(DeploymentStages.NOT_INSTALLED, main.getDeploymentStage(single.getName())); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/test/DeployerSingleDeploymentTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/tes0000644000175000017500000002401111022230536033414 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import junit.framework.Test; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.main.MainDeployer; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.StructuralDeployers; import org.jboss.deployers.structure.spi.StructureBuilder; import org.jboss.deployers.structure.spi.helpers.AbstractStructureBuilder; /** * Single deployment API test case. * * @author Ales Justin */ public class DeployerSingleDeploymentTestCase extends AbstractMainDeployerTest { public DeployerSingleDeploymentTestCase(String name) { super(name); } public static Test suite() { return suite(DeployerSingleDeploymentTestCase.class); } protected void checkFailedDeployOnStructure(DeployerClient mainDeployer, final int failed, int size) throws Throwable { final StructureBuilder builder = new AbstractStructureBuilder(); StructuralDeployers structuralDeployers = new StructuralDeployers() { public DeploymentContext determineStructure(Deployment deployment) throws DeploymentException { String name = deployment.getName(); if (name.endsWith("deployment" + failed)) throw new RuntimeException(String.valueOf(failed)); return builder.populateContext(deployment, StructureMetaDataFactory.createStructureMetaData()); } }; ((MainDeployerImpl)mainDeployer).setStructuralDeployers(structuralDeployers); Deployment[] deployments = new Deployment[size]; for(int i = 0; i < size; i++) deployments[i] = createSimpleDeployment("deployment" + i); try { mainDeployer.deploy(deployments); fail("Should not be here."); } catch (DeploymentException e) { Throwable cause = e.getCause(); assertNotNull(cause); String msg = cause.getMessage(); assertEquals(failed, Integer.parseInt(msg)); } deployer.clear(); } public void testFailedDeployOnStructure() throws Throwable { DeployerClient main = getMainDeployer(); checkFailedDeployOnStructure(main, 0, 3); checkFailedDeployOnStructure(main, 1, 3); checkFailedDeployOnStructure(main, 2, 3); } protected void checkFailedDeploy(DeployerClient mainDeployer, int failed, int size) throws Throwable { Deployment[] deployments = new Deployment[size]; for(int i = 0; i < size; i++) { deployments[i] = createSimpleDeployment("deployment" + i); if (i == failed) makeFail(deployments[i], deployer); } try { mainDeployer.deploy(deployments); fail("Should not be here."); } catch (DeploymentException e) { assertEquals(size, deployer.getUndeployedUnits().size() + deployer.getFailed().size()); assertEquals(Collections.singletonList("deployment" + failed), deployer.getFailed()); } deployer.clear(); } public void testFailedDeploy() throws Throwable { DeployerClient main = getMainDeployer(); checkFailedDeploy(main, 0, 3); checkFailedDeploy(main, 1, 3); checkFailedDeploy(main, 2, 3); } public void testRedeploy() throws Throwable { DeployerClient main = getMainDeployer(); Deployment context = createSimpleDeployment("redeploy"); main.deploy(context); List expected = new ArrayList(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); main.undeploy(context); assertEquals(expected, deployer.getUndeployedUnits()); deployer.clear(); main.deploy(context); expected.clear(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); } public void testDeployRemoveProcess() throws Throwable { DeployerClient main = getMainDeployer(); Deployment context = createSimpleDeployment("drp"); main.deploy(context); List expected = new ArrayList(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); main.removeDeployment(context); main.process(); assertEquals(expected, deployer.getUndeployedUnits()); } public void testAddProcessUndeploy() throws Throwable { DeployerClient main = getMainDeployer(); Deployment context = createSimpleDeployment("apu"); main.addDeployment(context); main.process(); List expected = new ArrayList(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); main.undeploy(context); assertEquals(expected, deployer.getUndeployedUnits()); } public void testDeployShutdown() throws Throwable { MainDeployer main = (MainDeployer)getMainDeployer(); Deployment context = createSimpleDeployment("shutdown"); main.deploy(context); List expected = new ArrayList(); expected.add(context.getName()); assertEquals(expected, deployer.getDeployedUnits()); main.shutdown(); assertEquals(expected, deployer.getUndeployedUnits()); } public void testSingleAndMultipleMix() throws Throwable { DeployerClient main = getMainDeployer(); Deployment single = createSimpleDeployment("single"); main.deploy(single); List expected = new ArrayList(); expected.add(single.getName()); assertEquals(expected, deployer.getDeployedUnits()); Deployment normal = createSimpleDeployment("normal"); main.addDeployment(normal); main.process(); expected.add(normal.getName()); assertEquals(expected, deployer.getDeployedUnits()); main.undeploy(single); expected.clear(); expected.add(single.getName()); assertEquals(expected, deployer.getUndeployedUnits()); main.removeDeployment(normal.getName()); main.process(); expected.add(normal.getName()); assertEquals(expected, deployer.getUndeployedUnits()); } public void testSingleAndMultipleMix2() throws Throwable { DeployerClient main = getMainDeployer(); Deployment single = createSimpleDeployment("single"); main.deploy(single); List expected = new ArrayList(); expected.add(single.getName()); assertEquals(expected, deployer.getDeployedUnits()); Deployment normal = createSimpleDeployment("normal"); main.addDeployment(normal); main.process(); expected.add(normal.getName()); assertEquals(expected, deployer.getDeployedUnits()); main.removeDeployment(normal.getName()); main.process(); expected.clear(); expected.add(normal.getName()); assertEquals(expected, deployer.getUndeployedUnits()); main.undeploy(single); expected.add(single.getName()); assertEquals(expected, deployer.getUndeployedUnits()); } /* public void testMultiThreads() throws Exception { DeployerClient main = getMainDeployer(); int n = 30; DeployerTestRunnable[] runnables = new DeployerTestRunnable[n]; for(int i = 0; i < n; i++) { if (i % 3 == 0) runnables[i] = new DeployUndeployRunnable(main, createSimpleDeployment("deployundeploy" + i)); else if (i % 3 == 1) runnables[i] = new AddProcessRemoveProcessRunnable(main, createSimpleDeployment("aprp" + i)); else runnables[i] = new FailedDeployUndeployRunnable(main, createSimpleDeployment("failed" + i), deployer); } Thread[] threads = new Thread[n]; for(int i = 0; i < n; i++) { threads[i] = new Thread(runnables[i]); threads[i].start(); } for(int i = 0; i < n; i++) { threads[i].join(); } int failed = -1; for(int i = 0; i < n; i++) { boolean valid = runnables[i].isValid(); if (valid == false && failed < 0) failed = i; } if (failed >= 0) { StringBuilder builder = new StringBuilder(); builder.append("Failure cause: ").append(runnables[failed]).append("\n\n"); for (int i = 0; i < n; i++) { if (i != failed) { builder.append(i).append(". --> ").append(runnables[i]).append("\n"); } } fail(builder.toString()); } } */ } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/DeployersMainTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/Dep0000644000175000017500000000406410774720073033354 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.main.test.DeployerCheckCompleteTestCase; import org.jboss.test.deployers.main.test.DeployerSingleDeploymentTestCase; import org.jboss.test.deployers.main.test.DeployerIncompleteDeploymentsTestCase; import org.jboss.test.deployers.main.test.CycleCheckCompleteTestCase; /** * Deployers Main Test Suite. * * @author Ales Justin */ public class DeployersMainTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers Main Tests"); suite.addTest(DeployerSingleDeploymentTestCase.suite()); suite.addTest(DeployerCheckCompleteTestCase.suite()); suite.addTest(DeployerIncompleteDeploymentsTestCase.suite()); suite.addTest(CycleCheckCompleteTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000755000175000017500000000000011620060462033433 5ustar twernertwerner././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/OrderedControllerContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000455210774720073033455 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Set; import org.jboss.dependency.plugins.AbstractControllerContext; import org.jboss.dependency.spi.ControllerContextActions; import org.jboss.dependency.spi.DependencyInfo; /** * @author Ales Justin */ public class OrderedControllerContext extends AbstractControllerContext { private DependencyInfo orderedDependencyInfo = new OrderedDependencyInfo(); public OrderedControllerContext(Object name, ControllerContextActions actions) { super(name, actions); } public OrderedControllerContext(Object name, ControllerContextActions actions, DependencyInfo dependencies) { super(name, actions, dependencies); } public OrderedControllerContext(Object name, ControllerContextActions actions, DependencyInfo dependencies, Object target) { super(name, actions, dependencies, target); } public OrderedControllerContext(Object name, Set aliases, ControllerContextActions actions, DependencyInfo dependencies, Object target) { super(name, aliases, actions, dependencies, target); } public OrderedControllerContext(Object name, Object target) { super(name, target); } public DependencyInfo getDependencyInfo() { return orderedDependencyInfo; } }././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/AddProcessRemoveProcessRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000326610721004202033433 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; /** * @author Ales Justin */ public class AddProcessRemoveProcessRunnable extends DeployerTestRunnable { public AddProcessRemoveProcessRunnable(DeployerClient main, Deployment deployment) { super(main, deployment); } protected void internalRun() throws Throwable { main.addDeployment(deployment); main.process(); main.checkComplete(deployment); Thread.sleep(100); main.removeDeployment(deployment); main.process(); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/AddDeploymentRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000313310721004202033424 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Random; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; /** * @author Ales Justin */ public class AddDeploymentRunnable extends DeployShutdownTestRunnable { public AddDeploymentRunnable(DeployerClient main, Deployment deployment) { super(main, deployment); } protected void internalRun() throws Throwable { Thread.sleep(new Random().nextInt(100)); main.addDeployment(deployment); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/TestAttachmentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000263110747357774033467 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.dependency.spi.Controller; /** * Test attachments deployer. * * @author Ales Justin */ public class TestAttachmentDeployer extends AbstractTestAttachmentDeployer { public TestAttachmentDeployer(Controller controller) { super(controller); setComponentsOnly(true); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/ProcessRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000316510721006657033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Random; import org.jboss.deployers.client.spi.DeployerClient; /** * @author Ales Justin */ public class ProcessRunnable extends DeployShutdownTestRunnable { public ProcessRunnable(DeployerClient main) { super(main, null); } protected void internalRun() throws Throwable { Thread.sleep(new Random().nextInt(75)); main.process(); } public boolean isValid() { Throwable p = getProblem(); return p == null || main.getTopLevel().isEmpty(); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/TestAttachmentsDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000714610747357774033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractComponentDeployer; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Test attachments deployer. * * @author Ales Justin */ public class TestAttachmentsDeployer extends AbstractComponentDeployer { public TestAttachmentsDeployer() { setDeploymentVisitor(new TestAttachmentsVisitor()); setComponentVisitor(new TesAttachmentVisitor()); } protected static void addTestComponent(DeploymentUnit unit, TestAttachment bean) { DeploymentUnit component = unit.addComponent(bean.getName().toString()); component.addAttachment(TestAttachment.class.getName(), bean); } protected static void removeTestComponent(DeploymentUnit unit, TestAttachment bean) { unit.removeComponent(bean.getName().toString()); } /** * TestAttachmentsVisitor. */ public static class TestAttachmentsVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestAttachments.class; } public void deploy(DeploymentUnit unit, TestAttachments deployment) throws DeploymentException { List beans = deployment.getAttachments(); if (beans != null && beans.isEmpty() == false) { for (TestAttachment bean : beans) addTestComponent(unit, bean); } } public void undeploy(DeploymentUnit unit, TestAttachments deployment) { List beans = deployment.getAttachments(); if (beans != null && beans.isEmpty() == false) { for (TestAttachment bean : beans) removeTestComponent(unit, bean); } } } /** * TestAttachmentVisitor. */ public static class TesAttachmentVisitor implements DeploymentVisitor { public Class getVisitorType() { return TestAttachment.class; } public void deploy(DeploymentUnit unit, TestAttachment deployment) throws DeploymentException { addTestComponent(unit, deployment); } public void undeploy(DeploymentUnit unit, TestAttachment deployment) { removeTestComponent(unit, deployment); } } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/TestSimpleDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000632211046542655033453 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestSimpleDeployer. * * @author Adrian Brock * @author Ales Justin */ public class TestSimpleDeployer extends AbstractRealDeployer { private List deployed = new CopyOnWriteArrayList(); private List undeployed = new CopyOnWriteArrayList(); private List failed = new CopyOnWriteArrayList(); private String name; public TestSimpleDeployer() { this(Integer.MAX_VALUE); name = super.toString(); } public TestSimpleDeployer(String name) { this(Integer.MAX_VALUE); this.name = name; } public TestSimpleDeployer(int relativeOrder) { setRelativeOrder(relativeOrder); name = "TestSimpleDeployer" + relativeOrder; } public TestSimpleDeployer(DeploymentStage stage) { setStage(stage); name = super.toString(); } public String toString() { return name; } public void clear() { deployed.clear(); undeployed.clear(); failed.clear(); } public List getDeployedUnits() { return deployed; } public List getUndeployedUnits() { return undeployed; } public List getFailed() { return failed; } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { log.debug(this + " deploy : " + unit.getName()); deployed.add(unit.getName()); if (this.equals(unit.getAttachment("fail"))) { failed.add(unit.getName()); throw new DeploymentException("Asked to fail"); } } public void internalUndeploy(DeploymentUnit unit) { log.debug(this + " undeploy: " + unit.getName()); undeployed.add(unit.getName()); } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/DeployerTestRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000415710721004202033433 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; /** * @author Ales Justin */ public abstract class DeployerTestRunnable implements Runnable { protected DeployerClient main; protected Deployment deployment; private Throwable problem; protected DeployerTestRunnable(DeployerClient main, Deployment deployment) { this.main = main; this.deployment = deployment; } public void run() { try { internalRun(); } catch (Throwable t) { setProblem(t); } } protected abstract void internalRun() throws Throwable; public boolean isValid() { return (problem == null); } public Throwable getProblem() { return problem; } public void setProblem(Throwable problem) { this.problem = problem; } public String toString() { return getClass().getSimpleName() + ": " + deployment + "/" + problem; } } ././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/AbstractTestAttachmentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000001031710774720073033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.dependency.plugins.AbstractControllerContext; import org.jboss.dependency.plugins.AbstractDependencyItem; import org.jboss.dependency.spi.Controller; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerContextActions; import org.jboss.dependency.spi.ControllerState; import org.jboss.dependency.spi.DependencyInfo; import org.jboss.dependency.spi.DependencyItem; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Test attachments deployer. * * @author Ales Justin */ public abstract class AbstractTestAttachmentDeployer extends AbstractRealDeployer { private Controller controller; private ControllerContextActions actions = new TestControllerContextActions(); protected AbstractTestAttachmentDeployer(Controller controller) { this.controller = controller; setInput(TestAttachment.class); setUseUnitName(true); } protected void internalDeploy(DeploymentUnit unit) throws DeploymentException { TestAttachment attachment = unit.getAttachment(TestAttachment.class); if (attachment != null) { Object name = attachment.getName(); ControllerContext context = controller.getContext(name, null); if (context == null) context = createControllerContext(name, actions); DependencyInfo dependencyInfo = context.getDependencyInfo(); Object dependency = attachment.getDependency(); if (dependency != null) { DependencyItem item = createDependencyItem(name, dependency); dependencyInfo.addIDependOn(item); } try { if (attachment.isInstall()) controller.install(context); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Unexpected.", t); } } } protected void internalUndeploy(DeploymentUnit unit) { TestAttachment attachment = unit.getAttachment(TestAttachment.class); if (attachment != null) { if (attachment.isInstall()) controller.uninstall(attachment.getName()); } } protected ControllerContext createControllerContext(Object name, ControllerContextActions actions) { return new AbstractControllerContext(name, actions); } protected DependencyItem createDependencyItem(Object name, Object dependency) { return new AbstractDependencyItem(name, dependency, ControllerState.INSTALLED, null); } private class TestControllerContextActions implements ControllerContextActions { public void install(ControllerContext context, ControllerState fromState, ControllerState toState) throws Throwable { context.setState(toState); } public void uninstall(ControllerContext context, ControllerState fromState, ControllerState toState) { context.setState(toState); } } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/OrderedDependencyInfo.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000445210777100454033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import org.jboss.dependency.plugins.AbstractDependencyInfo; import org.jboss.dependency.spi.ControllerState; import org.jboss.dependency.spi.DependencyItem; /** * @author Ales Justin */ public class OrderedDependencyInfo extends AbstractDependencyInfo { private Set items = new LinkedHashSet(); public void addIDependOn(DependencyItem dependency) { super.addIDependOn(dependency); items.add(dependency); } public void removeIDependOn(DependencyItem dependency) { super.removeIDependOn(dependency); items.remove(dependency); } public Set getUnresolvedDependencies(ControllerState state) { if (items.isEmpty()) return Collections.emptySet(); Set result = new HashSet(); if (items.isEmpty() == false) { for (DependencyItem item : items) { if (state == null || state.equals(item.getWhenRequired())) result.add(item); } } return result; } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/DeployRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000310610721004202033424 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Random; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; /** * @author Ales Justin */ public class DeployRunnable extends DeployShutdownTestRunnable { public DeployRunnable(DeployerClient main, Deployment deployment) { super(main, deployment); } protected void internalRun() throws Throwable { Thread.sleep(new Random().nextInt(100)); main.deploy(deployment); } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/UndeployRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000311410721004202033423 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Random; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; /** * @author Ales Justin */ public class UndeployRunnable extends DeployShutdownTestRunnable { public UndeployRunnable(DeployerClient main, Deployment deployment) { super(main, deployment); } protected void internalRun() throws Throwable { Thread.sleep(new Random().nextInt(100)); main.undeploy(deployment); } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/TestDemandDependencyItem.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000556110774720073033456 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.dependency.plugins.AbstractDependencyItem; import org.jboss.dependency.spi.Controller; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerState; import org.jboss.util.JBossStringBuilder; /** * @author Ales Justin */ public class TestDemandDependencyItem extends AbstractDependencyItem { private Object demand; public TestDemandDependencyItem(Object name) { this(name, null); } public TestDemandDependencyItem(Object name, Object demand) { super(name, demand, ControllerState.INSTALLED, null); } public Object getDemand() { return demand; } public void setDemand(Object demand) { this.demand = demand; } public boolean resolve(Controller controller) { Object name = getDemand(); ControllerContext context = controller.getInstalledContext(name); if (context != null) { setIDependOn(context.getName()); addDependsOnMe(controller, context); setResolved(true); } else { setResolved(false); } return isResolved(); } @Override public void unresolved() { setIDependOn(null); setResolved(false); } public void toString(JBossStringBuilder buffer) { super.toString(buffer); buffer.append(" demand=").append(getDemand()); } public void toShortString(JBossStringBuilder buffer) { buffer.append(getName()).append(" demands ").append(getDemand()); } @Override public String toHumanReadableString() { StringBuilder builder = new StringBuilder(); builder.append("Demands '").append(getDemand()).append("'"); return builder.toString(); } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/FailedDeployUndeployRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000344110721004202033426 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.deployer.Deployer; /** * @author Ales Justin */ public class FailedDeployUndeployRunnable extends DeployUndeployRunnable { public FailedDeployUndeployRunnable(DeployerClient main, Deployment deployment, Deployer deployer) { super(main, deployment); MutableAttachments mutable = (MutableAttachments) deployment.getPredeterminedManagedObjects(); mutable.addAttachment("fail", deployer); } public boolean isValid() { return super.isValid() == false; } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/OrderedTestAttachmentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000401010774720073033442 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.dependency.spi.Controller; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerContextActions; import org.jboss.dependency.spi.DependencyItem; /** * Test attachments deployer. * * @author Ales Justin */ public class OrderedTestAttachmentDeployer extends TestAttachmentDeployer { public OrderedTestAttachmentDeployer(Controller controller) { super(controller); } protected ControllerContext createControllerContext(Object name, ControllerContextActions actions) { return new OrderedControllerContext(name, actions); } protected DependencyItem createDependencyItem(Object name, Object dependency) { TestDemandDependencyItem item = new TestDemandDependencyItem(name); // TestDemandDependencyItem item = new TestDemandDependencyItem(name, dependency); item.setDemand(dependency); return item; } }././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/ShutdownRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000314410721004202033426 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Random; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.main.MainDeployer; /** * @author Ales Justin */ public class ShutdownRunnable extends DeployerTestRunnable { public ShutdownRunnable(DeployerClient main) { super(main, null); } protected void internalRun() throws Throwable { Thread.sleep(new Random().nextInt(50)); MainDeployer mainDeployer = (MainDeployer)main; mainDeployer.shutdown(); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/DeployUndeployRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000310010721004202033416 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; /** * @author Ales Justin */ public class DeployUndeployRunnable extends DeployerTestRunnable { public DeployUndeployRunnable(DeployerClient main, Deployment deployment) { super(main, deployment); } protected void internalRun() throws Throwable { main.deploy(deployment); Thread.sleep(100); main.undeploy(deployment); } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/TestAttachment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000353710774720073033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.io.Serializable; /** * @author Ales Justin */ public class TestAttachment implements Serializable { private static final long serialVersionUID = -1034970512310610762L; private Object name; private Object dependency; private boolean install; public TestAttachment(Object name, Object dependency) { this(name, dependency, true); } public TestAttachment(Object name, Object dependency, boolean install) { this.name = name; this.dependency = dependency; this.install = install; } public Object getName() { return name; } public Object getDependency() { return dependency; } public boolean isInstall() { return install; } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/TestAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000320110747357774033461 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * Test attachments. * * @author Ales Justin */ public class TestAttachments implements Serializable { private static final long serialVersionUID = -1034970512310610762L; private List attachments = new ArrayList(); public void addAttachment(TestAttachment attachment) { attachments.add(attachment); } public List getAttachments() { return attachments; } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/DependencyDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000352110747357774033466 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import org.jboss.dependency.spi.Controller; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Dependency test deployer. * * @author Ales Justin */ public class DependencyDeployer extends AbstractTestAttachmentDeployer { public DependencyDeployer(Controller controller) { super(controller); setUseUnitName(true); } protected boolean isControllerContextNameCandidate(DeploymentUnit unit) { return true; } protected void addControllerContextName(DeploymentUnit unit) { unit.addControllerContextName("x" + unit.getName()); } protected void removeControllerContextName(DeploymentUnit unit) { unit.removeControllerContextName("x" + unit.getName()); } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/TestDeployment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000363210721004202033430 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Set; import org.jboss.deployers.client.plugins.deployment.AbstractDeployment; /** * @author Ales Justin */ public class TestDeployment extends AbstractDeployment { private String avoidNameHitName; private Set names; public TestDeployment() { } public TestDeployment(String name) { super(name); avoidNameHitName = name; } public TestDeployment(String name, Set names) { this(name); this.names = names; } public String getAvoidNameHitName() { return avoidNameHitName; } public String getName() { String name = super.getName(); if (names != null) names.add(name); return name; } public Set getNames() { return names; } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/support/DeployShutdownTestRunnable.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/main/sup0000644000175000017500000000360410721004202033427 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.main.support; import java.util.Set; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; /** * @author Ales Justin */ public abstract class DeployShutdownTestRunnable extends DeployerTestRunnable { protected DeployShutdownTestRunnable(DeployerClient main, Deployment deployment) { super(main, deployment); } public boolean isValid() { if (deployment instanceof TestDeployment == false) throw new IllegalArgumentException("Deployment should be test deployment."); TestDeployment testDeployment = (TestDeployment)deployment; String name = testDeployment.getAvoidNameHitName(); Set names = testDeployment.getNames(); return (super.isValid() ^ names.contains(name)) == false; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000755000175000017500000000000011620060460033477 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000755000175000017500000000000011620060460033477 5ustar twernertwerner././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/test/MockClassLoaderDependenciesUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000002044411005561055033510 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.classloading.support.a.A; import org.jboss.test.deployers.classloading.support.b.B; /** * MockClassLoaderDependenciesUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class MockClassLoaderDependenciesUnitTestCase extends ClassLoaderDependenciesTest { public static Test suite() { return new TestSuite(MockClassLoaderDependenciesUnitTestCase.class); } public MockClassLoaderDependenciesUnitTestCase(String name) { super(name); } public void testSimpleClassLoader() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment(NameA); addClassLoadingMetaData(deployment, deployment.getName(), null, A.class); DeploymentUnit unit = assertDeploy(deployer, deployment); assertEquals(A, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader cl = unit.getClassLoader(); assertLoadClass(cl, A.class); assertUndeploy(deployer, deployment); assertLoadClass(cl, A.class); assertEquals(A, deployer2.deployed); assertEquals(A, deployer2.undeployed); } public void testADependsUponModuleBCorrectWay() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deploymentB = createSimpleDeployment(NameB); addClassLoadingMetaData(deploymentB, deploymentB.getName(), null, B.class); DeploymentUnit unitB = assertDeploy(deployer, deploymentB); ClassLoader clB = unitB.getClassLoader(); assertLoadClass(clB, B.class); assertEquals(B, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); Deployment deploymentA = createSimpleDeployment(NameA); ClassLoadingMetaData classLoadingMetaData = addClassLoadingMetaData(deploymentA, deploymentA.getName(), null, A.class); addRequireModule(classLoadingMetaData, "B", null); DeploymentUnit unitA = assertDeploy(deployer, deploymentA); ClassLoader clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertUndeploy(deployer, deploymentA); assertLoadClassIllegal(clA, B.class); assertEquals(BA, deployer2.deployed); assertEquals(A, deployer2.undeployed); assertUndeploy(deployer, deploymentB); assertLoadClass(clB, B.class); assertEquals(BA, deployer2.deployed); assertEquals(AB, deployer2.undeployed); } public void testADependsUponModuleBWrongWay() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deploymentA = createSimpleDeployment(NameA); ClassLoadingMetaData classLoaderMetaData = addClassLoadingMetaData(deploymentA, deploymentA.getName(), null, A.class); addRequireModule(classLoaderMetaData, "B", null); DeploymentUnit unitA = addDeployment(deployer, deploymentA); assertNoClassLoader(unitA); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); Deployment deploymentB = createSimpleDeployment(NameB); addClassLoadingMetaData(deploymentB, deploymentB.getName(), null, B.class); DeploymentUnit unitB = assertDeploy(deployer, deploymentB); ClassLoader clB = unitB.getClassLoader(); assertLoadClass(clB, B.class); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); assertUndeploy(deployer, deploymentA); assertLoadClassIllegal(clA, B.class); assertEquals(BA, deployer2.deployed); assertEquals(A, deployer2.undeployed); assertUndeploy(deployer, deploymentB); assertLoadClass(clB, B.class); assertEquals(BA, deployer2.deployed); assertEquals(AB, deployer2.undeployed); } public void testADependsUponModuleBRedeployA() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deploymentA = createSimpleDeployment(NameA); ClassLoadingMetaData classLoaderMetaData = addClassLoadingMetaData(deploymentA, deploymentA.getName(), null, A.class); addRequireModule(classLoaderMetaData, "B", null); DeploymentUnit unitA = addDeployment(deployer, deploymentA); assertNoClassLoader(unitA); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); Deployment deploymentB = createSimpleDeployment(NameB); addClassLoadingMetaData(deploymentB, deploymentB.getName(), null, B.class); DeploymentUnit unitB = assertDeploy(deployer, deploymentB); ClassLoader clB = unitB.getClassLoader(); assertLoadClass(clB, B.class); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); assertUndeploy(deployer, deploymentA); assertLoadClassIllegal(clA, B.class); assertEquals(BA, deployer2.deployed); assertEquals(A, deployer2.undeployed); unitA = assertDeploy(deployer, deploymentA); clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); assertEquals(BAA, deployer2.deployed); assertEquals(A, deployer2.undeployed); } public void testADependsUponModuleBRedeployB() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deploymentA = createSimpleDeployment(NameA); ClassLoadingMetaData classLoaderMetaData = addClassLoadingMetaData(deploymentA, deploymentA.getName(), null, A.class); addRequireModule(classLoaderMetaData, "B", null); DeploymentUnit unitA = addDeployment(deployer, deploymentA); assertNoClassLoader(unitA); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); Deployment deploymentB = createSimpleDeployment(NameB); addClassLoadingMetaData(deploymentB, deploymentB.getName(), null, B.class); DeploymentUnit unitB = assertDeploy(deployer, deploymentB); ClassLoader clB = unitB.getClassLoader(); assertLoadClass(clB, B.class); assertEquals(BA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); enableTrace("org.jboss.deployers"); enableTrace("org.jboss.dependency"); assertUndeploy(deployer, deploymentB); assertLoadClassIllegal(clA, B.class); assertEquals(BA, deployer2.deployed); assertEquals(AB, deployer2.undeployed); unitB = assertDeploy(deployer, deploymentB); clA = unitA.getClassLoader(); clB = unitB.getClassLoader(); assertLoadClass(clA, B.class, clB); assertEquals(BABA, deployer2.deployed); assertEquals(AB, deployer2.undeployed); } } ././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/test/SubDeploymentMockClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000002671111017542646033523 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.test; import java.util.Arrays; import java.util.List; import junit.framework.AssertionFailedError; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.classloading.support.a.A; import org.jboss.test.deployers.classloading.support.b.B; /** * SubDeploymentMockClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class SubDeploymentMockClassLoaderUnitTestCase extends ClassLoaderDependenciesTest { public static Test suite() { return new TestSuite(SubDeploymentMockClassLoaderUnitTestCase.class); } public SubDeploymentMockClassLoaderUnitTestCase(String name) { super(name); } public void testNoSubDeploymentClassLoader() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("top"); addClassLoadingMetaData(deployment, "top", null, A.class); addChild(deployment, "sub"); DeploymentUnit unit = assertDeploy(deployer, deployment); assertNoDomain("top/sub"); ClassLoader cl = unit.getClassLoader(); assertLoadClass(cl, A.class); DeploymentUnit subDeployment = assertChild(unit, "top/sub"); ClassLoader clSub = subDeployment.getClassLoader(); assertEquals(cl, clSub); assertLoadClass(clSub, A.class, cl); assertUndeploy(deployer, deployment); assertNoDomain("top/sub"); } public void testSubDeploymentClassLoaderSynthetic() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("top"); addClassLoadingMetaData(deployment, "top", null, A.class); ContextInfo sub = addChild(deployment, "sub"); addClassLoadingMetaData(sub, "top/sub", null, A.class, B.class); DeploymentUnit unit = assertDeploy(deployer, deployment); assertDomain("top/sub"); assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader cl = unit.getClassLoader(); assertLoadClass(cl, A.class); assertLoadClassFail(cl, B.class); DeploymentUnit subDeployment = assertChild(unit, "top/sub"); ClassLoader clSub = subDeployment.getClassLoader(); assertLoadClass(clSub, A.class, cl); assertLoadClass(clSub, B.class); assertUndeploy(deployer, deployment); assertNoDomain("top/sub"); assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed); assertEquals(Arrays.asList("top/sub", "top"), deployer2.undeployed); } public void testSubDeploymentClassLoaderSpecifiedDefaultDomain() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("top"); ClassLoadingMetaData top = addClassLoadingMetaData(deployment, "top", null, A.class); top.setImportAll(true); ContextInfo sub = addChild(deployment, "sub"); ClassLoadingMetaData topSub = addClassLoadingMetaData(sub, "top/sub", null, false, B.class); topSub.setDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME); topSub.setParentDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME); topSub.setImportAll(true); DeploymentUnit unit = assertDeploy(deployer, deployment); assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader cl = unit.getClassLoader(); DeploymentUnit subDeployment = assertChild(unit, "top/sub"); ClassLoader clSub = subDeployment.getClassLoader(); assertLoadClass(cl, A.class); assertLoadClass(cl, B.class, clSub); assertLoadClass(clSub, A.class, cl); assertLoadClass(clSub, B.class); assertUndeploy(deployer, deployment); assertNoDomain("top/sub"); assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed); assertEquals(Arrays.asList("top/sub", "top"), deployer2.undeployed); } public void testSubDeploymentClassLoaderSpecifiedOtherDomain() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("top"); ClassLoadingMetaData top = addClassLoadingMetaData(deployment, "top", null, A.class); top.setImportAll(true); ContextInfo sub = addChild(deployment, "sub"); ClassLoadingMetaData topSub = addClassLoadingMetaData(sub, "top/sub", null, false, B.class); topSub.setDomain("TestDomain"); topSub.setParentDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME); topSub.setImportAll(true); DeploymentUnit unit = assertDeploy(deployer, deployment); assertDomain("TestDomain"); assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader cl = unit.getClassLoader(); assertLoadClass(cl, A.class); assertLoadClassFail(cl, B.class); DeploymentUnit subDeployment = assertChild(unit, "top/sub"); ClassLoader clSub = subDeployment.getClassLoader(); assertLoadClass(clSub, A.class, cl); assertLoadClass(clSub, B.class); assertUndeploy(deployer, deployment); assertNoDomain("top/sub"); assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed); assertEquals(Arrays.asList("top/sub", "top"), deployer2.undeployed); } public void testMultipleSubDeploymentClassLoader() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("top"); addClassLoadingMetaData(deployment, "top", null, A.class); ContextInfo sub1 = addChild(deployment, "sub1"); addClassLoadingMetaData(sub1, "top/sub1", null, B.class); ContextInfo sub2 = addChild(deployment, "sub2"); addClassLoadingMetaData(sub2, "top/sub2", null, B.class); DeploymentUnit unit = assertDeploy(deployer, deployment); assertDomain("top/sub1"); assertDomain("top/sub2"); ClassLoader cl = unit.getClassLoader(); assertLoadClass(cl, A.class); assertLoadClassFail(cl, B.class); DeploymentUnit subDeployment1 = assertChild(unit, "top/sub1"); ClassLoader clSub1 = subDeployment1.getClassLoader(); assertLoadClass(clSub1, A.class, cl); Class bFrom1 = assertLoadClass(clSub1, B.class); DeploymentUnit subDeployment2 = assertChild(unit, "top/sub2"); ClassLoader clSub2 = subDeployment2.getClassLoader(); assertLoadClass(clSub2, A.class, cl); Class bFrom2 = assertLoadClass(clSub2, B.class); assertNotSame(clSub1, clSub2); assertNotSame(bFrom1, bFrom2); assertUndeploy(deployer, deployment); assertNoDomain("top/sub1"); assertNoDomain("top/sub2"); } public void testSubDeploymentClassLoaderParentLast() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("top"); addClassLoadingMetaData(deployment, "top", null, A.class); ContextInfo sub = addChild(deployment, "sub"); ClassLoadingMetaData clmd = addClassLoadingMetaData(sub, "top/sub", null, A.class, B.class); clmd.setJ2seClassLoadingCompliance(false); DeploymentUnit unit = assertDeploy(deployer, deployment); assertDomain("top/sub"); ClassLoader cl = unit.getClassLoader(); assertLoadClass(cl, A.class); assertLoadClassFail(cl, B.class); DeploymentUnit subDeployment = assertChild(unit, "top/sub"); ClassLoader clSub = subDeployment.getClassLoader(); assertLoadClass(clSub, A.class); assertLoadClass(clSub, B.class); assertUndeploy(deployer, deployment); assertNoDomain("top/sub"); assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed); assertEquals(Arrays.asList("top/sub", "top"), deployer2.undeployed); } public void testMultipleSubDeploymentClassLoaderSpecifiedDomain() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createSimpleDeployment("top"); addClassLoadingMetaData(deployment, "top", null); ContextInfo sub1 = addChild(deployment, "sub1"); ClassLoadingMetaData topSub1 = addClassLoadingMetaData(sub1, "top/sub1", null, A.class); topSub1.setDomain("TestDomain"); topSub1.setParentDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME); topSub1.setImportAll(true); ContextInfo sub2 = addChild(deployment, "sub2"); ClassLoadingMetaData topSub2 = addClassLoadingMetaData(sub2, "top/sub2", null, B.class); topSub2.setDomain("TestDomain"); topSub2.setParentDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME); topSub2.setImportAll(true); DeploymentUnit unit = assertDeploy(deployer, deployment); assertDomain("TestDomain"); ClassLoader cl = unit.getClassLoader(); assertLoadClassFail(cl, A.class); assertLoadClassFail(cl, B.class); DeploymentUnit subDeployment1 = assertChild(unit, "top/sub1"); ClassLoader clSub1 = subDeployment1.getClassLoader(); DeploymentUnit subDeployment2 = assertChild(unit, "top/sub2"); ClassLoader clSub2 = subDeployment2.getClassLoader(); Class aFrom1 = assertLoadClass(clSub1, A.class); Class bFrom1 = assertLoadClass(clSub1, B.class, clSub2); Class aFrom2 = assertLoadClass(clSub2, A.class, clSub1); Class bFrom2 = assertLoadClass(clSub2, B.class); assertNotSame(clSub1, clSub2); assertSame(aFrom1, aFrom2); assertSame(bFrom1, bFrom2); assertUndeploy(deployer, deployment); assertNoDomain("TopDomain"); } protected DeploymentUnit assertChild(DeploymentUnit parent, String name) { List children = parent.getChildren(); for (DeploymentUnit child : children) { if (name.equals(child.getSimpleName())) return child; } throw new AssertionFailedError("Child " + name + " not found in " + children); } } ././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/test/MockResourceVisitorDeployerUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000001054011005561055033504 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.test; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.classloader.plugins.ClassLoaderUtils; import org.jboss.classloading.spi.visitor.ResourceContext; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.visitor.ResourceVisitor; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.plugins.classloading.AbstractResourceVisitorDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.classloading.support.a.A; /** * MockResourceVisitorDeployerUnitTestCase. * * @author Ales Justin */ public class MockResourceVisitorDeployerUnitTestCase extends ClassLoaderDependenciesTest { private final Set resources = new HashSet(); private ResourceVisitor visitor = new ResourceVisitor() { public ResourceFilter getFilter() { return null; } public void visit(ResourceContext resource) { resources.add(resource.getResourceName()); } }; public static Test suite() { return new TestSuite(MockResourceVisitorDeployerUnitTestCase.class); } public MockResourceVisitorDeployerUnitTestCase(String name) { super(name); } public void testSimpleResourceVisitor() throws Exception { DeployerClient deployer = getMainDeployer(new AbstractResourceVisitorDeployer(visitor)); testResourceVisitor(deployer); } public void testCreateResourceVisitor() throws Exception { DeployerClient deployer = getMainDeployer(new AbstractResourceVisitorDeployer() { protected ResourceVisitor createVisitor(DeploymentUnit unit) { return visitor; } }); testResourceVisitor(deployer); } public void testResourceVisitorWithFilter() throws Exception { DeployerClient deployer = getMainDeployer(new AbstractResourceVisitorDeployer() { protected ResourceVisitor createVisitor(DeploymentUnit unit) { return visitor; } protected ResourceFilter createFilter(DeploymentUnit unit) { return new ResourceFilter() { public boolean accepts(ResourceContext resource) { return resource.getResourceName().equals(ClassLoaderUtils.packageNameToPath(A.class.getName())); } }; } }); testResourceVisitor(deployer); } protected void testResourceVisitor(DeployerClient deployer) throws Exception { Deployment deployment = createSimpleDeployment(NameA); addClassLoadingMetaData(deployment, deployment.getName(), null, A.class); DeploymentUnit unit = assertDeploy(deployer, deployment); try { assertEquals(A, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader cl = unit.getClassLoader(); assertLoadClass(cl, A.class); String expectedPath = ClassLoaderUtils.packageNameToPath(A.class.getName()); assertEquals(expectedPath, resources.iterator().next()); } finally { resources.clear(); assertUndeploy(deployer, deployment); } } }././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/test/UndeployOrderClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000000700210761233255033511 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.test; import junit.framework.Test; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.version.Version; import org.jboss.classloading.spi.version.VersionRange; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.IncompleteDeploymentException; import org.jboss.deployers.spi.DeploymentException; import org.jboss.test.deployers.classloading.support.a.A; import org.jboss.test.deployers.classloading.support.b.B; /** * Undeploy order test case. * * @author Ales Justin */ public class UndeployOrderClassLoaderUnitTestCase extends ClassLoaderDependenciesTest { public UndeployOrderClassLoaderUnitTestCase(String name) { super(name); } public static Test suite() { return suite(UndeployOrderClassLoaderUnitTestCase.class); } public void testUndeployOrder() throws Exception { DeployerClient mainDeployer = getMainDeployer(); Version v1 = Version.parseVersion("1"); Version v2 = Version.parseVersion("2"); Deployment ad = createSimpleDeployment("A"); addClassLoadingMetaData(ad, ad.getName(), v1, true, A.class); assertDeploy(mainDeployer, ad); Deployment bd = createSimpleDeployment("B"); addClassLoadingMetaData(bd, bd.getName(), v2, true, B.class); assertDeploy(mainDeployer, bd); mainDeployer.checkComplete(bd); Deployment cd = createSimpleDeployment("C"); ClassLoadingMetaData clmd = addClassLoadingMetaData(cd, cd.getName(), null); addRequirePackage(clmd, A.class, new VersionRange(v1, true, v2, true)); addRequirePackage(clmd, B.class, new VersionRange(v1, true, v2, true)); assertDeploy(mainDeployer, cd); mainDeployer.checkComplete(); mainDeployer.undeploy(bd); try { mainDeployer.checkComplete(); fail("Should not be here!"); } catch (DeploymentException e) { checkThrowable(IncompleteDeploymentException.class, e); } mainDeployer.undeploy(ad); try { mainDeployer.checkComplete(); fail("Should not be here!"); } catch (DeploymentException e) { checkThrowable(IncompleteDeploymentException.class, e); } mainDeployer.undeploy(cd); mainDeployer.checkComplete(); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/test/ModuleRemoveUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000001231411137607542033515 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.classloading.spi.version.Version; import org.jboss.dependency.spi.Controller; import org.jboss.dependency.spi.ControllerContext; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentUnit; import org.jboss.deployers.structure.spi.helpers.AbstractStructuralDeployers; import org.jboss.deployers.structure.spi.helpers.AbstractStructureBuilder; import org.jboss.test.deployers.classloading.support.a.A; /** * ModuleRemoveUnitTestCase. * * @author Ales Justin */ public class ModuleRemoveUnitTestCase extends ClassLoaderDependenciesTest { private Controller controller; public static Test suite() { return new TestSuite(ModuleRemoveUnitTestCase.class); } public ModuleRemoveUnitTestCase(String name) { super(name); } public void testAliasRemove() throws Exception { DeployerClient mainDeployer = getMainDeployer(); // change structure builder MainDeployerImpl mdi = assertInstanceOf(mainDeployer, MainDeployerImpl.class); AbstractStructuralDeployers ads = assertInstanceOf(mdi.getStructuralDeployers(), AbstractStructuralDeployers.class); ads.setStructureBuilder(new RenamingStructureBuilder()); Version v1 = Version.parseVersion("1"); Deployment ad = createSimpleDeployment("A"); addClassLoadingMetaData(ad, ad.getName(), v1, true, A.class); mainDeployer.deploy(ad); try { assertAlias(true, "A"); } finally { mainDeployer.undeploy(ad); assertAlias(false, "A"); } } public void testAliasRemoveOnChild() throws Exception { DeployerClient mainDeployer = getMainDeployer(); Version v1 = Version.parseVersion("1"); Deployment ad = createSimpleDeployment("A"); addClassLoadingMetaData(ad, ad.getName(), v1, true, A.class); Version v2 = Version.parseVersion("2"); ContextInfo childContextInfo = addChild(ad, "B"); addClassLoadingMetaData(childContextInfo, "B", v2, true, A.class); mainDeployer.deploy(ad); try { assertAlias(true, "A/B"); } finally { mainDeployer.undeploy(ad); assertAlias(false, "A/B"); } } protected void assertAlias(boolean exists, String name) throws Exception { // this is ugly impl detail String controllerId = controller.getClass().getSimpleName() + "[" + System.identityHashCode(controller) + "]"; ControllerContext alias = controller.getContext(name + "_Alias_" + controllerId, null); assertEquals(exists, alias != null); } private class RenamingStructureBuilder extends AbstractStructureBuilder { @Override protected DeploymentContext createRootDeploymentContext(Deployment deployment) throws Exception { return new RenamingDeploymentContext("NotA", ""); } } private class RenamingDeploymentContext extends AbstractDeploymentContext { public RenamingDeploymentContext() { } public RenamingDeploymentContext(String name, String relativePath) { super(name, relativePath); } @Override protected DeploymentUnit createDeploymentUnit() { return new RenamingDeploymentUnit(this); } } private class RenamingDeploymentUnit extends AbstractDeploymentUnit { public RenamingDeploymentUnit() { } private RenamingDeploymentUnit(DeploymentContext deploymentContext) { super(deploymentContext); } @Override public String getName() { return "A"; } } @Override protected Controller getController() { controller = super.getController(); return controller; } }././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/test/ClassLoaderDependenciesTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000002330311005561055033505 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem; import org.jboss.classloader.spi.ClassLoaderDomain; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ParentPolicy; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData; import org.jboss.classloading.spi.metadata.CapabilitiesMetaData; import org.jboss.classloading.spi.metadata.Capability; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory; import org.jboss.classloading.spi.metadata.Requirement; import org.jboss.classloading.spi.metadata.RequirementsMetaData; import org.jboss.classloading.spi.version.Version; import org.jboss.classloading.spi.version.VersionRange; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.plugins.classloading.AbstractClassLoaderDescribeDeployer; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.AbstractDeployerTest; import org.jboss.test.deployers.classloading.support.MockClassLoaderDescribeDeployer; import org.jboss.test.deployers.classloading.support.MockLevelClassLoaderSystemDeployer; /** * ClassLoaderDependenciesTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class ClassLoaderDependenciesTest extends AbstractDeployerTest { private static ClassLoadingMetaDataFactory classLoadingMetaDataFactory = ClassLoadingMetaDataFactory.getInstance(); private ClassLoaderSystem system; public static final String NameA = "A"; public static final String NameB = "B"; public static final List NONE = Collections.emptyList(); public static final List A = makeList(NameA); public static final List B = makeList(NameB); public static final List AB = makeList(NameA, NameB); public static final List BA = makeList(NameB, NameA); public static final List BAA = makeList(NameB, NameA, NameA); public static final List BABA = makeList(NameB, NameA, NameB, NameA); @SuppressWarnings("unchecked") protected static List makeList(T... objects) { List result = new ArrayList(); for (T object : objects) result.add(object); return result; } protected AbstractClassLoaderDescribeDeployer deployer1; protected MockLevelClassLoaderSystemDeployer deployer2; protected ClassLoaderDependenciesTest(String name) { super(name); } protected Class assertLoadClass(ClassLoader start, Class reference) throws Exception { return assertLoadClass(start, reference, start); } protected Class assertLoadClass(ClassLoader start, Class reference, ClassLoader expected) throws Exception { Class clazz = start.loadClass(reference.getName()); if (expected != null) assertEquals(expected, clazz.getClassLoader()); return clazz; } protected void assertLoadClassFail(ClassLoader start, Class reference) throws Exception { try { start.loadClass(reference.getName()); fail("Should not be here!"); } catch (Exception e) { checkThrowable(ClassNotFoundException.class, e); } } protected void assertLoadClassIllegal(ClassLoader start, Class reference) throws Exception { try { start.loadClass(reference.getName()); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalStateException.class, e); } } protected void assertNoClassLoader(DeploymentUnit unit) throws Exception { try { unit.getClassLoader(); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalStateException.class, e); } } protected static ClassLoadingMetaData addClassLoadingMetaData(PredeterminedManagedObjectAttachments deployment, String name, Version version, Class... packages) { return addClassLoadingMetaData(deployment, name, version, false, packages); } protected static ClassLoadingMetaData addClassLoadingMetaData(PredeterminedManagedObjectAttachments deployment, String name, Version version, boolean useVersionOnPackages, Class... packages) { ClassLoadingMetaData classLoadingMetaData = createMetaData(deployment, name, version, useVersionOnPackages, packages); addMetaData(deployment, classLoadingMetaData); return classLoadingMetaData; } protected static ClassLoadingMetaData createMetaData(PredeterminedManagedObjectAttachments deployment, String name, Version version, Class... packages) { return createMetaData(deployment, name, version, false, packages); } protected static ClassLoadingMetaData createMetaData(PredeterminedManagedObjectAttachments deployment, String name, Version version, boolean useVersionOnPackages, Class... packages) { MockClassLoadingMetaData classLoadingMetaData = new MockClassLoadingMetaData(name, version); classLoadingMetaData.setPaths(packages); CapabilitiesMetaData capabilities = classLoadingMetaData.getCapabilities(); Capability capability = classLoadingMetaDataFactory.createModule(name, version); capabilities.addCapability(capability); if (packages != null) { for (Class pkg : packages) { if (useVersionOnPackages) capability = classLoadingMetaDataFactory.createPackage(pkg.getPackage().getName(), version); else capability = classLoadingMetaDataFactory.createPackage(pkg.getPackage().getName()); capabilities.addCapability(capability); } } classLoadingMetaData.setCapabilities(capabilities); return classLoadingMetaData; } protected static void addRequireModule(ClassLoadingMetaData classLoadingMetaData, String moduleName, VersionRange versionRange) { RequirementsMetaData requirements = classLoadingMetaData.getRequirements(); Requirement requirement = classLoadingMetaDataFactory.createRequireModule(moduleName, versionRange); requirements.addRequirement(requirement); } protected static void addRequirePackage(ClassLoadingMetaData classLoadingMetaData, Class pck, VersionRange versionRange) { RequirementsMetaData requirements = classLoadingMetaData.getRequirements(); Requirement requirement = classLoadingMetaDataFactory.createRequirePackage(pck.getPackage().getName(), versionRange); requirements.addRequirement(requirement); } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, ClassLoadingMetaData md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(ClassLoadingMetaData.class, md); } protected ClassLoaderDomain assertDomain(String name) throws Exception { ClassLoaderDomain result = system.getDomain(name); assertNotNull("Expected domain " + name, result); return result; } protected void assertNoDomain(String name) throws Exception { assertNull("Did not expect domain " + name, system.getDomain(name)); } protected DeployerClient getMainDeployer(Deployer... deployers) { ClassLoading classLoading = new ClassLoading(); system = new DefaultClassLoaderSystem(); system.getDefaultDomain().setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY); deployer1 = new MockClassLoaderDescribeDeployer(); deployer1.setClassLoading(classLoading); deployer2 = new MockLevelClassLoaderSystemDeployer(); deployer2.setClassLoading(classLoading); deployer2.setSystem(system); if (deployers != null && deployers.length > 0) { Deployer[] allDeployers = new Deployer[deployers.length + 2]; allDeployers[0] = deployer1; allDeployers[1] = deployer2; System.arraycopy(deployers, 0, allDeployers, 2, deployers.length); return createMainDeployer(allDeployers); } return createMainDeployer(deployer1, deployer2); } } ././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/DeployersClassLoadingTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000000422211005561055033504 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.classloading.test.MockClassLoaderDependenciesUnitTestCase; import org.jboss.test.deployers.classloading.test.SubDeploymentMockClassLoaderUnitTestCase; import org.jboss.test.deployers.classloading.test.UndeployOrderClassLoaderUnitTestCase; import org.jboss.test.deployers.classloading.test.MockResourceVisitorDeployerUnitTestCase; /** * Deployers Deployer Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class DeployersClassLoadingTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers ClassLoading Tests"); suite.addTest(MockClassLoaderDependenciesUnitTestCase.suite()); suite.addTest(UndeployOrderClassLoaderUnitTestCase.suite()); suite.addTest(SubDeploymentMockClassLoaderUnitTestCase.suite()); suite.addTest(MockResourceVisitorDeployerUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000755000175000017500000000000011620060460033477 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/support/a/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000755000175000017500000000000011620060460033477 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/support/a/A.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000000222510655622045033514 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.support.a; /** * A. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class A { } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/support/b/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000755000175000017500000000000011620060460033477 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/support/b/B.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000000222610655622045033515 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.support.b; /** * B. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class B { } ././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/support/MockClassLoaderDescribeDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000000347710756575630033537 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.support; import org.jboss.classloading.spi.dependency.policy.ClassLoaderPolicyModule; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.plugins.classloading.AbstractClassLoaderDescribeDeployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * MockClassLoaderDescribeDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class MockClassLoaderDescribeDeployer extends AbstractClassLoaderDescribeDeployer { protected ClassLoaderPolicyModule createModule(DeploymentUnit unit, ClassLoadingMetaData metaData) throws DeploymentException { return new MockDeploymentClassLoaderPolicyModule(unit); } } ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/support/MockLevelClassLoaderSystemDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000000364510761233255033522 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.support; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.plugins.classloading.AbstractLevelClassLoaderSystemDeployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * MockLevelClassLoaderSystemDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class MockLevelClassLoaderSystemDeployer extends AbstractLevelClassLoaderSystemDeployer { public List deployed = new ArrayList(); public List undeployed = new ArrayList(); public void deploy(DeploymentUnit unit) throws DeploymentException { deployed.add(unit.getName()); super.deploy(unit); } public void undeploy(DeploymentUnit unit) { undeployed.add(unit.getName()); super.undeploy(unit); } } ././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloading/support/MockDeploymentClassLoaderPolicyModule.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/test/java/org/jboss/test/deployers/classloa0000644000175000017500000001557411044562032033517 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.classloading.support; import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.jboss.classloader.spi.filter.ClassFilter; import org.jboss.classloader.test.support.MockClassLoaderHelper; import org.jboss.classloader.test.support.MockClassLoaderPolicy; import org.jboss.classloading.plugins.visitor.DefaultResourceContext; import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData; import org.jboss.classloading.spi.metadata.Capability; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory; import org.jboss.classloading.spi.visitor.ResourceContext; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.visitor.ResourceVisitor; import org.jboss.deployers.plugins.classloading.AbstractDeploymentClassLoaderPolicyModule; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * MockDeploymentClassLoaderPolicyModule. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class MockDeploymentClassLoaderPolicyModule extends AbstractDeploymentClassLoaderPolicyModule { /** The serialVersionUID */ private static final long serialVersionUID = 1L; /** * Create a new MockDeploymentClassLoaderPolicyModule. * * @param unit the deployment unit * @throws IllegalArgumentException for a null deployment unit */ public MockDeploymentClassLoaderPolicyModule(DeploymentUnit unit) { super(unit); ClassLoadingMetaData metaData = unit.getAttachment(ClassLoadingMetaData.class); if (metaData == null || (metaData instanceof MockClassLoadingMetaData == false)) throw new IllegalArgumentException("MetaData is not mocked: " + metaData); } @Override protected List determineCapabilities() { List capabilities = super.determineCapabilities(); if (capabilities != null) return capabilities; // We need to work it out ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance(); capabilities = new CopyOnWriteArrayList(); // We have a module capability Object version = getVersion(); Capability capability = factory.createModule(getName(), version); capabilities.add(capability); MockClassLoadingMetaData metadata = getClassLoadingMetaData(); String[] exported = metadata.getExportedPackages(); // Do we determine package capabilities? if (exported != null) { for (String packageName : exported) { capability = factory.createPackage(packageName, version); capabilities.add(capability); } } return capabilities; } @Override protected MockClassLoadingMetaData getClassLoadingMetaData() { return (MockClassLoadingMetaData) super.getClassLoadingMetaData(); } @Override public MockClassLoaderPolicy getPolicy() { return (MockClassLoaderPolicy) super.getPolicy(); } @Override protected MockClassLoaderPolicy determinePolicy() { MockClassLoadingMetaData metaData = getClassLoadingMetaData(); MockClassLoaderPolicy policy = MockClassLoaderHelper.createMockClassLoaderPolicy(getContextName()); policy.setPrefix(metaData.getPrefix()); policy.setPackageNames(getPackageNames()); policy.setPaths(metaData.getPaths()); policy.setIncluded(metaData.getIncludedClasses()); policy.setExcluded(metaData.getExcludedClasses()); policy.setImportAll(isImportAll()); policy.setDelegates(getDelegates()); return policy; } /** * Get collection from string array. * * @param strings the strings * @return string collection */ private static Collection toCollection(String[] strings) { if (strings == null || strings.length == 0) return Collections.emptySet(); else return Arrays.asList(strings); } /** * Get URL for path param. * * @param path the path * @return path's URL */ protected URL getURL(String path) { ClassLoader classLoader = getClassLoader(); if (classLoader == null) throw new IllegalStateException("ClassLoader has not been constructed for " + getContextName()); return classLoader.getResource(path); } @Override public void visit(ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter, URL... urls) { MockClassLoadingMetaData mclmd = getClassLoadingMetaData(); String[] paths = mclmd.getPaths(); if (paths != null && paths.length > 0) { ClassLoader classLoader = getClassLoader(); if (classLoader == null) throw new IllegalStateException("ClassLoader has not been constructed for " + getContextName()); Collection included = toCollection(mclmd.getIncludedClasses()); ClassFilter includedFilter = getIncluded(); Collection excluded = toCollection(mclmd.getExcludedClasses()); ClassFilter excludedFilter = getExcluded(); for (String path : paths) { if (included.isEmpty() == false && included.contains(path) == false) continue; if (includedFilter != null && includedFilter.matchesResourcePath(path) == false) continue; if (excluded.isEmpty() == false && excluded.contains(path)) continue; if (excludedFilter != null && excludedFilter.matchesResourcePath(path)) continue; ResourceContext context = new DefaultResourceContext(getURL(path), path, classLoader); if (filter == null || filter.accepts(context)) visitor.visit(context); } } } } libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/0000755000175000017500000000000011620060462024107 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/0000755000175000017500000000000011620060462025030 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/0000755000175000017500000000000011620060462025617 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/0000755000175000017500000000000011620060462026737 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060462030745 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/0000755000175000017500000000000011620060463032427 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000755000175000017500000000000011620060463033416 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DeployerSorter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000644000175000017500000000306410643437062033432 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.sort; import java.util.List; import org.jboss.deployers.spi.deployer.Deployer; /** * Deployer sorter. * * @author Ales Justin */ public interface DeployerSorter { /** * Sort original + newDeployer. * * @param original the original * @param newDeployer new deployer to insert * @return sorted deployer * @throws IllegalStateException on found cycle */ List sortDeployers(List original, Deployer newDeployer); } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/Domino.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000644000175000017500000000302410643437062033426 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.sort; import org.jboss.deployers.spi.Ordered; /** * Simple domino presentation. * * @author Ales Justin * @param dots type */ public interface Domino extends Ordered { /** * Head dots. * * @return head */ Dots getHead(); /** * Tail dots. * * @return tail */ Dots getTail(); /** * Get the info. * * @return info string */ String getInfo(); } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DominoOrdering.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000644000175000017500000001556111137607542033440 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.sort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import static org.jboss.deployers.spi.Ordered.COMPARATOR; /** * Simple transition ordering using transitive closure. * * @author Ales Justin * @param exact domino type */ public class DominoOrdering> { protected String message; protected List dominoes; protected int size; protected int[][] connections; public DominoOrdering(String message) { this.message = message; } /** * Initialize transitions. * * @param dominoes all dominoes * @param cause the possible cycle cause */ @SuppressWarnings("unchecked") protected void init(List dominoes, Object cause) { this.dominoes = dominoes; this.size = dominoes.size(); this.connections = new int[size][size]; for (int i = 0; i < size - 1; i++) { for (int j = i + 1; j < size; j++) { Domino one = dominoes.get(i); Domino two = dominoes.get(j); Dots oneHead = one.getHead(); Dots oneTail = one.getTail(); Dots twoHead = two.getHead(); Dots twoTail = two.getTail(); boolean fstXsnd = oneTail.match(twoHead); boolean sndXfst = twoTail.match(oneHead); int relation = 0; if (fstXsnd && sndXfst) { // pass-through deployers if (one.getHead().match(twoHead) && oneTail.match(twoTail)) relation = COMPARATOR.compare(one, two); else // short circut cycle - throw exception immediately throwCycleException(cause); } else relation = fstXsnd ? -1 : (sndXfst ? 1 : 0); if (relation == 0) { // lazy compare on those who don't have order set if (one.getRelativeOrder() != 0 && two.getRelativeOrder() != 0) relation = one.getRelativeOrder() - two.getRelativeOrder(); } connections[i][j] = relation; connections[j][i] = -connections[i][j]; } } } /** * Order dominoes. * * @param dominoes all dominoes * @param cause the possible cycle cause * @return ordered dominoes list */ public List orderDominoes(List dominoes, Object cause) { // prepare initial transitions init(dominoes, cause); // do transitive closure int cycle = fillTransitions(true); if (cycle >= 0) throwCycleException(cause); // name compare on 'uncomparable' fillCompareNames(); List indexes = new ArrayList(); for (int i = 0; i < size; i++) indexes.add(i); Collections.sort(indexes, new IndexComparator()); List list = new ArrayList(size); for (Integer index : indexes) list.add(dominoes.get(index)); return list; } /** * Fill transitions. * * @param fillTransitions do change * @return index of the domino cycle cause, -1 otherwise */ protected int fillTransitions(boolean fillTransitions) { boolean changed = true; while (changed) { changed = false; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int current = connections[i][j]; if (j == i || current == 0) continue; for (int k = 0; k < size; k++) { if (k == i || k == j) continue; int lookup = connections[j][k]; // same signum if (current * lookup > 0) { int next = connections[i][k]; // cycle if (next * current < 0) { return i; } else if (fillTransitions && next == 0) { connections[i][k] = current; changed = true; } } } } } } return -1; } /** * Fill transitions with name compare. */ protected void fillCompareNames() { for (int i = 0; i < size - 1; i++) { for (int j = i + 1; j < size; j++) { if (connections[i][j] == 0) { T one = dominoes.get(i); T two = dominoes.get(j); connections[i][j] = COMPARATOR.compare(one, two); connections[j][i] = -connections[i][j]; int cycle = fillTransitions(false); // we introduced cycle - flip the signum if (cycle >= 0) { connections[i][j] = -connections[i][j]; connections[j][i] = -connections[i][j]; } } } } } /** * Throw the cycle exception. * * @param cause the cycle cause */ protected void throwCycleException(Object cause) { StringBuilder builder = new StringBuilder(); builder.append(String.format(message, cause)); for (T d : dominoes) builder.append(d.getInfo()); throw new IllegalStateException(builder.toString()); } /** * The index comparator. */ protected class IndexComparator implements Comparator { public int compare(Integer i1, Integer i2) { return connections[i1][i2]; } } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/Dots.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000644000175000017500000000275210643437062033435 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.sort; /** * The domino dots presentation. * * @author Ales Justin * @param holder information */ public interface Dots { /** * Get the value. * * @return dots value */ T getValue(); /** * Do this dots match with the param dots. * * @param dots the dots * @return true if these dots match param dots */ boolean match(Dots dots); } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DeployerDomino.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000644000175000017500000000514511137607542033435 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.sort; import java.util.Set; import org.jboss.deployers.spi.deployer.Deployer; /** * Representing deployer as a domino. * * @author Ales Justin */ public class DeployerDomino implements Domino> { private Deployer deployer; private Dots> head; private Dots> tail; public DeployerDomino(Deployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer!"); this.deployer = deployer; this.head = new SetDots(deployer.getInputs()); this.tail = new SetDots(deployer.getOutputs()); } /** * Get the underlying deployer. * * @return the deployer */ public Deployer getDeployer() { return deployer; } public Dots> getHead() { return head; } public Dots> getTail() { return tail; } public int getRelativeOrder() { return deployer.getRelativeOrder(); } public void setRelativeOrder(int order) { deployer.setRelativeOrder(order); } public String getInfo() { StringBuilder builder = new StringBuilder(); builder.append(deployer); builder.append("{inputs=").append(deployer.getInputs()); builder.append(" outputs=").append(deployer.getOutputs()); builder.append("}\n"); return builder.toString(); } @Override public String toString() { return deployer + ", " + head + "|" + tail; } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/SetDots.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000644000175000017500000000361210643437062033431 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.sort; import java.util.Set; /** * Domino dots as a set of values. * * @author Ales Justin * @param exact set element type */ public class SetDots implements Dots> { private Set set; public SetDots(Set set) { if (set == null) throw new IllegalArgumentException("Set is null!"); this.set = set; } public Set getValue() { return set; } public boolean match(Dots> containable) { if (set.isEmpty() == false) { for(V value : containable.getValue()) { if (set.contains(value)) { return true; } } } return false; } @Override public String toString() { return set.toString(); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DominoDeployerSorter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000644000175000017500000000407610743742275033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.sort; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.spi.deployer.Deployer; /** * Deployer sorter using domino sorting. * * @author Ales Justin */ public class DominoDeployerSorter implements DeployerSorter { public List sortDeployers(List original, Deployer newDeployer) { int capacity = original.size() + 1; List dominoes = new ArrayList(capacity); for (Deployer deployer : original) dominoes.add(new DeployerDomino(deployer)); dominoes.add(new DeployerDomino(newDeployer)); DominoOrdering sorter = new DominoOrdering("Cannot add %1s it will cause a loop\n"); dominoes = sorter.orderDominoes(dominoes, newDeployer); List deployers = new ArrayList(capacity); for (DeployerDomino domino : dominoes) deployers.add(domino.getDeployer()); return deployers; } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DeployerSorterFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/0000644000175000017500000000265110643450611033426 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.sort; /** * Sorter factory. * * @author Ales Justin */ public class DeployerSorterFactory { /** * Create new DeployerSorter. * Currently just plain domino sorting. * * @return deployer sorter instance */ public static DeployerSorter newSorter() { return new DominoDeployerSorter(); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/managed/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/manag0000755000175000017500000000000011620060463033433 5ustar twernertwerner././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/managed/DefaultManagedDeploymentCreator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/manag0000644000175000017500000000406710667152130033447 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.managed; import java.util.Map; import org.jboss.deployers.spi.deployer.managed.ManagedDeploymentCreator; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.managed.api.ManagedDeployment; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.ManagedDeployment.DeploymentPhase; import org.jboss.managed.plugins.ManagedDeploymentImpl; /** * Create a ManagedDeployment for a DeploymentUnit and its ManagedObjects * * @author Scott.Stark@jboss.org * @version $Revision: 65027 $ */ public class DefaultManagedDeploymentCreator implements ManagedDeploymentCreator { public ManagedDeployment build(DeploymentUnit unit, Map unitMOs, ManagedDeployment parent) { DeploymentPhase phase = unit.getAttachment(DeploymentPhase.class); if( phase == null ) phase = DeploymentPhase.APPLICATION; ManagedDeployment md = new ManagedDeploymentImpl(unit.getName(), unit.getSimpleName(), phase, parent, unitMOs); return md; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000755000175000017500000000000011620060463033453 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/DeployerStatistics.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000644000175000017500000000626511061472572033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.deployers; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * DeployerStatistics. * * @author Adrian Brock * @version $Revision: 1.1 $ */ class DeployerStatistics { /** The deployer statistics */ private Map deployers = new ConcurrentHashMap(); /** * Add a statistic * * @param deployerName the deployer name * @param unitName the unit name * @param time the time */ public synchronized void addStatistic(String deployerName, String unitName, long time) { DeployerStatistic stat = deployers.get(deployerName); if (stat == null) { stat = new DeployerStatistic(deployerName); deployers.put(deployerName, stat); } stat.addDetail(unitName, time); } /** * List the times * * @param details whether to show details * @return the times */ public String listTimes(boolean details) { List stats = new ArrayList(deployers.values()); Collections.sort(stats); StringBuilder builder = new StringBuilder(); builder.append(""); for (DeployerStatistic stat : stats) { builder.append(""); builder.append(""); builder.append(""); builder.append(""); if (details) { List list = new ArrayList(stat.getDetails().values()); Collections.sort(list); for (BasicStatistic detail : list) { builder.append(""); builder.append(""); builder.append(""); builder.append(""); } } } builder.append("
Deployer/DeploymentTime (milliseconds)
").append(stat.getName()).append("").append(stat.getTime()).append("
`-- ").append(detail.getName()).append("").append(detail.getTime()).append("
"); return builder.toString(); } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/DeployerStatistic.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000644000175000017500000000405211061472572033465 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.deployers; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * DeployerStatistic. * * @author Adrian Brock * @version $Revision: 1.1 $ */ class DeployerStatistic extends BasicStatistic { /** The details */ private Map details = new ConcurrentHashMap(); /** * Create a new DeployerStatistic. * * @param name the name */ public DeployerStatistic(String name) { super(name); } /** * Get the details. * * @return the details. */ public Map getDetails() { return details; } /** * Add a detail * * @param name the name * @param time the time */ public synchronized void addDetail(String name, long time) { BasicStatistic previous = details.get(name); if (previous != null) previous.addTime(time); else details.put(name, new BasicStatistic(name, time)); addTime(time); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/SecurityActions.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000644000175000017500000000574610746226513033501 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.deployers; import java.security.AccessController; import java.security.PrivilegedAction; /** * SecurityActions. * * @author Adrian Brock * @version $Revision: 1.1 $ */ class SecurityActions { static ClassLoader getContextClassLoader() { if (System.getSecurityManager() == null) { return Thread.currentThread().getContextClassLoader(); } else { return AccessController.doPrivileged(GetContextClassLoader.INSTANCE); } } static class GetContextClassLoader implements PrivilegedAction { static GetContextClassLoader INSTANCE = new GetContextClassLoader(); public ClassLoader run() { return Thread.currentThread().getContextClassLoader(); } } static ClassLoader setContextClassLoader(final ClassLoader classLoader) { if (System.getSecurityManager() == null) { ClassLoader previous = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); return previous; } else { return AccessController.doPrivileged(new PrivilegedAction() { public ClassLoader run() { ClassLoader previous = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); return previous; } }); } } static void resetContextClassLoader(final ClassLoader classLoader) { if (System.getSecurityManager() == null) { Thread.currentThread().setContextClassLoader(classLoader); } else { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { Thread.currentThread().setContextClassLoader(classLoader); return null; } }); } } } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/DeployersImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000644000175000017500000015574411104173360033473 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.deployers; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import javax.management.MBeanRegistration; import javax.management.MBeanServer; import javax.management.ObjectName; import org.jboss.dependency.spi.Controller; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerContextActions; import org.jboss.dependency.spi.ControllerState; import org.jboss.dependency.spi.ControllerStateModel; import org.jboss.dependency.spi.DependencyInfo; import org.jboss.dependency.spi.DependencyItem; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.IncompleteDeploymentException; import org.jboss.deployers.client.spi.IncompleteDeployments; import org.jboss.deployers.client.spi.MissingDependency; import org.jboss.deployers.plugins.sort.DeployerSorter; import org.jboss.deployers.plugins.sort.DeployerSorterFactory; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.managed.ManagedObjectCreator; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentMBean; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.scope.ScopeBuilder; import org.jboss.kernel.spi.dependency.KernelController; import org.jboss.logging.Logger; import org.jboss.managed.api.ManagedObject; import org.jboss.metadata.spi.repository.MutableMetaDataRepository; /** * DeployersImpl. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 80543 $ */ public class DeployersImpl implements Deployers, ControllerContextActions, DeployersImplMBean, MBeanRegistration { /** * The log */ private static final Logger log = Logger.getLogger(DeployersImpl.class); /** * Whether we are shutdown */ private AtomicBoolean shutdown = new AtomicBoolean(false); /** Whether to record statistics */ private boolean collectStats = false; /** The deployment time stats */ private DeployerStatistics deploymentTimes; /** * The dependency state machine */ private Controller controller; /** The mbean server */ private MBeanServer server; /** Whether to register deployments as mbeans */ private boolean registerMBeans = true; /** * The repository */ private MutableMetaDataRepository repository; /** * The deployment stages by name */ private Map stages = new ConcurrentHashMap(); /** * The deployers */ private Set deployers = new HashSet(); /** * The deployers by stage and type */ private Map> deployersByStage = new HashMap>(); /** * The scope builder */ private ScopeBuilder scopeBuilder; /** The ManagedDeploymentCreator plugin */ private ManagedObjectCreator mgtObjectCreator = null; /** * Create a new DeployersImpl. * * @param controller the controller * @throws IllegalArgumentException for a null controller */ public DeployersImpl(Controller controller) { this(controller, null); } /** * Create a new DeployersImpl. * * @param controller the controller * @param deployers the deployers * @throws IllegalArgumentException for a null controller */ public DeployersImpl(Controller controller, Set deployers) { if (controller == null) throw new IllegalArgumentException("Null controller"); this.controller = controller; // Add the standard stages addDeploymentStage(DeploymentStages.NOT_INSTALLED); addDeploymentStage(DeploymentStages.PARSE); addDeploymentStage(DeploymentStages.POST_PARSE); addDeploymentStage(DeploymentStages.PRE_DESCRIBE); addDeploymentStage(DeploymentStages.DESCRIBE); addDeploymentStage(DeploymentStages.CLASSLOADER); addDeploymentStage(DeploymentStages.POST_CLASSLOADER); addDeploymentStage(DeploymentStages.PRE_REAL); addDeploymentStage(DeploymentStages.REAL); addDeploymentStage(DeploymentStages.INSTALLED); // Create the deployers if (deployers != null) setDeployers(deployers); } public void shutdown() { shutdown.set(true); } /** * Check whether we are shutdown */ protected void checkShutdown() { if (shutdown.get()) throw new IllegalStateException("Deployers are shutdown"); } /** * Get the collectStats. * * @return the collectStats. */ public boolean isCollectStats() { return collectStats; } /** * Set the collectStats. * * @param collectStats the collectStats. */ public void setCollectStats(boolean collectStats) { this.collectStats = collectStats; } /** * Get the deployers. * * @return the deployers. */ public Set getDeployerWrappers() { return deployers; } /** * Set the deployers. * * @param deployers the deployers. * @throws IllegalArgumentException for null deployers */ public void setDeployers(Set deployers) { if (deployers == null) throw new IllegalArgumentException("Null deployers"); // Remove all the old deployers that are not in the new set HashSet oldDeployers = new HashSet(this.deployers); oldDeployers.removeAll(deployers); for (Deployer deployer : oldDeployers) removeDeployer(deployer); // Add all the new deployers that were not already present HashSet newDeployers = new HashSet(deployers); newDeployers.removeAll(this.deployers); for (Deployer deployer : newDeployers) addDeployer(deployer); } /** * Add a deployer * * @param deployer the deployer */ public synchronized void addDeployer(Deployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); DeploymentStage stage = deployer.getStage(); if (stage == null) throw new IllegalArgumentException("Deployer has no stage: " + deployer); addDeploymentStage(stage); DeployerWrapper wrapper = new DeployerWrapper(deployer); // Ignore duplicates if (deployers.contains(wrapper)) return; String stageName = stage.getName(); List deployers = deployersByStage.get(stageName); if (deployers == null) deployers = Collections.emptyList(); deployers = insert(deployers, wrapper); deployersByStage.put(stageName, deployers); this.deployers.add(wrapper); StringBuilder builder = new StringBuilder(); builder.append("Added deployer ").append(deployer).append(" for stage ").append(stageName).append('\n'); for (Deployer temp : getDeployersList(stageName)) { builder.append(temp); builder.append("{inputs=").append(temp.getInputs()); builder.append(" outputs=").append(temp.getOutputs()); builder.append("}\n"); } log.debug(builder); } /** * Remove a deployer * * @param deployer the deployer */ public synchronized void removeDeployer(Deployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); deployers.remove(new DeployerWrapper(deployer)); DeploymentStage stage = deployer.getStage(); if (stage == null) { log.warn("Deployer has no stage: " + deployer); return; } String stageName = stage.getName(); List deployers = deployersByStage.get(stageName); if (deployers == null) return; deployers.remove(deployer); if (deployers.isEmpty()) deployersByStage.remove(stageName); log.debug("Removed deployer " + deployer + " from stage " + stageName); } /** * Add a deployment stage * * @param stage the deployment stage */ protected synchronized void addDeploymentStage(DeploymentStage stage) { if (stage == null) throw new IllegalArgumentException("Null stage"); // Already done? String stageName = stage.getName(); if (stages.containsKey(stageName)) return; ControllerState preceeds = null; String before = stage.getBefore(); String after = stage.getAfter(); if (before != null || after != null) { // Determine where to put the stage ControllerStateModel states = controller.getStates(); for (ControllerState state : states) { String stateName = state.getStateString(); if (before != null && before.equals(stateName)) { preceeds = state; break; } if (after != null && after.equals(stateName)) { if (states.getNextState(state) != null) { preceeds = states.getNextState(state); break; } } } } controller.addState(new ControllerState(stageName), preceeds); stages.put(stageName, stage); log.debug("Added stage " + stageName + " before " + preceeds); } /** * Get the scopeBuilder. * * @return the scopeBuilder. */ public ScopeBuilder getScopeBuilder() { return scopeBuilder; } /** * Set the scopeBuilder. * * @param scopeBuilder the scopeBuilder. */ public void setScopeBuilder(ScopeBuilder scopeBuilder) { this.scopeBuilder = scopeBuilder; } public ManagedObjectCreator getMgtObjectCreator() { return mgtObjectCreator; } public void setMgtObjectCreator(ManagedObjectCreator mgtObjectCreator) { this.mgtObjectCreator = mgtObjectCreator; log.debug("setMgtObjectCreator, "+mgtObjectCreator); } /** * Get the repository. * * @return the repository. */ public MutableMetaDataRepository getRepository() { return repository; } /** * Set the repository. * * @param repository the repository. */ public void setRepository(MutableMetaDataRepository repository) { this.repository = repository; } /** * Get whether to register mbeans * * @return true to register mbeans */ public boolean isRegisterMBeans() { return registerMBeans; } /** * Set whether to register mbeans * * @param registerMBeans true to register mbeans */ public void setRegisterMBeans(boolean registerMBeans) { this.registerMBeans = registerMBeans; } public void start() { // Bootstrap the repository if (repository == null && controller instanceof KernelController) { KernelController kernelController = (KernelController)controller; repository = kernelController.getKernel().getMetaDataRepository().getMetaDataRepository(); } } public Map getManagedObjects(DeploymentContext context) throws DeploymentException { if (context == null) throw new IllegalArgumentException("Null context"); checkShutdown(); Map managedObjects = new HashMap(); DeploymentUnit unit = context.getDeploymentUnit(); Set mocs = new HashSet(); Set outputs = new HashSet(); for (DeployerWrapper deployer : deployers) { outputs.addAll(deployer.getOutputs()); // If the deployer supports ManagedObjectCreator let is augment/modify the managed objects if(deployer.getManagedObjectCreator() != null) mocs.add(deployer); } // mgtObjectCreator.build(unit, outputs, managedObjects); for(ManagedObjectCreator moc : mocs) { moc.build(unit, outputs, managedObjects); } return managedObjects; } /** * Get the ManagedObjectBuilder for a deployer. * * @param deployer - the deployer to set the ManagedObjectBuilder for. * @return managedObjectBuilder for deployer, may be null * @throws IllegalArgumentException for a null deployer */ public ManagedObjectCreator getDeployerManagedObjectBuilder(Deployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); ManagedObjectCreator result = null; for (DeployerWrapper wrapper : deployers) { if (wrapper.equals(deployer)) result = wrapper.getManagedObjectCreator(); } return result; } /** * Set the ManagedObjectBuilder for a deployer. This allows one to override the given deployer * ManagedObjectBuilder or assign one when the deployer does not provide a ManagedObjectBuilder. * * @param deployer - the deployer to set the ManagedObjectBuilder for. * @param managedObjectCreator the managed object builder to set to the deployer * @throws IllegalArgumentException for a null deployer */ public void setDeployerManagedObjectBuilder(Deployer deployer, ManagedObjectCreator managedObjectCreator) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); for (DeployerWrapper wrapper : deployers) { if (wrapper.equals(deployer)) wrapper.setManagedObjectCreator(managedObjectCreator); } } public String listDeployerTimes(boolean details) { if (deploymentTimes == null) return "No statistics available"; return deploymentTimes.listTimes(details); } public String listDeployers(String stageName) { StringBuilder result = new StringBuilder(); result.append(""); if (stageName == null || stageName.trim().length() == 0) { for (String stage : stages.keySet()) internalListDeployers(stage, null, result); } else { internalListDeployers(stageName, null, result); } result.append("
Stage/Deployertopcomponentparent lastinputoutput
"); return result.toString(); } public String listDeployersByAttachment(String attachment) { if (attachment == null || attachment.trim().length() == 0) return "No attachment specified"; StringBuilder result = new StringBuilder(); result.append(""); for (String stage : stages.keySet()) internalListDeployers(stage, attachment, result); result.append("
Stage/Deployertopcomponentparent lastinputoutput
"); return result.toString(); } /** * List the deployers for a stage * * @param stageName the stage * @param attachment the attachment * @param builder the builder */ protected void internalListDeployers(String stageName, String attachment, StringBuilder builder) { List deployers = getDeployersList(stageName); if (deployers.isEmpty()) return; builder.append("").append("").append(stageName).append("").append(""); for (Deployer deployer : deployers) { int row = 0; Set deployerInputs = deployer.getInputs(); List inputs = new ArrayList(); for (String input : deployerInputs) { if (attachment == null || attachment.equals(input)) inputs.add(input); } Set deployerOutputs = deployer.getOutputs(); List outputs = new ArrayList(); for (String output : deployerOutputs) { if (attachment == null || attachment.equals(output)) outputs.add(output); } if (attachment != null && inputs.isEmpty() && outputs.isEmpty()) continue; while (row < 1 || row < outputs.size() || row < outputs.size()) { builder.append(""); if (row == 0) { builder.append("`--").append(deployer).append(""); builder.append(deployer.isTopLevelOnly() ? "X" : ""); builder.append(deployer.isWantComponents() ? "X" : ""); builder.append(deployer.isParentFirst() == false ? "X" : ""); } else { builder.append(""); } if (row < inputs.size()) builder.append("").append(inputs.get(row)).append(""); else builder.append(""); if (row < outputs.size()) builder.append("").append(outputs.get(row)).append(""); else builder.append(""); builder.append(""); ++row; } } } public DeploymentStage getDeploymentStage(DeploymentContext context) throws DeploymentException { DeploymentControllerContext deploymentControllerContext = context.getTransientAttachments().getAttachment(ControllerContext.class.getName(), DeploymentControllerContext.class); if (deploymentControllerContext == null) return null; ControllerState state = deploymentControllerContext.getState(); if (ControllerState.ERROR.equals(state)) return DeploymentStages.NOT_INSTALLED; return new DeploymentStage(state.getStateString()); } public void change(DeploymentContext context, DeploymentStage stage) throws DeploymentException { if (context == null) throw new DeploymentException("Null context"); if (stage == null) throw new DeploymentException("Null stage"); String stageName = stage.getName(); if (stages.containsKey(stage.getName()) == false) throw new DeploymentException("Unknown deployment stage: " + stage); DeploymentControllerContext deploymentControllerContext = context.getTransientAttachments().getAttachment(ControllerContext.class.getName(), DeploymentControllerContext.class); if (deploymentControllerContext == null) throw new DeploymentException("Deployment " + context.getName() + " has no deployment controller context"); checkShutdown(); ControllerState state = new ControllerState(stageName); try { controller.change(deploymentControllerContext, state); } catch (Throwable t) { context.setState(DeploymentState.ERROR); context.setProblem(t); } Throwable problem = context.getProblem(); if (problem != null) throw DeploymentException.rethrowAsDeploymentException("Error changing to stage " + stage + " for " + context.getName(), problem); } public void process(List deploy, List undeploy) { boolean trace = log.isTraceEnabled(); // There is something to undeploy if (undeploy != null && undeploy.isEmpty() == false) { // Build a list in reverse order List toUndeploy = new ArrayList(); for (int i = undeploy.size() - 1; i >= 0; --i) { DeploymentContext context = undeploy.get(i); if (DeploymentState.ERROR.equals(context.getState()) == false) context.setState(DeploymentState.UNDEPLOYING); log.debug("Undeploying " + context.getName()); DeploymentControllerContext deploymentControllerContext = context.getTransientAttachments().getAttachment(ControllerContext.class.getName(), DeploymentControllerContext.class); if (deploymentControllerContext == null) { log.debug("DeploymentContext has no DeploymentControllerContext during undeploy request, ignoring: " + context); } else { toUndeploy.add(deploymentControllerContext); } } // Go through the states in reverse order ControllerStateModel states = controller.getStates(); ListIterator iter = states.listIteraror(); while (iter.hasPrevious()) { ControllerState state = iter.previous(); for (DeploymentControllerContext deploymentControllerContext : toUndeploy) { ControllerState current = deploymentControllerContext.getState(); if (ControllerState.ERROR.equals(current) == false && states.isAfterState(current, state)) { DeploymentContext context = deploymentControllerContext.getDeploymentContext(); try { controller.change(deploymentControllerContext, state); } catch (Throwable t) { log.warn("Error during undeploy", t); context.setState(DeploymentState.ERROR); context.setProblem(t); } } else { if (trace) log.trace("Not moving " + deploymentControllerContext + " to state " + state + " it is at " + current); } } } // Uninstall the contexts for (DeploymentControllerContext deploymentControllerContext : toUndeploy) { DeploymentContext context = deploymentControllerContext.getDeploymentContext(); context.getTransientAttachments().removeAttachment(ControllerContext.class); try { controller.uninstall(deploymentControllerContext.getName()); setState(context, DeploymentState.UNDEPLOYED, null); // This is now in the abstract classloader deployer.undeploy, // but left here in case somebody isn't using that. unregisterMBean(context); removeClassLoader(context); cleanup(context); log.debug("Fully Undeployed " + context.getName()); } catch (Throwable t) { log.warn("Error during uninstall", t); context.setState(DeploymentState.ERROR); context.setProblem(t); } } } // There is something to deploy if (deploy != null && deploy.isEmpty() == false) { // Create the controller contexts for (DeploymentContext context : deploy) { checkShutdown(); DeploymentControllerContext deploymentControllerContext = new DeploymentControllerContext(context, this); context.getTransientAttachments().addAttachment(ControllerContext.class, deploymentControllerContext); try { controller.install(deploymentControllerContext); context.setState(DeploymentState.DEPLOYING); log.debug("Deploying " + context.getName()); if (scopeBuilder != null) context.getTransientAttachments().addAttachment(ScopeBuilder.class, scopeBuilder); if (repository != null) context.getTransientAttachments().addAttachment(MutableMetaDataRepository.class, repository); registerMBean(context); } catch (Throwable t) { // Set the error on the parent context.setState(DeploymentState.ERROR); context.setProblem(t); // Set the children to not deployed setState(context, DeploymentState.UNDEPLOYED, DeploymentState.DEPLOYING); unregisterMBean(context); } } // Go through the states in order ControllerStateModel states = controller.getStates(); for (ControllerState state : states) { for (DeploymentContext context : deploy) { DeploymentControllerContext deploymentControllerContext = context.getTransientAttachments().getAttachment(ControllerContext.class.getName(), DeploymentControllerContext.class); ControllerState current = deploymentControllerContext.getState(); if (ControllerState.ERROR.equals(current) == false && states.isBeforeState(current, state)) { checkShutdown(); try { controller.change(deploymentControllerContext, state); } catch (Throwable t) { context.setState(DeploymentState.ERROR); context.setProblem(t); } } else { if (trace) log.trace("Not moving " + deploymentControllerContext + " to state " + state + " it is at " + current); } } } } } /** * Get the root cause of a throwable * * @param original the original * @return the root */ private static Throwable getRootCause(Throwable original) { if (original == null) return null; Throwable result = original; Throwable cause = result.getCause(); while (cause != null) { result = cause; cause = cause.getCause(); } return result; } public void checkComplete(Collection errors, Collection missingDeployer) throws DeploymentException { Map deploymentsInError = null; Collection deploymentsMissingDeployer = null; Map contextsInError = null; Map> contextsMissingDependencies = null; if (errors != null && errors.isEmpty() == false) { deploymentsInError = new HashMap(); for (DeploymentContext context : errors) deploymentsInError.put(context.getName(), getRootCause(context.getProblem())); } if (missingDeployer != null && missingDeployer.isEmpty() == false) { deploymentsMissingDeployer = new HashSet(); for (Deployment context : missingDeployer) deploymentsMissingDeployer.add(context.getName()); } Set notInstalled = controller.getNotInstalled(); if (notInstalled.isEmpty() == false) { for (Iterator i = notInstalled.iterator(); i.hasNext();) { ControllerContext context = i.next(); if (context.getState().equals(context.getRequiredState())) i.remove(); } if (notInstalled.isEmpty() == false) { ControllerStateModel states = controller.getStates(); contextsInError = new HashMap(); contextsMissingDependencies = new HashMap>(); for (ControllerContext context : notInstalled) { checkControllerContext(context, contextsInError, contextsMissingDependencies, states); } } } IncompleteDeployments incomplete = new IncompleteDeployments(deploymentsInError, deploymentsMissingDeployer, contextsInError, contextsMissingDependencies); if (incomplete.isIncomplete()) throw new IncompleteDeploymentException(incomplete); } /** * Check controller context. * * @param context the controller context * @param contextsInError contexts in error map * @param contextsMissingDependencies contexts missing dependecies map * @param states controller states */ protected final void checkControllerContext( ControllerContext context, Map contextsInError, Map> contextsMissingDependencies, ControllerStateModel states) { if (context.getState().equals(ControllerState.ERROR)) contextsInError.put(context.getName().toString(), getRootCause(context.getError())); else { Object contextName = context.getName(); String name = contextName.toString(); Set dependencies = new HashSet(); DependencyInfo dependsInfo = context.getDependencyInfo(); ControllerState currentState = context.getState(); ControllerState nextState = states.getNextState(currentState); for (DependencyItem item : dependsInfo.getUnresolvedDependencies(nextState)) { if (item.isResolved() == false) { String dependency; ControllerState actualState = null; String actualStateString; Object iDependOn = item.getIDependOn(); if (contextName.equals(iDependOn) == false && item.resolve(controller) == false) { iDependOn = item.getIDependOn(); if (iDependOn == null) { dependency = ""; actualStateString = "** UNRESOLVED " + item.toHumanReadableString() + " **"; } else { dependency = iDependOn.toString(); ControllerContext other = controller.getContext(iDependOn, null); if (other == null) actualStateString = "** NOT FOUND " + item.toHumanReadableString() + " **"; else { actualState = other.getState(); actualStateString = actualState.getStateString(); } } ControllerState requiredState = item.getWhenRequired(); String requiredStateString = requiredState.getStateString(); if (actualState == null || states.isAfterState(requiredState, actualState)) { MissingDependency missing = new MissingDependency(name, dependency, requiredStateString, actualStateString); dependencies.add(missing); } } } } contextsMissingDependencies.put(name, dependencies); } } public void checkComplete(DeploymentContext... contexts) throws DeploymentException { checkComplete(true, contexts); } public void checkStructureComplete(DeploymentContext... contexts) throws DeploymentException { checkComplete(false, contexts); } /** * Check if deployments are complete. * * @param contexts the deployment contexts * @param checkContexts do we check contexts * @throws DeploymentException throw error if deployment is incomplete */ protected void checkComplete(boolean checkContexts, DeploymentContext... contexts) throws DeploymentException { if (contexts == null) throw new IllegalArgumentException("Null contexts"); Map deploymentsInError = new HashMap(); Collection deploymentsMissingDeployer = new HashSet(); Map contextsInError = new HashMap(); Map> contextsMissingDependencies = new HashMap>(); for (DeploymentContext context : contexts) { Throwable problem = context.getProblem(); if (problem != null) deploymentsInError.put(context.getName(), problem); if (isDeployed(context) == false) deploymentsMissingDeployer.add(context.getName()); if (checkContexts) { Set notInstalled = controller.getNotInstalled(); ControllerStateModel states = controller.getStates(); checkComplete(context, contextsInError, contextsMissingDependencies, notInstalled, states); } } // reset if not used if (deploymentsInError.isEmpty()) deploymentsInError = null; if (deploymentsMissingDeployer.isEmpty()) deploymentsMissingDeployer = null; if (contextsInError.isEmpty()) contextsInError = null; if (contextsMissingDependencies.isEmpty()) contextsMissingDependencies = null; IncompleteDeployments incomplete = new IncompleteDeployments(deploymentsInError, deploymentsMissingDeployer, contextsInError, contextsMissingDependencies); if (incomplete.isIncomplete()) throw new IncompleteDeploymentException(incomplete); } /** * Is context deployed. * * @param context the deployment context * @return true if context deployed, false otherwise */ protected boolean isDeployed(DeploymentContext context) { return context.isDeployed() || DeploymentState.DEPLOYED.equals(context.getState()); } /** * Check complete on deployment context. * * @param context the deployment context * @param contextsInError contexts in error map * @param contextsMissingDependencies contexts missing dependecies map * @param notInstalled the not installed contexts * @param states controller states */ protected final void checkComplete( DeploymentContext context, Map contextsInError, Map> contextsMissingDependencies, Set notInstalled, ControllerStateModel states) { DeploymentControllerContext dcc = context.getTransientAttachments().getAttachment(ControllerContext.class.getName(), DeploymentControllerContext.class); checkControllerContext(dcc, contextsInError, contextsMissingDependencies, notInstalled, states); Set names = context.getControllerContextNames(); if (names != null && names.isEmpty() == false) { for (Object name : names) { ControllerContext cc = controller.getContext(name, null); checkControllerContext(cc, contextsInError, contextsMissingDependencies, notInstalled, states); } } List children = context.getChildren(); if (children != null && children.isEmpty() == false) { for (DeploymentContext child : children) checkComplete(child, contextsInError, contextsMissingDependencies, notInstalled, states); } List components = context.getComponents(); if (components != null && components.isEmpty() == false) { for (DeploymentContext component : components) checkComplete(component, contextsInError, contextsMissingDependencies, notInstalled, states); } } /** * Check complete on deployment context. * * @param context the deployment context * @param contextsInError contexts in error map * @param contextsMissingDependencies contexts missing dependecies map * @param notInstalled the not installed contexts * @param states controller states */ protected void checkControllerContext( ControllerContext context, Map contextsInError, Map> contextsMissingDependencies, Set notInstalled, ControllerStateModel states) { if (context != null) { if (context.getState().equals(context.getRequiredState()) == false && notInstalled.contains(context)) { checkControllerContext(context, contextsInError, contextsMissingDependencies, states); } } } public void install(ControllerContext context, ControllerState fromState, ControllerState toState) throws Throwable { DeploymentControllerContext deploymentControllerContext = (DeploymentControllerContext)context; String stageName = toState.getStateString(); DeploymentContext deploymentContext = deploymentControllerContext.getDeploymentContext(); try { List theDeployers = getDeployersList(stageName); if (log.isTraceEnabled()) log.trace("Deployers for " + stageName + " " + theDeployers); if (theDeployers.isEmpty() == false) { int i = 0; try { while (i < theDeployers.size()) { Deployer deployer = theDeployers.get(i); if (deployer.isParentFirst()) doInstallParentFirst(deployer, deploymentContext); else doInstallParentLast(deployer, deploymentContext); ++i; } } catch (Throwable t) { deploymentContext.setState(DeploymentState.ERROR); deploymentContext.setProblem(t); // Unwind the previous deployments for (int j = i - 1; j >= 0; --j) { Deployer deployer = theDeployers.get(j); if (deployer.isParentFirst()) doUninstallParentLast(deployer, deploymentContext, true, true); else doUninstallParentFirst(deployer, deploymentContext, true, true); } // It can happen that subdeployments are not processed if the parent fails immediately // so there is no callback to undeploy when nothing was done setState(deploymentContext, DeploymentState.UNDEPLOYED, DeploymentState.DEPLOYING); throw t; } } } finally { if (ControllerState.INSTALLED.equals(toState) && DeploymentState.DEPLOYING.equals(deploymentContext.getState())) { log.debug("Fully Deployed " + context.getName()); setState(deploymentContext, DeploymentState.DEPLOYED, null); } } } /** * Do the install parent first * * @param deployer the deployer * @param context the context * @throws Throwable for any problem */ protected void doInstallParentFirst(Deployer deployer, DeploymentContext context) throws Throwable { List currentComponents = context.getComponents(); // Take a copy of the components so we don't start looping on newly added components // in the component deployers List components = null; if (currentComponents != null && currentComponents.isEmpty() == false) components = new ArrayList(currentComponents); DeploymentUnit unit = context.getDeploymentUnit(); if (isRelevant(deployer, unit, context.isTopLevel(), context.isComponent())) { try { doDeploy(deployer, unit); } catch (DeploymentException e) { context.setState(DeploymentState.ERROR); context.setProblem(e); throw e; } } else if (log.isTraceEnabled()) log.trace("Deployer " + deployer + " not relevant for " + context.getName()); if (components != null) { try { for (int i = 0; i < components.size(); ++i) { DeploymentContext component = components.get(i); try { doInstallParentFirst(deployer, component); } catch (DeploymentException e) { // Unwind the previous components for (int j = i - 1; j >= 0; --j) { component = components.get(j); doUninstallParentLast(deployer, component, false, true); } throw e; } } } catch (DeploymentException e) { // Just undeploy this context doUninstallParentLast(deployer, context, false, false); throw e; } } List children = context.getChildren(); if (children != null) { try { for (int i = 0; i < children.size(); ++i) { DeploymentContext child = children.get(i); try { doInstallParentFirst(deployer, child); } catch (DeploymentException e) { // Unwind the previous children for (int j = i - 1; j >= 0; --j) { child = children.get(j); doUninstallParentLast(deployer, child, true, true); } throw e; } } } catch (DeploymentException e) { // Undeploy the context but the children are already unwound doUninstallParentLast(deployer, context, false, true); throw e; } } } /** * Do the install parent last * * @param deployer the deployer * @param context the context * @throws Throwable for any problem */ protected void doInstallParentLast(Deployer deployer, DeploymentContext context) throws Throwable { List children = context.getChildren(); for (int i = 0; i < children.size(); ++i) { DeploymentContext child = children.get(i); try { doInstallParentLast(deployer, child); } catch (DeploymentException e) { // Unwind the previous children for (int j = i - 1; j >= 0; --j) { child = children.get(j); doUninstallParentFirst(deployer, child, true, true); } throw e; } } List components = context.getComponents(); if (components != null) { try { for (int i = 0; i < components.size(); ++i) { DeploymentContext component = components.get(i); try { doInstallParentLast(deployer, component); } catch (DeploymentException e) { // Unwind the previous components for (int j = i - 1; j >= 0; --j) { component = components.get(j); doUninstallParentFirst(deployer, component, true, true); } throw e; } } } catch (DeploymentException e) { // Just undeploy the children, the components are already unwound doUninstallParentFirst(deployer, context, false, false); throw e; } } DeploymentUnit unit = context.getDeploymentUnit(); if (isRelevant(deployer, unit, context.isTopLevel(), context.isComponent())) { try { doDeploy(deployer, unit); } catch (DeploymentException e) { // Undeploy the children and components doUninstallParentFirst(deployer, context, false, true); context.setState(DeploymentState.ERROR); context.setProblem(e); throw e; } } else if (log.isTraceEnabled()) log.trace("Deployer " + deployer + " not relevant for " + context.getName()); } public void uninstall(ControllerContext context, ControllerState fromState, ControllerState toState) { DeploymentControllerContext deploymentControllerContext = (DeploymentControllerContext)context; String stageName = fromState.getStateString(); DeploymentContext deploymentContext = deploymentControllerContext.getDeploymentContext(); List theDeployers = getDeployersList(stageName); if (log.isTraceEnabled()) log.trace("Deployers for " + stageName + " " + theDeployers); if (theDeployers.isEmpty() == false) { for (int i = theDeployers.size() - 1; i >= 0; --i) { Deployer deployer = theDeployers.get(i); if (deployer.isParentFirst()) doUninstallParentLast(deployer, deploymentContext, true, true); else doUninstallParentFirst(deployer, deploymentContext, true, true); } } } /** * Do the uninstall parent last * * @param deployer the deployer * @param context the context * @param doChildren whether to do children * @param doComponents whether to do components */ protected void doUninstallParentLast(Deployer deployer, DeploymentContext context, boolean doChildren, boolean doComponents) { if (doChildren) { List children = context.getChildren(); if (children != null && children.isEmpty() == false) { for (int i = children.size() - 1; i >= 0; --i) { DeploymentContext child = children.get(i); doUninstallParentLast(deployer, child, true, true); } } } if (doComponents) { List components = context.getComponents(); if (components != null && components.isEmpty() == false) { for (int i = components.size() - 1; i >= 0; --i) { DeploymentContext component = components.get(i); doUninstallParentLast(deployer, component, false, true); } } } DeploymentUnit unit = context.getDeploymentUnit(); if (isRelevant(deployer, unit, context.isTopLevel(), context.isComponent())) doUndeploy(deployer, unit); else if (log.isTraceEnabled()) log.trace("Deployer " + deployer + " not relevant for " + context.getName()); } /** * Do the uninstall parent first * * @param deployer the deployer * @param context the context * @param doContext whether to do context * @param doComponents whether to do components */ protected void doUninstallParentFirst(Deployer deployer, DeploymentContext context, boolean doContext, boolean doComponents) { if (doContext) { DeploymentUnit unit = context.getDeploymentUnit(); if (isRelevant(deployer, unit, context.isTopLevel(), context.isComponent())) doUndeploy(deployer, unit); else if (log.isTraceEnabled()) log.trace("Deployer " + deployer + " not relevant for " + context.getName()); } if (doComponents) { List components = context.getComponents(); if (components != null && components.isEmpty() == false) { for (int i = components.size() - 1; i >= 0; --i) { DeploymentContext component = components.get(i); doUninstallParentFirst(deployer, component, true, true); } } } List children = context.getChildren(); if (children != null && children.isEmpty() == false) { for (int i = children.size() - 1; i >= 0; --i) { DeploymentContext child = children.get(i); doUninstallParentFirst(deployer, child, true, true); } } } /** * Do a deployment * * @param deployer the deployer * @param unit the deployment unit * @throws DeploymentException for any error */ protected void doDeploy(Deployer deployer, DeploymentUnit unit) throws DeploymentException { long time = 0; boolean collectStats = this.collectStats; if (collectStats) time = System.currentTimeMillis(); try { deployer.deploy(unit); } finally { if (collectStats) { time = System.currentTimeMillis() - time; if (time > 0) { synchronized (this) { if (deploymentTimes == null) deploymentTimes = new DeployerStatistics();; String deployerName = deployer.toString(); String deploymentName = unit.getName(); deploymentTimes.addStatistic(deployerName, deploymentName, time); } } } } } /** * Do an undeployment * * @param deployer the deployer * @param unit the deployment unit */ protected void doUndeploy(Deployer deployer, DeploymentUnit unit) { deployer.undeploy(unit); } /** * Build a list of deployers for this stage * * @param stageName the stage name * @return the deployers */ protected synchronized List getDeployersList(String stageName) { List deployers = deployersByStage.get(stageName); if (deployers == null || deployers.isEmpty()) return Collections.emptyList(); return deployers; } /** * Test whether a deployer is relevant * * @param deployer deployer * @param unit the deployment unit * @param isTopLevel whether this is a top level deployment * @param isComponent whether this is a component * @return the deployers */ protected boolean isRelevant(Deployer deployer, DeploymentUnit unit, boolean isTopLevel, boolean isComponent) { // Deployer only wants top level if (deployer.isTopLevelOnly() && isTopLevel == false) return false; // Deployer only wants components if (deployer.isComponentsOnly() && isComponent == false) return false; // Deployer doesn't wants components if (deployer.isWantComponents() == false && isComponent) return false; if (deployer.isAllInputs() == false) { // No attachment for the input type Class input = deployer.getInput(); if (input != null && unit.getAttachment(input) == null) return false; } return true; } /** * Insert the new Deployer. * * @param original the original deployers * @param newDeployer the new deployer * @return the sorted deployers */ protected List insert(List original, Deployer newDeployer) { DeployerSorter sorter = DeployerSorterFactory.newSorter(); return sorter.sortDeployers(original, newDeployer); } /** * Set the deployment state for a context and its children * * @param context the context * @param state the state * @param ifState the ifState */ private static void setState(DeploymentContext context, DeploymentState state, DeploymentState ifState) { if (ifState == null || ifState.equals(context.getState())) context.setState(state); List children = context.getChildren(); if (children != null && children.isEmpty() == false) { for (DeploymentContext child : children) setState(child, state, ifState); } } /** * Remove a classloader for a context and its children * * @param context the context */ private static void removeClassLoader(DeploymentContext context) { context.removeClassLoader(); List children = context.getChildren(); if (children != null && children.isEmpty() == false) { for (DeploymentContext child : children) removeClassLoader(child); } } /** * Cleanup the deployment context * * @param context the context */ private static void cleanup(DeploymentContext context) { context.cleanup(); List children = context.getChildren(); if (children != null && children.isEmpty() == false) { for (DeploymentContext child : children) cleanup(child); } List components = context.getComponents(); if (components != null && components.isEmpty() == false) { for (DeploymentContext component : components) cleanup(component); } } /** * Register a deployment context's mbean * * @param context the context */ protected void registerMBean(DeploymentContext context) { if (server != null && isRegisterMBeans() && context instanceof DeploymentMBean) { try { DeploymentMBean depMBean = (DeploymentMBean) context; server.registerMBean(context, depMBean.getObjectName()); } catch (Exception e) { log.warn("Unable to register deployment mbean " + context.getName(), e); } } } /** * Unregister a deployment context's mbean * * @param context the context */ protected void unregisterMBean(DeploymentContext context) { if (server != null && isRegisterMBeans() && context instanceof DeploymentMBean ) { try { DeploymentMBean depMBean = (DeploymentMBean) context; server.unregisterMBean(depMBean.getObjectName()); } catch (Exception e) { log.trace("Unable to unregister deployment mbean " + context.getName(), e); } } } public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception { this.server = server; return name; } public void postRegister(Boolean registrationDone) { } public void preDeregister() throws Exception { } public void postDeregister() { } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/DeploymentControllerContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000644000175000017500000000405511000360030033442 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.deployers; import org.jboss.dependency.plugins.AbstractControllerContext; import org.jboss.dependency.spi.ControllerMode; import org.jboss.deployers.structure.spi.DeploymentContext; /** * DeploymentControllerContext. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentControllerContext extends AbstractControllerContext { /** The deployment context */ private DeploymentContext deploymentContext; /** * Create a new DeploymentControllerContext. * * @param context the deployment context * @param deployers the deployers */ public DeploymentControllerContext(DeploymentContext context, DeployersImpl deployers) { super(context.getName(), deployers); this.deploymentContext = context; setMode(ControllerMode.MANUAL); } /** * Get the deploymentContext. * * @return the deploymentContext. */ DeploymentContext getDeploymentContext() { return deploymentContext; } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/DeployersImplMBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000644000175000017500000000340511072426072033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.deployers; /** * DeployersImplMBean. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface DeployersImplMBean { /** * List the deployer times * * @param details whether to show details * @return the deployer times */ String listDeployerTimes(boolean details); /** * List the deployers for each stage in order * * @param stageName the stage name or null for all stages * @return an html formatted table */ String listDeployers(String stageName); /** * List the deployers for a given attachment * * @param attachment the attachment name * @return an html formatted table */ String listDeployersByAttachment(String attachment); } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/BasicStatistic.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000644000175000017500000000423711061472572033472 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.deployers; /** * BasicStatistic. * * @author Adrian Brock * @version $Revision: 1.1 $ */ class BasicStatistic implements Comparable { /** The name */ private String name; /** The total time */ private long time = 0; /** * Create a new BasicStatistic. * * @param name the name */ public BasicStatistic(String name) { this.name = name; } /** * Create a new BasicStatistic with the given time. * * @param name the name * @param time the time */ public BasicStatistic(String name, long time) { this.name = name; this.time = time; } /** * Get the name. * * @return the name. */ public String getName() { return name; } /** * Get the time. * * @return the time. */ public long getTime() { return time; } /** * Add some time * * @param time the time to add */ public void addTime(long time) { this.time += time; } public int compareTo(BasicStatistic o) { return (int) (o.getTime() - getTime()); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deployers/DeployerWrapper.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/deplo0000644000175000017500000001545511104173360033465 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.deployers; import java.util.Collections; import java.util.Map; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.managed.ManagedObjectCreator; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.helpers.DeployerTracking; import org.jboss.logging.Logger; import org.jboss.managed.api.ManagedObject; /** * DeployerWrapper.

* * To avoid any problems with error handling by the deployers. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerWrapper implements Deployer, ManagedObjectCreator { /** The log */ private Logger log; /** The deployer */ private Deployer deployer; /** The managed object creator */ private ManagedObjectCreator managedObjectCreator; /** The context classloader of the person registering the deployer */ private ClassLoader classLoader; /** * Create a new DeployerWrapper. * * @param deployer the deployer */ public DeployerWrapper(Deployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); this.deployer = deployer; if (deployer instanceof ManagedObjectCreator) this.managedObjectCreator = (ManagedObjectCreator) deployer; this.log = Logger.getLogger(deployer.getClass()); this.classLoader = SecurityActions.getContextClassLoader(); } /** * Get the managedObjectCreator. * * @return the managedObjectCreator. */ public ManagedObjectCreator getManagedObjectCreator() { return managedObjectCreator; } /** * Set the managedObjectCreator. * * @param managedObjectCreator the managedObjectCreator. */ public void setManagedObjectCreator(ManagedObjectCreator managedObjectCreator) { this.managedObjectCreator = managedObjectCreator; } public int getRelativeOrder() { return deployer.getRelativeOrder(); } public void setRelativeOrder(int order) { deployer.setRelativeOrder(order); } public boolean isAllInputs() { return deployer.isAllInputs(); } public boolean isComponentsOnly() { return deployer.isComponentsOnly(); } public boolean isWantComponents() { return deployer.isWantComponents(); } public boolean isTopLevelOnly() { return deployer.isTopLevelOnly(); } public Class getInput() { return deployer.getInput(); } public Class getOutput() { return deployer.getOutput(); } public Set getInputs() { Set result = deployer.getInputs(); if (result == null) return Collections.emptySet(); return result; } public Set getOutputs() { Set result = deployer.getOutputs(); if (result == null) return Collections.emptySet(); return result; } public DeploymentStage getStage() { return deployer.getStage(); } public boolean isParentFirst() { return deployer.isParentFirst(); } public void deploy(DeploymentUnit unit) throws DeploymentException { if (unit == null) throw new IllegalArgumentException("Null unit"); DeployerTracking.push(deployer.toString()); ClassLoader previous = SecurityActions.setContextClassLoader(classLoader); try { log.trace("Deploying: " + unit.getName()); deployer.deploy(unit); log.trace("Deployed: " + unit.getName()); } catch (Throwable t) { log.debug("Error during deploy: " + unit.getName(), t); throw DeploymentException.rethrowAsDeploymentException("Error during deploy: " + unit.getName(), t); } finally { DeployerTracking.pop(); SecurityActions.resetContextClassLoader(previous); } } public void undeploy(DeploymentUnit unit) { if (unit == null) throw new IllegalArgumentException("Null unit"); DeployerTracking.push(deployer.toString()); ClassLoader previous = SecurityActions.setContextClassLoader(classLoader); try { log.trace("Undeploying: " + unit.getName()); deployer.undeploy(unit); log.trace("Undeployed: " + unit.getName()); } catch (Throwable t) { log.error("Error during undeploy: " + unit.getName(), t); } finally { DeployerTracking.pop(); SecurityActions.resetContextClassLoader(previous); } } public void build(DeploymentUnit unit, Set outputs, Map managedObjects) throws DeploymentException { ClassLoader previous = SecurityActions.setContextClassLoader(classLoader); try { ManagedObjectCreator creator = getManagedObjectCreator(); if (creator != null) { creator.build(unit, outputs, managedObjects); } } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error building managed objects for " + unit.getName(), t); } finally { SecurityActions.resetContextClassLoader(previous); } } @Override public boolean equals(Object obj) { if (obj == this) return true; if (obj == null || obj instanceof Deployer == false) return false; if (obj instanceof DeployerWrapper) obj = ((DeployerWrapper) obj).deployer; return deployer.equals(obj); } @Override public int hashCode() { return deployer.hashCode(); } @Override public String toString() { return deployer.toString(); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000755000175000017500000000000011620060463033467 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/ParametersElement.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000662111037353520033477 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Arrays; import org.jboss.metadata.spi.signature.ConstructorParametersSignature; import org.jboss.metadata.spi.signature.MethodParametersSignature; import org.jboss.metadata.spi.signature.Signature; /** * Parameters annotations element. * * @param the annotation type * @param the annotated element type * @author Ales Justin */ public class ParametersElement extends DefaultElement { public ParametersElement(ClassLoader classLoader, String className, Signature signature, Class annClass, A annotation, Class aoClass) { super(classLoader, className, signature, annClass, annotation, aoClass); } protected A readAnnotation() { Annotation[] annotations = null; Class clazz = getOwner(); if (signature instanceof ConstructorParametersSignature) { ConstructorParametersSignature cps = (ConstructorParametersSignature)signature; try { Constructor constructor = clazz.getConstructor(signature.getParametersTypes(clazz)); annotations = constructor.getParameterAnnotations()[cps.getParam()]; } catch (NoSuchMethodException ignored) { } } else if (signature instanceof MethodParametersSignature) { MethodParametersSignature mps = (MethodParametersSignature)signature; try { Method method = clazz.getMethod(signature.getName(), signature.getParametersTypes(clazz)); annotations = method.getParameterAnnotations()[mps.getParam()]; } catch (NoSuchMethodException ignored) { } } if (annotations == null || annotations.length == 0) throw new IllegalArgumentException("Expected annotations " + className + "." + signature); for(Annotation annotation : annotations) { if (annClass.equals(annotation.annotationType())) return annClass.cast(annotation); } throw new IllegalArgumentException("No matching annotation: " + Arrays.asList(annotations)); } }././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/ScopedGenericAnnotationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000401311043572720033472 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import javassist.scopedpool.ScopedClassPoolRepository; import javassist.ClassPool; /** * Scoped generic annotation deployer. * * @author Ales Justin */ public class ScopedGenericAnnotationDeployer extends GenericAnnotationDeployer { private ScopedClassPoolRepository repository; public ScopedGenericAnnotationDeployer() { } public ScopedGenericAnnotationDeployer(ScopedClassPoolRepository repository) { this.repository = repository; } /** * Set scoped class pool repository. * * @param repository the scoped class pool repository */ public void setRepository(ScopedClassPoolRepository repository) { this.repository = repository; } protected ClassPool createClassPool(ClassLoader classLoader) { if (repository != null) return repository.findClassPool(classLoader); return super.createClassPool(classLoader); } }././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/DefaultAnnotationEnvironment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000002334011113261537033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.io.Serializable; import java.lang.annotation.Annotation; import java.lang.annotation.ElementType; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.spi.annotations.Element; import org.jboss.logging.Logger; import org.jboss.metadata.spi.signature.Signature; import org.jboss.util.collection.CollectionsFactory; /** * DefaultAnnotationEnvironment. * * @author Ales Justin */ public class DefaultAnnotationEnvironment extends WeakClassLoaderHolder implements AnnotationEnvironment, Serializable { /** The serial version UID */ private static final long serialVersionUID = 1L; /** The log */ private static final Logger log = Logger.getLogger(DefaultAnnotationEnvironment.class); /** The info map */ private transient Map, Map>> env; /** The checked class names */ private transient Set checkedClassNames; /** Should we keep the annotation */ private boolean keepAnnotations; public DefaultAnnotationEnvironment(ClassLoader classLoader) { super(classLoader); env = new HashMap, Map>>(); checkedClassNames = new HashSet(); } /** * Set the keep annotations flag. * * @param keepAnnotations the keep annotations flag */ public void setKeepAnnotations(boolean keepAnnotations) { this.keepAnnotations = keepAnnotations; } /** * Get env map. * * @return the env map */ protected Map, Map>> getEnv() { if (env == null) throw new IllegalArgumentException("Null env, previously serialized?"); return env; } /** * Was class name already checked. * * @param className the class name * @return true if already checked, false otherwise */ boolean isAlreadyChecked(String className) { return checkedClassNames.contains(className); } /** * Put the annotation info. * * @param annotation the annotation * @param type the annotation type * @param className the class name * @param signature the signature */ void putAnnotation(Annotation annotation, ElementType type, String className, Signature signature) { Class annClass = annotation.annotationType(); if (log.isTraceEnabled()) log.trace("Adding annotation @" + annClass.getSimpleName() + " for " + className + " at type " + type + ", signature: " + signature); // add to checked checkedClassNames.add(className); Map, Map>> env = getEnv(); Map> elements = env.get(annClass); if (elements == null) { elements = new HashMap>(); env.put(annClass, elements); } Set classes = elements.get(type); if (classes == null) { classes = CollectionsFactory.createLazySet(); elements.put(type, classes); } ClassSignaturePair pair; if (keepAnnotations) pair = new ClassSignaturePair(className, signature, annotation); else pair = new ClassSignaturePair(className, signature); classes.add(pair); } /** * Get matching cs pairs. * * @param annClass the annotation class * @param type the annotation type * @return class names */ protected Set getCSPairs(Class annClass, ElementType type) { Set pairs = null; Map> elements = getEnv().get(annClass); if (elements != null) pairs = elements.get(type); return (pairs != null) ? pairs : Collections.emptySet(); } /** * Transform class names into classes. * * @param the annotation type * @param the annotated element type * @param type the annotation type * @param annClass the annotation class * @param aoClass the ao class * @return classes */ protected Set> transformToElements( ElementType type, Class annClass, Class aoClass ) { Set pairs = getCSPairs(annClass, type); if (pairs.isEmpty()) return Collections.emptySet(); ClassLoader classLoader = getClassLoader(); Set> elements = new HashSet>(); for (ClassSignaturePair pair : pairs) { String className = pair.getClassName(); A annotation = annClass.cast(pair.getAnnotation()); Element element; if (type == ElementType.TYPE) element = new ClassElement(classLoader, className, annClass, annotation); else if (type == ElementType.PARAMETER) element = new ParametersElement(classLoader, className, pair.getSignature(), annClass, annotation, aoClass); else element = new DefaultElement(classLoader, className, pair.getSignature(), annClass, annotation, aoClass); elements.add(element); } return elements; } public boolean hasClassAnnotatedWith(Class annotation) { return getCSPairs(annotation, ElementType.TYPE).isEmpty() == false; } @SuppressWarnings("unchecked") public Set>> classIsAnnotatedWith(Class annotation) { return (Set) transformToElements(ElementType.TYPE, annotation, Class.class); } @SuppressWarnings("unchecked") public Set>> classHasConstructorAnnotatedWith(Class annotation) { return (Set) transformToElements(ElementType.CONSTRUCTOR, annotation, Constructor.class); } public Set> classHasFieldAnnotatedWith(Class annotation) { return transformToElements(ElementType.FIELD, annotation, Field.class); } public Set> classHasMethodAnnotatedWith(Class annotation) { return transformToElements(ElementType.METHOD, annotation, Method.class); } public Set> classHasParameterAnnotatedWith(Class annotation) { return transformToElements(ElementType.PARAMETER, annotation, AnnotatedElement.class); } /** * Load the annotation class. * * @param annotationName the annoation class name * @return annotation class */ @SuppressWarnings("unchecked") protected Class getAnnotationClass(String annotationName) { Class clazz = loadClass(annotationName); if (Annotation.class.isAssignableFrom(clazz) == false) throw new IllegalArgumentException("Annotation name " + annotationName + " doesn't extend Annotation class."); return (Class)clazz; } public boolean hasClassAnnotatedWith(String annotationName) { return hasClassAnnotatedWith(getAnnotationClass(annotationName)); } public Set>> classIsAnnotatedWith(String annotationName) { return classIsAnnotatedWith(getAnnotationClass(annotationName)); } public Set>> classHasConstructorAnnotatedWith(String annotationName) { return classHasConstructorAnnotatedWith(getAnnotationClass(annotationName)); } public Set> classHasFieldAnnotatedWith(String annotationName) { return classHasFieldAnnotatedWith(getAnnotationClass(annotationName)); } public Set> classHasMethodAnnotatedWith(String annotationName) { return classHasMethodAnnotatedWith(getAnnotationClass(annotationName)); } public Set> classHasParameterAnnotatedWith(String annotationName) { return classHasParameterAnnotatedWith(getAnnotationClass(annotationName)); } } ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/GenericAnnotationResourceVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000002774611113261537033513 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.io.IOException; import java.io.InputStream; import java.lang.annotation.Annotation; import java.lang.annotation.ElementType; import java.util.List; import java.util.ArrayList; import javassist.ClassPool; import javassist.CtBehavior; import javassist.CtClass; import javassist.CtConstructor; import javassist.CtMember; import javassist.CtMethod; import javassist.NotFoundException; import org.jboss.classloading.spi.visitor.ClassFilter; import org.jboss.classloading.spi.visitor.ResourceContext; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.visitor.ResourceVisitor; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.logging.Logger; import org.jboss.metadata.spi.signature.Signature; import org.jboss.metadata.spi.signature.javassist.JavassistConstructorParametersSignature; import org.jboss.metadata.spi.signature.javassist.JavassistMethodParametersSignature; import org.jboss.metadata.spi.signature.javassist.JavassistSignatureFactory; /** * Generic annotation scanner deployer. * * @author Ales Justin */ public class GenericAnnotationResourceVisitor implements ResourceVisitor { private static final Logger log = Logger.getLogger(GenericAnnotationResourceVisitor.class); private ResourceFilter resourceFilter = ClassFilter.INSTANCE; private ClassPool pool; private boolean forceAnnotations; private boolean checkSuper; private boolean checkInterfaces = true; private DefaultAnnotationEnvironment env; private CtClass objectCtClass; public GenericAnnotationResourceVisitor(ClassLoader classLoader) { this(ClassPool.getDefault(), classLoader); } public GenericAnnotationResourceVisitor(ClassPool pool, ClassLoader classLoader) { if (pool == null) throw new IllegalArgumentException("Null pool"); if (classLoader == null) throw new IllegalArgumentException("Null classloader"); this.pool = pool; this.env = new DefaultAnnotationEnvironment(classLoader); this.objectCtClass = pool.makeClass(Object.class.getName()); } public ResourceFilter getFilter() { return resourceFilter; } public void visit(ResourceContext resource) { try { InputStream stream = resource.getInputStream(); if (stream == null) throw new IllegalArgumentException("Null resource input stream: " + resource); try { CtClass ctClass = pool.makeClass(stream); try { List commit = createCommitList(); handleCtClass(ctClass, commit); if (commit.isEmpty() == false) { for (CommitElement ce : commit) { env.putAnnotation(ce.getAnnotation(), ce.getType(), ce.getClassName(), ce.getSignature()); } } } finally { ctClass.detach(); } } finally { try { stream.close(); } catch (IOException ignored) { } } } catch (ClassNotFoundException e) { if (forceAnnotations) throw new RuntimeException(e); logThrowable(resource, e); } catch (Throwable t) { logThrowable(resource, t); } } /** * Create commit list. * * @return the commit list */ protected List createCommitList() { return forceAnnotations ? new EnvPutList(env) : new ArrayList(); } /** * Log throwable. * * @param resource the resource we're visiting * @param t the throwable */ protected void logThrowable(ResourceContext resource, Throwable t) { if (log.isTraceEnabled()) log.trace("Exception reading resource: " + resource.getResourceName(), t); } /** * Handle CtClass for annotations. * * @param ctClass the ct class instance * @param commit the commit list * @throws ClassNotFoundException for any annotations lookup problems * @throws NotFoundException for any annotations lookup problems */ protected void handleCtClass(CtClass ctClass, List commit) throws ClassNotFoundException, NotFoundException { if (ctClass == null || objectCtClass.equals(ctClass)) return; String className = ctClass.getName(); if (env.isAlreadyChecked(className)) { if (log.isTraceEnabled()) log.trace("Skipping already checked class name: " + className); return; } if (checkInterfaces == false && ctClass.isInterface()) { if (log.isTraceEnabled()) log.trace("Skipping interface: " + className); return; } if (log.isTraceEnabled()) log.trace("Scanning class " + className + " for annotations"); Object[] annotations = forceAnnotations ? ctClass.getAnnotations() : ctClass.getAvailableAnnotations(); handleAnnotations(ElementType.TYPE, (Signature)null, annotations, className, commit); handleCtMembers(ElementType.CONSTRUCTOR, ctClass.getDeclaredConstructors(), className, commit); handleCtMembers(ElementType.METHOD, ctClass.getDeclaredMethods(), className, commit); handleCtMembers(ElementType.FIELD, ctClass.getDeclaredFields(), className, commit); if (checkSuper) { if (checkInterfaces) { // interfaces CtClass[] interfaces = ctClass.getInterfaces(); if (interfaces != null && interfaces.length > 0) { for (CtClass intf : interfaces) handleCtClass(intf, commit); } } // super class handleCtClass(ctClass.getSuperclass(), commit); } } /** * Handle CtMembers for annotations. * * @param type where we found the annotations * @param members the ct member instances * @param className the className * @param commit the commit list * @throws ClassNotFoundException for any annotations lookup problems */ protected void handleCtMembers(ElementType type, CtMember[] members, String className, List commit) throws ClassNotFoundException { if (members != null && members.length > 0) { for (CtMember member : members) { Object[] annotations = forceAnnotations ? member.getAnnotations() : member.getAvailableAnnotations(); handleAnnotations(type, member, annotations, className, commit); if (member instanceof CtBehavior) { CtBehavior behavior = (CtBehavior)member; Object[][] paramAnnotations = forceAnnotations ? behavior.getParameterAnnotations() : behavior.getAvailableParameterAnnotations(); for (int index = 0; index < paramAnnotations.length; index++) { handleAnnotations(ElementType.PARAMETER, getBehaviorSignature(behavior, index), paramAnnotations[index], className, commit); } } } } } /** * Get parameters signature. * * @param behavior the ct behavior * @param index the index * @return parameters signature * @throws ClassNotFoundException for any error */ protected static Signature getBehaviorSignature(CtBehavior behavior, int index) throws ClassNotFoundException { try { if (behavior instanceof CtConstructor) return new JavassistConstructorParametersSignature((CtConstructor)behavior, index); else if (behavior instanceof CtMethod) return new JavassistMethodParametersSignature((CtMethod)behavior, index); else throw new IllegalArgumentException("Unknown ct behavior: " + behavior); } catch (NotFoundException e) { throw new ClassNotFoundException("Exception creating signature: " + behavior, e); } } /** * Handle annotations. * * @param type where we found the annotations * @param member the ct member * @param annotations the actual annotations * @param className the className * @param commit the commit list */ protected static void handleAnnotations(ElementType type, CtMember member, Object[] annotations, String className, List commit) { Signature signature = null; if (member != null) signature = JavassistSignatureFactory.getSignature(member); handleAnnotations(type, signature, annotations, className, commit); } /** * Handle annotations. * * @param type where we found the annotations * @param signature the signature * @param annotations the actual annotations * @param className the className * @param commit the commit list */ protected static void handleAnnotations(ElementType type, Signature signature, Object[] annotations, String className, List commit) { if (annotations != null && annotations.length > 0) { for (Object annObject : annotations) { Annotation annotation = Annotation.class.cast(annObject); commit.add(new CommitElement(annotation, type, className, signature)); } } } /** * Set the resource filter. * * @param resourceFilter the resource filter */ public void setResourceFilter(ResourceFilter resourceFilter) { this.resourceFilter = resourceFilter; } /** * Should we force all annotations to be available. * * @param forceAnnotations the force annotations flag */ public void setForceAnnotations(boolean forceAnnotations) { this.forceAnnotations = forceAnnotations; } /** * Set the keep annotations flag. * * @param keepAnnotations the keep annotations flag */ public void setKeepAnnotations(boolean keepAnnotations) { env.setKeepAnnotations(keepAnnotations); } /** * Should we check super class for annotations as well. * * @param checkSuper the check super flag */ public void setCheckSuper(boolean checkSuper) { this.checkSuper = checkSuper; } /** * Should we check interfaces for annotations as well. * * @param checkInterfaces the check interfaces flag */ public void setCheckInterfaces(boolean checkInterfaces) { this.checkInterfaces = checkInterfaces; } /** * Get the built environment. * * @return the annoattion environment */ public AnnotationEnvironment getEnv() { return env; } }././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/ClassSignaturePair.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000602111034624717033477 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.lang.annotation.Annotation; import org.jboss.metadata.spi.signature.Signature; import org.jboss.util.JBossObject; /** * Class name and signature pair. * With those two we can re-create annotation value. * * If the keepAnnotations flag is on in DefaultAnnotationEnvironment * we cache the annotation value from GenericAnnotationResourceVisitor. * * @author Ales Justin */ public class ClassSignaturePair extends JBossObject { private String className; private Signature signature; private Annotation annotation; public ClassSignaturePair(String className, Signature signature) { this(className, signature, null); } public ClassSignaturePair(String className, Signature signature, Annotation annotation) { if (className == null) throw new IllegalArgumentException("Null class name"); this.className = className; this.signature = signature; this.annotation = annotation; } /** * Get the classname. * * @return the classname */ public String getClassName() { return className; } /** * Get the signature. * * @return the signature */ public Signature getSignature() { return signature; } /** * Get the annotation. * * @return the annotation */ public Annotation getAnnotation() { return annotation; } protected int getHashCode() { int hash = className.hashCode(); if (signature != null) hash += 7 * signature.hashCode(); return hash; } public boolean equals(Object obj) { if (obj instanceof ClassSignaturePair == false) return false; ClassSignaturePair csPair = (ClassSignaturePair)obj; if (className.equals(csPair.getClassName())) return equals(signature, csPair.getSignature()); else return false; } } ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/EnvPutList.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000346411113261537033502 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.util.AbstractList; /** * Put elements directly into env * * @author Ales Justin */ class EnvPutList extends AbstractList { private DefaultAnnotationEnvironment env; EnvPutList(DefaultAnnotationEnvironment env) { if (env == null) throw new IllegalArgumentException("Null env."); this.env = env; } public boolean add(CommitElement ce) { env.putAnnotation(ce.getAnnotation(), ce.getType(), ce.getClassName(), ce.getSignature()); return true; } public CommitElement get(int index) { throw new UnsupportedOperationException("Should not be invoked."); } public int size() { return 0; } }././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/DefaultElement.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000001032211061172461033470 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import org.jboss.metadata.spi.signature.ConstructorParametersSignature; import org.jboss.metadata.spi.signature.ConstructorSignature; import org.jboss.metadata.spi.signature.FieldSignature; import org.jboss.metadata.spi.signature.MethodParametersSignature; import org.jboss.metadata.spi.signature.MethodSignature; import org.jboss.metadata.spi.signature.Signature; import org.jboss.reflect.plugins.introspection.ReflectionUtils; /** * Default annotations element. * * @param the annotation type * @param the annotated element type * @author Ales Justin */ public class DefaultElement extends AbstractElement { protected Signature signature; protected Class aoClass; public DefaultElement(ClassLoader classLoader, String className, Signature signature, Class annClass, A annotation, Class aoClass) { super(classLoader, className, annClass, annotation); if (signature == null) throw new IllegalArgumentException("Null signature"); if (aoClass == null) throw new IllegalArgumentException("Null ao class"); this.signature = signature; this.aoClass = aoClass; } public M getAnnotatedElement() { AnnotatedElement result = null; Class clazz = getOwner(); if (signature instanceof ConstructorSignature || signature instanceof ConstructorParametersSignature) { try { result = clazz.getConstructor(signature.getParametersTypes(clazz)); } catch (NoSuchMethodException ignored) { } } else if (signature instanceof MethodSignature || signature instanceof MethodParametersSignature) { try { result = clazz.getMethod(signature.getName(), signature.getParametersTypes(clazz)); } catch (NoSuchMethodException ignored) { } } else if (signature instanceof FieldSignature) { result = ReflectionUtils.findField(clazz, signature.getName()); } if (result == null) throw new IllegalArgumentException("Expected accessible object " + className + "." + signature); if (aoClass.isInstance(result) == false) throw new IllegalArgumentException("Expected accessible object " + className + "." + signature + " of type " + aoClass); return aoClass.cast(result); } public int getHashCode() { int hash = super.getHashCode(); hash += 19 * signature.hashCode(); hash += 37 * aoClass.hashCode(); return hash; } @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"}) public boolean equals(Object obj) { if (super.equals(obj) == false) return false; DefaultElement de = DefaultElement.class.cast(obj); if (aoClass.equals(de.aoClass) == false) return false; if (signature.equals(de.signature) == false) return false; return true; } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/AbstractPathMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000510611113261537033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.io.Serializable; import java.util.Set; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import org.jboss.deployers.spi.annotations.PathEntryMetaData; import org.jboss.deployers.spi.annotations.PathMetaData; /** * AbstractPathMetaData * * @author Ales Justin */ @XmlRootElement(name="path") @XmlType(name="pathType", propOrder={"includes", "excludes"}) public class AbstractPathMetaData implements PathMetaData, Serializable { private static final long serialVersionUID = 1L; private String pathName; private Set includes; private Set excludes; public String getPathName() { return pathName; } @XmlAttribute(name = "name", required = true) public void setPathName(String pathName) { this.pathName = pathName; } public Set getIncludes() { return includes; } @XmlElement(name = "include", type = AbstractPathEntryMetaData.class) public void setIncludes(Set includes) { this.includes = includes; } public Set getExcludes() { return excludes; } @XmlElement(name = "exclude", type = AbstractPathEntryMetaData.class) public void setExcludes(Set excludes) { this.excludes = excludes; } }././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/AbstractScanningMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000420411113261537033473 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.io.Serializable; import java.util.List; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import org.jboss.deployers.spi.annotations.PathMetaData; import org.jboss.deployers.spi.annotations.ScanningMetaData; import org.jboss.xb.annotations.JBossXmlSchema; /** * AbstractScanningMetaData * * @author Ales Justin */ @JBossXmlSchema(namespace="urn:jboss:scanning:1.0", elementFormDefault= XmlNsForm.QUALIFIED) @XmlRootElement(name="scanning") @XmlType(name="scanningType", propOrder={"paths"}) public class AbstractScanningMetaData implements ScanningMetaData, Serializable { private static final long serialVersionUID = 1L; private List paths; public List getPaths() { return paths; } @XmlElement(name="path", type = AbstractPathMetaData.class) public void setPaths(List paths) { this.paths = paths; } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/CommitElement.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000456611044106726033507 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.lang.annotation.Annotation; import java.lang.annotation.ElementType; import org.jboss.metadata.spi.signature.Signature; /** * Gathering annotation information. * * Only push all this info into AnnotationEnvironment if * complete lookup was successful. * * @author Ales Justin */ class CommitElement { private Annotation annotation; private ElementType type; private String className; private Signature signature; CommitElement(Annotation annotation, ElementType type, String className, Signature signature) { this.annotation = annotation; this.type = type; this.className = className; this.signature = signature; } /** * Get the annotation. * * @return the annotation */ public Annotation getAnnotation() { return annotation; } /** * Get element type. * * @return the element type */ public ElementType getType() { return type; } /** * Get class name. * * @return the class name */ public String getClassName() { return className; } /** * Get signature. * * @return the signature */ public Signature getSignature() { return signature; } }././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/ClassElement.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000335411037353520033477 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; /** * Class annotations element. * * @param the annotation type * @param the annotated element type * @author Ales Justin */ public class ClassElement extends AbstractElement { public ClassElement(ClassLoader classLoader, String className, Class annClass, A annotation) { super(classLoader, className, annClass, annotation); } @SuppressWarnings("unchecked") public M getAnnotatedElement() { AnnotatedElement em = getOwner(); return (M)em; } }././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/FilteredGenericAnnotationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000711111045550671033477 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.dependency.Module; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Filtered generic annotation scanner deployer. * * It first checks if there are some filters present * in deployment unit as attachment, * else falls back to deployers filters. * * @author Ales Justin */ public class FilteredGenericAnnotationDeployer extends ScopedGenericAnnotationDeployer { private ResourceFilter resourceFilter; private ResourceFilter recurseFilter; /** * Get filter. * Try attachment first, then deployer's filter. * * @param the expected class type * @param unit the deployment unit * @param expectedClass the expected class * @param suffix the suffix * @param defaultValue the default value * @return found filter or null */ protected T getFilter(DeploymentUnit unit, Class expectedClass, String suffix, T defaultValue) { String name = expectedClass.getName() + "." + (suffix != null ? suffix : ""); T result = unit.getAttachment(name, expectedClass); if (result == null) result = defaultValue; return result; } /** * We look for filter attachments: * * org.jboss.classloading.spi.visitor.ResourceFilter.resource - plain resource filter * * org.jboss.classloading.spi.visitor.ResourceFilter.recurse - recurse resource filter * * @param unit the deployment unit * @param module the underlying module * @param visitor the current generic annotation resource visitor */ protected void visitModule(DeploymentUnit unit, Module module, GenericAnnotationResourceVisitor visitor) { ResourceFilter filter = getFilter(unit, ResourceFilter.class, "resource", resourceFilter); if (filter == null) filter = visitor.getFilter(); ResourceFilter recurse = getFilter(unit, ResourceFilter.class, "recurse", recurseFilter); module.visit(visitor, filter, recurse, getUrls(unit)); } /** * Set resource filter. * * @param resourceFilter the resource filter */ public void setResourceFilter(ResourceFilter resourceFilter) { this.resourceFilter = resourceFilter; } /** * Set recurse filter. * * @param recurseFilter the recurse filter */ public void setRecurseFilter(ResourceFilter recurseFilter) { this.recurseFilter = recurseFilter; } }././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/GenericAnnotationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000001271211044573564033507 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.net.URL; import javassist.ClassPath; import javassist.ClassPool; import javassist.LoaderClassPath; import org.jboss.classloading.spi.dependency.Module; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Generic annotation scanner deployer. * * @author Ales Justin */ public class GenericAnnotationDeployer extends AbstractSimpleRealDeployer { private boolean forceAnnotations; private boolean keepAnnotations; private boolean checkInterfaces; public GenericAnnotationDeployer() { super(Module.class); setStage(DeploymentStages.POST_CLASSLOADER); setOutput(AnnotationEnvironment.class); checkInterfaces = true; } /** * Should we force all annotations to be available. * * @param forceAnnotations the force annotations flag */ public void setForceAnnotations(boolean forceAnnotations) { this.forceAnnotations = forceAnnotations; } /** * Set the keep annotations flag. * * @param keepAnnotations the keep annotations flag */ public void setKeepAnnotations(boolean keepAnnotations) { this.keepAnnotations = keepAnnotations; } /** * Should we check interfaces for annotations as well. * * @param checkInterfaces the check interfaces flag */ public void setCheckInterfaces(boolean checkInterfaces) { this.checkInterfaces = checkInterfaces; } /** * Create GenericAnnotationResourceVisitor. * * Can be used change existing GARV's filter. * Or determin if we need to force/keep annotations. * * @param unit the deployment unit * @param pool the class pool * @param classLoader the classloader * @return new generic annotation visitor */ protected GenericAnnotationResourceVisitor createGenericAnnotationResourceVisitor(DeploymentUnit unit, ClassPool pool, ClassLoader classLoader) { GenericAnnotationResourceVisitor visitor = new GenericAnnotationResourceVisitor(pool, classLoader); visitor.setForceAnnotations(forceAnnotations); visitor.setKeepAnnotations(keepAnnotations); visitor.setCheckInterfaces(checkInterfaces); return visitor; } /** * Create class pool. * * @param classLoader the class loader * @return javassist class pool */ protected ClassPool createClassPool(ClassLoader classLoader) { ClassPool pool = new ClassPool(); ClassPath classPath = new LoaderClassPath(classLoader); pool.insertClassPath(classPath); return pool; } /** * Visit module. * * Util method to add some behavior to Module * before we visit it. * * @param unit the deployment unit * @param module the module * @param visitor the resource visitor */ protected void visitModule(DeploymentUnit unit, Module module, GenericAnnotationResourceVisitor visitor) { module.visit(visitor, null, null, getUrls(unit)); } /** * Get the new root urls. * * @param unit the deployment unit * @return the new root urls */ protected URL[] getUrls(DeploymentUnit unit) { return null; } public void deploy(DeploymentUnit unit, Module module) throws DeploymentException { if (log.isTraceEnabled()) log.trace("Creating AnnotationEnvironment for " + unit.getName() + ", module: " + module + ", force annotations: " + forceAnnotations); ClassLoader classLoader = unit.getClassLoader(); ClassPool pool = createClassPool(classLoader); GenericAnnotationResourceVisitor visitor = createGenericAnnotationResourceVisitor(unit, pool, classLoader); // something in javassist uses TCL ClassLoader tcl = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); try { visitModule(unit, module, visitor); } finally { Thread.currentThread().setContextClassLoader(tcl); } unit.addAttachment(AnnotationEnvironment.class, visitor.getEnv()); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/WeakClassLoaderHolder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000464211052537704033505 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.lang.ref.WeakReference; import org.jboss.util.JBossObject; /** * ClassLoader holder helper. * * @author Ales Justin */ abstract class WeakClassLoaderHolder extends JBossObject { private transient WeakReference clRef; public WeakClassLoaderHolder(ClassLoader classLoader) { if (classLoader == null) throw new IllegalArgumentException("Null classloader"); clRef = new WeakReference(classLoader); } /** * Get the classloader from weak ref. * * @return the classloader */ protected ClassLoader getClassLoader() { if (clRef == null) throw new IllegalArgumentException("Null classloader ref, previously serialized?"); ClassLoader classLoader = clRef.get(); if (classLoader == null) throw new IllegalArgumentException("ClassLoader was already garbage collected."); return classLoader; } /** * Load class from class name. * * @param className the class name * @return loaded class */ protected Class loadClass(String className) { try { return Class.forName(className, false, getClassLoader()); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } }././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/FilterablePathEntry.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000253711113261537033502 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import org.jboss.classloader.spi.filter.ClassFilter; /** * FilterablePathEntry * * @author Ales Justin */ public interface FilterablePathEntry { /** * Get class filter. * * @return the filter */ ClassFilter getFilter(); } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/AbstractPathEntryMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000523511113261537033500 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.io.Serializable; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import org.jboss.classloader.spi.filter.ClassFilter; import org.jboss.classloader.spi.filter.PackageClassFilter; import org.jboss.deployers.spi.annotations.PathEntryMetaData; /** * AbstractPathEntryMetaData * * @author Ales Justin */ @XmlType(name="pathEntryType") public class AbstractPathEntryMetaData implements PathEntryMetaData, FilterablePathEntry, Serializable { private static final long serialVersionUID = 1L; private String name; private transient ClassFilter filter; @XmlTransient public ClassFilter getFilter() { if (filter == null) filter = PackageClassFilter.createPackageClassFilter(getNameInternal()); return filter; } @XmlTransient private String getNameInternal() { if (name == null) throw new IllegalArgumentException("Null name"); return name; } public String getName() { return name; } @XmlAttribute(name = "name", required = true) public void setName(String name) { this.name = name; } @Override public int hashCode() { return getNameInternal().hashCode(); } @Override public boolean equals(Object obj) { if (obj instanceof PathEntryMetaData == false) return false; PathEntryMetaData pemd = (PathEntryMetaData)obj; return getNameInternal().equals(pemd.getName()); } }././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annotations/AbstractElement.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/annot0000644000175000017500000000731711061172461033502 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.annotations; import java.lang.annotation.Annotation; import java.lang.ref.SoftReference; import java.lang.reflect.AnnotatedElement; import org.jboss.deployers.spi.annotations.Element; /** * Abstract annotations element. * * @param the annotation type * @param the annotated element type * @author Ales Justin */ public abstract class AbstractElement extends WeakClassLoaderHolder implements Element { protected String className; protected Class annClass; private A annotation; private SoftReference> classRef; public AbstractElement(ClassLoader classLoader, String className, Class annClass, A annotation) { super(classLoader); if (className == null) throw new IllegalArgumentException("Null className"); if (annClass == null) throw new IllegalArgumentException("Null annotation class"); this.className = className; this.annClass = annClass; this.annotation = annotation; } public String getOwnerClassName() { return className; } public Class getOwner() { if (classRef != null) { Class clazz = classRef.get(); if (clazz != null) return clazz; } Class clazz = loadClass(className); classRef = new SoftReference>(clazz); return clazz; } public A getAnnotation() { if (annotation == null) annotation = readAnnotation(); return annotation; } /** * Read the annotation. * * @return the read annotation */ protected A readAnnotation() { AnnotatedElement annotatedElement = getAnnotatedElement(); return annotatedElement.getAnnotation(annClass); } public int getHashCode() { int hash = className.hashCode(); hash += 7 * annClass.hashCode(); if (annotation != null) hash += 11 * annotation.hashCode(); return hash; } public boolean equals(Object obj) { if (obj == null || getClass().equals(obj.getClass()) == false) return false; AbstractElement ae = AbstractElement.class.cast(obj); if (className.equals(ae.className) == false) return false; if (annClass.equals(ae.annClass) == false) return false; // we don't check annotation // since I doubt classname + annClass + signature + aoClass is not enough // the only way this could happen is probably if class was diff version - diff annotation values return true; } }././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/main/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/main/0000755000175000017500000000000011620060462033352 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/main/MainDeployerImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/main/0000644000175000017500000007350511137607542033377 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.main; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.main.MainDeployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.managed.ManagedDeploymentCreator; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.StructuralDeployers; import org.jboss.deployers.structure.spi.helpers.RevertedDeploymentContextComparator; import org.jboss.deployers.structure.spi.main.MainDeployerStructure; import org.jboss.logging.Logger; import org.jboss.managed.api.ManagedDeployment; import org.jboss.managed.api.ManagedObject; import org.jboss.util.graph.Graph; import org.jboss.util.graph.Vertex; /** * MainDeployerImpl. * * @author Adrian Brock * @author Scott Stark * @author Ales Justin * @version $Revision: 83490 $ */ public class MainDeployerImpl implements MainDeployer, MainDeployerStructure { /** The log */ private static final Logger log = Logger.getLogger(MainDeployerImpl.class); /** Whether we are shutdown */ private AtomicBoolean shutdown = new AtomicBoolean(false); /** The deployers */ private Deployers deployers; /** The structural deployers */ private StructuralDeployers structuralDeployers; /** The ManagedDeploymentCreator plugin */ private ManagedDeploymentCreator mgtDeploymentCreator; /** The deployments by name */ private Map topLevelDeployments = new ConcurrentHashMap(); /** All deployments by name */ private Map allDeployments = new ConcurrentHashMap(); /** Deployments in error by name */ private Map errorDeployments = new ConcurrentHashMap(); /** Deployments missing deployers */ private Map missingDeployers = new ConcurrentHashMap(); /** The undeploy work */ private List undeploy = new CopyOnWriteArrayList(); /** The deploy work */ private List deploy = new CopyOnWriteArrayList(); /** The process lock */ private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); /** The top deployment context comparator */ private Comparator comparator; private Comparator reverted; /** * Set the top deployment context comparator. * * @param comparator the deployment context comparator */ public void setComparator(Comparator comparator) { if (comparator == null) throw new IllegalArgumentException("Null comparator"); this.comparator = comparator; this.reverted = new RevertedDeploymentContextComparator(comparator); } /** * Get the deployers * * @return the deployers */ public synchronized Deployers getDeployers() { return deployers; } /** * Set the deployers * * @param deployers the deployers * @throws IllegalArgumentException for null deployers */ public synchronized void setDeployers(Deployers deployers) { if (deployers == null) throw new IllegalArgumentException("Null deployers"); this.deployers = deployers; } /** * Get the structural deployers * * @return the structural deployers */ public synchronized StructuralDeployers getStructuralDeployers() { return structuralDeployers; } /** * Set the structural deployers * * @param deployers the deployers * @throws IllegalArgumentException for null deployers */ public synchronized void setStructuralDeployers(StructuralDeployers deployers) { if (deployers == null) throw new IllegalArgumentException("Null deployers"); structuralDeployers = deployers; } /** * Get managed deployment creator. * * @return the managed deployment creator */ public ManagedDeploymentCreator getMgtDeploymentCreator() { return mgtDeploymentCreator; } /** * Set managed deployment creator. * * @param mgtDeploymentCreator the managed deployment creator */ public void setMgtDeploymentCreator(ManagedDeploymentCreator mgtDeploymentCreator) { this.mgtDeploymentCreator = mgtDeploymentCreator; } public Deployment getDeployment(String name) { DeploymentContext context = getTopLevelDeploymentContext(name); if (context == null) return null; return context.getDeployment(); } @Deprecated public DeploymentContext getDeploymentContext(String name) { if (name == null) throw new IllegalArgumentException("Null name"); return allDeployments.get(name); } @Deprecated public DeploymentContext getDeploymentContext(String name, boolean errorNotFound) throws DeploymentException { DeploymentContext context = getDeploymentContext(name); if (errorNotFound && context == null) throw new DeploymentException("Context " + name + " not found"); return context; } public DeploymentUnit getDeploymentUnit(String name) { DeploymentContext context = getDeploymentContext(name); if (context == null) return null; return context.getDeploymentUnit(); } public DeploymentUnit getDeploymentUnit(String name, boolean errorNotFound) throws DeploymentException { DeploymentUnit unit = getDeploymentUnit(name); if (errorNotFound && unit == null) throw new DeploymentException("Unit " + name + " not found"); return unit; } /** * Get a top level deployment context by name * * @param name the name * @return the context */ public DeploymentContext getTopLevelDeploymentContext(String name) { if (name == null) throw new IllegalArgumentException("Null name"); return topLevelDeployments.get(name); } // TODO - introduce some interface or push to MDStructure /** * Get all deployments. * * @return all deployments */ public Collection getAll() { return Collections.unmodifiableCollection(allDeployments.values()); } /** * Get errors. * * @return the errors */ public Collection getErrors() { return Collections.unmodifiableCollection(errorDeployments.values()); } /** * Get missing deployers deployments. * * @return the missing deployer deployments */ public Collection getMissingDeployer() { return Collections.unmodifiableCollection(missingDeployers.values()); } public Collection getTopLevel() { List result = new ArrayList(); for (DeploymentContext context : topLevelDeployments.values()) { Deployment deployment = context.getDeployment(); if (deployment != null) result.add(deployment); else throw new IllegalStateException("Context has no deployment? " + context.getName()); } return result; } public void addDeployment(Deployment deployment) throws DeploymentException { addDeployment(deployment, true); } /** * Add a deployment * * @param deployment the deployment * @param addToDeploy should we add this deployment to deploy collection * @throws DeploymentException for any error */ protected void addDeployment(Deployment deployment, boolean addToDeploy) throws DeploymentException { if (deployment == null) throw new DeploymentException("Null context"); lockRead(); try { if (shutdown.get()) throw new DeploymentException("The main deployer is shutdown"); String name = deployment.getName(); log.debug("Add deployment: " + name); DeploymentContext previous = topLevelDeployments.get(name); boolean topLevelFound = false; if (previous != null) { log.debug("Removing previous deployment: " + previous.getName()); removeContext(previous, addToDeploy); topLevelFound = true; } if (topLevelFound == false) { previous = allDeployments.get(name); if (previous != null) throw new IllegalStateException("Deployment already exists as a subdeployment: " + name); } DeploymentContext context = null; try { context = determineStructure(deployment); if (DeploymentState.ERROR.equals(context.getState())) errorDeployments.put(name, context); context.getTransientAttachments().addAttachment(MainDeployer.class, this); topLevelDeployments.put(name, context); addContext(context, addToDeploy); } catch (DeploymentException e) { missingDeployers.put(name, deployment); throw e; } catch (Throwable t) { // was structure determined? if (context == null) missingDeployers.put(name, deployment); throw DeploymentException.rethrowAsDeploymentException("Error determining deployment structure for " + name, t); } } finally { unlockRead(); } } public boolean removeDeployment(Deployment deployment) throws DeploymentException { return removeDeployment(deployment, true); } /** * Remove a deployment by name * * @param deployment thedeployment * @param addToUndeploy should we add to undeploy collection * @return false when the context was previously unknown * @throws DeploymentException for any error */ protected boolean removeDeployment(Deployment deployment, boolean addToUndeploy) throws DeploymentException { if (deployment == null) throw new DeploymentException("Null deployment"); return removeDeployment(deployment.getName(), addToUndeploy); } public boolean removeDeployment(String name) throws DeploymentException { return removeDeployment(name, true); } /** * Remove a deployment by name * * @param name the name of the deployment * @param addToUndeploy should we add to undeploy collection * @return false when the context was previously unknown * @throws DeploymentException for any error */ protected boolean removeDeployment(String name, boolean addToUndeploy) throws DeploymentException { if (name == null) throw new DeploymentException("Null name"); lockRead(); try { if (shutdown.get()) throw new IllegalStateException("The main deployer is shutdown"); log.debug("Remove deployment context: " + name); DeploymentContext context = topLevelDeployments.remove(name); if (context == null) return false; context.getTransientAttachments().removeAttachment(MainDeployer.class); removeContext(context, addToUndeploy); return true; } finally { unlockRead(); } } public void deploy(Deployment... deployments) throws DeploymentException { if (deployments == null) throw new IllegalArgumentException("Null deployments."); if (deployers == null) throw new IllegalStateException("No deployers"); lockRead(); try { if (shutdown.get()) throw new IllegalStateException("The main deployer is shutdown"); DeploymentContext[] contexts = new DeploymentContext[deployments.length]; for(int i = 0; i < deployments.length; i++) { try { Deployment deployment = deployments[i]; addDeployment(deployment, false); DeploymentContext context = getTopLevelDeploymentContext(deployment.getName()); if (contexts == null) throw new DeploymentException("Deployment context not found: " + deployment.getName()); deployers.process(Collections.singletonList(context), null); contexts[i] = context; } catch(Throwable t) { DeploymentContext[] deployedContexts = new DeploymentContext[i]; System.arraycopy(contexts, 0, deployedContexts, 0, i); deployers.process(null, Arrays.asList(deployedContexts)); throw DeploymentException.rethrowAsDeploymentException("Unable to deploy deployments, cause: " + deployments[i], t); } } try { deployers.checkComplete(contexts); } catch (DeploymentException e) { deployers.process(null, Arrays.asList(contexts)); throw e; } } finally { unlockRead(); } } public void undeploy(Deployment... deployments) throws DeploymentException { if (deployments == null) throw new IllegalArgumentException("Null deployments."); if (deployers == null) throw new IllegalStateException("No deployers"); lockRead(); try { if (shutdown.get()) throw new IllegalStateException("The main deployer is shutdown"); for(Deployment deployment : deployments) { DeploymentContext context = getTopLevelDeploymentContext(deployment.getName()); if (context != null) { try { removeDeployment(deployment, false); deployers.process(null, Collections.singletonList(context)); } catch (DeploymentException e) { if (log.isTraceEnabled()) log.trace("Ignored exception while undeploying deployment " + deployment.getName() + ":" + e); } } else if (log.isTraceEnabled()) { log.trace("No such deployment present: " + deployment.getName()); } } } finally { unlockRead(); } } public void undeploy(String... names) throws DeploymentException { if (names == null) throw new IllegalArgumentException("Null names."); List deployments = new ArrayList(); for(String name : names) { DeploymentContext context = getTopLevelDeploymentContext(name); if (context != null) deployments.add(context.getDeployment()); else if (log.isTraceEnabled()) log.trace("No such deployment present: " + name); } if (deployments.isEmpty() == false) undeploy(deployments.toArray(new Deployment[deployments.size()])); } public void process() { if (deployers == null) throw new IllegalStateException("No deployers"); lockRead(); try { if (shutdown.get()) throw new IllegalStateException("The main deployer is shutdown"); List undeployContexts = null; List deployContexts = null; if (undeploy.isEmpty() == false) { // Undeploy in reverse order (subdeployments first) undeployContexts = new ArrayList(undeploy.size()); for (int i = undeploy.size() - 1; i >= 0; --i) undeployContexts.add(undeploy.get(i)); if (reverted != null) Collections.sort(undeployContexts, reverted); undeploy.clear(); } if (deploy.isEmpty() == false) { deployContexts = new ArrayList(deploy); if (comparator != null) Collections.sort(deployContexts, comparator); deploy.clear(); } if (undeployContexts == null && deployContexts == null) { log.debug("Asked to process() when there is nothing to do."); return; } try { deployers.process(deployContexts, undeployContexts); } catch (RuntimeException e) { throw e; } catch (Error e) { throw e; } catch (Throwable t) { throw new RuntimeException("Unexpected error in process()", t); } } finally { unlockRead(); } } public DeploymentStage getDeploymentStage(String deploymentName) throws DeploymentException { if (deployers == null) throw new IllegalStateException("No deployers"); lockRead(); try { DeploymentContext context = getTopLevelDeploymentContext(deploymentName); if (context == null) return DeploymentStages.NOT_INSTALLED; DeploymentStage result = deployers.getDeploymentStage(context); if (result != null) return result; else return DeploymentStages.NOT_INSTALLED; } catch (Error e) { throw e; } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error getting stage for " + deploymentName, t); } finally { unlockRead(); } } public void change(String deploymentName, DeploymentStage stage) throws DeploymentException { if (deployers == null) throw new IllegalStateException("No deployers"); lockRead(); try { DeploymentContext context = getTopLevelDeploymentContext(deploymentName); if (context == null) throw new DeploymentException("Top level deployment " + deploymentName + " not found"); try { deployers.change(context, stage); } catch (Error e) { throw e; } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error changing context " + deploymentName + " to stage " + stage, t); } } finally { unlockRead(); } } public void prepareShutdown() { if (deployers != null) deployers.shutdown(); } public void shutdown() { prepareShutdown(); lockWrite(); try { while (topLevelDeployments.isEmpty() == false) { // Remove all the contexts for (DeploymentContext context : topLevelDeployments.values()) { topLevelDeployments.remove(context.getName()); removeContext(context, true); } // Do it process(); } shutdown.set(true); } finally { unlockWrite(); } } public void checkComplete() throws DeploymentException { if (deployers == null) throw new IllegalStateException("Null deployers"); deployers.checkComplete(errorDeployments.values(), missingDeployers.values()); } /** * Get the names from deployments. * * @param deployments the deployments * @return depolyment names */ protected static String[] getDeploymentNames(Deployment... deployments) { if (deployments == null) throw new IllegalArgumentException("Null deployments"); String[] names = new String[deployments.length]; for(int i = 0; i < deployments.length; i++) { if (deployments[i] == null) throw new IllegalArgumentException("Null deployment: " + i); names[i] = deployments[i].getName(); } return names; } /** * Get the deployment contexts. * * @param names the deployment names * @return depolyment contexts * @throws DeploymentException if context is not found */ protected DeploymentContext[] getDeploymentContexts(String... names) throws DeploymentException { if (names == null) throw new IllegalArgumentException("Null names"); DeploymentContext[] contexts = new DeploymentContext[names.length]; for(int i = 0; i < names.length; i++) { contexts[i] = getTopLevelDeploymentContext(names[i]); if (contexts[i] == null) throw new DeploymentException("Deployment context not found: " + names[i]); } return contexts; } public void checkComplete(Deployment... deployments) throws DeploymentException { if (deployments == null) throw new IllegalArgumentException("Null deployments"); checkComplete(getDeploymentNames(deployments)); } public void checkComplete(String... names) throws DeploymentException { if (names == null) throw new IllegalArgumentException("Null names"); if (deployers == null) throw new IllegalStateException("Null deployers"); deployers.checkComplete(getDeploymentContexts(names)); } public void checkStructureComplete(Deployment... deployments) throws DeploymentException { if (deployments == null) throw new IllegalArgumentException("Null deployments"); checkStructureComplete(getDeploymentNames(deployments)); } public void checkStructureComplete(String... names) throws DeploymentException { if (names == null) throw new IllegalArgumentException("Null names"); if (deployers == null) throw new IllegalStateException("Null deployers"); deployers.checkStructureComplete(getDeploymentContexts(names)); } public DeploymentState getDeploymentState(String name) { DeploymentContext context = getDeploymentContext(name); if (context == null) return DeploymentState.UNDEPLOYED; return context.getState(); } public ManagedDeployment getManagedDeployment(String name) throws DeploymentException { if (mgtDeploymentCreator == null) throw new IllegalArgumentException("Null managed deployment creator."); DeploymentContext context = getDeploymentContext(name, true); Map rootMOs = getManagedObjects(context); ManagedDeployment root = mgtDeploymentCreator.build(context.getDeploymentUnit(), rootMOs, null); for (DeploymentContext childContext : context.getChildren()) { processManagedDeployment(childContext, root); } return root; } public Map getManagedObjects(String name) throws DeploymentException { DeploymentContext context = getDeploymentContext(name, true); return getManagedObjects(context); } public Map getManagedObjects(DeploymentContext context) throws DeploymentException { if (context == null) throw new IllegalArgumentException("Null context"); if (deployers == null) throw new IllegalStateException("No deployers"); return deployers.getManagedObjects(context); } public Graph> getDeepManagedObjects(String name) throws DeploymentException { DeploymentContext context = getDeploymentContext(name); Graph> managedObjectsGraph = new Graph>(); Vertex> parent = new Vertex>(context.getName()); managedObjectsGraph.setRootVertex(parent); Map managedObjects = getManagedObjects(context); parent.setData(managedObjects); processManagedObjects(context, managedObjectsGraph, parent); return managedObjectsGraph; } /** * Get the managed objects for a context * * @param context the context * @param graph the graph * @param parent the parent node * @throws DeploymentException for any problem */ protected void processManagedObjects(DeploymentContext context, Graph> graph, Vertex> parent) throws DeploymentException { List children = context.getChildren(); for(DeploymentContext child : children) { Vertex> vertex = new Vertex>(child.getName()); Map managedObjects = getManagedObjects(context); vertex.setData(managedObjects); graph.addEdge(parent, vertex, 0); processManagedObjects(child, graph, vertex); } } /** * Recursively process the DeploymentContext into ManagedDeployments. * * @param context the context * @param parent the parent * @throws DeploymentException for any error */ protected void processManagedDeployment(DeploymentContext context, ManagedDeployment parent) throws DeploymentException { if (mgtDeploymentCreator == null) throw new IllegalArgumentException("Null managed deployment creator."); DeploymentUnit unit = context.getDeploymentUnit(); Map MOs = getManagedObjects(context); ManagedDeployment md = mgtDeploymentCreator.build(unit, MOs, parent); for (DeploymentContext childContext : context.getChildren()) { processManagedDeployment(childContext, md); } } /** * Determine the structure of a deployment * * @param deployment the deployment * @return the deployment context * @throws DeploymentException for an error determining the deployment structure */ private DeploymentContext determineStructure(Deployment deployment) throws DeploymentException { StructuralDeployers structuralDeployers = getStructuralDeployers(); if (structuralDeployers != null) { DeploymentContext result = structuralDeployers.determineStructure(deployment); if (result != null) return result; } throw new DeploymentException("No structural deployers."); } /** * Add a context. * * @param context the context * @param addToDeploy should we add to deploy collection */ private void addContext(DeploymentContext context, boolean addToDeploy) { allDeployments.put(context.getName(), context); if (context.getState() == DeploymentState.ERROR) { log.debug("Not scheduling addition of context already in error: " + context.getName() + " reason=" + context.getProblem()); return; } context.setState(DeploymentState.DEPLOYING); DeploymentContext parent = context.getParent(); log.debug("Scheduling deployment: " + context.getName() + " parent=" + parent); // Process the top level only if (context.isTopLevel() && addToDeploy) deploy.add(context); // Add all the children List children = context.getChildren(); if (children != null) { for (DeploymentContext child : children) addContext(child, addToDeploy); } } /** * Remove a context * * @param context the context * @param addToUndeploy add to undeploy collection */ private void removeContext(DeploymentContext context, boolean addToUndeploy) { String name = context.getName(); allDeployments.remove(name); errorDeployments.remove(name); missingDeployers.remove(name); if (DeploymentState.ERROR.equals(context.getState()) == false) context.setState(DeploymentState.UNDEPLOYING); DeploymentContext parent = context.getParent(); log.debug("Scheduling undeployment: " + name + " parent=" + parent); // Process the top level only if (context.isTopLevel() && addToUndeploy) undeploy.add(context); // Remove all the children List children = context.getChildren(); if (children != null) { for (DeploymentContext child : children) removeContext(child, addToUndeploy); } } /** * Lock for read */ protected void lockRead() { lock.readLock().lock(); } /** * Unlock for read */ protected void unlockRead() { lock.readLock().unlock(); } /** * Lock for write */ protected void lockWrite() { lock.writeLock().lock(); } /** * Unlock for write */ protected void unlockWrite() { lock.writeLock().unlock(); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/class0000755000175000017500000000000011620060462033454 5ustar twernertwerner././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractResourceVisitorDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/class0000644000175000017500000001034011040403522033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.classloading; import org.jboss.classloading.spi.dependency.Module; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.visitor.ResourceVisitor; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Abstract resource visitor deployer. * * @author Ales Justin */ public class AbstractResourceVisitorDeployer extends AbstractSimpleRealDeployer { private ResourceVisitor visitor; private ResourceFilter filter; private ResourceFilter recurseFilter; public AbstractResourceVisitorDeployer() { super(Module.class); setStage(DeploymentStages.POST_CLASSLOADER); } public AbstractResourceVisitorDeployer(ResourceVisitor visitor) { this(); this.visitor = visitor; } public AbstractResourceVisitorDeployer(ResourceVisitor visitor, ResourceFilter filter) { this(visitor); this.filter = filter; } public AbstractResourceVisitorDeployer(ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter) { this(visitor, filter); this.recurseFilter = recurseFilter; } public void deploy(DeploymentUnit unit, Module module) throws DeploymentException { ResourceVisitor currentVisitor = createVisitor(unit); if (currentVisitor == null) currentVisitor = visitor; ResourceFilter currentFilter = createFilter(unit); if (currentFilter == null) currentFilter = filter; ResourceFilter recurse = createRecurseFilter(unit); if (recurse == null) currentFilter = recurseFilter; visitModule(module, currentVisitor, currentFilter, recurse); } /** * Visit module. * * By default we don't care if filters are null, * we always visit Module's visit methods that takes all three. * It should be up to uper classes if they want to differentiate between * the Module::visit method. * * @param module the module * @param visitor the visitor * @param filter the filter * @param recurse the recurse filter */ protected void visitModule(Module module, ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurse) { module.visit(visitor, filter, recurse); } /** * Create resource visitor from unit. * * @param unit the deployment unit * @return new resource visitor */ protected ResourceVisitor createVisitor(DeploymentUnit unit) { return null; } /** * Create resource filter from unit. * * @param unit the deployment unit * @return new resource filter */ protected ResourceFilter createFilter(DeploymentUnit unit) { return null; } /** * Create recurse filter from unit. * * @param unit the deployment unit * @return new recurse filter */ protected ResourceFilter createRecurseFilter(DeploymentUnit unit) { return null; } }././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractLevelClassLoaderSystemDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/class0000644000175000017500000001245411017542646033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.classloading; import org.jboss.classloader.spi.ClassLoaderDomain; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.dependency.Module; import org.jboss.classloading.spi.dependency.policy.ClassLoaderPolicyModule; import org.jboss.deployers.spi.deployer.helpers.AbstractClassLoaderDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractLevelClassLoaderSystemDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractLevelClassLoaderSystemDeployer extends AbstractClassLoaderDeployer { /** The classloading */ private ClassLoading classLoading; /** The classloader system */ private ClassLoaderSystem system; /** * Get the classLoading. * * @return the classLoading. */ public ClassLoading getClassLoading() { return classLoading; } /** * Set the classLoading. * * @param classLoading the classLoading. */ public void setClassLoading(ClassLoading classLoading) { this.classLoading = classLoading; } /** * Get the system. * * @return the system. */ public ClassLoaderSystem getSystem() { return system; } /** * Set the system. * * @param system the system. */ public void setSystem(ClassLoaderSystem system) { this.system = system; } /** * Validate the config */ public void create() { if (classLoading == null) throw new IllegalStateException("The classLoading has not been set"); if (system == null) throw new IllegalStateException("The system has not been set"); } public ClassLoader createClassLoader(DeploymentUnit unit) throws Exception { if (classLoading == null) throw new IllegalStateException("The classLoading has not been set"); if (system == null) throw new IllegalStateException("The system has not been set"); Module module = unit.getAttachment(Module.class); if (module == null) { if (isTopLevelOnly()) throw new IllegalStateException("No module for top level deployment " + unit.getName()); else return unit.getParent().getClassLoader(); } if (module instanceof ClassLoaderPolicyModule == false) throw new IllegalStateException("Module is not an instance of " + ClassLoaderPolicyModule.class.getName() + " actual=" + module.getClass().getName()); ClassLoaderPolicyModule classLoaderPolicyModule = (ClassLoaderPolicyModule) module; if (unit.isTopLevel() || module.getParentDomainName() != null) { // Top level, just create the classloader return classLoaderPolicyModule.registerClassLoaderPolicy(system); } else { // Subdeployment that wants a classloader ClassLoader parentClassLoader = unit.getParent().getClassLoader(); return classLoaderPolicyModule.registerClassLoaderPolicy(system, parentClassLoader); } } @Override public void removeClassLoader(DeploymentUnit unit) throws Exception { Module module = unit.getAttachment(Module.class); if (module == null) return; ClassLoader classLoader = unit.getClassLoader(); try { try { // Remove the classloader system.unregisterClassLoader(classLoader); } finally { // Try to tidy up empty domains String domainName = module.getDeterminedDomainName(); if (ClassLoaderSystem.DEFAULT_DOMAIN_NAME.equals(domainName) == false) { ClassLoaderDomain domain = system.getDomain(domainName); if (domain.hasClassLoaders() == false) system.unregisterDomain(domain); } } } finally { cleanup(unit, module); module.reset(); } } /** * Hook to perform cleanup on destruction of classloaader * * @param unit the deployment unit * @param module the module * @throws Exception for any error */ protected void cleanup(DeploymentUnit unit, Module module) throws Exception { } } ././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractDeploymentClassLoaderPolicyModule.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/class0000644000175000017500000001154511137607542033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.classloading; import java.util.Set; import org.jboss.classloading.spi.dependency.policy.ClassLoaderPolicyModule; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerState; import org.jboss.dependency.spi.Controller; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractDeploymentClassLoaderPolicyModule. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public abstract class AbstractDeploymentClassLoaderPolicyModule extends ClassLoaderPolicyModule { /** The serialVersionUID */ private static final long serialVersionUID = 1L; /** The classloader state for deployments */ private static ControllerState CLASSLOADER_STATE = new ControllerState(DeploymentStages.CLASSLOADER.getName()); /** The deployment unit */ private DeploymentUnit unit; /** * Determine the classloading metadata for the deployment unit * * @param unit the deployment unit * @return the classloading metadata */ private static ClassLoadingMetaData determineClassLoadingMetaData(DeploymentUnit unit) { if (unit == null) throw new IllegalArgumentException("Null unit"); return unit.getAttachment(ClassLoadingMetaData.class); } /** * Determine the classloading metadata for the deployment unit * * @param unit the deployment unit * @param addAlias should we add alias or remove * @return the classloading metadata */ private static String determineContextName(DeploymentUnit unit, boolean addAlias) { if (unit == null) throw new IllegalArgumentException("Null unit"); ControllerContext context = unit.getTopLevel().getAttachment(ControllerContext.class); if (context == null) throw new IllegalStateException("Deployment has no controller context"); // We use the deployment name String contextName = unit.getName(); // Check to see whether we need to add our name as an alias if (contextName.equals(context.getName()) == false) { Set aliases = context.getAliases(); if (aliases == null || (aliases != null && aliases.contains(contextName) == false)) { Controller controller = context.getController(); if (addAlias) { try { controller.addAlias(contextName, context.getName()); } catch (Throwable t) { throw new RuntimeException("Error adding deployment alias " + contextName + " to " + context, t); } } else { controller.removeAlias(contextName); } } } return contextName; } /** * Create a new AbstractDeploymentClassLoaderPolicyModule. * * @param unit the deployment unit * @throws IllegalArgumentException for a null unit */ public AbstractDeploymentClassLoaderPolicyModule(DeploymentUnit unit) { super(determineClassLoadingMetaData(unit), determineContextName(unit, true)); this.unit = unit; ControllerContext context = unit.getTopLevel().getAttachment(ControllerContext.class); setControllerContext(context); } /** * Get the unit. * * @return the unit. */ public DeploymentUnit getDeploymentUnit() { return unit; } @Override public ControllerState getClassLoaderState() { return CLASSLOADER_STATE; } @Override public void release() { try { super.release(); } finally { determineContextName(unit, false); } } } ././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/AbstractClassLoaderDescribeDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/class0000644000175000017500000001024511017542646033471 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.classloading; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.dependency.Module; import org.jboss.classloading.spi.dependency.policy.ClassLoaderPolicyModule; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractOptionalRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractClassLoaderDescribeDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractClassLoaderDescribeDeployer extends AbstractOptionalRealDeployer { /** The classloading */ private ClassLoading classLoading; /** * Create a new AbstractClassLoaderDescribeDeployer. */ public AbstractClassLoaderDescribeDeployer() { super(ClassLoadingMetaData.class); setStage(DeploymentStages.DESCRIBE); } /** * Get the classLoading. * * @return the classLoading. */ public ClassLoading getClassLoading() { return classLoading; } /** * Set the classLoading. * * @param classLoading the classLoading. */ public void setClassLoading(ClassLoading classLoading) { this.classLoading = classLoading; } /** * Check the configuration * * @throws Exception for any error */ public void create() throws Exception { if (classLoading == null) throw new DeploymentException("Classloading has not been configured"); } public void deploy(DeploymentUnit unit, ClassLoadingMetaData deployment) throws DeploymentException { // We only look at non top level deployments that have classloading metadata if (unit.isTopLevel() == false) { if (deployment == null) return; // For non top level classloaders, we need to control the domain // since the parent is the deployment classloader String unitName = unit.getName(); if (deployment.getParentDomain() == null) { deployment.setDomain(unitName); log.debug("Will use synthetic domain for classloader of subdeployment: " + unitName); } else { log.debug("Will create top level classloader for subdeployment: " + unitName); } } // Create the module ClassLoaderPolicyModule module = createModule(unit, deployment); if (module != null) { classLoading.addModule(module); unit.addAttachment(Module.class, module); } } public void undeploy(DeploymentUnit unit, ClassLoadingMetaData deployment) { Module module = unit.removeAttachment(Module.class); if (module == null) return; classLoading.removeModule(module); } protected abstract ClassLoaderPolicyModule createModule(DeploymentUnit unit, ClassLoadingMetaData metaData) throws DeploymentException; } ././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/classloading/ClassLoadingDefaultDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/src/main/java/org/jboss/deployers/plugins/class0000644000175000017500000000607510761233255033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.classloading; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractOptionalRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * ClassLoadingDefaultDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ClassLoadingDefaultDeployer extends AbstractOptionalRealDeployer { /** The default classloading metadata */ private ClassLoadingMetaData defaultMetaData; /** * Create a new ClassLoadingDefaultDeployer. */ public ClassLoadingDefaultDeployer() { super(ClassLoadingMetaData.class); setOutput(ClassLoadingMetaData.class); setStage(DeploymentStages.PRE_DESCRIBE); setTopLevelOnly(true); } /** * Get the defaultMetaData. * * @return the defaultMetaData. */ public ClassLoadingMetaData getDefaultMetaData() { return defaultMetaData; } /** * Set the defaultMetaData. * * @param defaultMetaData the defaultMetaData. */ public void setDefaultMetaData(ClassLoadingMetaData defaultMetaData) { this.defaultMetaData = defaultMetaData; } /** * Check the state */ public void create() { if (defaultMetaData == null) throw new IllegalStateException("Default metadata has not been configured"); } @Override public void deploy(DeploymentUnit unit, ClassLoadingMetaData deployment) throws DeploymentException { if (deployment == null) { ClassLoadingMetaData cloned = defaultMetaData.clone(); cloned.setName(unit.getSimpleName()); unit.addAttachment(ClassLoadingMetaData.class, cloned); } else if ("".equals(deployment.getName())) { deployment.setName(unit.getSimpleName()); } } } libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/.settings/0000755000175000017500000000000011620060463024313 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-impl/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740031312 0ustar twernertwerner#Fri Sep 21 17:50:11 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-impl/.project0000644000175000017500000000116511071370224024046 0ustar twernertwerner jboss-deployers-impl JBoss Deployers Impl jboss-deployers-client jboss-deployers-client-spi jboss-deployers-core jboss-deployers-core-spi jboss-deployers-spi jboss-deployers-structure-spi org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature libjboss-deployers-java-2.0.4.GA.orig/pom.xml0000644000175000017500000003564411137607542020771 0ustar twernertwerner 4.0.0 org.jboss jboss-parent 4 org.jboss.deployers jboss-deployers 2.0.4.GA pom JBoss Deployers Parent POM http://www.jboss.com/products/jbossmc The JBoss Deployment Framework scm:svn:http://anonsvn.jboss.org/repos/jbossas/projects/jboss-deployers/tags/2.0.4.GA scm:svn:https://svn.jboss.org/repos/jbossas/projects/jboss-deployers/tags/2.0.4.GA http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbossas/projects/jboss-deployers/tags/2.0.4.GA 2.0.1.GA 2.0.0.GA 2.0.1.GA 2.0.3.GA 2.0.2.GA 5.0.3.GA 2.2.10.GA 2.0.5.GA 2.0.5.GA 2.0.0.GA 2.0.0.SP1 1.1.1.GA 4.4 3.9.0.GA 1.0 deployers-core-spi deployers-core deployers-client-spi deployers-client deployers-structure-spi deployers-spi deployers-impl deployers-vfs-spi deployers-vfs build ${microcontainer.outputDirectory} ${microcontainer.testOutputDirectory} ${artifactId} org.apache.maven.plugins maven-compiler-plugin 2.0.2 1.5 1.5 true true true org.apache.maven.plugins maven-release-plugin 2.0-beta-7 false https://svn.jboss.org/repos/jbossas/projects/jboss-deployers/tags true org.apache.maven.plugins maven-assembly-plugin make-assembly package attached maven-idea-plugin true org.apache.maven.plugins maven-jar-plugin 2.2 org.apache.maven.plugins maven-surefire-plugin 2.4.2 true org/jboss/test/**/*TestCase.java repository.jboss.org JBoss Repository default http://repository.jboss.org/maven2/ false snapshots.jboss.org JBoss Snapshots Repository default http://snapshots.jboss.org/maven2/ true false org.apache.maven.plugins maven-project-info-reports-plugin dependencies issue-tracking license scm org.codehaus.mojo findbugs-maven-plugin 1.0.0 org.jboss.deployers jboss-deployers ${project.version} org.jboss.deployers jboss-deployers-core-spi ${project.version} org.jboss.deployers jboss-deployers-core ${project.version} org.jboss.deployers jboss-deployers-core ${project.version} test-jar test org.jboss.deployers jboss-deployers-client-spi ${project.version} org.jboss.deployers jboss-deployers-client ${project.version} org.jboss.deployers jboss-deployers-client ${project.version} test-jar test org.jboss.deployers jboss-deployers-structure-spi ${project.version} org.jboss.deployers jboss-deployers-structure-spi ${project.version} test-jar test org.jboss.deployers jboss-deployers-spi ${project.version} org.jboss.deployers jboss-deployers-impl ${project.version} org.jboss.deployers jboss-deployers-impl ${project.version} test-jar test org.jboss.deployers jboss-deployers-vfs-spi ${project.version} org.jboss.deployers jboss-deployers-vfs ${project.version} org.jboss.microcontainer jboss-dependency ${version.jboss.microcontainer} org.jboss.microcontainer jboss-kernel ${version.jboss.microcontainer} org.jboss.cl jboss-classloader ${version.jboss.classloader} org.jboss.cl jboss-classloading ${version.jboss.classloader} org.jboss.cl jboss-classloading-vfs ${version.jboss.classloader} org.jboss.integration jboss-classloading-spi ${version.jboss.classloading.spi} org.jboss.man jboss-managed ${version.jboss.man} org.jboss.man jboss-metatype ${version.jboss.man} org.jboss jboss-mdr ${version.jboss.mdr} org.jboss jboss-common-core ${version.jboss.common.core} org.jboss.logging jboss-logging-spi ${version.jboss.logging.spi} org.jboss.logging jboss-logging-log4j ${version.jboss.logging.log4j} org.jboss jbossxb ${version.jbossxb} org.jboss jboss-vfs ${version.jboss.vfs} org.jboss.aop jboss-aop ${version.jboss.aop} javassist javassist ${version.javassist} stax stax-api ${version.stax.staxapi} true org.jboss.test jboss-test ${version.org.jboss.test} test junit junit ${version.junit} test default true target/classes target/test-classes eclipse process-test-resources maven-eclipse-plugin eclipse process-test-resources eclipse true ${microcontainer.outputDirectory} eclipse-target/classes eclipse-target/test-classes assembly maven-assembly-plugin false make-assembly install assembly jboss-microcontainer-${project.version} build/assembly/dist.xml build/assembly/src.xml libjboss-deployers-java-2.0.4.GA.orig/deployers-client/0000755000175000017500000000000011620060440022705 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/.classpath0000644000175000017500000000575211113263640024705 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-client/pom.xml0000644000175000017500000000411411137607542024237 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-client jar JBoss Deployers Client http://www.jboss.com/products/jbossmc JBoss Deployers Client org.apache.maven.plugins maven-jar-plugin test-jar org.jboss.deployers jboss-deployers-client-spi org.jboss.deployers jboss-deployers-core test org.jboss.deployers jboss-deployers-core-spi org.jboss.logging jboss-logging-log4j test org.jboss.test jboss-test test junit junit test libjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/0000755000175000017500000000000011620060440023474 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/0000755000175000017500000000000011620060440024453 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/0000755000175000017500000000000011620060440025374 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/0000755000175000017500000000000011620060440026163 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/0000755000175000017500000000000011620060440027303 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/0000755000175000017500000000000011620060440030262 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/0000755000175000017500000000000011620060440032270 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploymentfactory/libjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploy0000755000175000017500000000000011620060440033505 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploymentfactory/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploy0000755000175000017500000000000011620060440033505 5ustar twernertwerner././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploymentfactory/test/DeploymentFactoryUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploy0000644000175000017500000000373110640503432033517 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deploymentfactory.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.plugins.deployment.AbstractDeployment; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.test.deployers.deploymentfactory.AbstractDeploymentFactoryTest; /** * DeploymentFactoryUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentFactoryUnitTestCase extends AbstractDeploymentFactoryTest { public static Test suite() { return new TestSuite(DeploymentFactoryUnitTestCase.class); } public DeploymentFactoryUnitTestCase(String name) { super(name); } @Override protected DeploymentFactory createDeploymentFactory() { return new DeploymentFactory(); } @Override protected Deployment createDeployment() { return new AbstractDeployment(); } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploymentfactory/DeploymentFactoryTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploy0000644000175000017500000000324210640503432033514 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deploymentfactory; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.deploymentfactory.test.DeploymentFactoryUnitTestCase; /** * DeploymentFactoryTestSuite. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentFactoryTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployment Factory Tests"); suite.addTest(DeploymentFactoryUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploymentfactory/AbstractDeploymentFactoryTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/deploy0000644000175000017500000003602010731616564033530 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.deploymentfactory; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.test.BaseTestCase; /** * AbstractDeploymentFactoryTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractDeploymentFactoryTest extends BaseTestCase { public AbstractDeploymentFactoryTest(String name) { super(name); } protected static void assertDefault(ContextInfo contextInfo) { assertDefaultPath(contextInfo); assertDefaultMetaDataPath(contextInfo); assertDefaultClassPath(contextInfo.getClassPath()); } protected static void assertDefaultPath(ContextInfo contextInfo) { assertEquals("", contextInfo.getPath()); } protected static void assertDefaultNonPath(ContextInfo contextInfo) { assertDefaultMetaDataPath(contextInfo); assertDefaultClassPath(contextInfo.getClassPath()); } protected static void assertDefaultMetaDataPath(ContextInfo contextInfo) { assertNotNull(contextInfo); assertNotNull(contextInfo.getMetaDataPath()); assertTrue(contextInfo.getMetaDataPath().isEmpty()); } protected static void assertDefaultMetaDataPath(List metaDataPath) { assertEquals(1, metaDataPath.size()); assertEquals("metaDataPath", metaDataPath.get(0)); } protected static void assertDefaultClassPath(List classPath) { assertNotNull(classPath); assertEquals(1, classPath.size()); ClassPathEntry entry = classPath.get(0); assertNotNull(entry); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); } protected StructureMetaData assertStructureMetaData(PredeterminedManagedObjectAttachments attachments) { assertNotNull(attachments); Attachments x = attachments.getPredeterminedManagedObjects(); assertNotNull(x); StructureMetaData structure = x.getAttachment(StructureMetaData.class); assertNotNull(structure); return structure; } protected void assertContexts(PredeterminedManagedObjectAttachments attachments, ContextInfo... expected) { StructureMetaData structure = assertStructureMetaData(attachments); assertContexts(structure, expected); } protected void assertContexts(StructureMetaData structure, ContextInfo... expected) { assertNotNull(structure); List contexts = new ArrayList(); if (expected != null) { for (ContextInfo context : expected) contexts.add(context); } assertEquals(contexts, structure.getContexts()); } protected abstract DeploymentFactory createDeploymentFactory(); protected abstract Deployment createDeployment(); public void testCreateClassPathEntryPath() { DeploymentFactory factory = createDeploymentFactory(); ClassPathEntry entry = factory.createClassPathEntry("path"); assertEquals("path", entry.getPath()); assertNull(entry.getSuffixes()); } public void testCreateClassPathEntryPathErrors() { DeploymentFactory factory = createDeploymentFactory(); try { factory.createClassPathEntry(null); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testCreateClassPathEntryPathAndSuffixes() { DeploymentFactory factory = createDeploymentFactory(); ClassPathEntry entry = factory.createClassPathEntry("path", "suffixes"); assertEquals("path", entry.getPath()); assertEquals("suffixes", entry.getSuffixes()); entry = factory.createClassPathEntry("path", null); assertEquals("path", entry.getPath()); assertNull(entry.getSuffixes()); } public void testCreateClassPathEntryPathAndSuffixesErrors() { DeploymentFactory factory = createDeploymentFactory(); try { factory.createClassPathEntry(null, "suffixes"); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testCreateClassPathPath() { DeploymentFactory factory = createDeploymentFactory(); List expected = Collections.singletonList(factory.createClassPathEntry("path")); List classPath = factory.createClassPath("path"); assertEquals(expected, classPath); } public void testCreateClassPathPathErrors() { DeploymentFactory factory = createDeploymentFactory(); try { factory.createClassPath(null); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testCreateClassPathPathAndSuffixes() { DeploymentFactory factory = createDeploymentFactory(); List expected = Collections.singletonList(factory.createClassPathEntry("path", "suffixes")); List classPath = factory.createClassPath("path", "suffixes"); assertEquals(expected, classPath); } public void testCreateClassPathPathAndSuffixesErrors() { DeploymentFactory factory = createDeploymentFactory(); try { factory.createClassPath(null, "suffixes"); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testAddContextPath() { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); ContextInfo context = factory.addContext(deployment, "path"); assertEquals("path", context.getPath()); assertDefaultNonPath(context); assertContexts(deployment, context); } public void testAddContextPathErrors() { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); try { factory.addContext(null, "path"); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } try { factory.addContext(deployment, null); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testAddContextPathAndClassPath() { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); List classPath = factory.createClassPath("ClassPath"); ContextInfo context = factory.addContext(deployment, "path", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context); assertEquals(classPath, context.getClassPath()); assertContexts(deployment, context); deployment = createDeployment(); classPath = null; context = factory.addContext(deployment, "path", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context); assertNull(context.getClassPath()); assertContexts(deployment, context); } public void testAddContextPathAndClassPathErrors() { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); List classPath = factory.createClassPath("ClassPath"); try { factory.addContext(null, "path", classPath); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } try { factory.addContext(deployment, null, classPath); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testAddContextPathAndMetaDataAndClassPath() { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); List classPath = factory.createClassPath("ClassPath"); ContextInfo context = factory.addContext(deployment, "path", "metaDataPath", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context.getMetaDataPath()); assertEquals(classPath, context.getClassPath()); assertContexts(deployment, context); classPath = null; deployment = createDeployment(); context = factory.addContext(deployment, "path", "metaDataPath", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context.getMetaDataPath()); assertNull(context.getClassPath()); assertContexts(deployment, context); } public void testAddContextPathAndMetaDataPathAndAndClassPathErrors() { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); List classPath = factory.createClassPath("ClassPath"); try { factory.addContext(null, "path", "metaData", classPath); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } try { factory.addContext(deployment, null, "metaData", classPath); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } try { factory.addContext(deployment, "path", (String)null, classPath); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testAddContexts() { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); ContextInfo context1 = factory.addContext(deployment, "path1"); assertEquals("path1", context1.getPath()); assertDefaultNonPath(context1); ContextInfo context2 = factory.addContext(deployment, "path2"); assertEquals("path2", context2.getPath()); assertDefaultNonPath(context1); ContextInfo context3 = factory.addContext(deployment, "path3"); assertEquals("path3", context3.getPath()); assertDefaultNonPath(context1); assertContexts(deployment, context1, context2, context3); } public void testAddContextsToContext() { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); ContextInfo parent = factory.addContext(deployment, "parent"); assertEquals("parent", parent.getPath()); assertDefaultNonPath(parent); ContextInfo context1 = factory.addContext(parent, "path1"); assertEquals("path1", context1.getPath()); assertDefaultNonPath(context1); ContextInfo context2 = factory.addContext(parent, "path2"); assertEquals("path2", context2.getPath()); assertDefaultNonPath(context2); ContextInfo context3 = factory.addContext(parent, "path3"); assertEquals("path3", context3.getPath()); assertDefaultNonPath(context3); assertContexts(deployment, parent); assertContexts(parent, context1, context2, context3); } public void testSerialization() throws Exception { DeploymentFactory factory = createDeploymentFactory(); Deployment deployment = createDeployment(); List classPath = factory.createClassPath("ClassPath"); ContextInfo context1 = factory.addContext(deployment, "path1", "metaDataPath", classPath); assertEquals("path1", context1.getPath()); assertDefaultMetaDataPath(context1.getMetaDataPath()); assertEquals(classPath, context1.getClassPath()); StructureMetaData structure = assertStructureMetaData(deployment); assertContexts(structure, context1); deployment = serializeDeserialize(deployment, Deployment.class); structure = assertStructureMetaData(deployment); assertContexts(structure, context1); ContextInfo context2 = factory.addContext(deployment, "path2"); assertEquals("path2", context2.getPath()); assertDefaultNonPath(context2); structure = assertStructureMetaData(deployment); assertContexts(structure, context1, context2); deployment = serializeDeserialize(deployment, Deployment.class); structure = assertStructureMetaData(deployment); assertContexts(structure, context1, context2); ContextInfo testContext = structure.getContext("path2"); ContextInfo child1 = factory.addContext(testContext, "child1"); assertEquals("child1", child1.getPath()); assertDefaultNonPath(child1); ContextInfo child2 = factory.addContext(testContext, "child2"); assertEquals("child2", child2.getPath()); assertDefaultNonPath(child2); ContextInfo child3 = factory.addContext(testContext, "child3"); assertEquals("child3", child3.getPath()); assertDefaultNonPath(child3); assertContexts(structure, context1, context2); StructureMetaData childStructure = assertStructureMetaData(testContext); assertContexts(childStructure, child1, child2, child3); structure = serializeDeserialize(structure, StructureMetaData.class); assertContexts(structure, context1, context2); testContext = structure.getContext("path2"); assertEquals(context2, testContext); childStructure = assertStructureMetaData(testContext); assertContexts(childStructure, child1, child2, child3); } } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/DeployersClientTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/test/java/org/jboss/test/deployers/Deploy0000644000175000017500000000317610640503432033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.deploymentfactory.DeploymentFactoryTestSuite; /** * Deployers Client Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class DeployersClientTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers Client Tests"); suite.addTest(DeploymentFactoryTestSuite.suite()); return suite; } } libjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/0000755000175000017500000000000011620060440024420 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/0000755000175000017500000000000011620060440025341 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/0000755000175000017500000000000011620060440026130 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/0000755000175000017500000000000011620060440027250 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060440031256 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/deployers/client/0000755000175000017500000000000011620060440032534 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/deployers/client/plugins/libjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/deployers/client/plug0000755000175000017500000000000011620060440033424 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/deployers/client/plugins/deployment/libjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/deployers/client/plug0000755000175000017500000000000011620060440033424 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/deployers/client/plugins/deployment/AbstractDeployment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client/src/main/java/org/jboss/deployers/client/plug0000644000175000017500000000651010766514535033453 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.client.plugins.deployment; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.Set; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.helpers.PredeterminedManagedObjectAttachmentsImpl; /** * AbstractDeployment. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeployment extends PredeterminedManagedObjectAttachmentsImpl implements Deployment { /** The serialVersionUID */ private static final long serialVersionUID = 2; /** The name of the deployment */ private String name; /** The deployment types */ private Set types; /** * Create a new AbstractDeployment. */ public AbstractDeployment() { } /** * Create a new AbstractDeployment. * * @param name the name of the deployment * @throws IllegalArgumentException for a null name */ public AbstractDeployment(String name) { setName(name); } /** * Get the name. * * @return the name. */ public String getName() { return name; } /** * Get the simple name. * * @return the name. */ public String getSimpleName() { return name; } /** * Set the name. * * @param name the name. * @throws IllegalArgumentException for a null name */ public void setName(String name) { if (name == null) throw new IllegalArgumentException("Null name"); this.name = name; } @Deprecated public Set getTypes() { return types; } @Deprecated public void setTypes(Set types) { this.types = types; } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); boolean hasName = in.readBoolean(); if (hasName) name = in.readUTF(); } /** * @serialData name from {@link #getName()} * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); String name = getName(); out.writeBoolean(name != null); if (name != null) out.writeUTF(name); } } libjboss-deployers-java-2.0.4.GA.orig/deployers-client/.settings/0000755000175000017500000000000011620060440024623 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740031627 0ustar twernertwerner#Fri Sep 21 17:49:33 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-client/.project0000644000175000017500000000075311071370224024365 0ustar twernertwerner jboss-deployers-client JBoss Deployers Client jboss-deployers-client-spi jboss-deployers-core jboss-deployers-core-spi org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/0000755000175000017500000000000011620060463023503 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/.classpath0000644000175000017500000000232311113263640025465 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/pom.xml0000644000175000017500000000274011137607542025033 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-client-spi jar JBoss Deployers Client SPI http://www.jboss.com/products/jbossmc JBoss Deployers Client SPI org.jboss.deployers jboss-deployers-core-spi org.jboss.man jboss-managed org.jboss jboss-reflect org.jboss jboss-common-core org.jboss.logging jboss-logging-spi libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/0000755000175000017500000000000011620060463024272 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/0000755000175000017500000000000011620060463025216 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/0000755000175000017500000000000011620060463026137 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/0000755000175000017500000000000011620060463026726 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/0000755000175000017500000000000011620060463030046 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060463032054 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000755000175000017500000000000011620060463033332 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000755000175000017500000000000011620060463033332 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/IncompleteDeployments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000644000175000017500000003076410775115712033356 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.client.spi; import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; /** * IncompleteDeployments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class IncompleteDeployments implements Serializable { /** The serialVersionUID */ private static final long serialVersionUID = -8413355643801749950L; /** Deployments in error */ private Map deploymentsInError; /** Deployments missing deployer */ private Collection deploymentsMissingDeployer; /** Contexts in error */ private Map contextsInError; /** Contexts missing dependencies */ private Map> contextsMissingDependencies; /** Deployments in error info */ private String deploymentsInErrorInfo; /** Missing deployers info */ private String deploymentsMissingDeployerInfo; /** Contexts in error info */ private String contextsInErrorInfo; /** Contexts missing dependencies info */ private String contextsMissingDependenciesInfo; /** * Create a new IncompleteDeploymentException. * * @param deploymentsInError deployments in error * @param deploymentsMissingDeployer deployments missing deployer * @param contextsInError contexts in error * @param contextsMissingDependencies contexts missing dependencies */ public IncompleteDeployments(Map deploymentsInError, Collection deploymentsMissingDeployer, Map contextsInError, Map> contextsMissingDependencies) { if (deploymentsInError != null && deploymentsInError.isEmpty() == false) { this.deploymentsInError = new TreeMap(); this.deploymentsInError.putAll(deploymentsInError); } if (deploymentsMissingDeployer != null && deploymentsMissingDeployer.isEmpty() == false) { this.deploymentsMissingDeployer = new TreeSet(); this.deploymentsMissingDeployer.addAll(deploymentsMissingDeployer); } if (contextsInError != null && contextsInError.isEmpty() == false) { this.contextsInError = new TreeMap(); this.contextsInError.putAll(contextsInError); } if (contextsMissingDependencies != null && contextsMissingDependencies.isEmpty() == false) { this.contextsMissingDependencies = new TreeMap>(); this.contextsMissingDependencies.putAll(contextsMissingDependencies); } } /** * Whether it is incomplete * * @return true when incomplete */ public boolean isIncomplete() { if (deploymentsInError != null) return true; if (deploymentsMissingDeployer != null ) return true; if (contextsInError != null) return true; if (contextsMissingDependencies != null) return true; return false; } /** * Whether deployment unit is responsible for incomplete deployment. * * @param deploymentName deployment unit name * @return true when deployment unit is responsible */ public boolean isInvalidDeployment(String deploymentName) { if (isIncomplete() == false) return false; if (matchComponentName(deploymentName, getDeploymentsInError().keySet())) return true; if (matchComponentName(deploymentName, getDeploymentsMissingDeployer())) return true; return false; } /** * Whether context is responsible for incomplete deployment. * * @param contextName context's name * @return true when context is responsible */ public boolean isInvalidContext(String contextName) { if (isIncomplete() == false) return false; if (matchComponentName(contextName, getContextsInError().keySet())) return true; if (matchComponentName(contextName, getContextsMissingDependencies().keySet())) return true; return false; } /** * Get the info about deployments in error. * * @return string info */ public String getDeploymentsInErrorInfo() { if (deploymentsInErrorInfo == null) { StringBuilder buffer = new StringBuilder(); // Display all the incomplete deployments Map deploymentsInError = getDeploymentsInError(); if (deploymentsInError.isEmpty() == false) { buffer.append("\n*** DEPLOYMENTS IN ERROR: Name -> Error\n\n"); for (Map.Entry entry : deploymentsInError.entrySet()) buffer.append(entry.getKey()).append(" -> ").append(entry.getValue().toString()).append("\n\n"); } deploymentsInErrorInfo = buffer.toString(); } return deploymentsInErrorInfo; } /** * Get the info about missing deployers. * * @return string info */ public String getDeploymentsMissingDeployerInfo() { if (deploymentsMissingDeployerInfo == null) { StringBuilder buffer = new StringBuilder(); // Display all the missing deployers Collection deploymentsMissingDeployers = getDeploymentsMissingDeployer(); if (deploymentsMissingDeployers.isEmpty() == false) { buffer.append("\n*** DEPLOYMENTS MISSING DEPLOYERS: Name\n\n"); for (String name : deploymentsMissingDeployers) buffer.append(name).append('\n'); } deploymentsMissingDeployerInfo = buffer.toString(); } return deploymentsMissingDeployerInfo; } /** * Merge root causes for the same key. * * @param rootCauses the root causes map * @param key the possible root cause key * @param value the possible root cause value */ private static void mergeRootCauses(Map> rootCauses, String key, String value) { Set values = rootCauses.get(key); if (values == null) { values = Collections.singleton(value); rootCauses.put(key, values); } else { values = new HashSet(values); values.add(value); rootCauses.put(key, values); } } /** * Calculate upfront context errors. */ protected void calculateContextsError() { // Popluate the potential root causes Map> rootCauses = new HashMap>(); // Missing dependencies are root causes Map> contextsMissingDependencies = getContextsMissingDependencies(); if (contextsMissingDependencies.isEmpty() == false) { for (Map.Entry> entry : contextsMissingDependencies.entrySet()) { for (MissingDependency dependency : entry.getValue()) mergeRootCauses(rootCauses, dependency.getDependency(), dependency.getActualState()); } } // Errors are root causes Map contextsInError = getContextsInError(); if (contextsInError.isEmpty() == false) { for (Map.Entry entry : contextsInError.entrySet()) { Throwable t = entry.getValue(); if (t == null) mergeRootCauses(rootCauses, entry.getKey(), "** UNKNOWN ERROR **"); else mergeRootCauses(rootCauses, entry.getKey(), t.toString()); } } StringBuilder buffer = new StringBuilder(); // Display all the missing dependencies if (contextsMissingDependencies.isEmpty() == false) { buffer.append("\n*** CONTEXTS MISSING DEPENDENCIES: Name -> Dependency{Required State:Actual State}\n\n"); for (Map.Entry> entry : contextsMissingDependencies.entrySet()) { String name = entry.getKey(); buffer.append(name).append("\n"); for (MissingDependency dependency : entry.getValue()) { buffer.append(" -> ").append(dependency.getDependency()); buffer.append('{').append(dependency.getRequiredState()); buffer.append(':').append(dependency.getActualState()).append("}"); buffer.append("\n"); } buffer.append('\n'); // It is not a root cause if it has missing dependencies rootCauses.remove(name); } } contextsMissingDependenciesInfo = buffer.toString(); // reset buffer buffer.setLength(0); if (rootCauses.isEmpty() == false) { buffer.append("\n*** CONTEXTS IN ERROR: Name -> Error\n\n"); for (String key : rootCauses.keySet()) { buffer.append(key).append(" -> "); Set values = rootCauses.get(key); boolean first = true; for (String value : values) { if (first == false) buffer.append(" | "); else first = false; buffer.append(value); } buffer.append("\n\n"); } } contextsInErrorInfo = buffer.toString(); } /** * Get the contexts in error info. * * @return string info */ public String getContextsInErrorInfo() { if (contextsInErrorInfo == null) calculateContextsError(); return contextsInErrorInfo; } /** * Get the contexts missing dependecies info * * @return the contexts missing dependency */ public String getContextsMissingDependenciesInfo() { if (contextsMissingDependenciesInfo == null) calculateContextsError(); return contextsMissingDependenciesInfo; } /** * Search for componentName in strings. * * @param componentName component's name * @param strings collection of strings * @return true if strings contains component name */ protected boolean matchComponentName(String componentName, Collection strings) { return strings.contains(componentName); } /** * Get the contextsInError. * * @return the contextsInError. */ public Map getContextsInError() { if (contextsInError == null) return Collections.emptyMap(); else return Collections.unmodifiableMap(contextsInError); } /** * Get the contextsMissingDependencies. * * @return the contextsMissingDependencies. */ public Map> getContextsMissingDependencies() { if (contextsMissingDependencies == null) return Collections.emptyMap(); else return Collections.unmodifiableMap(contextsMissingDependencies); } /** * Get the deploymentsInError. * * @return the deploymentsInError. */ public Map getDeploymentsInError() { if (deploymentsInError == null) return Collections.emptyMap(); else return Collections.unmodifiableMap(deploymentsInError); } /** * Get the deploymentsMissingDeployer. * * @return the deploymentsMissingDeployer. */ public Collection getDeploymentsMissingDeployer() { if (deploymentsMissingDeployer == null) return Collections.emptySet(); else return Collections.unmodifiableCollection(deploymentsMissingDeployer); } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/DeploymentFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000644000175000017500000001567110765763765033376 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.client.spi; import java.util.Collections; import java.util.List; import java.util.Map; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.AttachmentsFactory; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; /** * DeploymentFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentFactory { /** * Add a context to a deployment * * @param context the context * @param path the path * @return the context info * @throws IllegalArgumentException for a null parameter */ public ContextInfo addContext(PredeterminedManagedObjectAttachments context, String path) { StructureMetaData structure = assureStructure(context); ContextInfo result = StructureMetaDataFactory.createContextInfo(path); structure.addContext(result); return result; } /** * Add a context to a deployment * * @param context the context * @param path the path * @param classPath the classpath * @return the context info * @throws IllegalArgumentException for a null parameter */ public ContextInfo addContext(PredeterminedManagedObjectAttachments context, String path, List classPath) { StructureMetaData structure = assureStructure(context); ContextInfo result = StructureMetaDataFactory.createContextInfo(path, classPath); structure.addContext(result); return result; } /** * Add a context to a deployment * * @param context the context * @param path the path * @param metaDataPath the meta data path * @param classPath the classpath * @return the context info * @throws IllegalArgumentException for a null parameter */ public ContextInfo addContext(PredeterminedManagedObjectAttachments context, String path, String metaDataPath, List classPath) { StructureMetaData structure = assureStructure(context); ContextInfo result = StructureMetaDataFactory.createContextInfo(path, metaDataPath, classPath); structure.addContext(result); return result; } /** * Add a context to a deployment * * @param context the context * @param path the path * @param metaDataPath the meta data path * @param classPath the classpath * @return the context info * @throws IllegalArgumentException for a null parameter */ public ContextInfo addContext(PredeterminedManagedObjectAttachments context, String path, List metaDataPath, List classPath) { StructureMetaData structure = assureStructure(context); ContextInfo result = StructureMetaDataFactory.createContextInfo(path, metaDataPath, classPath); structure.addContext(result); return result; } /** * Create a new classpath entry * * @param path the path * @return the classpath entry * @throws IllegalArgumentException for a null path */ public static ClassPathEntry createClassPathEntry(String path) { return StructureMetaDataFactory.createClassPathEntry(path, null); } /** * Create a new classpath * * @param path the path * @return the classpath * @throws IllegalArgumentException for a null path */ public static List createClassPath(String path) { return Collections.singletonList(createClassPathEntry(path)); } /** * Create a new classpath entry * * @param path the path * @param suffixes the suffixes * @return the classpath entry * @throws IllegalArgumentException for a null path */ public static ClassPathEntry createClassPathEntry(String path, String suffixes) { return StructureMetaDataFactory.createClassPathEntry(path, suffixes); } /** * Create a new classpath * * @param path the path * @param suffixes the suffixes * @return the classpath * @throws IllegalArgumentException for a null path */ public static List createClassPath(String path, String suffixes) { return Collections.singletonList(createClassPathEntry(path, suffixes)); } /** * Assure the context has a predetermined structure * * @param context the context * @return the structure */ protected static StructureMetaData assureStructure(PredeterminedManagedObjectAttachments context) { if (context == null) throw new IllegalArgumentException("Null context"); MutableAttachments mutable; Attachments attachments = context.getPredeterminedManagedObjects(); // Nothing predetermined yet if (attachments == null) { mutable = AttachmentsFactory.createMutableAttachments(); context.setPredeterminedManagedObjects(mutable); } // Some predetermined but needs to be made mutable else if (attachments instanceof MutableAttachments == false) { mutable = AttachmentsFactory.createMutableAttachments(); Map map = attachments.getAttachments(); if (map != null) mutable.setAttachments(map); context.setPredeterminedManagedObjects(mutable); } else { mutable = (MutableAttachments) attachments; } StructureMetaData structure = mutable.getAttachment(StructureMetaData.class); // No previous structure if (structure == null) { structure = StructureMetaDataFactory.createStructureMetaData(); mutable.addAttachment(StructureMetaData.class, structure); } return structure; } } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/DeployerClient.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000644000175000017500000001445110761251333033344 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.client.spi; import java.util.Collection; import java.util.Map; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.managed.api.ManagedDeployment; import org.jboss.managed.api.ManagedObject; import org.jboss.util.graph.Graph; /** * DeployerClient. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface DeployerClient { /** * Get the top level deployments * * @return the top level deployments */ Collection getTopLevel(); /** * Get a deployment * * @param name the name of the deployment * @return the deployment or null if not found */ Deployment getDeployment(String name); /** * Add a deployment * * @param deployment the deployment * @throws DeploymentException for any error */ void addDeployment(Deployment deployment) throws DeploymentException; /** * Remove a deployment * * @param deployment the deployment to remove * @return false when the context was previously unknown * @throws DeploymentException for any error */ boolean removeDeployment(Deployment deployment) throws DeploymentException; /** * Remove a deployment by name * * @param name the name of the deployment * @return false when the context was previously unknown * @throws DeploymentException for any error */ boolean removeDeployment(String name) throws DeploymentException; /** * Process the outstanding deployments. */ void process(); /** * Deploy the deployments * * @param deployments the deployments * @throws DeploymentException for any error */ void deploy(Deployment... deployments) throws DeploymentException; /** * Undeploy the deployments * * @param deployments the deployments * @throws DeploymentException for any error */ void undeploy(Deployment... deployments) throws DeploymentException; /** * Change the state of a deployment * * @param deploymentName the deployment name * @param stage the stage * @throws DeploymentException for any error */ void change(String deploymentName, DeploymentStage stage) throws DeploymentException; /** * Get the deployment stage for a deployment * * @param deploymentName the deployment name * @return the stage * @throws DeploymentException for any error */ DeploymentStage getDeploymentStage(String deploymentName) throws DeploymentException; /** * Check all the deployments are complete * * @throws DeploymentException when some deployment is not complete */ void checkComplete() throws DeploymentException; /** * Check if deployments are complete * * @param deployment the deployment * @throws DeploymentException when some deployments are not complete */ void checkComplete(Deployment... deployment) throws DeploymentException; /** * Check if deployments are complete * * @param names the deployment name * @throws DeploymentException when some deployments are not complete */ void checkComplete(String... names) throws DeploymentException; /** * Check if deployments are recognized * * @param deployments the deployments * @throws DeploymentException when some deployments are not recognized */ void checkStructureComplete(Deployment... deployments) throws DeploymentException; /** * Check if deployments are recognized * * @param names the deployment names * @throws DeploymentException when some deployments are not recognized */ void checkStructureComplete(String... names) throws DeploymentException; /** * Undeploy a deployments by name * * @param names the names of the deployments * @throws DeploymentException for any error */ void undeploy(String... names) throws DeploymentException; /** * Get a the state of deployment * * @param name the name of the deployment * @return the deployment state */ DeploymentState getDeploymentState(String name); /** * Get the managed objects for a deployment context. This is a * mapping of the attachment names to the associated ManagedObject. * * @param name the name of the deployment * @return the managed object map keyed by the attachment names. * @throws DeploymentException for any error */ Map getManagedObjects(String name) throws DeploymentException; /** * Get the graph of managed objects starting with the top-level deployment associated with name. * * @param name - the name of the top-level DeploymentContext to process. * @return the graph of managed objects for the top-level DeploymentContex and its children. * @throws DeploymentException for any error */ Graph> getDeepManagedObjects(String name) throws DeploymentException; /** * Get the managed deployment. * * @param name the name of the deployment * @return the managed deployment * @throws DeploymentException for any error */ ManagedDeployment getManagedDeployment(String name) throws DeploymentException; } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/IncompleteDeploymentException.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000644000175000017500000000565710717372452033363 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.client.spi; import org.jboss.deployers.spi.DeploymentException; /** * IncompleteDeploymentException. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class IncompleteDeploymentException extends DeploymentException { /** The serialVersionUID */ private static final long serialVersionUID = 1433292979582684692L; /** Incomplete deployments */ private IncompleteDeployments incompleteDeployments; /** * For serialization */ public IncompleteDeploymentException() { } /** * Create a new IncompleteDeploymentException. * * @param incompleteDeployments the incomplete deployments * @throws IllegalArgumentException for null incompleteDeployments */ public IncompleteDeploymentException(IncompleteDeployments incompleteDeployments) { if (incompleteDeployments == null) throw new IllegalArgumentException("Null incompleteDeployments"); this.incompleteDeployments = incompleteDeployments; } /** * Get the incompleteDeployments. * * @return the incompleteDeployments. */ public IncompleteDeployments getIncompleteDeployments() { return incompleteDeployments; } @Override public String getMessage() { StringBuilder buffer = new StringBuilder(); buffer.append("Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS):\n"); // Display all the missing deployers buffer.append(incompleteDeployments.getDeploymentsMissingDeployerInfo()); // Display all the incomplete deployments buffer.append(incompleteDeployments.getDeploymentsInErrorInfo()); // Display all the missing dependencies buffer.append(incompleteDeployments.getContextsMissingDependenciesInfo()); // Display all contexts in error buffer.append(incompleteDeployments.getContextsInErrorInfo()); // buffer to string return buffer.toString(); } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/MissingDependency.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000644000175000017500000000521310640504242033334 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.client.spi; import java.io.Serializable; /** * MissingDependency. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class MissingDependency implements Serializable { /** The serialVersionUID */ private static final long serialVersionUID = -1159684023853245283L; /** The name */ private String name; /** The dependency */ private String dependency; /** The required state */ private String requiredState; /** The actual state */ private String actualState; /** * For serialization */ public MissingDependency() { } /** * Create a new MissingDependency. * * @param name the name * @param dependency the dependency * @param requiredState the required state * @param actualState the actual state */ public MissingDependency(String name, String dependency, String requiredState, String actualState) { this.name = name; this.dependency = dependency; this.requiredState = requiredState; this.actualState = actualState; } /** * Get the actualState. * * @return the actualState. */ public String getActualState() { return actualState; } /** * Get the dependency. * * @return the dependency. */ public String getDependency() { return dependency; } /** * Get the name. * * @return the name. */ public String getName() { return name; } /** * Get the requiredState. * * @return the requiredState. */ public String getRequiredState() { return requiredState; } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/Deployment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000644000175000017500000000345710766514535033363 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.client.spi; import java.io.Serializable; import java.util.Set; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; /** * Deployment. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface Deployment extends PredeterminedManagedObjectAttachments, Serializable { /** * Get the deployment name * * @return the name */ String getName(); /** * Get the simple name * * @return the name */ String getSimpleName(); /** * Get the types. * * @return the types. */ @Deprecated Set getTypes(); /** * Set the types. * * @param types the types. */ @Deprecated void setTypes(Set types); } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/main/libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000755000175000017500000000000011620060463033332 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/spi/main/MainDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/client/0000644000175000017500000000270410770217742033350 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.client.spi.main; import org.jboss.deployers.client.spi.DeployerClient; /** * MainDeployer. * * @author Adrian Brock * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public interface MainDeployer extends DeployerClient { /** * Tell the main deployer we are about to shutdown */ void prepareShutdown(); /** * Shutdown. Removes all the deployments. */ void shutdown(); } libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/spi/0000755000175000017500000000000011620060463032647 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/spi/deployer/libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/spi/dep0000755000175000017500000000000011620060463033340 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/spi/deployer/DeploymentStage.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/spi/dep0000644000175000017500000001071410761251333033350 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer; import java.io.Serializable; /** * DeploymentStage. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentStage implements Serializable { /** The serialVersionUID */ private static final long serialVersionUID = 3302613286025012191L; /** Our stage */ private String name; /** The previous state */ private String after; /** The next state */ private String before; /** * Safely get the name of stage * * @param stage the stage * @param context the context for an error * @return the stage name */ private static String getStageName(DeploymentStage stage, String context) { if (stage == null) throw new IllegalArgumentException("Null " + context); return stage.getName(); } /** * Create a new DeploymentStage. * * @param name the name of the stage * @throws IllegalArgumentException for a null name */ public DeploymentStage(String name) { this(name, (String) null); } /** * Create a new DeploymentStage. * * @param name the name of the stage * @param after the name of the stage before our stage * @throws IllegalArgumentException for a null name */ public DeploymentStage(String name, String after) { this(name, after, null); } /** * Create a new DeploymentStage. * * @param name the name of the stage * @param after the stage before our stage * @throws IllegalArgumentException for a null parameter */ public DeploymentStage(String name, DeploymentStage after) { this(name, getStageName(after, "after"), null); } /** * Create a new DeploymentStage. * * @param name the name of the stage * @param after he stage before our stage * @param before the stage after our stage * @throws IllegalArgumentException for a null parameter */ public DeploymentStage(String name, DeploymentStage after, DeploymentStage before) { this(name, getStageName(after, "after"), getStageName(before, "before")); } /** * Create a new DeploymentStage. * * @param name the name of the stage * @param after the name of the stage before our stage * @param before the name of the stage after our stage * @throws IllegalArgumentException for a null name */ public DeploymentStage(String name, String after, String before) { if (name == null) throw new IllegalArgumentException("Null name"); this.name = name; this.after = after; this.before = before; } /** * Get the name. * * @return the name. */ public String getName() { return name; } /** * Get the after. * * @return the after. */ public String getAfter() { return after; } /** * Get the before. * * @return the before. */ public String getBefore() { return before; } @Override public boolean equals(Object obj) { if (obj == this) return true; if (obj == null || obj instanceof DeploymentStage == false) return false; DeploymentStage other = (DeploymentStage) obj; return getName().equals(other.getName()); } @Override public int hashCode() { return getName().hashCode(); } @Override public String toString() { return getName(); } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/spi/deployer/DeploymentStages.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/src/main/java/org/jboss/deployers/spi/dep0000644000175000017500000000515010761233255033351 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer; /** * The Standard DeploymentStages. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface DeploymentStages { /** The not installed stage - nothing is done here */ DeploymentStage NOT_INSTALLED = new DeploymentStage("Not Installed"); /** The parse stage - where metadata is read */ DeploymentStage PARSE = new DeploymentStage("Parse", NOT_INSTALLED); /** The post parse stage - where metadata can be fixed up */ DeploymentStage POST_PARSE = new DeploymentStage("PostParse", PARSE); /** The pre describe stage - where default dependencies metadata can be created */ DeploymentStage PRE_DESCRIBE = new DeploymentStage("PreDescribe", POST_PARSE); /** The describe stage - where dependencies are established */ DeploymentStage DESCRIBE = new DeploymentStage("Describe", PRE_DESCRIBE); /** The classloader stage - where classloaders are created */ DeploymentStage CLASSLOADER = new DeploymentStage("ClassLoader", DESCRIBE); /** The post classloader stage - e.g. aop */ DeploymentStage POST_CLASSLOADER = new DeploymentStage("PostClassLoader", CLASSLOADER); /** The pre real stage - where before real deployments are done */ DeploymentStage PRE_REAL = new DeploymentStage("PreReal", POST_CLASSLOADER); /** The real stage - where real deployment processing is done */ DeploymentStage REAL = new DeploymentStage("Real", PRE_REAL); /** The installed stage - could be used to provide valve in future? */ DeploymentStage INSTALLED = new DeploymentStage("Installed", REAL); } libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/.settings/0000755000175000017500000000000011620060463025421 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740032420 0ustar twernertwerner#Fri Sep 21 17:49:24 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-client-spi/.project0000644000175000017500000000062511071370224025154 0ustar twernertwerner jboss-deployers-client-spi JBoss Deployers Client SPI jboss-deployers-core-spi org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/0000755000175000017500000000000011620060440022222 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/.classpath0000644000175000017500000000545011113263640024215 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/pom.xml0000644000175000017500000000161711137607542023561 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-spi jar JBoss Deployers SPI http://www.jboss.com/products/jbossmc JBoss Deployers SPI org.jboss.deployers jboss-deployers-structure-spi libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/0000755000175000017500000000000011620060437023017 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/0000755000175000017500000000000011620060437023743 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/0000755000175000017500000000000011620060437024664 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/0000755000175000017500000000000011620060437025453 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/0000755000175000017500000000000011620060437026573 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060437030601 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/0000755000175000017500000000000011620060440031366 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/0000755000175000017500000000000011620060440033211 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/matchers/libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/m0000755000175000017500000000000011620060440033366 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/matchers/JarExtensionProvider.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/m0000644000175000017500000000255110757641060033410 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.matchers; /** * Jar file extension provider. * * @author Ales Justin */ public interface JarExtensionProvider { /** * Get the provided jar extension. * * @return the jar extension, or null if non can be provided */ String getJarExtension(); } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/Deployers.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/D0000644000175000017500000000665510770217742033351 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer; import java.util.Collection; import java.util.List; import java.util.Map; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.client.spi.Deployment; import org.jboss.managed.api.ManagedObject; /** * Deployers. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface Deployers { /** * Get the managed objects for a deployer * * @param context the context * @return the managed objects * @throws DeploymentException for any error */ Map getManagedObjects(DeploymentContext context) throws DeploymentException; /** * Process deployment * * @param deploy the deployments to deploy * @param undeploy the deployments to remove */ void process(List deploy, List undeploy); /** * Change the state of a deployment * * @param context the context * @param stage the stage * @throws DeploymentException for any error */ void change(DeploymentContext context, DeploymentStage stage) throws DeploymentException; /** * Get the deployment stage for a deployment * * @param context the context * @return the stage or null if not deployed * @throws DeploymentException for any error */ DeploymentStage getDeploymentStage(DeploymentContext context) throws DeploymentException; /** * Check all the deployments are complete * * @param errors the contexts in error * @param missingDeployer the deployments missing a deployer * @throws DeploymentException when some deployment is not complete */ void checkComplete(Collection errors, Collection missingDeployer) throws DeploymentException; /** * Check if deployments are complete * * @param contexts the deployments * @throws DeploymentException when the deployment is not complete */ void checkComplete(DeploymentContext... contexts) throws DeploymentException; /** * Check if deployments are structurally complete * * @param contexts the deployments * @throws DeploymentException when the deployment is not complete */ void checkStructureComplete(DeploymentContext... contexts) throws DeploymentException; /** * Shutdown. Stops any further deployment */ void shutdown(); } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/Deployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/D0000644000175000017500000000557011046542655033345 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.Ordered; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Deployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface Deployer extends Ordered { /** * Get the deployment stage for this deployer * * @return the stage */ DeploymentStage getStage(); /** * Whether we only want the top level * * @return true for top level only */ boolean isTopLevelOnly(); /** * Whether we only want components * * @return true for components only */ boolean isComponentsOnly(); /** * Whether we dont want components * * @return true for no components */ boolean isWantComponents(); /** * Whether we want all inputs * * @return true for all inputs */ boolean isAllInputs(); /** * Get the input for this deployer * * @return the input type */ Class getInput(); /** * Get the otput for this deployer * * @return the output type */ Class getOutput(); /** * Get the input for this deployer * * @return the inputs */ Set getInputs(); /** * Get the outputs for this deployer * * @return the outputs */ Set getOutputs(); /** * Whether to process parents before children (default true) * * @return true to process parents first */ boolean isParentFirst(); /** * Deploy a deployment * * @param unit the unit * @throws DeploymentException for any error */ void deploy(DeploymentUnit unit) throws DeploymentException; /** * Undeploy an deployment * * @param unit the unit */ void undeploy(DeploymentUnit unit); } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/managed/libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/m0000755000175000017500000000000011620060440033366 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/managed/ManagedDeploymentCreator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/m0000644000175000017500000000362510756311702033407 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.managed; import java.util.Map; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.managed.api.ManagedDeployment; import org.jboss.managed.api.ManagedObject; /** * A plugin interface for building up a ManagedDeployment. * * TODO: Generally an implementation would make use of registered * ManagedComponentCreator instances. Should the ManagedComponentCreator * registry be part of this interface? * * @author Scott.Stark@jboss.org * @version $Revision: 69883 $ */ public interface ManagedDeploymentCreator { /** * Build up the deployment management view. * * @param unit - the deployment unit to process * @param unitMOs - the managed objects * @param parent - the parent * @return the managed deployment */ public ManagedDeployment build(DeploymentUnit unit, Map unitMOs, ManagedDeployment parent); } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/managed/ManagedComponentCreator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/m0000644000175000017500000000345310756311702033406 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.managed; import java.util.Set; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.managed.api.ManagedDeployment; /** * A plugin interface for building up the ManagedComponents of * a ManagedDeployment. * * @param the metadata type * @author Scott.Stark@jboss.org * @version $Revision: 69883 $ */ public interface ManagedComponentCreator { /** * Callout to create the ManagedComponents that correspond to * the given metdata. * * @param unit - the deployment unit to process * @param md - the unit ManagedDeployment * @param metaData - the unit metadata of type T for which the * ManagedComponents should be created. */ public void build(DeploymentUnit unit, ManagedDeployment md, Set metaData); } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/managed/ManagedObjectCreator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/m0000644000175000017500000000502611104173360033376 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.managed; import java.util.Map; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.managed.api.ManagedObject; /** * ManagedObjectCreator. * * TODO JBMICROCONT-181 Critique * Rather having the contexts create the managed objects directly * they should provide the underlying metadata, e.g. the Fields + other information * from which we can create the managed object. * This is important because it is likely that multiple builders/deployers will * play populate an object, e.g. (possibly?) * - the parsing deployer will describe the properties/metadata * - there maybe transformation, augmentation by some other deployers * - the component deployers will want to link their component metadata back into * the parent by reference, e.g. an mbean as part of sar/-service.xml * - the real deployer will describe any runtime support, e.g. managed operations and statistics * * @author Adrian Brock * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public interface ManagedObjectCreator { /** * Build managed objects for this deployment context * * @param unit the deployment unit * @param managedObjects the managed objects * @throws DeploymentException */ void build(DeploymentUnit unit, Set attachmentNames, Map managedObjects) throws DeploymentException; } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/StandardDeployerTypes.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/S0000644000175000017500000000422210640504406033344 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer; /** * Standard (known) deployment types found in the DeploymentUnit types set. * * @author Scott.Stark@jboss.org * @version $Revision:$ */ public interface StandardDeployerTypes { /** JavaEE enterprise application archive */ String EAR = "ear"; /** JavaEE client application archive */ String CAR = "car"; /** JavaEE ejb generic archive */ String EJB = "ejb"; /** JavaEE ejb 2.1 and earlier archive */ String EJB2x = "ejb2x"; /** JavaEE ejb 3x archive */ String EJB3x = "ejb3x"; /** JavaEE JPA archive */ String JPA = "jpa"; /** JavaEE resource adaptor archive */ String RAR = "rar"; /** JBoss MC beans archive */ String MCBEANS = "beans"; /** JBoss service archive */ String SAR = "sar"; /** JBoss hibernate archive */ String HAR = "har"; /** JBoss aop archive */ String AOP = "aop"; /** Spring archive */ String SPRING = "spring"; /** An OSGi bundle */ String OSGI_BUNDLE = "osgi"; /** The deployment type used if a deployer does not specify anything */ String UNSPECIFIED_TYPE = "unspecified"; } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000755000175000017500000000000011620060440033361 5ustar twernertwerner././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractOptionalRealDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000647011052524763033406 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * An abstract more complicated VFS real deployer where the input * is optional instead of mandatory. * * @param the deployment type * @author Carlo de Wolf * @author Adrian Brock * @author Ales Justin */ public abstract class AbstractOptionalRealDeployer extends AbstractRealDeployer { /** The optional input */ private Class optionalInput; /** The disable optional flag */ private boolean disableOptional; /** * Create a new AbstractOptionalRealDeployer. * * @param optionalInput the optional input * @throws IllegalArgumentException for null input */ public AbstractOptionalRealDeployer(Class optionalInput) { if (optionalInput == null) throw new IllegalArgumentException("Null optional Input"); this.optionalInput = optionalInput; setInputs(optionalInput); } /** * Should we disable optional flag. * Falling back to similar behavior as AbstractSimpleRealDeployer. * * @param disableOptional the disable optional flag */ public void setDisableOptional(boolean disableOptional) { this.disableOptional = disableOptional; } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { T deployment = unit.getAttachment(optionalInput); if (disableOptional == false || deployment != null) deploy(unit, deployment); } /** * Deploy * * @param unit the deployment unit * @param deployment the optional attachment * @throws DeploymentException for any error */ public abstract void deploy(DeploymentUnit unit, T deployment) throws DeploymentException; @Override public void internalUndeploy(DeploymentUnit unit) { T deployment = unit.getAttachment(optionalInput); if (disableOptional == false || deployment != null) undeploy(unit, deployment); } /** * Undeploy * * @param unit the deployment unit * @param deployment the optional attachment */ public void undeploy(DeploymentUnit unit, T deployment) { // Nothing } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractSimpleRealDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000477610766170544033422 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractSimpleRealDeployer. * * @param the input type * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractSimpleRealDeployer extends AbstractRealDeployer { /** * Create a new AbstractSimpleRealDeployer * * @param input the input type * @throws IllegalArgumentException for a null input */ public AbstractSimpleRealDeployer(Class input) { if (input == null) throw new IllegalArgumentException("Null input"); setInput(input); } @SuppressWarnings("unchecked") public Class getInput() { Class input = super.getInput(); if (input == null) throw new IllegalStateException("No input for " + this); return (Class) input; } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { T deployment = unit.getAttachment(getInput()); if (deployment != null) deploy(unit, deployment); } public void internalUndeploy(DeploymentUnit unit) { T deployment = unit.getAttachment(getInput()); if (deployment != null) undeploy(unit, deployment); } public abstract void deploy(DeploymentUnit unit, T deployment) throws DeploymentException; public void undeploy(DeploymentUnit unit, T deployment) { // Nothing } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractAnnotationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000601111037353520033367 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import java.lang.annotation.Annotation; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.spi.annotations.Element; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractComponentDeployer. * * @author Ales Justin */ public class AbstractAnnotationDeployer extends AbstractSimpleRealDeployer { /** The annotation processors */ private AnnotationProcessor[] processors; public AbstractAnnotationDeployer(AnnotationProcessor... processors) { super(AnnotationEnvironment.class); if (processors != null && processors.length > 0) { this.processors = processors; for (AnnotationProcessor processor : processors) { addInput(processor.getAnnotation()); addOutput(processor.getOutput()); } } else throw new IllegalArgumentException("Null or empty processors."); } @SuppressWarnings("unchecked") public void deploy(DeploymentUnit unit, AnnotationEnvironment deployment) throws DeploymentException { for (AnnotationProcessor processor : processors) { String attachmentName = processor.getAnnotation().getName(); Object annotationAttachment = unit.getAttachment(attachmentName); Object metadata = processor.createMetaData(annotationAttachment); if (metadata != null) unit.addAttachment(attachmentName, metadata); Set> elements = deployment.classIsAnnotatedWith(processor.getAnnotation()); for (Element elt : elements) { Class clazz = elt.getOwner(); metadata = processor.createMetaDataFromClass(clazz); if (metadata != null) unit.addAttachment(attachmentName + "#" + clazz.getName(), metadata); } } } }././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractRealDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000746610721615224033407 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractRealDeployer. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public abstract class AbstractRealDeployer extends AbstractDeployer { /** Use unit name for controller context name */ private boolean useUnitName; /** * Create a new AbstractRealDeployer. */ public AbstractRealDeployer() { setStage(DeploymentStages.REAL); } public final void deploy(DeploymentUnit unit) throws DeploymentException { internalDeploy(unit); if (isControllerContextNameCandidate(unit)) { addControllerContextName(unit); } } /** * Should we set controller context name on unit? * * @param unit the dpeloyment unit * @return true if we should use unit's name as controller context name */ protected boolean isControllerContextNameCandidate(DeploymentUnit unit) { return useUnitName && unit.isComponent(); } /** * Deploy a deployment * * @param unit the unit * @throws DeploymentException for any error */ protected abstract void internalDeploy(DeploymentUnit unit) throws DeploymentException; /** * Add controller context name. * * @param unit the deployment unit */ protected void addControllerContextName(DeploymentUnit unit) { unit.addControllerContextName(unit.getName()); } /** * Remove controller context name. * * @param unit the deployment unit */ protected void removeControllerContextName(DeploymentUnit unit) { unit.removeControllerContextName(unit.getName()); } public final void undeploy(DeploymentUnit unit) { try { if (isControllerContextNameCandidate(unit)) { removeControllerContextName(unit); } } catch (Throwable t) { if (log.isTraceEnabled()) log.trace("Exception while removing unit name: " + t); } internalUndeploy(unit); } /** * Undeploy an deployment * * @param unit the unit */ protected void internalUndeploy(DeploymentUnit unit) { // nothing } /** * Should we use unit name for controller context name. * * @return true if usage is allowed */ public boolean isUseUnitName() { return useUnitName; } /** * Set use unit name for controller context name. * * @param useUnitName flag to allow unit name usage */ public void setUseUnitName(boolean useUnitName) { this.useUnitName = useUnitName; } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractParsingDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000271510640504406033376 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.spi.deployer.DeploymentStages; /** * AbstractParsingDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractParsingDeployer extends AbstractDeployer { /** * Create a new AbstractParsingDeployer. */ public AbstractParsingDeployer() { setStage(DeploymentStages.PARSE); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractComponentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000641411021237653033377 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractComponentDeployer. * * @param the deployment type * @param the component type * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public abstract class AbstractComponentDeployer extends AbstractRealDeployerWithInput { /** The component visitor */ protected DeploymentVisitor compVisitor; /** * Create a new AbstractComponentDeployer. */ public AbstractComponentDeployer() { setAllInputs(true); } @SuppressWarnings("unchecked") public Class getOutput() { Class output = super.getOutput(); if (output == null) throw new IllegalStateException("No output for " + this); return (Class) output; } /** * Set the component visitor * * @param visitor the visitor * @throws IllegalArgumentException if the visitor is null */ protected void setComponentVisitor(DeploymentVisitor visitor) { if (visitor == null) throw new IllegalArgumentException("Null visitor"); this.compVisitor = visitor; Class componentType = visitor.getVisitorType(); if (componentType == null) throw new IllegalArgumentException("Null visitor type"); setOutput(componentType); addInput(componentType); } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { super.internalDeploy(unit); try { deployComponents(unit); } catch (Throwable t) { super.internalUndeploy(unit); throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + unit.getName(), t); } } public void internalUndeploy(DeploymentUnit unit) { undeployComponents(unit); super.internalUndeploy(unit); } protected void deployComponents(DeploymentUnit unit) throws DeploymentException { if (compVisitor == null) return; deploy(unit, compVisitor); } protected void undeployComponents(DeploymentUnit unit) { undeploy(unit, compVisitor); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractDeploymentVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000722111137607542033402 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import java.util.List; import java.util.ArrayList; import org.jboss.logging.Logger; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.spi.DeploymentException; /** * Simple deployment visitor. * * @param exact component type * @param exact deployment type * @author Ales Justin */ public abstract class AbstractDeploymentVisitor extends ComponentAdapter implements DeploymentVisitor { private Logger log = Logger.getLogger(getClass()); protected String getAttachmentName(C attachment) { return getComponentType().getName(); } /** * Get components from deployment. * * @param deployment the deployment * @return list of components */ // TODO - change to Iterable - JBDEPLOY-134 protected abstract List getComponents(T deployment); /** * Get the component type. * * @return the component type */ protected abstract Class getComponentType(); public void deploy(DeploymentUnit unit, T deployment) throws DeploymentException { List components = getComponents(deployment); if (components != null && components.isEmpty() == false) { List visited = new ArrayList(); try { for (C component : components) { addComponent(unit, component); visited.add(component); } } catch (Throwable t) { for (int i = visited.size() - 1; i >= 0; i--) { safeRemoveComponent(unit, visited.get(i)); } throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + unit.getName(), t); } } } public void undeploy(DeploymentUnit unit, T deployment) { List components = getComponents(deployment); if (components != null && components.isEmpty() == false) { for (C component : components) { safeRemoveComponent(unit, component); } } } /** * Ignore all error during component removal. * * @param unit the deployment unit * @param attachment the attachment */ protected void safeRemoveComponent(DeploymentUnit unit, C attachment) { try { removeComponent(unit, attachment); } catch (Throwable ignored) { log.warn("Error during component removal: " + unit.getName(), ignored); } } }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractClassLoaderDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000445511071442646033407 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.structure.spi.ClassLoaderFactory; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractClassLoaderDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractClassLoaderDeployer extends AbstractDeployer implements ClassLoaderFactory { /** * Create a new AbstractClassLoaderDeployer. */ public AbstractClassLoaderDeployer() { setStage(DeploymentStages.CLASSLOADER); setInput(ClassLoaderFactory.class); setOutput(java.lang.ClassLoader.class); setAllInputs(true); } public void deploy(DeploymentUnit unit) throws DeploymentException { ClassLoaderFactory factory = unit.getAttachment(ClassLoaderFactory.class); if (factory == null) factory = this; unit.createClassLoader(factory); } public void undeploy(DeploymentUnit unit) { ClassLoaderFactory factory = unit.getAttachment(ClassLoaderFactory.class); if (factory == null) factory = this; unit.removeClassLoader(factory); } public void removeClassLoader(DeploymentUnit unit) throws Exception { } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/DeploymentVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000356610640504406033403 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * DeploymentVisitor. * * @param the deployment type * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface DeploymentVisitor { /** * Get the visitor type * * @return the visitor type */ Class getVisitorType(); /** * Deploy the deployment * * @param unit the deployment unit * @param deployment the deployment * @throws DeploymentException the deployment exception */ void deploy(DeploymentUnit unit, T deployment) throws DeploymentException; /** * Undeploy the deployment * * @param unit the deployment unit * @param deployment the deployment */ void undeploy(DeploymentUnit unit, T deployment); } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000002057411046542655033412 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import java.util.HashSet; import java.util.Set; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.deployer.DeploymentStage; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.logging.Logger; /** * AbstractDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractDeployer implements Deployer { /** The log */ protected Logger log = Logger.getLogger(getClass()); /** The relative order */ private int relativeOrder = 0; /** The deployment stage */ private DeploymentStage stage = DeploymentStages.REAL; /** Top level only */ private boolean topLevelOnly; /** Components only */ private boolean componentsOnly; /** Want components */ private boolean wantComponents; /** All inputs */ private boolean allInputs; /** The input type */ private Class input; /** The output type */ private Class output; /** The input name */ private Set inputs; /** The output name */ private Set outputs; /** Whether to process parents first */ private boolean parentFirst = true; public int getRelativeOrder() { return relativeOrder; } public void setRelativeOrder(int relativeOrder) { this.relativeOrder = relativeOrder; } public DeploymentStage getStage() { return stage; } /** * Set the stage. * * @param stage the stage. * @throws IllegalArgumentException for a null stage */ public void setStage(DeploymentStage stage) { if (stage == null) throw new IllegalArgumentException("Null stage"); this.stage = stage; } public boolean isAllInputs() { return allInputs; } /** * Set the allInputs. * * @param allInputs the allInputs. */ public void setAllInputs(boolean allInputs) { this.allInputs = allInputs; } public boolean isComponentsOnly() { return componentsOnly; } /** * Set the components only. * * @param componentsOnly the componentsOnly. */ public void setComponentsOnly(boolean componentsOnly) { this.componentsOnly = componentsOnly; setWantComponents(true); } public boolean isWantComponents() { return wantComponents; } /** * Set the want components. * * @param wantComponents the want components. */ public void setWantComponents(boolean wantComponents) { this.wantComponents = wantComponents; } public boolean isTopLevelOnly() { return topLevelOnly; } /** * Set the top level only. * * @param topLevelOnly the top level only. */ public void setTopLevelOnly(boolean topLevelOnly) { this.topLevelOnly = topLevelOnly; } public Class getInput() { return input; } /** * Set the input * * @param input the input */ @SuppressWarnings("unchecked") public void setInput(Class input) { addInput(input); this.input = input; } public Class getOutput() { return output; } /** * Set the output * * @param output the outputs */ @SuppressWarnings("unchecked") public void setOutput(Class output) { addOutput(output); this.output = output; } public Set getInputs() { return inputs; } /** * Set the inputs. * * @param inputs the inputs. */ public void setInputs(Set inputs) { this.inputs = inputs; } /** * Set the inputs. * * @param inputs the inputs. */ @SuppressWarnings("unchecked") public void setInputs(String... inputs) { if (inputs == null) { setInputs((Set) null); return; } Set temp = new HashSet(inputs.length); for (String input : inputs) { if (input == null) throw new IllegalArgumentException("Null input"); temp.add(input); } setInputs(temp); } /** * Set the inputs. * * @param inputs the inputs. */ @SuppressWarnings("unchecked") public void setInputs(Class... inputs) { if (inputs == null) { setInputs((Set) null); return; } Set temp = new HashSet(inputs.length); for (Class input : inputs) { if (input == null) throw new IllegalArgumentException("Null input"); temp.add(input.getName()); } setInputs(temp); } /** * Add an input * * @param input the input */ public void addInput(String input) { if (input == null) throw new IllegalArgumentException("Null input"); if (inputs == null) inputs = new HashSet(); inputs.add(input); } /** * Add an input * * @param input the input */ public void addInput(Class input) { if (input == null) throw new IllegalArgumentException("Null input"); addInput(input.getName()); } public Set getOutputs() { return outputs; } /** * Set the outputs. * * @param outputs the outputs. */ public void setOutputs(Set outputs) { this.outputs = outputs; } /** * Set the outputs. * * @param outputs the outputs. */ @SuppressWarnings("unchecked") public void setOutputs(String... outputs) { if (outputs == null) { setOutputs((Set) null); return; } Set temp = new HashSet(outputs.length); for (String output : outputs) { if (output == null) throw new IllegalArgumentException("Null output"); temp.add(output); } setOutputs(temp); } /** * Set the outputs. * * @param outputs the outputs. */ @SuppressWarnings("unchecked") public void setOutputs(Class... outputs) { if (outputs == null) { setOutputs((Set) null); return; } Set temp = new HashSet(outputs.length); for (Class output : outputs) { if (output == null) throw new IllegalArgumentException("Null output"); temp.add(output.getName()); } setOutputs(temp); } /** * Add an output * * @param output the output */ public void addOutput(String output) { if (output == null) throw new IllegalArgumentException("Null output"); if (outputs == null) outputs = new HashSet(); outputs.add(output); } /** * Add an output * * @param output the output */ public void addOutput(Class output) { if (output == null) throw new IllegalArgumentException("Null output"); addOutput(output.getName()); } public boolean isParentFirst() { return parentFirst; } /** * Set the parentFirst. * * @param parentFirst the parentFirst. */ public void setParentFirst(boolean parentFirst) { this.parentFirst = parentFirst; } public void undeploy(DeploymentUnit unit) { // Nothing } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AttachmentLocator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000564111014304527033375 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Search a DeploymentUnit structure from child to parent for a matching * attachment. * * @author Scott.Stark@jboss.org * @author adrian@jboss.org * @author ales.justin@jboss.org * @version $Revision:$ */ public class AttachmentLocator { /** * Get a named attachment * * @param unit the deployment unit * @param name the name of the attachment * @return the attachment or null if not present * @throws IllegalArgumentException for a null name */ public static Object search(DeploymentUnit unit, String name) { Object attachment = null; while (attachment == null && unit != null) { attachment = unit.getAttachment(name); unit = unit.getParent(); } return attachment; } /** * Get named attachment of a given type * * @param the expected type * @param unit the deployment unit * @param name the name of the attachment * @param expectedType the expected type * @return the attachment or null if not present * @throws IllegalArgumentException for a null name or expectedType */ public static T search(DeploymentUnit unit, String name, Class expectedType) { Object result = search(unit, name); if (result == null) return null; if (expectedType == null) throw new IllegalArgumentException("Null expected type."); return expectedType.cast(result); } /** * Get an attachment of the given type * * @param the expected type * @param type the type * @param unit the deployment unit * @return the attachment or null if not present * @throws IllegalArgumentException for a null name or type */ public static T search(DeploymentUnit unit, Class type) { return search(unit, type.getName(), type); } } ././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractTopLevelClassLoaderDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000425010756604047033404 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractTopLevelClassLoaderDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractTopLevelClassLoaderDeployer extends AbstractClassLoaderDeployer { public ClassLoader createClassLoader(DeploymentUnit unit) throws Exception { if (unit.isTopLevel()) return createTopLevelClassLoader(unit); return unit.getTopLevel().getClassLoader(); } @Override public void removeClassLoader(DeploymentUnit unit) throws Exception { if (unit.isTopLevel()) removeTopLevelClassLoader(unit); } /** * Create a top level classloader * * @param unit the deployment unit * @return the classloader * @throws Exception for any error */ protected abstract ClassLoader createTopLevelClassLoader(DeploymentUnit unit) throws Exception; /** * Remove a top level classloader * * @param unit the deployment unit * @throws Exception for any error */ protected void removeTopLevelClassLoader(DeploymentUnit unit) throws Exception { } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/ComponentAdapter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000451611072505470033401 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * Simple component adapter. * * @param exact attachment type * @author Ales Justin */ public abstract class ComponentAdapter { /** * Get component name. * * @param attachment the attachment * @return the component name */ protected abstract String getComponentName(T attachment); /** * Get attachment name. * By default we return visitor type's name. * * @param attachment the attachment * @return the attachment name */ protected abstract String getAttachmentName(T attachment); /** * Add component. * * @param unit the deployment unit * @param attachment the attachment */ protected void addComponent(DeploymentUnit unit, T attachment) { DeploymentUnit component = unit.addComponent(getComponentName(attachment)); component.addAttachment(getAttachmentName(attachment), attachment); } /** * Remove component. * * @param unit the deployment unit * @param attachment the attachment */ protected void removeComponent(DeploymentUnit unit, T attachment) { unit.removeComponent(getComponentName(attachment)); } }././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractComponentVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000367611072505470033407 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.spi.DeploymentException; /** * Simple component visitor. * * @param exact attachment type * @author Ales Justin */ public abstract class AbstractComponentVisitor extends ComponentAdapter implements DeploymentVisitor { /** * Get attachment name. * By default we return visitor type's name. * * @param attachment the attachment * @return the attachment name */ protected String getAttachmentName(T attachment) { return getVisitorType().getName(); } public void deploy(DeploymentUnit unit, T attachment) throws DeploymentException { addComponent(unit, attachment); } public void undeploy(DeploymentUnit unit, T attachment) { removeComponent(unit, attachment); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/DefaultManagedObjectCreator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000574011113261537033400 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import java.util.Map; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.managed.ManagedObjectCreator; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.logging.Logger; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.factory.ManagedObjectFactory; import org.jboss.managed.plugins.factory.ManagedObjectFactoryBuilder; import org.jboss.metadata.spi.MetaData; /** * A default ManagedObjectCreator that loops through the deployment attachment * names and for those which have a non-null value, calls the ManagedObjectFactory * to build the attachment ManagedObject. * * @author Scott.Stark@jboss.org * @version $Revision: 81635 $ */ public class DefaultManagedObjectCreator implements ManagedObjectCreator { private static Logger log = Logger.getLogger(DefaultManagedObjectCreator.class); private ManagedObjectFactory mof; public ManagedObjectFactory getMof() { return mof; } public void setMof(ManagedObjectFactory mof) { this.mof = mof; } /** * Build managed object. * * @param unit the deployment unit * @param managedObjects map of managed objects * @throws DeploymentException for any deployment exception */ public void build(DeploymentUnit unit, Set attachments, Map managedObjects) throws DeploymentException { MetaData metaData = unit.getMetaData(); ManagedObjectFactory factory = mof; if(factory == null ) factory = ManagedObjectFactoryBuilder.create(); for(String name : attachments) { Object instance = unit.getAttachment(name); if (instance != null) { ManagedObject mo = factory.initManagedObject(instance, null, metaData, name, null); if (mo != null) managedObjects.put(mo.getName(), mo); } } } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractAnnotationProcessor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000353011021237653033373 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import java.lang.annotation.Annotation; /** * Abstract annotation processor. * * @param the annotation type * @param the output type * @author Ales Justin */ public abstract class AbstractAnnotationProcessor implements AnnotationProcessor { public T createMetaData(Object attachment) { return null; } public T createMetaDataFromClass(Class clazz) { return createMetaDataFromClass(clazz, clazz.getAnnotation(getAnnotation())); } /** * Create metadata from class. * * @param clazz the class * @param annotation the annotation instance on a class * @return new metadata instance of null if cannot be created */ protected abstract T createMetaDataFromClass(Class clazz, A annotation); }././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractRealDeployerWithInput.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000001150711037353520033375 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractRealDeployerWithInput. * * @param the type of the input * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public abstract class AbstractRealDeployerWithInput extends AbstractRealDeployer { /** The visitor */ private DeploymentVisitor visitor; /** Whether the warning has been displayed */ private boolean warned; /** * Create a new AbstractRealDeployerWithInput. */ public AbstractRealDeployerWithInput() { } /** * Create a new AbstractRealDeployerWithInput. * * @param input the input */ public AbstractRealDeployerWithInput(Class input) { setInput(input); } @SuppressWarnings("unchecked") public Class getInput() { Class input = super.getInput(); if (input == null) throw new IllegalStateException("No input for " + this); return (Class) input; } /** * Set the deployment visitor * * @param visitor the visitor * @throws IllegalArgumentException if the visitor is null */ protected void setDeploymentVisitor(DeploymentVisitor visitor) { if (visitor == null) throw new IllegalArgumentException("Null visitor"); this.visitor = visitor; Class input = visitor.getVisitorType(); if (input == null) throw new IllegalArgumentException("Null visitor type"); setInput(input); } public void internalDeploy(DeploymentUnit unit) throws DeploymentException { if (visitor == null) { if (warned == false) { log.error("INTERNAL ERROR: Visitor is null for " + getClass().getName()); warned = true; } return; } deploy(unit, visitor); } /** * Deploy over visitor. * Unwind already deployed deployments on failure. * * @param the deployment type * @param unit the deployment unit * @param visitor the visitor * @throws DeploymentException for any error */ protected void deploy(DeploymentUnit unit, DeploymentVisitor visitor) throws DeploymentException { if (visitor == null) throw new IllegalArgumentException("Null visitor."); List visited = new ArrayList(); try { Set deployments = unit.getAllMetaData(visitor.getVisitorType()); for (U deployment : deployments) { visitor.deploy(unit, deployment); visited.add(deployment); } } catch (Throwable t) { for (int i = visited.size()-1; i >= 0; --i) { try { visitor.undeploy(unit, visited.get(i)); } catch (Throwable ignored) { log.warn("Error during undeploy: " + unit.getName(), ignored); } } throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + unit.getName(), t); } } /** * Undeploy over visitor. * * @param the deployment type * @param unit the deployment unit * @param visitor the visitor */ protected void undeploy(DeploymentUnit unit, DeploymentVisitor visitor) { if (visitor == null) return; Set deployments = unit.getAllMetaData(visitor.getVisitorType()); for (U deployment : deployments) visitor.undeploy(unit, deployment); } public void internalUndeploy(DeploymentUnit unit) { undeploy(unit, visitor); } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AbstractParsingDeployerWithOutput.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000002521411113261537033376 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import java.util.Collections; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.matchers.JarExtensionProvider; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * AbstractParsingDeployerWithOutput. * * @param the type of output * @author Adrian Brock * @author Ales Justin * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public abstract class AbstractParsingDeployerWithOutput extends AbstractParsingDeployer implements JarExtensionProvider { /** The metadata file names */ private Set names; /** The suffix */ private String suffix; /** The jar extension */ private String jarExtension; /** Include the deployment file */ private boolean includeDeploymentFile = false; /** Should the ManagedObjects be created for the output metadata */ private boolean buildManagedObject = false; /** * Create a new AbstractParsingDeployerWithOutput. * * @param output the type of output * @throws IllegalArgumentException for null output */ public AbstractParsingDeployerWithOutput(Class output) { if (output == null) throw new IllegalArgumentException("Null output"); setOutput(output); } @SuppressWarnings("unchecked") @Override public Class getOutput() { return (Class) super.getOutput(); } /** * Get the name. * * @return the name. */ public String getName() { if (names == null || names.isEmpty()) return null; if (names.size() > 1) throw new IllegalArgumentException("Use getNames since more than one name is set: " + names); return names.iterator().next(); } /** * Set the name. * * @param name the name. */ public void setName(String name) { if (names != null) throw new IllegalArgumentException("Names already set."); this.names = Collections.singleton(name); } /** * Get the names. * * @return the names. */ public Set getNames() { return names; } /** * Set the names. * * @param names the names. */ public void setNames(Set names) { if (names != null && names.isEmpty() == false) { for (String name : names) if (name == null) throw new IllegalArgumentException("Null name: " + names); } this.names = names; } /** * Get the suffix. * * @return the suffix. */ public String getSuffix() { return suffix; } /** * Set the suffix. * * @param suffix the suffix. */ public void setSuffix(String suffix) { this.suffix = suffix; } /** * Get the jar extension. * * @return the jar extension */ public String getJarExtension() { return jarExtension; } /** * Set the jar extension. * * @param jarExtension the jar extension */ public void setJarExtension(String jarExtension) { this.jarExtension = jarExtension; } /** * Get the includeDeploymentFile. * * @return the includeDeploymentFile. */ public boolean isIncludeDeploymentFile() { return includeDeploymentFile; } /** * Set the includeDeploymentFile. * * @param includeDeploymentFile the includeDeploymentFile. */ public void setIncludeDeploymentFile(boolean includeDeploymentFile) { this.includeDeploymentFile = includeDeploymentFile; } public boolean isBuildManagedObject() { return buildManagedObject; } public void setBuildManagedObject(boolean buildManagedObject) { this.buildManagedObject = buildManagedObject; } /** * A flag indicating whether createMetaData should execute a parse even if a non-null metadata value exists. * * @return false if a parse should be performed only if there is no existing metadata value. True indicates * that parse should be done regardless of an existing metadata value. */ protected boolean allowsReparse() { return false; } /** * Do we have a single name set. * * @return true is just one matching name is set */ private boolean hasSingleName() { return names == null || names.size() == 1; } public void deploy(DeploymentUnit unit) throws DeploymentException { if (accepts(unit) == false) return; if (hasSingleName()) createMetaData(unit, getName(), suffix); else createMetaData(unit, names, suffix); } /** * Callback to do prechecking on the deployment * * @param unit the unit * @return true by default * @throws DeploymentException for any error */ protected boolean accepts(DeploymentUnit unit) throws DeploymentException { return true; } /** * Get some meta data * * @param unit the deployment unit * @param key the key into the managed objects * @return the metadata or null if it doesn't exist */ protected T getMetaData(DeploymentUnit unit, String key) { return unit.getAttachment(key, getOutput()); } /** * Create some meta data. Calls createMetaData(unit, name, suffix, getDeploymentType().getName()). * * @param unit the deployment unit * @param name the name * @param suffix the suffix * @throws DeploymentException for any error */ protected void createMetaData(DeploymentUnit unit, String name, String suffix) throws DeploymentException { createMetaData(unit, name, suffix, getOutput().getName()); } /** * Create some meta data. Calls createMetaData(unit, name, suffix, getDeploymentType().getName()). * * @param unit the deployment unit * @param names the names * @param suffix the suffix * @throws DeploymentException for any error */ protected void createMetaData(DeploymentUnit unit, Set names, String suffix) throws DeploymentException { createMetaData(unit, names, suffix, getOutput().getName()); } /** * Create some meta data. Invokes parse(unit, name, suffix) if there is not already a * metadata * * @param unit the deployment unit * @param name the name * @param suffix the suffix * @param key the key into the managed objects * @throws DeploymentException for any error */ protected void createMetaData(DeploymentUnit unit, String name, String suffix, String key) throws DeploymentException { createMetaData(unit, Collections.singleton(name), suffix, key); } /** * Create some meta data. Invokes parse(unit, name, suffix) if there is not already a * metadata * * @param unit the deployment unit * @param names the names * @param suffix the suffix * @param key the key into the managed objects * @throws DeploymentException for any error */ protected void createMetaData(DeploymentUnit unit, Set names, String suffix, String key) throws DeploymentException { // First see whether it already exists T result = getMetaData(unit, key); if (result != null && allowsReparse() == false) return; // Create it try { if (suffix == null) { if (hasSingleName()) result = parse(unit, getName(), result); else result = parse(unit, names, result); } else { if (hasSingleName()) result = parse(unit, getName(), suffix, result); else result = parse(unit, names, suffix, result); } } catch (Exception e) { throw DeploymentException.rethrowAsDeploymentException("Error creating managed object for " + unit.getName(), e); } // Doesn't exist if (result == null) return; // Register it unit.getTransientManagedObjects().addAttachment(key, result, getOutput()); } /** * Parse an exact file name * * @param unit the unit * @param name the exact name to match * @param root - possibly null pre-existing root * @return the metadata or null if it doesn't exist * @throws Exception for any error */ protected abstract T parse(DeploymentUnit unit, String name, T root) throws Exception; /** * Parse an multiple exact file names * * @param unit the unit * @param names the exact names to match * @param root - possibly null pre-existing root * @return the metadata or null if it doesn't exist * @throws Exception for any error */ protected abstract T parse(DeploymentUnit unit, Set names, T root) throws Exception; /** * Parse an exact file name or look for a suffix * * @param unit the unit * @param name the exact name to match * @param suffix the suffix to match * @param root - possibly null pre-existing root * @return the metadata or null if it doesn't exist * @throws Exception for any error */ protected abstract T parse(DeploymentUnit unit, String name, String suffix, T root) throws Exception; /** * Parse exact file names or look for a suffix * * @param unit the unit * @param names the exact names to match * @param suffix the suffix to match * @param root - possibly null pre-existing root * @return the metadata or null if it doesn't exist * @throws Exception for any error */ protected abstract T parse(DeploymentUnit unit, Set names, String suffix, T root) throws Exception; } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/helpers/AnnotationProcessor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/deployer/h0000644000175000017500000000365211021237653033400 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.deployer.helpers; import java.lang.annotation.Annotation; /** * Annotation processor. * * @param the annotation type * @param the output type * @author Ales Justin */ public interface AnnotationProcessor { /** * Get the annotation class. * * @return the annotation class */ Class getAnnotation(); /** * Get output class. * * @return the output class */ Class getOutput(); /** * Create metadata attachment. * * @param attachment the previous attachment * @return the new metadata instance or null if cannot be created */ T createMetaData(Object attachment); /** * Create metadata from class. * * @param clazz the class containing annotation * @return the new metadata from class or null if cannot be created */ T createMetaDataFromClass(Class clazz); }././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotations/libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotation0000755000175000017500000000000011620060440033461 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotations/PathMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotation0000644000175000017500000000302411113261537033471 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.annotations; import java.util.Set; /** * Path meta data. * * @author Ales Justin */ public interface PathMetaData { /** * Get path name. * * @return the path name */ String getPathName(); /** * Get includes. * * @return the includes */ Set getIncludes(); /** * Get excludes. * * @return the excludes */ Set getExcludes(); }././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotations/PathEntryMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotation0000644000175000017500000000242011113261537033470 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.annotations; /** * Path entry meta data. * * @author Ales Justin */ public interface PathEntryMetaData { /** * Get name. * * @return the name */ String getName(); }././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotations/AnnotationEnvironment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotation0000644000175000017500000001421411037353520033473 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.annotations; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Set; /** * Information holder about annotation processing. * * Implementations should delay the actual class loading * until it's absolutely necessary. * * All methods that have annotation name as parameter * will use unit's classloader to load the actual annotation class. * * @author Ales Justin */ public interface AnnotationEnvironment { /** * Does this annotation environment contain a class * which is annotated with annotation parameter. * This only applies to annotations for ElementType.TYPE level. * * This method should be used if we have no intention * to do real lookup of annotated classes, but we're * only interested in existance of the annotation. * e.g. deployment unit contains @Stateful EJBs * * @param annotation the annotation we're querying for * @return true if there exists a class with annotation param * @see #hasClassAnnotatedWith(Class annotation) */ boolean hasClassAnnotatedWith(Class annotation); /** * Does this annotation environment contain a class * which is annotated with annotation parameter. * This only applies to annotations for ElementType.TYPE level. * * This method should be used if we have no intention * to do real lookup of annotated classes, but we're * only interested in existance of the annotation. * e.g. deployment unit contains @Stateful EJBs * * @param annotationName the annotation name we're querying for * @return true if there exists a class with annotation param * @see #hasClassAnnotatedWith(Class annotation) */ boolean hasClassAnnotatedWith(String annotationName); /** * Get all classes annotated with annotation param. * * @param the annotation type * @param annotation the annotation we're querying for * @return set of matching classes */ Set>> classIsAnnotatedWith(Class annotation); /** * Get all classes annotated with annotation param. * * @param annotationName the annotation name we're querying for * @return set of matching classes */ Set>> classIsAnnotatedWith(String annotationName); /** * Get all classes who have some constructor annotated with annotation param. * * @param the annotation type * @param annotation the annotation we're querying for * @return set of matching classes */ Set>> classHasConstructorAnnotatedWith(Class annotation); /** * Get all classes who have some constructor annotated with annotation param. * * @param annotationName the annotation name we're querying for * @return set of matching classes */ Set>> classHasConstructorAnnotatedWith(String annotationName); /** * Get all classes who have some field annotated with annotation param. * * @param the annotation type * @param annotation the annotation we're querying for * @return set of matching classes */ Set> classHasFieldAnnotatedWith(Class annotation); /** * Get all classes who have some field annotated with annotation param. * * @param annotationName the annotation name we're querying for * @return set of matching classes */ Set> classHasFieldAnnotatedWith(String annotationName); /** * Get all classes who have some method annotated with annotation param. * * @param the annotation type * @param annotation the annotation we're querying for * @return set of matching classes */ Set> classHasMethodAnnotatedWith(Class annotation); /** * Get all classes who have some method annotated with annotation param. * * @param annotationName the annotation name we're querying for * @return set of matching classes */ Set> classHasMethodAnnotatedWith(String annotationName); /** * Get all classes who have some method's/constructor's parameter annotated with annotation param. * * @param the annotation type * @param annotation the annotation we're querying for * @return set of matching classes */ Set> classHasParameterAnnotatedWith(Class annotation); /** * Get all classes who have some method's/constructor's parameter annotated with annotation param. * * @param annotationName the annotation name we're querying for * @return set of matching classes */ Set> classHasParameterAnnotatedWith(String annotationName); } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotations/ScanningMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotation0000644000175000017500000000247411113261537033501 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.annotations; import java.util.List; /** * Scanning meta data. * * @author Ales Justin */ public interface ScanningMetaData { /** * Get the paths. * * @return the paths */ List getPaths(); } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotations/Element.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/src/main/java/org/jboss/deployers/spi/annotation0000644000175000017500000000376311034427643033507 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.spi.annotations; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; /** * Annotation holder element. * * @param exact annotation type * @param exact annotated element type * @author Ales Justin */ public interface Element { /** * Get the owner class name. * * Until we hit getOwner method the class should not be loaded. * * @return the owner classname */ String getOwnerClassName(); /** * Get the annotation owner class. * * @return the annotation owner class */ Class getOwner(); /** * Get the annotation instance. * * @return the annotation instance */ A getAnnotation(); /** * Get the annotated element that holds the annotation. * * @return the annotated element instance */ M getAnnotatedElement(); }libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/.settings/0000755000175000017500000000000011620060440024140 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-spi/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740031144 0ustar twernertwerner#Fri Sep 21 17:49:52 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-spi/.project0000644000175000017500000000075611071370224023705 0ustar twernertwerner jboss-deployers-spi JBoss Deployers SPI jboss-deployers-client-spi jboss-deployers-core-spi jboss-deployers-structure-spi org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/0000755000175000017500000000000011620060465024267 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/.classpath0000644000175000017500000001042311113263640026247 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/pom.xml0000644000175000017500000001044611137607542025617 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-structure-spi jar JBoss Deployers Structure SPI http://www.jboss.com/products/jbossmc JBoss Deployers Structure SPI org.apache.maven.plugins maven-jar-plugin test-jar org.jboss.deployers jboss-deployers-client-spi org.jboss.microcontainer jboss-dependency org.jboss jboss-common-core org.jboss.logging jboss-logging-spi org.jboss.integration jboss-classloading-spi org.jboss jboss-common-core org.jboss.logging jboss-logging-spi org.jboss.deployers jboss-deployers-core test org.jboss.deployers jboss-deployers-core-spi org.jboss.logging jboss-logging-spi org.jboss.deployers jboss-deployers-core test-jar test org.jboss.deployers jboss-deployers-core-spi org.jboss.logging jboss-logging-spi org.jboss.deployers jboss-deployers-client test org.jboss.deployers jboss-deployers-core-spi org.jboss.deployers jboss-deployers-client-spi org.jboss.logging jboss-logging-spi org.jboss.logging jboss-logging-log4j test org.jboss.test jboss-test test junit junit test libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/0000755000175000017500000000000011620060465025056 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/0000755000175000017500000000000011620060465026035 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/0000755000175000017500000000000011620060465026756 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/0000755000175000017500000000000011620060465027545 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/0000755000175000017500000000000011620060465030665 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/0000755000175000017500000000000011620060465031644 5ustar twernertwerner././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000755000175000017500000000000011620060465033573 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/DeployersStructureTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000343710756575630033622 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.structure.attachments.StructureAttachmentsTestSuite; import org.jboss.test.deployers.structure.structurebuilder.StructureBuilderTestSuite; /** * Deployers Structure Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class DeployersStructureTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers Structure Tests"); suite.addTest(StructureAttachmentsTestSuite.suite()); suite.addTest(StructureBuilderTestSuite.suite()); return suite; } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000755000175000017500000000000011620060465033573 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000755000175000017500000000000011620060465033573 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000755000175000017500000000000011620060465033573 5ustar twernertwerner././@LongLink0000000000000000000000000000027400000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/AbstractDeploymentUnitTransientAttachmentsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000463210640504455033605 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentUnit; import org.jboss.test.deployers.attachments.test.AttachmentsTest; /** * DeploymentUnitTransientAttachmentsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeploymentUnitTransientAttachmentsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AbstractDeploymentUnitTransientAttachmentsUnitTestCase.class); } private DeploymentUnit unit; private MutableAttachments mutable; public AbstractDeploymentUnitTransientAttachmentsUnitTestCase(String name) { super(name); AbstractDeploymentContext context = new AbstractDeploymentContext("attachments", ""); unit = new AbstractDeploymentUnit(context); context.setDeploymentUnit(unit); mutable = context.getTransientAttachments(); } protected Attachments getAttachments() { return mutable; } protected MutableAttachments getMutable() { return mutable; } } ././@LongLink0000000000000000000000000000030600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/AbstractDeploymentContextPredeterminedManagedObjectsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000442410640504455033604 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.test.deployers.attachments.test.AttachmentsTest; /** * AbstractDeploymentContextPredeterminedManagedObjectsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeploymentContextPredeterminedManagedObjectsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AbstractDeploymentContextPredeterminedManagedObjectsUnitTestCase.class); } public AbstractDeploymentContextPredeterminedManagedObjectsUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { AbstractDeploymentContext context = new AbstractDeploymentContext("test", ""); return context.getPredeterminedManagedObjects(); } protected MutableAttachments getMutable() { AbstractDeploymentContext context = new AbstractDeploymentContext("test", ""); return (MutableAttachments) context.getPredeterminedManagedObjects(); } } ././@LongLink0000000000000000000000000000030200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/AbstractDeploymentContextTransientManagedObjectsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000434710640504455033610 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.test.deployers.attachments.test.AttachmentsTest; /** * AbstractDeploymentContextTransientManagedObjectsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeploymentContextTransientManagedObjectsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AbstractDeploymentContextTransientManagedObjectsUnitTestCase.class); } public AbstractDeploymentContextTransientManagedObjectsUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { AbstractDeploymentContext context = new AbstractDeploymentContext("test", ""); return context.getTransientManagedObjects(); } protected MutableAttachments getMutable() { AbstractDeploymentContext context = new AbstractDeploymentContext("test", ""); return context.getTransientManagedObjects(); } } ././@LongLink0000000000000000000000000000026300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/AbstractDeploymentUnitAttachmentsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000456410640504455033611 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentUnit; import org.jboss.test.deployers.attachments.test.AttachmentsTest; /** * DeploymentUnitAttachmentsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeploymentUnitAttachmentsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AbstractDeploymentUnitAttachmentsUnitTestCase.class); } private DeploymentUnit unit; public AbstractDeploymentUnitAttachmentsUnitTestCase(String name) { super(name); AbstractDeploymentContext context = new AbstractDeploymentContext("attachments", ""); unit = new AbstractDeploymentUnit(context); context.setDeploymentUnit(unit); } public void testSerialization() throws Exception { // Not really serializable } protected Attachments getAttachments() { return unit; } protected MutableAttachments getMutable() { return unit; } } ././@LongLink0000000000000000000000000000030300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/AbstractDeploymentUnitPredeterminedManagedObjectsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000472210640504455033605 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentUnit; import org.jboss.test.deployers.attachments.test.AttachmentsTest; /** * DeploymentUnitPredeterminedManagedObjectsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeploymentUnitPredeterminedManagedObjectsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AbstractDeploymentUnitPredeterminedManagedObjectsUnitTestCase.class); } private DeploymentUnit unit; private MutableAttachments mutable; public AbstractDeploymentUnitPredeterminedManagedObjectsUnitTestCase(String name) { super(name); AbstractDeploymentContext context = new AbstractDeploymentContext("attachments", ""); unit = new AbstractDeploymentUnit(context); context.setDeploymentUnit(unit); mutable = (MutableAttachments) context.getPredeterminedManagedObjects(); } protected Attachments getAttachments() { return mutable; } protected MutableAttachments getMutable() { return mutable; } } ././@LongLink0000000000000000000000000000027700000000000011573 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/AbstractDeploymentContextTransientAttachmentsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000432510640504455033604 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.test.deployers.attachments.test.AttachmentsTest; /** * AbstractDeploymentContextTransientAttachmentsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeploymentContextTransientAttachmentsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AbstractDeploymentContextTransientAttachmentsUnitTestCase.class); } public AbstractDeploymentContextTransientAttachmentsUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { AbstractDeploymentContext context = new AbstractDeploymentContext("test", ""); return context.getTransientAttachments(); } protected MutableAttachments getMutable() { AbstractDeploymentContext context = new AbstractDeploymentContext("test", ""); return context.getTransientAttachments(); } } ././@LongLink0000000000000000000000000000027300000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/AbstractDeploymentUnitAttachmentHierarchyUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000001520010640504455033576 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments.test; import java.util.Collections; import java.util.Map; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentUnit; import org.jboss.test.BaseTestCase; /** * DeploymentUnitAttachmentHierarchyUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeploymentUnitAttachmentHierarchyUnitTestCase extends BaseTestCase { public static Test suite() { return new TestSuite(AbstractDeploymentUnitAttachmentHierarchyUnitTestCase.class); } private DeploymentUnit unit; private MutableAttachments predeterminedManagedObjects; private MutableAttachments transientManagedObjects; private MutableAttachments transientAttachments; public AbstractDeploymentUnitAttachmentHierarchyUnitTestCase(String name) { super(name); AbstractDeploymentContext context = new AbstractDeploymentContext("attachments", ""); unit = new AbstractDeploymentUnit(context); context.setDeploymentUnit(unit); predeterminedManagedObjects = (MutableAttachments) context.getPredeterminedManagedObjects(); transientManagedObjects = context.getTransientManagedObjects(); transientAttachments = context.getTransientAttachments(); } public void testPredeterminedIsFirstByName() { predeterminedManagedObjects.addAttachment("Name", "pMO"); transientManagedObjects.addAttachment("Name", "tMO"); transientAttachments.addAttachment("Name", "tA"); assertEquals("pMO", unit.getAttachment("Name")); Map expected = Collections.singletonMap("Name", "pMO"); assertEquals(expected, unit.getAttachments()); } public void testPredeterminedIsFirstByNameAndType() { predeterminedManagedObjects.addAttachment("Name", "pMO", String.class); transientManagedObjects.addAttachment("Name", "tMO", String.class); transientAttachments.addAttachment("Name", "tA", String.class); assertEquals("pMO", unit.getAttachment("Name")); assertEquals("pMO", unit.getAttachment("Name", String.class)); Map expected = Collections.singletonMap("Name", "pMO"); assertEquals(expected, unit.getAttachments()); } public void testPredeterminedIsFirstByType() { predeterminedManagedObjects.addAttachment(String.class, "pMO"); transientManagedObjects.addAttachment(String.class, "tMO"); transientAttachments.addAttachment(String.class, "tA"); assertEquals("pMO", unit.getAttachment(String.class.getName())); assertEquals("pMO", unit.getAttachment(String.class.getName(), String.class)); assertEquals("pMO", unit.getAttachment(String.class)); Map expected = Collections.singletonMap(String.class.getName(), "pMO"); assertEquals(expected, unit.getAttachments()); } public void testTransientManagedObjectsIsSecondByName() { transientManagedObjects.addAttachment("Name", "tMO"); transientAttachments.addAttachment("Name", "tA"); assertEquals("tMO", unit.getAttachment("Name")); Map expected = Collections.singletonMap("Name", "tMO"); assertEquals(expected, unit.getAttachments()); } public void testTransientManagedObjectsIsSecondAndType() { transientManagedObjects.addAttachment("Name", "tMO", String.class); transientAttachments.addAttachment("Name", "tA", String.class); assertEquals("tMO", unit.getAttachment("Name")); assertEquals("tMO", unit.getAttachment("Name", String.class)); Map expected = Collections.singletonMap("Name", "tMO"); assertEquals(expected, unit.getAttachments()); } public void testTransientManagedObjectsIsSecondByType() { transientManagedObjects.addAttachment(String.class, "tMO"); transientAttachments.addAttachment(String.class, "tA"); assertEquals("tMO", unit.getAttachment(String.class.getName())); assertEquals("tMO", unit.getAttachment(String.class.getName(), String.class)); assertEquals("tMO", unit.getAttachment(String.class)); Map expected = Collections.singletonMap(String.class.getName(), "tMO"); assertEquals(expected, unit.getAttachments()); } public void testTransientAttrachmentsIsThirdByName() { transientAttachments.addAttachment("Name", "tA"); assertEquals("tA", unit.getAttachment("Name")); Map expected = Collections.singletonMap("Name", "tA"); assertEquals(expected, unit.getAttachments()); } public void testTransientAttrachmentsIsThirdAndType() { transientAttachments.addAttachment("Name", "tA", String.class); assertEquals("tA", unit.getAttachment("Name")); assertEquals("tA", unit.getAttachment("Name", String.class)); Map expected = Collections.singletonMap("Name", "tA"); assertEquals(expected, unit.getAttachments()); } public void testTransientAttrachmentsIsThirdByType() { transientAttachments.addAttachment(String.class, "tA"); assertEquals("tA", unit.getAttachment(String.class.getName())); assertEquals("tA", unit.getAttachment(String.class.getName(), String.class)); assertEquals("tA", unit.getAttachment(String.class)); Map expected = Collections.singletonMap(String.class.getName(), "tA"); assertEquals(expected, unit.getAttachments()); } } ././@LongLink0000000000000000000000000000027700000000000011573 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/test/AbstractDeploymentUnitTransientManagedObjectsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000465110640504455033606 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentUnit; import org.jboss.test.deployers.attachments.test.AttachmentsTest; /** * DeploymentUnitTransientManagedObjectsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractDeploymentUnitTransientManagedObjectsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AbstractDeploymentUnitTransientManagedObjectsUnitTestCase.class); } private DeploymentUnit unit; private MutableAttachments mutable; public AbstractDeploymentUnitTransientManagedObjectsUnitTestCase(String name) { super(name); AbstractDeploymentContext context = new AbstractDeploymentContext("attachments", ""); unit = new AbstractDeploymentUnit(context); context.setDeploymentUnit(unit); mutable = context.getTransientManagedObjects(); } protected Attachments getAttachments() { return mutable; } protected MutableAttachments getMutable() { return mutable; } } ././@LongLink0000000000000000000000000000023600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/attachments/StructureAttachmentsTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000617410640504455033610 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.attachments; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.structure.attachments.test.AbstractDeploymentContextPredeterminedManagedObjectsUnitTestCase; import org.jboss.test.deployers.structure.attachments.test.AbstractDeploymentContextTransientAttachmentsUnitTestCase; import org.jboss.test.deployers.structure.attachments.test.AbstractDeploymentContextTransientManagedObjectsUnitTestCase; import org.jboss.test.deployers.structure.attachments.test.AbstractDeploymentUnitAttachmentHierarchyUnitTestCase; import org.jboss.test.deployers.structure.attachments.test.AbstractDeploymentUnitAttachmentsUnitTestCase; import org.jboss.test.deployers.structure.attachments.test.AbstractDeploymentUnitPredeterminedManagedObjectsUnitTestCase; import org.jboss.test.deployers.structure.attachments.test.AbstractDeploymentUnitTransientAttachmentsUnitTestCase; import org.jboss.test.deployers.structure.attachments.test.AbstractDeploymentUnitTransientManagedObjectsUnitTestCase; /** * StructureAttachmentsTestSuite. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureAttachmentsTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Structure Attachment Tests"); suite.addTest(AbstractDeploymentContextPredeterminedManagedObjectsUnitTestCase.suite()); suite.addTest(AbstractDeploymentContextTransientManagedObjectsUnitTestCase.suite()); suite.addTest(AbstractDeploymentContextTransientAttachmentsUnitTestCase.suite()); suite.addTest(AbstractDeploymentUnitPredeterminedManagedObjectsUnitTestCase.suite()); suite.addTest(AbstractDeploymentUnitTransientManagedObjectsUnitTestCase.suite()); suite.addTest(AbstractDeploymentUnitTransientAttachmentsUnitTestCase.suite()); suite.addTest(AbstractDeploymentUnitAttachmentsUnitTestCase.suite()); suite.addTest(AbstractDeploymentUnitAttachmentHierarchyUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/structurebuilder/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000755000175000017500000000000011620060465033573 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/structurebuilder/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000755000175000017500000000000011620060465033573 5ustar twernertwerner././@LongLink0000000000000000000000000000025700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/structurebuilder/test/AbstractStructureBuilderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000445010640504455033603 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.structurebuilder.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.plugins.deployment.AbstractDeployment; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.structure.spi.StructureBuilder; import org.jboss.deployers.structure.spi.helpers.AbstractStructureBuilder; import org.jboss.test.deployers.structure.structurebuilder.StructureBuilderTest; /** * AbstractStructureBuilderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractStructureBuilderUnitTestCase extends StructureBuilderTest { public static Test suite() { return new TestSuite(AbstractStructureBuilderUnitTestCase.class); } public AbstractStructureBuilderUnitTestCase(String name) { super(name); } protected StructureBuilder getStructureBuilder() { return new AbstractStructureBuilder(); } protected Deployment createDeployment() { return new AbstractDeployment(getDeploymentName()); } protected DeploymentFactory getDeploymentFactory() { return new DeploymentFactory(); } protected String getDeploymentName() { return getName(); } } ././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/structurebuilder/StructureBuilderTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000367210640504455033610 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.structurebuilder; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.StructureBuilder; /** * StructureBuilderTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class StructureBuilderTest extends AbstractStructureBuilderTest { public StructureBuilderTest(String name) { super(name); } protected DeploymentContext build(Deployment deployment) throws DeploymentException { StructureMetaData structure = deployment.getPredeterminedManagedObjects().getAttachment(StructureMetaData.class); return getStructureBuilder().populateContext(deployment, structure); } protected abstract StructureBuilder getStructureBuilder(); } ././@LongLink0000000000000000000000000000024200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/structurebuilder/AbstractStructureBuilderTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000002163610766002755033615 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.structurebuilder; import java.util.List; import java.util.Map; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.test.BaseTestCase; /** * AbstractStructureBuilderTest. * * @author Ales Justin * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractStructureBuilderTest extends BaseTestCase { public AbstractStructureBuilderTest(String name) { super(name); } protected abstract DeploymentContext build(Deployment deployment) throws DeploymentException; protected abstract Deployment createDeployment(); protected abstract DeploymentFactory getDeploymentFactory(); protected abstract String getDeploymentName(); protected Deployment createDeployment(DeploymentFactory factory) { Deployment deployment = createDeployment(); factory.addContext(deployment, ""); return deployment; } public void testSimple() throws Exception { Deployment deployment = createSimple(); DeploymentContext context = build(deployment); checkDeployment(context, deployment); } protected Deployment createSimple() throws Exception { Deployment deployment = createDeployment(); StructureMetaData structure = StructureMetaDataFactory.createStructureMetaData(); MutableAttachments attachments = (MutableAttachments) deployment.getPredeterminedManagedObjects(); attachments.addAttachment(StructureMetaData.class, structure); DeploymentFactory factory = getDeploymentFactory(); factory.addContext(deployment, ""); return deployment; } public void testSimpleWithAttachment() throws Exception { Deployment deployment = createSimpleWithAttachment(); DeploymentContext context = build(deployment); checkDeployment(context, deployment); } protected Deployment createSimpleWithAttachment() throws Exception { Deployment deployment = createDeployment(); StructureMetaData structure = StructureMetaDataFactory.createStructureMetaData(); MutableAttachments attachments = (MutableAttachments) deployment.getPredeterminedManagedObjects(); attachments.addAttachment(StructureMetaData.class, structure); attachments.addAttachment("test", "hello"); DeploymentFactory factory = getDeploymentFactory(); factory.addContext(deployment, ""); return deployment; } public void testOneChild() throws Exception { Deployment deployment = createOneChild(); DeploymentContext context = build(deployment); checkDeployment(context, deployment); } protected Deployment createOneChild() throws Exception { DeploymentFactory factory = getDeploymentFactory(); Deployment deployment = createDeployment(factory); factory.addContext(deployment, "child1"); return deployment; } public void testManyChildren() throws Exception { Deployment deployment = createManyChildren(); DeploymentContext context = build(deployment); checkDeployment(context, deployment); } protected Deployment createManyChildren() throws Exception { DeploymentFactory factory = getDeploymentFactory(); Deployment deployment = createDeployment(factory); factory.addContext(deployment, "child1"); factory.addContext(deployment, "child2"); factory.addContext(deployment, "child3"); return deployment; } public void testMetaDataLocation() throws Exception { Deployment deployment = createMetaDataLocation(); DeploymentContext context = build(deployment); checkDeployment(context, deployment); } protected Deployment createMetaDataLocation() throws Exception { DeploymentFactory factory = getDeploymentFactory(); Deployment deployment = createDeployment(); factory.addContext(deployment, "", ContextInfo.DEFAULT_METADATA_PATH, DeploymentFactory.createClassPath("")); return deployment; } public void testClasspathEntries() throws Exception { Deployment deployment = createClasspathEntries(); DeploymentContext context = build(deployment); checkDeployment(context, deployment); } protected Deployment createClasspathEntries() throws Exception { DeploymentFactory factory = getDeploymentFactory(); Deployment deployment = createDeployment(); ContextInfo contextInfo = factory.addContext(deployment, ""); contextInfo.addClassPathEntry(DeploymentFactory.createClassPathEntry("cp1.txt")); contextInfo.addClassPathEntry(DeploymentFactory.createClassPathEntry("cp2.txt")); return deployment; } protected void checkDeployment(DeploymentContext context, Deployment deployment) throws Exception { assertNotNull(context); assertEquals(deployment.getName(), context.getName()); MutableAttachments attachments = (MutableAttachments) deployment.getPredeterminedManagedObjects(); StructureMetaData structure = attachments.getAttachment(StructureMetaData.class); checkAttachments(context, deployment); assertNotNull(structure); checkDeployment(context, structure); ContextInfo contextInfo = structure.getContext(""); assertNotNull(contextInfo); checkContextInfo(context, contextInfo); } protected void checkDeployment(String parentName, DeploymentContext context, ContextInfo contextInfo) throws Exception { assertNotNull(context); String expectedName; if (parentName.endsWith("/")) expectedName = parentName + contextInfo.getPath(); else expectedName = parentName + "/" + contextInfo.getPath(); assertEquals(expectedName, context.getName()); StructureMetaData structure = contextInfo.getPredeterminedManagedObjects().getAttachment(StructureMetaData.class); checkAttachments(context, contextInfo); if (structure != null) checkDeployment(context, structure); checkContextInfo(context, contextInfo); } protected void checkDeployment(DeploymentContext context, StructureMetaData structure) throws Exception { assertNotNull(context); assertNotNull(structure); List contextInfos = structure.getContexts(); int numContexts = contextInfos.size(); // Ignore the parent if (structure.getContext("") != null) --numContexts; List children = context.getChildren(); int numChildren = children.size(); assertEquals("Should have the same number contexts=" + contextInfos + " children=" + children, numContexts, numChildren); for (DeploymentContext childContext : children) { ContextInfo contextInfo = structure.getContext(childContext.getRelativePath()); assertNotNull("Should have a context info " + childContext + " in " + contextInfos, contextInfo); checkDeployment(context.getName(), childContext, contextInfo); } } protected void checkAttachments(DeploymentContext context, PredeterminedManagedObjectAttachments predetermined) throws Exception { Map expected = predetermined.getPredeterminedManagedObjects().getAttachments(); Map actual = context.getPredeterminedManagedObjects().getAttachments(); assertEquals(expected, actual); } protected void checkContextInfo(DeploymentContext context, ContextInfo contextInfo) throws Exception { } } ././@LongLink0000000000000000000000000000023700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers/structure/structurebuilder/StructureBuilderTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/test/java/org/jboss/test/deployers0000644000175000017500000000327110640504455033603 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.structurebuilder; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.structure.structurebuilder.test.AbstractStructureBuilderUnitTestCase; /** * StructureBuilderTestSuite. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureBuilderTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Structure Builder Tests"); suite.addTest(AbstractStructureBuilderUnitTestCase.suite()); return suite; } } libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/0000755000175000017500000000000011620060465026002 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/0000755000175000017500000000000011620060465026723 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/0000755000175000017500000000000011620060465027512 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/0000755000175000017500000000000011620060465030632 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060465032640 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000755000175000017500000000000011620060465033556 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000755000175000017500000000000011620060465033556 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/StructureProcessor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000445011137607542033571 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; /** * Pre and post structure metadata processor. * * @author ales.justin@jboss.org */ public interface StructureProcessor { /** * Prepare structure metadata. * * @param deployment the deployment * @param structureMetaData the structure metadata */ void prepareStructureMetaData(Deployment deployment, StructureMetaData structureMetaData); /** * Prepare context info. * * @param parentDeploymentContext the parent deployment context * @param contextInfo the context info */ void prepareContextInfo(DeploymentContext parentDeploymentContext, ContextInfo contextInfo); /** * Apply structure metadata. * * @param deploymentContext the deployment context * @param structureMetaData the structure metadata */ void applyStructureMetaData(DeploymentContext deploymentContext, StructureMetaData structureMetaData); /** * Apply context info. * * @param deploymentContext the deployment context * @param contextInfo the context info */ void applyContextInfo(DeploymentContext deploymentContext, ContextInfo contextInfo); }././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/scope/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000755000175000017500000000000011620060465033556 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/scope/ScopeBuilder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000506510665501124033566 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.scope; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.metadata.spi.repository.MutableMetaDataRepository; import org.jboss.metadata.spi.scope.ScopeKey; /** * ScopeBuilder. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface ScopeBuilder { /** * Get the scope for a deployment * * @param context the context * @return the key */ ScopeKey getDeploymentScope(DeploymentContext context); /** * Get the mutable scope for a deployment * * @param context the context * @return the key */ ScopeKey getMutableDeploymentScope(DeploymentContext context); /** * Get the scope for a component * * @param context the context * @return the key */ ScopeKey getComponentScope(DeploymentContext context); /** * Get the mutable scope for a component * * @param context the context * @return the key */ ScopeKey getMutableComponentScope(DeploymentContext context); /** * Initialise the metadata retrievals for a deployment context * * @param repository the repository * @param context the context */ void initMetaDataRetrieval(MutableMetaDataRepository repository, DeploymentContext context); /** * Initialise the mutable metadata retrieval for a deployment context * * @param repository the repository * @param context the context */ void initMutableMetaDataRetrieval(MutableMetaDataRepository repository, DeploymentContext context); } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/scope/helpers/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000755000175000017500000000000011620060465033556 5ustar twernertwerner././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/scope/helpers/DefaultScopeBuilder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000001214210665501124033560 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.scope.helpers; import java.util.ArrayList; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.scope.ScopeBuilder; import org.jboss.metadata.plugins.context.AbstractMetaDataContext; import org.jboss.metadata.plugins.loader.memory.MemoryMetaDataLoader; import org.jboss.metadata.spi.repository.MutableMetaDataRepository; import org.jboss.metadata.spi.retrieval.MetaDataRetrieval; import org.jboss.metadata.spi.scope.CommonLevels; import org.jboss.metadata.spi.scope.Scope; import org.jboss.metadata.spi.scope.ScopeKey; /** * DefaultScopeBuilder. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DefaultScopeBuilder implements ScopeBuilder { /** The singleton instance */ public static final DefaultScopeBuilder INSTANCE = new DefaultScopeBuilder(); public ScopeKey getDeploymentScope(DeploymentContext context) { if (context == null) throw new IllegalArgumentException("Null context"); DeploymentContext top = context.getTopLevel(); ScopeKey result = ScopeKey.DEFAULT_SCOPE.clone(); result.addScope(CommonLevels.APPLICATION, top.getName()); result.addScope(CommonLevels.DEPLOYMENT, context.getName()); return result; } public ScopeKey getMutableDeploymentScope(DeploymentContext context) { if (context == null) throw new IllegalArgumentException("Null context"); if (context.isTopLevel()) return new ScopeKey(CommonLevels.APPLICATION, context.getName()); else return new ScopeKey(CommonLevels.DEPLOYMENT, context.getName()); } public ScopeKey getComponentScope(DeploymentContext context) { if (context == null) throw new IllegalArgumentException("Null context"); DeploymentContext parent = context; while (parent.isComponent()) { parent = context.getParent(); if (parent == null) throw new IllegalStateException("Component has no regular parent?"); } ScopeKey result = parent.getScope().clone(); result.addScope(CommonLevels.INSTANCE, context.getName()); return result; } public ScopeKey getMutableComponentScope(DeploymentContext context) { if (context == null) throw new IllegalArgumentException("Null context"); return new ScopeKey(CommonLevels.INSTANCE, context.getName()); } public void initMetaDataRetrieval(MutableMetaDataRepository repository, DeploymentContext context) { if (repository == null) throw new IllegalArgumentException("Null repository"); if (context == null) throw new IllegalArgumentException("Null context"); ScopeKey scopeKey = context.getScope(); ArrayList retrievals = new ArrayList(); for (Scope scope : scopeKey.getScopes()) { ScopeKey thisScope = new ScopeKey(scope); MetaDataRetrieval retrieval = repository.getMetaDataRetrieval(thisScope); if (retrieval == null) { retrieval = new MemoryMetaDataLoader(thisScope); repository.addMetaDataRetrieval(retrieval); } retrievals.add(0, retrieval); } AbstractMetaDataContext metaDataContext = new AbstractMetaDataContext(null, retrievals); repository.addMetaDataRetrieval(metaDataContext); } public void initMutableMetaDataRetrieval(MutableMetaDataRepository repository, DeploymentContext context) { if (repository == null) throw new IllegalArgumentException("Null repository"); if (context == null) throw new IllegalArgumentException("Null context"); ScopeKey scopeKey = context.getMutableScope(); MetaDataRetrieval retrieval = repository.getMetaDataRetrieval(scopeKey); if (retrieval == null) { retrieval = new MemoryMetaDataLoader(scopeKey); repository.addMetaDataRetrieval(retrieval); } AbstractMetaDataContext metaDataContext = new AbstractMetaDataContext(null, retrieval); repository.addMetaDataRetrieval(metaDataContext); } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentMBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000001045511113261537033565 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import java.util.Comparator; import java.util.List; import java.util.Set; import javax.management.ObjectName; import org.jboss.dependency.spi.DependencyInfo; import org.jboss.deployers.spi.DeploymentState; import org.jboss.metadata.spi.scope.ScopeKey; /** * DeploymentMBean. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface DeploymentMBean { /** * Get the deployment name * * @return the name */ String getName(); /** * Get the object name * * @return the object name */ ObjectName getObjectName(); /** * Get the controller context names. * * @return the names */ Set getControllerContextNames(); /** * Get the simple vfs name of the deployment unit. This is the simple * name of the virtual file . * * vfs path ------------------- relative path * deploy/some.ear "some.ear" * deploy/some.ear/x.ejb "x.ejb" * deploy/some.ear/y.sar "y.sar" * deploy/some.ear/y.sar/z.rar "z.rar" * @return the deployment unit simple path */ String getSimpleName(); /** * Get the path of this deployment relative to the top of the deployment * * vfs path ------------------- relative path * deploy/some.ear "" * deploy/some.ear/x.ejb "/x.ejb" * deploy/some.ear/y.sar "/y.sar" * deploy/some.ear/y.sar/z.rar "/y.sar/z.rar" * * @return the top-level deployment relative path */ String getRelativePath(); /** * Get the relative order * * @return the relative order */ int getRelativeOrder(); /** * Get the comparator. * * @return the comparator. */ Comparator getComparator(); /** * Get the scope * * @return the scope */ ScopeKey getScope(); /** * Get the mutable scope * * @return the mutable scope */ ScopeKey getMutableScope(); /** * Get the deployment state * * @return the state */ DeploymentState getState(); /** * Gets the classloader for this deployment unit * * @return the classloader */ ObjectName getClassLoaderName(); /** * Whether this is a top level deployment * * @return true when top level */ boolean isTopLevel(); /** * Get the top level deployment * * @return the top level deployment */ ObjectName getTopLevelName(); /** * The parent * * @return the parent */ ObjectName getParentName(); /** * The children * * @return the children */ List getChildNames(); /** * Whether this is a component * * @return true when a component */ boolean isComponent(); /** * The components * * @return the components */ List getComponentNames(); /** * Get the dependency info * * @return the dependency */ DependencyInfo getDependencyInfo(); /** * Whether the deployment was processed * * @return true when processed */ boolean isDeployed(); /** * Get the problem for this context * * @return the problem */ Throwable getProblem(); } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentUnitVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000305610756574626033606 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import org.jboss.deployers.spi.DeploymentException; /** * DeploymentUnitVisitor. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface DeploymentUnitVisitor { /** * Visit a unit * * @param unit the unit * @throws DeploymentException for any error */ void visit(DeploymentUnit unit) throws DeploymentException; /** * Invoked when there is a subsequent error in the visit * * @param unit the unit */ void error(DeploymentUnit unit); } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000002103211046542655033566 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import java.util.Comparator; import java.util.List; import java.util.Set; import org.jboss.dependency.spi.DependencyInfo; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.attachments.ManagedObjectsWithTransientAttachments; import org.jboss.metadata.spi.MetaData; import org.jboss.metadata.spi.MutableMetaData; import org.jboss.metadata.spi.scope.ScopeKey; /** * DeploymentContext. * * @author Adrian Brock * @author Scott.Stark@jboss.org * @version $Revision: 59630 $ */ public interface DeploymentContext extends ManagedObjectsWithTransientAttachments { /** * Get the deployment name * * @return the name */ String getName(); /** * Get the controller context names. * * @return the names */ Set getControllerContextNames(); /** * Add controller context name. * * @param name the controller context name */ void addControllerContextName(Object name); /** * Remove controller context name. * * @param name the controller context name */ void removeControllerContextName(Object name); /** * Get the simple vfs name of the deployment unit. This is the simple * name of the virtual file . * * vfs path ------------------- relative path * deploy/some.ear "some.ear" * deploy/some.ear/x.ejb "x.ejb" * deploy/some.ear/y.sar "y.sar" * deploy/some.ear/y.sar/z.rar "z.rar" * @return the deployment unit simple path */ String getSimpleName(); /** * Get the path of this deployment relative to the top of the deployment * * vfs path ------------------- relative path * deploy/some.ear "" * deploy/some.ear/x.ejb "/x.ejb" * deploy/some.ear/y.sar "/y.sar" * deploy/some.ear/y.sar/z.rar "/y.sar/z.rar" * * @return the top-level deployment relative path */ String getRelativePath(); /** * Get the relative order * * @return the relative order */ int getRelativeOrder(); /** * Set the relative order * * @param relativeOrder the relativeOrder */ void setRelativeOrder(int relativeOrder); /** * Get the comparator. * * @return the comparator. */ Comparator getComparator(); /** * Set the comparator. * * @param comparator the comparator. */ void setComparator(Comparator comparator); /** * Get the scope * * @return the scope */ ScopeKey getScope(); /** * Set the scope * * @param key the scope key */ void setScope(ScopeKey key); /** * Get the mutable scope * * @return the mutable scope */ ScopeKey getMutableScope(); /** * Set the mutable scope * * @param key the mutable scope key */ void setMutableScope(ScopeKey key); /** * Get the metadata for this deployment context * * @return the metadata */ MetaData getMetaData(); /** * Get the mutable metadata for this deployment context * * @return the metadata */ MutableMetaData getMutableMetaData(); /** * Get the deployment state * * @return the state */ DeploymentState getState(); /** * Set the deployment state * * @param state the state */ void setState(DeploymentState state); /** * Get the deployment (if this is a top level context) * * @return the deployment */ Deployment getDeployment(); /** * Set the deployment * * @param deployment the deployment * @throws IllegalArgumentException for a null deployment */ void setDeployment(Deployment deployment); /** * Get the deployment unit * * @return the deployment */ DeploymentUnit getDeploymentUnit(); /** * Set the deployment unit * * @param unit the deployment unit */ void setDeploymentUnit(DeploymentUnit unit); /** * Gets the classloader for this deployment unit * * @return the classloader */ ClassLoader getClassLoader(); /** * Set the class loader * * @param classLoader the new classloader */ void setClassLoader(ClassLoader classLoader); /** * Create a classloader * * @param factory the factory * @return false if there is already is a classloader * @throws DeploymentException for any error */ boolean createClassLoader(ClassLoaderFactory factory) throws DeploymentException; /** * Remove the classloader created by the factory */ void removeClassLoader(); /** * Remove the classloader * * @param factory the original factory used to create the classloader */ void removeClassLoader(ClassLoaderFactory factory); /** * Whether this is a top level deployment * * @return true when top level */ boolean isTopLevel(); /** * Get the top level deployment * * @return the top level deployment */ DeploymentContext getTopLevel(); /** * The parent * * @return the parent */ DeploymentContext getParent(); /** * Set the parent * * @param parent the parent */ void setParent(DeploymentContext parent); /** * The children * * @return the children */ List getChildren(); /** * Add a child * * @param child the child to add */ void addChild(DeploymentContext child); /** * Remove a child * * @param child the child to remove * @return whether it was removed */ boolean removeChild(DeploymentContext child); /** * Whether this is a component * * @return true when a component */ boolean isComponent(); /** * The components * * @return the components */ List getComponents(); /** * Add a component * * @param component the componnet to add */ void addComponent(DeploymentContext component); /** * Remove a component * * @param component the component to remove * @return whether it was removed */ boolean removeComponent(DeploymentContext component); /** * Get a resource loader * * @return the resource loader */ DeploymentResourceLoader getResourceLoader(); /** * Get a resource classloader * * @return the resource classloader loader */ ClassLoader getResourceClassLoader(); /** * Get the dependency info * * @return the dependency */ DependencyInfo getDependencyInfo(); /** * Visit the context and the children * * @param visitor the visitor * @throws DeploymentException for any error in the visitor * @throws IllegalArgumentException for a null visitor */ void visit(DeploymentContextVisitor visitor) throws DeploymentException; /** * Whether the deployment was processed * * @return true when processed */ boolean isDeployed(); /** * Touch the context to say it is deployed */ void deployed(); /** * Get the problem for this context * * @return the problem */ Throwable getProblem(); /** * Set the problem for this context * * @param problem the problem */ void setProblem(Throwable problem); /** * Cleanup the deployment context */ void cleanup(); } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/StructureBuilder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000337010640504455033566 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.StructureMetaData; /** * A StructureBuilder transforms the StructureMetaData for a deployment info * a DeploymentContext tree. * * @author Scott.Stark@jboss.org * @author adrian@jboss.org * @version $Revision: 1.1 $ */ public interface StructureBuilder { /** * Create the tree * * @param deployment the deployment * @param metaData the metaData * @return the deployment context * @throws DeploymentException for any error */ DeploymentContext populateContext(Deployment deployment, StructureMetaData metaData) throws DeploymentException; } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentUnit.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000001663111046542655033577 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import java.util.List; import java.util.Set; import org.jboss.dependency.spi.DependencyInfo; import org.jboss.dependency.spi.DependencyItem; import org.jboss.deployers.client.spi.main.MainDeployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.metadata.spi.MetaData; import org.jboss.metadata.spi.MutableMetaData; import org.jboss.metadata.spi.scope.ScopeKey; /** * DeploymentUnit.

* * A deployment unit represents a single unit * that deployers work with. * * @author Adrian Brock * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public interface DeploymentUnit extends MutableAttachments { /** * Get the deployment units name * * @return the name; */ String getName(); /** * Get the simple vfs name of the deployment unit. This is the simple * name of the virtual file . * * vfs path ------------------- simple name * deploy/some.ear "some.ear" * deploy/some.ear/x.ejb "x.ejb" * deploy/some.ear/y.sar "y.sar" * deploy/some.ear/y.sar/z.rar "z.rar" * deploy/complexwithappxml.ear/module-mbean1.sar/submbean.sar submbean.sar * @return the deployment unit simple path */ String getSimpleName(); /** * Get the path of this deployment relative to the top of the deployment * * vfs path ------------------- relative path * deploy/some.ear "" * deploy/some.ear/x.ejb "/x.ejb" * deploy/some.ear/y.sar "/y.sar" * deploy/some.ear/y.sar/z.rar "/y.sar/z.rar" * * @return the top-level deployment relative path */ String getRelativePath(); /** * Get the scope * * @return the scope */ ScopeKey getScope(); /** * Set the scope * * @param key the scope key */ void setScope(ScopeKey key); /** * Get the mutable scope * * @return the mutable scope */ ScopeKey getMutableScope(); /** * Set the mutable scope * * @param key the mutable scope key */ void setMutableScope(ScopeKey key); /** * Get the metadata for this deployment unit * * @return the metadata */ MetaData getMetaData(); /** * Get the mutable metadata for this deployment unit * * @return the metadata */ MutableMetaData getMutableMetaData(); /** * Gets the classloader for this deployment unit * * @return the classloader */ ClassLoader getClassLoader(); /** * Create the classloader * * @param factory the classloader factory * @return false if the classloader already exists * @throws IllegalArgumentException for a null factory * @throws DeploymentException for any error */ boolean createClassLoader(ClassLoaderFactory factory) throws DeploymentException; /** * Remove the classloader * * @param factory the original factory used to create the classloader */ void removeClassLoader(ClassLoaderFactory factory); /** * Get all the metadata for the expected type * * @param the type to get * @param type the type * @return a set of metadata matching the type * @throws IllegalArgumentException if the type is null */ Set getAllMetaData(Class type); /** * Get the transient managed objects * * @return the managed objects */ MutableAttachments getTransientManagedObjects(); /** * Whether this unit is a top level deployment * * @return true if a top level deployment */ boolean isTopLevel(); /** * Get the top leve deployment unit * * @return the top level deployment unit */ DeploymentUnit getTopLevel(); /** * Get the parent deployment unit * * @return the parent or null if there is no parent */ DeploymentUnit getParent(); /** * Get the children * * @return the children */ List getChildren(); /** * Get the components * * @return the components */ List getComponents(); /** * Whether this unit is a component * * @return true for a component */ boolean isComponent(); /** * Add a component * * @param name the name * @return the new deployment unit * @throws IllegalArgumentException for a null name */ DeploymentUnit addComponent(String name); /** * Get component. * * @param name the name * @return component if matching component exists, else null */ DeploymentUnit getComponent(String name); /** * Remove a component * * @param name the name * @return true when removed * @throws IllegalArgumentException for a null name */ boolean removeComponent(String name); /** * Get a resource loader * * @return the resource loader */ DeploymentResourceLoader getResourceLoader(); /** * Get a resource classloader * * @return the resource classloader loader */ ClassLoader getResourceClassLoader(); /** * Visit the unit and the children * * @param visitor the visitor * @throws DeploymentException for any error in the visitor * @throws IllegalArgumentException for a null visitor */ void visit(DeploymentUnitVisitor visitor) throws DeploymentException; /** * Get the main deployer * * @return the deployer or null if not associated with a main deployer */ MainDeployer getMainDeployer(); /** * Get the dependency info * * @return the dependency */ DependencyInfo getDependencyInfo(); /** * Add a dependency * * @param dependency the dependency to add */ void addIDependOn(DependencyItem dependency); /** * Remove a dependency * * @param dependency the dependency to remove */ void removeIDependOn(DependencyItem dependency); /** * Get the controller context names. * * @return the names */ Set getControllerContextNames(); /** * Add controller context name. * * @param name the controller context name */ void addControllerContextName(Object name); /** * Remove controller context name. * * @param name the controller context name */ void removeControllerContextName(Object name); } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/StructuralDeployers.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000307410640504455033567 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; /** * Determine the structure of a deployment * * @author adrian@jboss.org * @version $Revision: 1.1$ */ public interface StructuralDeployers { /** * Determine the structure for a deployment * * @param deployment the deployment * @return the deployment context * @throws DeploymentException for any error */ DeploymentContext determineStructure(Deployment deployment) throws DeploymentException; } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentContextVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000311710640504455033565 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import org.jboss.deployers.spi.DeploymentException; /** * DeploymentContextVisitor. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface DeploymentContextVisitor { /** * Visit a context * * @param context the context * @throws DeploymentException for any error */ void visit(DeploymentContext context) throws DeploymentException; /** * Invoked when there is a subsequent error in the visit * * @param context the context */ void error(DeploymentContext context); } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/ClassLoaderFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000321310756604047033570 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; /** * ClassLoaderFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface ClassLoaderFactory { /** * Create a classloader for this deployment * * @param unit the deployment unit * @return classloader or null if not created * @throws Exception for any error */ ClassLoader createClassLoader(DeploymentUnit unit) throws Exception; /** * Remove a classloader for this deployment * * @param unit the deployment unit * @throws Exception for any error */ void removeClassLoader(DeploymentUnit unit) throws Exception; } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentResourceLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000324610640504455033570 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; import java.io.IOException; import java.net.URL; import java.util.Enumeration; /** * DeploymentResourceLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface DeploymentResourceLoader { /** * Get a resource * * @param name the name of the resource * @return the resource url */ URL getResource(String name); /** * Get resources * * @param name the name of the resource * @return the resource urls * @throws IOException for any error */ Enumeration getResources(String name) throws IOException; } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/main/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000755000175000017500000000000011620060465033556 5ustar twernertwerner././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/main/MainDeployerStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000524210640504455033566 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.main; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * MainDeployerStructure. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface MainDeployerStructure { /** * Get a deployment unit * * @param name the name of the unit * @return the unit or null if not found * @throws IllegalArgumentException for a null name */ DeploymentUnit getDeploymentUnit(String name); /** * Get a deployment context * * @param name the name of the context * @param errorNotFound whether to throw an error if not found * @return the context * @throws IllegalArgumentException for a null name * @throws DeploymentException for not found */ DeploymentUnit getDeploymentUnit(String name, boolean errorNotFound) throws DeploymentException; /** * Get a deployment context * * @param name the name of the context * @return the context or null if not found * @throws IllegalArgumentException for a null name */ @Deprecated DeploymentContext getDeploymentContext(String name); /** * Get a deployment context * * @param name the name of the context * @param errorNotFound whether to throw an error if not found * @return the context * @throws IllegalArgumentException for a null name * @throws DeploymentException for not found */ @Deprecated DeploymentContext getDeploymentContext(String name, boolean errorNotFound) throws DeploymentException; } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000755000175000017500000000000011620060465033556 5ustar twernertwerner././@LongLink0000000000000000000000000000023600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/DefaultDeploymentContextComparator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000377011021246627033570 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.io.Serializable; import java.util.Comparator; import org.jboss.deployers.structure.spi.DeploymentContext; /** * DefaultDeploymentContextComparator. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DefaultDeploymentContextComparator implements Comparator, Serializable { private static final long serialVersionUID = 4933914203587980050L; /** The singleton */ public static final DefaultDeploymentContextComparator INSTANCE = new DefaultDeploymentContextComparator(); public int compare(DeploymentContext o1, DeploymentContext o2) { int relative = o1.getRelativeOrder() - o2.getRelativeOrder(); if (relative != 0) return relative; else return o1.getSimpleName().compareTo(o2.getSimpleName()); } public static Comparator getInstance() { return INSTANCE; } Object readResolve() { return INSTANCE; } } ././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/ComponentDeploymentContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000004722411072426072033572 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.HashSet; import java.util.concurrent.CopyOnWriteArrayList; import javax.management.MBeanRegistration; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import org.jboss.classloading.spi.RealClassLoader; import org.jboss.dependency.spi.DependencyInfo; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.AttachmentsFactory; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.ClassLoaderFactory; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentContextVisitor; import org.jboss.deployers.structure.spi.DeploymentMBean; import org.jboss.deployers.structure.spi.DeploymentResourceLoader; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.scope.ScopeBuilder; import org.jboss.logging.Logger; import org.jboss.metadata.spi.MetaData; import org.jboss.metadata.spi.MutableMetaData; import org.jboss.metadata.spi.scope.ScopeKey; /** * AbstractDeploymentContext. * * @author Adrian Brock * @author Scott.Stark@jboss.org * @version $Revision: 59630 $ */ public class ComponentDeploymentContext implements DeploymentContext, ComponentDeploymentContextMBean, MBeanRegistration { /** The serialVersionUID */ private static final long serialVersionUID = -5105972679660633071L; /** The log */ protected Logger log = Logger.getLogger(getClass()); /** The name */ private String name; /** The object name */ private ObjectName objectName; /** The server */ private MBeanServer server; /** The controller context names - should be serializable */ private Set controllerContextNames; /** The deployment unit */ private DeploymentUnit unit; /** The parent context */ private DeploymentContext parent; /** The component contexts */ private List components = new CopyOnWriteArrayList(); /** The attachments */ private transient MutableAttachments transientAttachments = new TrackingMutableAttachments(AttachmentsFactory.createMutableAttachments()); /** The managed objects */ private transient MutableAttachments transientManagedObjects = new TrackingMutableAttachments(AttachmentsFactory.createMutableAttachments()); /** The scope */ private ScopeKey scope; /** The mutable scope */ private ScopeKey mutableScope; /** * For serialization */ public ComponentDeploymentContext() { } /** * Create a new ComponentDeploymentContext. * * @param name the name * @param parent the parent * @throws IllegalArgumentException if the name or parent is null */ public ComponentDeploymentContext(String name, DeploymentContext parent) { if (name == null) throw new IllegalArgumentException("Null name"); if (parent == null) throw new IllegalArgumentException("Null parent"); this.name = name; this.parent = parent; } public String getName() { return name; } public ObjectName getObjectName() { if (objectName == null) { String name = getName(); name = name.replace("\"", """); String temp = "jboss.deployment:id=\"" + name + "\",type=Component"; try { objectName = new ObjectName(temp); } catch (MalformedObjectNameException e) { throw new RuntimeException("Error creating object name: " + temp, e); } } return objectName; } public Set getControllerContextNames() { return controllerContextNames != null ? Collections.unmodifiableSet(controllerContextNames) : null; } public synchronized void addControllerContextName(Object name) { if (controllerContextNames == null) controllerContextNames = new HashSet(); controllerContextNames.add(name); } public synchronized void removeControllerContextName(Object name) { if (controllerContextNames != null) { controllerContextNames.remove(name); if (controllerContextNames.isEmpty()) controllerContextNames = null; } else log.warn("Removing name on null names: " + name); } public String getSimpleName() { return parent.getSimpleName(); } public String getRelativePath() { return parent.getRelativePath(); } public int getRelativeOrder() { return 0; } public void setRelativeOrder(int relativeOrder) { // No relative ordering of components? } public Comparator getComparator() { return null; } public void setComparator(Comparator comparator) { // No relative ordering of components? } public ScopeKey getScope() { if (scope == null) { ScopeBuilder builder = AbstractDeploymentContext.getScopeBuilder(this); scope = builder.getComponentScope(this); } return scope; } public void setScope(ScopeKey scope) { this.scope = scope; } public ScopeKey getMutableScope() { if (mutableScope == null) { ScopeBuilder builder = AbstractDeploymentContext.getScopeBuilder(this); mutableScope = builder.getMutableComponentScope(this); } return mutableScope; } public void setMutableScope(ScopeKey mutableScope) { this.mutableScope = mutableScope; } public MetaData getMetaData() { return AbstractDeploymentContext.getMetaData(this); } public MutableMetaData getMutableMetaData() { return AbstractDeploymentContext.getMutableMetaData(this); } public DeploymentState getState() { return parent.getState(); } public void setState(DeploymentState state) { parent.setState(state); } public DeploymentUnit getDeploymentUnit() { if (unit == null) throw new IllegalStateException("Deployment unit has not been set"); return unit; } public void setDeploymentUnit(DeploymentUnit unit) { this.unit = unit; } public void setMetaDataPath(String path) { throw new UnsupportedOperationException("Not supported for components"); } public ClassLoader getClassLoader() { return parent.getClassLoader(); } public ObjectName getClassLoaderName() { ClassLoader classLoader = getClassLoader(); if (classLoader == null || classLoader instanceof RealClassLoader == false) return null; return ((RealClassLoader) classLoader).getObjectName(); } public void setClassLoader(ClassLoader classLoader) { throw new UnsupportedOperationException("Not supported for components"); } public boolean createClassLoader(ClassLoaderFactory factory) throws DeploymentException { return false; } public void removeClassLoader() { } public void removeClassLoader(ClassLoaderFactory factory) { } public boolean isTopLevel() { return false; } public DeploymentContext getTopLevel() { return parent.getTopLevel(); } public ObjectName getTopLevelName() { DeploymentContext top = getTopLevel(); if (top == null || top instanceof DeploymentMBean == false) return null; return ((DeploymentMBean) top).getObjectName(); } public DeploymentContext getParent() { return parent; } public ObjectName getParentName() { DeploymentContext parent = getParent(); if (parent == null || parent instanceof DeploymentMBean == false) return null; return ((DeploymentMBean) parent).getObjectName(); } public void setParent(DeploymentContext parent) { throw new UnsupportedOperationException("Not supported for components"); } public List getChildren() { return Collections.emptyList(); } public List getChildNames() { return Collections.emptyList(); } public void addChild(DeploymentContext child) { throw new UnsupportedOperationException("Not supported for components"); } public boolean removeChild(DeploymentContext child) { throw new UnsupportedOperationException("Not supported for components"); } public Deployment getDeployment() { return parent.getDeployment(); } public void setDeployment(Deployment deployment) { throw new UnsupportedOperationException("Not supported for components"); } public boolean isComponent() { return true; } public List getComponents() { return Collections.unmodifiableList(components); } public List getComponentNames() { List components = getComponents(); List result = new ArrayList(); for (DeploymentContext component : components) { if (component instanceof DeploymentMBean) result.add(((DeploymentMBean) component).getObjectName()); } return result; } public void addComponent(DeploymentContext component) { if (component == null) throw new IllegalArgumentException("Null component"); components.add(component); if (server != null) registerMBeans(component, true); } public boolean removeComponent(DeploymentContext component) { if (component == null) throw new IllegalArgumentException("Null component"); boolean result = components.remove(component); if (server != null) unregisterMBeans(component, true); component.cleanup(); return result; } public ClassLoader getResourceClassLoader() { return parent.getResourceClassLoader(); } public DeploymentResourceLoader getResourceLoader() { return parent.getResourceLoader(); } public DependencyInfo getDependencyInfo() { return parent.getDependencyInfo(); } public String listAttachments(boolean detail) { Set processed = new HashSet(); StringBuilder result = new StringBuilder(); result.append(""); result.append(""); if (detail) result.append(""); result.append(""); listAttachments(result, getPredeterminedManagedObjects(), detail, processed); result.append(""); listAttachments(result, getTransientManagedObjects(), detail, processed); result.append(""); listAttachments(result, getTransientAttachments(), detail, processed); result.append("
AttachmentCreatedReferencedContents
Predetermined
Managed Objects
Transient
"); return result.toString(); } protected static void listAttachments(StringBuilder builder, Attachments attachments, boolean detail, Set processed) { TrackingMutableAttachments tracking = null; if (attachments instanceof TrackingMutableAttachments) tracking = (TrackingMutableAttachments) attachments; for (Map.Entry attachment : attachments.getAttachments().entrySet()) { String name = attachment.getKey(); List referenced = Collections.emptyList(); if (tracking != null) { Set deployers = tracking.getReferenced(name); if (deployers != null) referenced = new ArrayList(tracking.getReferenced(name)); } int row = 0; while (row < 1 || row < referenced.size()) { builder.append(""); if (row == 0) { builder.append("`--").append(name).append(""); if (tracking != null) builder.append("").append(tracking.getCreated(name)).append(""); else builder.append(""); } else { builder.append(""); } if (tracking != null && row < referenced.size()) builder.append("").append(referenced.get(row)).append(""); else builder.append(""); if (row == 0 && detail) builder.append("").append(attachment.getValue()).append(""); builder.append(""); ++row; } builder.append(""); } } public void visit(DeploymentContextVisitor visitor) throws DeploymentException { if (visitor == null) throw new IllegalArgumentException("Null visitor"); visit(this, visitor); } /** * Visit a context * * @param context the context * @param visitor the visitor * @throws DeploymentException for any error */ private void visit(DeploymentContext context, DeploymentContextVisitor visitor) throws DeploymentException { visitor.visit(context); try { List children = context.getChildren(); if (children.isEmpty()) return; DeploymentContext[] childContexts = children.toArray(new DeploymentContext[children.size()]); for (int i = 0; i < childContexts.length; ++i) { if (childContexts[i] == null) throw new IllegalStateException("Null child context for " + context.getName() + " children=" + children); try { visit(childContexts[i], visitor); } catch (Throwable t) { for (int j = i-1; j >= 0; --j) visitError(childContexts[j], visitor, true); throw DeploymentException.rethrowAsDeploymentException("Error visiting: " + childContexts[i].getName(), t); } } } catch (Throwable t) { visitError(context, visitor, false); throw DeploymentException.rethrowAsDeploymentException("Error visiting: " + context.getName(), t); } } /** * Unwind the visit invoking the previously visited context's error handler * * @param context the context * @param visitor the visitor * @param visitChildren whether to visit the children * @throws DeploymentException for any error */ private void visitError(DeploymentContext context, DeploymentContextVisitor visitor, boolean visitChildren) throws DeploymentException { if (visitChildren) { List children = context.getChildren(); if (children.isEmpty()) return; for (DeploymentContext child : children) { try { visitError(child, visitor, true); } catch (Throwable t) { log.warn("Error during visit error: " + child.getName(), t); } } } try { visitor.error(context); } catch (Throwable t) { log.warn("Error during visit error: " + context.getName(), t); } } public Attachments getPredeterminedManagedObjects() { return parent.getPredeterminedManagedObjects(); } public void setPredeterminedManagedObjects(Attachments objects) { throw new UnsupportedOperationException("Not supported for components"); } public MutableAttachments getTransientManagedObjects() { return transientManagedObjects; } public MutableAttachments getTransientAttachments() { return transientAttachments; } public Throwable getProblem() { return parent.getProblem(); } public void setProblem(Throwable problem) { parent.setProblem(problem); } public void deployed() { parent.deployed(); } public boolean isDeployed() { return parent.isDeployed(); } public void cleanup() { AbstractDeploymentContext.cleanupRepository(this); } public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception { this.server = server; return name; } public void postRegister(Boolean registrationDone) { if (registrationDone) registerMBeans(this, false); } public void preDeregister() throws Exception { unregisterMBeans(this, false); } public void postDeregister() { } /** * Register mbeans * * @param context the context * @param registerContext whether to register the context or just its children and components */ protected void registerMBeans(DeploymentContext context, boolean registerContext) { if (registerContext && context instanceof DeploymentMBean) { try { DeploymentMBean depMBean = (DeploymentMBean) context; server.registerMBean(context, depMBean.getObjectName()); } catch (Exception e) { log.warn("Unable to register deployment mbean " + context.getName(), e); } } List components = context.getComponents(); for (DeploymentContext component : components) registerMBeans(component, false); } /** * Unregister mbeans * * @param context the context * @param unregisterContext whether to unregister the context or just its children and components */ protected void unregisterMBeans(DeploymentContext context, boolean unregisterContext) { if (unregisterContext && context instanceof DeploymentMBean) { try { DeploymentMBean depMBean = (DeploymentMBean) context; server.unregisterMBean(depMBean.getObjectName()); } catch (Exception e) { log.trace("Unable to unregister deployment mbean " + context.getName(), e); } } List components = context.getComponents(); for (DeploymentContext component : components) unregisterMBeans(component, false); } public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append(getClass().getSimpleName()); buffer.append('@'); buffer.append(System.identityHashCode(this)); buffer.append('{').append(name).append('}'); return buffer.toString(); } } ././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/ComponentDeploymentContextMBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000277211113261537033570 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import org.jboss.deployers.structure.spi.DeploymentMBean; /** * ComponentDeploymentContextMBean. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface ComponentDeploymentContextMBean extends DeploymentMBean { /** * List the attachments as an html table * * @param detail whether to show the attachment * @return the html formatted string */ String listAttachments(boolean detail); } ././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/TrackingMutableAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000001525211113261537033565 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; import org.jboss.deployers.spi.attachments.MutableAttachments; /** * TrackingMutableAttachments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TrackingMutableAttachments implements MutableAttachments { /** The serialVersionUID */ private static final long serialVersionUID = 1L; /** The delegate */ private MutableAttachments delegate; /** The attachment creator */ private Map createdDeployer = new ConcurrentHashMap(); /** The attachment referencer */ private Map> referencedDeployer = new ConcurrentHashMap>(); /** * Create a new TrackingMutableAttachments. * * @param delegate the delegate */ public TrackingMutableAttachments(MutableAttachments delegate) { if (delegate == null) throw new IllegalArgumentException("Null delegate"); this.delegate = delegate; } /** * Get the deployer that created an attachment * * @param name the attachment name * @return the name or null if was predetermined */ public String getCreated(String name) { if (name == null) throw new IllegalArgumentException("Null name"); return createdDeployer.get(name); } /** * Get the deployers that referenced an attachment * * @param name the attachment name * @return the name or null if nothing referenced it */ public Set getReferenced(String name) { if (name == null) throw new IllegalArgumentException("Null name"); Set result = referencedDeployer.get(name); if (result == null) return null; return Collections.unmodifiableSet(result); } /** * An attachment is being created * * @param name the name */ void created(String name) { createdDeployer.put(name, DeployerTracking.getCurrentDeployer()); } /** * An attachment is being referenced * * @param name the name */ void referenced(String name) { Set deployers = referencedDeployer.get(name); if (deployers == null) { deployers = new CopyOnWriteArraySet(); referencedDeployer.put(name, deployers); } deployers.add(DeployerTracking.getCurrentDeployer()); } public T addAttachment(Class type, T attachment) { T result = delegate.addAttachment(type, attachment); if (result == null) created(type.getName()); else referenced(type.getName()); return result; } public Object addAttachment(String name, Object attachment) { Object result = delegate.addAttachment(name, attachment); if (result == null) created(name); else referenced(name); return result; } public T addAttachment(String name, T attachment, Class expectedType) { T result = delegate.addAttachment(name, attachment, expectedType); if (result == null) created(name); else referenced(name); return result; } public void clear() { createdDeployer.clear(); referencedDeployer.clear(); delegate.clear(); } public void clearChangeCount() { delegate.clearChangeCount(); } public T getAttachment(Class type) { T result = delegate.getAttachment(type); if (result != null) referenced(type.getName()); return result; } public T getAttachment(String name, Class expectedType) { T result = delegate.getAttachment(name, expectedType); if (result != null) referenced(name); return result; } public Object getAttachment(String name) { Object result = delegate.getAttachment(name); if (result != null) referenced(name); return result; } public Map getAttachments() { return delegate.getAttachments(); } public int getChangeCount() { return delegate.getChangeCount(); } public boolean hasAttachments() { return delegate.hasAttachments(); } public boolean isAttachmentPresent(Class type) { boolean result = delegate.isAttachmentPresent(type); if (result) referenced(type.getName()); return result; } public boolean isAttachmentPresent(String name, Class expectedType) { boolean result = delegate.isAttachmentPresent(name, expectedType); if (result) referenced(name); return result; } public boolean isAttachmentPresent(String name) { boolean result = delegate.isAttachmentPresent(name); if (result) referenced(name); return result; } public T removeAttachment(Class type) { T result = delegate.removeAttachment(type); if (result != null) referenced(type.getName()); return result; } public T removeAttachment(String name, Class expectedType) { T result = delegate.removeAttachment(name, expectedType); if (result != null) referenced(name); return result; } public Object removeAttachment(String name) { Object result = delegate.removeAttachment(name); if (result != null) referenced(name); return result; } public void setAttachments(Map map) { delegate.setAttachments(map); createdDeployer.clear(); referencedDeployer.clear(); } } ././@LongLink0000000000000000000000000000023700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/RelativeDeploymentContextComparator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000362110751216010033553 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.io.Serializable; import java.util.Comparator; import org.jboss.deployers.structure.spi.DeploymentContext; /** * RelativeDeploymentContextComparator. * * @author Ales Justin */ public class RelativeDeploymentContextComparator implements Comparator, Serializable { private static final long serialVersionUID = 4933914203587980050L; /** The singleton */ public static final RelativeDeploymentContextComparator INSTANCE = new RelativeDeploymentContextComparator(); public int compare(DeploymentContext o1, DeploymentContext o2) { return o1.getRelativeOrder() - o2.getRelativeOrder(); } public static Comparator getInstance() { return INSTANCE; } Object readResolve() { return INSTANCE; } } ././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/UnitVisitorToContextVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000423110756574626033602 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentContextVisitor; import org.jboss.deployers.structure.spi.DeploymentUnitVisitor; /** * UnitVisitorToContextVisitor. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class UnitVisitorToContextVisitor implements DeploymentContextVisitor { /** The deployment unit visitor */ private DeploymentUnitVisitor visitor; /** * Create a new UnitVisitorToContextVisitor. * * @param visitor the deployment unit visitor * @throws IllegalArgumentException for a null visitor */ public UnitVisitorToContextVisitor(DeploymentUnitVisitor visitor) { if (visitor == null) throw new IllegalArgumentException("Null visitor"); this.visitor = visitor; } public void visit(DeploymentContext context) throws DeploymentException { visitor.visit(context.getDeploymentUnit()); } public void error(DeploymentContext context) { visitor.error(context.getDeploymentUnit()); } } ././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructuralDeployers.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000652410717372452033577 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.StructuralDeployers; import org.jboss.deployers.structure.spi.StructureBuilder; /** * AbstractStructuralDeployers. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractStructuralDeployers implements StructuralDeployers { /** The structure builder */ private StructureBuilder structureBuilder; /** * Get the structureBuilder. * * @return the structureBuilder. */ public StructureBuilder getStructureBuilder() { return structureBuilder; } /** * Set the structureBuilder. * * @param structureBuilder the structureBuilder. */ public void setStructureBuilder(StructureBuilder structureBuilder) { this.structureBuilder = structureBuilder; } public DeploymentContext determineStructure(Deployment deployment) throws DeploymentException { StructureBuilder builder = getStructureBuilder(); if (builder == null) throw new IllegalStateException("No structure builder has been configured"); Attachments attachments = deployment.getPredeterminedManagedObjects(); StructureMetaData structureMetaData = attachments.getAttachment(StructureMetaData.class); if (structureMetaData == null) { structureMetaData = StructureMetaDataFactory.createStructureMetaData(); try { determineStructure(deployment, structureMetaData); } catch (DeploymentException e) { throw e; } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Exception determining structure: " + deployment, t); } } return structureBuilder.populateContext(deployment, structureMetaData); } protected void determineStructure(Deployment deployment, StructureMetaData structure) throws Exception { // NOTHING } } ././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructureBuilder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000002464311137607542033577 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.lang.reflect.Field; import java.util.Comparator; import java.util.List; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.StructureBuilder; import org.jboss.deployers.structure.spi.StructureProcessor; import org.jboss.logging.Logger; /** * AbstractStructureBuilder. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class AbstractStructureBuilder implements StructureBuilder { /** The log */ private final Logger log = Logger.getLogger(getClass()); /** The structure processor */ private StructureProcessor structureProcessor; public DeploymentContext populateContext(Deployment deployment, StructureMetaData metaData) throws DeploymentException { if (deployment == null) throw new IllegalArgumentException("Null deployment"); if (metaData == null) throw new IllegalArgumentException("Null metaData"); boolean trace = log.isTraceEnabled(); if (trace) log.trace("Populating deployment " + deployment.getName() + " metaData=" + metaData); DeploymentContext result; try { prepareStructureMetaData(deployment, metaData); result = createRootDeploymentContext(deployment, metaData); if (result == null) throw new IllegalStateException("Root deployment context is null"); result.setDeployment(deployment); ContextInfo contextInfo = metaData.getContext(""); if (contextInfo == null) contextInfo = StructureMetaDataFactory.createContextInfo("", null); applyStructureMetaData(result, metaData); contextInfo.setPredeterminedManagedObjects(deployment.getPredeterminedManagedObjects()); applyContextInfo(result, contextInfo); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error populating deployment " + deployment.getName(), t); } try { result.getTransientManagedObjects().addAttachment(StructureMetaData.class, metaData); populateContext(result, metaData); } catch (Throwable t) { result.setProblem(t); result.setState(DeploymentState.ERROR); log.warn("Error populating deployment " + deployment.getName(), t); } return result; } /** * Populate the child deployment contexts * * @param context the context * @param metaData the metadata * @throws Exception for any error */ protected void populateContext(DeploymentContext context, StructureMetaData metaData) throws Exception { if (context == null) throw new IllegalArgumentException("Null context"); if (metaData == null) throw new IllegalArgumentException("Null metaData"); boolean trace = log.isTraceEnabled(); if (trace) log.trace("Populating Context " + context.getName() + " metaData=" + metaData); List contexts = metaData.getContexts(); if (contexts == null) return; try { for (ContextInfo child : contexts) { // Only process the child contexts if ("".equals(child.getPath()) == false) { prepareContextInfo(context, child); DeploymentContext childContext = createChildDeploymentContext(context, child); if (childContext == null) throw new IllegalStateException("Child deployment context is null"); context.addChild(childContext); childContext.setParent(context); applyContextInfo(childContext, child); Attachments attachments = child.getPredeterminedManagedObjects(); if (attachments != null) { StructureMetaData childStructure = attachments.getAttachment(StructureMetaData.class); if (childStructure != null) populateContext(childContext, childStructure); } } } } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error populating context " + context.getName(), t); } } /** * Prepare the structure metadata. * * @param deploymentContext the deployment * @param structureMetaData the structure metadata */ protected void prepareStructureMetaData(Deployment deploymentContext, StructureMetaData structureMetaData) { if (structureProcessor != null) structureProcessor.prepareStructureMetaData(deploymentContext, structureMetaData); } /** * Prepare the structure metadata. * * @param parentDeploymentContext the parent deployment context * @param contextInfo the context info */ protected void prepareContextInfo(DeploymentContext parentDeploymentContext, ContextInfo contextInfo) { if (structureProcessor != null) structureProcessor.prepareContextInfo(parentDeploymentContext, contextInfo); } /** * Apply the structure metadata. * * @param deploymentContext the parent deployment context * @param structureMetaData the structure metadata */ protected void applyStructureMetaData(DeploymentContext deploymentContext, StructureMetaData structureMetaData) { if (structureProcessor != null) structureProcessor.applyStructureMetaData(deploymentContext, structureMetaData); } /** * Apply the context info. This transfers the PredeterminedManagedObjects * and TransientManagedObjects and other information from the ContextInfo to the DeploymentContext. * * @param context the context * @param contextInfo the contextInfo * @throws Exception for any error */ protected void applyContextInfo(DeploymentContext context, ContextInfo contextInfo) throws Exception { Attachments attachments = contextInfo.getPredeterminedManagedObjects(); if (attachments != null) context.setPredeterminedManagedObjects(attachments); context.setRelativeOrder(contextInfo.getRelativeOrder()); applyComparator(context, contextInfo); if (structureProcessor != null) structureProcessor.applyContextInfo(context, contextInfo); } /** * Try to apply the comparator * * @param context the context * @param contextInfo the contextInfo * @throws Exception for any error */ @SuppressWarnings("unchecked") protected void applyComparator(DeploymentContext context, ContextInfo contextInfo) throws Exception { String className = contextInfo.getComparatorClassName(); if (className == null) return; Object o = null; try { Class clazz = Thread.currentThread().getContextClassLoader().loadClass(className); try { Field field = clazz.getField("INSTANCE"); o = field.get(null); } catch (NoSuchFieldException ignored) { } if (o == null) o = clazz.newInstance(); Comparator comparator = Comparator.class.cast(o); context.setComparator(comparator); } catch (Throwable t) { log.warn("Unable to load/set comparator: " + className); } } /** * Create the root deployment context * * @param deployment the deployment * @param metaData the structure meta data * @return the deployment context * @throws Exception for any error */ protected DeploymentContext createRootDeploymentContext(Deployment deployment, StructureMetaData metaData) throws Exception { return createRootDeploymentContext(deployment); } /** * Create the root deployment context * * @param deployment the deployment * @return the deployment context * @throws Exception for any error */ protected DeploymentContext createRootDeploymentContext(Deployment deployment) throws Exception { return new AbstractDeploymentContext(deployment.getName(), ""); } /** * Create a child deployment context * * @param parent the parent deployment context * @param child the child context * @return the deployment context * @throws Exception for any error */ protected DeploymentContext createChildDeploymentContext(DeploymentContext parent, ContextInfo child) throws Exception { String path = child.getPath(); String name = parent.getName() + "/" + path; return new AbstractDeploymentContext(name, path); } /** * Set structure processor. * * @param structureProcessor the context info processor */ public void setStructureProcessor(StructureProcessor structureProcessor) { this.structureProcessor = structureProcessor; } /** * Get the context info processor. * * @return the structure processor */ protected StructureProcessor getStructureProcessor() { return structureProcessor; } } ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/DeploymentResourceClassLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000406410640504455033567 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.io.IOException; import java.net.URL; import java.util.Enumeration; import org.jboss.deployers.structure.spi.DeploymentResourceLoader; /** * DeploymentResourceClassLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentResourceClassLoader extends ClassLoader { /** The loader */ private DeploymentResourceLoader loader; /** * Create a new DeploymentResourceClassLoader. * * @param loader the loader * @throws IllegalArgumentException for a null loader */ public DeploymentResourceClassLoader(DeploymentResourceLoader loader) { if (loader == null) throw new IllegalArgumentException("Null loader"); this.loader = loader; } @Override protected URL findResource(String name) { return loader.getResource(name); } @Override protected Enumeration findResources(String name) throws IOException { return loader.getResources(name); } } ././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractDeploymentContextMBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000277011113261537033566 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import org.jboss.deployers.structure.spi.DeploymentMBean; /** * AbstractDeploymentContextMBean. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface AbstractDeploymentContextMBean extends DeploymentMBean { /** * List the attachments as an html table * * @param detail whether to show the attachment * @return the html formatted string */ String listAttachments(boolean detail); } ././@LongLink0000000000000000000000000000023700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/RevertedDeploymentContextComparator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000356710750722264033600 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.io.Serializable; import java.util.Comparator; import org.jboss.deployers.structure.spi.DeploymentContext; /** * RevertedDeploymentContextComparator. * * @author Ales Justin */ public class RevertedDeploymentContextComparator implements Comparator, Serializable { private static final long serialVersionUID = 4933914203587980050L; private Comparator comparator; public RevertedDeploymentContextComparator(Comparator comparator) { if (comparator == null) throw new IllegalArgumentException("Null comparator"); this.comparator = comparator; } public int compare(DeploymentContext o1, DeploymentContext o2) { return comparator.compare(o1, o2) * (-1); } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractDeploymentUnit.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000003570711046542655033604 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.jboss.dependency.spi.DependencyInfo; import org.jboss.dependency.spi.DependencyItem; import org.jboss.deployers.client.spi.main.MainDeployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.helpers.AbstractMutableAttachments; import org.jboss.deployers.structure.spi.ClassLoaderFactory; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentResourceLoader; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.DeploymentUnitVisitor; import org.jboss.metadata.spi.MetaData; import org.jboss.metadata.spi.MutableMetaData; import org.jboss.metadata.spi.scope.ScopeKey; /** * AbstractDeploymentUnit.

* * This is just a wrapper to the deployment context that * restricts people from "poking" behind the scenes. * * @author Adrian Brock * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public class AbstractDeploymentUnit extends AbstractMutableAttachments implements DeploymentUnit { /** The serialVersionUID */ private static final long serialVersionUID = 1513962148798298768L; /** The deployment context */ private DeploymentContext deploymentContext; /** * For serialization */ public AbstractDeploymentUnit() { } /** * Create a new AbstractDeploymentUnit. * * @param deploymentContext the deployment context * @throws IllegalArgumentException for a null deployment context */ public AbstractDeploymentUnit(DeploymentContext deploymentContext) { if (deploymentContext == null) throw new IllegalArgumentException("Null deployment context"); this.deploymentContext = deploymentContext; } public String getName() { return deploymentContext.getName(); } public Set getControllerContextNames() { return deploymentContext.getControllerContextNames(); } public void addControllerContextName(Object name) { deploymentContext.addControllerContextName(name); } public void removeControllerContextName(Object name) { deploymentContext.removeControllerContextName(name); } public String getSimpleName() { return deploymentContext.getSimpleName(); } public String getRelativePath() { return deploymentContext.getRelativePath(); } public ScopeKey getScope() { return deploymentContext.getScope(); } public void setScope(ScopeKey key) { deploymentContext.setScope(key); } public ScopeKey getMutableScope() { return deploymentContext.getMutableScope(); } public void setMutableScope(ScopeKey key) { deploymentContext.setMutableScope(key); } public MetaData getMetaData() { return deploymentContext.getMetaData(); } public MutableMetaData getMutableMetaData() { return deploymentContext.getMutableMetaData(); } public ClassLoader getClassLoader() { ClassLoader cl = deploymentContext.getClassLoader(); if (cl == null) throw new IllegalStateException("ClassLoader has not been set"); deploymentContext.deployed(); return cl; } public boolean createClassLoader(ClassLoaderFactory factory) throws DeploymentException { return deploymentContext.createClassLoader(factory); } public void removeClassLoader(ClassLoaderFactory factory) { deploymentContext.removeClassLoader(factory); } public boolean isTopLevel() { return deploymentContext.isTopLevel(); } public DeploymentUnit getTopLevel() { DeploymentContext context = deploymentContext.getTopLevel(); return context.getDeploymentUnit(); } public DeploymentUnit getParent() { DeploymentContext parent = deploymentContext.getParent(); if (parent == null) return null; return parent.getDeploymentUnit(); } public List getChildren() { List children = deploymentContext.getChildren(); if (children == null || children.isEmpty()) return Collections.emptyList(); List result = new ArrayList(children.size()); for (DeploymentContext child : children) { DeploymentUnit unit = child.getDeploymentUnit(); result.add(unit); } return result; } public List getComponents() { List components = deploymentContext.getComponents(); if (components == null || components.isEmpty()) return Collections.emptyList(); List result = new ArrayList(components.size()); for (DeploymentContext component : components) { DeploymentUnit unit = component.getDeploymentUnit(); result.add(unit); } return result; } /** * Create a component deployment context * * @param name the name * @param parent the parent * @return the deployment context */ protected DeploymentContext createComponentDeploymentContext(String name, DeploymentContext parent) { return new ComponentDeploymentContext(name, parent); } /** * Create a component deployment unit * * @param component the component contextr * @return the deployment unit */ protected DeploymentUnit createComponentDeploymentUnit(DeploymentContext component) { return new AbstractDeploymentUnit(component); } public boolean isComponent() { return deploymentContext.isComponent(); } public DeploymentUnit addComponent(String name) { DeploymentContext component = createComponentDeploymentContext(name, deploymentContext); DeploymentUnit unit = createComponentDeploymentUnit(component); component.setDeploymentUnit(unit); deploymentContext.addComponent(component); return unit; } /** * Get component deployment context. * * @param name the name * @return component component context or null if no match */ protected DeploymentContext getComponentContext(String name) { List components = deploymentContext.getComponents(); if (components == null || components.isEmpty()) return null; for (DeploymentContext component : components) { if (name.equals(component.getName())) return component; } return null; } public DeploymentUnit getComponent(String name) { if (name == null) throw new IllegalArgumentException("Null name"); DeploymentContext component = getComponentContext(name); return component != null ? component.getDeploymentUnit() : null; } public boolean removeComponent(String name) { if (name == null) throw new IllegalArgumentException("Null name"); DeploymentContext component = getComponentContext(name); return component != null && deploymentContext.removeComponent(component); } public Set getAllMetaData(Class type) { if (type == null) throw new IllegalArgumentException("Null type"); Set result = new HashSet(); Map attachments = getAttachments(); for (Object object : attachments.values()) { if (type.isInstance(object)) { T t = type.cast(object); result.add(t); } } if (result.isEmpty() == false) deploymentContext.deployed(); return result; } public MutableAttachments getTransientManagedObjects() { return getDeploymentContext().getTransientManagedObjects(); } public Object addAttachment(String name, Object attachment) { DeploymentContext deploymentContext = getDeploymentContext(); deploymentContext.deployed(); return deploymentContext.getTransientAttachments().addAttachment(name, attachment); } public void clear() { DeploymentContext deploymentContext = getDeploymentContext(); deploymentContext.getTransientAttachments().clear(); deploymentContext.getTransientManagedObjects().clear(); } public void clearChangeCount() { DeploymentContext deploymentContext = getDeploymentContext(); deploymentContext.getTransientAttachments().clearChangeCount(); deploymentContext.getTransientManagedObjects().clearChangeCount(); } public int getChangeCount() { DeploymentContext deploymentContext = getDeploymentContext(); return deploymentContext.getTransientAttachments().getChangeCount() + deploymentContext.getTransientManagedObjects().getChangeCount(); } public Object removeAttachment(String name) { return getDeploymentContext().getTransientAttachments().removeAttachment(name); } public Object getAttachment(String name) { DeploymentContext deploymentContext = getDeploymentContext(); DeploymentContext parent = deploymentContext.getParent(); if (deploymentContext.isComponent() == false) parent = null; Object result = deploymentContext.getPredeterminedManagedObjects().getAttachment(name); if (result != null) { deploymentContext.deployed(); return result; } if (parent != null) { result = parent.getPredeterminedManagedObjects().getAttachment(name); if (result != null) { deploymentContext.deployed(); return result; } } result = deploymentContext.getTransientManagedObjects().getAttachment(name); if (result != null) { deploymentContext.deployed(); return result; } if (parent != null) { result = parent.getTransientManagedObjects().getAttachment(name); if (result != null) { deploymentContext.deployed(); return result; } } result = deploymentContext.getTransientAttachments().getAttachment(name); if (result != null) { deploymentContext.deployed(); return result; } if (parent != null) { result = parent.getTransientAttachments().getAttachment(name); if (result != null) { deploymentContext.deployed(); return result; } } return null; } public Map getAttachments() { DeploymentContext deploymentContext = getDeploymentContext(); DeploymentContext parent = deploymentContext.getParent(); if (deploymentContext.isComponent() == false) parent = null; HashMap result = new HashMap(); if (parent != null) result.putAll(parent.getTransientAttachments().getAttachments()); result.putAll(deploymentContext.getTransientAttachments().getAttachments()); if (parent != null) result.putAll(parent.getTransientManagedObjects().getAttachments()); result.putAll(deploymentContext.getTransientManagedObjects().getAttachments()); if (parent != null) result.putAll(parent.getPredeterminedManagedObjects().getAttachments()); result.putAll(deploymentContext.getPredeterminedManagedObjects().getAttachments()); if (result.isEmpty() == false) deploymentContext.deployed(); return Collections.unmodifiableMap(result); } public boolean hasAttachments() { DeploymentContext deploymentContext = getDeploymentContext(); if (deploymentContext.getTransientAttachments().hasAttachments()) return true; else if (deploymentContext.getTransientManagedObjects().hasAttachments()) return true; else if (deploymentContext.getPredeterminedManagedObjects().hasAttachments()) return true; if (deploymentContext.isComponent()) return deploymentContext.getParent().getDeploymentUnit().hasAttachments(); return false; } public boolean isAttachmentPresent(String name) { return getAttachment(name) != null; } public ClassLoader getResourceClassLoader() { return getDeploymentContext().getResourceClassLoader(); } public DeploymentResourceLoader getResourceLoader() { return getDeploymentContext().getResourceLoader(); } public void addIDependOn(DependencyItem dependency) { getDependencyInfo().addIDependOn(dependency); } public void visit(DeploymentUnitVisitor visitor) throws DeploymentException { UnitVisitorToContextVisitor contextVisitor = new UnitVisitorToContextVisitor(visitor); getDeploymentContext().visit(contextVisitor); } public DependencyInfo getDependencyInfo() { return getDeploymentContext().getDependencyInfo(); } public void removeIDependOn(DependencyItem dependency) { getDependencyInfo().removeIDependOn(dependency); } public MainDeployer getMainDeployer() { return getTopLevel().getAttachment(MainDeployer.class); } /** * Get the deployment context * * @return the deployment context */ protected DeploymentContext getDeploymentContext() { return deploymentContext; } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); deploymentContext = (DeploymentContext) in.readObject(); } /** * @serialData deploymentContext * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); out.writeObject(deploymentContext); } public String toString() { return String.valueOf(deploymentContext); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/DeployerTracking.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000416311113261537033564 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.util.Stack; /** * DeployerTracking. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeployerTracking { /** The thread local stack containg the current deployer */ private static ThreadLocal> currentDeployer = new ThreadLocal>() { protected Stack initialValue() { return new Stack(); } }; /** * Get the stack. * * @return the stack */ private static Stack getStack() { return currentDeployer.get(); } /** * Get the current deployer * * @return the name of the current deployer */ public static String getCurrentDeployer() { return (getStack().isEmpty()) ? "UNKNOWN" : getStack().peek(); } /** * Push onto stack. * * @param deployer the current deployer */ public static void push(String deployer) { getStack().push(deployer); } /** * Pop from the stack. */ public static void pop() { getStack().pop(); } } ././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractDeploymentContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000010053211072426072033562 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2006, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; import javax.management.MBeanRegistration; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import org.jboss.classloading.spi.RealClassLoader; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.DependencyInfo; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.helpers.ManagedObjectsWithTransientAttachmentsImpl; import org.jboss.deployers.structure.spi.ClassLoaderFactory; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.DeploymentContextVisitor; import org.jboss.deployers.structure.spi.DeploymentMBean; import org.jboss.deployers.structure.spi.DeploymentResourceLoader; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.scope.ScopeBuilder; import org.jboss.deployers.structure.spi.scope.helpers.DefaultScopeBuilder; import org.jboss.logging.Logger; import org.jboss.metadata.spi.MetaData; import org.jboss.metadata.spi.MutableMetaData; import org.jboss.metadata.spi.context.MetaDataContext; import org.jboss.metadata.spi.loader.MutableMetaDataLoader; import org.jboss.metadata.spi.repository.MutableMetaDataRepository; import org.jboss.metadata.spi.retrieval.MetaDataRetrieval; import org.jboss.metadata.spi.scope.ScopeKey; /** * AbstractDeploymentContext. * * @author Adrian Brock * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public class AbstractDeploymentContext extends ManagedObjectsWithTransientAttachmentsImpl implements DeploymentContext, AbstractDeploymentContextMBean, MBeanRegistration { /** The serialVersionUID */ private static final long serialVersionUID = 7368360479461613969L; /** The log */ private static final Logger log = Logger.getLogger(AbstractDeploymentContext.class); /** The name */ private String name; /** The ObjectName */ private ObjectName objectName; /** The MBeanServer */ private MBeanServer server; /** The controller context names - should be serializable */ private Set controllerContextNames; /** The simple name */ private String simpleName; /** The relative path */ private String relativePath; /** The deployment state */ private DeploymentState state; /** Throwable */ private Throwable problem; /** The deployment */ private Deployment deployment; /** The deployment unit */ private transient DeploymentUnit unit; /** The class loader */ private transient ClassLoader classLoader; /** The class loader factory for this deployment */ private transient ClassLoaderFactory classLoaderFactory; /** The resource classloader */ private transient ClassLoader resourceClassLoader; /** Whether this deployment was processed */ private boolean deployed; /** The parent context */ private DeploymentContext parent; /** The types of deployments this has been identified as */ private Set deploymentTypes = new CopyOnWriteArraySet(); /** The child contexts */ private SortedSet children; /** The component contexts */ private List components = new CopyOnWriteArrayList(); /** The relative order */ private int relativeOrder; /** The context comparator */ private Comparator comparator = DefaultDeploymentContextComparator.INSTANCE; /** The scope */ private ScopeKey scope; /** The mutable scope */ private ScopeKey mutableScope; /** The transient managed objects */ private transient TrackingMutableAttachments transientManagedObjects; /** The transient attachements */ private transient TrackingMutableAttachments transientAttachments; /** * Get the scope builder for a deployment context * * @param deploymentContext the deployment context * @return the scope builder */ public static ScopeBuilder getScopeBuilder(DeploymentContext deploymentContext) { if (deploymentContext == null) throw new IllegalArgumentException("Null deployment context"); ScopeBuilder builder = deploymentContext.getTransientAttachments().getAttachment(ScopeBuilder.class); if (builder != null) return builder; DeploymentContext parent = deploymentContext.getParent(); if (parent != null) return getScopeBuilder(parent); return DefaultScopeBuilder.INSTANCE; } /** * Get the repository for a deployment context * * @param deploymentContext the deployment context * @return the repository */ public static MutableMetaDataRepository getRepository(DeploymentContext deploymentContext) { if (deploymentContext == null) throw new IllegalArgumentException("Null deployment context"); MutableMetaDataRepository repository = deploymentContext.getTransientAttachments().getAttachment(MutableMetaDataRepository.class); if (repository != null) return repository; DeploymentContext parent = deploymentContext.getParent(); if (parent == null) return null; return getRepository(parent); } /** * Cleanup the repository * * @param deploymentContext the deployment context */ public static void cleanupRepository(DeploymentContext deploymentContext) { MutableMetaDataRepository repository = getRepository(deploymentContext); if (repository == null) return; try { ScopeKey scope = deploymentContext.getScope(); repository.removeMetaDataRetrieval(scope); } catch (Throwable ignored) { } try { ScopeKey scope = deploymentContext.getMutableScope(); repository.removeMetaDataRetrieval(scope); } catch (Throwable ignored) { } } /** * Get the metadata for a deployment context * * @param deploymentContext the deployment context * @return the metaData */ public static MetaData getMetaData(DeploymentContext deploymentContext) { MutableMetaDataRepository repository = getRepository(deploymentContext); if (repository == null) return null; MetaData metaData = repository.getMetaData(deploymentContext.getScope()); if (metaData == null) { initMetaDataRetrieval(repository, deploymentContext); metaData = repository.getMetaData(deploymentContext.getScope()); } return metaData; } /** * Get the mutable metadata for a deployment context * * @param deploymentContext the deployment context * @return the metaData */ public static MutableMetaDataLoader getMutableMetaData(DeploymentContext deploymentContext) { MutableMetaDataRepository repository = getRepository(deploymentContext); if (repository == null) return null; ScopeKey mutableScope = deploymentContext.getMutableScope(); MetaDataRetrieval retrieval = repository.getMetaDataRetrieval(mutableScope); if (retrieval == null) { initMutableMetaDataRetrieval(repository, deploymentContext); retrieval = repository.getMetaDataRetrieval(mutableScope); } // Nothing if (retrieval == null) return null; // This is mutable if (retrieval instanceof MutableMetaDataLoader) return (MutableMetaDataLoader) retrieval; // We have a context, see if there is a mutable in the locals if (retrieval instanceof MetaDataContext) { MetaDataContext context = (MetaDataContext) retrieval; List locals = context.getLocalRetrievals(); if (locals != null) { for (MetaDataRetrieval local : locals) { if (local instanceof MutableMetaDataLoader) return (MutableMetaDataLoader) local; } } } return null; } /** * Initialise the metadata retrieval for a deployment context * * @param repository the meta data repository * @param deploymentContext the deployment context */ private static void initMetaDataRetrieval(MutableMetaDataRepository repository, DeploymentContext deploymentContext) { if (deploymentContext == null) throw new IllegalArgumentException("Null deployment context"); ScopeBuilder builder = deploymentContext.getTransientAttachments().getAttachment(ScopeBuilder.class); if (builder == null) builder = DefaultScopeBuilder.INSTANCE; builder.initMetaDataRetrieval(repository, deploymentContext); } /** * Initialise the metadata retrieval for a deployment context * * @param repository the meta data repository * @param deploymentContext the deployment context */ private static void initMutableMetaDataRetrieval(MutableMetaDataRepository repository, DeploymentContext deploymentContext) { if (deploymentContext == null) throw new IllegalArgumentException("Null deployment context"); ScopeBuilder builder = deploymentContext.getTransientAttachments().getAttachment(ScopeBuilder.class); if (builder == null) builder = DefaultScopeBuilder.INSTANCE; builder.initMutableMetaDataRetrieval(repository, deploymentContext); } /** * For serialization */ public AbstractDeploymentContext() { transientManagedObjects = new TrackingMutableAttachments(super.getTransientManagedObjects()); transientAttachments = new TrackingMutableAttachments(super.getTransientAttachments()); } /** * Create a new AbstractDeploymentContext. * * @param name the name * @param relativePath the relative path to the top of the deployment * @throws IllegalArgumentException if the name is null */ public AbstractDeploymentContext(String name, String relativePath) { this(name, name, relativePath); } /** * Create a new AbstractDeploymentContext. * * @param name the name * @param simpleName the simple name * @param relativePath the relative path to the top of the deployment * @throws IllegalArgumentException if the name is null */ public AbstractDeploymentContext(String name, String simpleName, String relativePath) { this(); if (name == null) throw new IllegalArgumentException("Null name"); if (relativePath == null) throw new IllegalArgumentException("Null relative path"); this.name = name; this.simpleName = simpleName; if (simpleName == null) this.simpleName = name; this.relativePath = relativePath; } public String getName() { return name; } public ObjectName getObjectName() { if (objectName == null) { String type = "Deployment"; if (getParent() != null) type = "SubDeployment"; if (isComponent()) type = "Component"; String name = getName(); name = name.replace("\"", """); String temp = "jboss.deployment:id=\"" + name + "\",type=" + type; try { objectName = new ObjectName(temp); } catch (MalformedObjectNameException e) { throw new RuntimeException("Error creating object name: " + temp, e); } } return objectName; } public Set getControllerContextNames() { return controllerContextNames != null ? Collections.unmodifiableSet(controllerContextNames) : null; } public synchronized void addControllerContextName(Object name) { if (controllerContextNames == null) controllerContextNames = new HashSet(); controllerContextNames.add(name); } public synchronized void removeControllerContextName(Object name) { if (controllerContextNames != null) { controllerContextNames.remove(name); if (controllerContextNames.isEmpty()) controllerContextNames = null; } else log.warn("Removing name on null names: " + name); } public String getSimpleName() { return simpleName; } public String getRelativePath() { return relativePath; } public int getRelativeOrder() { return relativeOrder; } public void setRelativeOrder(int relativeOrder) { this.relativeOrder = relativeOrder; } public Comparator getComparator() { return comparator; } public void setComparator(Comparator comparator) { if (comparator == null) comparator = DefaultDeploymentContextComparator.INSTANCE; this.comparator = comparator; } public ScopeKey getScope() { if (scope == null) { ScopeBuilder builder = getScopeBuilder(this); scope = builder.getDeploymentScope(this); } return scope; } public void setScope(ScopeKey scope) { this.scope = scope; } public ScopeKey getMutableScope() { if (mutableScope == null) { ScopeBuilder builder = getScopeBuilder(this); mutableScope = builder.getMutableDeploymentScope(this); } return mutableScope; } public void setMutableScope(ScopeKey mutableScope) { this.mutableScope = mutableScope; } public MetaData getMetaData() { return getMetaData(this); } public MutableMetaData getMutableMetaData() { return getMutableMetaData(this); } public DeploymentState getState() { return state; } public void setState(DeploymentState state) { if (state == null) throw new IllegalArgumentException("Null state"); this.state = state; } public Deployment getDeployment() { return deployment; } public void setDeployment(Deployment deployment) { if (deployment == null) throw new IllegalArgumentException("Null deployment"); this.deployment = deployment; } public DeploymentUnit getDeploymentUnit() { if (unit == null) unit = createDeploymentUnit(); return unit; } public void setDeploymentUnit(DeploymentUnit unit) { this.unit = unit; } public ClassLoader getClassLoader() { return classLoader; } public ObjectName getClassLoaderName() { ClassLoader classLoader = getClassLoader(); if (classLoader == null || classLoader instanceof RealClassLoader == false) return null; return ((RealClassLoader) classLoader).getObjectName(); } public void setClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; if (classLoader != null) log.trace("ClassLoader for " + name + " is " + classLoader); } public boolean createClassLoader(ClassLoaderFactory factory) throws DeploymentException { if (factory == null) throw new IllegalArgumentException("Null factory"); ClassLoader cl = getClassLoader(); if (cl != null) return false; try { cl = factory.createClassLoader(getDeploymentUnit()); if (cl != null) { setClassLoader(cl); this.classLoaderFactory = factory; } else { // No classloader, use the deployer's classloader setClassLoader(Thread.currentThread().getContextClassLoader()); } } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error creating classloader for " + getName(), t); } return true; } public void removeClassLoader() { if (classLoaderFactory == null) return; try { classLoaderFactory.removeClassLoader(getDeploymentUnit()); } catch (Throwable t) { log.warn("Error removing classloader for " + getName(), t); } classLoaderFactory = null; setClassLoader(null); } public void removeClassLoader(ClassLoaderFactory factory) { if (classLoaderFactory == factory) removeClassLoader(); } public boolean isTopLevel() { return parent == null; } public DeploymentContext getTopLevel() { DeploymentContext result = this; DeploymentContext parent = getParent(); while (parent != null) { result = parent; parent = parent.getParent(); } return result; } public ObjectName getTopLevelName() { DeploymentContext top = getTopLevel(); if (top == null || top instanceof DeploymentMBean == false) return null; return ((DeploymentMBean) top).getObjectName(); } public DeploymentContext getParent() { return parent; } public ObjectName getParentName() { DeploymentContext parent = getParent(); if (parent == null || parent instanceof DeploymentMBean == false) return null; return ((DeploymentMBean) parent).getObjectName(); } public void setParent(DeploymentContext parent) { if (parent != null && this.parent != null) throw new IllegalStateException("Context already has a parent " + getName()); this.parent = parent; } public List getChildren() { if (children == null || children.isEmpty()) return Collections.emptyList(); return new ArrayList(children); } public List getChildNames() { List children = getChildren(); List result = new ArrayList(); for (DeploymentContext child : children) { if (child instanceof DeploymentMBean) result.add(((DeploymentMBean) child).getObjectName()); } return result; } public void addChild(DeploymentContext child) { if (child == null) throw new IllegalArgumentException("Null child"); if (children == null) children = new TreeSet(comparator); children.add(child); if (server != null) registerMBeans(child, true); } public boolean removeChild(DeploymentContext child) { if (child == null) throw new IllegalArgumentException("Null child"); if (children == null) return false; if (server != null) unregisterMBeans(child, true); return children.remove(child); } public boolean isComponent() { return false; } public List getComponents() { return Collections.unmodifiableList(components); } public List getComponentNames() { List components = getComponents(); List result = new ArrayList(); for (DeploymentContext component : components) { if (component instanceof DeploymentMBean) result.add(((DeploymentMBean) component).getObjectName()); } return result; } public void addComponent(DeploymentContext component) { if (component == null) throw new IllegalArgumentException("Null component"); deployed(); components.add(component); if (server != null) registerMBeans(component, true); log.debug("Added component " + component.getName() + " to " + getName()); } public boolean removeComponent(DeploymentContext component) { if (component == null) throw new IllegalArgumentException("Null component"); if (server != null) unregisterMBeans(component, true); List componentComponents = component.getComponents(); if (componentComponents.isEmpty() == false) log.warn("Removing component " + name + " which still has components " + componentComponents); boolean result = components.remove(component); component.cleanup(); if (result) log.debug("Removed component " + component.getName() + " from " + getName()); return result; } public ClassLoader getResourceClassLoader() { if (resourceClassLoader != null) return resourceClassLoader; DeploymentResourceLoader loader = getResourceLoader(); resourceClassLoader = new DeploymentResourceClassLoader(loader); return resourceClassLoader; } public DeploymentResourceLoader getResourceLoader() { return EmptyResourceLoader.INSTANCE; } public DependencyInfo getDependencyInfo() { ControllerContext controllerContext = getTransientAttachments().getAttachment(ControllerContext.class); if (controllerContext != null) return controllerContext.getDependencyInfo(); else { DeploymentContext parent = getParent(); if (parent == null) throw new IllegalStateException("Deployment ControllerContext has not been set"); return parent.getDependencyInfo(); } } public MutableAttachments getTransientAttachments() { return transientAttachments; } public MutableAttachments getTransientManagedObjects() { return transientManagedObjects; } public String listAttachments(boolean detail) { Set processed = new HashSet(); StringBuilder result = new StringBuilder(); result.append(""); result.append(""); if (detail) result.append(""); result.append(""); listAttachments(result, getPredeterminedManagedObjects(), detail, processed); result.append(""); listAttachments(result, getTransientManagedObjects(), detail, processed); result.append(""); listAttachments(result, getTransientAttachments(), detail, processed); result.append("
AttachmentCreatedReferencedContents
Predetermined
Managed Objects
Transient
"); return result.toString(); } protected static void listAttachments(StringBuilder builder, Attachments attachments, boolean detail, Set processed) { TrackingMutableAttachments tracking = null; if (attachments instanceof TrackingMutableAttachments) tracking = (TrackingMutableAttachments) attachments; for (Map.Entry attachment : attachments.getAttachments().entrySet()) { String name = attachment.getKey(); List referenced = Collections.emptyList(); if (tracking != null) { Set deployers = tracking.getReferenced(name); if (deployers != null) referenced = new ArrayList(tracking.getReferenced(name)); } int row = 0; while (row < 1 || row < referenced.size()) { builder.append(""); if (row == 0) { builder.append("`--").append(name).append(""); if (tracking != null) builder.append("").append(tracking.getCreated(name)).append(""); else builder.append(""); } else { builder.append(""); } if (tracking != null && row < referenced.size()) builder.append("").append(referenced.get(row)).append(""); else builder.append(""); if (row == 0 && detail) builder.append("").append(attachment.getValue()).append(""); builder.append(""); ++row; } builder.append(""); } } public void visit(DeploymentContextVisitor visitor) throws DeploymentException { if (visitor == null) throw new IllegalArgumentException("Null visitor"); visit(this, visitor); } /** * Visit a context * * @param context the context * @param visitor the visitor * @throws DeploymentException for any error */ private void visit(DeploymentContext context, DeploymentContextVisitor visitor) throws DeploymentException { visitor.visit(context); try { List children = context.getChildren(); if (children.isEmpty()) return; DeploymentContext[] childContexts = children.toArray(new DeploymentContext[children.size()]); for (int i = 0; i < childContexts.length; ++i) { if (childContexts[i] == null) throw new IllegalStateException("Null child context for " + context.getName() + " children=" + children); try { visit(childContexts[i], visitor); } catch (Throwable t) { for (int j = i-1; j >= 0; --j) visitError(childContexts[j], visitor, true); throw DeploymentException.rethrowAsDeploymentException("Error visiting: " + childContexts[i].getName(), t); } } } catch (Throwable t) { visitError(context, visitor, false); throw DeploymentException.rethrowAsDeploymentException("Error visiting: " + context.getName(), t); } } /** * Unwind the visit invoking the previously visited context's error handler * * @param context the context * @param visitor the visitor * @param visitChildren whether to visit the children * @throws DeploymentException for any error */ private void visitError(DeploymentContext context, DeploymentContextVisitor visitor, boolean visitChildren) throws DeploymentException { if (visitChildren) { List children = context.getChildren(); if (children.isEmpty()) return; for (DeploymentContext child : children) { try { visitError(child, visitor, true); } catch (Throwable t) { log.warn("Error during visit error: " + child.getName(), t); } } } try { visitor.error(context); } catch (Throwable t) { log.warn("Error during visit error: " + context.getName(), t); } } public Throwable getProblem() { return problem; } public void setProblem(Throwable problem) { this.problem = problem; } public boolean isDeployed() { return deployed; } public void deployed() { deployed = true; } public void cleanup() { cleanupRepository(this); } public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception { this.server = server; return name; } public void postRegister(Boolean registrationDone) { if (registrationDone) registerMBeans(this, false); } public void preDeregister() throws Exception { unregisterMBeans(this, false); } public void postDeregister() { } /** * Register mbeans * * @param context the context * @param registerContext whether to register the context or just its children and components */ protected void registerMBeans(DeploymentContext context, boolean registerContext) { if (registerContext && context instanceof DeploymentMBean) { try { DeploymentMBean depMBean = (DeploymentMBean) context; server.registerMBean(context, depMBean.getObjectName()); } catch (Exception e) { log.warn("Unable to register deployment mbean " + context.getName(), e); } } List children = context.getChildren(); for (DeploymentContext child : children) registerMBeans(child, true); List components = context.getComponents(); for (DeploymentContext component : components) registerMBeans(component, false); } /** * Unregister mbeans * * @param context the context * @param unregisterContext whether to unregister the context or just its children and components */ protected void unregisterMBeans(DeploymentContext context, boolean unregisterContext) { if (unregisterContext && context instanceof DeploymentMBean) { try { DeploymentMBean depMBean = (DeploymentMBean) context; server.unregisterMBean(depMBean.getObjectName()); } catch (Exception e) { log.trace("Unable to unregister deployment mbean " + context.getName(), e); } } List children = context.getChildren(); for (DeploymentContext child : children) unregisterMBeans(child, true); List components = context.getComponents(); for (DeploymentContext component : components) unregisterMBeans(component, false); } @Override public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append(getClass().getSimpleName()); buffer.append('@'); buffer.append(System.identityHashCode(this)); buffer.append('{').append(name).append('}'); return buffer.toString(); } /** * Create a deployment unit * * @return the deployment unit */ protected DeploymentUnit createDeploymentUnit() { return new AbstractDeploymentUnit(this); } @SuppressWarnings("unchecked") public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); name = in.readUTF(); simpleName = in.readUTF(); relativePath = in.readUTF(); state = (DeploymentState) in.readObject(); problem = (Throwable) in.readObject(); deployment = (Deployment) in.readObject(); deployed = in.readBoolean(); parent = (DeploymentContext) in.readObject(); deploymentTypes = (Set) in.readObject(); children = (SortedSet) in.readObject(); components = (List) in.readObject(); } /** * @serialData name * @serialData simpleName * @serialData relativePath * @serialData state * @serialData problem * @serialData deployment * @serialData deployed * @serialData parent * @serialData deploymentTypes * @serialData children * @serialData components * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); out.writeUTF(name); out.writeUTF(simpleName); out.writeUTF(relativePath); out.writeObject(state); out.writeObject(problem); out.writeObject(deployment); out.writeBoolean(deployed); out.writeObject(parent); out.writeObject(deploymentTypes); out.writeObject(children); out.writeObject(components); } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/EmptyResourceLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000340610640504455033566 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi.helpers; import java.net.URL; import java.util.Enumeration; import java.util.Vector; import org.jboss.deployers.structure.spi.DeploymentResourceLoader; /** * EmptyResourceLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class EmptyResourceLoader implements DeploymentResourceLoader { /** The singleton instance */ public static final DeploymentResourceLoader INSTANCE = new EmptyResourceLoader(); /** Empty urls */ private static final Enumeration empty = new Vector().elements(); public URL getResource(String name) { return null; } public Enumeration getResources(String name) { return empty; } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentUnitFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/src/main/java/org/jboss/deployers/stru0000644000175000017500000000247711113261537033572 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.structure.spi; /** * DeploymentUnitFilter.

* * @author Ales Justin */ public interface DeploymentUnitFilter { /** * Match the deployment unit * * @param unit the deployment unit * @return true when it matches */ boolean accepts(DeploymentUnit unit); }libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/.settings/0000755000175000017500000000000011620060465026205 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740033202 0ustar twernertwerner#Fri Sep 21 17:49:44 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-structure-spi/.project0000644000175000017500000000104711071370224025735 0ustar twernertwerner jboss-deployers-structure-spi JBoss Deployers Structure SPI jboss-deployers-client jboss-deployers-client-spi jboss-deployers-core jboss-deployers-core-spi org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/0000755000175000017500000000000011620060464023024 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/.classpath0000644000175000017500000000703511113263640025012 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/pom.xml0000644000175000017500000000510511137607542024351 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-vfs-spi jar JBoss Deployers VFS SPI http://www.jboss.com/products/jbossmc JBoss Deployers VFS SPI org.jboss jboss-vfs org.jboss jboss-common-core org.jboss.logging jboss-logging-spi org.jboss.deployers jboss-deployers-spi org.jboss.cl jboss-classloading org.jboss jboss-common-core org.jboss.logging jboss-logging-spi org.jboss.microcontainer jboss-dependency org.jboss jbossxb org.jboss jboss-reflect org.jboss jboss-common-core org.jboss.logging jboss-logging-spi stax stax-api libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/0000755000175000017500000000000011620060463023612 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/0000755000175000017500000000000011620060463024536 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/0000755000175000017500000000000011620060463025457 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/0000755000175000017500000000000011620060463026246 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/0000755000175000017500000000000011620060463027366 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060463031374 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/0000755000175000017500000000000011620060463032172 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/0000755000175000017500000000000011620060464032766 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/client/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/cl0000755000175000017500000000000011620060464033305 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/client/VFSDeployment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/cl0000644000175000017500000000264110640504506033313 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.client; import org.jboss.deployers.client.spi.Deployment; import org.jboss.virtual.VirtualFile; /** * VFSDeployment. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface VFSDeployment extends Deployment { /** * Get the root of the deployment * * @return the root */ VirtualFile getRoot(); } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/client/VFSDeploymentFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/cl0000644000175000017500000000413710640504506033315 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.client; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.virtual.VirtualFile; /** * VFSDeploymentFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class VFSDeploymentFactory extends DeploymentFactory { /** * Get an instance of the factory * * @return the factory */ public static VFSDeploymentFactory getInstance() { return VFSDeploymentBuilder.getInstance(); } /** * Create a new VFS deployment * * @param root the root virtual file * @return the deployment * @throws IllegalArgumentException for a null root */ public VFSDeployment createVFSDeployment(VirtualFile root) { return VFSDeploymentBuilder.getInstance().newVFSDeployment(root); } /** * Create a new VFS deployment * * @param root the root virtual file * @return the deployment * @throws IllegalArgumentException for a null root */ protected abstract VFSDeployment newVFSDeployment(VirtualFile root); } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/client/VFSDeploymentBuilder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/cl0000644000175000017500000000365610640504506033322 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.client; import java.security.AccessController; import org.jboss.util.builder.AbstractBuilder; /** * VFSDeploymentBuilder. * * @author Adrian Brock * @version $Revision: 1.1 $ */ class VFSDeploymentBuilder { /** The default attachments builder */ private static String DEFAULT_FACTORY = "org.jboss.deployers.vfs.plugins.client.DefaultVFSDeploymentFactory"; /** The singleton */ private static VFSDeploymentFactory singleton; /** * Get the instance * * @return the instance */ static synchronized VFSDeploymentFactory getInstance() { if (singleton == null) { AbstractBuilder builder = new AbstractBuilder(VFSDeploymentFactory.class, DEFAULT_FACTORY); singleton = AccessController.doPrivileged(builder); } return singleton; } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000755000175000017500000000000011620060464033277 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/UnmarshallerFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000272511024202462033301 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; /** * Set feature on parser/unmarshaller. * * @param exact feature flag type * @author Ales Justin */ interface UnmarshallerFactory { /** * Apply feature. * * @param featureName the feature name * @param flag the feature flag * @throws Exception for any error */ void setFeature(String featureName, T flag) throws Exception; } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/FileMatcher.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000270610757641060033315 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import org.jboss.virtual.VirtualFile; /** * Matches virtual file to check if it can be deployed. * * @author Ales Justin */ public interface FileMatcher { /** * Check if file param is deployable. * * @param file the virtual file * @return true if we have a match, false otherwise */ boolean isDeployable(VirtualFile file); }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/AbstractVFSParsingDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000002772311037341711033313 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.HashMap; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractParsingDeployerWithOutput; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * AbstractVFSParsingDeployer. * * @param the type of output * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public abstract class AbstractVFSParsingDeployer extends AbstractParsingDeployerWithOutput implements FileMatcher { /** The alt mappings key */ private static final String ALT_MAPPINGS_MAP_KEY = "AltMappingsMap"; /** The allow multiple fiels flag */ private boolean allowMultipleFiles; /** * Create a new AbstractVFSParsingDeployer. * * @param output the type of output * @throws IllegalArgumentException for null output */ public AbstractVFSParsingDeployer(Class output) { super(output); } public boolean isDeployable(VirtualFile file) { String fileName = file.getName(); String suffix = getSuffix(); if (suffix == null) return getNames() != null && getNames().contains(fileName); else return fileName.endsWith(suffix); } /** * Callback to do prechecking on the deployment * * @param unit the unit * @return true by default * @throws DeploymentException for any error */ protected boolean accepts(VFSDeploymentUnit unit) throws DeploymentException { return true; } @Override protected boolean accepts(DeploymentUnit unit) throws DeploymentException { // Ignore non-vfs deployments if (unit instanceof VFSDeploymentUnit == false) { log.trace("Not a vfs deployment: " + unit.getName()); return false; } return accepts((VFSDeploymentUnit) unit); } /** * Open stream and validate if not null. * * @param file the virtual file * @return non-null input stream * @throws Exception for any error or if file's stream is null */ protected InputStream openStreamAndValidate(VirtualFile file) throws Exception { if (file == null) throw new IllegalArgumentException("Null file"); InputStream inputStream = SecurityActions.openStream(file); if (inputStream == null) throw new IOException("Null file stream: " + file); return inputStream; } /** * Get the alt mappings map. * * @param unit the deployment unit * @return alt mappings map from attachments */ @SuppressWarnings("unchecked") protected static Map> getAltMappings(DeploymentUnit unit) { if (unit == null) throw new IllegalArgumentException("Null deployment unit"); return unit.getAttachment(ALT_MAPPINGS_MAP_KEY, Map.class); } /** * Get metadata file. * First try altDD, then fallback to original name. * * @param unit the vfs deployment unit * @param altExpectedClass the expected class of altDD * @param originalName the original file name * @param checkMetaDataFile should we fall back to metadata file * @return metadata file or null if it doesn't exist */ protected VirtualFile getMetadataFile(VFSDeploymentUnit unit, Class altExpectedClass, String originalName, boolean checkMetaDataFile) { String altPrefix = (altExpectedClass != null ? altExpectedClass.getName() : originalName); VirtualFile file = unit.getAttachment(altPrefix + ".altDD", VirtualFile.class); if (file != null && altExpectedClass != null) { Map> altMappingsMap = getAltMappings(unit); if (altMappingsMap == null) { altMappingsMap = new HashMap>(); unit.addAttachment(ALT_MAPPINGS_MAP_KEY, altMappingsMap, Map.class); } altMappingsMap.put(file.getName(), altExpectedClass); } if(checkMetaDataFile && file == null) file = unit.getMetaDataFile(originalName); return file; } /** * Match file name to metadata class. * * @param unit the deployment unit * @param fileName the file name * @return matching metadata class */ protected Class matchFileToClass(DeploymentUnit unit, String fileName) { Map> altMappingsMap = getAltMappings(unit); return altMappingsMap != null ? altMappingsMap.get(fileName) : null; } @Override protected T parse(DeploymentUnit unit, String name, T root) throws Exception { // Try to find the metadata VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit) unit; VirtualFile file = getMetadataFile(vfsDeploymentUnit, getOutput(), name, true); if(file == null) return null; return parseAndInit(vfsDeploymentUnit, file, root); } protected T parse(DeploymentUnit unit, Set names, T root) throws Exception { if (names == null || names.isEmpty()) throw new IllegalArgumentException("Null or empty names."); VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit)unit; List files = new ArrayList(); Set missingFiles = new HashSet(); for (String name : names) { VirtualFile file = getMetadataFile(vfsDeploymentUnit, matchFileToClass(unit, name), name, true); if (file != null) files.add(file); else missingFiles.add(name); } if (missingFiles.size() == names.size()) return null; return mergeFiles(vfsDeploymentUnit, root, files, missingFiles); } @Override protected T parse(DeploymentUnit unit, String name, String suffix, T root) throws Exception { // Should we include the deployment // The infrastructure will only check leafs anyway so no need to check here if (name == null && isIncludeDeploymentFile()) name = unit.getName(); // Try to find the metadata VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit) unit; // let's check altDD first VirtualFile file = getMetadataFile(vfsDeploymentUnit, getOutput(), name, false); if (file != null) return parseAndInit(vfsDeploymentUnit, file, root); // try all name+suffix matches List files = vfsDeploymentUnit.getMetaDataFiles(name, suffix); switch (files.size()) { case 0 : return null; case 1 : return parseAndInit(vfsDeploymentUnit, files.get(0), root); default : return handleMultipleFiles(vfsDeploymentUnit, root, files); } } /** * Parse the file, initialize the result if exists. * * @param unit the deployment unit * @param file the file * @param root the root * @return parsed result * @throws Exception for any error */ protected T parseAndInit(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception { T result = parse(unit, file, root); if (result != null) init(unit, result, file); return result; } protected T parse(DeploymentUnit unit, Set names, String suffix, T root) throws Exception { if (names == null || names.isEmpty()) throw new IllegalArgumentException("Null or empty names."); VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit)unit; List files = new ArrayList(); Set missingFiles = new HashSet(); for (String name : names) { // try finding altDD file VirtualFile file = getMetadataFile(vfsDeploymentUnit, matchFileToClass(unit, name), name, false); if (file == null) { List matched = vfsDeploymentUnit.getMetaDataFiles(name, suffix); if (matched != null && matched.isEmpty() == false) files.addAll(matched); else missingFiles.add(name); } else { files.add(file); } } if (missingFiles.size() == names.size()) return null; return mergeFiles(vfsDeploymentUnit, root, files, missingFiles); } /** * Merge files into one piece of metatdata * * @param unit the unit * @param root possibly null pre-existing root * @param files matching meta files * @param missingFiles file names that are missing matching file * @return merged metadata * @throws Exception for any error */ protected T mergeFiles(VFSDeploymentUnit unit, T root, List files, Set missingFiles) throws Exception { return null; } /** * Handle multiple files. * * @param unit the vfs deployment unit * @param root possibly null pre-existing root * @param files the matching files * @return null or merged single result * @throws Exception for any error */ protected T handleMultipleFiles(VFSDeploymentUnit unit, T root, List files) throws Exception { if (allowsMultipleFiles(files) == false) throw new IllegalArgumentException("Multiple matching files not allowed: " + files); for (VirtualFile file : files) { T result = parse(unit, file, root); if (result != null) { init(unit, result, file); unit.addAttachment(file.toURL().toString(), result, getOutput()); } } return null; } /** * Check if we allow multiple files. * * Make sure you have deployers down * the chain that will handle generated * multiple attachments if this method returns true. * * @param files the matching files * @return true if we allow, false otherwise */ protected boolean allowsMultipleFiles(List files) { return allowMultipleFiles; } /** * Parse a deployment * * @param unit the deployment unit * @param file the metadata file * @param root - possibly null pre-existing root * @return the metadata * @throws Exception for any error */ protected abstract T parse(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception; /** * Initialise the metadata * * @param unit the unit * @param metaData the metadata * @param file the metadata file * @throws Exception for any error */ protected void init(VFSDeploymentUnit unit, T metaData, VirtualFile file) throws Exception { } /** * Set allow multiple files. * * @param allowMultipleFiles the allow multiple files flag */ public void setAllowMultipleFiles(boolean allowMultipleFiles) { this.allowMultipleFiles = allowMultipleFiles; } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/ManifestMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000375510640504506033314 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; /** * Manifest meta data model. * * @author Ales Justin */ public interface ManifestMetaData { /** * Get the manifest attribute value. * * @param name the name * @return attribute value or null if attribute doesn't exist */ String getMainAttribute(String name); /** * Get attribute value from specific attrbiutes. * * @param attributesName attribute group name * @param name string key for accessing specific attribute * @return attribute value or null if attribute doesn't exist */ String getAttribute(String attributesName, String name); /** * Get attribute value from specific attrbiutes. * * @param entryName entry name * @param name string key for accessing specific attribute * @return attribute value or null if attribute doesn't exist */ String getEntry(String entryName, String name); } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/SecurityActions.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000565110640504506033311 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.UndeclaredThrowableException; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import org.jboss.virtual.VirtualFile; /** * @author Scott.Stark@jboss.org * @version $Revision: 60921 $ */ public class SecurityActions { /** * Actions for File access */ interface FileActions { FileActions PRIVILEGED = new FileActions() { public InputStream openStream(final VirtualFile f) throws IOException { try { return AccessController.doPrivileged(new PrivilegedExceptionAction() { public InputStream run() throws Exception { return f.openStream(); } }); } catch(PrivilegedActionException e) { Exception ex = e.getException(); if( ex instanceof IOException ) throw (IOException) ex; else if( ex instanceof RuntimeException ) throw (RuntimeException) ex; else throw new UndeclaredThrowableException(ex); } } }; FileActions NON_PRIVILEGED = new FileActions() { public InputStream openStream(VirtualFile f) throws IOException { return f.openStream(); } }; public InputStream openStream(VirtualFile f) throws IOException; } static InputStream openStream(VirtualFile f) throws IOException { SecurityManager sm = System.getSecurityManager(); if( sm != null ) return FileActions.PRIVILEGED.openStream(f); else return FileActions.NON_PRIVILEGED.openStream(f); } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/JBossExtensionDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000001032111037353520033276 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * JBossExtensionDeployer. * * @param the spec type * @param the jboss type * @param the expected type * @author Ales Justin */ public abstract class JBossExtensionDeployer extends MultipleSchemaResolverDeployer { private String specName; private Class specClass; private String jbossName; private Class jbossClass; public JBossExtensionDeployer(Class output, String specName, Class specClass, String jbossName, Class jbossClass) { this(output, specName, specClass, jbossName, jbossClass, null); } public JBossExtensionDeployer(Class output, String specName, Class specClass, String jbossName, Class jbossClass, Set> excluded) { super(output, toMap(specName, specClass, jbossName, jbossClass), excluded); if (specClass == null) throw new IllegalArgumentException("Null spec class"); if (jbossClass == null) throw new IllegalArgumentException("Null jboss class"); this.specName = specName; this.specClass = specClass; this.jbossName = jbossName; this.jbossClass = jbossClass; } protected static Map> toMap(String specName, Class specClass, String jbossName, Class jbossClass) { Map> map = new HashMap>(); map.put(specName, specClass); map.put(jbossName, jbossClass); return map; } protected T mergeMetaData(VFSDeploymentUnit unit, T root, Map, List> metadata, Set missingFiles) throws Exception { if (specClass.equals(jbossClass)) { List instances = metadata.get(specClass); if (instances == null || instances.isEmpty()) return mergeMetaData(unit, null, null); else if (instances.size() == 1) { if (missingFiles.contains(jbossName)) return mergeMetaData(unit, specClass.cast(instances.iterator().next()), null); else if (missingFiles.contains(specName)) return mergeMetaData(unit, null, jbossClass.cast(instances.iterator().next())); else throw new IllegalArgumentException("Should be either missing spec or jboss: " + missingFiles); } else return mergeMetaData(unit, specClass.cast(instances.get(0)), jbossClass.cast(instances.get(1))); } else return super.mergeMetaData(unit, root, metadata, missingFiles); } protected T mergeMetaData(VFSDeploymentUnit unit, Map, List> metadata) throws Exception { return mergeMetaData(unit, getInstance(metadata, specClass), getInstance(metadata, jbossClass)); } /** * Merge spec and extension. * * @param unit deployment unit * @param spec the spec metadata instance * @param jboss the jboss metadata instance * @return merged metadata * @throws Exception for any error */ protected abstract T mergeMetaData(VFSDeploymentUnit unit, U spec, V jboss) throws Exception; }././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/AbstractSimpleVFSRealDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000543010640504506033304 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * AbstractSimpleVFSRealDeployer. * * @param the input type * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractSimpleVFSRealDeployer extends AbstractSimpleRealDeployer { /** * Create a new AbstractSimpleVFSRealDeployer * * @param input the input type * @throws IllegalArgumentException for a null input */ public AbstractSimpleVFSRealDeployer(Class input) { super(input); } @Override public void deploy(DeploymentUnit unit, T deployment) throws DeploymentException { if (unit instanceof VFSDeploymentUnit == false) return; VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit) unit; deploy(vfsDeploymentUnit, deployment); } @Override public void undeploy(DeploymentUnit unit, T deployment) { if (unit instanceof VFSDeploymentUnit == false) return; VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit) unit; undeploy(vfsDeploymentUnit, deployment); } /** * Deploy a deployment * * @param unit the unit * @param deployment the attachment * @throws DeploymentException for any error */ public abstract void deploy(VFSDeploymentUnit unit, T deployment) throws DeploymentException; /** * Undeploy a deployment * * @param unit the unit * @param deployment the attachment */ public void undeploy(VFSDeploymentUnit unit, T deployment) { // Nothing } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/SchemaResolverDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000737611017505410033311 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; import org.jboss.xb.annotations.JBossXmlConstants; /** * SchemaResolverDeployer. * * @param the expected type * @author Ales Justin * @author Adrian Brock * @author Scott.Stark@jboss.org * @version $Revision 1.1 $ */ public class SchemaResolverDeployer extends JBossXBDeployer { /** Whether we register with jbossxb */ private boolean registerWithJBossXB; /** The namespace */ private String namespace; /** * Create a new SchemaResolverDeployer. * * @param output the output * @throws IllegalArgumentException for a null output */ public SchemaResolverDeployer(Class output) { super(output); } /** * Get the registerWithJBossXB. * * @return the registerWithJBossXB */ public boolean isRegisterWithJBossXB() { return registerWithJBossXB; } /** * Set the registerWithJBossXB. * * @param registerWithJBossXB the registerWithJBossXB */ public void setRegisterWithJBossXB(boolean registerWithJBossXB) { this.registerWithJBossXB = registerWithJBossXB; } /** * Get the namespace, if it was set. * * @return the namespace */ public String getNamespace() { return namespace; } /** * Check if we need to register schema to jbossxb. */ public void create() { if (isRegisterWithJBossXB()) { namespace = JBossXBDeployerHelper.findNamespace(getOutput()); if (namespace == null || JBossXmlConstants.DEFAULT.equals(namespace)) throw new IllegalArgumentException( "RegisterWithJBossXB is enabled, but cannot find namespace on class or package: " + getOutput() + ", perhaps missing @JBossXmlSchema or using default namespace attribute." ); JBossXBDeployerHelper.addClassBinding(namespace, getOutput()); } } /** * Remove registered schema */ public void destroy() { if (isRegisterWithJBossXB()) { // namespace should exist, since we got past create JBossXBDeployerHelper.removeClassBinding(namespace); } } protected T parse(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception { return parse(file); } /** * Parse the file. * * @param file the virtual file to parse * @return new metadata instance * @throws Exception for any error */ protected T parse(VirtualFile file) throws Exception { if (file == null) throw new IllegalArgumentException("Null file"); return getHelper().parse(file); } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/ObjectModelFactoryDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000461111017000211033263 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; import org.jboss.xb.binding.ObjectModelFactory; /** * ObjectModelFactoryDeployer extends the AbstractParsingDeployer to add an * abstract JBossXB ObjectModelFactory accessor that is used from within an * overriden parse(DeploymentUnit unit, VirtualFile file) to unmarshall the xml * document represented by file into an instance of deploymentType T. * * @param the expected type * @author Adrian Brock * @author Scott.Stark@jboss.org * @author Ales Justin * @version $Revision: 1.1 $ */ public abstract class ObjectModelFactoryDeployer extends JBossXBDeployer { /** * Create a new SchemaResolverDeployer. * * @param output the output * @throws IllegalArgumentException for a null output */ public ObjectModelFactoryDeployer(Class output) { super(output); } @Override protected T parse(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception { return getHelper().parse(file, root, getObjectModelFactory(root)); } /** * Get the object model factory * * @param root - possibly null pre-existing root * @return the object model factory */ protected abstract ObjectModelFactory getObjectModelFactory(T root); } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/JBossXBDeployerHelper.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000002114011037353520033277 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.io.IOException; import java.io.InputStream; import org.jboss.deployers.spi.DeploymentException; import org.jboss.logging.Logger; import org.jboss.virtual.VirtualFile; import org.jboss.xb.annotations.JBossXmlSchema; import org.jboss.xb.binding.ObjectModelFactory; import org.jboss.xb.binding.Unmarshaller; import org.jboss.xb.binding.UnmarshallerFactory; import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver; import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory; import org.xml.sax.InputSource; /** * JBossXB deployer helper. * * @param the expected type * @author Ales Justin */ public class JBossXBDeployerHelper implements org.jboss.deployers.vfs.spi.deployer.UnmarshallerFactory { /** The log */ private Logger log = Logger.getLogger(JBossXBDeployerHelper.class); /** Unmarshaller factory */ private static final UnmarshallerFactory factory = UnmarshallerFactory.newInstance(); /** The singleton schema resolver */ private static DefaultSchemaResolver resolver = (DefaultSchemaResolver)SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver(); /** The output */ private Class output; /** Whether the Unmarshaller will use schema validation */ private boolean useSchemaValidation = true; /** Whether to validate */ private boolean useValidation = true; /** * Create a new SchemaResolverDeployer. * * @param output the output * @throws IllegalArgumentException for a null output */ protected JBossXBDeployerHelper(Class output) { if (output == null) throw new IllegalArgumentException("Null output."); this.output = output; } public void setFeature(String featureName, Boolean flag) throws Exception { factory.setFeature(featureName, flag); } /** * Get the useSchemaValidation. * * @return the useSchemaValidation. */ public boolean isUseSchemaValidation() { return useSchemaValidation; } /** * Set the useSchemaValidation. * * @param useSchemaValidation the useSchemaValidation. */ public void setUseSchemaValidation(boolean useSchemaValidation) { this.useSchemaValidation = useSchemaValidation; } /** * Get the useValidation. * * @return the useValidation. */ public boolean isUseValidation() { return useValidation; } /** * Set the useValidation. * * @param useValidation the useValidation. */ public void setUseValidation(boolean useValidation) { this.useValidation = useValidation; } /** * Add class binding. * * @param namespace the namespace * @param metadata the metadata */ public static void addClassBinding(String namespace, Class metadata) { resolver.addClassBinding(namespace, metadata); } /** * Remove class binding. * * @param namespace the namespace */ public static void removeClassBinding(String namespace) { resolver.removeClassBinding(namespace); } /** * Find the namespace on class/package * * @param metadata the metadata class * @return jboss xml schema namespace */ public static String findNamespace(Class metadata) { JBossXmlSchema jBossXmlSchema = metadata.getAnnotation(JBossXmlSchema.class); if (jBossXmlSchema == null) { Package pckg = metadata.getPackage(); if (pckg != null) jBossXmlSchema = pckg.getAnnotation(JBossXmlSchema.class); } return jBossXmlSchema != null ? jBossXmlSchema.namespace() : null; } /** * Parse file to output metadata. * * @param file the file to parse * @return new metadata instance * @throws Exception for any error */ public T parse(VirtualFile file) throws Exception { return parse(output, file); } /** * Parse the file to create metadata instance. * * @param the expect type * @param expectedType the expected type * @param file the file * @return new metadata instance * @throws Exception for any error */ public U parse(Class expectedType, VirtualFile file) throws Exception { if (expectedType == null) throw new IllegalArgumentException("Null expected type"); if (file == null) throw new IllegalArgumentException("Null file"); log.debug("Parsing file: "+file+" for type: " + expectedType); Unmarshaller unmarshaller = factory.newUnmarshaller(); unmarshaller.setSchemaValidation(isUseSchemaValidation()); unmarshaller.setValidation(isUseValidation()); InputStream is = openStreamAndValidate(file); Object parsed; try { InputSource source = new InputSource(is); source.setSystemId(file.toURI().toString()); parsed = unmarshaller.unmarshal(source, resolver); } finally { try { is.close(); } catch (Exception ignored) { } } if (parsed == null) throw new DeploymentException("The xml " + file.getPathName() + " is not well formed!"); log.debug("Parsed file: "+file+" to: "+parsed); return expectedType.cast(parsed); } /** * Parse the file using object model factory. * * @param file the file to parse * @param root the previous root * @param omf the object model factory * @return new metadata instance * @throws Exception for any error */ public T parse(VirtualFile file, T root, ObjectModelFactory omf) throws Exception { return parse(output, file, root, omf); } /** * Parse the file using object model factory. * * @param the expect type * @param expectedType the expected type * @param file the file to parse * @param root the previous root * @param omf the object model factory * @return new metadata instance * @throws Exception for any error */ public U parse(Class expectedType, VirtualFile file, U root, ObjectModelFactory omf) throws Exception { if (file == null) throw new IllegalArgumentException("Null file"); log.debug("Parsing file: "+file+" for deploymentType: " + expectedType); Unmarshaller unmarshaller = factory.newUnmarshaller(); unmarshaller.setSchemaValidation(isUseSchemaValidation()); unmarshaller.setValidation(isUseValidation()); InputStream is = openStreamAndValidate(file); Object parsed; try { InputSource source = new InputSource(is); source.setSystemId(file.toURI().toString()); parsed = unmarshaller.unmarshal(source, omf, root); } finally { try { is.close(); } catch (Exception ignored) { } } if (parsed == null) throw new DeploymentException("The xml " + file.getPathName() + " is not well formed!"); log.debug("Parsed file: "+file+" to: "+parsed); return expectedType.cast(parsed); } /** * Open stream and validate if not null. * * @param file the virtual file * @return non-null input stream * @throws Exception for any error or if file's stream is null */ protected static InputStream openStreamAndValidate(VirtualFile file) throws Exception { if (file == null) throw new IllegalArgumentException("Null file"); InputStream inputStream = SecurityActions.openStream(file); if (inputStream == null) throw new IOException("Null file stream: " + file); return inputStream; } }././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/AbstractVFSRealDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000473110717372452033317 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * AbstractRealDeployer. * * @Deprecated if you've left it until the real deployer to look at the file system then you are lazy * @author Adrian Brock * @version $Revision: 1.1 $ */ @Deprecated public abstract class AbstractVFSRealDeployer extends AbstractRealDeployer { public void internalDeploy(DeploymentUnit unit) throws DeploymentException { if (unit instanceof VFSDeploymentUnit == false) return; VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit) unit; deploy(vfsDeploymentUnit); } public void internalUndeploy(DeploymentUnit unit) { if (unit instanceof VFSDeploymentUnit == false) return; VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit) unit; undeploy(vfsDeploymentUnit); } /** * Deploy a vfs deployment * * @param unit the unit * @throws DeploymentException for any error */ public abstract void deploy(VFSDeploymentUnit unit) throws DeploymentException; /** * Undeploy a vfs deployment * * @param unit the unit */ public void undeploy(VFSDeploymentUnit unit) { // Nothing } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/AbstractOptionalVFSRealDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000570610655622045033317 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractOptionalRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * An abstract more complicated VFS real deployer where the input * is optional instead of mandatory. * * @param the deployment type * @author Carlo de Wolf * @author adrian@jboss.org * @version $Revision: 64469 $ */ public abstract class AbstractOptionalVFSRealDeployer extends AbstractOptionalRealDeployer { /** * Create a new AbstractOptionalVFSRealDeployer. * * @param optionalInput the optional input * @throws IllegalArgumentException for null input */ public AbstractOptionalVFSRealDeployer(Class optionalInput) { super(optionalInput); } public void deploy(DeploymentUnit unit, T deployment) throws DeploymentException { if (unit instanceof VFSDeploymentUnit == false) return; VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit) unit; deploy(vfsDeploymentUnit, deployment); } /** * Deploy a deployment * * @param unit the unit * @param deployment the attachment * @throws DeploymentException for any error */ public abstract void deploy(VFSDeploymentUnit unit, T deployment) throws DeploymentException; @Override public void undeploy(DeploymentUnit unit, T deployment) { if (unit instanceof VFSDeploymentUnit == false) return; VFSDeploymentUnit vfsDeploymentUnit = (VFSDeploymentUnit) unit; undeploy(vfsDeploymentUnit, deployment); } /** * Undeploy a deployment * * @param unit the unit * @param deployment the attachment */ public void undeploy(VFSDeploymentUnit unit, T deployment) { // Nothing } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/JAXPDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000001415711024202462033303 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.util.xml.JBossEntityResolver; import org.jboss.virtual.VirtualFile; import org.w3c.dom.Document; import org.xml.sax.InputSource; /** * JAXPDeployer is an abstract deployer that overrides parse to run a jaxp * parse of the VirtualFile passed to parse. * * @see #parse(VFSDeploymentUnit, VirtualFile, Object) * @see #doParse(VFSDeploymentUnit, VirtualFile) * * @param the expected type * @author Adrian Brock * @author Scott.Stark@jboss.org * @author Ales Justin * @version $Revision: 60707 $ */ public abstract class JAXPDeployer extends UnmarshallerFactoryDeployer { /** Use a namespace aware parser */ private boolean useNamespaceAwareParser = true; /** A flag indicating if deployment descriptors should be validated */ private boolean validateDTDs; /** The document builder factory */ private DocumentBuilderFactory documentBuilderFactory; /** * Create a new JAXPDeployer. * * @param output the output * @throws IllegalArgumentException for a null output */ public JAXPDeployer(Class output) { super(output); } /** * Get the useNamespaceAwareParser. * * @return the useNamespaceAwareParser. */ public boolean isUseNamespaceAwareParser() { return useNamespaceAwareParser; } /** * Set the useNamespaceAwareParser. * * @param useNamespaceAwareParser the useNamespaceAwareParser. */ public void setUseNamespaceAwareParser(boolean useNamespaceAwareParser) { this.useNamespaceAwareParser = useNamespaceAwareParser; } /** * Get the validateDTDs. * * @return the validateDTDs. */ public boolean isValidateDTDs() { return validateDTDs; } /** * Set the validateDTDs. * * @param validateDTDs the validateDTDs. */ public void setValidateDTDs(boolean validateDTDs) { this.validateDTDs = validateDTDs; } /** * Get the documentBuilderFactory. * * @return the documentBuilderFactory. * @throws IllegalStateException if the create method has not been invoked */ protected DocumentBuilderFactory getDocumentBuilderFactory() { if (documentBuilderFactory == null) throw new IllegalStateException("Document builder factory has not been constructed"); return documentBuilderFactory; } /** * Create lifecycle * * @throws Exception for any problem */ public void create() throws Exception { documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setNamespaceAware(useNamespaceAwareParser); documentBuilderFactory.setValidating(validateDTDs); } /** * Destroy lifecycle */ public void destroy() { documentBuilderFactory = null; } protected UnmarshallerFactory createUnmarshallerFactory() { return new UnmarshallerFactory() { public void setFeature(String featureName, Boolean flag) throws Exception { getDocumentBuilderFactory().setFeature(featureName, flag); } }; } protected Boolean fromString(String value) { return Boolean.valueOf(value); } @Override protected T parse(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception { // First look for an existing Document attachment Document document = unit.getAttachment(Document.class); if( document == null ) { // Next parse the metadata file document = doParse(unit, file); } // Transform the document into a T instance return parse(unit, file, document); } /** * Do the parsing * * @param unit the deployment unit * @param file the metadata file * @return the document * @throws Exception for any error */ protected Document doParse(VFSDeploymentUnit unit, VirtualFile file) throws Exception { if (file == null) throw new IllegalArgumentException("Null file"); log.debug("Parsing: " + file.getName()); DocumentBuilder parser = getDocumentBuilderFactory().newDocumentBuilder(); InputStream is = openStreamAndValidate(file); try { InputSource source = new InputSource(is); source.setSystemId(file.toURI().toString()); parser.setEntityResolver(new JBossEntityResolver()); return parser.parse(source); } finally { try { is.close(); } catch (Exception ignored) { } } } /** * Parse a deployment * * @param unit the deployment unit * @param file the metadata file * @param document the document * @return the metadata * @throws Exception for any error */ protected abstract T parse(VFSDeploymentUnit unit, VirtualFile file, Document document) throws Exception; } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/MultipleJBossXBDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000645011024202462033300 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.util.Map; /** * MultipleJBossXBDeployer. * * @param the expected type * @author Ales Justin */ public abstract class MultipleJBossXBDeployer extends MultipleVFSParsingDeployer { /** The helper */ private JBossXBDeployerHelper helper; /** The features */ private Map features; public MultipleJBossXBDeployer(Class output, Map> mappings) { this(output, mappings, null, null); } public MultipleJBossXBDeployer(Class output, Map> mappings, String suffix, Class suffixClass) { super(output, mappings, suffix, suffixClass); this.helper = new JBossXBDeployerHelper(output); } /** * Get the helper. * * @return the helper */ protected JBossXBDeployerHelper getHelper() { return helper; } public void start() throws Exception { if (features != null && features.isEmpty() == false) { for(Map.Entry entry : features.entrySet()) helper.setFeature(entry.getKey(), entry.getValue()); } } /** * Get the useSchemaValidation. * * @return the useSchemaValidation. */ public boolean isUseSchemaValidation() { return helper.isUseSchemaValidation(); } /** * Set the useSchemaValidation. * * @param useSchemaValidation the useSchemaValidation. */ public void setUseSchemaValidation(boolean useSchemaValidation) { helper.setUseSchemaValidation(useSchemaValidation); } /** * Get the useValidation. * * @return the useValidation. */ public boolean isUseValidation() { return helper.isUseValidation(); } /** * Set the useValidation. * * @param useValidation the useValidation. */ public void setUseValidation(boolean useValidation) { helper.setUseValidation(useValidation); } /** * Get unmarshaller features. * * @return the features */ public Map getFeatures() { return features; } /** * Set the unmarshaller features. * * @param features the features */ public void setFeatures(Map features) { this.features = features; } }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/UnmarshallerFactoryDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000670611037353520033312 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.util.HashMap; import java.util.Map; /** * Unmarshaller factory deployer. * Able to apply features to unmarshaller factory. * * @param the output type * @param exact unmarshaller factory's flag type * @author Ales Justin */ public abstract class UnmarshallerFactoryDeployer extends AbstractVFSParsingDeployer { /** The fixup base uris */ static String FIXUP_BASE_URIS = "http://apache.org/xml/features/xinclude/fixup-base-uris"; /** The fixup base lang */ static String FIXUP_LANGUAGE = "http://apache.org/xml/features/xinclude/fixup-language"; /** Use default features */ private boolean useDefaultFeatures = true; /** Features map */ private Map features; protected UnmarshallerFactoryDeployer(Class output) { super(output); } /** * Create unmarshaller factory wrapper. * @return the unmarshaller factory */ protected abstract UnmarshallerFactory createUnmarshallerFactory(); public void start() throws Exception { Map features = getFeatures(); if (isUseDefaultFeatures()) { if (features == null) features = new HashMap(); if (features.containsKey(FIXUP_BASE_URIS) == false) features.put(FIXUP_BASE_URIS, fromString("false")); if (features.containsKey(FIXUP_LANGUAGE) == false) features.put(FIXUP_LANGUAGE, fromString("false")); } if (features != null && features.isEmpty() == false) { UnmarshallerFactory unmarshallerFactory = createUnmarshallerFactory(); if (unmarshallerFactory == null) throw new IllegalArgumentException("Unmarshaller factory cannot be null."); for(Map.Entry entry : features.entrySet()) unmarshallerFactory.setFeature(entry.getKey(), entry.getValue()); } } /** * Transform string to flag value. * * @param value the value * @return value as T type */ protected abstract U fromString(String value); public boolean isUseDefaultFeatures() { return useDefaultFeatures; } public void setUseDefaultFeatures(boolean useDefaultFeatures) { this.useDefaultFeatures = useDefaultFeatures; } public Map getFeatures() { return features; } public void setFeatures(Map features) { this.features = features; } }././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/MultipleSchemaResolverDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000715211016775645033323 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.jboss.xb.annotations.JBossXmlConstants; import org.jboss.virtual.VirtualFile; /** * MultipleSchemaResolverDeployer. * * @param the expected type * @author Ales Justin */ public abstract class MultipleSchemaResolverDeployer extends MultipleJBossXBDeployer { private Set> excluded; private Set namespaces; public MultipleSchemaResolverDeployer(Class output, Map> mappings) { this(output, mappings, null); } public MultipleSchemaResolverDeployer(Class output, Map> mappings, Set> excluded) { this(output, mappings, null, null, excluded); } public MultipleSchemaResolverDeployer(Class output, Map> mappings, String suffix, Class suffixClass, Set> excluded) { super(output, mappings, suffix, suffixClass); if (excluded == null) excluded = Collections.emptySet(); this.excluded = excluded; this.namespaces = new HashSet(); } /** * Check if we need to register schema to jbossxb. */ public void create() { for (Class metadata : getMappings().values()) { registerMetaDataClass(metadata); } if (getSuffixClass() != null) registerMetaDataClass(getSuffixClass()); } /** * Register metadata class as class binding, * if not excluded. * * @param metadata the metadata class */ protected void registerMetaDataClass(Class metadata) { if (excluded.contains(metadata) == false) { String namespace = JBossXBDeployerHelper.findNamespace(metadata); if (namespace == null || JBossXmlConstants.DEFAULT.equals(namespace)) throw new IllegalArgumentException( "Registering schema with JBossXB is enabled, but cannot find namespace on class or package: " + metadata + ", perhaps missing @JBossXmlSchema or using default namespace attribute." ); JBossXBDeployerHelper.addClassBinding(namespace, metadata); namespaces.add(namespace); } } /** * Remove registered schema */ public void destroy() { for (String namespace : namespaces) JBossXBDeployerHelper.removeClassBinding(namespace); namespaces.clear(); } protected U parse(Class expectedType, VirtualFile file, Object root) throws Exception { return getHelper().parse(expectedType, file); } }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/MultipleVFSParsingDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000001664411037353520033314 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.virtual.VirtualFile; /** * Multiple VFS parsing deployer. * * @param the expected type * @author Ales Justin */ public abstract class MultipleVFSParsingDeployer extends AbstractVFSParsingDeployer { private Map> mappings; private Class suffixClass; public MultipleVFSParsingDeployer(Class output, Map> mappings) { this(output, mappings, null, null); } public MultipleVFSParsingDeployer(Class output, Map> mappings, String suffix, Class suffixClass) { super(output); if (mappings == null || mappings.isEmpty()) throw new IllegalArgumentException("Illegal mappings"); if (suffix != null && suffixClass == null) throw new IllegalArgumentException("Null suffix class"); this.mappings = mappings; setNames(mappings.keySet()); setSuffix(suffix); this.suffixClass = suffixClass; } /** * Match file to mapping metadata class. * * @param unit the deployment unit * @param file the file * @return matching metadata class */ protected Class matchFileToClass(DeploymentUnit unit, VirtualFile file) { if (file == null) throw new IllegalArgumentException("Null file"); return matchFileToClass(unit, file.getName(), true); } protected Class matchFileToClass(DeploymentUnit unit, String fileName) { return matchFileToClass(unit, fileName, false); } /** * Match file name mappings. * * @param unit the deployment unit * @param fileName the file name * @param throwException should we throw an exception if no match found * @return match or null or IllegalArgumentException */ protected Class matchFileToClass(DeploymentUnit unit, String fileName, boolean throwException) { if (fileName == null) throw new IllegalArgumentException("Null file name"); Map> altMappingsMap = getAltMappings(unit); if (altMappingsMap != null) { Class result = altMappingsMap.get(fileName); if (result != null) return result; } Class result = mappings.get(fileName); if (result == null) { if (getSuffix() != null && fileName.endsWith(getSuffix())) result = suffixClass; } if (result == null && throwException) throw new IllegalArgumentException( "Should not be here, file name '" + fileName + "' must macth some mapping " + mappings + " or suffix " + getSuffix() ); return result; } @SuppressWarnings("unchecked") protected T parse(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception { Class expectedType = matchFileToClass(unit, file); if (getOutput().isAssignableFrom(expectedType) == false) throw new IllegalArgumentException("Matched " + expectedType + " which is not assignable to output " + getOutput()); if (root != null && expectedType.isInstance(root) == false) throw new IllegalArgumentException("Illegal root type: " + root + ", expecting " + expectedType); return (T)parse(expectedType, file, root); } /** * Parse file to produce expected class metadata. * * Root doesn't have U signature, since it conflicts * with its usage in the parse(VFSDeployment unit, VirtualFile file, T root) method. * * @param the expect type * @param expectedType the expected class * @param file the file to parse * @param root the previous root * @return new metadata instance * @throws Exception for any error */ protected abstract U parse(Class expectedType, VirtualFile file, Object root) throws Exception; protected T mergeFiles(VFSDeploymentUnit unit, T root, List files, Set missingFiles) throws Exception { Map , List> metadata = new HashMap, List>(); for (VirtualFile file : files) { Class clazz = matchFileToClass(unit, file); List instances = metadata.get(clazz); if (instances == null) { instances = new ArrayList(); metadata.put(clazz, instances); } Object instance = parse(clazz, file, root); instances.add(instance); } return mergeMetaData(unit, root, metadata, missingFiles); } /** * Merge metadatas into single piece of metatdata * * @param unit the unit * @param root possibly null pre-existing root * @param metadata the metadatas * @param missingFiles file names that are missing matching file * @return merged metadata * @throws Exception for any error */ protected T mergeMetaData(VFSDeploymentUnit unit, T root, Map, List> metadata, Set missingFiles) throws Exception { return mergeMetaData(unit, metadata); } /** * Merge metadatas into single piece of metatdata * * @param unit the unit * @param metadata the metadatas * @return merged metadata * @throws Exception for any error */ protected abstract T mergeMetaData(VFSDeploymentUnit unit, Map, List> metadata) throws Exception; /** * Get single metadata instance from metadata. * * @param the metadata type * @param metadata the metadatas map * @param clazz metadata class * @return matching metadata instance */ protected S getInstance(Map, List> metadata, Class clazz) { List instances = metadata.get(clazz); if (instances == null || instances.isEmpty()) return null; else if (instances.size() > 1) throw new IllegalArgumentException("Expecting single instance: " + metadata); return clazz.cast(instances.iterator().next()); } /** * Get mappings. * * @return the mappings */ public Map> getMappings() { return mappings; } /** * Get suffix class. * * @return the suffix mathing class */ public Class getSuffixClass() { return suffixClass; } }././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/ManifestDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000432210714561635033313 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.util.jar.Manifest; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VFSUtils; import org.jboss.virtual.VirtualFile; /** * Parse manifest.mf file. * Prepare metadata from manifest's attributes. * * @param the expected manifest type * @author Ales Justin */ public abstract class ManifestDeployer extends AbstractVFSParsingDeployer { /** * Create a new ManifestDeployer * * @param output the output * @throws IllegalArgumentException for a null output */ protected ManifestDeployer(Class output) { super(output); setName("MANIFEST.MF"); } /** * Create MetaData * * @param manifest the manifest * @return the metadata * @throws Exception for any error */ protected abstract T createMetaData(Manifest manifest) throws Exception; @Override protected T parse(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception { Manifest manifest = VFSUtils.readManifest(file); return createMetaData(manifest); } } ././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/MultipleObjectModelFactoryDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000610711037353520033305 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.util.Map; import org.jboss.virtual.VirtualFile; import org.jboss.xb.binding.ObjectModelFactory; /** * MultipleObjectModelFactoryDeployer. * * @param the expected type * @author Ales Justin */ public abstract class MultipleObjectModelFactoryDeployer extends MultipleJBossXBDeployer { public MultipleObjectModelFactoryDeployer(Class output, Map> mappings) { super(output, mappings); } public MultipleObjectModelFactoryDeployer(Class output, Map> mappings, String suffix, Class suffixClass) { super(output, mappings, suffix, suffixClass); } protected U parse(Class expectedType, VirtualFile file, Object root) throws Exception { U tRoot; if (root != null && expectedType.isInstance(root)) tRoot = expectedType.cast(root); else tRoot = null; ObjectModelFactory objectModelFactory = getObjectModelFactory(expectedType, file, tRoot); if (objectModelFactory == null) log.warn("ObjectModelFactory factory is null, expectedType=" + expectedType + ", file=" + file); return getHelper().parse(expectedType, file, tRoot, objectModelFactory); } /** * Get the object model factory * * @param the expect type * @param expectedType the expected class * @param file - the file we're about to parse * @param root - possibly null pre-existing root * @return the object model factory */ protected ObjectModelFactory getObjectModelFactory(Class expectedType, VirtualFile file, U root) { return getObjectModelFactory(expectedType, file.getName(), root); } /** * Get the object model factory * * @param the expect type * @param expectedType the expected class * @param fileName - the fileName * @param root - possibly null pre-existing root * @return the object model factory */ protected abstract ObjectModelFactory getObjectModelFactory(Class expectedType, String fileName, U root); }././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/XSLDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000001105311023733714033303 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.io.InputStream; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamSource; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.util.xml.DOMWriter; import org.jboss.util.xml.JBossErrorHandler; import org.jboss.virtual.VirtualFile; import org.w3c.dom.Document; /** * SchemaResolverDeployer. * * @param the expected type * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class XSLDeployer extends JAXPDeployer { /** The xsl resource path */ protected String xslPath; /** The templates */ private Templates templates; /** * Create a new XSLDeployer. * * @param deploymentType the deployment type * @throws IllegalArgumentException for a null deployment type */ public XSLDeployer(Class deploymentType) { super(deploymentType); } /** * Get the xslPath. * * @return the xslPath. */ public String getXSLPath() { return xslPath; } /** * Set the xslPath. * * @param xslPath the xslPath. */ public void setXSLPath(String xslPath) { this.xslPath = xslPath; } /** * Get the templates. * * @return the templates. * @throws IllegalStateException if the create method has not been invoked */ public Templates getTemplates() { if (templates == null) throw new IllegalStateException("Templates have not been constructed"); return templates; } /** * Create lifecycle * * @throws Exception for any problem */ public void create() throws Exception { super.create(); TransformerFactory tf = TransformerFactory.newInstance(); InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xslPath); try { StreamSource ss = new StreamSource(is); ss.setSystemId(xslPath); templates = tf.newTemplates(ss); log.debug("Created templates: " + templates); } finally { try { is.close(); } catch (Exception ignored) { } } } /** * Destroy lifecycle */ public void destroy() { super.destroy(); templates = null; } @Override protected T parse(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception { if (file == null) throw new IllegalArgumentException("Null file"); Document document = doParse(unit, file); Transformer trans = getTemplates().newTransformer(); trans.setErrorListener(new JBossErrorHandler(file.getPathName(), null)); Source s = new DOMSource(document); s.setSystemId(file.toURI().toString()); DOMResult r = new DOMResult(); setParameters(trans); trans.transform(s, r); document = (Document) r.getNode(); String docStr = DOMWriter.printNode(document, true); log.debug("Transformed " + file.getPathName() + " into " + docStr); return parse(unit, file, document); } /** * Set parameters for the transformation * * @param trans the transformer * @throws Exception for any problem */ protected void setParameters(Transformer trans) throws Exception { // nothing by default } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/JAXBDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000624410765457144033325 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; import java.io.InputStream; import java.util.Map; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; import org.xml.sax.InputSource; /** * JAXBDeployer. * * @param the expected type * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class JAXBDeployer extends AbstractVFSParsingDeployer { /** The JAXBContext */ private JAXBContext context; /** The properties */ private Map properties; /** * Create a new JAXBDeployer. * * @param output the output * @throws IllegalArgumentException for a null output */ public JAXBDeployer(Class output) { super(output); } /** * Get the properties. * * @return the properties. */ public Map getProperties() { return properties; } /** * Set the properties. * * @param properties the properties. */ public void setProperties(Map properties) { this.properties = properties; } /** * Create lifecycle * * @throws Exception for any problem */ public void create() throws Exception { if (properties != null) context = JAXBContext.newInstance(new Class[] { getOutput() }, properties); else context = JAXBContext.newInstance(getOutput()); } /** * Destroy lifecycle */ public void destroy() { context = null; } @Override protected T parse(VFSDeploymentUnit unit, VirtualFile file, T root) throws Exception { Unmarshaller unmarshaller = context.createUnmarshaller(); InputStream is = openStreamAndValidate(file); try { InputSource source = new InputSource(is); source.setSystemId(file.toURI().toString()); Object o = unmarshaller.unmarshal(source); return getOutput().cast(o); } finally { try { is.close(); } catch (Exception ignored) { } } } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/helpers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000755000175000017500000000000011620060464033277 5ustar twernertwerner././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/helpers/AbstractManifestMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000766210640522155033315 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer.helpers; import java.io.Externalizable; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.OutputStream; import java.util.Map; import java.util.jar.Attributes; import java.util.jar.Manifest; import org.jboss.deployers.vfs.spi.deployer.ManifestMetaData; /** * Abstract manifest meta data. * * @author Ales Justin */ public class AbstractManifestMetaData implements ManifestMetaData, Externalizable { private static final long serialVersionUID = 1L; protected transient Manifest manifest; public AbstractManifestMetaData() { } public AbstractManifestMetaData(Manifest manifest) { if (manifest == null) throw new IllegalArgumentException("Null manifest!"); this.manifest = manifest; } protected Manifest getManifest() { if (manifest == null) throw new IllegalArgumentException("Null manifest!"); return manifest; } protected String get(Attributes attributes, String name) { return attributes != null ? attributes.getValue(name) : null; } public String getMainAttribute(String name) { return get(getManifest().getMainAttributes(), name); } public String getAttribute(String attributesName, String name) { return get(getManifest().getAttributes(attributesName), name); } public String getEntry(String entryName, String name) { Map entries = getManifest().getEntries(); if (entries != null) { return get(entries.get(entryName), name); } return null; } public void writeExternal(ObjectOutput out) throws IOException { OutputStream os = new OutputWrapper(out); getManifest().write(os); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { InputStream is = new InputWrapper(in); manifest = new Manifest(is); } private class OutputWrapper extends OutputStream { private ObjectOutput out; public OutputWrapper(ObjectOutput out) { this.out = out; } public void write(int b) throws IOException { out.write(b); } public void flush() throws IOException { out.flush(); } public void close() throws IOException { out.close(); } } private class InputWrapper extends InputStream { private ObjectInput in; public InputWrapper(ObjectInput in) { this.in = in; } public int read() throws IOException { return in.read(); } public long skip(long n) throws IOException { return in.skip(n); } public int available() throws IOException { return in.available(); } public void close() throws IOException { in.close(); } } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/JBossXBDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/de0000644000175000017500000000532411024202462033277 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.deployer; /** * JBoss XB deployer. * * @param the expected type * @author Ales Justin */ public abstract class JBossXBDeployer extends UnmarshallerFactoryDeployer { /** The helper */ private JBossXBDeployerHelper helper; /** * Create a new SchemaResolverDeployer. * * @param output the output * @throws IllegalArgumentException for a null output */ public JBossXBDeployer(Class output) { super(output); this.helper = new JBossXBDeployerHelper(output); } /** * Get the helper. * * @return the helper */ protected JBossXBDeployerHelper getHelper() { return helper; } protected UnmarshallerFactory createUnmarshallerFactory() { return getHelper(); } protected Boolean fromString(String value) { return Boolean.valueOf(value); } /** * Get the useSchemaValidation. * * @return the useSchemaValidation. */ public boolean isUseSchemaValidation() { return helper.isUseSchemaValidation(); } /** * Set the useSchemaValidation. * * @param useSchemaValidation the useSchemaValidation. */ public void setUseSchemaValidation(boolean useSchemaValidation) { helper.setUseSchemaValidation(useSchemaValidation); } /** * Get the useValidation. * * @return the useValidation. */ public boolean isUseValidation() { return helper.isUseValidation(); } /** * Set the useValidation. * * @param useValidation the useValidation. */ public void setUseValidation(boolean useValidation) { helper.setUseValidation(useValidation); } }././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000755000175000017500000000000011620060463033334 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/VFSStructuralDeployers.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000323711061532302033336 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure; import org.jboss.deployers.spi.DeploymentException; import org.jboss.virtual.VirtualFile; /** * VFSStructuralDeployers. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface VFSStructuralDeployers { /** * Determine the structure of a virtual file * * @param file the virtual file * @param parentContext the parent context * @return true when recognised, false otherwise * @throws DeploymentException for any error */ boolean determineStructure(VirtualFile file, StructureContext parentContext) throws DeploymentException; } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/VFSDeploymentUnit.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000001121511137607542033346 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure; import java.util.List; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.virtual.VirtualFile; /** * VFSDeploymentUnit. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public interface VFSDeploymentUnit extends DeploymentUnit { /** * Gets a metadata file. This is a file located under the deployment metadata * context(s). * * @param name the name to exactly match * @return the virtual file or null if not found * @throws IllegalArgumentException for a null name */ VirtualFile getMetaDataFile(String name); /** * Gets the metadata files for this deployment unit * * @param name the name to exactly match * @param suffix the suffix to partially match * @return the virtual files that match * @throws IllegalArgumentException if both the name and suffix are null */ List getMetaDataFiles(String name, String suffix); /** * Prepend metadata file locations. * * @param locations the locations */ void prependMetaDataLocation(VirtualFile... locations); /** * Append metadata file locations. * * @param locations the locations */ void appendMetaDataLocation(VirtualFile... locations); /** * Remove metadata file locations. * * @param locations the locations */ void removeMetaDataLocation(VirtualFile... locations); /** * Get a resource loader * * @return the resource loader */ VFSDeploymentResourceLoader getResourceLoader(); /** * Get a virtual file * * @param path the relative path of the file * @return the virtual file or null if not found */ VirtualFile getFile(String path); /** * Get the root * * @return the root */ VirtualFile getRoot(); /** * Get the class path * * @return the class path */ List getClassPath(); /** * Set the classpath * * @param classPath the classpath * @deprecated user view should not have setters */ @Deprecated void setClassPath(List classPath); /** * Prepend virtual files to the classpath * * @param files a virtual file */ void prependClassPath(VirtualFile... files); /** * Prepend virtual files to the classpath * * @param files a virtual file */ void prependClassPath(List files); /** * Append virtual files to the classpath * * @param files a virtual file */ void appendClassPath(VirtualFile... files); /** * Add virtual files to the classpath * * @param files a virtual file */ void appendClassPath(List files); /** * Append virtual files to the classpath * * @param files a virtual file */ void addClassPath(VirtualFile... files); /** * Add virtual files to the classpath * * @param files a virtual file */ void addClassPath(List files); /** * Remove classpath files. * * @param files the files */ void removeClassPath(VirtualFile... files); /** * Get the top leve deployment unit * * @return the top level deployment unit */ VFSDeploymentUnit getTopLevel(); /** * Get the parent deployment unit * * @return the parent or null if there is no parent */ VFSDeploymentUnit getParent(); /** * Get the children * * @return the children */ List getVFSChildren(); } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/VFSDeploymentContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000001072011137607542033346 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure; import java.util.List; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.virtual.VirtualFile; /** * VFSDeploymentContext. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public interface VFSDeploymentContext extends DeploymentContext { /** * Get the root file * * @return the root */ VirtualFile getRoot(); /** * Set the meta data path relative to the root * * @param paths the path */ void setMetaDataPath(List paths); /** * Get the meta data locations * * @return the meta data locations */ List getMetaDataLocations(); /** * Set the meta data locations * * @param locations the meta data location */ void setMetaDataLocations(List locations); /** * Gets a metadata file * * @param name the name to exactly match * @return the virtual file or null if not found * @throws IllegalArgumentException for a null name */ VirtualFile getMetaDataFile(String name); /** * Gets metadata files for this deployment * * @param name the name to exactly match * @param suffix the suffix to partially match * @return the virtual files that match * @throws IllegalArgumentException if both the name and suffix are null */ List getMetaDataFiles(String name, String suffix); /** * Prepend metadata file locations. * * @param locations the locations */ void prependMetaDataLocation(VirtualFile... locations); /** * Append metadata file locations. * * @param locations the locations */ void appendMetaDataLocation(VirtualFile... locations); /** * Remove metadata file locations. * * @param locations the locations */ void removeMetaDataLocation(VirtualFile... locations); /** * Gets a file from this deployment * * @param name the name to exactly match * @return the file or null if not found * @throws IllegalArgumentException if both the name */ VirtualFile getFile(String name); /** * Get the class path * * @return the class path */ List getClassPath(); /** * Set the class path * * @param paths the paths */ void setClassPath(List paths); /** * Prepend virtual files to the classpath * * @param files a virtual file */ void prependClassPath(VirtualFile... files); /** * Prepend virtual files to the classpath * * @param files a virtual file */ void prependClassPath(List files); /** * Append virtual files to the classpath * * @param files a virtual file */ void appendClassPath(VirtualFile... files); /** * Add virtual files to the classpath * * @param files a virtual file */ void appendClassPath(List files); /** * Remove classpath files. * * @param files the files */ void removeClassPath(VirtualFile... files); /** * Get the top level deployment context * * @return the top level deployment context */ VFSDeploymentContext getTopLevel(); /** * Get a resource loader * * @return the resource loader */ VFSDeploymentResourceLoader getResourceLoader(); } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/StructureContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000002030211137607542033343 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.virtual.VirtualFile; /** * StructureContext. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class StructureContext { /** The root of the deployment */ private VirtualFile root; /** The parent virtual file */ private VirtualFile parent; /** The current candidate file */ private VirtualFile file; /** The structure metadata */ private StructureMetaData metaData; /** The structural deployers */ private VFSStructuralDeployers deployers; /** The parent structure context */ private StructureContext parentContext; /** The candidate annotation scanning */ private boolean candidateAnnotationScanning; /** The callbacks */ private Set callbacks; /** * Helper method to check parent is not null before retrieving parameters * * @param parentContext the parent context * @return the root * @throws IllegalArgumentException for a null parent */ private static VirtualFile getRoot(StructureContext parentContext) { if (parentContext == null) throw new IllegalArgumentException("Null parentContext"); return parentContext.getRoot(); } /** * Create a new structure context from a root * * @param root the root file * @param parent the parent file * @param file the current file * @param metaData the structure metadata to build * @param deployers the available structure deployers * @param parentContext the parentContext * @throws IllegalArgumentException for a null parameter (parents can be null) */ public StructureContext(VirtualFile root, VirtualFile parent, VirtualFile file, StructureMetaData metaData, VFSStructuralDeployers deployers, StructureContext parentContext) { if (root == null) throw new IllegalArgumentException("Null root"); if (file == null) throw new IllegalArgumentException("Null file"); if (metaData == null) throw new IllegalArgumentException("Null structure metadata"); if (deployers == null) throw new IllegalArgumentException("Null structural deployers"); this.root = root; this.parent = parent; this.file = file; this.metaData = metaData; this.deployers = deployers; this.parentContext = parentContext; } /** * Create a new structure context from a root * * @param root the root file * @param metaData the structure metadata to build * @param deployers the available structure deployers * @throws IllegalArgumentException for a null parameter */ public StructureContext(VirtualFile root, StructureMetaData metaData, VFSStructuralDeployers deployers) { this(root, null, root, metaData, deployers, null); } /** * Create a new child structure context * * @param file the candidate file * @param metaData the structure metadata to build * @param parentContext the parentContext * @throws IllegalArgumentException for a null parameter */ public StructureContext(VirtualFile file, StructureMetaData metaData, StructureContext parentContext) { this(getRoot(parentContext), parentContext.getFile(), file, metaData, parentContext.getDeployers(), parentContext); } /** * Get the file name * * @return the file name */ public String getName() { return file.getName(); } /** * Get the root. * * @return the root. */ public VirtualFile getRoot() { return root; } /** * Get the parent. * * @return the parent. */ public VirtualFile getParent() { return parent; } /** * Whether this is top level. * * @return true for top level. */ public boolean isTopLevel() { return parent == null; } /** * Get the file. * * @return the file. */ public VirtualFile getFile() { return file; } /** * Get the metaData. * * @return the metaData. */ public StructureMetaData getMetaData() { return metaData; } /** * Get the deployers. * * @return the deployers. */ public VFSStructuralDeployers getDeployers() { return deployers; } /** * Get the parentContext. * * @return the parentContext. */ public StructureContext getParentContext() { return parentContext; } /** * Get the candidate annotation scanning. * * @return the candidate annotation scanning */ public boolean isCandidateAnnotationScanning() { return candidateAnnotationScanning; } /** * Set the candidate annotation scanning. * * @param candidateAnnotationScanning the candidate annotation scanning */ public void setCandidateAnnotationScanning(boolean candidateAnnotationScanning) { this.candidateAnnotationScanning = candidateAnnotationScanning; } /*** * Get the matching callbacks. * * @param exact callback type * @param callbackType the exact callback type * @return the callbacks */ public Set getCallbacks(Class callbackType) { if (callbackType == null) throw new IllegalArgumentException("Null callback type"); if (callbacks == null || callbacks.isEmpty()) return Collections.emptySet(); Set set = new HashSet(); for (Object callback : callbacks) { if (callbackType.isInstance(callback)) set.add(callbackType.cast(callback)); } return set; } /** * Add the callback. * * @param callback the callback */ public void addCallback(Object callback) { if (callbacks == null) callbacks = new HashSet(); callbacks.add(callback); } /** * Set the callbacks. * * @param callbacks the callbacks */ public void setCallbacks(Set callbacks) { this.callbacks = callbacks; } /** * Determine the child structure * * @param child the child * @return true when recognised * @throws DeploymentException for any error */ public boolean determineChildStructure(VirtualFile child) throws DeploymentException { if (child == null) throw new IllegalArgumentException("Null child"); return getDeployers().determineStructure(child, this); } /** * Add a child context * * @param child the child */ public void addChild(ContextInfo child) { if (child == null) throw new IllegalArgumentException("Null child"); getMetaData().addContext(child); } /** * Remove a child context * * @param child the child */ public void removeChild(ContextInfo child) { if (child == null) throw new IllegalArgumentException("Null child"); getMetaData().removeContext(child); } }././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/CandidateAnnotationsCallback.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000326711046531125033346 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure; import java.lang.annotation.Annotation; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.virtual.VirtualFile; /** * CandidateAnnotationsCallback. * * @author Ales Justin */ public interface CandidateAnnotationsCallback { /** * Execute callback. * * @param root the resources root * @param currentContext the current context * @param env the annotation environment * @param annotationClass the current annotation class */ void executeCallback(VirtualFile root, StructureContext currentContext, AnnotationEnvironment env, Class annotationClass); }././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/VFSDeploymentUnitFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000256611113261537033351 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure; /** * VFSDeploymentUnitFilter.

* * @author Ales Justin */ public interface VFSDeploymentUnitFilter { /** * Match the deployment unit * * @param unit the vfs deployment unit * @return true when it matches */ boolean accepts(VFSDeploymentUnit unit); }././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/StructureDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000360211046531125033337 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.Ordered; /** * A StructureDeployer translates a deployment virtual file root into * StructureMetaData representing the deployment contexts. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface StructureDeployer extends Ordered { /** * Determine the structure of a deployment * * @param context the structure context * @return true when it recognised the context * @throws DeploymentException for an error */ boolean determineStructure(StructureContext context) throws DeploymentException; /** * Do we support candidate annotations lookup. * * @return true if candidate annotaiotns lookup is supported, false otherwise */ boolean isSupportsCandidateAnnotations(); } ././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/VFSDeploymentResourceLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000305310640504506033341 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure; import org.jboss.deployers.structure.spi.DeploymentResourceLoader; import org.jboss.virtual.VirtualFile; /** * VFSDeploymentResourceLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface VFSDeploymentResourceLoader extends DeploymentResourceLoader { /** * Get a virtual file * * @param path the relative path of the file * @return the virtual file or null if not found */ VirtualFile getFile(String path); } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000755000175000017500000000000011620060463033334 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/AbstractStructureDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000004163611137607542033360 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import java.io.IOException; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.deployers.vfs.spi.structure.CandidateAnnotationsCallback; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.deployers.vfs.spi.structure.VFSStructuralDeployers; import org.jboss.logging.Logger; import org.jboss.util.collection.CollectionsFactory; import org.jboss.virtual.VFSUtils; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VirtualFileVisitor; import org.jboss.virtual.VisitorAttributes; /** * AbstractStructureDeployer.

* * We don't care about the order by default. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public abstract class AbstractStructureDeployer implements StructureDeployer { /** The log */ protected Logger log = Logger.getLogger(getClass()); /** The relative order */ private int relativeOrder = Integer.MAX_VALUE; /** The candidate structure visitor factory */ private CandidateStructureVisitorFactory candidateStructureVisitorFactory = DefaultCandidateStructureVisitorFactory.INSTANCE; /** The context info order */ private Integer contextInfoOrder; /** The supports annotations flag */ private boolean supportsCandidateAnnotations; /** The candidate annotations */ private Set> candidateAnnotations; /** * Get the relative path between two virtual files * * @param context the structure context * @param child the child * @return the relative path */ public static final String getRelativePath(StructureContext context, VirtualFile child) { if (context == null) throw new IllegalArgumentException("Null context"); return getRelativePath(context.getParent(), child); } /** * Get the relative path between two virtual files * * @param parent the parent * @param child the child * @return the relative path */ public static final String getRelativePath(VirtualFile parent, VirtualFile child) { if (child == null) throw new IllegalArgumentException("Null child"); String childPath = child.getPathName(); if (parent != null) { String parentPath = parent.getPathName(); if (parentPath.length() == childPath.length()) return ""; // Not sure about this? It is obviously not a direct child if it is shorter? if (parentPath.length() < childPath.length()) { if (parentPath.endsWith("/") == false) parentPath = parentPath + "/"; if (childPath.startsWith(parentPath)) return childPath.substring(parentPath.length()); } } if (childPath.endsWith("/")) childPath = childPath.substring(0, childPath.length()-1); return childPath; } public int getRelativeOrder() { return relativeOrder; } public void setRelativeOrder(int order) { this.relativeOrder = order; } public void setContextInfoOrder(Integer contextInfoOrder) { this.contextInfoOrder = contextInfoOrder; } /** * Get the candidate annotations. * * @return the candidate annotations */ public Set> getCandidateAnnotations() { return candidateAnnotations; } /** * Set the candidate annotations. * * @param candidateAnnotations the candidate annotations */ public void setCandidateAnnotations(Set> candidateAnnotations) { this.candidateAnnotations = candidateAnnotations; } /** * Add candidate annotation. * * @param annotationClass the candidate annotation class */ public void addCandidateAnnotation(Class annotationClass) { if (candidateAnnotations == null) candidateAnnotations = new LinkedHashSet>(); candidateAnnotations.add(annotationClass); } public boolean isSupportsCandidateAnnotations() { return supportsCandidateAnnotations; } /** * Set supportsCandidateAnnotations flag. * * @param supportsCandidateAnnotations the support candidate annotations flag */ public void setSupportsCandidateAnnotations(boolean supportsCandidateAnnotations) { this.supportsCandidateAnnotations = supportsCandidateAnnotations; } /** * Get the candidateStructureVisitorFactory. * * @return the candidateStructureVisitorFactory. */ public CandidateStructureVisitorFactory getCandidateStructureVisitorFactory() { return candidateStructureVisitorFactory; } /** * Set the candidateStructureVisitorFactory. * * @param candidateStructureVisitorFactory the candidateStructureVisitorFactory. * @throws IllegalArgumentException for a null candidate structure */ public void setCandidateStructureVisitorFactory(CandidateStructureVisitorFactory candidateStructureVisitorFactory) { if (candidateStructureVisitorFactory == null) throw new IllegalArgumentException("Null candidateStructureVisitorFactory"); this.candidateStructureVisitorFactory = candidateStructureVisitorFactory; } /** * Add an entry to the context classpath. * * @param structureContext - the structure context * @param entry - the candidate file to add as a classpath entry * @param includeEntry - a flag indicating if the entry should be added to * the classpath * @param includeRootManifestCP - a flag indicating if the entry metainf * manifest classpath should be included. * @param context - the context to populate * @throws IOException on any IO error */ protected void addClassPath(StructureContext structureContext, VirtualFile entry, boolean includeEntry, boolean includeRootManifestCP, ContextInfo context) throws IOException { boolean trace = log.isTraceEnabled(); List paths = new ArrayList(); // The path we have been told to add if (includeEntry) paths.add(entry); // Add the manifest locations if (includeRootManifestCP && isLeaf(entry) == false) { try { VFSUtils.addManifestLocations(entry, paths); } catch(Exception e) { if (trace) log.trace("Failed to add manifest locations", e); } } // Translate from VirtualFile to relative paths VirtualFile root = structureContext.getRoot(); for (VirtualFile vf : paths) { String entryPath = getRelativePath(root, vf); ClassPathEntry cpe = StructureMetaDataFactory.createClassPathEntry(entryPath); context.addClassPathEntry(cpe); if (trace) log.trace("Added classpath entry " + entryPath + " for " + vf.getName() + " from " + root); } } /** * Create annotation environment * * @param root the deployment root * @return new annotation environment */ protected abstract AnnotationEnvironment createAnnotationEnvironment(VirtualFile root); /** * Check for candidate annotations. * * @param context the structure context * @param roots the roots to check * @return return true if one of the roots includes some candidate annotation */ protected boolean checkCandidateAnnotations(StructureContext context, VirtualFile... roots) { if (roots == null || roots.length == 0) throw new IllegalArgumentException("Null or empty roots"); if (candidateAnnotations == null || candidateAnnotations.isEmpty()) return true; StructureContext parentContext = context.getParentContext(); if (parentContext == null) return true; Set callbacks = parentContext.getCallbacks(CandidateAnnotationsCallback.class); if (callbacks.isEmpty()) return true; boolean result = false; for(VirtualFile root : roots) { AnnotationEnvironment env = createAnnotationEnvironment(root); for (Class annotationClass : candidateAnnotations) { if (env.hasClassAnnotatedWith(annotationClass)) { result = true; for (CandidateAnnotationsCallback callback : callbacks) callback.executeCallback(root, context, env, annotationClass); } } } return result; } /** * Add all children as candidates * * @param context the structure context * @throws Exception for any error */ protected void addAllChildren(StructureContext context) throws Exception { addChildren(context, null); } /** * Add all children as candidates * * @param context the structure context * @param attributes the visitor attributes uses {@link VisitorAttributes#DEFAULT} when null * @throws Exception for any error */ protected void addChildren(StructureContext context, VisitorAttributes attributes) throws Exception { if (context == null) throw new IllegalArgumentException("Null context"); VirtualFile file = context.getFile(); VirtualFileVisitor visitor = candidateStructureVisitorFactory.createVisitor(context, attributes); file.visit(visitor); } /** * Add all children as candidates * * @param root the root context * @param parent the parent context * @param metaData the structure meta data * @param deployers the structure deployers * @throws Exception for any error */ protected void addAllChildren(VirtualFile root, VirtualFile parent, StructureMetaData metaData, VFSStructuralDeployers deployers) throws Exception { addChildren(root, parent, metaData, deployers, null); } /** * Add all children as candidates * * @param root the root context * @param parent the parent context * @param metaData the structure meta data * @param deployers the structure deployers * @param attributes the visitor attributes uses {@link VisitorAttributes#DEFAULT} when null * @throws Exception for any error */ protected void addChildren(VirtualFile root, VirtualFile parent, StructureMetaData metaData, VFSStructuralDeployers deployers, VisitorAttributes attributes) throws Exception { if (parent == null) throw new IllegalArgumentException("Null parent"); StructureContext context = new StructureContext(root, null, parent, metaData, deployers, null); addChildren(context, attributes); } /** * Tests whether the virtual file is a leaf * * @param file the virtual file * @return true when it is a leaf * @throws IOException for any error */ protected static boolean isLeaf(VirtualFile file) throws IOException { return SecurityActions.isLeaf(file); } /** * Create a context * * @param context the structure context * @return the context info * @throws IllegalArgumentException for a null root or structure metaData */ protected ContextInfo createContext(StructureContext context) { return createContext(context, (String) null); } /** * Create a context * * @param context the structure context * @param metaDataPath the metadata path * @return the context info * @throws IllegalArgumentException for a null root or structure metaData */ protected ContextInfo createContext(StructureContext context, String metaDataPath) { ContextInfo result = applyMetadataPath(context, metaDataPath); applyStructure(context, result); return result; } /** * Apply metadata on root to create context. * * @param context the context * @param metaDataPath the metadata path * @return the context info */ protected ContextInfo applyMetadataPath(StructureContext context, String metaDataPath) { if (context == null) throw new IllegalArgumentException("Null context"); // Determine whether the metadata path exists if (metaDataPath != null) { VirtualFile root = context.getFile(); try { VirtualFile child = root.getChild(metaDataPath); if (child == null) metaDataPath = null; } catch (IOException e) { log.warn("Not using metadata path " + metaDataPath + " for " + root.getName() + " reason: " + e.getMessage()); metaDataPath = null; } } // Create and link the context if (metaDataPath != null) return StructureMetaDataFactory.createContextInfo("", metaDataPath, null); else return StructureMetaDataFactory.createContextInfo("", null); } /** * Create a context * * @param context the structure context * @param metaDataPaths the metadata paths * @return the context info * @throws IllegalArgumentException for a null root or structure metaData */ protected ContextInfo createContext(StructureContext context, String[] metaDataPaths) { ContextInfo result = applyMetadataPaths(context, metaDataPaths); applyStructure(context, result); return result; } /** * Apply metadata on root to create context. * * @param context the structure context * @param metaDataPaths the metadata paths * @return the context info */ protected ContextInfo applyMetadataPaths(StructureContext context, String[] metaDataPaths) { if (context == null) throw new IllegalArgumentException("Null context"); VirtualFile root = context.getFile(); List metaDataPath = CollectionsFactory.createLazyList(); // Determine whether the metadata paths exists if (metaDataPaths != null && metaDataPaths.length > 0) { for(String path : metaDataPaths) { try { VirtualFile child = root.getChild(path); if (child != null) metaDataPath.add(path); } catch (IOException e) { log.warn("Not using metadata path " + path + " for " + root.getName() + " reason: " + e.getMessage()); } } } // Create and link the context if (metaDataPath.isEmpty()) return StructureMetaDataFactory.createContextInfo("", null); else return StructureMetaDataFactory.createContextInfo("", metaDataPath, null); } /** * Apply structure metadata on context. * * @param context the structure context * @param contextInfo the new created context */ protected void applyStructure(StructureContext context, ContextInfo contextInfo) { boolean trace = log.isTraceEnabled(); if (context == null) throw new IllegalArgumentException("Null context"); VirtualFile root = context.getRoot(); applyContextInfo(context, contextInfo); context.addChild(contextInfo); if (trace) log.trace("Added context " + context + " from " + root.getName()); } /** * Apply context info. * Can be overridden for specific root. * * @param context the structure context * @param result the new context info */ protected void applyContextInfo(StructureContext context, ContextInfo result) { if (result != null && contextInfoOrder != null) { result.setRelativeOrder(contextInfoOrder); } } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/SecurityActions.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000555010640504506033345 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import java.io.IOException; import java.lang.reflect.UndeclaredThrowableException; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import org.jboss.virtual.VirtualFile; /** * @author Scott.Stark@jboss.org * @version $Revision: 60921 $ */ public class SecurityActions { /** * Actions for File access */ interface FileActions { FileActions PRIVILEGED = new FileActions() { public Boolean isLeaf(final VirtualFile f) throws IOException { try { return AccessController.doPrivileged(new PrivilegedExceptionAction() { public Boolean run() throws Exception { return f.isLeaf(); } }); } catch(PrivilegedActionException e) { Exception ex = e.getException(); if( ex instanceof IOException ) throw (IOException) ex; else if( ex instanceof RuntimeException ) throw (RuntimeException) ex; else throw new UndeclaredThrowableException(ex); } } }; FileActions NON_PRIVILEGED = new FileActions() { public Boolean isLeaf(VirtualFile f) throws IOException { return f.isLeaf(); } }; public Boolean isLeaf(VirtualFile f) throws IOException; } static boolean isLeaf(VirtualFile f) throws IOException { SecurityManager sm = System.getSecurityManager(); if( sm != null ) return FileActions.PRIVILEGED.isLeaf(f); else return FileActions.NON_PRIVILEGED.isLeaf(f); } } ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/VirtualFileDeploymentUnitFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000352111113261537033341 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VirtualFileFilter; /** * VirtualFileDeploymentUnitFilter. * * It delegates the filtering to VirtualFileFilter. * * @author Ales Justin */ public class VirtualFileDeploymentUnitFilter extends Base2VFSBridgeDeploymentUnitFilter { private VirtualFileFilter filter; public VirtualFileDeploymentUnitFilter(VirtualFileFilter filter) { if (filter == null) throw new IllegalArgumentException("Null filter"); this.filter = filter; } public boolean accepts(VFSDeploymentUnit unit) { VirtualFile root = unit.getRoot(); return filter.accepts(root); } }././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/VFS2BaseBridgeDeploymentUnitFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000407711113261537033350 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.DeploymentUnitFilter; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnitFilter; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * Bridge deployment unit filter. * * It implements both, plain deployment unit and vfs deployment unit filters. * It delegates work to base du accepts method for both accepts. * * @author Ales Justin */ public abstract class VFS2BaseBridgeDeploymentUnitFilter implements DeploymentUnitFilter, VFSDeploymentUnitFilter { /** * Do we accept this unit. * * @param unit the deployment unit * @return true if accepted, false otherwise */ protected abstract boolean doAccepts(DeploymentUnit unit); public boolean accepts(VFSDeploymentUnit unit) { return doAccepts(unit); } public boolean accepts(DeploymentUnit unit) { return doAccepts(unit); } }././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/CandidateStructureVisitorFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000332511046046724033347 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.virtual.VirtualFileVisitor; import org.jboss.virtual.VisitorAttributes; /** * CandidateStructureVisitorFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface CandidateStructureVisitorFactory { /** * Create the visitor * * @param context the structure context * @param attributes the visitor attributes uses {@link VisitorAttributes#DEFAULT} when null * @return the visitor * @throws Exception for any error */ VirtualFileVisitor createVisitor(StructureContext context, VisitorAttributes attributes) throws Exception; } ././@LongLink0000000000000000000000000000024100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/DefaultCandidateStructureVisitorFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000443711046046724033354 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.virtual.VirtualFileFilter; import org.jboss.virtual.VirtualFileVisitor; import org.jboss.virtual.VisitorAttributes; /** * DefaultCandidateStructureVisitorFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DefaultCandidateStructureVisitorFactory implements CandidateStructureVisitorFactory { /** An instance of the factory */ public static final DefaultCandidateStructureVisitorFactory INSTANCE = new DefaultCandidateStructureVisitorFactory(); /** The filter */ private VirtualFileFilter filter; /** * Get the filter. * * @return the filter. */ public VirtualFileFilter getFilter() { return filter; } /** * Set the filter. * * @param filter the filter. */ public void setFilter(VirtualFileFilter filter) { this.filter = filter; } public VirtualFileVisitor createVisitor(StructureContext context, VisitorAttributes attributes) throws Exception { AbstractCandidateStructureVisitor visitor = new AbstractCandidateStructureVisitor(context, attributes); if (filter != null) visitor.setFilter(filter); return visitor; } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/ClassPathVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000601110761233255033342 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.DeploymentUnitVisitor; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * Collects all the classpath elements * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ClassPathVisitor implements DeploymentUnitVisitor { /** The initial deployment unit */ private DeploymentUnit initial; /** The full classpath */ private Set classPath = new LinkedHashSet(); /** * Create a new ClassPathVisitor. */ @Deprecated // pass the initial unit to weed subdeployments with their own classloader public ClassPathVisitor() { } /** * Create a new ClassPathVisitor. * * @param initial the initial unit */ public ClassPathVisitor(DeploymentUnit initial) { if (initial == null) throw new IllegalArgumentException("Null initial"); this.initial = initial; } /** * Get the full classpath after the visit * * @return the full classpath */ public Set getClassPath() { return classPath; } public void visit(DeploymentUnit unit) throws DeploymentException { if (unit instanceof VFSDeploymentUnit == false) return; // This part of the deployment wants its own classloader if (unit != initial && unit.getAttachment(ClassLoadingMetaData.class) != null) return; VFSDeploymentUnit vfsUnit = (VFSDeploymentUnit) unit; List paths = vfsUnit.getClassPath(); if (paths != null) classPath.addAll(paths); } public void error(DeploymentUnit context) { // nothing } } ././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/AbstractCandidateStructureVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000001076611046046724033356 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import java.io.IOException; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.logging.Logger; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VirtualFileFilter; import org.jboss.virtual.VisitorAttributes; import org.jboss.virtual.plugins.vfs.helpers.AbstractVirtualFileVisitor; /** * Visits the structure and creates candidates * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AbstractCandidateStructureVisitor extends AbstractVirtualFileVisitor { /** The log */ private static final Logger log = Logger.getLogger(AbstractCandidateStructureVisitor.class); /** The structure context */ private StructureContext context; /** Ignore directories */ private boolean ignoreDirectories; /** A filter */ private VirtualFileFilter filter; /** * Create a new CandidateStructureVisitor. * * @param context the context * @throws IllegalArgumentException for a null parent */ public AbstractCandidateStructureVisitor(StructureContext context) { this(context, null); } /** * Create a new CandidateStructureVisitor. * * @param context the context * @param attributes the attributes * @throws IllegalArgumentException for a null parent */ public AbstractCandidateStructureVisitor(StructureContext context, VisitorAttributes attributes) { super(attributes); if (context == null) throw new IllegalArgumentException("Null context"); this.context = context; } /** * Get the parent deployment context * * @return the parent. */ public VirtualFile getParent() { return context.getFile(); } /** * Get the ignoreDirectories. * * @return the ignoreDirectories. */ public boolean isIgnoreDirectories() { return ignoreDirectories; } /** * Get the filter. * * @return the filter. */ public VirtualFileFilter getFilter() { return filter; } /** * Set the filter. * * @param filter the filter. */ public void setFilter(VirtualFileFilter filter) { this.filter = filter; } /** * Set the ignoreDirectories. * * @param ignoreDirectories the ignoreDirectories. */ public void setIgnoreDirectories(boolean ignoreDirectories) { this.ignoreDirectories = ignoreDirectories; } public void visit(VirtualFile file) { String path = AbstractStructureDeployer.getRelativePath(context, file); StructureMetaData metaData = context.getMetaData(); ContextInfo contextInfo = metaData.getContext(path); if (contextInfo == null) { // Ignore directories when asked try { if (ignoreDirectories && SecurityActions.isLeaf(file) == false) return; } catch (IOException e) { log.debug("Ignoring " + file + " reason=" + e); return; } // Apply any filter if (filter != null && filter.accepts(file) == false) return; try { // Ask the deployers to process this file context.determineChildStructure(file); } catch (Exception e) { log.debug("Ignoring " + file + " reason=" + e); } } } } ././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/structure/helpers/Base2VFSBridgeDeploymentUnitFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/st0000644000175000017500000000350711113261537033345 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.spi.structure.helpers; import org.jboss.deployers.structure.spi.DeploymentUnitFilter; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnitFilter; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * Bridge deployment unit filter. * * It implements both, plain deployment unit and vfs deployment unit filters. * It delegates work to vfs du filter if du is vfs instance. * * @author Ales Justin */ public abstract class Base2VFSBridgeDeploymentUnitFilter implements DeploymentUnitFilter, VFSDeploymentUnitFilter { public boolean accepts(DeploymentUnit unit) { return (unit instanceof VFSDeploymentUnit) && accepts((VFSDeploymentUnit)unit); } } libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/.settings/0000755000175000017500000000000011620060464024742 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740031740 0ustar twernertwerner#Fri Sep 21 17:50:31 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs-spi/.project0000644000175000017500000000104111071370224024465 0ustar twernertwerner jboss-deployers-vfs-spi JBoss Deployers VFS SPI jboss-deployers-client-spi jboss-deployers-core-spi jboss-deployers-spi jboss-deployers-structure-spi org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature libjboss-deployers-java-2.0.4.GA.orig/deployers-core/0000755000175000017500000000000011620060465022366 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/.classpath0000644000175000017500000000417611104173360024355 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-core/pom.xml0000644000175000017500000000376411137607542023723 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-core jar JBoss Deployers Core http://www.jboss.com/products/jbossmc JBoss Deployers Core org.apache.maven.plugins maven-surefire-plugin org.apache.maven.plugins maven-jar-plugin test-jar org.jboss.deployers jboss-deployers-core-spi org.jboss.logging jboss-logging-spi org.jboss.logging jboss-logging-log4j test org.jboss.test jboss-test test junit junit test libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/0000755000175000017500000000000011620060464023154 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/0000755000175000017500000000000011620060464024133 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/0000755000175000017500000000000011620060464025054 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/0000755000175000017500000000000011620060464025643 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/0000755000175000017500000000000011620060464026763 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/0000755000175000017500000000000011620060464027742 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/0000755000175000017500000000000011620060464031750 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/DeployersCoreTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/Deployer0000644000175000017500000000334510640504316033463 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.attachments.AttachmentsTestSuite; import org.jboss.test.deployers.structure.StructureMetaDataTestSuite; /** * Deployers Core Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class DeployersCoreTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers Core Tests"); suite.addTest(AttachmentsTestSuite.suite()); suite.addTest(StructureMetaDataTestSuite.suite()); return suite; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000755000175000017500000000000011620060464033457 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000755000175000017500000000000011620060464033457 5ustar twernertwerner././@LongLink0000000000000000000000000000024500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/ManagedObjectsAttachmentsImplTransientUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000416010640504316033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.helpers.ManagedObjectAttachmentsImpl; /** * ManagedObjectsAttachmentsImplTransientUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManagedObjectsAttachmentsImplTransientUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(ManagedObjectsAttachmentsImplTransientUnitTestCase.class); } public ManagedObjectsAttachmentsImplTransientUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { ManagedObjectAttachmentsImpl objects = new ManagedObjectAttachmentsImpl(); return objects.getTransientManagedObjects(); } protected MutableAttachments getMutable() { ManagedObjectAttachmentsImpl objects = new ManagedObjectAttachmentsImpl(); return objects.getTransientManagedObjects(); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/ExpectedAttachments.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000276310640504316033471 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import java.util.HashMap; import java.util.Map; /** * ExpectedAttachments. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ExpectedAttachments { public Map expected = new HashMap(); public Object add(String name, Object attachment) { return expected.put(name, attachment); } public Object remove(String name) { return expected.remove(name); } } ././@LongLink0000000000000000000000000000030400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/ManagedObjectsWithTransientAttachmentsImplPredeterminedManagedObjectsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000463210640504316033466 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.ManagedObjectsWithTransientAttachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.helpers.ManagedObjectsWithTransientAttachmentsImpl; /** * ManagedObjectsWithTransientAttachmentsImplPredeterminedManagedObjectsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManagedObjectsWithTransientAttachmentsImplPredeterminedManagedObjectsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(ManagedObjectsWithTransientAttachmentsImplPredeterminedManagedObjectsUnitTestCase.class); } public ManagedObjectsWithTransientAttachmentsImplPredeterminedManagedObjectsUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { ManagedObjectsWithTransientAttachments objects = new ManagedObjectsWithTransientAttachmentsImpl(); return objects.getPredeterminedManagedObjects(); } protected MutableAttachments getMutable() { ManagedObjectsWithTransientAttachments objects = new ManagedObjectsWithTransientAttachmentsImpl(); return (MutableAttachments) objects.getPredeterminedManagedObjects(); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/AttachmentsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000352110640504316033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.plugins.attachments.AttachmentsImpl; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; /** * AttachmentsUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AttachmentsUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AttachmentsUnitTestCase.class); } private MutableAttachments impl = new AttachmentsImpl(); public AttachmentsUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { return impl; } protected MutableAttachments getMutable() { return impl; } } ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/AttachmentsFactoryUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000356710640504316033474 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.AttachmentsFactory; import org.jboss.deployers.spi.attachments.MutableAttachments; /** * AttachmentsFactoryUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AttachmentsFactoryUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(AttachmentsFactoryUnitTestCase.class); } public AttachmentsFactoryUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { return AttachmentsFactory.createAttachments(); } protected MutableAttachments getMutable() { return AttachmentsFactory.createMutableAttachments(); } } ././@LongLink0000000000000000000000000000025100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/ManagedObjectsAttachmentsImplPredeterminedUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000423510640504316033465 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.helpers.ManagedObjectAttachmentsImpl; /** * ManagedObjectsAttachmentsImplPredeterminedUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManagedObjectsAttachmentsImplPredeterminedUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(ManagedObjectsAttachmentsImplPredeterminedUnitTestCase.class); } public ManagedObjectsAttachmentsImplPredeterminedUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { ManagedObjectAttachmentsImpl objects = new ManagedObjectAttachmentsImpl(); return objects.getPredeterminedManagedObjects(); } protected MutableAttachments getMutable() { ManagedObjectAttachmentsImpl objects = new ManagedObjectAttachmentsImpl(); return (MutableAttachments) objects.getPredeterminedManagedObjects(); } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/AttachmentsTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000004143410640504316033467 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.test.BaseTestCase; /** * Attachments Test. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AttachmentsTest extends BaseTestCase { public static Test suite() { return new TestSuite(AttachmentsTest.class); } public AttachmentsTest(String name) { super(name); } protected abstract Attachments getAttachments(); protected abstract MutableAttachments getMutable(); public void testAddAttachmentErrors() throws Exception { MutableAttachments mutable = getMutable(); try { mutable.addAttachment((String) null, "attachment"); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.addAttachment("name", null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.addAttachment(null, "attachment", String.class); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.addAttachment("name", null, String.class); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.addAttachment("name", "attachment", null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.addAttachment((Class) null, "attachment"); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.addAttachment(String.class, null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } } public void testAddAttachmentByName() throws Exception { MutableAttachments mutable = getMutable(); ExpectedAttachments expected = new ExpectedAttachments(); assertAddFreshAttachmentByName(mutable, expected, "name1", "attachment1"); assertAddFreshAttachmentByName(mutable, expected, "name2", "attachment2"); assertAddReplaceAttachmentByName(mutable, expected, "name1", "different1", "attachment1"); } protected void assertAddFreshAttachmentByName(MutableAttachments mutable, ExpectedAttachments expected, String name, Object attachment) { assertAddReplaceAttachmentByName(mutable, expected, name, attachment, null); } protected void assertAddReplaceAttachmentByName(MutableAttachments mutable, ExpectedAttachments expected, String name, Object attachment, Object replaced) { Object result = assertAddAttachmentByName(mutable, expected, name, attachment); assertEquals(replaced, result); } protected Object assertAddAttachmentByName(MutableAttachments mutable, ExpectedAttachments expected, String name, Object attachment) { Object result = mutable.addAttachment(name, attachment); checkAdd(mutable, expected, name, attachment, result); return result; } protected Object checkAdd(Attachments attachments, ExpectedAttachments expected, String name, Object attachment, Object result) { assertEquals(attachment, attachments.getAttachment(name)); assertTrue(attachments.isAttachmentPresent(name)); Object expectedResult = assertExpectedAdd(attachments, expected, name, attachment); assertEquals(expectedResult, result); return result; } protected Object assertExpectedAdd(Attachments attachments, ExpectedAttachments expected, String name, Object attachment) { Object result = expected.add(name, attachment); assertEquals(expected.expected, attachments.getAttachments()); return result; } public void testAddAttachmentByNameAndType() throws Exception { MutableAttachments mutable = getMutable(); ExpectedAttachments expected = new ExpectedAttachments(); assertAddFreshAttachmentByNameAndType(mutable, expected, "name1", "attachment1", String.class); assertAddFreshAttachmentByNameAndType(mutable, expected, "name2", "attachment2", String.class); assertAddReplaceAttachmentByNameAndType(mutable, expected, "name1", "different1", "attachment1", String.class); } protected void assertAddFreshAttachmentByNameAndType(MutableAttachments mutable, ExpectedAttachments expected, String name, T attachment, Class expectedType) { assertAddReplaceAttachmentByNameAndType(mutable, expected, name, attachment, null, expectedType); } protected void assertAddReplaceAttachmentByNameAndType(MutableAttachments mutable, ExpectedAttachments expected, String name, T attachment, Object replaced, Class expectedType) { Object result = assertAddAttachmentByNameAndType(mutable, expected, name, attachment, expectedType); assertEquals(replaced, result); } protected Object assertAddAttachmentByNameAndType(MutableAttachments mutable, ExpectedAttachments expected, String name, T attachment, Class expectedType) { Object result = mutable.addAttachment(name, attachment, expectedType); checkAdd(mutable, expected, name, attachment, result); assertEquals(attachment, mutable.getAttachment(name, expectedType)); assertTrue(mutable.isAttachmentPresent(name, expectedType)); return result; } public void testAddAttachmentByType() throws Exception { MutableAttachments mutable = getMutable(); ExpectedAttachments expected = new ExpectedAttachments(); assertAddFreshAttachmentByType(mutable, expected, Integer.class, 1); assertAddFreshAttachmentByType(mutable, expected, String.class, "attachment"); assertAddReplaceAttachmentByType(mutable, expected, String.class, "different", "attachment"); } protected void assertAddFreshAttachmentByType(MutableAttachments mutable, ExpectedAttachments expected, Class type, T attachment) { assertAddReplaceAttachmentByType(mutable, expected, type, attachment, null); } protected void assertAddReplaceAttachmentByType(MutableAttachments mutable, ExpectedAttachments expected, Class type, T attachment, Object replaced) { Object result = assertAddAttachmentByType(mutable, expected, type, attachment); assertEquals(replaced, result); } protected Object assertAddAttachmentByType(MutableAttachments mutable, ExpectedAttachments expected, Class type, T attachment) { Object result = mutable.addAttachment(type, attachment); String name = type.getName(); checkAdd(mutable, expected, name, attachment, result); assertEquals(attachment, mutable.getAttachment(type)); assertTrue(mutable.isAttachmentPresent(type)); assertEquals(attachment, mutable.getAttachment(name, type)); assertTrue(mutable.isAttachmentPresent(name, type)); return result; } public void testRemoveAttachmentErrors() throws Exception { MutableAttachments mutable = getMutable(); try { mutable.removeAttachment((String) null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.removeAttachment(null, String.class); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.removeAttachment("name", null); fail("Should nt be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { mutable.removeAttachment((Class) null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } } public void testRemoveAttachmentByName() throws Exception { MutableAttachments mutable = getMutable(); ExpectedAttachments expected = new ExpectedAttachments(); assertRemoveNotPresentAttachmentByName(mutable, expected, "name1"); assertAddAttachmentByName(mutable, expected, "name1", "attachment1"); assertAddAttachmentByName(mutable, expected, "name2", "different2"); assertRemoveAttachmentByName(mutable, expected, "name1", "attachment1"); } protected void assertRemoveNotPresentAttachmentByName(MutableAttachments mutable, ExpectedAttachments expected, String name) { assertRemoveAttachmentByName(mutable, expected, name, null); } protected void assertRemoveAttachmentByName(MutableAttachments mutable, ExpectedAttachments expected, String name, Object removed) { Object result = assertRemoveAttachmentByName(mutable, expected, name); assertEquals(removed, result); } protected Object assertRemoveAttachmentByName(MutableAttachments mutable, ExpectedAttachments expected, String name) { Object result = mutable.removeAttachment(name); checkRemove(mutable, expected, name, result); return result; } protected Object checkRemove(Attachments attachments, ExpectedAttachments expected, String name, Object result) { assertNull(attachments.getAttachment(name)); assertFalse(attachments.isAttachmentPresent(name)); Object expectedResult = assertExpectedRemove(attachments, expected, name); assertEquals(expectedResult, result); return result; } protected Object assertExpectedRemove(Attachments attachments, ExpectedAttachments expected, String name) { Object result = expected.remove(name); assertEquals(expected.expected, attachments.getAttachments()); return result; } public void testRemoveAttachmentByNameAndType() throws Exception { MutableAttachments mutable = getMutable(); ExpectedAttachments expected = new ExpectedAttachments(); assertRemoveNotPresentAttachmentByNameAndType(mutable, expected, "name1", String.class); assertAddAttachmentByNameAndType(mutable, expected, "name1", "attachment1", String.class); assertAddAttachmentByNameAndType(mutable, expected, "name2", "different2", String.class); assertRemoveAttachmentByNameAndType(mutable, expected, "name1", "attachment1", String.class); } protected void assertRemoveNotPresentAttachmentByNameAndType(MutableAttachments mutable, ExpectedAttachments expected, String name, Class expectedType) { assertRemoveAttachmentByNameAndType(mutable, expected, name, null, expectedType); } protected void assertRemoveAttachmentByNameAndType(MutableAttachments mutable, ExpectedAttachments expected, String name, Object removed, Class expectedType) { Object result = assertRemoveAttachmentByNameAndType(mutable, expected, name, expectedType); assertEquals(removed, result); } protected Object assertRemoveAttachmentByNameAndType(MutableAttachments mutable, ExpectedAttachments expected, String name, Class expectedType) { Object result = mutable.removeAttachment(name, expectedType); checkRemove(mutable, expected, name, result); assertNull(mutable.getAttachment(name, expectedType)); assertFalse(mutable.isAttachmentPresent(name, expectedType)); return result; } public void testRemoveAttachmentByType() throws Exception { MutableAttachments mutable = getMutable(); ExpectedAttachments expected = new ExpectedAttachments(); assertRemoveNotPresentAttachmentByType(mutable, expected, Integer.class); assertAddAttachmentByType(mutable, expected, Integer.class, 1); assertAddAttachmentByType(mutable, expected, String.class, "attachment"); assertRemoveAttachmentByType(mutable, expected, String.class, "attachment"); } protected void assertRemoveNotPresentAttachmentByType(MutableAttachments mutable, ExpectedAttachments expected, Class type) { assertRemoveAttachmentByType(mutable, expected, type, null); } protected void assertRemoveAttachmentByType(MutableAttachments mutable, ExpectedAttachments expected, Class type, Object removed) { Object result = assertRemoveAttachmentByType(mutable, expected, type); assertEquals(removed, result); } protected Object assertRemoveAttachmentByType(MutableAttachments mutable, ExpectedAttachments expected, Class type) { Object result = mutable.removeAttachment(type); String name = type.getName(); checkRemove(mutable, expected, name, result); assertNull(mutable.getAttachment(type)); assertFalse(mutable.isAttachmentPresent(type)); assertNull(mutable.getAttachment(name, type)); assertFalse(mutable.isAttachmentPresent(name, type)); return result; } public void testGetAttachmentErrors() throws Exception { Attachments attachments = getAttachments(); try { attachments.getAttachment((String) null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { attachments.getAttachment(null, String.class); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { attachments.getAttachment("name", null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { attachments.getAttachment((Class) null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } } public void testIsAttachmentPresentErrors() throws Exception { Attachments attachments = getAttachments(); try { attachments.isAttachmentPresent((String) null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { attachments.isAttachmentPresent(null, String.class); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { attachments.isAttachmentPresent("name", null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } try { attachments.isAttachmentPresent((Class) null); fail("Should not be here!"); } catch (Throwable t) { checkThrowable(IllegalArgumentException.class, t); } } public void testSerialization() throws Exception { Attachments attachments = getAttachments(); serializeDeserialize(attachments, Attachments.class); MutableAttachments mutable = getMutable(); serializeDeserialize(mutable, MutableAttachments.class); mutable.addAttachment(String.class, "Hello"); mutable = serializeDeserialize(mutable, MutableAttachments.class); assertEquals("Hello", mutable.getAttachment(String.class)); } } ././@LongLink0000000000000000000000000000025100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/ManagedObjectsWithTransientAttachmentsImplUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000441310640504316033463 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.ManagedObjectsWithTransientAttachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.helpers.ManagedObjectsWithTransientAttachmentsImpl; /** * ManagedObjectsWithTransientAttachmentsImplUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManagedObjectsWithTransientAttachmentsImplUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(ManagedObjectsWithTransientAttachmentsImplUnitTestCase.class); } public ManagedObjectsWithTransientAttachmentsImplUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { ManagedObjectsWithTransientAttachments objects = new ManagedObjectsWithTransientAttachmentsImpl(); return objects.getTransientAttachments(); } protected MutableAttachments getMutable() { ManagedObjectsWithTransientAttachments objects = new ManagedObjectsWithTransientAttachmentsImpl(); return objects.getTransientAttachments(); } } ././@LongLink0000000000000000000000000000025100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/PredeterminedManagedObjectsAttachmentsImplUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000436610640504316033472 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.helpers.PredeterminedManagedObjectAttachmentsImpl; /** * PredeterminedManagedObjectsAttachmentsImplUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class PredeterminedManagedObjectsAttachmentsImplUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(PredeterminedManagedObjectsAttachmentsImplUnitTestCase.class); } public PredeterminedManagedObjectsAttachmentsImplUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { PredeterminedManagedObjectAttachmentsImpl predetermined = new PredeterminedManagedObjectAttachmentsImpl(); return predetermined.getPredeterminedManagedObjects(); } protected MutableAttachments getMutable() { PredeterminedManagedObjectAttachmentsImpl predetermined = new PredeterminedManagedObjectAttachmentsImpl(); return (MutableAttachments) predetermined.getPredeterminedManagedObjects(); } } ././@LongLink0000000000000000000000000000027700000000000011573 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/test/ManagedObjectsWithTransientAttachmentsImplTransientManagedObjectUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000455110640504316033466 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.ManagedObjectsWithTransientAttachments; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.helpers.ManagedObjectsWithTransientAttachmentsImpl; /** * ManagedObjectsWithTransientAttachmentsImplTransientManagedObjectUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManagedObjectsWithTransientAttachmentsImplTransientManagedObjectUnitTestCase extends AttachmentsTest { public static Test suite() { return new TestSuite(ManagedObjectsWithTransientAttachmentsImplTransientManagedObjectUnitTestCase.class); } public ManagedObjectsWithTransientAttachmentsImplTransientManagedObjectUnitTestCase(String name) { super(name); } protected Attachments getAttachments() { ManagedObjectsWithTransientAttachments objects = new ManagedObjectsWithTransientAttachmentsImpl(); return objects.getTransientManagedObjects(); } protected MutableAttachments getMutable() { ManagedObjectsWithTransientAttachments objects = new ManagedObjectsWithTransientAttachmentsImpl(); return objects.getTransientManagedObjects(); } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachments/AttachmentsTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/attachme0000644000175000017500000000572110640504316033466 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.attachments; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.attachments.test.AttachmentsFactoryUnitTestCase; import org.jboss.test.deployers.attachments.test.AttachmentsUnitTestCase; import org.jboss.test.deployers.attachments.test.ManagedObjectsAttachmentsImplPredeterminedUnitTestCase; import org.jboss.test.deployers.attachments.test.ManagedObjectsAttachmentsImplTransientUnitTestCase; import org.jboss.test.deployers.attachments.test.ManagedObjectsWithTransientAttachmentsImplPredeterminedManagedObjectsUnitTestCase; import org.jboss.test.deployers.attachments.test.ManagedObjectsWithTransientAttachmentsImplTransientManagedObjectUnitTestCase; import org.jboss.test.deployers.attachments.test.ManagedObjectsWithTransientAttachmentsImplUnitTestCase; import org.jboss.test.deployers.attachments.test.PredeterminedManagedObjectsAttachmentsImplUnitTestCase; /** * Attachments Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class AttachmentsTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Attachments Tests"); suite.addTest(AttachmentsUnitTestCase.suite()); suite.addTest(AttachmentsFactoryUnitTestCase.suite()); suite.addTest(PredeterminedManagedObjectsAttachmentsImplUnitTestCase.suite()); suite.addTest(ManagedObjectsAttachmentsImplPredeterminedUnitTestCase.suite()); suite.addTest(ManagedObjectsAttachmentsImplTransientUnitTestCase.suite()); suite.addTest(ManagedObjectsWithTransientAttachmentsImplPredeterminedManagedObjectsUnitTestCase.suite()); suite.addTest(ManagedObjectsWithTransientAttachmentsImplTransientManagedObjectUnitTestCase.suite()); suite.addTest(ManagedObjectsWithTransientAttachmentsImplUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000755000175000017500000000000011620060464033564 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000755000175000017500000000000011620060464033564 5ustar twernertwerner././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/test/ContextInfoImplUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000001473710731616564033614 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.test; import java.util.List; import java.util.Arrays; import java.util.ArrayList; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.plugins.attachments.AttachmentsImpl; import org.jboss.deployers.plugins.structure.ClassPathEntryImpl; import org.jboss.deployers.plugins.structure.ContextInfoImpl; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.test.deployers.structure.AbstractContextInfoTest; /** * ContextInfoImplUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ContextInfoImplUnitTestCase extends AbstractContextInfoTest { public static Test suite() { return new TestSuite(ContextInfoImplUnitTestCase.class); } public ContextInfoImplUnitTestCase(String name) { super(name); } @Override protected ContextInfoImpl createDefault() { return new ContextInfoImpl(); } @Override protected ContextInfoImpl createPath(String path) { return new ContextInfoImpl(path); } @Override protected ContextInfoImpl createPathAndClassPath(String path, List classPath) { return new ContextInfoImpl(path, classPath); } @Override protected ContextInfo createPathAndMetaDataAndClassPath(String path, String metaDataPath, List classPath) { return new ContextInfoImpl(path, metaDataPath, classPath); } @Override protected ContextInfo createPathAndMetaDataAndClassPath(String path, List metaDataPath, List classPath) { return new ContextInfoImpl(path, metaDataPath, classPath); } @Override protected ClassPathEntry createClassPathEntry(String path) { return new ClassPathEntryImpl(path); } public void testSetPath() { ContextInfoImpl context = createDefault(); assertEquals("", context.getPath()); assertDefaultNonPath(context); context.setPath("path"); assertEquals("path", context.getPath()); assertDefaultNonPath(context); context.setPath("changed"); assertEquals("changed", context.getPath()); assertDefaultNonPath(context); } public void testSetPathErrors() { ContextInfoImpl context = createDefault(); assertEquals("", context.getPath()); assertDefaultNonPath(context); try { context.setPath(null); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testAddMetaDataPath() { ContextInfoImpl context = createDefault(); assertEquals("", context.getPath()); assertDefaultNonPath(context); context.addMetaDataPath("metaDataPath"); assertDefaultMetaDataPath(context.getMetaDataPath()); assertDefaultClassPath(context.getClassPath()); context.addMetaDataPath("added"); assertEquals(Arrays.asList("metaDataPath", "added"), context.getMetaDataPath()); assertDefaultClassPath(context.getClassPath()); } public void testAddToDefaultMetaDataPath() { List classPath = new ArrayList(); classPath.add(new ClassPathEntryImpl()); ContextInfo context = createPathAndMetaDataAndClassPath("", "metaDataPath", classPath); assertEquals("", context.getPath()); assertDefaultMetaDataPath(context.getMetaDataPath()); assertDefaultClassPath(context.getClassPath()); context.addMetaDataPath("added"); assertEquals(Arrays.asList("metaDataPath", "added"), context.getMetaDataPath()); assertDefaultClassPath(context.getClassPath()); } public void testSetMetaDataPathErrors() { ContextInfoImpl context = createDefault(); assertEquals("", context.getPath()); assertDefaultNonPath(context); try { context.addMetaDataPath(null); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testSetClassPath() { ContextInfoImpl context = createDefault(); assertEquals("", context.getPath()); assertDefaultNonPath(context); List classPath = createClassPath("classPath"); context.setClassPath(classPath); assertEquals("", context.getPath()); assertDefaultMetaDataPath(context); assertEquals(classPath, context.getClassPath()); classPath = createClassPath("changed"); context.setClassPath(classPath); assertEquals("", context.getPath()); assertDefaultMetaDataPath(context); assertEquals(classPath, context.getClassPath()); classPath = null; context.setClassPath(classPath); assertEquals("", context.getPath()); assertDefaultMetaDataPath(context); assertEquals(classPath, context.getClassPath()); } public void testPredeterminedManagedObjectAttachments() { ContextInfoImpl context = createDefault(); assertEquals("", context.getPath()); AttachmentsImpl ai = new AttachmentsImpl(); ai.addAttachment("key1", "testPredeterminedManagedObjectAttachments"); context.setPredeterminedManagedObjects(ai); String a1 = context.getPredeterminedManagedObjects().getAttachment("key1", String.class); assertEquals("key1 attachment", "testPredeterminedManagedObjectAttachments", a1); } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/test/StructureMetaDataImplUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000000374510640504316033577 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.plugins.structure.ContextInfoImpl; import org.jboss.deployers.plugins.structure.StructureMetaDataImpl; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.test.deployers.structure.AbstractStructureMetaDataTest; /** * StructureMetaDataImplUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureMetaDataImplUnitTestCase extends AbstractStructureMetaDataTest { public static Test suite() { return new TestSuite(StructureMetaDataImplUnitTestCase.class); } public StructureMetaDataImplUnitTestCase(String name) { super(name); } @Override protected StructureMetaDataImpl createDefault() { return new StructureMetaDataImpl(); } @Override protected ContextInfo createContext(String path) { return new ContextInfoImpl(path); } } ././@LongLink0000000000000000000000000000024300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/test/StructureMetaDataFactoryClassPathEntryUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000000430210640504316033565 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.test.deployers.structure.AbstractClassPathEntryTest; /** * StructureMetaDataFactoryClassPathEntryUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureMetaDataFactoryClassPathEntryUnitTestCase extends AbstractClassPathEntryTest { public static Test suite() { return new TestSuite(StructureMetaDataFactoryClassPathEntryUnitTestCase.class); } public StructureMetaDataFactoryClassPathEntryUnitTestCase(String name) { super(name); } @Override protected ClassPathEntry createDefault() { return StructureMetaDataFactory.createClassPathEntry(); } @Override protected ClassPathEntry createPath(String path) { return StructureMetaDataFactory.createClassPathEntry(path); } @Override protected ClassPathEntry createPathAndSuffixes(String path, String suffixes) { return StructureMetaDataFactory.createClassPathEntry(path, suffixes); } } ././@LongLink0000000000000000000000000000024000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/test/StructureMetaDataFactoryContextInfoUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000000554310731616564033607 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.test; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.test.deployers.structure.AbstractContextInfoTest; /** * ContextInfoImplUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureMetaDataFactoryContextInfoUnitTestCase extends AbstractContextInfoTest { public static Test suite() { return new TestSuite(StructureMetaDataFactoryContextInfoUnitTestCase.class); } public StructureMetaDataFactoryContextInfoUnitTestCase(String name) { super(name); } @Override protected ContextInfo createDefault() { return StructureMetaDataFactory.createContextInfo(); } @Override protected ContextInfo createPath(String path) { return StructureMetaDataFactory.createContextInfo(path); } @Override protected ContextInfo createPathAndClassPath(String path, List classPath) { return StructureMetaDataFactory.createContextInfo(path, classPath); } @Override protected ContextInfo createPathAndMetaDataAndClassPath(String path, String metaDataPath, List classPath) { return StructureMetaDataFactory.createContextInfo(path, metaDataPath, classPath); } @Override protected ContextInfo createPathAndMetaDataAndClassPath(String path, List metaDataPath, List classPath) { return StructureMetaDataFactory.createContextInfo(path, metaDataPath, classPath); } @Override protected ClassPathEntry createClassPathEntry(String path) { return StructureMetaDataFactory.createClassPathEntry(path); } } ././@LongLink0000000000000000000000000000023600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/test/StructureMetaDataFactoryStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000000406010640504316033566 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.test.deployers.structure.AbstractStructureMetaDataTest; /** * StructureMetaDataImplUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureMetaDataFactoryStructureUnitTestCase extends AbstractStructureMetaDataTest { public static Test suite() { return new TestSuite(StructureMetaDataFactoryStructureUnitTestCase.class); } public StructureMetaDataFactoryStructureUnitTestCase(String name) { super(name); } @Override protected StructureMetaData createDefault() { return StructureMetaDataFactory.createStructureMetaData(); } @Override protected ContextInfo createContext(String path) { return StructureMetaDataFactory.createContextInfo(path); } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/test/ClassPathEntryImplUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000000651410640504316033574 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.plugins.structure.ClassPathEntryImpl; import org.jboss.test.deployers.structure.AbstractClassPathEntryTest; /** * ClassPathEntryImplUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ClassPathEntryImplUnitTestCase extends AbstractClassPathEntryTest { public static Test suite() { return new TestSuite(ClassPathEntryImplUnitTestCase.class); } public ClassPathEntryImplUnitTestCase(String name) { super(name); } @Override protected ClassPathEntryImpl createDefault() { return new ClassPathEntryImpl(); } @Override protected ClassPathEntryImpl createPath(String path) { return new ClassPathEntryImpl(path); } @Override protected ClassPathEntryImpl createPathAndSuffixes(String path, String suffixes) { return new ClassPathEntryImpl(path, suffixes); } public void testSetPath() { ClassPathEntryImpl entry = createDefault(); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); entry.setPath("path"); assertEquals("path", entry.getPath()); assertNull(entry.getSuffixes()); entry.setPath("changed"); assertEquals("changed", entry.getPath()); assertNull(entry.getSuffixes()); } public void testSetPathErrors() { ClassPathEntryImpl entry = createDefault(); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); try { entry.setPath(null); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testSetSuffixes() { ClassPathEntryImpl entry = createDefault(); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); entry.setSuffixes("suffixes"); assertEquals("", entry.getPath()); assertEquals("suffixes", entry.getSuffixes()); entry.setSuffixes("changed"); assertEquals("", entry.getPath()); assertEquals("changed", entry.getSuffixes()); entry.setSuffixes(null); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/AbstractContextInfoTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000002173010731616564033603 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure; import java.util.List; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; /** * AbstractContextInfoTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractContextInfoTest extends AbstractStructureTest { public AbstractContextInfoTest(String name) { super(name); } protected abstract ContextInfo createDefault(); public void testConstructorDefault() { ContextInfo context = createDefault(); assertDefault(context); } protected abstract ContextInfo createPath(String path); public void testConstructorPath() { ContextInfo context = createPath("path"); assertEquals("path", context.getPath()); assertDefaultNonPath(context); } public void testConstructorErrorsPath() { try { createPath(null); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } protected abstract ContextInfo createPathAndClassPath(String path, List classPath); @Override protected abstract ClassPathEntry createClassPathEntry(String path); public void testConstructorPathAndClassPath() { List classPath = createClassPath("ClassPath"); ContextInfo context = createPathAndClassPath("path", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context); assertEquals(classPath, context.getClassPath()); classPath = null; context = createPathAndClassPath("path", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context); assertNull(context.getClassPath()); } public void testConstructorErrorsPathAndClassPath() { List classPath = createClassPath("ClassPath"); try { createPathAndClassPath(null, classPath); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } protected abstract ContextInfo createPathAndMetaDataAndClassPath(String path, String metaDataPath, List classPath); protected abstract ContextInfo createPathAndMetaDataAndClassPath(String path, List metaDataPath, List classPath); protected static void assertDefaultMetaDataPath(List metaDataPath) { assertEquals(1, metaDataPath.size()); assertEquals("metaDataPath", metaDataPath.get(0)); } public void testConstructorPathAndMetaDataAndClassPath() { List classPath = createClassPath("ClassPath"); ContextInfo context = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context.getMetaDataPath()); assertEquals(classPath, context.getClassPath()); classPath = null; context = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context.getMetaDataPath()); assertNull(context.getClassPath()); } public void testConstructorErrorsPathAndMetaDataPathAndAndClassPath() { List classPath = createClassPath("ClassPath"); try { createPathAndMetaDataAndClassPath(null, "metaData", classPath); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } try { createPathAndMetaDataAndClassPath("path", (String)null, classPath); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testAddClassPath() { ContextInfo context = createPathAndClassPath("", null); assertDefaultPath(context); assertDefaultMetaDataPath(context); assertNull(context.getClassPath()); ClassPathEntry entry1 = createClassPathEntry("path1"); context.addClassPathEntry(entry1); assertDefaultPath(context); assertDefaultMetaDataPath(context); assertClassPath(context, entry1); ClassPathEntry entry2 = createClassPathEntry("path2"); context.addClassPathEntry(entry2); assertDefaultPath(context); assertDefaultMetaDataPath(context); assertClassPath(context, entry1, entry2); } public void testEqualsAndHashCode() { ContextInfo one = createDefault(); ContextInfo two = createDefault(); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); List classPath1 = createClassPath(""); two = createPathAndClassPath("", classPath1); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); classPath1 = createClassPath("classPath"); one = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath1); two = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath1); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); List classPath2 = createClassPath("classPath"); one = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath1); two = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath2); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); one = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath1); two = createPathAndMetaDataAndClassPath("not-path", "metaDataPath", classPath1); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); one = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath1); two = createPathAndMetaDataAndClassPath("path", "not-metaDataPath", classPath1); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); classPath2 = createClassPath("not-classPath"); one = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath1); two = createPathAndMetaDataAndClassPath("Path", "metaDataPath", classPath2); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); one = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath1); two = createPathAndMetaDataAndClassPath("Path", "metaDataPath", null); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); classPath2 = createClassPath("classPath", "notClassPath"); one = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath1); two = createPathAndMetaDataAndClassPath("Path", "metaDataPath", classPath2); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); } public void testSerialization() throws Exception { ContextInfo context = createDefault(); assertDefault(context); context = serializeDeserialize(context, ContextInfo.class); assertDefault(context); List classPath = createClassPath("ClassPath"); context = createPathAndMetaDataAndClassPath("path", "metaDataPath", classPath); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context.getMetaDataPath()); assertEquals(classPath, context.getClassPath()); context = serializeDeserialize(context, ContextInfo.class); assertEquals("path", context.getPath()); assertDefaultMetaDataPath(context.getMetaDataPath()); assertEquals(classPath, context.getClassPath()); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/AbstractClassPathEntryTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000001143610640504316033573 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.test.BaseTestCase; /** * AbstractClassPathEntryTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractClassPathEntryTest extends BaseTestCase { public AbstractClassPathEntryTest(String name) { super(name); } protected abstract ClassPathEntry createDefault(); public void testConstructorDefault() { ClassPathEntry entry = createDefault(); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); } protected abstract ClassPathEntry createPath(String path); public void testConstructorPath() { ClassPathEntry entry = createPath("path"); assertEquals("path", entry.getPath()); assertNull(entry.getSuffixes()); } public void testConstructorErrorsPath() { try { createPath(null); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } protected abstract ClassPathEntry createPathAndSuffixes(String path, String suffixes); public void testConstructorPathAndSuffixes() { ClassPathEntry entry = createPathAndSuffixes("path", "suffixes"); assertEquals("path", entry.getPath()); assertEquals("suffixes", entry.getSuffixes()); entry = createPathAndSuffixes("path", null); assertEquals("path", entry.getPath()); assertNull(entry.getSuffixes()); } public void testConstructorErrorsPathAndSuffixes() { try { createPathAndSuffixes(null, "suffixes"); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testEqualsAndHashCode() { ClassPathEntry one = createDefault(); ClassPathEntry two = createDefault(); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); two = createPathAndSuffixes("", null); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); one = createPathAndSuffixes("path", "suffixes"); two = createPathAndSuffixes("path", "suffixes"); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); one = createPathAndSuffixes("path", "suffixes"); two = createPathAndSuffixes("not-path", "suffixes"); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); one = createPathAndSuffixes("path", "suffixes"); two = createPathAndSuffixes("Path", "not-suffixes"); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); one = createPathAndSuffixes("path", "suffixes"); two = createPathAndSuffixes("Path", null); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); } public void testSerialization() throws Exception { ClassPathEntry entry = createDefault(); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); entry = serializeDeserialize(entry, ClassPathEntry.class); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); entry = createPathAndSuffixes("path", "suffixes"); assertEquals("path", entry.getPath()); assertEquals("suffixes", entry.getSuffixes()); entry = serializeDeserialize(entry, ClassPathEntry.class); assertEquals("path", entry.getPath()); assertEquals("suffixes", entry.getSuffixes()); } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/AbstractStructureMetaDataTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000003103510640504316033570 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; /** * AbstractStructureMetaDataTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractStructureMetaDataTest extends AbstractStructureTest { public AbstractStructureMetaDataTest(String name) { super(name); } protected abstract StructureMetaData createDefault(); protected abstract ContextInfo createContext(String path); protected List getExpected(ContextInfo... expected) { List result = new ArrayList(); if (expected != null) { for (ContextInfo context : expected) result.add(context); } return result; } public void testConstructorDefault() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); } public void testAddContext() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); ContextInfo one = createContext("one"); structure.addContext(one); assertEquals(getExpected(one), structure.getContexts()); assertEquals(one, structure.getContext("one")); } public void testAddContexts() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); ContextInfo one = createContext("one"); ContextInfo two = createContext("two"); ContextInfo three = createContext("three"); structure.addContext(one); structure.addContext(two); structure.addContext(three); assertEquals(getExpected(one, two, three), structure.getContexts()); assertEquals(one, structure.getContext("one")); assertEquals(two, structure.getContext("two")); assertEquals(three, structure.getContext("three")); } public void testAddContextsErrors() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); try { structure.addContext(null); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } ContextInfo one = createContext("one"); structure.addContext(one); try { structure.addContext(one); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalStateException.class, e); } ContextInfo another = createContext("one"); try { structure.addContext(another); fail("Should not be here"); } catch (Exception e) { checkThrowable(IllegalStateException.class, e); } } public void testRemoveContext() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); ContextInfo one = createContext("one"); structure.addContext(one); assertEquals(getExpected(one), structure.getContexts()); assertEquals(one, structure.getContext("one")); structure.removeContext(one); assertEquals(getExpected(), structure.getContexts()); assertNull(structure.getContext("one")); structure.addContext(one); assertEquals(getExpected(one), structure.getContexts()); assertEquals(one, structure.getContext("one")); } public void testRemoveContexts() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); ContextInfo one = createContext("one"); ContextInfo two = createContext("two"); ContextInfo three = createContext("three"); structure.addContext(one); structure.addContext(two); structure.addContext(three); assertEquals(getExpected(one, two, three), structure.getContexts()); assertEquals(one, structure.getContext("one")); assertEquals(two, structure.getContext("two")); assertEquals(three, structure.getContext("three")); structure.removeContext(one); assertEquals(getExpected(two, three), structure.getContexts()); assertNull(structure.getContext("one")); assertEquals(two, structure.getContext("two")); assertEquals(three, structure.getContext("three")); structure.removeContext(two); assertEquals(getExpected(three), structure.getContexts()); assertNull(structure.getContext("one")); assertNull(structure.getContext("two")); assertEquals(three, structure.getContext("three")); structure.removeContext(three); assertEquals(getExpected(), structure.getContexts()); assertNull(structure.getContext("one")); assertNull(structure.getContext("two")); assertNull(structure.getContext("three")); structure.addContext(one); assertEquals(getExpected(one), structure.getContexts()); assertEquals(one, structure.getContext("one")); // Removing a context not present is ok structure.removeContext(two); } public void testRemoveContextErrors() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); try { ContextInfo context = null; structure.removeContext(context); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testRemoveContextByName() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); ContextInfo one = createContext("one"); structure.addContext(one); assertEquals(getExpected(one), structure.getContexts()); assertEquals(one, structure.getContext("one")); structure.removeContext("one"); assertEquals(getExpected(), structure.getContexts()); assertNull(structure.getContext("one")); structure.addContext(one); assertEquals(getExpected(one), structure.getContexts()); assertEquals(one, structure.getContext("one")); } public void testRemoveContextsByName() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); ContextInfo one = createContext("one"); ContextInfo two = createContext("two"); ContextInfo three = createContext("three"); structure.addContext(one); structure.addContext(two); structure.addContext(three); assertEquals(getExpected(one, two, three), structure.getContexts()); assertEquals(one, structure.getContext("one")); assertEquals(two, structure.getContext("two")); assertEquals(three, structure.getContext("three")); structure.removeContext("one"); assertEquals(getExpected(two, three), structure.getContexts()); assertNull(structure.getContext("one")); assertEquals(two, structure.getContext("two")); assertEquals(three, structure.getContext("three")); structure.removeContext("two"); assertEquals(getExpected(three), structure.getContexts()); assertNull(structure.getContext("one")); assertNull(structure.getContext("two")); assertEquals(three, structure.getContext("three")); structure.removeContext("three"); assertEquals(getExpected(), structure.getContexts()); assertNull(structure.getContext("one")); assertNull(structure.getContext("two")); assertNull(structure.getContext("three")); structure.addContext(one); assertEquals(getExpected(one), structure.getContexts()); assertEquals(one, structure.getContext("one")); // Removing a context not present is ok structure.removeContext("two"); } public void testRemoveContextByNameErrors() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); try { String name = null; structure.removeContext(name); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } public void testGetContext() { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); assertNull(structure.getContext("one")); assertNull(structure.getContext("two")); ContextInfo one = createContext("one"); ContextInfo two = createContext("two"); structure.addContext(one); structure.addContext(two); assertEquals(one, structure.getContext("one")); assertEquals(two, structure.getContext("two")); structure.removeContext("one"); assertNull(structure.getContext("one")); assertEquals(two, structure.getContext("two")); structure.removeContext("two"); assertNull(structure.getContext("one")); assertNull(structure.getContext("two")); structure.addContext(one); assertEquals(one, structure.getContext("one")); assertNull(structure.getContext("two")); } public void testEqualsAndHashCode() { StructureMetaData one = createDefault(); StructureMetaData two = createDefault(); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); ContextInfo context1 = createContext("one"); ContextInfo context2 = createContext("two"); one.addContext(context1); two.addContext(context1); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); one.addContext(context2); two.addContext(context2); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); one.removeContext(context2); two.removeContext(context2); ContextInfo another1 = createContext("one"); two.removeContext(context1); two.addContext(another1); assertEquals(one, two); assertEquals(two, one); assertEquals(one.hashCode(), two.hashCode()); two.removeContext(context1); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); two.addContext(context2); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); one = createDefault(); two = createDefault(); one.addContext(context1); one.addContext(context2); two.addContext(context2); two.addContext(context1); assertNotSame(one, two); assertNotSame(two, one); assertNotSame(one.hashCode(), two.hashCode()); } public void testSerialization() throws Exception { StructureMetaData structure = createDefault(); assertEmpty(structure.getContexts()); structure = serializeDeserialize(structure, StructureMetaData.class); assertEmpty(structure.getContexts()); ContextInfo one = createContext("one"); ContextInfo two = createContext("two"); structure.addContext(one); structure.addContext(two); assertEquals(getExpected(one, two), structure.getContexts()); assertEquals(one, structure.getContext("one")); assertEquals(two, structure.getContext("two")); structure = serializeDeserialize(structure, StructureMetaData.class); assertEquals(getExpected(one, two), structure.getContexts()); assertEquals(one, structure.getContext("one")); assertEquals(two, structure.getContext("two")); } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/AbstractStructureTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000000643310731616564033606 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.test.BaseTestCase; /** * AbstractStructureTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractStructureTest extends BaseTestCase { public AbstractStructureTest(String name) { super(name); } protected static void assertDefault(ContextInfo contextInfo) { assertDefaultPath(contextInfo); assertDefaultMetaDataPath(contextInfo); assertDefaultClassPath(contextInfo.getClassPath()); } protected static void assertDefaultPath(ContextInfo contextInfo) { assertEquals("", contextInfo.getPath()); } protected static void assertDefaultNonPath(ContextInfo contextInfo) { assertDefaultMetaDataPath(contextInfo); assertDefaultClassPath(contextInfo.getClassPath()); } protected static void assertDefaultMetaDataPath(ContextInfo contextInfo) { assertNotNull(contextInfo); assertNotNull(contextInfo.getMetaDataPath()); assertTrue(contextInfo.getMetaDataPath().isEmpty()); } protected static void assertDefaultClassPath(List classPath) { assertNotNull(classPath); assertEquals(1, classPath.size()); ClassPathEntry entry = classPath.get(0); assertNotNull(entry); assertEquals("", entry.getPath()); assertNull(entry.getSuffixes()); } protected static void assertClassPath(ContextInfo context, ClassPathEntry... paths) { List classPath = new ArrayList(); if (paths != null) { for (ClassPathEntry entry : paths) classPath.add(entry); } assertEquals(classPath, context.getClassPath()); } protected List createClassPath(String... paths) { List result = new ArrayList(); if (paths != null) { for (String path : paths) result.add(createClassPathEntry(path)); } return result; } protected ClassPathEntry createClassPathEntry(String path) { throw new UnsupportedOperationException(); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structure/StructureMetaDataTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/test/java/org/jboss/test/deployers/structur0000644000175000017500000000466510640504316033601 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.structure; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.structure.test.ClassPathEntryImplUnitTestCase; import org.jboss.test.deployers.structure.test.ContextInfoImplUnitTestCase; import org.jboss.test.deployers.structure.test.StructureMetaDataFactoryClassPathEntryUnitTestCase; import org.jboss.test.deployers.structure.test.StructureMetaDataFactoryContextInfoUnitTestCase; import org.jboss.test.deployers.structure.test.StructureMetaDataFactoryStructureUnitTestCase; import org.jboss.test.deployers.structure.test.StructureMetaDataImplUnitTestCase; /** * StructureMetaData Test Suite. * * @author Adrian Brock * @version $Revision: 37459 $ */ public class StructureMetaDataTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("StructureMetaData Tests"); suite.addTest(ClassPathEntryImplUnitTestCase.suite()); suite.addTest(ContextInfoImplUnitTestCase.suite()); suite.addTest(StructureMetaDataImplUnitTestCase.suite()); suite.addTest(StructureMetaDataFactoryClassPathEntryUnitTestCase.suite()); suite.addTest(StructureMetaDataFactoryContextInfoUnitTestCase.suite()); suite.addTest(StructureMetaDataFactoryStructureUnitTestCase.suite()); return suite; } } libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/0000755000175000017500000000000011620060464024100 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/0000755000175000017500000000000011620060464025021 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/0000755000175000017500000000000011620060464025610 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/0000755000175000017500000000000011620060464026730 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060464030736 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/0000755000175000017500000000000011620060465032420 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/attachments/libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/attac0000755000175000017500000000000011620060465033435 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/attachments/AttachmentsImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/attac0000644000175000017500000001034210640504316033436 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.attachments; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.Collections; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import org.jboss.deployers.spi.attachments.helpers.AbstractMutableAttachments; /** * Attachments implementation * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class AttachmentsImpl extends AbstractMutableAttachments { /** The serialVersionUID */ private static final long serialVersionUID = 8078990023620470935L; /** The attachments */ private Map attachments = new ConcurrentHashMap(); /** The number of changes since construction or clearing of the change count */ private AtomicInteger changeCount = new AtomicInteger(); public Map getAttachments() { return Collections.unmodifiableMap(attachments); } @Override public void setAttachments(Map map) { if (map == null) throw new IllegalArgumentException("Null map"); attachments.clear(); attachments.putAll(map); changeCount.addAndGet(map.size()); } public Object addAttachment(String name, Object attachment) { if (name == null) throw new IllegalArgumentException("Null name"); if (attachment == null) throw new IllegalArgumentException("Null attachment"); Object value = attachments.put(name, attachment); changeCount.incrementAndGet(); return value; } public Object getAttachment(String name) { if (name == null) throw new IllegalArgumentException("Null name"); return attachments.get(name); } public boolean isAttachmentPresent(String name) { if (name == null) throw new IllegalArgumentException("Null name"); return attachments.containsKey(name); } public Object removeAttachment(String name) { if (name == null) throw new IllegalArgumentException("Null name"); Object value = attachments.remove(name); changeCount.incrementAndGet(); return value; } public void clear() { attachments.clear(); changeCount.incrementAndGet(); } public boolean hasAttachments() { return attachments.isEmpty() == false; } public int getChangeCount() { return changeCount.intValue(); } public void clearChangeCount() { changeCount.set(0); } @Override public String toString() { return attachments.toString(); } @SuppressWarnings("unchecked") public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); setAttachments((Map) in.readObject()); changeCount.set(in.read()); } /** * @serialData attachments from {@link #getAttachments()} * @serialData changeCount from {@link #getChangeCount()} * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); out.writeObject(getAttachments()); out.write(changeCount.get()); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/attachments/DefaultAttachmentsFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/attac0000644000175000017500000000321010640504316033432 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.attachments; import org.jboss.deployers.spi.attachments.Attachments; import org.jboss.deployers.spi.attachments.AttachmentsFactory; import org.jboss.deployers.spi.attachments.MutableAttachments; /** * DefaultAttachmentsBuilder. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DefaultAttachmentsFactory extends AttachmentsFactory { @Override public Attachments newAttachments() { return new AttachmentsImpl(); } @Override public MutableAttachments newMutableAttachments() { return new AttachmentsImpl(); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/struc0000755000175000017500000000000011620060465033501 5ustar twernertwerner././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/DefaultStructureMetaDataFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/struc0000644000175000017500000000457310731616564033525 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.structure; import java.util.List; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; /** * DefaultStructureMetaDataFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DefaultStructureMetaDataFactory extends StructureMetaDataFactory { protected StructureMetaData newStructureMetaData() { return new StructureMetaDataImpl(); } protected ContextInfo newContextInfo(String path) { return new ContextInfoImpl(path); } protected ContextInfo newContextInfo(String path, List classPath) { return new ContextInfoImpl(path, classPath); } protected ContextInfo newContextInfo(String path, String metaDataPath, List classPath) { return new ContextInfoImpl(path, metaDataPath, classPath); } protected ContextInfo newContextInfo(String path, List metaDataPath, List classPath) { return new ContextInfoImpl(path, metaDataPath, classPath); } protected ClassPathEntry newClassPathEntry(String path, String suffixes) { return new ClassPathEntryImpl(path, suffixes); } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/ClassPathEntryImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/struc0000644000175000017500000001152410640504316033505 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.structure; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.Collections; import java.util.List; import org.jboss.deployers.spi.structure.ClassPathEntry; /** * ClassPathEntry. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ClassPathEntryImpl implements ClassPathEntry, Externalizable { /** The serialVersionUID */ private static final long serialVersionUID = -6463413458528845538L; /** The default classpath */ static final List DEFAULT = Collections.singletonList((ClassPathEntry) new ClassPathEntryImpl()); /** The path */ private String path; /** The suffixes */ private String suffixes; /** * Create a new ClassPathEntryImpl. */ public ClassPathEntryImpl() { setPath(""); } /** * Create a new ClassPathEntryImpl. * * @param path the path * @throws IllegalArgumentException for a null path */ public ClassPathEntryImpl(String path) { setPath(path); } /** * Create a new ClassPathEntryImpl. * * @param path the path * @param suffixes the suffixes * @throws IllegalArgumentException for a null path */ public ClassPathEntryImpl(String path, String suffixes) { setPath(path); setSuffixes(suffixes); } public String getPath() { return path; } /** * Set the path. * * @param path the path. * @throws IllegalArgumentException for a null path */ public void setPath(String path) { if (path == null) throw new IllegalArgumentException("Null path"); this.path = path; } public String getSuffixes() { return suffixes; } /** * Set the suffixes. * * @param suffixes the suffixes. */ public void setSuffixes(String suffixes) { this.suffixes = suffixes; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(getClass().getSimpleName()); builder.append("{"); toString(builder); builder.append("}"); return builder.toString(); } /** * For subclasses to override toString() * * @param builder the builder */ protected void toString(StringBuilder builder) { builder.append("path=").append(getPath()); String suffixes = getSuffixes(); if (suffixes != null) builder.append(" suffixes=").append(suffixes); } @Override public boolean equals(Object obj) { if (obj == this) return true; if (obj == null || obj instanceof ClassPathEntry == false) return false; ClassPathEntry other = (ClassPathEntry) obj; if (getPath().equals(other.getPath()) == false) return false; String thisSuffixes = getSuffixes(); String otherSuffixes = other.getSuffixes(); if (thisSuffixes == null) return otherSuffixes == null; return thisSuffixes.equals(otherSuffixes); } @Override public int hashCode() { return getPath().hashCode(); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { setPath(in.readUTF()); boolean hasSuffixes = in.readBoolean(); if (hasSuffixes) setSuffixes(in.readUTF()); } /** * @serialData path from {@link #getPath()} * @serialData suffixes from {@link #getSuffixes()} * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { out.writeUTF(getPath()); String suffixes = getSuffixes(); out.writeBoolean(suffixes != null); if (suffixes != null) out.writeUTF(suffixes); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/StructureMetaDataImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/struc0000644000175000017500000001121510645774131033513 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.structure; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; /** * StructureMetaDataImpl. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureMetaDataImpl implements StructureMetaData, Externalizable { /** The serialVersionUID */ private static final long serialVersionUID = 2341637762171510800L; /** The contexts */ private List contexts = new CopyOnWriteArrayList(); public void addContext(ContextInfo context) { if (context == null) throw new IllegalArgumentException("Null context"); String path = context.getPath(); if (path == null) throw new IllegalArgumentException("Context has no path"); for (ContextInfo other : contexts) { if (path.equals(other.getPath())) throw new IllegalStateException("Context already exists with path '" + path + "' contexts=" + getContexts()); } contexts.add(context); } public ContextInfo getContext(String path) { if (path == null) throw new IllegalArgumentException("Null path"); for (ContextInfo context : contexts) { if (path.equals(context.getPath())) return context; } return null; } public void removeContext(ContextInfo context) { if (context == null) throw new IllegalArgumentException("Null context"); contexts.remove(context); } public void removeContext(String path) { if (path == null) throw new IllegalArgumentException("Null path"); for (ContextInfo context : contexts) { if (path.equals(context.getPath())) contexts.remove(context); } } public List getContexts() { return contexts; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(getClass().getSimpleName()); builder.append("{"); toString(builder); builder.append("}"); return builder.toString(); } /** * For subclasses to override toString() * * @param builder the builder */ protected void toString(StringBuilder builder) { builder.append("contexts=").append(contexts); } @Override public boolean equals(Object obj) { if (obj == this) return true; if (obj == null || obj instanceof StructureMetaData == false) return false; StructureMetaData other = (StructureMetaData) obj; List thisContexts = getContexts(); List otherContexts = other.getContexts(); if (thisContexts == null) return otherContexts == null; return thisContexts.equals(otherContexts); } @Override public int hashCode() { List contexts = getContexts(); if (contexts == null) return 0; return contexts.hashCode(); } @SuppressWarnings("unchecked") public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { contexts = (List) in.readObject(); } /** * @serialData context from {@link #getContexts()} * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(getContexts()); } } ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/ContextInfoImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/struc0000644000175000017500000002304711137607542033517 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.structure; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jboss.deployers.spi.attachments.helpers.PredeterminedManagedObjectAttachmentsImpl; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.ModificationType; /** * ContextInfoImpl. * * @author Adrian Brock * @author Ales Justin * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public class ContextInfoImpl extends PredeterminedManagedObjectAttachmentsImpl implements ContextInfo, Externalizable { /** The serialVersionUID */ private static final long serialVersionUID = -4384869824260284607L; /** The logical path */ private String path; /** The metadata path */ private List metaDataPath; /** The class path entries */ private List classPath = ClassPathEntryImpl.DEFAULT; private int relativeOrder = 0; /** The comparator class name */ private String comparatorClassName; /** The modification type */ private ModificationType modificationType; /** * Create a new ContextInfoImpl. */ public ContextInfoImpl() { setPath(""); } /** * Create a new ContextInfoImpl. * * @param path the path * @throws IllegalArgumentException for a null path */ public ContextInfoImpl(String path) { setPath(path); } /** * Create a new ContextInfoImpl. * * @param path the path * @param classPath the classpath * @throws IllegalArgumentException for a null path */ public ContextInfoImpl(String path, List classPath) { setPath(path); setClassPath(classPath); } /** * Create a new ContextInfoImpl. * * @param path the path * @param metaDataPath a single metadata path * @param classPath the class path * @throws IllegalArgumentException for a null path or metadata path */ public ContextInfoImpl(String path, String metaDataPath, List classPath) { setPath(path); if (metaDataPath == null) throw new IllegalArgumentException("Null metadata path."); setMetaDataPath(Collections.singletonList(metaDataPath)); setClassPath(classPath); } /** * Create a new ContextInfoImpl. * * @param path the path * @param metaDataPath the metadata paths * @param classPath the class path * @throws IllegalArgumentException for a null path or metadata path */ public ContextInfoImpl(String path, List metaDataPath, List classPath) { setPath(path); setMetaDataPath(metaDataPath); setClassPath(classPath); } public String getPath() { return path; } /** * Set the path. * * @param path the path. * @throws IllegalArgumentException for a null path */ public void setPath(String path) { if (path == null) throw new IllegalArgumentException("Null path"); this.path = path; } public List getMetaDataPath() { if (metaDataPath == null) return Collections.emptyList(); return metaDataPath; } /** * Set the meta data paths. * * @param metaDataPath the meta data paths */ public void setMetaDataPath(List metaDataPath) { this.metaDataPath = metaDataPath; } public void addMetaDataPath(String path) { if (path == null) throw new IllegalArgumentException("Null path"); if (metaDataPath == null) metaDataPath = Collections.singletonList(path); else if (metaDataPath.size() == 1) { List paths = new ArrayList(); paths.addAll(metaDataPath); paths.add(path); metaDataPath = paths; } else metaDataPath.add(path); } public List getClassPath() { return classPath; } /** * Set the classPath. * * @param classPath the classPath. */ public void setClassPath(List classPath) { this.classPath = classPath; } public void addClassPathEntry(ClassPathEntry entry) { if (entry == null) throw new IllegalArgumentException("Null entry"); if (classPath == null || classPath == ClassPathEntryImpl.DEFAULT) { List old = classPath; classPath = new ArrayList(); if (old != null) classPath.addAll(old); } classPath.add(entry); } public String getComparatorClassName() { return comparatorClassName; } public void setComparatorClassName(String className) { this.comparatorClassName = className; } public int getRelativeOrder() { return relativeOrder; } public void setRelativeOrder(int relativeOrder) { this.relativeOrder = relativeOrder; } public ModificationType getModificationType() { return modificationType; } public void setModificationType(ModificationType modificationType) { this.modificationType = modificationType; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(getClass().getSimpleName()); builder.append("{"); toString(builder); builder.append("}"); return builder.toString(); } /** * For subclasses to override toString() * * @param builder the builder */ protected void toString(StringBuilder builder) { builder.append("path=").append(getPath()); builder.append(" metaData=").append(getMetaDataPath()); builder.append(" classPath=").append(getClassPath()); if (relativeOrder != 0) builder.append(" relativeOrder=").append(getRelativeOrder()); if (comparatorClassName != null) builder.append(" comparator=").append(getComparatorClassName()); if (modificationType != null) builder.append(" modification=").append(modificationType); } @Override public boolean equals(Object obj) { if (obj == this) return true; if (obj == null || obj instanceof ContextInfo == false) return false; ContextInfo other = (ContextInfo) obj; if (getPath().equals(other.getPath()) == false) return false; List thisMetaDataPath = getMetaDataPath(); List otherMetaDataPath = other.getMetaDataPath(); if (thisMetaDataPath.equals(otherMetaDataPath) == false) return false; List thisClassPath = getClassPath(); List otherClassPath = other.getClassPath(); if (thisClassPath == null) return otherClassPath == null; return thisClassPath.equals(otherClassPath); } @Override public int hashCode() { return getPath().hashCode(); } @SuppressWarnings("unchecked") public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); setPath(in.readUTF()); boolean isEmptyMetaDataPath = in.readBoolean(); if (isEmptyMetaDataPath == false) setMetaDataPath((List)in.readObject()); setClassPath((List) in.readObject()); setRelativeOrder(in.readInt()); boolean isNullComparator = in.readBoolean(); if (isNullComparator == false) setComparatorClassName(in.readUTF()); } /** * @serialData path from {@link #getPath()} * @serialData metaDataPath from {@link #getMetaDataPath()} * @serialData classPath from {@link #getClassPath()} * @param out the output * @throws IOException for any error */ public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); out.writeUTF(getPath()); List metaDataPath = getMetaDataPath(); boolean isEmptyMetaDataPath = metaDataPath.isEmpty(); out.writeBoolean(isEmptyMetaDataPath); if (isEmptyMetaDataPath == false) out.writeObject(metaDataPath); out.writeObject(getClassPath()); out.writeInt(getRelativeOrder()); String comparator = getComparatorClassName(); boolean isNullComparator = (comparator == null); out.writeBoolean(isNullComparator); if (isNullComparator == false) out.writeUTF(comparator); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/helpers/libjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/helpe0000755000175000017500000000000011620060465033436 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/helpers/OrderedImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-core/src/main/java/org/jboss/deployers/plugins/helpe0000644000175000017500000000267110640504316033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.plugins.helpers; import org.jboss.deployers.spi.Ordered; /** * OrderedImpl. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class OrderedImpl implements Ordered { /** The order */ private int order; public int getRelativeOrder() { return order; } public void setRelativeOrder(int order) { this.order = order; } } libjboss-deployers-java-2.0.4.GA.orig/deployers-core/.settings/0000755000175000017500000000000011620060465024304 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-core/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740031301 0ustar twernertwerner#Fri Sep 21 17:49:17 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-core/.project0000644000175000017500000000061111071370224024030 0ustar twernertwerner jboss-deployers-core JBoss Deployers Core jboss-deployers-core-spi org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/0000755000175000017500000000000011620060460022227 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/.classpath0000644000175000017500000001400011113263640024207 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/pom.xml0000644000175000017500000001271011137607542023560 0ustar twernertwerner org.jboss.deployers jboss-deployers 2.0.4.GA 4.0.0 jboss-deployers-vfs jar JBoss Deployers VFS http://www.jboss.com/products/jbossmc JBoss Deployers VFS org.apache.maven.plugins maven-surefire-plugin org.jboss.deployers jboss-deployers-vfs-spi org.jboss.microcontainer jboss-kernel org.jboss.cl jboss-classloading-vfs org.jboss.microcontainer jboss-kernel org.jboss jboss-vfs org.jboss.cl jboss-classloading org.jboss.deployers jboss-deployers-core org.jboss.deployers jboss-deployers-core-spi org.jboss.logging jboss-logging-spi org.jboss.deployers jboss-deployers-client org.jboss.deployers jboss-deployers-client-spi org.jboss.deployers jboss-deployers-impl org.jboss.deployers jboss-deployers-spi org.jboss.microcontainer jboss-kernel org.jboss.cl jboss-classloading org.jboss.deployers jboss-deployers-client test-jar test org.jboss.deployers jboss-deployers-client-spi org.jboss.deployers jboss-deployers-structure-spi test-jar test org.jboss.deployers jboss-deployers-client-spi org.jboss.microcontainer jboss-dependency org.jboss.logging jboss-logging-spi org.jboss.deployers jboss-deployers-impl test-jar test org.jboss.deployers jboss-deployers-spi org.jboss.microcontainer jboss-kernel org.jboss.cl jboss-classloading org.jboss.logging jboss-logging-log4j test org.jboss.test jboss-test test junit junit test libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/0000755000175000017500000000000011620060456023023 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/0000755000175000017500000000000011620060444023777 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/0000755000175000017500000000000011620060456026014 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/0000755000175000017500000000000011620060456026721 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/toplevel/0000755000175000017500000000000011620060456030553 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/toplevel/my-beans.xml0000644000175000017500000000030010640504614033001 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/toplevel/test.jar/0000755000175000017500000000000011620060456032305 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/toplevel/test.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/toplevel/test.jar/META-I0000755000175000017500000000000011620060456033142 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/toplevel/test.jar/META-INF/my-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/toplevel/test.jar/META-I0000644000175000017500000000030010640504614033135 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/0000755000175000017500000000000011620060456032072 5ustar twernertwerner././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/META-INF0000755000175000017500000000000011620060456033153 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/META-INF/override-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/META-INF0000644000175000017500000000047011014304527033153 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/0000755000175000017500000000000011620060456032661 5ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000755000175000017500000000000011620060456033537 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000755000175000017500000000000011620060456033537 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/test/deployers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000755000175000017500000000000011620060456033537 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/test/deployers/vfs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000755000175000017500000000000011620060456033537 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/test/deployers/vfs/deployer/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000755000175000017500000000000011620060456033537 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/test/deployers/vfs/deployer/bean/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000755000175000017500000000000011620060456033537 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/test/deployers/vfs/deployer/bean/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000755000175000017500000000000011620060456033537 5ustar twernertwerner././@LongLink0000000000000000000000000000026100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/test/deployers/vfs/deployer/bean/support/BeanFactoryAnnotationHolder.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000644000175000017500000000117111014304527033536 0ustar twernertwernerÊþº¾1 ()VCodeLineNumberTableLocalVariableTablethisPLorg/jboss/test/deployers/vfs/deployer/bean/support/BeanFactoryAnnotationHolder; SourceFile BeanFactoryAnnotationHolder.javaRuntimeVisibleAnnotations6Lorg/jboss/beans/metadata/api/annotations/BeanFactory;nameTestBFaliasesBFAT1BFAT2 accessMode)Lorg/jboss/beans/info/spi/BeanAccessMode;ALL Norg/jboss/test/deployers/vfs/deployer/bean/support/BeanFactoryAnnotationHolderjava/lang/Object!/*·±$    s[sse././@LongLink0000000000000000000000000000025200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jboss/test/deployers/vfs/deployer/bean/support/BeanAnnotationHolder.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_w_override/org/jbos0000644000175000017500000000112711014304527033537 0ustar twernertwernerÊþº¾1 ()VCodeLineNumberTableLocalVariableTablethisILorg/jboss/test/deployers/vfs/deployer/bean/support/BeanAnnotationHolder; SourceFileBeanAnnotationHolder.javaRuntimeVisibleAnnotations/Lorg/jboss/beans/metadata/api/annotations/Bean;nameTestaliasesAT1AT2 accessMode)Lorg/jboss/beans/info/spi/BeanAccessMode;ALL Gorg/jboss/test/deployers/vfs/deployer/bean/support/BeanAnnotationHolderjava/lang/Object!/*·±#    s[sselibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/0000755000175000017500000000000011620060456032240 5ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/META-IN0000755000175000017500000000000011620060456033213 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/META-INF/empyt.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/META-IN0000644000175000017500000000000011014304527033200 0ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/0000755000175000017500000000000011620060456033027 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000755000175000017500000000000011620060456033522 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000755000175000017500000000000011620060456033522 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/test/deployers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000755000175000017500000000000011620060456033522 5ustar twernertwerner././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/test/deployers/vfs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000755000175000017500000000000011620060456033522 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/test/deployers/vfs/deployer/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000755000175000017500000000000011620060456033522 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/test/deployers/vfs/deployer/bean/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000755000175000017500000000000011620060456033522 5ustar twernertwerner././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/test/deployers/vfs/deployer/bean/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000755000175000017500000000000011620060456033522 5ustar twernertwerner././@LongLink0000000000000000000000000000026200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/test/deployers/vfs/deployer/bean/support/BeanFactoryAnnotationHolder.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000644000175000017500000000117111014304527033521 0ustar twernertwernerÊþº¾1 ()VCodeLineNumberTableLocalVariableTablethisPLorg/jboss/test/deployers/vfs/deployer/bean/support/BeanFactoryAnnotationHolder; SourceFile BeanFactoryAnnotationHolder.javaRuntimeVisibleAnnotations6Lorg/jboss/beans/metadata/api/annotations/BeanFactory;nameTestBFaliasesBFAT1BFAT2 accessMode)Lorg/jboss/beans/info/spi/BeanAccessMode;ALL Norg/jboss/test/deployers/vfs/deployer/bean/support/BeanFactoryAnnotationHolderjava/lang/Object!/*·±$    s[sse././@LongLink0000000000000000000000000000025300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jboss/test/deployers/vfs/deployer/bean/support/BeanAnnotationHolder.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/scan_no_override/org/jbo0000644000175000017500000000112711014304527033522 0ustar twernertwernerÊþº¾1 ()VCodeLineNumberTableLocalVariableTablethisILorg/jboss/test/deployers/vfs/deployer/bean/support/BeanAnnotationHolder; SourceFileBeanAnnotationHolder.javaRuntimeVisibleAnnotations/Lorg/jboss/beans/metadata/api/annotations/Bean;nameTestaliasesAT1AT2 accessMode)Lorg/jboss/beans/info/spi/BeanAccessMode;ALL Gorg/jboss/test/deployers/vfs/deployer/bean/support/BeanAnnotationHolderjava/lang/Object!/*·±#    s[sselibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/0000755000175000017500000000000011620060456030554 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/specrar.jar/0000755000175000017500000000000011620060456032766 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/specrar.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/specrar.jar/MET0000755000175000017500000000000011620060456033334 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/specrar.jar/META-INF/rar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/specrar.jar/MET0000644000175000017500000000102611016502072033327 0ustar twernertwerner JBoss LocalTransaction JDBC Wrapper Resource Adapter java.lang.String libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/test.jar/0000755000175000017500000000000011620060456032306 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/test.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/test.jar/META-I0000755000175000017500000000000011620060456033143 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/test.jar/META-INF/snd-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/test.jar/META-I0000644000175000017500000000030610774162175033156 0ustar twernertwerner ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/test.jar/META-INF/first-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/test.jar/META-I0000644000175000017500000000030610774162175033156 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/jbossrar.jar/0000755000175000017500000000000011620060456033154 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/jbossrar.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/jbossrar.jar/ME0000755000175000017500000000000011620060456033376 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/jbossrar.jar/META-INF/jboss-rar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/jbossrar.jar/ME0000644000175000017500000000104611016502072033373 0ustar twernertwerner JBoss LocalTransaction JDBC Wrapper Resource Adapter java.lang.StringBuilder libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/0000755000175000017500000000000011620060456033166 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/ME0000755000175000017500000000000011620060456033410 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/META-INF/alias.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/ME0000644000175000017500000000016211016755730033416 0ustar twernertwerner Alias1 ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/META-INF/jboss-rar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/ME0000644000175000017500000000100511016755730033413 0ustar twernertwerner JBoss LocalTransaction JDBC Wrapper Resource Adapter java.lang.Object ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/META-INF/rar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/ME0000644000175000017500000000076411016755730033426 0ustar twernertwerner JBoss LocalTransaction JDBC Wrapper Resource Adapter ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/META-INF/alias-ext.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/multirar.jar/ME0000644000175000017500000000016211016755730033416 0ustar twernertwerner Alias2 libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/allrar.jar/0000755000175000017500000000000011620060456032604 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/allrar.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/allrar.jar/META0000755000175000017500000000000011620060456033253 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/allrar.jar/META-INF/jboss-rar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/allrar.jar/META0000644000175000017500000000100511016502072033243 0ustar twernertwerner JBoss LocalTransaction JDBC Wrapper Resource Adapter java.lang.Object ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/allrar.jar/META-INF/rar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bean/multiple/allrar.jar/META0000644000175000017500000000076411016502072033256 0ustar twernertwerner JBoss LocalTransaction JDBC Wrapper Resource Adapter libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/0000755000175000017500000000000011620060456027622 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/beanshell.jar/0000755000175000017500000000000011620060456032332 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/beanshell.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/beanshell.jar/META-I0000755000175000017500000000000011620060456033167 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/beanshell.jar/META-INF/some.bshlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/beanshell.jar/META-I0000644000175000017500000000001210757641060033170 0ustar twernertwerner#BeanShelllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/toplevel/0000755000175000017500000000000011620060456031454 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/toplevel/script.bsh0000644000175000017500000000003510760546324033463 0ustar twernertwernerObject object = new Object();././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/toplevel/my-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/toplevel/my-beans.xm0000644000175000017500000000023410760546324033543 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/toplevel/dunno.txt0000644000175000017500000000001710760546324033345 0ustar twernertwernerNot recognized.libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/qwert.beans/0000755000175000017500000000000011620060456032053 5ustar twernertwerner././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/qwert.beans/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/qwert.beans/META-INF0000755000175000017500000000000011620060456033134 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/qwert.beans/META-INF/some-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/qwert.beans/META-INF0000644000175000017500000000023410757641060033143 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/some.rhts0000644000175000017500000000020410757641060031471 0ustar twernertwernerPK ËsV8META-INF/some.jbsPK ËsV8 META-INF/some.jbsPK?/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/some.jbss0000644000175000017500000000020410757641060031452 0ustar twernertwernerPK ÃsV8META-INF/some.rhtPK ÃsV8 META-INF/some.rhtPK?/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/matchers/some.xyz0000644000175000017500000000020410757641060031343 0ustar twernertwernerPK ËsV8META-INF/some.jbsPK ËsV8 META-INF/some.jbsPK?/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/0000755000175000017500000000000011620060454030306 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment2/0000755000175000017500000000000011620060454032550 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment2/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment2/META-0000755000175000017500000000000011620060454033274 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment2/META-INF/jboss-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment2/META-0000644000175000017500000000035210757303634033310 0ustar twernertwerner ${test.classloader.url}/external-deployment2 libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/0000755000175000017500000000000011620060454032551 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/a/0000755000175000017500000000000011620060454032771 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/a/b/0000755000175000017500000000000011620060454033212 5ustar twernertwerner././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/a/b/c/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/a/b/c0000755000175000017500000000000011620060454033355 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/a/b/c/test-resource-deployment3libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/a/b/c0000644000175000017500000000000510757303634033364 0ustar twernertwernerempty././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/META-0000755000175000017500000000000011620060454033275 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment3/META-0000644000175000017500000000024210757303634033307 0ustar twernertwerner ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classloader/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classl0000755000175000017500000000000011620060454033511 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classloader/sub/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classl0000755000175000017500000000000011620060454033511 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classloader/sub/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classl0000755000175000017500000000000011620060454033511 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classloader/sub/META-INF/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classl0000644000175000017500000000000510761233255033514 0ustar twernertwernerempty././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classloader/sub/test-resource-sub-no-classloaderlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classl0000644000175000017500000000000510761233255033514 0ustar twernertwernerempty././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classloader/test-resource-top-no-classloaderlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-no-classl0000644000175000017500000000000510761233255033514 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment1/0000755000175000017500000000000011620060454032547 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment1/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment1/META-0000755000175000017500000000000011620060454033273 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment1/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment1/META-0000644000175000017500000000021310757303634033303 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment4/0000755000175000017500000000000011620060454032552 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment4/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment4/META-0000755000175000017500000000000011620060454033276 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment4/META-INF/jboss-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment4/META-0000644000175000017500000000043610757303634033315 0ustar twernertwerner ${test.classloader.url}/external-deployment2 libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/0000755000175000017500000000000011620060454032631 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/metadata/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/metad0000755000175000017500000000000011620060454033644 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/metadata/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/metad0000755000175000017500000000000011620060454033644 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/metadata/META-INF/metadata-touch-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/metad0000644000175000017500000000024211042465226033650 0ustar twernertwerner ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/0000755000175000017500000000000011620060454033565 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/0000755000175000017500000000000011620060454033565 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/META-INF/jboss-structure.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/0000644000175000017500000000021711042465226033573 0ustar twernertwerner ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/data/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/0000755000175000017500000000000011620060454033565 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/data/path-touch-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/integration/path/0000644000175000017500000000024211042465226033571 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/0000755000175000017500000000000011620060454032114 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scopednotparent/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scopedno0000755000175000017500000000000011620060454033647 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scopednotparent/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scopedno0000755000175000017500000000000011620060454033647 5ustar twernertwerner././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scopednotparent/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scopedno0000644000175000017500000000020211037647060033651 0ustar twernertwerner ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scopednotparent/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scopedno0000644000175000017500000000007411037647060033660 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand Class-Path: util.jar ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/dummyparent/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/dummypar0000755000175000017500000000000011620060454033673 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/dummyparent/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/dummypar0000755000175000017500000000000011620060454033673 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/dummyparent/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/dummypar0000644000175000017500000000013711037647060033704 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scoped/0000755000175000017500000000000011620060454033371 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scoped/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scoped/M0000755000175000017500000000000011620060454033506 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scoped/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scoped/M0000644000175000017500000000017311037647060033517 0ustar twernertwerner ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scoped/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/scoped/M0000644000175000017500000000007411037647060033517 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand Class-Path: util.jar libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/basic/0000755000175000017500000000000011620060454033175 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/basic/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/basic/ME0000755000175000017500000000000011620060454033417 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/basic/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/basic/ME0000644000175000017500000000007411037647060033430 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand Class-Path: util.jar ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/topscoped/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/topscope0000755000175000017500000000000011620060454033671 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/topscoped/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/topscope0000755000175000017500000000000011620060454033671 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/topscoped/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/manifest/topscope0000644000175000017500000000013611037647060033701 0ustar twernertwerner ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployment2/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployme0000755000175000017500000000000011620060454033665 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployment2/a/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployme0000755000175000017500000000000011620060454033665 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployment2/a/b/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployme0000755000175000017500000000000011620060454033665 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployment2/a/b/c/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployme0000755000175000017500000000000011620060454033665 5ustar twernertwerner././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployment2/a/b/c/test-resource-external-deployment2libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/external-deployme0000644000175000017500000000000510757303634033674 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment0/0000755000175000017500000000000011620060454032546 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment0/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment0/META-0000755000175000017500000000000011620060454033272 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment0/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment0/META-0000644000175000017500000000012510757515224033304 0ustar twernertwerner ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classloader/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classload0000755000175000017500000000000011620060454033563 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classloader/test-resource-top-classloaderlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classload0000644000175000017500000000000510761233255033566 0ustar twernertwernerempty././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classloader/sub/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classload0000755000175000017500000000000011620060454033563 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classloader/sub/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classload0000755000175000017500000000000011620060454033563 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classloader/sub/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classload0000644000175000017500000000011110761233255033564 0ustar twernertwerner ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classloader/sub/test-resource-sub-classloaderlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/top-sub-classload0000644000175000017500000000000510761233255033566 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/0000755000175000017500000000000011620060454032553 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/a/0000755000175000017500000000000011620060454032773 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/a/b/0000755000175000017500000000000011620060454033214 5ustar twernertwerner././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/a/b/c/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/a/b/c0000755000175000017500000000000011620060454033357 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/a/b/c/test-resource-deployment5libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/a/b/c0000644000175000017500000000000510757303634033366 0ustar twernertwernerempty././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/META-0000755000175000017500000000000011620060454033277 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment5/META-0000644000175000017500000000024210757303634033311 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment6/0000755000175000017500000000000011620060454032554 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment6/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment6/META-0000755000175000017500000000000011620060454033300 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment6/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/classloader/deployment6/META-0000644000175000017500000000021310757303634033310 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/0000755000175000017500000000000011620060444027571 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/0000755000175000017500000000000011620060444031423 5ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.ja0000755000175000017500000000000011620060444033515 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.ja0000755000175000017500000000000011620060444033515 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.jar/META-INF/jboss-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.ja0000644000175000017500000000000510640504614033515 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.jar/META-INF/1-ds.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.ja0000644000175000017500000000000510640504614033515 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.jar/META-INF/2-ds.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata.ja0000644000175000017500000000000510640504614033515 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/exact/0000755000175000017500000000000011620060444032527 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/exact/jboss-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/exact/jboss0000644000175000017500000000000510640504614033570 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/partial/0000755000175000017500000000000011620060444033057 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/partial/mydb-ds.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/partial/myd0000644000175000017500000000000510640504614033571 0ustar twernertwernerempty././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata-nometainf.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata-no0000755000175000017500000000000011620060444033536 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata-nometainf.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/metadata/toplevel/metadata-no0000644000175000017500000000000510640504614033536 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/0000755000175000017500000000000011620060444027577 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/0000755000175000017500000000000011620060444031070 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ext/0000755000175000017500000000000011620060444031670 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ext/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ext/META-INF/0000755000175000017500000000000011620060444033030 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ext/META-INF/web-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ext/META-INF/0000644000175000017500000000003311113261537033031 0ustar twernertwerner ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ext/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ext/META-INF/0000644000175000017500000000004711113261537033036 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/jar/0000755000175000017500000000000011620060444031644 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/jar/META-INF/0000755000175000017500000000000011620060444033004 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/jar/META-INF/web-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/jar/META-INF/0000644000175000017500000000003311113261537033005 0ustar twernertwerner ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/jar/META-INF/0000644000175000017500000000011511113261537033006 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand Class-Path: lib/util.jar, lib/ext.jar libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ui/0000755000175000017500000000000011620060444031505 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ui/META-INF/0000755000175000017500000000000011620060444032645 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ui/META-INF/web-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ui/META-INF/w0000644000175000017500000000003311113261537033035 0ustar twernertwerner ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ui/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ui/META-INF/M0000644000175000017500000000004711113261537032770 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/META-INF/0000755000175000017500000000000011620060444032230 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/META-INF/application.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/META-INF/appl0000644000175000017500000000012511113261537033110 0ustar twernertwernerjar-module=simple.jar ejb-module=ejbs.jar web-module=simple.war crm-module=crm.warlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/crm/0000755000175000017500000000000011620060444031651 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/crm/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/crm/META-INF/0000755000175000017500000000000011620060444033011 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/crm/META-INF/web-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/crm/META-INF/0000644000175000017500000000003311113261537033012 0ustar twernertwerner ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/crm/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/crm/META-INF/0000644000175000017500000000004711113261537033017 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/0000755000175000017500000000000011620060444031630 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/META-INF/0000755000175000017500000000000011620060444032770 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/META-INF/web-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/META-INF/0000644000175000017500000000003311113261537032771 0ustar twernertwerner ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/META-INF/0000644000175000017500000000004711113261537032776 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/META-INF/ejb-jar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/ejb/META-INF/0000644000175000017500000000002511113261537032772 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/web/0000755000175000017500000000000011620060444031645 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/web/WEB-INF/0000755000175000017500000000000011620060445032675 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/web/WEB-INF/web.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/web/WEB-INF/w0000644000175000017500000000001511113261537033064 0ustar twernertwerner ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/web/WEB-INF/web-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/webbeans/simple/web/WEB-INF/w0000644000175000017500000000003311113261537033064 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/0000755000175000017500000000000011620060454027600 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/0000755000175000017500000000000011620060445032157 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/inner.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/inner.j0000755000175000017500000000000011620060445033443 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/inner.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/inner.j0000755000175000017500000000000011620060445033443 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/inner.jar/META-INF/inner.taglib.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/inner.j0000644000175000017500000000001011017016540033431 0ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.w0000755000175000017500000000000011620060445033470 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.war/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.w0000755000175000017500000000000011620060445033470 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.war/WEB-INF/web.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.w0000644000175000017500000000000611017016540033463 0ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.war/WEB-INF/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.w0000755000175000017500000000000011620060445033470 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.war/WEB-INF/lib/weblib.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.w0000755000175000017500000000000011620060445033470 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.war/WEB-INF/lib/weblib.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.w0000755000175000017500000000000011620060445033470 5ustar twernertwerner././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.war/WEB-INF/lib/weblib.jar/META-INF/weblib.taglib.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/myweb.w0000644000175000017500000000001011017016540033456 0ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/META-IN0000755000175000017500000000000011620060445033132 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/META-IN0000644000175000017500000000036111017016540033131 0ustar twernertwernerName: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Red Hat, Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Red Hat, Inc."././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/META-INF/top.taglib.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/exploded.jar/META-IN0000644000175000017500000000001011017016540033120 0ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/numberguess.war0000644000175000017500000326567611017525764032715 0ustar twernertwernerPK Gv½8 META-INF/þÊPK Fv½8Ÿ÷£Ô\jMETA-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àårÌCq,HLÎHUŠ%ÍAÒÎE©‰%©)ºN• õ¦zñ†&ºIÆ Á¥y ¾™ÉEùÅ•Å%©¹Å žyÉzš¼\¼\PK Gv½8WEB-INF/PK :3ßÑDÕ¬WEB-INF/web.xmlÕUMoÚ@=)ÿa’KÚ*ö6É¥ª"ZLBÅ—À¤é -ö­×ÖîšÀ¿ï؆€¡­¢$—Z¾xvçÍ{3ãçf X ÒQ"¯Ï.ìÏg€ÒO‚HÎ®ÏÆ^ËúrvS?>:>rNšýïÞ¯ O8µxšÂ`ü­Óþ~|pj16Ê$t#_%z¥ ÆúÚÒ·kzMø‰Sh¤©ˆ|n(\ÚWŒ¹½ÓÂwnLú•±G¾à¶Î¤í'1 LÀÖa&—“+›¾O Äcm/>'ˆt*øÊ’<Æz‹û(Ðhð2“¨ˆ ‡UÎ7>¨}¥9›z/‹§¨à6C­á–.‘ËÎñs?‘—ÆJ¹âñ¨8( %|¸oÝÖÐÝMî°Ýo:lçÎç‚‹ ë—›Kåç:(Ûú2M÷Þíô]·ç½„‰Q¾;™¼¾K;§¤í‘×ðÜɨqßîÝNº®w÷² ù"Bi^ƬFï¯ZíoŒšn«1îx“ѸÕj?ì‘yv+CÚ˹‰Å>Ú›²CM_4Ɇ0£€|؆yM½:}kΟ0óHC(ø L9D!¬’ ž¸ÌO~P–F¨hD@þoé*ÆCT40Úq*0¦ú”¿8ÁmT0ÝD2‡VU„B±E9 £™#…š.‘øŒGR—4hŒØM y&L¡ ¹.4Ú;ÚÙ¡ø÷¬ª(\õ§èý?שÐA Ü’°äÛ]ÅJJÅEø9_ ”ÅËðR”&’ài° -—ó*1 ˆÙË`Ó(‰ÒÁç¦:óIƒ3!Và+¤6 ì*ȺÞ©ü'–Uæ ò$ÒÔËÚøèÒ²[­µi»sžýV9ûƒ/¸Ö•éC+²m80åõ‘ðÀJ¤¥ W&KëÛ7mÄn™ÿCh—bÓº?lÅåÉ[…gJPº 5‚¬²uè°]ÓÙ¨´íÙvÝÿPK p9.4!ú¯WEB-INF/faces-config.xml¥TMOã0=·RÿÃÐK/8no«U- ]‰²ÒžëLÓ ÄŽl§-ÿ~'Ÿ$Ý¢q‹žgÞ{~3ŽyHØ¡±±V“™7*©ÃXE“§Õ’}›\£áhèŸ-~ÍW®a#$Z&µÚÄ<<]ý¸†cÆùc®àg,¶¯ÖajÏáVIóÅjwb'Ñ, ˜W ¤Éùõý¸äØ:—}çü…j=›+Oꔇ.ä{\³R·’}ž=O=ÂÇ•µ®#BƒAAæŸ1£SÈŒ~AéÀ¢Ë3`,(E–%±Žn^íbܳ­Pa‚¦ÆÈCé¥PIÐYoY}ü¦â›ª¶nç½þ*…ø±RëNçîótæ …‚=‚4(†°Æ6ØzM…†lMeÙ.Æ”H1x£òù¿§§Úd"¬ \î´‰Eâ½KPÕb ‰dX´ÅuUgG]4Œ {móõ¤²™ÆDÓ‡ÚÊHr ftùÑÄþõÇ%Åá’Óiöïߟu¤éMUûå—wØ:z{NƒA›ie±Fš™+±‹£ri˜É“V¹``å¢ÅaÀ;T>ïÕå)lçbe±Î­7Í/—ô„lMÑ m­ÓoŠ}·>ïœ5ÙœÒì¡õ}NesÅÓMëSÙ;ýL<_¨7’/¥Cjý?Û_PK :3.Íâ o guess.xhtmlSKÚ0¾#ñ¦é¡'â¢=Á*[u¥-]uSµ=:Ä!Þúì1!Zñßk›GYêæ’ñÌ|ß7;{7û6Í?ÞARÀãÉÃý’!?o¦„Ìòüú’}€~úrC•åȵ¢‚»yI¸Ò4MÚܤÚ,IþlW?€÷fOi‰e2îv²¨¸‘BÙÑžþ`0ØÁ“nâs‡Žӟ隦֩t¡%y¶©è‚ †ö R_GDPM¡ËÖÿ»¼æmh¡× .(P0(¹] Ú²2 ™™ãCϳһÖIU9qˆaQݺBò½þÁ¦‹°áp^,¼ê± §}üº‚ôétÉÀÖºyr^Í´¾AãX]3†”‹QRùñ¶ÂÓ.´Ðf†•·Pi…½†ñeC(´(ow¥1c´±ýÄ'˜ã ÒÙ }ü†Å^Ø)€¿Ýäõõ>ƒLèæ7##ûg•Ň6þ PK :3lÌLàõ index.htmlmŽAOƒ@…ï&þ‡qï»SÒ˜ =M4©Úõˆ°-Ø­»ƒÐ/ ¤é¡§y3ó¾7ÜÅoQòµ]CAuÛÝãæ9Æ?æbœÄðù”¼lÀ3HLªlI¥Vi…¸~eÀ ¢ãbÛ¶¢ m˜¼cç²<O’Ó)rÊÙêö&.vu¥lx%Çó}ÄG³LsWkI)87—¿Mù²H+’Šxr:JÙØ…ŒdGèè%dEj¬¤°´š/÷>÷àÕ,#÷FÚâ"f¶„ÆT¡ÀC#­?v?±TR%W;5Ôb5uO8.zN/÷ò[ç§atî³^üPK :3ä N*Gcresponse.xhtmluPÏOÂ0¾“ð?Ôz¦O‰eph‚HÌŒz,[ŵ[Ö71þï¶…-Ä`/}¯ß÷õ…wó—Yü¹^ªœ¬ß¢åÓŒÐÀûh0çäã1~^’!{ qŵ‘( Ís€ÅŠºC,€¦iX3bEµ…øŽÎkèÄ—r€WJ–bJ§ý^è'U®Íä†Ïp<Ÿå´ß#þxnPËŽ¾çÎL­YR(Ø› 2žˆ\ ù#Ùý¯ð\šM‘žìm«Z-‹s`‚B•9G1¡Ð–ìØÊÜ'HE&µ š+ËC‰¹p¨Kpÿ½ªÕFT‘àš)a ߊ/ƒNç©7­\ªÖ)ÌŠJ:±ß \Ó!R—5vM¯¸N£±Ð”à©´N¦Þ(‰”ÈÔºòä‹’Ïk D¾á‰û¬£%‰ I¡µ7hz;°¹ÚÕypYeè—;ýPK :3Çvº~€~template.xhtmlmËnÛ0E÷üS®#M£@¬Èj;i ¤N¨¯%-båŠ#?ZäßCJ‚Sæ‚ä÷ž;œäÃâqžýzº…5Wž¾Í¾ÌAˆ?ÆsÄE¶€Ÿ÷Ù׈Â+Èi¬bU©o—Äšy#î÷ûp?ëæ³gjvA?·]s«º8Â_ÿ±ÒÅ¥¬”>ÆðšBy Ÿ<çîIïˆUî^¬›``©QåÍÉfÕŠÁVRk÷øêò° ôÉ8|ß]}X7(õÖ¤U±2Å`dåóÝŠtA¥l5CæËOªžæ½Éö<À¼ûg®úß¾íö¡‘Žç朾PK Gv½8 WEB-INF/lib/PK 5G8NúJÊf}rWEB-INF/lib/el-api-1.0.jarŒ»pfÁ¶6Û¶íLlÛ¶'yc[3Ñ;Û¶mÛ¶mL2É?·î9÷žsþïG×îÚÕ»VuU¯½žý¬§{me9p8ÿj¥Ž ÿÒ`A @$ÔEe%™?ÇA@”ÿa Rò×”ªÖ+cåï¨ãïýLDe$%ÔÔ™$ű* ° „xÈ}"sW‘A mãˆë®"ŸèFíGšóiü¾©+@b77ñÛé(ñpˆ¼tOªÿ›ºÙ eÿ$Áñ¥º z…-2ç;û¢Ê/Õ/ŸåÍ›®£[f¹tr@¨ßD>°¼Æ]h6~ˆÎnûÔ„‘A‹¾ÂýÌFð=¥Vè°#¹pŸ6­~Ü:êÞ +:Õ:üæÈvpÝù™àÄ%>aÏåÂC‹Gì}?øVS ÿ:Si­¥èE2,‰gf(‰µÙ•Ã…\ç©"ú½>«Ê¯œ$A¬ü?>³Xü›Ï þvkwOæÿµ)ó´þ¿þÓÆÜ–ù}jþwªgDÞfš¿s#‚€ý«™ˆ³³‰—„¼ª¹‹ƒ­»¹3“™­‰‹K•¦ ºŽ¿b¢Å†ù¬]_ °œ¥\3z:Xv"cc‘pä>§ÁüДýêVãÐû‘Vn[nÌôhw”E¥®ÐETŠŠáȽ×ì­+*…šÓP Ÿí‡ìþŸ ÿ§“’POˆšpO˜2kÛZPr20épœ!+T •):ÙU&k¸ Øt$JÛ®þn2-虵þ„¨RDéI¤ ?ånBK6Id˜©¤°®8º$ ™nëŸo;30©èsI ½˜P*MÃ^îê+Õ¬µ´@eÑ%w1’f@é*`’¡‰VCKò~ w(3À^Ï^ÕX©0^<¾’Íj9S†%&wÁÏÌ<ŒÉ˜Í®ð¶.l-_‡`gÈê3JÍ9eª¤?1—·§ÝçG²8m®·|ánn¥ºH{=Ĥ4˜®/],K–¸ýU.XÁLÚN~È¢â iªº|œõÛ¨ŽømÑ<¥-2%䪰º[ ì¡~ÅÀˆèðê—t«/†÷µ/¦]°)w)7î¹VecÙ±í@¡¨ü‡œ:³¯—ÞÒ¾X³é¸k¦´Áòzµd¼}w€òʤΠîZe^γì”]ØÀ‹ûUûéNÁþ<»úÆ0 á Õ\ä/Iƒ!gvÎáèÎ4M( ê"J…í©X™ÕNX¾Úļ¦Ÿl + @YTðH+J@i¯ÌʬZ–eŽvÏ)ÃX¦Ö)Á$”Ù–QŸ(`yø¤C,#J¤û mlIâ?­ng*A%BØÝDçWoŽýÆyRº /hEÁ‹ƒ‰43VœÙü¶éiµ•†ÌSa•öÄÅèmß»­kŸf·Ï(ÏŽ¿…3|rõy±NOˆo*L`võÆåÝPUKÍЇ6U³·\S8/.¤i·í—3²Îk0žžÜâÕ™˜Ý¡âLå5xBXàrb÷ÊÕK"ì©sÜIÓzg“§ÛÇ"d=¶_¡’ \[âQwGXF•šØGÏD²ÄÓ)_]…rËôëÝ­s=1ÆÄ¬ç2‘z’tK‡Ë5>3‹³Øìô.Ï´Õ…[R’ùц[ò™¿tõŠCçù2«Æ! Æ6çÁW…öðHïÎä!(2$ÕXÞkÿ»:ïv—%[´Ä¥àס·2/Á¢ÁécÔ™zHlc‚ª)"Ê|n†[—ÅçàÛœ°0öó<ш~ÞŽlÌÖ%ç–Ènÿ·À §RØ_r0#ÛÓ»hÁ1]¥¼8Q;?1`Ý«rC½`ýX(¿ ß²hñ¼c§MÈ'èš×âÄC»ª­Í9 LïÎñN{ØTBX?£,Áwº?á]ÁAÞ7ñ†6›^(X=9Å¥øò+|þé²"².<Ò ã·[vƨ²pU±¦Q^<§á‚nªEÑ!q)Œé×#S¸M†Ê%=¨€vÇið„öìÿ3Œ9w{öþô òÑì46hþÀgÅ8»- ë´Dí?FùÉJWí‹w_jÿ?~¼kÀαkVê“Õ±˜(7PNÏ{7"‹Ž Ë‘x*i(*uZN±k“p‡(ó™LñC*¡‡:A(®“˜vYÈFháý’™;ÖÈ ·Gdä&iJ(S9“7Ô1J4177ó¥oþ#—áUDç6¨~2Dèi^ EªËÐq./Z“àåÛŸ¼”³ï2½ûþ½ëŸmö^ìU3œ"qK¢¦ˆ–&Ñ«Ãý–ÔK€ …¶‹Jssbwm!3üÜï5ÅýàW}ˆ]uRÿ7^.[¿M8â–þ·ÈžXÛ?‹·LçI¡xÅ,‹ï&(x¨LÕVåÚƒRöÚîü÷þO?“¯îÛö÷WüOfȉmîôë0ºñéTCÑC,Æ‚ëoíÁS¾k®„Ѷº¢l¨pÝ¡Æ?3ôôk’)m÷&ª®/àˆ:Ý «’òì*¯ìmÉÖÕ lašlqT’EéñEðñ‡@Ý l@Îw¬ƒKý¹Œgsµ£k—ãt¤ë[£ÿåykŽ-FZpÖ¿/˜2p®=ŠFtƒ_§Ä–FR/³\ÜËh#ŽÓ#û]#qŠ»8ñ¼…Ä·nÒR¥|q„ Y Ó›¶½Ÿ¡«µÁD  ÀñºrÑÖh>ÎH”%mOäk•L¯`éǜǾr&ý¥™‘S :ýÄhµE¼Hb1* K8ñ-uض’§éy«l©RÒ› kÌÝ‘vÁéÅbè çÁµó ÝvH]è*\6RFVMD0l<ŠD~¿UÂs~Ëç**¿‚¿o0ƒŠÅÉÉWñãò4ÆfÃÛ\¤à<_|ãÕûű´ ¼©îö8¿Aðvþ³°þ ÿŽ2M„¦¿(‡aøAÙ •Í]­Ì]þrÑÿÈëêÇ\}Híh4âäèEÔW˃ÉúØIª†àxdb¯¾™xD^¯‰%{Q1l¾K¸uËÓ¹9À?ñx2ÐÐÐm©·pb6Ö\„Íðhx¾Í·‚j;öÂàÓ…BâñPŸ­ƒ5¾ò} l'~[½d§Ÿ¿@ò„aãþrXU€§D ¢1¿J£=™‘~jCãŒ1c‰7^|­,í s¡añ©Tçy$F¸þ¨|Ü8š$Í ^çPÞ)Ùvǯºò-ÙŒy³JF 7â¼–à¬PPæ=Ðv‘â‰0–}걓6 €Ë°\¤PLSÆniù ”` åŨKj-ë²”*>?Õåá":Å:Ì~Oªû‚ãKQ}©v,z»mì€6æ\Ú8xÜNg¨±{—ylG cæQ¨¡bÖ¥[›³7*ÁØéu¡q)ÍQÜ¢l¨ëcc@Hº1à•îFÄT@mq˜u¸§7ÒkÓ´˜`ÚÉŒÔ¼Ôæ´÷.Âill¯ÔYï‚o²8¢Ãe®êÑCJf;yGzÁ«•cøU8òsþ(‘)2ÞWóÛÎtBø+"o=M3ªñeËÞnBó 0;xNS[?šð~ôø@ºBU§¶,eÏÿ6ûÀ%ƒ“Áê’+¦Ë뫈íP÷«^Ъ€1¤Ø‚Ÿ¥7®yç>;Éêg#æ¿A·v´¢\Äb„™…ý„œym#ƒš¢©œê—™s’~Û€©²'û@Ñ¥zG‰¿tÓtÖ›…Ä"6®­^µ¶G¿RÔt޵h¼•§À•±"ù%'9=)ÉÖ#œö`‡S±~JÕ‚1ü¤D¾ß×óãk²×Œ;BæR '÷Aˆ£÷döx©Õó=Ð(þQÇÈ n‡$ôfŸOñÃOýNÀp7&ãÃPåŠü;p,b'f-ëÐÃKþ@"“„Sá²Ç Š:¾Såˆl€"9!ÀàqÒJ¬&ŽHVÕä«×žb•e1- ;k&d,­‘µÕïó£ÿ•Ö¸|=? ”8ȹ1õ*Ulò³:ôÖº7§¯/W…t¸ë§Óoâ=H±XЇ¿n íXH$Ýÿ?ø{ýüjrJùöÓ^ו×Ϋ`T®jiCY™”iPJ¾…%µ5£Y ‡p>‰ažç”wWÒê”žë´—àøŠNܦ«¯ÙËÄ&¼û5 ‘A#}ëKäsÎá%¯Ø÷1F' ú¶óëÁøØKv*d¿W‹åúE1¶ã8 "«©j‹tœ—4 ™0Ô§ž¢ä4•á}x·™Ôñå¾bÓãÊô©ûïÈ;-» ‘á¼–X¯“€­Ô"³ª7Ódw ùœT%!/ÑÎ j¨œ™Sgú{+[ÓÞiBøÈt6ÅëÂðD…ýýý{rj]‡—Z ´ò1‡k®šv;ææ¬#j {”™¼˜ ¢Kñn1PO{6N4Ô/ÙŽÍ•À½]5_òH½1.OÍcxö˜Ð”VäæËB›~Ì^ŸLŽQÅQf=×oÚƒG%0ÔàÁÑÂÁ\Õy‹Â£8[p?ºSÊŽØJlŠ µßÈ,~¦Ø¤~ÎØ{‡p9ÛLùúÞa{˜*ÞÜRÙsÖxÓf(qé4…Tp!,â횮Ʃ¨kÃ4V®ÄÞàlÅ_1·DdF”’ê1²?$4+îWÊYõ%Û“…Œ&”N},7BÑÞ¢¤_'P² Aaý090ñ$eá§‚Þn yÖbãJ7dt`¡U”G·y»„u]ÆÄ‚ÆÄcD6Z”>ò1õ?HžcŸË }`pß,œ eë¸A‚¾þƒóÊ>Z, €€ €€þ?ý?6/´a=Õ—0?o2¸¨ÀëÁЛA@©Ø`Mâ‡dÄMIxSÅ)@å•oÍïE¡¨ÙÒd`t«àIšš¬m°õšª4ê"àJeXàš5,ϬõŠ2t=*宺×Ö]n|¼Òd¨PRbc߯§ÛN>mç˱D`µ?§œM íÝòàZÌç.Ý!ØT…%[/K3/ž E“´sÖõ¢0'Î0~RÀoá’"»| }²ó×ëz•nŠævBÈÄE£6¤˜¦˜¥œ¸œû°pé¬ä×ð·J‰æ$ø_ôƒ’mDL'º5åÔù{L†™ö€!g´ËR ѱ#N¥1o¨6ÞõrHQԮX.kF“õ±ªh¨¦[oF¢}5ÅæPiƒiìßµ…É#:½ÇïÏ8w™¸…†r0”O×ß%"Ošl—‚ÒÜe¸²ÎA@à‡¼éÙ'#é"1ULn]Ó ÎqTëÕ ö×ÝšòÙ‘¡#?™4޵ÖZrtÂö ©Æaùu.‘0•·)$ÁÕ\ÎLßàE2/tò=Z7³QîˆN:OiËÃõtìÙ’^Ì*Àm?ªôÒ˜7lî²ÚÌÇ¿Îû(.ºñmðqÌ“¦>DOEÝ×3—v&Ïàû¡¬jT¨é˜e¦sžs’ªœjwÜâ^‹ÇL÷Ù°<¤A¾/É%”ÞJÕÐÁ‚¾’î2¹8mˆeœX|sé‘`P¸”ûÏfH+šøÆ˜ »Öæ®äfzO”" Y‹8†éAå4ï1–\ñ³¶[ra¸»M±¥¹˜˜Ò_m’ ¼‚ 24ís=B‹½°ÊÔÇ£kÙ“n|fËI™ y…ËRø¼AWÃ*ÖÖõ$bŠPAÚÐU|!>4È}öítãzDÚðÙâb©Áçú#…LÛð$š~y¥QÝzRbG(Cµ Z>FI‚ý8eg”Ö¤Œ8™ÉQv4]Ê7^õýÒGœ›öT®½‹›–KáŠÝ)0Ů֨ÃB¤³vähÄXåØãPÍ iÀwJ ÔÒèRaÖGpÝBÓ’—Á%—¥9æ¦GsG¤ƒVwq8¢Ô'ˆ"ò#¸œDûô趇ùè>Ã<0:+ö•^ÙV™á>Ë÷^ùbÓ ÿª@èҺπÎu_dOß:AØtšI‰d¯Ô¢#3zçï8´‡zx¸ËÜ‘UaÄaŒ#Œ½¿AQ¬X–iVOÿhÚV»5Âüxo/J!ÑåNœÆÇ¦ƒ„KÔOÍ’ÍÈCî© “1ö®V†FåV/f)¯O•37K-¯¯³Íì®`È8*eH9*cȺ4…¤Ëø‰®Þ©E—1JžGtBk›0¾Y‡;7Īå_?^\[†¡g‹"f+ ¢ÂÌ™@á©YXkK50ˆj©3e‰»ÉH¤Ð¯z„cˆ"mq!ß­Y]¨u¯TÜΗ|ꉅ€1C›¨)¾­˜öËôÅD’^·ÆmÖàÍJµò¹7- Ï%qƒÝœc/#ÕM2ƒUØoœs¸Óô`ŒA.læÖ`{[oÌÕºO4©+¡ÛÙ*%s»¯;u Äí¾ÛËO<úêî”3›Rœ},ñîçWÌ«×õ9¸®Î72®?(Vœf ¾;àñßùÓÃâU"úYñ1P¦¢¯lºßD$¦˜d8 QB,ð¶¥e'¨4jeƒ¬xËœágüLZæ8¾TZ²Ë£% 7]œR›^Õ²mOZWU‰‰R)¸'áOQ³.åôáÍÀuQÞ–ŒÛ’ê\ÓÉÂ=Ut^½þ¼\Pá†øÜ€¤kÒ0fÆXîUÝÌúXi¯~ô³„U„«n—:ú'cíƒI‹t—h<Þ1t—¬ç‚´É¿ó¦9N$¡¿áîGAÛT&2L˜'9ÿIsömÌŠ@/Eª‡Š®ˆòp«gy>ÉÙÆBÐvåÉ=iš¸ÇFw°d•¬àôÊÂÀÁw‚tÌ}ˆÞÚôc´é"7»ñö˜åÇô9ïhí¥„;´èèF5ŸÇçÞ£«Ã&° ‘–˜a§Ú9Oâ­&lVâ о©/ÙPlQÕDÚ2`+…Üü!B‚·´*³Ì9zÎb1…àÁómO3»y–SzhV·áŽJÔYèæ"üûÞ<¹òxLÿô³—_‘y—ã«yÎ&øBKŽÛ ; » š!I•‘¨ a1ŸÑ€«õs„“è©c:éÖ|_$¼S|íl¤Â*ûã¾iúZ˜{c?øÉ\“(W%€7óyÕ N¡-AÇ¿cÃÃå÷žõýQLRÓ˜æzPÎÊ,EÊ“±¯q½O¼ËªsÓœ²ó$“C¢É{zû£Z£3)ÃD½3f*m9A¾çøö§BWøûAxÜ™ƒTËÀ¼¶BWÎïÉbUZ‚÷: Tµ2©Ó›©p{f‰*3s“flôðAšœØz©Ð¤šLÇ\{ÖšT?mÉ_šæ«ì\SQ†ó³$!·w€Uý˜|Œ©º,7ÆÛV}›ýü¡Ë)$òLÖ@dÂFg%ô{Ì-Ã>6¨³Wϋɪ}ߣ¿L6%‘Œ)Ï6.­C®Š›pÊ.‹? ;.^&í«9ÓµŠûäcü2!Éq:2Y\”:äXŠ=ÔHÌ„Ìè´šL)p€4鲟â_²‘Æ·quÙ—I4YÔv"û*ì³È‡Ñ|ò§¤m¬Û¯0 } ƒ]Öþ·sõ¯lò…œÐ .jܵKÃ:-UàŒ.E–N‘³O*°KÆJ3µö1«O*ÞÕMkì°ÍoÂnMð§Ù·jÞÔ½É&¬LEèÐtµ()sQ#¢ý`¬&©,"® 5Bá2rÄ^Ÿp¾FVÝLÃÓšY]éÏÕ}HÚbôD"LàÛü¥A˜Fßë)HiEßÉ‚x~áΙŸ›nÖ'.w8Véè& Ù­^]‰XÓtû¾[ ÖL7ûZŸåñ)ëðºåY~[[ rþ-Ô %['•»±-UvÖB0`·3âw³jB®$ £ªXÁÌèõ‘=Nßïnâ—¦‡•ùí$ ’zMo:·S›±ÿVVÔLÅ1î~/.W=ž\!PÏÙ,]= wc2¥Ø´Œ‘¾èŒ[/=`IÕ:Ü¢Š¿ÐÔ6ÉÂ,‘Ûd,¨U=ž‚¹:A¶NìÞ$…}&â§îÝ–‚`6Ðë•} "ý~-_ødOÞ‹ÿÑ#ÍÕ}~’\Ñ<†\£æâ³C"YMMšõ‘gÜ+œ¿Ax´aîCró»Å§Ï±Ïú´M‘Q’lϬŽ+è:ñ~tmëÅ‹±?Úë‡Í/¦i;¤1[1AÜ[@D{è‘…›{•Iöìu¸‚rê»t{uƒ»Iº •CJRÆb]Ñ0¦¡ïV¸… {‰ÚTù²¼àóΧó²ÓºbJôýëU06-²’|‚̲À ñ¡!uóˆGø;Èúõ˜±Å‚­(æyÌãˆÀüï|eLéuÒ:H5±`fÊJ¡­TE)λTãH¾¹—ƒŒš%Zt²øq;±ãÅÀM¶CC†›4d“;ÿ¹ DÙ*J/#L.?Ä¥ü‘FZ·l€ œæ¼¦}ûÉ׿lü×±0©øbO88È 4û¿ª!1;G+WóÙøŸg2®æÎ&®ÿIYæþŠ- YŠ=§ÍùIÈM½îzí0‹LÚë…2¢âS—÷ÅkÓòÎ_³B½ˆØu”¦ù²pwý±–솯Ô?],,Z6®çÕ¹Ò²_2O¼¦½Ï%/Ý ·P®»žx[©(.¢“2¬%¼s‘\CE{v„„©‹Ê³ŽºRÔ1¾¦²xÓ–Ür§t|‘ÕzéˆIR£“[ì)“¾µt^:¬à#…'UåÙdQÍܪ0+Éå 9Ù…¾%õ…c´1ìú3N¿°7#î•:Y¸T‹¯Nê0.Šoæ3Îõ–æ#H‹ÎÊä8䘂q i‚.˜Eå©Ï¢Ÿ¢gÅt†>}õUÆ޼²ÁSV’ÕߤçÚ¦I\’«¦µ°åÆ;l“éH+Õ8éµf¼:SìµójVµMDó'×›ï#0^0‰yÚEòü= ¢`Åk0“]Ùn[ üÛ~-b»Y`ÎÚ§~¾Õ"‡_ŽBChX{Á€3.°iñEqÇ®uÏmÒ*1òÊÑMN[¦éûO³3öèÍðiÔTZ0”­^c§`@=o »ãzÂv vFi! Œ>²ÔCIÆS?¶ÄÙ熹ç]y¢ 9„µ™¾k¬¸u ôìFÀMÔ•¤LŒcJýf—GþÚ°#}´¯ÂÞY=tÇVŸŒ»v àÏÿ>`m$4"ØeVEN¥Hø09 kØ™1Äÿf wdÛGüòÓ."Gg¿«ëÒo´àpôð:й Âr"ºŠ,ž¯>âº3»W°9Mˆ\9®ØÍuë´Ä¡.çÅY…ßÅ[@|̘{[)nCT©{´õñAÍÌ+L Û6dTjÓ¦¯+‹“—uË:]¿ƒõ›Ø„잣ßÏuòHÒ+}—º øH§ªb«%ð<}¸çÃ_@Ñj$Moò›ñ&2èÇ ÈΕÚøŠ}F­ŸŸ#VDÀÔbí/—jÒæˆ\«º”›º,Á_ÍY}ߦáä/¨ÙôƬ²Õ]ËßÃ^¾¥·yæø˜Æû4Füñí«‡EéÇÜŸ…\“Öê<õGˆƒ: ™¯ä3¯ ÔÉ»‡‰¯Ž”uŠÛo®I ·zòˆrf7æ‚Ë"g›SÝ54ßRnÌ êýHǤ¯"s~àŠçâ›<×ö^àÅÌ@Ûü  Ä „ìÿÚÿ,ÕØPÃ×Àù"¬ÏùÎHaGs6¨‰KÚD—äh“gl¥–ûSfžÉD®á|n Ⱥã<#®ÂîTgÔ5±,Ród´”›ù½ÔÔú<Ðíó’3v^Þ»w<6þœõTì€z"0{íJ´!ÃÍ#Hœ½³÷_8Ê>îí&H¹EÐÂ9\óõdðõÒì‡Iá9 @.éTfO¡øÁy±€6Œëk—>•—f]Rv‘6‡{8íª»´¡aR ¤¥ðT.IÅQuî G1M· k;¾¨ZÞ^=IÅ>`kLs¾0¼ÁST°ôö¯j"-5=¢‰ºþ'âTá¹ýâ|úÚä.œ" Œ]+­¢¥U“µ©úÒû¯9Œ­Wô´Âþ‚x=d¦¼F6±ÕñU1šìÍJ@¸Eò‘5+°ßi‰@YUí;wX9c"çnCŸE¶êüAÝõ\ƒõ·…¥uz(§uàÓ‰ ¥'ñ-JC3( žúi²°<£A¾ÀˆúN±Ì Œ¤ç@-s8êç´A‡d¿Ò(ìçEô«zkŒw£^·•u²"÷â“Ç ¯MŸ° pÉ¿\ª©ŸÄPŽ3uªñ«îÚ5bËñæ9¾Æ)lŽUøì\¹Êž·OÆ £p¸Î¡SŒ\cec#~±tã _ãW#ªÞAÆÒȦuw¸|û­XÇáùÍôeÝ=õÜâ¦wuœfCTå…_÷žK ©Á÷ìîɤlu>vÃ5s/I%D­Ä:ø#„Œ‡( ܺ ã4ïuº¥Ä¹QÔ.?ª2Åt]*Æ4…å·é}\ZùQiòáê}Jò¨°(~æ™ÅqKñÄ(¬K@iÛVÒf×±‰Xh_¥üXêq³±¤$tv ýá÷U'>eºHåÏô—šh¾»¼â)ª€Ü:Æ``%WP^–ZÕ ±­ºA'Û ÷“Ͱ.ŽêaWñѶkQžomÒÍ'½yï^³jðwè´^ÎÊ'5ôþ·agù<Ž,ûÁO“[l…Y$¶>·W¹%ºÓÈ>9#´CÐúß;2%`üa¢ëj¨óº"\UŽsH4°Ì!5yÆŽ¨Õ$“zóÈsíáÂäµ ž©ŠõUA[žƒõ*áR„ ót¹_ó£nž5"Ü//{ô(dðq1Ìy¿IgÓsŸhòžH~ša9—U]‘<ÀhOyÒòqÚÇi’¾ìë çUhî¾ÂÓ”c‚‹ w†ÁAŸ?€w:yÌ–Å0 ÇÈ€cï"ɦÌÀÛ^/;\:Oç°ð7v‹îhÕÌæm0ºV—ðWƒ¸TB[PF6,ûùVc=…|Æ‚dm:]ÕaËQC¾K°_øÐ[£4-É¢©DêÐûmHÐæ‡·bÇ¢£oñ‹ðÅS”ÉÈD¸|¼dsÛë†ØàŽäŒÍ3òØ÷ âþéþ#CðEûIÃ~ táX9Ðè\éQ>"‰žn‚è*µ06v[C1¶ÖÂ}9Äàã!ŒÐÊœ?nÊÌ{Y”+~D¡lÛ€}<9øgøcü±^5Ì–Þ—!ì[3â/[¾çZÂR3¾ºØ+Qpz)¶ mÉ®É|&£ÊÍòÿºöQŽ;,Öï—t%ò ÍT<‘¶9ÊØqvž%d®i(¡Œ˜ì{&pg“ÅÀ9PÆÈ ¦EP¹§½òž —mX¶ìåªõo¹³Þ9̟Ī3›>¨®Üåþì²mS³‡?‘w.ö‹±êP]?‹ÙæmFÅ¢b¼¾‡¹p– ɽelfÑï5é†g¹Å‰aUíú©J4yá8³ÕŽÛ“ŸÛaƒt4—ëªÇ|»At]ÚÔB~y¿YU“/'°(²ý³+ÌÕðY0ïÇO¸gÒþKòÁÕ‘Õ AÆwŒ§K¶Æ9îAÁÖgÈßk)ÜÓǬ£ÝÃ,¦¬‚âÙZÊRwaIÝ©KFöÓTØ!ñú’™4Æ©ì/ñB†yè¡´ OжQÜ&«ªw™‹¨ õ)¹;*6+cИˆ~ÍjeÐ{oÄÿ^÷÷®Î¢·‚ó—Tpþ•P$äÅì]Í=]ÿ›FÜÔþQŒ‘Õ܈Ð"*R•_jÉ, é@C‘/#Ñ ‘Ô’—Ù»;keQ Áþ¯§ZMæqÈr?ñógŽé&À"‰íè(3ÍoÙÐæªkæíéfB „¼5%0j¢º¥Ï­ª•)vSž4Fµ›2™µ;«7 bw?ÝP…}:Ž©†>C¶Ì¾L·Ìvä´qh·¸ÚîªyeKÙaKðÐoHß§tb.XW£Jìèaþ/4* Í›ÆOÎñ'6=‹øx}EXÕïn (m8p½m«ÐVdÙŽ¬º¬ï#K;ì§ð½£ñ—ŸÑgâ’ôÐD­–râ¡ë3Ê—SBöT§ëªh—–æ‹S[™o-½²´*DpüÆZpÛE-ÍbÇ?»’ß`¥]q‰Cä¿YÈØ%±«¹ÿÁGðkëìÁ …¾$;´íÒ­Sï’®u]Žô–Æ•§é»vŠ`¥ž‚¢H„'× ¾Ý[L‡#ÀÈò,_‰†ËÑ€´ëàš5‰'-ÀÇk—ùÖ—< ü”,9>O笩7ž´ÕðTP§1ó0—7••Ä_·"ÚۘŵåRH½†Ðfâ§âÊ_kÍ_Œìæ%bBœõI<‹–<»‹Wúöû2+¢H’ê·ˆ ð“ vÌò†á2 Å«.ö”©PÉ]²&:vö7Úg~l÷wèXtn¾ÚïÕaÑÑØõa¸X¨.y+"mûrÜ…Z± Üο.h¾F­JÅÒÙC·ÍHO²ÍÇ6Ø+ÉÏoD Åáü_,«ä"KŒó±Ô±m•S3ï¥oÜåhó{êl:›áÁÈž`€²c˜>3gÓÌ¥[­PC¿"m;oÚ(¼‘¾xûÚµ‘FçEC$L]wÝÀÄR¶Ï^TÌØÉhÀh‰ºÐ]“af.8Œ¿¹LfF£ Ç~îvZŸÄ|@ÿ{†EÕuvÏ BöGIÿ wsû¢BEA©_Å/rV´*ßc.‘K0*š*›E&OÀ¸µ¥µ²Ia\ôUÇ{n0èî2öÛ´==,êKmÇÍTWCƒÑÎ 1“£iÞÏò~kªs*tD¨]qÑg\Züt}½ô:¥pÅlב9 ÑKŽIOúEŒíEÖ‰×Üj¡Ž½X/Æ´}#l)þ±=µ{e™Àì ÅM“s€â`Éx‚ñ` æ;§vî-W‡ÏrJ(·Tê'Ÿ) 0ázö<¹<Oó…x…Yk¡ÊS'aÌg/7¨âÈ€ažxéD†`oµZ¿¸/žR"ké+î€Uï†j:ŠÒ „‡vjCZ Éî1—ø'îBÕåàw*ýŸß¾ ßsͤ9^4#õAònè kRMö+5U“»R*ÑeDkÉ¡²TPÿMjya¼£:dß5+âëžx…Þ¬’ÞgÛ™¾¤K¡¡Z"Hƒ¨Ô’&‰(:gdc"Dà‡IçîÍ餓FE ŽzAöà j¥Ìƒˆgó»vV7ÂĉXa†Å¸ŽÖ0íVwy1Ö¬ÍÓ‘°vF«HLC?¿eMô/R>>sf´þùYЇàÕBܳ·«㨠´1HpÿaÆ„·:p8m(à†6«7¦Çé÷©Mêw¦kÜÎ0Ä‚›ƒ¾ÃÒµØ[OS¡¼…‡§Gä‡õÝL*ùßéûÛ±ÿ=d4\­lÿYÂꧬ 7ð—2ì šŒ¼Ÿvó0YË÷‹ÔQò‰*»ŠÖêíId"…䔡ü’ÍÜ‚‚€Ä¶p·xîâb{{ú5ÀÒ@àGÀÅKQ¸è#ŒÆFh²J†*Ò4µê Iåí3†í­—9c“ú\㊠Yp:0i e‰YˆBú¡\7‡œ¾mÐB>ûpZ-à¤w5j±YÍöªÙï6(¨>‹¬NxñTcë>v}|gÚvþ\óìÜýéùñÞË©Ÿ‡)Ö´¼‡"ÉB·\@ºhL#žÈ1fÖÏËt CÍŠÕO›‰ÅvÐÏ« 2-ë)3ËjpÖ Lfƒ3Ðê]W¸é/)wã–W“¿M’­vg¦±·–Zi64²ÓŒ¨r'{Òš0…U0×i_+àdS‰l‚·ÃTÓ[V¨1¨ÔBª@*™5Wj™°VzJcQ4½ˆ¥ H¸À5›…‚áÇf…± ‹*ö!0ɦj8ÂbcºæËõ™ë£æÖ°V¾µ¨yW¯)Ú»5=âNíe¯ÛBÖ B:ì3B:ÂÞÐy"ß°Ù~ܤÏiTU¾ugÚSðÞúöXØ;©£µžS)÷L&–S÷´žgòmÖkP«ej6Ù&Û$§¦í–ÛS}sÍ@S,)÷þøfVÄA]M÷ ¢É@L‹L=QÓ‚jdq´rÇSíï[—Íúq¾ÑDšÆ4ËP¿Gá‚ê~ÿ‚™ŽH^hÁeW°ÂO·sA3ò“€+‘¹íŽŽçVK?›—Úø€Ð·ƒ?/ùUdaè¿s†º]Ký~ºn,óŠøËÅÔrÉ_°¬ QÕýÛâ3KªÃêåÈè H ‚ʈOþD^ò‚Ï¢_ÍôqØŽ}ÎÖtÎþçûí€Ý^qØ£»—µà.]Þd!ÀõÝXÀ¾1¢ÃLUïÆ“At›ã*@öÇEÕ£ð:bD%I¹xO~§÷†yÑâ }ÐE«7Ђ£²1±#°“°:/Ú1‚,Äa‹Q1÷7˜C²ÔƒÅ¨IGšfZN#0C ’^a¤ùÐÒÊ¡½y*Rö=Üߨ¶ká î^£2¶ Î”s¬çY%aãžËC¥EÓí§"MøôCëkdÖ)4[”j×÷!(ºŸ»ºs þ Ì uЉ7"Üìãû XA“ë¥g©ñj{~¢Q1Ã`Ñnic¤7‰Ê°•ZÏ8 k²H~'è'ÖPà'KlÓÞ°´1êžçìƒd Ç¬z´Zæ€+Åj÷Ïc•f7¤&B=ì:çG@f”œG]z}Ž0æ÷íîN/¶£¿ JÑ '?b Äôœåƒ-ËÚG±ôù7y Gü½(Æ…úÑ0ñxI1!ÝJòÛŠù—˜·{1¼(Wö  cɾËh§å -}Uä+F9gÌ´9bD§VÁ`p½\?=OWw¤žA¾^BPE«§j$'©qq×¥öÇ=šîgM©3yŠl®ßE›|¢!5£26Q—c»Š,ªcD=†o*"Y7ÒˆÕÑ¿@H9Ac[x7EkCìBí\µGP3å^ðÿC¨R† 2€ý÷ŸŸ$ÿgKš˜¹:8ÿ£¼·H]ÏMã³X«¹Ân.¹¹Ù[“JÝÊš,¾¶Š ÅÐW7™vË"²£A–øƒü3â÷÷ƒ »5bs~†° ÑÓ!¯Tžž6E ÿ?ŸŸà½lüy»Õ×ENBÑÐtDûñ`"Ù¤Mvðz×,¾A¤:îz™&uÖðÝÄ®é› ¡ìkå6iŠ—‚Dt‰÷³Ï¸ËåRÇR ÇÏ ïÍ;-uy¹öm§p‘[¥Žþ”âÚQ€ØÌL±ÐŠXªôë¶}ŠÏü±ÿW_þ·ÃâPcí:~{Ùm–¬Ÿ_‘ýÊ äsæZÒÛ‰E"#vTzéõf¿Í4†U›å§ìáÕ ˆž¶Z¿¯ú§/)jžÂ&:ŽQ[!'|]b`Éñøòî±b-˜„W}æRï&šØwüêÄèÙ£˜²¼SÎm€»v=¡ëù?Ýü_QN8†–¬€¦c(u‰¡ëž‘ÍÁšgöÂø¹Ú0sàRm™Gº>Paâ ã°<Ç{{L` pÄóžkzqd´ƒ9Iÿ.´2‚Qw³@èð'ÐÏïX"Úªø Á,HÆ~îGInF­ÿWcE0/nÖCˆƒ±‘LêØU™òZ d'É.\õ|Z^#bÖŠüÚ*í±â߯ÓÉ ©›—´_€xéR}¸m½cÄ[ŽtÖà¼_xáBÜɘ#!}áXÈ&>i7O LÍþ3L ªáÈ0Ì©[RóçhØtí0Cè¿XF!ø×HûG|IZÙÿ§DŠÖ²qÁ_Âõa´Òºp3pêç„ ‹ûi®§IPü­ˆ»:«8<\•×ò«±ž«²É´IÖ.¤¹0b²¨(Éñ¬ëìÔú8Ó¬" _þý—ÑlìŸåi×Wñ’±ŠHˆ™×Kž¯¯mÀNÃï÷¯mOøÞè× (L\DÒï‡Æ´£ô©)Íèx×Aä+‘pppúˆY£¥­F‚˜”o§4Ü´Ø%ì &:HÈ–Ê»¯å쟹Dª·Èžâ†¾D¾bH;ItŠ6¯XÝU{XüÅûNˆGÎPþ¼}Lz¸ìùVo]¤Kò‚]DZ_)¦núиlµ;Ìú×náCÍã÷ØÆJ HÑûi´UA+ìʲ{Óá{‹É(1Ûù©ôéʳ5gtàd…ãÒ!ìCa[R}æbkÚ“ƒ×&Ó!ƒƒvnqV:M’oC\ѧ«Qnšód¿¯õúËeÿ‡cÖ÷EV¹"™•$©Šýz¾²þK¯n»_@t·u EmÁEÕ9¤8W.½÷Œ&ŠY½Ö椦ˆî+¬Vܱö¨iôÖbž†{$…É ®úɰò@‹gŽç?N-ú£KQA„.¬?íäú!(}hU ˆþü©¹9©o °×æïÃJmçoFL@†´ÉHÙ ±wW“šxë<Òi;Ðdl¯ömZ.H©·K´=Ýâÿ¦B“ìÇÛ<)qjι‰+¼•;³à±øjâ¹^ÿˆœ±ï?˜j©³Ý&™V'µø<]ü6«ôy¹½ û˜]?Ðzæïl>€­[¬œl ™©xJKqŒE®X5範†”Vz R½–}ñÑ]·[lcäßòá=F.¾õî„l»~ bÂ.S§¦6²5î2Õ³Õœkä¸vÀ6³LøêN+ÿ‘+\a“Ç3Z¹t¶Ø0Q•=$Ç´Üal¥ì؉fztqO̤‡àÅ€Ns°77Ë€†H•CÌî3*6ZZw1ú@Ý9r—©¸lt­4±ˆù½Ø³þj5ÝÙðÑ ÀÇ«\^—šˆ©/¨)â6ÅŠL¤ö 9Ä—fÄï¹Ñ”˜*æâ³û:ÊØŸ <ÉNÐZ«í|ÇÛl-XóÓ "MH¡ a䝨u¨Ä(—5*ÿuWEÙ“ç-¹“¬ë`5#ýç¶UŽwEºl\%`¼¥ñevZ_˜£¬…E.×›‰vÅœVÃÜù¾#ÀÁqÙɼãÚZpÚTï%EAʽj¶»äN>ŽéF¨oS=¶òƒ&zªÛÒÛBx~[3Ôœ[Î}Œ2GÈu{kÅ2Güþ×¾Â*^Þ ÃþŽé×úÛŒ8ñÃ5VÿŸ ”§y ûˆ4Éf¨IŒ·hËþ¯u}‰2|è<Œ9=øMnÁD;µTÂÓš\?ë[2 8oBWø¬¾rÿ¦ø|ÞLÉ€ä)Y{4JËbÛ³ˆ½83ý,“|•XŽžÔÉ&]óP³Ö¬„œA=æ`BÅ©WGÓ0ûlGÞP)˨ ÂfŒ“«1„YŸZ56MŠÍ[¥…†A_¨+ i„Øä+‹)„-uÀ·T«@nU—028ò€%T‚ƒ1H_4Î*™ÿ«³³Œª+KÞ~€àîîî÷àîî~qîî‚www÷·@p‚;'üé‘—žÛ=Ó3ï…/—µÎïìµ÷©CíÚõTåwvÏ(‚zñÜ,•ÐÓÇBL])ZE]×ë¬ð…XYla™±#س㠙‚gõŠ(¢{ádAÇé÷äÓÚ›¡ß5:oVÖ€öY-jö0lv’â\ÇÊ©dB O‘ ¢ÄGÙ·¿ÀwÂÉaó"ÃçÉç­I…ÖñÀ÷„:]å"Åkó@_('ÉŒÁЇ©”¥½¨™P`ÈåpÉÈQ©~Æã†#çjà (¬Ôïƒß·ÿZ†\8´0Ey˜Ð̺FZãÏEZ!¨Uذ »§/žB:]šSIÊföòRÖè‰æ(È«×ô]—ünt¸M¶ùË#ou}ø«ê(‹_·ãp™Ö¯V®0ñs¬,³3»Ç䉧ÚYUÞÈ'¼Ÿ&”—Iø.¿Öâ gˆ~ÌïNîhFÒé….â{¨-évAxƒ pb'ûú®ìq&ΦpÔ}û¶n!ÉO7é~…Sž1ò†?¯[ˆ¡­ö}p#œˆdÿõkêŒ$‹²q 0Õgר÷8ïdÌðÈDâÓ m;ÓDéÛ©ªÞŠ1tz­tö…{m`®9-Hi_þ*7j¸ŸÎÌp0qp—3’©?–+|pçÛÍ]ßAɆŸ§äm5q§9½™þ¦ÌÛ: t1Úðï1¹`ú;¶aúÐ8Ñw¾@qsõ¼Ñ§—o @Gbζƿ–e ííÿùÙ9®FT)äÙKN­¿WÃöüÝ`ÐÁ$¨p—kyµÉ ù˜=-*,aw(óxÛ ý¯/–Ë ýµLý7éy ¹1j.ÞB^9ÉAM" ¶¹P2ÚÎuÉ] -†Ó#:Ä_5T|Þõ© ‚fHÓxü­øæ"§7(ŸÚ ¶ÊuèF4BøE1‘ | ƒFmçÓ°7®7¦gg/^ó-"мývÌð‡˜¯ºæ´l>WŒ†YK0!ÿj™j81RC´À"h#$ªÏDdQ’d'©bÑZ+[™þDáu‹ß.ÁŠÛûU$hòaP´shǺzbåTçK¬\MmsØh0Ö¬ÞÉv<»žU«>ëÐ^Úé¶½¦¼eJ¢(Eè2%)ƒØ‰‘Y¶b8YŠgé-ycîz‚‚`œô”¢à!u0R0¦*¬}ŸÇ©ST§ ¤{Ò#~V£sÒ°g—¯»£ã;®$> £WLWm"§«)´\Â0@•ߘF%\§+³N|öXeûÁa¾Ÿ!06Ìå­wÚàÔ6{Èø–5:\û¦´’øÌàé—ÀOD±éæÌ!k+AV¸”ÆýcL å[¥@¹ø¥2q™e¬Šñð7ANtÕ.ýÔ{óA'÷þA‘Ôvƒ&tÇU°!s´¤¼¼Žß‹9çÛ7¦ K­”–T¥B\rd2HuǦCÅ!ð—YÜžj̇.v£z¥h¿¡Ñq£i Z«ò±@ùóXÌ0àl+lïu 5kæŒs}ÝþxÁ^ X Æ­ï;Õ?䯑 ²UÝ÷Üî\Ô‹iEÑä¿Ï¡¯Zl‘‘Ðz1€¥DË–£æLE8ªPc3ôj FÓÓ–ïû gª4+;ÃÆQÇæÌ/)›µ±fâ,LFÌÏe”‰¨ïçö‰ÍÚãmá0lÔf w“/‰áÛI$Ùÿ|?Éæ…eVžï5ÊÆç%v£×ù¶q` ÍëiC>éPTã¿Ò¢Ïê…¬?}†Õx±þpõ¡pcìcö|JöÊlæwdƹ=<'¼È’ Ú[Kxý€rëIK¡îô›—÷H{V.Xeã[÷û»MmÐÃ_àhÁÁ-í­×׎T±_ ƒrEõàÑ/s7ôcË{ÉÒÄçÍmX84ãÛ´Û]=ÅÆÔà*/ç+ïKãƒq6eÁ?âÄ`eû%!6ëè¥JNš8uÈOÿø%~r¼¢ŽQú~:_ݾŠ8fÕÊ€,(·"|Y¯|Õ“Et Ó¶,Ÿô±5@åÂòÂÒf$üX"\ÏÜr>WùHHíH,Ë r@O&â—ÆÈq¸ÔIxñv!é—ä}¨K'GRNTùšýZÙ‚áyU²=¶&Èßdƒ\¯ñ~,aūɫi+õc)@·9翜`ËÉÓÜ®ÑB3×"1£¯KÂ1›8‹Eṳ̈ÉÑ;ó¡t—¾¾ÛcUd™d^÷‡“7“nW˜ ׊=vEº­F¿°"Aówd gºMC®,ŽÎ˜XÝŽp5S‡™ ª£ãÇ",#ˆ&ìkº¥ àèÞAŒ ƒd7°Þâ°b#ôXüeärêt",=Nl] Mý»Md#/üØZ[Ÿˆ/ÎÏ•aÓÏ®½ˆ»³Ï@[ÿµî˜[Ë—­¿1ÐÖÿŵøÓ¢` /[ÿ†‹Ñ £jx,â~j1vN ­z‰n,$özT.8oeo¸1êøØŒ(ׇ †rïÉBݹè†7úÞy‰t¾ÇéÂ9{Ë¿&¿žà˜½#?P#}pÇš©rŽž…nþÁ,Z†ßÌìkd!?»èª×¯3ôë¾ô}úªÕþ]ªž]‰~¶á—ô‘CÛ‘woÙÕN‹ZÉl1Äáùx>6a¼íÏðý’vBì/Qk%$€]]ÇÛÁo³½¡d;j?X ëŸTÏW¡Úºµ…î:O–DŸYq§×w@ÞÝsU¬X_ÁÕ—ÃGÎE=WÊÂÓ©°Ÿ0‚¾Ñså—áíÞÔw4Š ³” À¥bçq ø‚KŠu ›å1Íå$´z@=@HŒ€ëÔ]…ºº/9ùÊ«Æ5Q2UÄO=QĸÒxÇl;SrŰEU[™®nxû»BcÚŒ+»ú<ªiq‰·jmI“8eÂñ÷çlÅÉñXÕ¸x|¹©°º>!¶³Ô¡? ä5—¶+ͨM6m»Œ¤²Ç¤ê%—î½w­Ã¹Þ`€wÍMŽ×Sdש-Ÿi”l“Ki=¤)•Àgõù@T㤄LlÁât†1Zì øëg(á—O°‡œ*Â/ª‚:Ò3¦¶¸¥ÉT:gƒ—ß:­ ÝCà‰é$šà`å 4cã µƒ©ïÒeeãÅdõ‚e´¼e×Có 9Ž=5ê 9ÙxøX±É܉³I¾S²Å¥\Ëy¤„n—âÀbVì¦ÙGÛœ»Ybu ˜n/ìá0ÿa­ Ç'ŒPQòøØ¬gÔrì`6›êa¹Ö lŠn,µ…z2UÇøò“ W³€vBó•âZÛUÅ”ßÃXJÿl:#ÃOõüdJT–@šüÈÏy† åz?:8Ê0CùšÎ–2?áv½MhÐlk\«*%ïe(œnéÓKXþ¤ÓÁxêG!…Ç .­à4Mm»û®¦¹ ˆ{¼‹KýŠ£³Ð¾‡ ?o¸¬Û'uÜVäøf£-c]‹OøEÐcŽ „UµQÞCb´Ì-QŸ…v¬àÊ›Bp(Ø¥ Ê“ êj«>Ça»ÛeŒùÌ~ˆ”, êÙQEÀô>Ã>ú8lkåQÊ!C4Ìíi%>+ç¤òÙ'FöQA¨‡8³ñF@­Œ2q=ÐKZöLvÈ­”a¶¾"¤Ø’[PÑí3ûô?WÂí­x˜§ƒŸ§Ò.ª­—ë‘;lt×Ä'Ž›_ž¾Ñ{—“×T‘ÅvÁ÷ŸÝèëÐâÑgŽ!ۀظáÛW£Vš5-/`- Þó©á_ "ªBb’™®¹Þ8Üøà!¸ñ%R­ñ©¦¸Ü¦,ñÊxú›g}TðHB*æjLJÔÎêm¤ôÔÅÕ#iO¶¸@9,…<'ÀÙË΋1è[F 8†î¹2ð­XqdzsÇè#Í“J7äwSååòŒæÌ˜M¬+Òw¦ŸxýiaUFÄee^Ô~gþçcÕZ~Äó å“ fòÝJwn¿ûÊ»¨ž)D¦F/„?ÿŒÏ’…Œ4[Ó4nÉãcßÄNÞq§57µÈËÎv«êÓ)v…5vjÉöcÔ ø’£XŽÍ‹ZKÇ‹Ö{n]IÝó4;hL…ˆmoWå çB;C»Î¾ÃüuiBÒtNTEš™&VÏ*—«˜þ­1ÒÐ)ùµÈA€7ŒÔ-ÏÎl€“! δÿ­ã&\Ä&1]XÝ#yêöD__ûéÄF„ÛÛ÷±•|âMx~#¬\Ãh\°œÁ†!&hEïz)CàË)öo¡·¨y‡ñÁ3š£Þ¦Êâ2Ùõ4#¿%E­gÕ÷ ¸ðÉÚXæÄ­'¾#O¨Hí±¸ÌSsƯê 'Ùo‹ZH‡ô.ò¥b]Ãûl‡ðåaBrs£šÔÕK(U{qÀÏå^vd‘ÏŒUó´FGѶjÌ./xì#&Ü+(¤äÍ›6 ²j²'s;à7çø.¹>&¤Á.«é·BcYýýó"ýé4(J~ ³ÁÔ’²‡(ÖŸòUõ"¡Ãý!×svÑŠ‹»û2N‹ø³Žob8Þ-þ40M[¿Êÿ8€Ýsàú¶­J< ]мÒ4¶fØ60 ãŒRÐG•Pø+Àå]<×QºØeñ•è~„Q®xà5ª;C Ô×*Œ[¡«^³oüPZè¹t'¥¡¦ ¤s:ïÏ4{²jÛ`î-ò9ó¢4Í0ŠœÙ^ÑI÷·°ŸVȹ¡Á/£^?wÀæt¤¯‡.…Ÿ~øGAЇÒf±8Tvøeº+ŽM• ZááFB”÷Y÷B &¤-šŒ¯)”4¾:ºÄο}™Kyàt°¿Ï§¤­©Ý?Î:”–mgÐÒV‚Þ&çÛ|t Ub÷¬q”PÙÈA-A)m?«—\™MÜR‰ \G¼Å‹ ‹s[»¥ê?Zª·°&#h÷äå1Oç{8¼‰ÍzCÐGç÷Ã^Ÿqö¢:L\”¼\ÏÿGê`«?¤-eÌ£ý™L6žû9 "ÆÇÖ¾Eøm7¡’-D!I„ «Ë]9m‹ôQ „ÄþÕÕݰYƒš‹çÂïmaymL¿œjG+Ú–ññ§µˆO#Õ»¢µ˜{>âÞØN€í²g´úMã,†C­ƒ¼Cð+F~üN˜X1ÖÙæ”¾¤éök_,¾ì¥ÖzíU» V5½m©†å:ÙO#b²•J]©`eÛ²FlrE‹Ø²¹7½êÇjãví•©ZÅ~r\òO6t›0ô;:¹?u~ÉžöšÖÍ à¬™øWÍåaaKÁ‚&;[_æ}óÇØ¢IÂbD½û²²©÷¡óÅ¢”±ÆwÐ ëØ‚ªVÚÛTìǵþ”=°A^£MåÖœŒ¿ vÊOÇâV")·¤'å«›§á•~Ôì°éì–~oùž8p ?ˆ)«àƒã•;¶ MLÏhÆ13ošðõn{—k$/ Ø›7|\äìœÄìœmM€²=ƒãÇäzBžÁ$@ÝxZ‘#k“‘ØE¢ [¶:{¡gg ¦1~4èÄ7ŸxQm}ÉA DZÞÎâJðíäšññéð}Ã9 !i]m]k]c»ø®š6®œ3U |s Ò_D¶!_ qÃí¢ðæ‘êÉóaª`ÔQ˜Íæ¦çŸ_|@dÑÔ?p0áÉè†~_kù¨x>æ°t·á^ö<þDpµÈ%@KãBã‰ÐÚù ÓœwŒ¨zÙ£Ÿ0Pà—ë²÷z¯–káÄÌ=T]Рeÿ’“ŸºÌ+Ú½ŸW`oí‹<|”çñWÝ=G#(e2ýÑÆ@ÇP¤å²ÏÖv‘‡£é0£±Rr|äA¦ò-¸3”ÑÐ̾€ôã’¿3‘`AófÆ|'ýíû¤ˆC& ‰@bú‘ì磭 å®™ †Zû¤\¹eY£!M€‘jauR J#ò!ŒƒH>bVè\ɾRŒð2”©ª~T[ï •þÂÊÝï’Î,^V¾cöe߃¾yCú/%’-\ ²/¯OC3ÀûÿW./x¢çå% ±î™Õ»„Ð"õ –$4C6n{À€¬©D.Ws~¹C#cïüèû«.$¯º‹;šZÐ ß?ŠŠüÂzªY ÿ€ƒ7þèAªš‚YÈgÖ‘9œE…t!þn?Rû7&b6oø²ç$–ç•Òõ|uñ"EÏ—~ Þ'“ØóKÇ¢H¡y‚¢ÑXÕ• œcßP‰Ôy T¡Ló~p;LÌ‘>aâ€Ç§NrH’L*ï|Î’ ZfÉÐê`žÏ~? Ñc?Ì}¬ˆ††z‡ð›Q`åCˆf ìˆQK»Ê¢ Q1ð‚~Y5éœ,Ϫ–çƒ$6l<Œ€J0!#=AÔl>•eÀÊrHç¹6¯@=:ŽCuÐ{ç[ d†dÜÞ›Bãæy1{EÉerf~/+ ÿ²’´ÿf%Õ-œ ¬@‹¯+ ªˆ²¶µ°£¦eºF¸-j¢%館àõÖTÑp¡ ÿ*è8Þ™þASZ÷ ì^qêK«dŠXÛÙxúF†Ùø‘WgØbßçp( Í$$ør, ô0Èüõ#ÚâíÂ.²Äµw°QWZïUß-´ S«T‘wD€çL°[Ù›„Ù|(ëwÈ­O²W2h”ÔÌD;`r/+)A±,jg/ÀJ`X¹{>ðî|zhM@`¹²Ññj””sMÉ,碿ø[Wdœ ÄâýéÀŠkï”—·›f/UÖeënP ‡䔉âÍ›Uø7o(¿¿…oœB/æhýGá°úáTU´çö¯…ûIâR9Ô Rc¤ôŸJoI*T´z…§–•¬½k,c¦¨®lªŠŠŠ5Ù$ü!>öbØܨ<¤·¢xN®^»'¶M("X÷'+&øvoxn\å*}oøü<Ïà Ó&×ÞÓÜ~莄»s€êóq³×èF{,ëBÌ{¼##ÌÜì«ö+òvŒ-pSëF~º·›–CÆ4šÿF³»™Þ«Õ‹s21Á‹s'p4‹š°Þ2?¾¤çÃä¸ v»nDa 6M_E\檓’©Ž2+W¦,¹‰·„T± tÿ´ñGnº}_×(‚Ëb#¦ú~Šjêâ2|°ÚøñcGy5éRGÖÁµ9jÍS“3Ùáê|S }ºöjRœCY«ÂtzíP T|HÔ„ .i«’pÅaøk¡y•Ùþ&4#iV 3òŠø2&SJc EPE)‰Ñ&}1y3“•ôBNSsnáLȘd=Uf8)E¾bó©sÔŽ'¢'–Ë#ç¸'ÐW+GÌß$8T•]tºŒà†•.² •â¹OÓ»©„ùÝb­çŒš¬£ö¥eó+Ÿ±d5“ÍyÐ Uý¹JÊ^=ó!†áI95Ý€šlwä!™ M}™wÍ"4±#3‘s,æù¢•åd5VUä&’,ÜR·ÎKíž3%*Z‡®Û¦°6CÇçzdeËåš5öjð×TíÜV¶.CMç$ì¤2t˜›ýu¥KYjT'«"!!i‰ÝŸÂvãQ™è7ÁÛ©6ÉñÌÌ;þ,¬£gð”WSL¨•Û^Y¡ß´÷†ªc³·þHatäµ!˜GOàh 5‰¦LNû¤BcÅåXK‰u€Q}<ílñÙJ°ßÊM·—DnSÙnÃfZúoȤo¸`?u:Ò9‚#‰é­ýç®LÁW½é 0¹ö±j¥&?°%À´í‘°TÌ]f؃Z7$Éø†02á†qÈϦ£9bq:Øy’ áDQ/hü²ØØ‹Êêr 'ï/W¼7èóŽ7ùŸ¯ÞŸvPë(^SvÓ˜kÅR—íjŒã¸#Ǿ=ß;ž‡]°:4ÿ,¤/ì<}Z%HŒê¬gWå"·*4|ÂSF,Ÿ*Ž©i6`¸!wzÛ†Nš'5ã@-ÊQÿn ï=Šg§¼$`”dòû5R…rÂ@ww¨¡®äÂÛç. 2CM²ÉiQ,47?Hc²©Yåu*±àÌ µ\…f蘋}ùØ}å¦/(Ö);kã´6$6_ÙC€·lLýÔ^C”î¢Pž9íÒþHõ×¥~}ŠS±&ѯx4b ¹ó„ë\±ÇÚ¼î* Ïaêë}i¡L¸ç_r>·?úæ©×JàMúR« ƒSw‡‡”¶—€·Æ Hd2k˜î[Ÿ,¤74,.ÊÈŒ1ü-ÐÊȮ÷,yâ¤Ï%RèS;Aö¢×5ÑWš‘{$ Xʼ™„Sk:ò­ºa¤Þ»‹òzó,Šg–õã\3èo\°’iø_×övìœ.9¸ï\5Ië—$#="Žx=¤©cü‚¤ÅAÇŒî~_Z棂ñÍê#e3BOª¿5Çøz;Oì$ØÐœ­¥£@@ÅïdJ µn ©6N-_Œ–´ð£EÁ=jBuéu£EÌ͇‚·+îi!€$X‡—S~xÕq_ñ¨V±ZÏãfj)*㎠SÝ DHó¼Z=ÒMR–DH¡9È#äk£.N½šF¨ÁŠhÁ ÷ ¢ìÂ΃öRÃ&šx¹žbœÝ*pµ»•»|4/Üô°K%Ë=`UÚ¼¤{cÂÖ çJ§"ä¨j8ÅîJõZøañP–È=cùàšÈ=áô’s®#˜g¸¡1– : ‘³—7ÅD•)“‘ÅßÏ›sàQ-"ìÄX÷FAyHò¼­ê'“ä€gqüUìˆÞQ˜<üÃyŠê=vS=‹­…Yúôô.‡QÌä~4¡{…®‚?'¦’V/æ7n¨rh¶òo³&vö¨³­Ð–oˆ1šL!ŸÁR¿0ñh¼8 @mEÔ ­À¡‰h%>yPA$oXHHÊPÐ\ 54½rbÖ°9Qb4Xkû¯îâ'}ݵÌ5g·yQu/û¦Öñ/cíîŒuÓˬãìB|,ÞçœsŒ³•T± É×$d6Ç·#ÁºhtнâEùå‹'Óȱ3÷ 4G«KèV¨Ëº…ÍÒî­ ù.âÊ)Š$1aÃlRH¥1óÕå8f7Ĉ€ýð9×÷7m*+4½\ógF¹ÍÇZ»áu½3É g ¸ÄGD8nw:SÖÇ yiüPH®Ñë³? ·QËÎß«•MQeö›“š(Ê$åŠ~HpÇÕE`º×ÛŽ¨P¡e|Z•æ¿}û?PK 6G8% hh ûIWEB-INF/lib/el-impl-1.0.jarŒ»peѶ¶Û¶m;騶mÛIw:ÉŽmÛ¶Ó±mÛ¶:øúÔ=ÿ½·Ï¾{¿UµkÕÞõÖX»æ|æ»Æ˜k,EP0 ¦ì@ÿ퀒S¢—’güRü§ ÈätVöýtõÏ·` ´?çÿ”Ê ÉK‰‹©¨2ȉ'ÅÖY÷3!<¶v‡ Hv…zu”YZÙôtÛ“+|¥À—´$%·’¡ÉëJªŸ¿?;}]Æ]+ å_¶YèIÖívŒ¼’c™‹´.ÑRëƒå‹Û1¦œîuhVäìgŸe9Èì‘S8#Ópx^e†6Èûå È»^h©ÐŠ]Ž®²§:Z©ðu4 ¢ÝCt’úð¡¨Nµ„ÎKÊc^ãöðÃ’Ë^ëDCJß–fûš`|Î'9©±¯²©rÁèÞ…Î#îß÷ó¡bF§.lQüÏQ›UsúkÔÀþ|LìÿK¡ø/ã õO…‹›ýS)ÿ‹ ö¿©Ìlÿ‡pH mì-þ‡°(«œ]Ìœÿ›^åŽîæjõ_ÿ ÈüZ„ôÕ¨ˆâoµ˜§£³™‹‹•ƒ½¸‘‰«ƒ³—”£-ƒ‰­‘‹K‘ªÂ¼"–´+í f:ZÛÉÊJÑOÌDl0Ôø0 ¤øA…"Þèøj;y¼_#5/ÁÈRa߯<§8´ôJˆ×ùO×ïºK¦Ÿ ºA4Å•z¡ì©S{í°XŽÐ$SSêfbxa®HŠˆÂİ­ÀaXöšb*5]Xî` ”bóÆ[%b}­¹Õo"s³VÉc—6aÈåRX®Zy%¾ëÊ¥ DŠˆ´À—”ÿÚäÍ5WŒT]²ëŽHãn˜.@àâ\t$Eµ—^ëT‹Üä‘k-—U9$.éQæ>n‹¶€šs/¶Nþþ†Å™Ôîç iR…àÏ[8 ÑüÕª—BåáãÿšuV–»!nFW5 ÖëÒnµÞh½Â¨Å^©D¹Rš±›ž)~ÔJ›‡þ3-ºGÝrýZ7bz”äÀi,u¦éh/€Ys2ÅÉ`”%êH¶¥øw©lºqV²Ap²^ž,†šìs¯©Ì½â„z®[ŒHU(YYj_Âöb;G®éíœNiò„øü ›~8]÷F­{ÛŸeS7›@ ôKîV¼|)à£')k«W&ÓÅb·¨¢–F†aš¯ÝJE˜í~jcèʧžÚ,·(1†ŒDÏ£¥Ï0E=Ý’_Ï9±12ïìãe2f^˜.XGÃq­(D$¿Þ†r¯Ò¢neÀwmÐD$K—ËZN Lq“Y{cK”pÕR±cé ‚{|ß7(˜{Œ~rAWÉéî†èÅ×P˽òXÉÆIï¨ßp±¸¾*O™á¶¶'Ï xÉñxopd÷¹fÔ¸t3é|åDÌ’Ëåìx‡ø6Èé˜Îθ2ÈÐY¸ÀÃ5I¾@ÿM°ÜÈÉõŸuëógÍ‘ÿM°œ™«¥ƒéqü_g©Ÿjડ}uÑuÆÂ™(7¡·“±5+§(ëèÀáÀËPç‚ëLäõËò¤)–ò^ý¶ø8hñ¿ Ì$E{À‹ñŸuy/àÛâL£#CåD¸¿ÚðhÙîºîæ}ÝŸ&üáˆ`î„WfvÓ©©$£M·oœ†4N6¬Š´ÌŒO6¤oï8FlÄÄ݉5 ÓŠ=ÀW ÞÔG¢°ƒ^woT#„Á+ƒ‡ÝkÊ}ˆ¤^‹Î^ç%S‹3Ì2EDÁMnB½šV•Ù7“­ŸÀyDqN¦$7u,å[hÌâªf¯Y\^KW[3Þ–)|WK¿-K¥m\™kA·è(Z¸ÔIœÁàíR_6&“®¼t*ž¬øPÄ:äMb0¬,Ïqž–Jm–´ ¾Â'¤í°î*µ¨vÎÈÉÂ%Á a—²çý•Ï&[H|ǃõØ–Lqè.´åéÁž>ZÄÎ×ë˜B”VnJòÍÎÇ0bqƒØ´ÞÛo²6Uy«ïEŠP½!Ÿ/ØSg4×k)aËÚ›'fJ2L9pÙ³:Þqa^PÛy¨qÿÒ¦£SãK+{8E¬ k Á2œ.9(q¦‡gÊÙk‡—ã<¨P,:ª*{W »àQ@.ÖF—iKéÚ0iÕ†cVÍÚŽ­Á ÕLË`õiAS:*÷å£Èï6±†Jž ÿÂÚƒ®S¤3: U>çn—N*qÔêƒb`~Ð([_%ç4­"Šæ=DR‚ÅÃEaØA.¢ß8ôÔëCïì½-jašôøÄ›ré¤ßÅï¤5½V ¡[hùô| ,âØ\•Œw¥HîÃ-wC ÷L“û0–%²Û©Œ¦å•¨(.vôQ÷ ®ZޱQýhb7Ò4šNîˆÚÝÅ™f ÑSãWmÚÔ ÏH¯|Ôp[Ô}oZ|ÂkRúú½ˆYµ¸ï¯„5÷ðÍ=p½ÒÒÑâ\§Â—j¦<Ýb¿>Ñø½u|áw†Í¦zÅDíËËK f÷ü¡ÿ<Љ¡»y䮦ÚÍÏ"ë0+3-•‹À4òdÕxaý]…¶#í/?(˜ã".>íñZádbf 9•-c.T§6×@ûíl†–S‘ý9wáM{ª²`m›Lî‚•©Ê¦Pq¦êÐÌb'`©´•<™Óv#Ë °“èM2¶^R ÂíÛÐ2K•ô0Ž¢:IW8錒]I6Qw6Q+9¤eùD Ì÷Ù߆¼Hß…ßCIÌ3O¬ˆ£‡Üwƈ›²‹ù0÷%ðv"8¦cä¤O~D…¿.Ï]}’«Ä'¢”€å’¯ïMOëƒpÄŽØÅþÀzºÙááåéŽ Ap¬ysðÿmw¬H.qê…1ÍÄ·§:·ï ò ò·cÚh¦ŒAþÉe¨þgÇ”µr5s6ú§iÚ©êýÃ479ÓçG‹‘´o ”9ÒIÕ×iìì"„ €Ákˆ± O˜P-(ØsNünóô`•kmÜN#?©RŽÍ)ÉúI\Ž·¦³ž3Y¿>Ÿe€îkÕ2û›T$÷Ú;}© èJ%wá­ƒ·uÒ!-jq)­Y}$RùTœ24ƒw…·m¾qÂØã4êµ4-c—xÏ\KXA³•¸jÛ¥jËð€Û»ìOIFÍö.ÍF×iCE¨=–ÂßÂ6Ý6k¼h*çí×ãº1HÈ«¤œ²ëÌ mð$:®Ö™ç«FÍyF<£Lí&/ã€_ç ÒOÍý±ˆ¥éàý4hãÑ—¸r߉—y/ÌzÍK›øà¡ÓL7r#–åK¦¢¨·<”ž ÷ƒ¡«‘eÀM“ž "‰PdD°Ø ¼”å阮˜rüüqÖxv-iB±âèª?Å­¶W+-¢î ²9i2N˜²Û4N…Y•¥< Y}„@¶w¬t‘<öw+LaâO­]» „ àd"½¡ÑGM¢©Ùç ‹¬U%±àîÆxxÆ6¯˜òïµYáWœNR è1ëì¿ýa’°¯pË,HÃ} îßÂÓ|â•Ñ­ª´ÏÖ\×_Gk(ŒºÒ/ û›Ì:wdë{ÊýÀéûl 3÷üóY< LòËœõöé„ F5×gü|­_ì©îZ±W•R /C¯’\‹µj¦á^µØCã¶ÄãFZoªDAfè 4ƒŽEWý€cwÍÀA;Øg¨YLp®N^ç§=ïUx·B‘~$ÖšîÀHE|§ÊÜ(ö FÎÝúÛukõgê®2ÇžÚq¾eZitQ˜U‹»ÎŒ©jÒ‡ ¨ia$€C‘C•”3=Ø8_RyÎßUÂþ@Òaįv:ÀÍià@r¶E€â¸¢kÎu¶\9s(ºÓ’SžveÍ¥Ö"ö; .À‚J.´_û‰Ùî ÉéòŽ8áM®S¬(+—Wø—à^·»àh Wt\‰ÝƒØuâ=Ç1îÑè;W• ÊâO™ÄŽÂᇣ=ÂZì†ØQbÄþxíd¶¤/ÜQƒ¸%m®$¡|]/òO‰T!Â&RT r#Ø2„ü"§HÈ*—oËä ô¤îéÌÛ'÷œØž²µµQ=ŒË'©kiUúˆÖÖrºš9úÃŒ8ç5h/tj¶‰øo J.$ロ`W1É& ØíUSH«<Êp5JVÐÅ–^}bס÷{ Zƒ<çÁ4lTFNKÒfv‹ªJ ÜÔÜÎK<ù4ûýí´FE¿¼”÷)¨§‘t5ØÎ`µú]¸Jï ¹‡ÃvÝî쓸<~ã) Ê"? 1l®DñÃ];]ôÿƃ¼îÁ#Ü5(Ù–]G|$_ªåɤW’ˆEïr)` ì¿à©*:Ú#¹º4ð öqË5YU©ËDñ¬tÍ[ûné»M^²÷!œßC+ŠëgÖZk—Ôšð¾íZ@ÏYE#÷Vôé%=„‹M꣹’ÙR!d@(5XÌø o•NT1fûÑ:¬åÃrMtû¼‚õuì(ßÔ~¡ÉS“:¢ƒªÚY‰vYŸ>-hà8PžÙ±-ŸŸIŒ|ØÜ†)ž°¹QÜ7hkÙ\xÎËâ|,RU²™UY ¢q®À6vY+χ;rš×dç¹;h‡(iÒËŒ­gu1ú/ON3GÖµè½D³fTK0$NãT)áX«d•€2üdôsä´°9Ô‡ Ñæ¦:v¯9™»F•xñ¬XxT¬‚ •„›—»­ä õM/¡èÏ¿µeóä[§>̰ŠMœÐ†šƒ ü(þeÌÜ™•%ÞÒ0ÿPüŸzÜØ/0é©MX\RÔ8/*êrQ˜ôØ•jKØ'ixÏjÅÅ2üq‚ën ¹ºÁ ^ŒlR ±-,xw¯¥—…‘ÖpV­v‡,£Ú'4˳1z¬Æ²m7Ì#oYÏqøv6W-”sŽa€Vjã3y hÏ´7y«õG—+¸”¶Þï›TÈ(å§tKƒÞ¾áýBüŠWŒ$±.®ºäÀ‰·ôAkך\?¦ûê‘ ýlHa«€ Å4¿<‡úØqz¿ÛεÌGx´a:H‚)÷Ì÷AÜ´–ÔE»ÇíÕ::ãÆS•ÿ` IUêí€wöZöƒâ ä‡í‹¯­¥Ä0è^€»šT,äWê£%cŽA°†Ì›¥ÞU¨DñSömY;4OŠ@ŒˆáôgGØ3ÆØXKƒ·µC›¡ï5†àg+ì†Zä.{ñô€,!y¸üÒ´¯ìIúH!éöð-Á´ôø .Þ}މħ¢‚ðüÂhf¥à×/Œe¼…Ú}µÚz'k…տŬDÞ¡ŽïH`‰`CÌ:æ¡íã¾*”Ù­í§I+Ňä¬È*Ûs„òñŸ¥¨Èƒ6\ˆý^íg¤žY<ÎWéòø“”£â”qCNÞ2³²øÑžOä+Œ[_ i”¾÷^ùbV(G¶Wà$«§˜¡=´©û`‘3¾¿ñfEú¾QRÑ?#ûP,MûŠC¨ìÃè.—m#ýÊ!@Êõ“dŒ{é1»Ï#1ÛåCñ9[/¾Mvè8Y  /‹BU@2šàƒñ[T¶x¥õ8ˆx|ï𛥟Õqºb$#$Íšü3Å3‘d6ÍqÇZö’ËaNàÝ‚eNs)a¾¥HþFŠN·Žuá&Ö2ÿÝܻן³ýÀdøÀ‡P‘¢Ï}qÚŠRÏêgfKpŸEcÔ.eh‰ ¤¤ÄÎå?ó³Ä´ÜÆÝÚ»x[æ$¾aPO0F Æ|Ù)‡øwaÞ®˜ù¬#d{ˆP¶Ä€ïÀ»O±šD¾8Pëbÿ7»Úb²BÎV®–vf®V&dÂV¢f&VvF¶¢f¶fF®fÿáE~*ró‚H~\n{íAE‚sr¥ÔhT`ijé"…á±4½“NÉI—DÃÑ ÔßÀ†8J!IBU¿S TîÏÄ2Êd¯fùÝ]N]]ÛöZéWOq”rgÞˆ­#~—oqÔ‰än#HfZ‡¹£ ŽÌÔ´Y$Û¼Ncï½öQº.T:¥c5áô }¾LXâ¦Ûµº]ªí¨¶iÄ  ‰ˆÚp´Y Ì/E‡aüÎ>\*Q\®l&¥ÐZ|†›§ì’Ox Èêyªz~‚„XeömèÕ[ïï¤\dµ;¼•Ü­ £c.ì'³· Q×;.>ÄjG·,°A_>v» ëôayRÝe^Å<Ê WãSŽ ¦Ø¯ åSª£dk8µ¬êYlÝÔ¸¹{ ¶x…ùÜæ¥¤rÌQƒ+péb¦¬XÕÊðm[°ˆÒ¡›38V‹‹ß7Ò ɇc>E&šAÁ[϶†xÕf-]{_¨%Ð'ϪVÖÇ<™(ìVÖÍ )cQ›WÔã§“°³§¼Åö{i~6ó&†}HAŧèm0»‹ô5.|"“\8ŸuNΖÌìÔ~Ó ûdØË‚J§¾œ§0x^áFD€/t¡ó—¸€7“æ'ãÙmh#8€Ð"‹Ê¡ª¡gÄÜ?*?âICcë™bI<âpzêÐhAUíCeÃG$•Â>—4& mFÂwi–H ¼¤#.¿)Ã(% …žñ¥9ÔùÿL¬C2^ä?`zü?‚)eïjfaæü/`ÆËüÌᯌT“\z©Œ¿Ù¦2jÝØŸ±¹‡He4d…Î.™j{cˆ¦4·J;°Ž»Š a¢ä`hÆN–RšwWîæOÏ9×߀.öËÂ34UÄ žÕøzÚuí¨VT•z’ÑÖçîÃñ©Ï`p`à}.œŽƒ°[‘ïñ¼P¼™î%ª'WëœÕd H½óÖ믅̦“ ˜ó >gª9yéÈÔ¯±ˆMa V ýú“gþ]ÿ9¿Ø+ÈßvÈ«Ñ†Š¾:\ü¬ 5C~ó‡Ñ–SÚÏ8ö»"^ùóüçIëvà?=¼ ‹Jà<JÝܲyŽà/·ðŸ®/×FRâ¨Z—J+Žrç9 ~ôìmqÝŸ¤ÄÑz `V7ø¥ÇútÚÀ–;PO–6ýü!™?\ßÞ䥄ý¿Wr–Ææ¾6QË´‰}V5¼Ÿ›Žûv‹EcUP0¬ÚÁÀûZIm0×c.£Ð2Ϻ|’4^Fa!æàQˆ}ú~…t±5çDí¤qZg!e3¤`*û9’M¹€Ÿˆj˜ w~ ›¦0‚{Œ9’‰z1ØK«!ó´ÕJþ:¬š—?ÒëÜ="Ž“qéT… ’G¨šè°µV;V: *Ÿ,°¤thÊ•ºÍÅÓŒ÷}a—x¤mc1ûEñÀ •Ôxñ+zÍàoÆŽ¯ŠÎÿ0fÄü¿1&êàflkö7_Q 2*óŠhÃ_-ˆÂ20ªúêJŠ^lÊ7aÉ!‚À³4S¹=­Róš?­ú ©Y¯ÞqÌ®[è~ÌbCr2¼+FS=”¹:Mó×(|r¿~¯#%H¾ÍFé€Þ±†B "ïH/B~„þ`Vº’Ùø5é°ÿ z£d:ÃÛz.”rõêDˆƇv“šg¦=nµDÈ‹·jxC‡c•„Çež CéqÀÏ]<Þ&{aFœ¡<ééG¦LHRi\Z,\ ÀW >O.;d‘›±²Sh™Àa3µéŽ­—Õª;I§?In®ønˆT__d[ᘕ¾Ò¶–P«ü¢ž<² nÓ=¼½ÅV›"F[} |@LÖ°<ÞɬÀ4=ã… œX½¢î’œ®$·ÕÚãƒ!ws%4ÁìšéÁx° “4”ê©Eç«úÉë ¥‰~ 7uÛ–ú'S‘õRihn(/¢™¢‚VÓ`­#mZ†XÔ•gÇtãÎ9FyüŠPg¹GÁZ›ãpY‚-ïâÖÎrüé0ã)u=½ef—ª¿HPRÙerB,\¯®TµH$“?ôºýá`7†4}>©!מI/Øyœå–«6Všœe~#ótÆ®Ãxq…CÁÙØÉö¡þêžêÑ}ÆðVú: 9Ô3%p÷Ó[ëz…yE££G„“¦È –sõõD¡5ü$*»ï¿ZîêÊÄ3z‡?6.F<«TTŒ¯_O¿43÷07¨ûgùX€ži=ÚnÁLQS(B†kø’É‹­¨šÇ÷ÁÎu\þ€/:¿*>P>[ˆ‚ŸÎ]^ZÝù¶;{4ìjyU•ÂÅ üžN+hôɳ×ãR±V-áïd\k{ ×&õQÂú†„äëaŸÂÛÄka ·Ð´!'®ö¬ñ¨)¶ŒâNDz›½$§ná;Ð —:õ B£ÐhÄžýûŸÊéGÈYþõ¾¯ÅHo°ÿR´\=Fu•€1þo+GÖÁÞâïu?.¿.ˆø"F Ú€ΛA±œ#ÛT!Vëɧú ŽqE1…ñ òÄ…#lð¶x\¹…m/òCÄÑfÜÅwÊ÷szÐÅã룇’N‡‰ÙÊf.QnÂò÷Ð@e˜à“ýT¦iJ±té ;2*—~d÷’£ÿØú>Ôëÿп¤Õ‡¹úIܺ‹8Þ ™§°ñýçP„ð³*Õ‡|´«Ž»™r!¦b¨Ò†2±Z—w]ÅAϘ¡·.w‰ñKìâ¦>´DÕŸÛ¶p¹¦Æ½C¼-u¡0ý7¤ËpïÑÑ Ì ™=6¢uÛHW×]UG)Šå" T§ªl­Ôº³»áÖ9m~A¸ 1$z뿱Äs<¦¥r:ê$?W8ÜÖ·®€û=Ýxy™²Ò†Ô^§uQ#¤¿e¡ú%õé“ 8ן…6øq£Ò²kÍâϰ ìÌ—#ƒh HV—ZÑd(A‡€+Ò\á@<’A4·oÏÕ”˜p«ÈØkïæŸi j¢KÔåõžÒÍbbÎàkܯJÖ%FXŠ(:ŸJ²miÌLʪ³º5umu—8 Òqãà‡gkOÛäçƒò–±~Ü–þ¨öÁ]ÞŠƒÛ¼Uu–<Ù2_ 3)p™U¡ÖÙW‹TV²€_s¢NH‰vS¿,¤(f[¼(K+Uv¦½™}•+¥Í(qéœ ÒRTM`à*›>éÜŸL†SÉá0[ˆ@ç^Çñ„Ë,øÞ™ÏÂÃ+7Tµhý”ÓÒÄ×å-Ï©»>Õ³’~“5rFßÿ\êU•_ aÁÖxb‰öúE“ÍËCÞ™—Ÿª&ËÞOÞõÝï+€eçR ž’¥{@ƒ%[,'òÞSkˆ(Ÿå™hŸ `ÚêÂpRÿ™BÆ8MLA:¸Åh°‹]Â,M¯¦CÈÒ=è¡ÊQ1'ͽDõ4í,aWÖnMa b©ŸÄuhPà67B[¸h-Cœ6bS‰ÎûA¹7dÚùC…Yín„¿&NCyê.Lpˆ½ù^#IE|WÙlþúôøVøwy>Gë÷ÈnáöÄEgó‡ðr¹ o‰ÍlÈ_{qÚTÿø[Ö#®æs’gné%#%ÎYágf&0°%~J°‹ö{9{Ú$É"Þ,rz·8”un¼RBÆ­Fó5»q˜€výâ[fa•Ú¶Þd‰Ue¸ú‡²‡’¡•¸ÍP> y Bs <->môï£ Q’´Iîñþ.Ý‚ #b»PXö3©Ï¼_x ì¶EãÃ>§Z|òŒ/N(‹CrV¤n¥Q 9A¼møÐ:’,‘ÇÄDòº õàSׂ›Ë-`FþÀr½ŠØÕÜ’¢ö$@œ2+(œRk;Fa–2|dȘ;rAf/ñFk7ø!kf’÷?ð%ö„¼7[÷Ø_‰ºÆhõU<º²:‡FÎÅ喇3β–Ú-Ë[9ë¼G;W’ÑkØÐñk| ¬vòØ=q'MëÜ ']69wÝ?Î,ç=åØV×Òr é1À0wZ“[ÕaIì¨Äüm[f6D0¼C×v™œì0ÚC×­ò[Cè/(ìS‚ñøã<¾4!_t+¡dH´¡ 5 ^vè/^'·Üî#ÌöC¥ QæjiïîðXEÊܑ僓k=œ™0Ÿ’nW|Oy}}°c¦CìEìOsÉ®rúÅa\ªD½¤_f±H³à¶äØñŒCéé§6%ϲo9¡é ` |žH#FFQSrx¬ú#`=jVd¤Ž®wXÚ‡vÃÄØè÷‘”B0wµ†ó³uƒ|°%Âxš5©Ålë„,æÚcâÝ‹¥?ºIƒP Hø„Vä^àÖ>AÿvZJd±X R< Âë´*nŽŽήÿl•Ñ„ÖÔ]DÿtÐÜšØÂ"Š º€žˆEB%í%2$$Y%Ó^‡ö ˜5‚° `¶²±³k׬h¾ÚQ¶!·¢mÂÒI U³µËwß~ö3°³yVßç~î^M%¾‘êöHipxÞàõº]¤Ìp àÊÝíGà«Ü'õ 鉥tMå9«½a&¨ÞUÊq;y«!˜¿‘Â÷ÂÚÜÇ‘?uÜ…Þò•î/qC3RíǺ&å wÒîOàN q‚Wà¾ÁÆ/š»aÛÏ™U@ãOï5t~àUäfC«sôJSh¾€Áf9îpSÎ~ÏaðRï¿Gèìyê.5ahÎa²ù* óøJIÀwOôuçïW¼¤jÎK‡8Ù|ç¥RYå•_è—Þìºûû=² àTübÐý·¥ÞŸ mG³,û°á¿ĸ­½U½Sã¾°êd†pÍN©þ2-78m|mBŇ{’¿wÈZÏØf~{æ±ûìIÿéÏYÙûÖp”¢ùf yj õ†K`¬õÝ›‘u}{uø»cÏgÙ®ÁÅî/­¡ï\`_‹·ßÞ¿AÖì¨L)!I ’ü¤L~“› Á' l “'©g‹“ųÁÆ’)ªÒëÝ*wüž;ö ñÚpU>´´ùáç×Û$Et/h2,ð¾TÑ%Ñ ³‰çŠJ1} ^³Ž{r ð:)R1†êNйvQÏQ$Ló7Ø!N˜°ã[3{Òê6$¢ËC÷ÛŠå6ážY=júÐÿî9D fî>©˜ÒF©I÷&ç@Äï 2BAEå`’ûKðÿ5‰ã¥k×1žÌœ”¹º4@à0²n–Fnç¼Sð~ùÑ™æuÈ6ÍU1®’wÜÄÅ,ë+7ݶóZêi>„}¯â$w]BÏO¬äý˜VÓï™!NÔB‹UÛÙ-ØÚµ=í¦®ë/öV?v|î·¹>Á`P³ü«ÆAÓ¼ÛøÇ¬ìáCFçhŒ}â(œóKŸo­gÚ9,­g·“&°£BhbÚÅÊ\¹:|±öTžJÍEÓå7ئg„è5†_ðšc‘mø0à¿'bÝ*ù-ÙÁƒ†CªæaÀ‹Ø›s|3,=Hàö¦ J£"ˆpÛïÅ‘2yЋ`‘¤PßÃu‚râ´¢r Iût©+¨ñ•CØ÷ý†gÖ9ÀmÍ(»Ûÿ,3d™3Û©VEv'HÍíéé’MÙ˜ÁRK%S ží©jŠSJ+77m¸[“>^áÂnZ ¢:¤6éšLšÓ€ëDõRª C™@ÿs1ØkŒÄGÊ"tH°ðJ«^J“þ¿V/—ƒÛûLþH’7ùbçd‰‰kF%—Ê‹ «7ÖÏ"B‡IËV7‡T‘ÊðÝy+_W ­ØJ"zw‚ÉrG`Ãa'HÇSÓ±ˆX=‚½³\úŽ/9ªid¨šuÀÛ‰¸†Ã±Kw@Ä-¾ëq˜æA\©_SSARE!v“5#¾çÎ+_ÝÖ|ƒ!;ëuIg®b?/;‚ ùvfD$˜}~–®™\ßC¤1b+ð'_íbF4ƒxmP^î‚eÀŒd ߸…ø©ÖÂ<«B,¡` NIkˆÅ<ô#)%BÞ—%•óÐÍv‡J†è¤Å÷³œƒïÉ=C.1Îð ÿÄ>Á»oèžsëþqº>Ä :y3><¯“¤(¦qBò®Êq­Ä\!ö§1löê-Ѩö"4™/KŒž;ŠFê)!u|¾¿€²óÛ\"Ùb~µ­&?Né*ŠºŠÞù•8 é%/©‹Â1ƒpû˜&ïÞãs/¢‚ws¡Õ«““F÷Tᓜk;d_2猙¼7*uÁ´CñEºÎÓ¢ eG‡›êLÚá$:<¬ò´„ÞˆÅãCzrÌVÁ,®<¢‹ÃÊ0rBÀ¶ûa‰î01½.4=z‚Ñqle×!ÇÔSsø‚´ITùä»´¥ŸºërÑ M8ÖÃju¦ÔS 7©ÛÄ *÷ ’ÏO–zÖ|«n\`»L—õóˆ|£YOGÈŸÂpÉ<³lñˆ¡.yD+@)tw„¢-_(ODQK¢öhÓåmäa–ZægÖkj®nºÇ€A?Ð]l±<%’Ú>¬_'—iç¤8åÖQ"CƒßcŽÉ”Ÿ«¶BBô:`ËÕ¾»$àÞ”íˆÂ{9õ^kBÜ •ºsÍ?LJ‘ÏÕ¾,QV®àà¡·^,‘ª²­ : s¢sJhu¶«­Ãîɽœ¸ 1°¢=ª¡ŸôsÃÎ`m¦£óÃÂÝ„=½;Ýx§ºOœ1÷£=µ)t ö{Ï×ÍæžøŠ¶PÄïBšw"¼jq³%‡Çk2s…ñŽ@j=î b Æ•¶±¥…† ëBK¥µÀx”ÕdOë$¢ì7ùª4Α ¤ÈêTbKãà \ˆ è*‡î|Õ·^èljìõ"𡉤H örUN1?| •Ÿ»ã Öî„ø»Hˆÿ5ý| Äöÿë%ø"ÁÝÈÖÍÈÕÊÁ^ÄÁÞÕÌóŸÅ‚›ò<¿ÃíÃkž)´’†&üÈtW–ÓÍ'!Fà:˜YçØT¯ŽÄ”WýD…¤aÚëAÜ‘ 6ßt[3\ÁöÙÎðbþ}|]³ ôTg0z¡Yj¬¬A³r6¡Ô«–W%,ÜÅ¢Ÿ²Ë¬Ér"nDˆ š ÆŠQ€ØÚà7,Í &4$ ;o‰|.¨Íy‰„šG ÖþXF1ÈsÒñ=ñ¿‹Þ Ô+ô¨éë¢Ï"\’'ý–2Z‰.2ï®QŽìÐÍ/rÎÀÝ’UžºüQCÒb‘Dcžp±qqNÂ÷ܺz<5Z’»ªH_ëç„™4°ö-8ÑNø@œ,Éw¾¤p‰—pgèZÑ™¡1K «aœvÀ›þT7¿_º9Œ2,·§)U\‚7}“¹ÎÁÅQ7X•—ñqR#ÌîRîÌ…Ñ+IõÍÂdñþ‹ÿ—§–žb‘’raK;Šë©r³à£fÞJn |¢¡²}ë·Þ'0òÖ€Ý+9C}!~¸ Kk÷(–‚Îý‚‘~O] \ìÎhJðÚ´Þƒ@€†Ub<Ž"»ƒB]¬Ò¹œÕ ºXš1³Ilð`äÇ$Ñwö©-¬ÄŠ2Y‹péfÊU6i˜sÀÏï³RÇçPqþ‡ZP êÇÊö»YÙšš9“1ÿsóVYÉf^íÓ>ÃnB·Ã;)£ºÒ^j À¸7)1ØWÎ$ääP×uÉÒ_(òÁÿ“Q`"m ú“êvƒŽÉ˜qÃeŠß÷¸ãØÿøóóþò‡ž«ëI©UkiH;_帥ˆ¸‡k¢£Fº<<¼\°DöÍÞ0ZjW‰Ä-„Û7,g3–(l‚THÊ«´ó—j,^Æ­ì¡N~=äÞTÔ^w!ŠN”»ùH☽êÐ~Dœ+惄ØÞèÞ~¿í(æÊ¢Æù•û¬n^+ŠZþóP£:Z$/ãã['¦…Z»8ÀÛb1!7c ’ïˆßq¹épUb±qOüx„‘ R&Ϭ*ׯ/Ó“îœ ¾ðNA¾4ïו 3 þ35ÈlÏáé“Tž…sÍ)Ëô¼[{@¾•¶«Êd_Q:ÛäÈoª+m~@ð÷êa ?0|ç²F)ëïù4YfŖ˸.µ5Ð)'eQH˜»Üí8Ÿùl/û—Òoq>¥K °‰Ögp¯.îÙÉñéV§~o‘0¯øì0o—°‰ëAŸÁñ›éB>rÐz"rЪt»êÒµò`Üwf>ã¢H…UaS„ hÿ¨ ˜Kò1º‚0ë<Ñš¤ŠÌ¿‰a!i2R…ÒDý¿¸Ë¿óÏ_M+UÜeôOÉH¾ÈÉl0[Êp“aaaE'Ý .$l”"awLHÞ2Öd¤E +Q"»öÂÓnÎMÇ”ÂSágžrßDíçq\ûƒ46<þ÷]ª¨Lƒ‰Ö™(Kz¹‘Iñ8D%+š¹w}Ù~Ñ¢¬úøC-÷lg9.mZ!fìˆ icT¶uùEä½'F Œ«çRíNf¤™I»`†Õhè¬ 2ç§q¨{ù÷OzdÊÎ{ÙLb9B±ˆ€7š€èjp½èîZJ”–ŸÊç§xêŽhNà¤\$»‘?4kC!Á›Ñ«–€å„ØóKXæ+?c­ˆ°…³¨;b-S+:Ú(áTe&Ð&H™µ'´yêö‘ÂL…©}+Ù!Bzá‹áS]…QçfFâ1ìÔäð1¦¦õ©^\(M6za¤z!é&Û)[¸š> P%ÉÊ—Ä“éM¹E7\chRƒ‰ó¬ðÅßV¼‘ó•ÉÝÒ5#á(óÛÆX±¨WÀ%Wª"ý¸¼Ì/Ó,\Ùò¸Ñö(j’@>>Nq¨ å~M«?ÍO°mœ«ßðûô"Þ`5<‰€ë‹Aç›Z½ç"PuÄC˜lþ¤?ŽŒh{9Ì7ÐîUÀº/ñ”í›F{Çû•k§F‘ÂT¯Ý‹J÷ þ«¯¦L1 :NˆYê0¾‘±÷êðúQÕ#Ö¬^ ­5Äï?ÜúKãò]I-Qã4ÑnÙßáÓ4Ã9Èv$%~;yë;ÆJ= 5IŠî®ÄµåŒâEsÁ.¼]ÃÌg$%ÑadÑŠ¶VÇŠª×Ty«HdœåÉ€ü]®wû1 "M(׉Ýê‰0g†¤ÝnÇKÁ%I6NÚÅìÓgþa§¿©Í%Ê%œ]ÚF6M|0¬iT=:ÂïÖ5AÓ"À«ý,Õ\ƒ¦ôÉNf}ôÈÕ¶•Œ÷\fê’E0aEÐ&”#‘\2x’Î B7BnuOdáJ°Ñyâq È?©8Ä%¬‡ \ €<ê>°šâñ(’yâr™‹JO46ÎêÂÆbpT â²8g:Ù©¡óˆ¤£\¬¼¾AØÃާ$XsO!n‹G>Ø´ñ‚¯ÇÈ&ä¦þ1‘[”2fx‰ózmœ‡-[jsbÕ¬Q>Êq´ØXéòÌø’Me­Sv¦)zä[쬸‰Jãé)bxémmúLeŸCmé Lá^šõâ•κ.ψy&Vãv•;¿ÖvÎ<5Añ+lùhºÏ;PŠs”õvÞic2;WeçãÍ|5zÐyŽòÑ{ÍhŠü¥áÏr!æŒÃE«´ÉC§€«ò2ÕCûÔfñ$x¦5z—¤©±ÜõÏ_vöý í·ËÊU÷`172ëÖFð…{™GËb"î<ØyôÉ‘›ùbQñçO‰~|nɧ:Ï8o;hPyøX©[ÏóœŽðŠ_mb6e êûY câ2ËE>œMç’OTÕ%Ÿð °=B„…=f[ AË0ìz^ €ÓÝ·—é¼^^ÄãÐ_?ÚUb×ðg$A«ãÜ%€Ïå…º!ߟ}߸¡Ô…x£wÅaۃŭK“:]J_å“ÃÜo¢6P>0_%.Q·ÈÙ¦D°­ô¿…Àƒ³ev¥Àe‹«ÀcœL·IͲ°Ä,!ßµTý¸¿ãúv 3Κz“%ÞÑs˜çaXóÄÆc”>(„ŒÑ½–5Åq\ÜÁ¼cã‚ÃÚí>LÂ1•k¡ÿ…’è.AÑ×°rÁ¹u·â " ÅŒÿ¬clá¼ø~4šþÌÔš![裞ø)oE9¢¿Á±n¯9­¶êuޝÙç4%¤¤âÇTØš _$¹®rŸ$ü¶)½ø“ÒøÁåÝì]ûÍ¢ò6›×«ð•6ŠÛXk¥“p5_»-ˆJ¿‡ ¬OHpW›5‡¾°ÿo7µ 9C×ÁÑ"ìQ¢¢+ì]Ág¤Ž¼AÚp>qêG¶·Ë‘ýS#’ÎE$Oˆ(¾ùüåœá†© ×T#[—0SÊ:/ìÛñÛU1SŒ˜4飼ìIdžaûÇ)CRT„ª=‚ŽU¡4¦g<†cIC¸ý¥¹æù9ë²MI/wî`—k¨„ÅAX#?’‹pisãÔÚÇY*GЊˆRë/þý gÏ;­a"†Föî©$5&“¹—ãöèÎ_>6k’g˜Bë ÈÀi¾#nð<לhËN…å°>ÈŽŸ%Û2½"З†¤áÌIÇç¿t#\<206ÿIeÙþ¤²´ÿ&1w³7ùGÑ#gäèhæüÏ÷âÿÙÁ£¬'ƒ+„ÆÏ©Õ€Ã©mW¥ý­}Ͳ!#¨Èág‘¦tðOé<¢®MÙù¤IYMJã/5ØEÁà'¹^Bò®þâÒF+^D—£-îcÇc&åínPO@‰™g*n?בΠ0¶Ýš÷è 36ÃÝ~ÿ+ƒºn%ÊFô…¤[^;ê¹¼ë‚Jœlj©{ã¦JTãúfõÄ–kû)Ež©èR2€é— Uô`˜Ù6¹öܽ(ù¸QG"új¦F;9tBßÜiÝû ‘ía»o´…ŒªÏý³¼cEÒ(bY¤\#í¤Äf=ë@`Óºw†˜Ov7,†jœÓܧ‹Í¯ÕÌôé,yÓ·ôL¯.‡rwX˜ÚîýyNƒ®!Z 1¡UBóÃ#Ÿ€Àp¨g Úæ{‰CÄÊɪ‘ûˆ Ô`ºœÛâîêg«e“=‰ÿ«2¢×Ê0Ì}Ì—>ptT¬B´— ò·ì½NÅs}åÈ`×pá”$4Äâ,qÿ G•Äî†z/8S\Ûc&޾*]c¾Ÿ™aªó6•rÎ)¦æåNÁÁ­eÜIÖÄŒHDf^Ç4c²!äñ±š[Ô¿§_Vx ( æß·qý=ýÿxŠìÿû韨Ÿj j }ÁSÈf£¨*‹Yƒ£0YÊèœ+£çE™UÐU­ÙIŠ£à›ï™æ[Ú]sv84?©üº F¼ä&ä/Çä/ù®ªpE†eŽÛåqÝñë÷ÕÓUƯ¯×K ß·?àF°àöµÀÑ="MáÝwѧï™Ð†ÁH±ÌŒe{a¹ª ñPeåYN+ÿcïŸç¶u7Ö»±mÛ¶;¶­†wŒFÛIãÆ¶;iܨqƒ7ûàN÷yöþ½¯¯sÌ5Ö˜s9¯bí= J#U'hK2îðO˜ÁZÞ71¡Á‹yWÌrEÞE#Ü5[ÀñáaÚBËh7Üø–шì$g™`v:àÐ4ÔM}Æ´†)%ÐúÀÁœ ÄÁgZŒ,SÊZƒ“A‘×)oµÖT?°×|\)Ézû-+õÓ´£t)¯”lƒ+š[Ñ1Rá£ÓÂðŠþùZÄrrÃdo5 kÁ¦|Ò¤2º^µ¶Ž^Zǘ²;Ø ¯PBŸV-A.+ó§Yö+Öa µf›¿»u‹4îžýDŒE»¤´ÕÓúˆ«J›Vüü¸×ï‹:Q e¹ÇÖ´á-ÜàÛ1SÉüJðøÂŸC³+êÉ  ˆØ [Õ®’²Þ_5L§ª"ö5®á × RjÕt\:•hÎå-ÉC`KPAièÇ9àjAî;i rq9ä†SÜ‘\Pn µ5›w]0n$9«mùëº êvÎB¹G!¹×ÞÂD½Çø çÇÙÙ¯.uÁ¹P®F¡Ù)ò9Æ‘¢_mߎԈ-ãl€ƒ ¨hͲ °t}$ü,Ô3ˆ*ù²^SñБŠ}8$·º@µ+NRQÂ!·Å·†uO¸H!¾x &Ú`DpcVS6×¶Ÿ©ˆ72SOÞXeãGÄòC¤Á¸pL<œ6̶‰¥4c„¡ä”Š š¦¹\Î]½êKru=ïY½“Â^yÚåwzZ“Þ¶OÍΈùn3dqpâàc£@ù/Ò¨P6½öø…úˆ|chzµ >;'H–‰Ò¬³œ:zîkõó~]œ´Çðvrˆ`Z™Y{H[â,m„b?‚¹ü_ {\íHû®æ?ªBÍVKI I2©™Ÿ)×xVë|‡ÕçÖ¼õ8÷‡Öw]6ײðá¨?5 wC}çÛ±2ÇÜ@}?Ôîn£Yªä[؇5_µ9Þ -*N¿}휙'ö¶Wæ÷ v…NõŒ?ꨵo£?-¶¬‡@ãU‰Í\[<¤©Ù ØØ7O÷ðéb ‡ó|?sÏ­ŽšOËÕYöK°iMb ýqöõ𲌶ØäRB}¨ ›dÈ õêi(ã‘_Á]ÍWÓöªùswÒµBÏj³uuîƒ&ÿ-]ù¹È¶5¡Æ 2m·þ²Î © ²Š…8þ ÿû4Xl’¨¥1»³&V¥âìðÌùº2#É>{¿Q¸ØÐëWv$ïEï…œ¨­iê ¿š`t´U[ˆ“üŽñ½ž‹5&MUÓU¹Nïç%É. q-¥ Ê š õ_ÜÇPŽv°—‚«^Dp‚1?$éç<‘ÚëbÂA¦qCëªðû¨„QØuI$BI„éðÆDþRÎkŸ{X”\ƒM'â[€Žq›RVAp½œÏ‡¨¬Gvº‰’Ž™0'a@©'¦Ó¶AmT{ÈÕgô½Qou–¨ hƒyN¶:d¡ÝJ¨a/G¯ŸP0´˜”Á¤&¾Mº@ô'£™ÇëŸÏó<´óÞnV|èÿ<ÿ zý÷„’­úÛÕ:·8ëá-$§ŒŠ"§W¹…€@êHs…‚Èá§øN.u½­]b‡èŠŽ\#Ãj'žuãÈÁ!‚=½µý.Ç÷l<½}nóƒà0æÀEvRTqˆGŠ5„žèдD¦Saœœä âPbBY/ Qmâ`/zR¥^œÞ9fUœTfÒíôP¸)Ür‹«Ç¶ª÷¼!Y îŠ6QæÎÑy“;ÅåV¸º†2J,µ< c±f;‰f¶¨Ôƒn¡A”5§têf½eDo½o‰²i$ÌùÇå£[±·æ8~I’©è“{©y?®fIóË‹3G¸šÊŽ3û°üÍ“­üÖ|džUËj'Ra‡j$îëVŽïŠm~ df¶å³ˆë+~“f¬²G÷¢q<¸òÃËØÐ;h FB”ÖH¢[VµY}˜o<3“ÅùäŒÞlæ¶-vò@¡¸§Á0¦€‹žV˜$=’ÖÛƒÛaQƒÇ'CWCÕº_ˆÑ¬´rÐ’¾1b- ñ)F§÷X†½B[ã›¯ÙøvQ¨7.‚vr-ù.fªL`Ô®ÙáãO_pU\s+Yåy‰çÜJëyäØaŸ#yIÐd"VØ™>û).Yå1XO¥%î#ÏY'£–¼M*íª“>@a&ZXÔ‹«ubZoò$Kªæ$*pKñ„ÙM¼ÆN)›¿ošb|±ò››ö,Œ²•ÖÐдßò(›¹î§’/5V‹&6E¤Œsó°Q½!ù±9dn0\Ÿ }n“â3Ò÷}lópÈð¢B–Høa&«Dô -’Yˆ–{–¨¼HIÆi:*†.â·a§“s! 5ýÄœê^aóü›Î]Ü †¾ûHÝPÔÓïaÛ˜”À¢ô£¦©¸e)Wë\²}}ŽâEÝ„³éð»|½p¢æD»÷Î<’|ÿSݘp ŠntS„IBüA³ž°~»…XH¤ f2à|ö•]¶™{ã¬×Öä}žeEç9]””Lx†z'yŽ”œî*õéOŠõÙ£lóM±zþ…bÕºXMìÌÿÅê¯jàˆöv¬úgð¢oÇL–5m‚(Ð>û•^•Íô—Ë`öí&+g˜[4ð±ß×°×Q|ìï\î'2ïkVMì\ãk¸ËríÚŸÚüÜõŽ?Ķ 01LJÇnY:·#‚{Ð.s8.lˆ³ž:]n ×KÉnO¹©Ö2o4a†ÿ~¢öòAh7¤ø"“Ðç©[ŠV¼eÊøF]Iº ö¥7)'`D¹|²QPáN »µè¶T¹°ˆ-ŠJó*¿‰“c8ÆåÏØ>aJàSß.T´u7°MLl¸G#ƒÖ*}÷|Cp½|ÊÓë½& ´Í¿­>ÿE”Lõ†Õ*˜E]0nèP¾yß­%Y–ª÷£8›É ÿ'>ŸådÉxé¨ÔíX.) ¨»«ÀD¼#fÇzªP~O^€Rª=w¹S¥÷=¹h“–Æ%ÙÍð2Ns[ ´þ óº»`aK¢ÃmØj«Â`7A? ¡ \0ïèÇ*%iê%ìæ€IN^¹n|†‰%%Ý=B¢úÉýÿ蜙¨vÁdÕ[RÐà5h¼™[>$¦oJ†Yf£Èiåk ûü}l}!°LP´I ¿—‡u?~µ%ð¹Õ™L”-NBÓÕ7T¿=ÈäÒ%¦Gè÷<YQ÷.òÿæÞßó俸WMï-IpúÀéj±Þ[Y[áªÒ·Yô©Rõ·f(åÇ‘ñËê…l^>K\‹ì’EW¡´ü|©çAcÜ$™hnÑÅsàÇvpúôøü&P€_A´/5 OF¼6EžKMÚXo€Á‘¾XYTG‚"Œ`M³®BTË9œd~hËB»¨çx"8…êû&¶êBÑl–”)€òj ˜ôÔ]©mø(½/~‰ò¬\Bô±î±AiÛ M; ôòô~™è´r9v1Q5o>TSpp¿æše©TüÂN‹è<.ø"òÉk$Íýž'(|šÉòUMÛÒqZ•‹ 7ܼoª$ŸâD³™ªb˜øEDÎbFÓ—ö,Q„_, Î÷ÁÑ£€Ê¿ EÏ:®àÛ?óeUÃâA¼súœaÔ¤„ˆ|¡<@†øËKÞÞÒNëR\ ÉðKÞÓ7µ„¹Þâ'¯­·ì³»uüCå\ z÷k<²™ßõÉ8ìãXdœ*TüŒ5w£Õ«Öõ†5”"2ò¾[7ÝN&J6Šà$-À/’‹WŒa™T7ê/L>Kr:ÂX¬`»J·é™è’HÆR®oqIžœV7þ,ûÔ´D¤qaÔ§}–òláWo½0Q6b5AºR{ë<É5·L8©µøÄ…(yÎÕOP3£(u°¤/4ݘµh[šÒ*y,½?y´sÝúdé:"ªí½°É-V~Ù9ÜUÕÀln¼%÷C`R¹×±9YJ>¤Ä˽-ß‘E¸«ýòíKì6ÎýkŸÝŒÞŠŽfÿòù›Ç Èõ £€6cY*.çïg¬óÖ³'LL]I¥¥IBm1~q0Œî‡œîG¼WB"|’Íš‚w`a;çgbkøltNôn²›¬?Â4Ó4ÜôIÛ|Ї`ûÞÂE‰¦Šâ3çݬ²;ËdtFSE(kï° c}{¶[[õl›K¹çœÌ =¶‹„YU6k¿ŽQé`;½k//)ho‘ëdækÖîæðB¹¦~óŠ@Êè‘ §¾ëÓ¦KÅØ`)¦àµ˜/rÓ%b䇦w?Wi\TBŒÎ,Ïà-l/uSº (I{k#±ßFµéusý´1äþúo£;Á„ÿwÐ\ÝDÌþµ¨GeL±WC"L´Œ4–TP+™½Í9ˆE¤·ÒÙTû°<NÔFnEô« }×væ^eOP¬Èêzöõ`Ò?Àÿƒ8÷`'8îw¾¶qX£èl[0€ÓÌÌÜŽU|êÑcSÈ2¡qL53÷ÌG¬rè¹ +Íÿ-£øg®/™ÞAª®‡’cL$ëS§é"Áêz—® RL‹e „ãt ˃r‹7« ­IDŰ©œ¤ˆxy”=†ùiéÒ¡˜ÍÄ´“ÀÙ1ÇTͲÈ$¡Í ?ÏÃVÓAÒì3lÓÌ“‚¬AÚʼn ÚOÏ cÀeúñøË3¹Bx;e—3ÖR£qÁØW&|+Zc3e>Wk–åZͶ" k©ÐîþˆC i¹$BÒ˜T„c%6dÊbIÍ-8 ѯO1Ê÷{Û(ÕqÄ_h™"øIUÓáeå,ƒ4e10ïÁ~Ç¥ cdšà —O`ÿêÿÁEÔhjkî¦ænaaíõ/„”äúþ˜s,TP²©Âð>"9“˜N A¹V>˜Ëp°µÉ5S»jÀ€œ ê&¢˜”DÍc<ïäbsÜßýùƒ ›å–Á.W%$n‚·©ÖÞdH<©‡!_8‡íp½b#tœ:t¬? ‡ìê¢ÔžCÄ”MÊK¿×N1F'éL.A.àØ£õ„÷µUÖ —¾ùB"ß*=ÒZá4Ýjµ´Ç„ûQgÛšRõ€4éÍQ(þAƒŽ23~uÒ`+Ü€;Í—"^lx·¯› ö D¡sê «­7 r¥f³K/Dy±GÌîìÌEY´ Qõ’¯[P§efÌ€gÚŽŸ!\SÓ´T!Zêìü©¼ÙÜP¿‡ø†Ç›ó-í7Þ..’¿ ±˜•£µé¿¨";éߣšKÎÇ8²™ª°4É–'N4(¹U Ä£`4 ¥>V--“åîÎ?¨= ® .àZœrÑàC!¤ü¨ûíL4hâ”»S==.3×Óo¦ŒþèÇÖÃ#"Ъ¶Tï@c•Xy°…除÷Úcz:iÑŸGecðnP< ~ЕWh™)«$*—Y"Ë=·2Ñæ_-¼¥@N߯±àÏ­s•ÌñpB¬ºÒåà]8ÔæTd¸ZUqŸ×°•~«ÐëÓJ°”Fs |Ø3J×ó _ƒ‡œ¿5rmhýÎKCzÐ|ùúxDÎ23žÏ·úÃë<âÒM’L5qÇN½hœÑ&­Ï Q"™}-<ÏX¢@±†Ö«t•Ð6mQë㌢èt8U×bõÀ~7ŒH‰5ŸI¼Êñ´ µï$Äc*ÒÞ-¬N—ϯ¯HÈ“ëtg‹`í¯¿š´ôƒ}5«—-V—½JZÚáç.`.uhkóÖÐ'§O¡—þä“þ¡ôtzD¢È*ÞdïËÐÍã7 ¡/4ãü vÅ9,™Ì©0>/eLf1] 9.Uú$¶O„=Öa†[”×w‘þï¹§f©T¤3q4)i>މEÕ`=&˜.ÑHä3²&ß)“÷ç±È8¼1àö ÁÆV+HûJÂ$ʤJZß Í,çJx ïpǾ;‚u#ÎRHWÇ€/F%\½£ù,•ú¨\4üñï÷¤»gcRì|;Ó»o‰Çø—Içhïäèjíö_‹5þµIõCiIiÜpÅ …ßgTÅ@ ÝàX"ÒÆæAÉ (ØPít3XÉ8{oJêõŸvmPeà_¤éu®±ï±·­HHíj¿·Æ»èo²ý¼{œ‚ ¬¹O–Àâ!ð&£O6Oè©èŒ€—úÆZlª?„šÆörù(Ò YÌ5Ì Ìf;Dd\ü ¾7¡“¢»Ô(AWÛêøËaºv ¦zÓ¥ZGz#µèh´Ówk#/î^Åd8u•ƒ°Œ6o—A,ƒšËŠÌyRè“«»åçE³a!ôO0í¤:lvøxµ±ªuB¼´n>‚$h³1ü9¢_·tEŇ½Áà¡ÛÄÅ¥ÑmC)ìà°£ÙmÂVR°Æ#y´lÒ*•î}®ñ‹ÀTÍPÖÚDzLa+ò¤˜9’‡úkÔ;"ÙyV7ÇÓ w-âi©Û\4 "Ϥ@Õá>‰Æ²Jº0ÔïEƒ ‰9Ø< =fËŒ½‚>%k´È|ìý$ã+-#Eš•ºz©Ð£Ø¬ŸäIÔ+ö†þÁW1ù$ºIÑI~ÐØQüM&O›¹Øéÿ«þmYÎ,ª¡dš ™ãöç~¹WÔõ.g˟自*!ô-ßê+†¿Êqs ss³ÿ#dûÞan~°éRã‹î&²²^X.&mðÐý¨H§lM¢:à1V O0›S‹6U‹ë{•-ü[‹¯yêy‹ë˜Øª«\^5ý>×S܇\Šp93é2¹ûr¹ã4óCŠZTד® )l®^ø”R†x¨‚VÅà‘«¥ƒPUókï‘Ǥ"ùGVæpohÀ5.NB„cœ |ˆ®Ÿ‚ wUýÚQ… *M!BQMDìS÷<ˆ4¸#p^Rü þ O¯%¨VÈRi»Z×úS¶9”TMrù3j:¯ÜÍu`™uiñ]±Jš¸m_Úû„ZþÅž_ðñÖx V,ü«ÖCeÞœa—t$/èAÁ¿R¦Ñûü±ƒDÏP(sgHÅ´mIòòbƒ<‡s-‰&Cê×'¤Ä­=þ-¤ä”z…Q^š0F :QP!ÑãÓ$™2Œå.Ìe^»;eɈôA©r}S³ýýC=D[ñ¬“ù*‰õ#g\l›ã“'?Ož!ºi¤l!äM.KƒŠXÞ§ï©q–L¥ à•†é ¿zè£6>ƒYJ#·žò$ñDp¬Þ”hrßÑ ÖQÆq5ò¢ªÄat.Þ Œ`×k4)î=ÕÞ=³xšG“¬ê´ø¯‰BH CÏRÞª°*s~”˜ìŠ„/¥Ø¨`½ ¯$ÅR¶¥ÂÃ3ÉrÛŸ°ÔÏÂ\—>ДÁx’S†&iÔîn–—×·äKWš^Ùæö IÑFÏó±t²•=üÌ•h—™µ™Ÿéž÷:œHH¥2 “ç e2V’C.¦”Ôà‚sï-dkì_¾ÄC{–œÿJ»¾?Bw=d^(£Ur¸õ'nâï“{÷Øÿ¬›û/ÓKæñÿÐK MûŸ@Ó'«ëb/_¸~qÈ2Xä ÅD½DiN !9þ{ˆ'•;Hš–Z>¾Ÿ¶ó_7Ï—p[hT„ô÷è1Î[;Ó¨!® )ó\€…Ó€ÎüÚʨ>CÆë(lÿ Íàj™2°GƒpPOTL–®H¢¦À»~[ïEŽè3'éjö]z©‚ÞÉÎR8âÐXßÀdW•Uïªæ¦ïÛe¶¬WGisì`‚§MÓ ôàÈ&´^*?þi©Œ;™áÇ_,é\–…Ó'ªXÊ‚ù‡ô“=†áHWñpˆŸU-Z¾zõšwDþêFþ=‚_Eÿà$À'Ñÿe½€öÖ¦II ƒ ÷åPÊ()÷Ÿ”TJcÆjmý:LÜvñD}©È@*)Â6ž=’å;™í›¶Ø|€ýNO[Á¥ƒ]øÞÓB=M¨Ø×‚íuþXÙ3ynQ.*:ý¢‰½-±X²>Ùfí­ Ö¤/Æ ê[oS±v-x£¤±7JRÔ¦MCÜØ'²ZÞVMÅ™M‰£ðK¡à g$š¥D¶þ2š˜;ÕŠRØŒ±õØ–TÏ™kÿJ§HIý\t÷ҩɨî^˜°PjŽHÇë8Áék‰Pº™±ÈÜ=äŸþŽêæNÞVYü®°Zîö$,-£³Ÿyà1çÙ/3õTI»©b<ðÄþ±­ÖÁ® ve¿f¼4”4I¢õ3ªÚû¯°7ˆeÔH3FÐ,ï…ë¹ÁzlŽ— ñjxuÆ#c¡D;:ò“ö0Ù‡Z'JY'bw¡¡ ¡7ÁA°¬IÂî9fáFý:AE¾Ûò:ØÍ÷;šZ¢Èotäö†&ñ_¡)aïäæýo ”æŒ16Ü¯Í >ö¸ ‡o毧i*o› B~JLÀÁwÓrïøcûú‚nóKôL‡„ɼ·Èõh?‘9ÿyw_KµïÆOþƒ¬;¿çÇç€nÖv3æ!–ϽäX³- r§ÝbhÌfvU×µí–LH"Î×úP;YòŽÇò8~³~Ï#6»4~žH ´(ÞáŠ?ký­¶Bd=&£“†Îõ)Ãú ~ÍQ¿ÃÖ'!¬-ÉÍñY©s–c9èÐ6ZÔU¤qà}ÜakRQ­·],Í›ø‘6ú³,aÖ 2’KRXþí{ÞTå=¯Ü]Z wþБ\]ÐÉ¢o}&¿ÅðY¼¤eËZ_FÝIú÷…~nü=j H’æï¡¼šß \_“Qyc¥ÙÇo¨›Ž~ãµÌ²šk>‡‘Ÿ¾bÝ1ÚÊÍÖ¿6E­¨ ¸} åîžv ¼åU+oÆ}¿5Y±ˆ…iÏÙ¡®tÿå>A„å*“Ý|Ù­î9µ×÷A q”䓨.Ö½ÝdæVaöjD ,I-ïCj£õJ¤ÌæW¨SÓ©`ÙLQŠÏ$ W#ôhTœT¢–‡Ûˆ§Õ¥›à?çRÓÉ£/Ѿ@ ,É\ÂÌ#¹ œ+ …tÁ(«>D9ò¦‘PJœ/óÈž‹%/HdüåÏMòã³wfÆ/`~O&ýL+7j ÿ»drvÿ;}ÿÕ*P³A(»DÅÆšÿG¯@e6 ®7ªÚ·®°Ia»Õà, ù ¢GÆâlw-Ýõ`mªæùÝÐÒ·\0(:™·s8¬÷-¡'#ª2Êúû[šf‰pVË*°~ËÀÝ! ä°w>+Sq †aÿ§¼“Ÿºå+æ Ž[ë®è—R)R?Yûc¿æÑŠ®Ãn»w‘C awA–GÞGîFI]¾4[Kz(L…w8†~¼á®íð{áB6??nÇlÁÍ—?ÏÎ eù.ÚÞñ´¶f®<áí°ºg<‘x·ä"ãÞÆ>MZÊ2€æ×ªŸlC*"Ë/ÿiàe+ŸWØY3tÒÚ8:CþŒ´zE¼4µ´Š ?2íVð4–§[.ˆmÙ j}8Ü/ä-(ïX†>ýâ1­:]X½Ë ÷Ëñb1;ÿ ìÏ=€4ðà÷Ð9CüM›EÒÎèfí`©ìhíð¯q„”Dƒ?A›eö%•©÷P;"ZŽ×ù H9ù÷Ì=ìÛ.íqc‰ÏV%…/¤Ž,*Ì^r½ñ¬9霪Ô\†§“§<çÞ“Ëžû§SS›ï ·ZƒNZ¸ î¾ÙNvócq:Ñ¿§ÞÉé¡€ÓÞöê¿LËÃAÎϑƥ͆¸›våºÍ¶'°U½uGq !qüjëfmMA%¶Œ}eŸÖÂñ|'ƒ"ÊøÖ¯Lj¾ˆ£~=zì%³g²„º-½ Xˆ¡’Ø’Ò¯ 0wE«ŸãCÉ!˜!ôɯ1â… : Ÿò7é|2² sk¨´Þ¡tHgvîëGׯGDç\ÀÁšLÉ´&¾##87ò|”ËŽ×o=ï€{b؆úˆG»Ò©£Î“áô6©ìÌ´ uçlË™PŠö)%вÿQïÀ©>âai¿¹€XM¡Ž”_yÛÑá^‹Î:›G,=ô×Ú(|’Ï`+'–}¦Þû»q@,³ªWY—)–ÓÁ1ï%o6ŽÍ圖x¦wÒbLÍè6(vw‚ëÊÆýÄ+Ôò^}­Ñ¤Îûü€¹Úüø+Øfè%l'>;PM:2®4QÍŸj¢<_r ã›Ú;¨_8Edëå‚„‡œžNžô•±aüƒãæ ÿ½ßülYBáÁm…|÷îîÝ;²¿Ì–ß|;EšöjxÒõ™µö$ ¢…UU hà$)´ÓÓ ³°ï éQ´Ýá°a ®“ÔnŸ¼ƒ–»Ÿ¦«[¡ƒÑn3á² ÑÛÊ/&ÌvUÎYVíR¶0PCÏ(g¢°°kÈeŠe¾¦4¢¯œ+ 6¬­aö*8ÊÑYQ'PMmÉ.3m”ò]SŽKø¦>˜z¥Ø©¤Dá3å€!Ë3±û-Tc]¿‚8¦ªLWæ (‡Õ-³f•Ì÷R-ÃF’_oêg~m=ŽYof‘$÷µXɾ–×¥øÀÊ'Mî•´bão?ì òU¦Cp 0²Äšƒ©Ûpy‘»4i­Ö0š๱pµU{˜wÐ`¸P¤jøºØyñæ6¸¬Îsìã/þ¢ X­Ë5ŸØz£‚õ¦!7rC5 xQ¿h›?!^-Æ·03ÉzÉÁÉÅ&s¬YXñH‡»ÛI{éõ@ñmtŒ95ÂëÏþ$¥Þ¾€:ßEê;z|h,¾¤ÐÀ›8h5ÿ1’Ûì ºg½Göqa1Â!o²œR£Ö¢j Âz› Šh·:X邆%¥à€²oDàCyñÀD©y¼Vˆ ÷LégšJ,Á£k5õùi¦Òlœ  )—}"ßè¼ÕåØUPõ13m»‘LiÉmnêipjñÙ<…`õ¾}ßZn)\âöZ¼GáŠ7c5N\úk#‡áÁI9ÂᶃÇ×6;V+ž ~¾O>Ù'¾¥Ñ§–ž‰eZ”zóöØú$‡Ê  ÍE[½‰ÑÁ­™5ÇùöÖ³F±ŒjçNʈ=ÖXDrÝðwqí¶V.{ˆûÞ ¥â¼öã$„‹¨|Y#§õÖkšgÒAgS Wž3FgàóüQ#éªrX=n§d-gÑyí,—uã?9xJ&›í4š#-v´Tqóìyš3|áÕ R‹F®Å༶0Õ’6:Lœf ß¡ÿL^0|ôˆ¢ço 71Ð3®K8ðe穸Ë@#ÚÑXÕ\±ôaÿBR¸«8~ÉðI å•´9G2:ósÕ»@PÁU•.–¶¦#«þèä¾½®ñ¹ÄŽ?ŽWAÇ˺kMOÒ)߆yš[µÉÙ AŠè6R óÞ4é’ ‘o%U·j.Ú ×s ,4…ð}&̸Ø+xáÃón+%Ù¡Ä´p˜¢Úk ‹¾Y%îœkÄQ ýºÿB0oï•ð9òáµ±¤t?Êål}ìð¸AºýËÃ*%oRýîÁÇòÏaÕáÎX—)ΤG›ýÞZ!Ð@ÜxxïþD i÷Áõ]á5м¿˜æ‘~¥{g”ë–É—®P¿h3}vp´žØN°éWœB]ÑЮüˆptθb#nÛa™ÁÄ(òúàçh»Åô;ó1; û¾Ý“jàù¶æê&åbt3wQ·:ü[ŽÈBˆ ø ¹¥:˱¿ßEÃfvNG‡C’Œ¶t㈘2æ¬΄:KRìÙvøh ê#B ÉVƉ„Õåµ—oTÜ\>¶ç4Øœ…Í´¹¬ñšœ&?3¨·¹ô-ÇÜý–o¼+hª¸|V’9ººQØV9¼Ëfuñwyó#ކƒMUÃããhæ†Óz*ãxÌpë?l´aÊùH–}?÷R½Ÿ­ÈB²¦Õµ5a(¶ªýª¥-ªÒž{, ìTçs\rWJ̬ ~ÌŠ™ýøˆóø ¼ãmüHt7c%¯z'£šU(|Ƹü Gú püáûÅRá¥sFŽ. ó7.Þ] j¤ˆL9Ýg|¸ò_•ο ca¡ëèùˆ(Áþ;ßBž>Ã(uï¹’ÅÖ7ô–`ͳd‘½ M®°2EÊöÖ¹`jz¼¨sFcbئÚ!,õèŠÃ³”­®²Êfã8"g%„¿-u7ï;s(œ#¨Öi«4aŒÿ;¼øzúž®O/ûî ]p:™M‰´ÿ4<¡†ˆèüÌŠÁªåFtPûXò;äëØ!M’©¦Ç”«ù‹Äµ¯–ECãÑ$Îü¼È¾ K§y¨~j¨n ¦®C$ ¼*a¸=ÂÞ„`Ë‹JH…pUøÙ-4,Lúíp‚1´3ºÃÀ¿W{”ÜÚ}èuÙŽ”ššNcÂjb¼Í™gÅ[Å¢‰xŽN¶úöÕ$~øQÜ{>ž ÕxhZ¸®6F£“Îò0öõU€fD¼aïÄ*ÿÐG®,S‚ç([6$ Ë M]5³4y½ŽájÝàóµ¾Rô¨­ºÁFRpçbÛfÊ::±E Á!¨ËßP×à VÀYm€4ù^)"Ú©ªgÜ @ð9¢’®ËõÆÜÛ„6sD›³("±¾%{g.Õ³ ©É=·±;ÕžÝûô$~ŽlMbyZw)ªcªŒÌ²ëV4†2úÿ©nN¼Þxôû’`”È+³V¶EIA§ä“ºÜS;jto"þÝxé;’t½€˜ ‰ÇNô.]fg•UÅXÅiˆy·/öAöû‡ R1…&ϼ¢×ïž×y²¤=Qb=Ÿ£ÊñEwø”}¤õ³Å&$¹"É3BÛÓ› Û?~ˆ@Y=Ü ;#Ë ˜/y*u¾Æ‡Óð>«ò=û!aæNøíú:¸Æ»ìš\$P~Á¼”8wŽØ³ª7³øµ‚³î ⣕ô™¢ÌÝž®9äÔ ‰w²-9z²äûKèþýg+ ³àªðaÉ'–•æööØýe†¬¨Æ½éãËFIEµ$17KBûåïô{}­ø9‚¯ÃØÁÊ€ò« ªóã`Ýë^Kg\&,úüy-#­ÆámÑVñµE¨#x½—tŠŸÎ!$ðînJ¿ûÁšEíš6Þ»’…ÑÑ÷Þ|…}ýS–Ýݤ´öv™!þg¡ãqà?w-ÿ»±© „ñ¦C¾ž:0íFÔ€ÑF±ò•` T’ôLJS:&xÙ-xX±e¦Ö?‘Ö¤Qã(tdÜÄ|ëë72¶U´«8Öz>¹k&zg¸fÛ†€à9Ñd„ÿã>Ó+Ý ’˜ÄD@¾Œ0MÙeã ”„a5/ý%µ£í•áÈwçNý(9 ëÈœœ]u+˜îpeȪ4¯W—$cÇûú,‹Ù— B´Ëå)Í{™ùÖÌ+è˜ Ú‰ºQvÇA”Ÿì˜A¤c½Ç±.ÆÊ¸Cè ÷*gj¤Î/F“Ù!dË‹x®-À¾Aw<['îNýJ6úø¼Ì²Ùðóå¯Í‚_Yã¥D‰|5”ù7j¾Ôò±áMm³Ð+\s XSª9²áUpPtTä‹P7»šÿd%C?}@ÿFG‹ôä)ÝΫá,Ì:ë€CþUEôÌÏXÛ½šR¾Üä¢:ºÀyÊháÜúÁçýä·¼"v#cjÜ”#õb¶HÅ_üëÇ{L«Ú¢Œ?â‹Àc]"¶¥·œHQiÆd?D]a' æo·oªø[êlí±æª¾•÷¢5«ÂI8-¶sðÒVËÒlà-{Í­O›Ì –öR¸ËÒ˜ðÓŸl3ù¨XÈo¹¡ þ7º¼¹«ë‹T¹?^€^šÔvÛ;«`–Ê)Ä¢sÑêPè¬~ ¨ÉZAC·V=Š¿<ÓˆÞÚÝÒ¸ŠløRšð‡eæîGßχ›[$c„ ç~æü`S·w¦8Z»Å³zeŽœå]Ç™År4c²R‰ËïwWÀ‚´5 ÍǬÛ“8íÏuï2«ñ×ëÖÊÖÐÌ¡8¦.Ö„ƒõ+õš}]t°=L#ðôÖ†m‡*¡1]Ó¤m¦™‡ër¨4ˆrÚ µÁbWFÕxÛѠΘâ‹çÙ”ï·{wS¨©z§9 îä¶i]GGB·eì­lØÚb‚ÅQT¾l€‚›'Ŧ‡BklS3›x"Mbn³í‘“k¯t±ðSv;ŸbA8e¦äÁ; S ©aÉŃœB>®´S²¼D!ÒŠ„‰!’Ùæ¯—Q°q\Bݫʄä¥n=&MFÓ`¾Ä 䣕"ÍhJûâÜCÿ[OšÃà‡7ØtÁÿ¦ ÷oØ~o2ÿãÍImNQo·â¦ê±é Åá`©z$q?¼n»3ÇB^U¿x¦ú#›ƒ{é½v‹úEA?ß—RˆÖx׳,߃ÉÈSsú~T‰|ˆuibÜ>bP2n:g/Ë(Ë ŠN Ÿû‡¹s³Ñ½¦5ô”*Ù.úSʰ ëŠ\Ã9–Bû¥Þ²÷û*½5í“©'÷õßkÌ+Õœi:—¿îªé\.âìXTNi¤±T“Zâàä] Ý·ÓfYbq FÇ9À3¥×™ ³>j¯N uô8ï N1ZíÆÔuϹÞê‹ô F²o?’@…N§Ãð6¥}ì·¯€¾îs¾VFEÏbI$ÖPÜªðŽØ•&<4‰h2ôÅ!Ñð¤é>Šç%(i+øË£hÉáÃRõèñÆž?à‹SeJws=¯§æõÝ9 úî7JYt…'ˆ§‚yÇÀ´â¬5³ÿÍ.Ç΋€ç—ôn2þ1)ݾXœT'¶8V—a›L)HëôµÔ™ ü3«– `6ÉÕ’‡ýe²Ë b°M×n##¶”£@Ô¨Å×oç)ÁAz;Š#uke6<rKþÍ+žPDQ²Õ&ÙºlMÇÚ"ÊÀˆEÙŒF.0„D6QW:‡ïõÄûb?´2]‚ñÖGó“<àgð–ò}ÓjÕÞ{Þê-Z±Ö"Sô;7; ^x$~ß±ùÀO‘’>o ·5)•!ˆdœ&Fõc€îçYâ㦭Îï󠜩Àr‹aFxä9ÏÖRZ{b2 ǯ¼}¹+ s…XÈbÍÆíö‚ü‡ã–ñcÛZøl¡Ö+¼MO,Éz9Cëœbƒ•ûXK˜dŒçe€†9ã1íuFê!ˈXbÑå{s1’^iAW$N åš…:#TÔIõ1ÓŸh23|éçºÀM«å&Ým^èz£{5ô?;Þƒ­BÏ"÷!e­b´;/·z!“ˆ":ÆsÄV‘?aŠôWçÉ£0T€2¬â.Ç•“Ù¿ª%‘“J’ÏàcýCÙ{nae‚cQw 3MáÌo²{£@¼"§PŸ_ýF±©"ÆüK¾ìü©¤ý!òMö2pþî=JÁÚÁÝõOïQðaªFÔÈèŸÓ$¹þp\ªNCƒ4èÔ4 Ö%¡ÿp\ô"_ÄxNSˤ›í¯ñtž,þ‚ tÅ?6æ g÷¸Zȉ¿åÀàÀg6«6ØÄäØË5H‹‚*ƒÄð­©ñ¦?.*³(KÄæÕ§ÂQ‘'V¥¯õ…âp9òè(ÙõKºh›©˜ŠDåd ¸Ññ²ú¯BRdÙe“³ ¼T«µÇ)ùí/jÑUT€ÖÍÞ»D¡µã¡äÕÆÏìUR„PòqøÖP³˜½ò à·õÆ.6×tXy²^³~ Ä6n1Y%ÚãšYÇ쯢þúÞïÝ4®6Á;ÿtãžÍÄJ¼á€úw¾G³?û^à‹~÷½l«^ ¨ÑàQ…4"l[Z›ììn!_HáZÎPË,›Ýe¦;ZÜ<ܼ€máñ².M’Äfó{Ô•ú#J ÂÒm¹œCt»l°¼ÛlfCú;GÅóuÑ͘ƒ ¹†ºes./ø^µoaÞpIèôÙi”`Æbº].|ªP¯2ÏLXl¡›dô=-´Û>niþ ²ásCAšÔ¾=½ÏvĶf«ÉŽë6ï³FDº/ AÛ‚‘ìqOzËõ¹&aåkZ9½½ŽMdSÕë8€Æ(ÕSCÉ#§±2¾Dè.œßfÎd¶Ûƒ™ÏǵSZ –mâain4dÄù£ÆƒhÊEá€ÂÝù”œ£>oT´ÉëöØÅ~XŽÑåñ;&ñeþXÞ±Áÿgëîànçö¿n&qŒž~ ââ™XJt1í4Œµ:gQHÙGâÉ[Fo˜þÓÀm•\(Ïêz–íºy÷ãn»Y]º´”©”j;­,í-N½VÜy„-tQÀ*Š[0ªåpl+޶ƒüŽÄz#ÄT„ÉæVõ¶îËÒádd}(ú}v7¶É ¢«ÍDÑ­÷÷&+6«õ° ËYzU•…<ÒS"ZZ^v uüã?ÐanèT ÷©£Ã‰[tÊ#£$ÄŽ[7ÒÔKÁžÍµ}ù^Hy¹'ªhò}CôqRÝÂ[ OYîÚþŲø‚ðÛÁø ḩþuoê8ᱎk˜¹”÷c8 < =ŸKI÷ã5°IÇÌWW—™‡ý1Å/Z™„ßA,EPÈ[Œ7,G=ùüîZ®çh÷ºÀþŒBYIªYþÛŇó7ÂSñÿ X{üë)6%yÓ]e¨«qùÔÂ"HA=–ÔNRY.¿P¦Ž£ÐŠ>¢M¦ùhAÓ‚+ïfñuë²ìLP+Þ2–ßioÄõ¾€r-Ön6&s.3ûÁï|md|ÍÿjªOêã "®¾úE[TƒY—³Œø'ÌŽ"’¨fLý1ÃXŒs+é÷Lçõ§ˆ‹*ʵ¥‰*fJ2=‰²-ÃxðZMÈÂÌ 51ürMR¨º¨‰H àûî׎Ž1@•K7PÅÆ{•]ÍØÂ j:éû|³ÑÙà’¶ðÎ9Îop€§FœÓ[µž›+’o=cwuhNaû‘eßø¾Uuª¶dÉS%Qò=}Õ0 ³Ãü:&qt²Õ8ë±n×0ªq)#ºQ‹ñóê5¶Uw•õÄÐpˆ ¤Ô-“£¡`WmMÅIkȶ%w—P›RB¡ou³Rr¦RO¡oÁ™èó¹å˜›aHÈÚ6YO…á ‡›œ˜¢{\Gu_?Üű- þ»yø€Þ½lxì¾taþ\Õrq~YÞëÑŒ½ßÄ ø‰A=AßÜv¯éð›B‰Ø!!ó*¡LaíîŒß=h¦™·³ï¼$œvƒ“·zyÄÀókÔrnþ])UÉ ÷7›&ûRÑT»L`ÙScÝüüc±y§¼OV«!rO¦5–* z›C{kIÂx%À3+Z¯€A1!”Š¢­¦àb:·<IÏaZ\G6h7ýêåvÿà¾ß\UäSNm}w– q‰šzk&[ÀàFÊG ,ˆ§åªþ"^èZbálv¦?P=So­x@„bôé(TP–ÛâKÇt¼®œ!!žPg%ž~®r»8Á=¢­9”ÎÑÕ^Ø(-]EŸ,OF–iì>3Ö½%(Œ¿¤0³œÏ¢Ä¡š§Ç<µ&¼®BH3d[¸gÿkÐÔ,BÚ+%É½È O}œI° °ÛöJ—l˜0ÖÁÈ¿ÖOi4tßÄÎQ,o×k¥ódaªÙkÿˆN5„.S—«V!Ôôî‰Ó͈2ü•1AI7ìËS£ˆGå¥(‹ñðÑâ¦h63ÿ~Oþ#äGîl~%ws¢9LUªÐ-^\Ö«„,º`œL 9'± ÑPqüÇĽV0™îí–>3ÍÄ$Ö“]õšø9ù}rïéàá¬xìŽÏ^Utó?ASÿØ5?œ<5O’¾¾„7w§`E`jðOéëúýˆ;›–¥½mÓßÝtŠŽnÿ±j÷*£|Ò„ÿ"¨Ü‡`4 U€``,Ÿ\Ë,¢m¥X>_ñvÿˆVô]¬٘`üÃã̈Ʊ3Èx6¾Ææº?yÔñµ«\»'+ŽÛ‡ƒ|7"¯†€æúdñ0ÂX™Pì=ˆ#†YœK‘ WÝ•ÊU˜’*Ž'Äc´ïùÞÛÖ¢[ÓéHo­UèË•V“§uxõ…k/²7øüÁmÊsä>?l=À§sÿ"jž=†µ?â*>Òõ¹+«èŠÇ³·Œà ÒÑX6~µ3ˆ%Æ69A8>H¦Q¸Ò °À…`¯Xú¨UUEL•,Ä\qe¢%dâ4“Uä€ÛG0Ú¦žL?!Ðâi ‘ ӄב‡/|‘ÄiÃï©@ÚÄž8`O¯š{ÁÈM—.”|˜³—-KK{4P0äÍËÙß6roDgÑ…{ 1V•äEŒò±Â%5+øÙ§d| !¹ÍVõ·Ó$¶¬D@üHD]—%Ÿ)ýä=f¦QôC=zÜË6ë}bEÇ(@ê¡ð5¬|>ïÙ¢çO®&lZÙ÷À7LYÿ®_ð†é_›P?Ó!X½_¯íN£ƒkMƒ*t%éËfEï±>tWQRæ#udznˆä“3ŒûgñÝ9Ÿ-Þ QšžÚ*×ᇧp£IÛVÙH$txC\޽½‰ñ>µBGÖoîf8‘ñRW©¾X©Û¿nsF æ¾t4é࢘…ŧø3íõÕ&WxTÝD/8ò®!ÉtÍ­~VÃ"¨ÛF“…(`ê8ò6ÕV™H 1Þâ4•ŒºUvûî{£,<Õ^M7¯µÞ‡·¯]Ùìæ¨å‡å Ó}ëeò?h©"¤âp5Èž Tk8z€eé—xÜîN#pYH²e%ùš„„«Þƒ[³©JQÀ£°Hž/~¢j¥·#mLïÃQŸh&Gžâw‹xjŽßùaÓëc¡|}‡0 š2ÒmYœ«þRÂXb!Ñ”ÏÄR’Ú^„T:…tjå[B潤ů·¯°¿‘7Šîvÿþ}´rìóOIƒ…ƒº^¨Ï c;Ȩ"¢H¢¥0EwŒ晡gÅý]åT=!D[R‘ ¨âČ㓓¾Žg“¿†NðÙN¥\ýÌý„$-ô£½†¨O—fƒ4e„˜$Yt¾¯ê?ü²¾SM+ÆE`k•^TåšÅÒHW/Ò¨Š¥Z­þŽie-/1Ë©õE-…Lô3ƒåÚpöëM‡¿véÚ Äý)þ³Uõ÷ÑÒ”N+uÌ1Ý ë»±ƒe^Ö‰ÎÍ!±K/J‡á3¤ ˆj$œ;n˜’!¦ÜÅž‘Ï*CÈ­.R™q«û¸ÑÜÌ÷jaJ¿ÇÄØ¥î#4Ý[füUÜ”\þ¯¹>âÿÌõ©ôöBÿ9×—:ŸÚvA÷E9¸øÏò(ðÿc®o'ß2Õêè¡aƒ>¿Æhqã5ÍyJY¢ÛçFäöáðpmÁ¾ïèèUEÒ¸UqÂ\©¼Hr—­éÛ‘+[)+õMÝLïħº2RPK“†:ynù’¤Ê`\”Á)ËÖ,0u° ß×2®ßV=XÂSÅI–¥çø´_H9î;væ“Õÿd`ʺ—7·xµÄI,HÚlùi€Yqù]5E@ce32œëa1ëW ¬r“ã‹šê‡ Š„›©HH¥ÇaøÃªWL(ˆ­ ®A“ õyÀÍ»Ùæë%Ñ'ú*b£iˆâ-^ÈŠš|ý)C¢j:…zöâO2:ZOó)´¿ëÊvÿ)ZÿY.aý³h †“–/ÀV`¦91—FF—Ì:ä6®£¤RR "½¼û쌛˜¬àÑ•þ`áaøñTEçB’è ~Ö%Zc<¾÷QK*ªuC _ÝüµôY¨c3÷sñ¸³H¸vLŒ½Y"çŠ%1~ý|}c˜æà–mY]¶mÛ¶m£ËvUºl[_Ù¶mÛ¶í.Þ>3sæÞ9sg~$y÷Ÿ<ÉJò¬½ö»³^ˆØ™{ q{ù$²ÍÞˆîÝs–(ÖvŸµîÐ-b¡Bt6ü‰vñõðh\xJsyy¹ûŠhl!ãÒ!éh⼬Õ$Ž7CH">píÆ¼GýMïV2Ì„¹'{²ƒøÜø(ÿê¥Éè¥qÚó¿z©{ê¯^²œpĤÇ[NLYúóxpŠ·.‚N¢# ºÍk)6¯´¦þ~iyÖwØ9Jý‡=OXÓžïoªÎãû7U×)£ì‘îñ¹‡9rÄ*[P£ôý×b£–™§Ñ_üÁÿ·ÿþT\œ,íÌÿIå2öÈJ¨_ô“Q&E±}Vsë¡n˜¢ÞÊMV*Ð?çé­¬¢ô8ƒu¸á`ƒ°°7;n![CÓ0[ØëDQZÈ¿(Ÿt!2‹]Œ§Ýñwþ\·L×ììøµŽ`Ó’‡(题©p«ÑZ$µÑàP£³ 2’€¨xPÑ¢Y¢q`¡ÎØsÙ%u6šßl¬e\©7à|n2«åpV˜ÄM[%î”:„h&¿ãvK±¸ª—H'aØgŠN§9d?­Û¥¬«íT7ÙîX¶þ ¹xˆéñV&1hà‹%m.™Ì 8*eŒŠ;$gK8žÿ¶ª¶¿¹«WÈ'Á‰tí&áâõ°Rá$wd*>HaÔÚ\¶ÜrÇÚ/9ã†%uÙð <Ûxž†·?óðËŠ!ã]¼ƒ‚9C ä¸JÑYS»ñÈÛ;Q±_~Õþ}—¸C‰.=²a¸—ŽîPûJdUñ(«ïõ¾ó@>i|wê´ sSyd/«'í¹bWõf”U²jÇÞ¦“76õQ+ì!S§Ùƒdf¡Qðh‹T'~ÿóÞ²â'v‰wb]ql/¼*;W©ù›·áò[Ĩ‚¬V’TP‚*4!1±•D“X@>Û¶jynÐ’ qþ¥é[q<îí0ïL.] °H½(¤I÷<$ÚG°ÃCwä L' O2ÏœoïzfàéHç÷†­l©­ÏÉÿlÿ7ÆSurýÏŽÞ™0ÞpO4“µÉâ×á~×S½Ç="•ŘŒ²—Á²ò¾T3Yl‘~¾7tVt¾ðKmÃο™ÙÉó'ü.l(‘·(Ý¥QÎ_Á¢î!w Äo¾,eÌL‰¡Z7êH2¾HK³lѦEa´ü¸_ä hD–Î#â:jiÓGÒ¾ ¡mã6“ˆä®ÅèÓêŽ.Ä6$»§â§y35§Â)ÉÔC¦¦EÖžõcÕQTI‹S.>+•n¬R¿½]¾Ì^ë~“»¿@‹0l2ÑýŒ|Þ‹<..ÈLsY°'§]ЧEÞ«~Ëo8»§"¶—©¤mžüùœæzÉò²»ß0øÛêN¬C Âòb¢<€ÊÞ›š3kÜ×Úæ¥8À̶/ÞÊ›âŒ1‚&AÊÚHdž÷ ‰RÁÍÚ XƒrB–Ÿã8aÇÂ$ˆžàŒtFÖO¸c&÷pÎæHdnÞ Òx=Tƒ®‘òÐÇ`…Va~&dÈ#ô‡†ŠµVçIj4b´–\±É\kô-ü™”U2hÑþŽë*bæ?H–€g@¹PÊ1–Ù ÕaLšž½ÈV†›½ðqœ$k2ÊŠË~ëfnÖÈ5µáZ >:ðà©~¬\Xœþð=kÓ «Õ`cF»6Í•`âÅG>”7­‡<ûmpÅËÇ6pŸ%J¿V K“ÅþüÎ!ꜭºÁ¶ŠÓÆöp°- ÿ3Å}~XLEÐŒD5Ñáù#ã$ ݉N—ùxRæç~0äÀÆÐÕAJu æW|’ƒ’ÒŒtš’t{€Ö)2,8S̸‡H@Ñ®.bm‰Ù#Ö-Ë„Öhút˜LÓ"ÒlíDã/š¡ÆFö¢†mª)3Ndj˜c‡tÆC`{§ã0„€ñnàŽ›L­¬È»˜ w´ÎÐ4Ü~Hd~Õ[¤j( k‡Md~õ[h¨*~•[®î]Vƒ‡@UF¿0—*›BWÛ§&ÿŒMÇôw›Ú@ú:³ù—¶  ¸]]$7Åêm'ŽÚL2÷(Çkм™í ø%¬]L²Ù÷D›˜Ñ‹JXV‘uî”’Yæ.Íí¾“/×F(ËW=Y.‹vj+ NR+qlß²ø [=òx3„pIþS¥µAïS¢W[ŒØýY—!SD0÷Z.õ]Q]Ì0~´ôŒ•¶]ô2 ¦se‚éiël„ʾ”éæÜ}Œe|¦œÝnDßE‡âÂì6Ð8è<3ËA–¡|53ªs=Õ:ÀíÇÜ·CHSUŽ·ƒry«á'³I²ÓZãkE Gz²ùAñ‹Å“Ä YCÆ73ë{/9;ý­ÿjÌ/ŒäëI­Œ_ ¢`QÕöÍ=õê ô xåï-6´½¶irÌÒÝY$ÒUê`o€6ò£«…Hæh…9'÷š3„¯3+ûN†^‚b.ÿB¼º*":½l2RB÷ÀÌðEO×*¢œš<­¶]6×ÒÖõhó-Fx«½ŽŸÑdŒò º—‰h׊¬ê‹T¢ÖMF~îþ<ˆ^G…c]žO¥Œ¹#Æ¿G]xAO-D_«7(…Pû J4õ1ïŒ_XÇc±dóïF+”m±uI·ãO¼ËÞL»Ÿ×!\]:$œCùÜZ®Úª‡Ú3"ù¡1¸!rµ¯vyPú7“â­ôh’ž¹…9}>=Å,ͺLc^cùpÙcéõ®Ô;ɺ-¯-e:ÚrnROW>wg¹wÅݶJ}Qþ{²æh¾ìˆ#³¹%ëã¤e)Ù*0¶”¼7ÿC+œÅåµdO,·6³Àе—{?+‹ '@_Ò‡g®s†úöqÎYf!·µã‡÷¿°êLƒRØß¨èjø“Uü·Á?×ày²_ᇀ€ wƒPwƒ€‡ð]é<ÌúØŸìtÙYLˆú@uƒ‡H?üÐýÜŸçý\Äý Ìß_$öÑÈbŠ‹÷÷÷aa`h墨kålJ‹"¤©£U `bÐÛ ¢ak Š‚iÁ‚…DIÃ$ô ÷Ç’¬"åAt>Ââ†ÿƒ¢B=ŽŠã¿‘áÿèéòŸ÷!--bdcó*08¶î>äÛ:[ØOYD<)ÏÔ1]ˆI¤\š‘ÐM%†²ê‚°Cµ¡W„¨ZI¢\»ýýæò›ðÛ·§XwŸS/¸ºŸ(O«–DQ>L_šà8ha®5ãìö˜UçÓÊÛ°† œªƒÆÇQ;fg¨4d`RJê÷}2Qsý‘ ÿê´›~~)®w}¥ˆæ„Cøê‰ 8Cm&Ëà F"èa VØÜ]\çÆç…u¯ÎƵÙ”õðF°"jb!¤ÜÕzÉž$^¹>ü´[2"ótåQiŠ'Ád.„w„óÏ¿åÝø°¿ÑOàÿf˜û¯XÉÚÛ[Y˜ýTq511uþÐ|bë¬þ¦t!ß\ ôæ¼M‰¬þ¨VÑMÆÎšPPŸNôs‡›pç^E0…·À÷Šû”è³z«ézŒÌ¾{nð ª È‘„AbA ó˜uÓ—ÌD)]Û…ÓÖƒÑ-Ã(†-RÑǽ® g´-Ög-âç¾T'M‰6¿äõ߯yűÐüÉ÷žäÍÍ®J´­šÒlt½²³>RÏ ¬J~æMvàò˜ãím; ¿³ãlÀ;r|‘d¢è²qÖ«$y @u+ðî hp¶r› ûfÒj(î䉇p³ ·ïwÓm/ÝÎ3||/ >÷·üÄ»„rYÅá ®Na,.ÈÆ0½ªr² ƒ.^ãiTs‹}Y€ K¦ýôü™:NW. r™×¯a€pËågå¾ëÈn¶h‘Þ Ÿ«òƒíÎSŽv¾ ÖÆ=rÈ‚nn‹…éEWŽvɲu‰ 07Ü”;º´Ê˜K|zeœ;ºÎ‚~q0¬H΀:W%3³2N–O¬ìƒc=wÁ†áwj—”õZ»dØ!U-‰&ʳ0µÊ—¬-ïþ’c½`E¤ãž‚„¿P…Ã;³Ù…ã^1(Téb£*W k0qHw–‡€2è[UQRÏq 'ŒBN]òØnœüh€ªÍØŒ›@.ÚÑÓVŽMôݔ͹®pP5à­ð»¿ü€½µP æ,AÁ>Êå•vkÎP>0Ó|ôJ"çÚ0ö§.TÜ©ùÎò©:Õßä½-@v`¯ì¯¾»­Ð¯^@:€ ®H`^ L`uÅçHØ‚ä!ÁQ&&nACOw&v (Pí! ‘jƒ1 ªtÒ3»¹3.Çfòn¯ìèx¶;Ð][  `»…3치嫌V‘’Ú~àk0ë};À5ÚKnƒÊ˹KÏjø´OF«ÁIîáè¼CÍ+ÑõU¿UÇœЮÐàþæ©`Kf8 ðe0>Ä)È„>ø*¤ÒóIè>“_ vWtü°/ØÅì/ä]ÄÓßQ|(µÞ0î9¯eä¾Åá9ÖûXrt䣥ð¡"s\S}ËËŠ„¶}\}Çfvélñ£o»ëŠµŽŽ:""¥É¡¼ËCùyq¹{lpñ)ŽU¶{ŽyÇŽ8sËŠ.›à2ÇK´IWCu†´¬Éž#Ä"{hUñÍ 3ئ,4\¦Ð”Ö{»ŠIæÏ:-vb*":6b45˜6uNŽ*!dzYMBúHª¼st©¨ªÆ"ô+@p,#…ÜQ+?—\®ÙÁpˆ«ÔCéñZ.kÙ§lâŠo3´j¡´É)$ Ó±5КY×ÖK$( jêÛ*9ؽ^“-EXÐN^JÐ Dh…иË6‹Š Î![Ê"G{ªâG‹Ù 0×èfc¬7¡ÆˆeîºÚOµïï¶6kª<´:‹ÀÕAyÇ-ȹ@CB¼h¾‹[3G‘ÐmYA£Ãph7'DþÀfß_Å…­Á™6jó%ù©Wˆä¿Ÿ16Åo¯"b!RIÒ îLL7Ù@…žÑb J³=>`h3b¦n=’u²r+ɺš5ÝÏeõØVy¿9{®ÈŠm%Û“,ð’àP[TFä#«pãq\ÍJ”‚÷¤tÌúãy4Ã]I§¶ ‚D(Â0é¦Ã*°®)àÞj#ÃD'#;€i¬×Gžʹ}޽…I/fðGAÞ’\fB×m…)ƒ—iŠÍÉt Îr¨²O=²z»cI{|×bc;Õ °)` Ý®}AuýR²+hvŒ¯‚«¿>h…6ŠÕÅbiOÓŽü­@Ý¥«íÔ”:¡‘¶^A¹CÃÊœ9hùjN«Åþ­¬5 ǵº}DTÅðµÚòó3-Œ Ò{S¦$™½ûf5çõ!UâŠÝ.¥¥5t•"Îöˆ0¾éÌIù€”c9ÈØ5O®ŽL½e‘½2!±!M©þº³¢k’nuµ5”Y®Þ%¶¼:Äá“ ®vÉ„ˆÊ›º+x~>1BcâGp`E†Ósë£DÏpñ²>I™nœ.îF[k< µµ¶HƒÓHï$9šjÚcÀ‘ÛF%Æ H#ç´H Y­q#4؃•ò@ˆ‡<ï Õ·Ç õ²w_®Á‚=ìÌ]¾ÐïâoBj¸7š.ÛYM4ú=Ö œ^`Få¨~V»OéÎAÿ%€cJe´8}Èì3 Jz‘µËŽÁâðF™^¸ïÇI_Y€|Z—?Ó ýÐ ì×]en|³Ê9¶ˆGËŒrëiZ0UÑós’´Ùk Q½GoJuögÅ[Ý•í´YÈhŸOfïÞ;ó 4uC—FÝ5N?¤W>ö²Å˜v!Qfëþû—^­]Â}A½b':™*}u™þêær†ÔÑz±ƒNÑ=óŒxÀÌÏÙ69–­òhV³ÆŸp6¦ïe6gQøVkˆƒˆŸÌïŠøŒ!ŒHJ€~Ò‘CäªAí‚Sö~=S»H=9ÊcåËÂ2‹þf¤YèkvžeðÊ$aùâ­×€½3ïƒÞS#­0v`Æ„R„Ù¸¬%SÊêx^æ¢Y:ÒoЇ,™ÑO>´´êQI”¨ì²àt‡û…—~ûH¨îíI‚¹¯Êƒ0þ7Ï2¨8‰3ÅŸë'¶SÔbÛt¡×óÑe)³ÖÁÈvjÿèø%dýˆïäÒæ1•û{¾ÇAò¥œ î£Ë~röf6á‘þ¬ïÖ5ÐWáwíTªHq§Ñ¬ý™{³§b¶1gƒémѶhoRdOîÄ.Ýê5ìÆé{/¦—L§uØqÑp„#Dȉ7˜|ƒåÐÎàÛ‚H'dä·ÊÇâ7ú Î>cšÈ+ΕÈ]<Ñ ÿp@æ>TqÏ€û™XåšÔRö{Ÿ²2÷CÁ*.}€qŸCÊjíd’¥*»R¦•†“˜›+Ï +·†`®’ÿm[Ì™ˆir¸lΞÄâS$Nkð<µÊÂygȱ¤5eôfj¼wz>xåãzÈh÷ŸGÆÙæNeÌëbtªŽùûÊeÅÊõöOÏ2]·´Ì†üúÕ™c­±þ­Ë)´– õ¦r7¤•Ì`83%K(öp»< š€P…8 c¢IŸì¡³ã}bÔ 7w6;G§à6N³Ÿ|÷\G‰U^®*lfß”v½hVðMA?“ÿæ2fžFÕBj×èkÛ»6¶µMìÈpS2Žcþ²å<0UŸý—.Õ*¬|ýZñ‚¥dõL¬mm™MgÊÏBÍ ¿Ô+c7ÚWâÄZ"Òþ~µÙUõAO¼uÞžMS¨aG°â+³ŠÈ¸\§ž¿ü#Æ‚ÒnóC°öJ„×NP„÷5HÝr S^Õ–~Ëí­µ Ч~öP~¤à¾äwšUøÅ½ê…w^$\D|ñ‰Í´é=s¥ÊxkÎóÄ-“})> $|†'É}çŶŦz%ŽNÑåé‘‚èB½¢ÊÆU$nvXµKþPuQV¨9°Å¯Qós÷t bÀˆµHŠ EŽLådMF‹aœ›%¨d\ïˆ@4Œšf¬Ês7Ü`PÀmáÕê¥7‚mC"ÃÉê;2§÷º0ÖÄ.üÁ"•ËäAæ¾UÛ¿!µÿŽ‚Ù—è/eô=Ävp–²ó•ˆHq‹§ˆËýzÿ”,Œª¼:yŒàÞQgVMî˜åHF&›>s*I„ ¯òŽ’nQV?¦Þš±]z¾4ßÝZ T·ÑŒ]ÀŠ·ùbàçú Fvufäu˜t/iªðæ‘ ® d¦ trŸßî²Fó2»+ÝOƒ 7RVZCÛáéO̾kÆh&½©¥!æF6ˆ¦Çʺ+¯èÙ®Â7ï `´?.ûHmv™‚nض³ìÞíB®IÍÛ vTÛrK@@¨-$™'sÿþNÜLLàÍ‘@\µC¿MÚòjBÝ£‘ò‘åœ7KÝœxY¢ÇB¶2o[šnß¶ÑÁ<ã€ÔÔ1Qõãø8u1©C¥z÷àû-| *n“óÎ8ŽZ¹*ÚëÞPˆ1îe•¼¨+«Øѯösv“¢Îâ¼û£wßÔßœy²ª1}¢Ž›1ÖpÐ _Kä»k²ûÉ2)U/ÅŒã+£:Œ™l6Jk:j€;wæ¼GB÷ØçТ#H£jyl>lõ+#³ðV‰á Où@LéŒu[0±‘Ú }2ñŽÃ¿6‘â³”!ã•0ágÆíö#±%ÕìŸÊè9ާBÔ SÑóOº&¼:bÇ÷?3ñ2ªzænÞ÷Î&AŽ/ðÅ™^ø—ûI+ Èrzâç¾°P c=b£¸Ò…=beW+4Wñ'‚˜¹ÈW9ˉkªRGèêPQBÒFO§ï+vçS9Ê»Q©í§h›¦¶æ¡ÿÂ_z¸„ü9Å›fWÈ™âñLq4o{ñûãѾ\£­ûÝ4¶Î¯ž ŒÚpŽ ]WˆÇåZàŠÑÏ ü§<3¡ÞŠ“à1#þh¹Ü4¢Âš"¬’Â4„E Zî´èâk6A…u§+w¥LgÐ&°Nùëk¥×jêµáÀr_ ¸,ŸPÉ ìêƒ!žW ^­”„6°N¼¹a;[ó[£32k‘F¯ü-ˆz§7¬œüÇ»¥ƒt ÑÙ¯£µs66Clè ö¡«Œ¨Mû¤ÖÄŒ:‹èå°¢õy*ìáN)êå©ÄêÌb—…B»Œy¹ÄvKåÚÉ™«c­„¡Ž;‘gôû  {SªOˆ¢‹•õž3`!–b‹ê1-'Sº2ue¿{ö;^M‘Aó"ƒÎY*ÝÓDÊÛYZÎÆTƒ¨‚)Îý†÷ã´] ÇZ~PÌ­ðv2™qü C„Ad‹GV]`Á]Š l­IªIì5İQ @«w'kÇm[l¹gø³#Ëèe\^¼üÖcœ›~he ۿೂØ&KÍC3Ò/ù ‹r|þø}ñ#óãXs–ÔL?ÀìiÉ<{P¤jË>¦!%ñÌB¾æÊûØÜãËãŠx?QÆñË;¸[hãõØ7ž®9Zäø$wï HÚ'§¨55Ô9ßM¾Ï\øÒoE³©M‚ëwœ9/ÿU=ßoÚ»I/ÎKÞÏC±íÔÕ€ {uíó™ifÓçXÐÎ ú¤a'ÌC—šhu(‹\JÁ #öò’GYåY*™ÎÇ·²ïmú}l/,ÐÕ1Žê²ª<ž ®ê²²glTz5Ä:]å ÅB?޲М*ú‘«{lÔ»3M>…¤g‰¶¹z=ø¶G]5"­‡ä:ýêí€y¦Ý+]D¹RAz?)O–!ß.K;c°‹Ü<÷Ý„¡ð—“p'ol,¡Ý/Œt­çì#/TVÌtågûøFÕŸÔñ%ãÎÀ§C—5â(<âd´¶^kv8ŠÖ[5¸„©.f'à7Ú4³¢“—Ò?Ø5>rÅw(Q‡lyôìTÖ–!¤‰Ak{,v™@;¿Ä ‚{™c2<ÿ),а¥ þ| ï¢¸Í£¼E¡(I#¿ãwTäy­˜ø<Á îiÀý{òðüÕ½© tÝôû­h;“Á+/|ò Z{“e4·þ®üR-I?4I“Yá¼Ðy_âÙÙÛ6‰—.pÑÈú\4A5Õñ±0hkIÞ}.fBPH­ûô‹— /à[äÈI£òÚ¼§Ñ[Oº)ò6-ËR–{¥ëïé÷„yQYUmõ« VÇ϶I)Jùž‘yû[õí5‘ž“à\”À’ø[|ýÕŠ³vY/E·å±uù©xy«t»†þ"ÿ¸“€¯ç„Æ#KBLæó¸ì¹fŸ³[ãîóŒ5c¦bÒ|cê†DNH:ƒ'‰5³ã´ßO++íl.òà]´õ]Ø3O¨Ë©%¾NµØÏ,W6ÈgÊ ;æ[r¿» ‹/j†Fítÿ9ú-¥S…Ú!Í=kÎ5 ÈMÖ9 ù1|æœ^ï¾NùÈ|Uþ3 Oµ((–r€á:?({Ç+Xâ;4fåûàŽ× ìšJü{ñÇ0Ëß-Ÿ^¯W&oQEw+á縱ð›ôº‡È•ÂúϸF©ð )jµùš*JGÇ@pÛóBW\z+o½y>,‡S·CA0]®uöäÈ PrÎ"g´ OÌQZï‰?Æù¥‹SÃI¶ëµ¼·5!îqh–üò°h7Â5Åv[›¿Æ¤ðÇÐ!æ×çú„éx}Äm@]“D_HÉS~Qiíø‚Uó—úTŠºK›ŠôQsy»GàLêȹ2·Â>Í™v{ø\£Ú~v1eÝ„PжPÓÓ¸P»üº±Ó¬ =ü.øj±¾ñÏHDZpÄ‚Eù(P-&X/¦nâÁÛ¢AÎØ!¦ìe±TÈÛö‡|&s|…I£.aê"˜c!Ryƒ™Hö¶à§ ÕOî-ƒu!·ÏI³‡zøöòÀêcÀÝP¦šçÖÍáëÎþ†ÖE†Û„Ûý¡Î+jßPð¼!}Fuõöš2C·ƒê¼bÄÉ-ñŠY‹u‰s 1v1wôS¯~e\è¬kBÔQG¹x6ëæÌ½Fméým+= <ææ 51GÆ5”/2ËLß§|×m’×ÛÒÛôÎ4ß$ß|ÜŽÝ>î +;oïy@÷&ëØ³§¿6ç¥VΓƒ HßÄOØØï (¢ËÀDsÿ“{À¿^zƒÿ†3Åÿ'b¯á l¨dDÞ¶=3í‹oÅ—P»cËüÕV’õVv½ËÁ}÷æ¶}ƒÕ|_áÒÉqŒÌ¼Ü`VgDV>ÅyÚ'Òp:"!zAüöÏYæ¹qs,Mè;þ1Û7ÂR7r³Ê1°ŒÒ|=|å©*E9ÁôK„ûmX6€²Ì,¼XÃæ÷¶ñ¥hf±Ë$-ÿˆgÉÑû}{òÃ67ç6¯q aˆçuÒ™Ozƒç”¶ts:iL4àú4—§Íc&Â}vËWr뀇É2v§Ô¡ ¹±!ðú`û¾æùq~}hk‹÷Ì~=JÊs7ã&ëš%´IG@å÷I—Ø÷Оwôsã¹ eû`óø"ÿŠ÷®oèþúB*:¤„µ=¬ "ZX3*õ†ôc¾áG—üùiC5oÀÕý‘ñ ¹åì ¹Ñ,ÜÛìߣÊâ=ÏÒý†B€|Ä^BdòáÉj31ìÑÁmiC• €ÇaÌêev›¢íP,4³“:U òÄu~ÀöJ.18¼]ºEe–`—y´)!XøÂmEº¸c˦3ÐL¦Û<‰*¯Üo¢¼¸õŠS?67Àê¤}…ŒûT)êò`$™¤ÆÆ±¾WÁ$Zï‹I³•ÿ´ðóý=+«@…âDüì…WÊ[Ïc*PT£Û1ážÐÚ5 bŒå©œ°x‡}RßW3ª,â9ÏUäC£Æéøa_]á𦱠H8Þ7±×û5ðäÜ0_:¶6Ö8cw•Õ÷dAs‰ ɹ٬™ñö~¯^äÔ)¿‡l˜úN”iÿ 6YÝ@?/OHïkiÙ›Ë0­ƒ¹šjº,œwÃf¯NUÅ¡p–]§nš§èÁ3¹{Ú¯DÝI—Þ•’bJÿ¨Q]בo/è`þ¦]‹ßÄ}m5pô î*Ý£|Jn‰·æ ~˵>rë¯XÁ›½Ûe¦ô¬MÊÅœª"Õ„ðÙŒh¼ ÚÁÀ—ð’X[ýEõž)oáëNñ …Ôšš¨Ë z!%yŠø³Oïx30è³a™oâ\_2JÒq¥ª¾O¿{Q6‚e[@{ÅijǸ#dK¦õM°¦åÖ°‰åX™è{Ù ÿ|}û®¹X=<ÿv˜BÀ@®ù“±>b#ÀT¿_Þw½.߆Æ‚Üæ¹sÐñ²)üyk|‹¿‚œž¨ “Æ D:±#Ÿ¨ùÛY’'ÚÓÏî1Ú5ٶݘÆÍ´š a–n¬[ßžJçL›8ú>àggy?‡#ÀVk!]^ð‚FNq©/ôÆáÉrɇ| Ú íëBì|žöÄÛiÓB/S½Þ²”@ST‡&ý+/³æ`ÙéÉg•4šRÛO¾ÀÈ­óåAÙ–ÎWWšJåêžH”vgí² :É^’úRŒRú1¼¼Ð¦¯8úò¦‡ªíƒò›à½-òZþºþ¸è»Õ.·“a¤áÚMj¨˜Ó•Š S‡ìU%·uWûøâ¯£ÍM÷0j5êcð—¥!*È,:}q±—*Q·]Ò'¨öL.õ7îS,k-W‘‰‚œW˜ï"_E@¸¯ØëY¿TOЭº­ù2šóé)öëÿÓ7dñÞþÜ<§/p `Øÿ¶Òü¿L ˆØÛ9»Ù¹üsš)Å]7Qs$G# $”˜1€8 Ñ!6 n ÇûiŠÑ>·ØÊ2Hr.ŽL§Âí¦ëeÛkͲbkâúïèáÆ÷­Ãk){UáÏ×ÌKÛÄV× jíÅÍOxiú—Óìg¾á#aA(&ߤO&߸d ß䑳€“oì”J\åWÈ\CT¶É#oæ•ñ#qA*f×ä)šx ó¯è¹‹¨mÃGò‚Ì®©S<ñæ_±sïQü†D±˜>“§(â9ÌoQs'Q݆d5˜>S§8â;Ìo1s/Q¾†$9˜Ÿ“§â=Ìot©Ú§îŸ{¹lãó"¾Ñ¬" öÜlqá%Ìxw‡†Ä?f$°ÂΑb×Ê$\&˜……æ ,UÍÄøâ-JÐÁ`o⾌°“o®W>‘濇ÀŽÎ—ÎB‰?±óÍ·yAÇO/•.Ú‡ð*‘¬.cÁ­g– °æåâGÁäÍIÒ`#™$+ýÁ޶zÔ,±óä3¢íúN‰®/ˆwÓ$aþ~IKIvÛã*…Z¸èËãaNÿ#ìäS­ƒõ,겦yÙ¤”_öGÆ®ýxÕ¤\y —þìmR‚OdšÖI·NÚï„Åé@+¼0“˜7ƒê’ I¯B½¼Å·)ò˜›øÙ,Â|!ŠÙ8¢>¡hFNµ6!×l’^#t ýöÓ7o›Ž;bÔkêF/ƒTÀDô„}„%„*:é„’n™F8k7nb#ˆË¾A‡Ä±oLb)SðazÕŽ64É‹äé&‡yÉÂ}è4åF»’IO»Ö‘i4Â, B{%Ò‡é+6IÛ©þÛk–ƬiýÓפmtZ|*hjZñ"A^«˜G¢SŒ»I€ #óË6ä2£D©Î(ã}¨{äÛKél.Å'|^<úd$ÕsH¯±Â2eqƒNŠ<¥1g[o“Í䨒_ºêÅ=K @d××ÒÏÅ¿Xè8'×Ûáy#9¶¢çÄDFŒ9ìp)†£n~ËÅO»É¯_¢Ê5mUêRm·6̧Dm^ÈÕy&âš^wÇžŽ;ß´EÅ¿t·À–Á¼|ë‰ÀŽ:š½A¢h®îé¢(À‡QޤcË’±·H³K/K/KUÇé’q8eüŒôŽËŽBmI*üŒ¢ûqUd³ÙLf«c¡chSn#CvHª¶ë`Nm;£¬B–}žÒni3ÿéôÞý”.v躗i¤‰×'9I£ÖbX#l“œ'£¸¸Þ¢´­oìnLãÞù´ïÜjÑÓâ¬äË_Ž‹ö菱†—vÈ5.l¹ÄŠ/éñ¯ôŽ'K¶/¼C"ÒoÁNÎp|÷ò«¡kw±Ï%ÍÝ:×I¢ò&/öÅ W¼†P0l–´Â¿ÐlCT¶ä¿*·–yá«ò‚!ÐtÃâ+mH Ù‡ºSúz·í3½ EÔøÕ¨z£}ñì…Râ‡Ö¨wþØ®òé¿ÃÍ‹xé_¡î†ÏVíDÈVæ…3¨y…ðèÙ½Ú¼Ž €н“»%AÝÝÉU о3Ù¡öÅýðRðË)}•ºMD÷-ß/éSÐø€}MÈйsÞ=¡öÅÿðbð3(}»Dëó-ÛOícÐø€yMŽ0ïѾ³Þ]¡öÅûø5dï·Sú*w›‰Öî[±ßÒg¯ñÿ ¹^ѹƠ¯ÿh‰šëj„»ò‰ƒK¢ûÖA¥[Ò¦Dh0^㈀;YS§ Eh1†Ï6Ât׬ËÇ„œÇšuþÅ{Hâœ6#Þ‰ˆ;Ù+¬‹îþ€÷ dM³_´kÁA{dº‹©ŸrWgÈEstÐçè ™­á‡ò*Z €â‰¦90D«x#kNQ&zÀq¦+[{Ðq¯ø7ySkŽ\ô•yckÎàôZv"ÙìÒׯsøÓoòß²äËŸ°ôay£s&Î@˜ßqíÚðcd œø;ÿñvÀ7š>±³Æ¡C‰íù ô_IäÓ}ptÃú? ü“DTí­MíäŒìŒþÓ¢¦JÚ[ui©Çüxj2sŒÔÓ3} ^ JÆC°›0¿¾¼OP9UHT˜¹7ˆ“œX]ˆ®º©ª©MWÒ»¢ŽÑXÏZ'õMkcæùBÿÊîÊ £©*ÙûÛyLJ%Q6ìýðÍ÷’å<ÃåîóÒ5&S‚ÿ[ŠiäèA½éWÐçŒfô­¼B.ºéjÿ}ìjÛqó{i +Vv –GÓKa@>„S„ÁºÆáßÌ.rg Ül„v7—ö %2ÝsŨp”¤¢|ÈŽgÂz®_>ô#ãl‚v®JX&† zNùL?¤ÎöAXDÂÐ%”©0å@wèÖ¨yon Ÿ§V¯c¸à>Ž^: Ñ”]¤?ÅB˜Ix™:‘&9v ÚdnŸW¸I£êçrµhŒo³âX8ŠÜV ¦‡aaRç9ÜaÉA¢O}µõåê§RÍz76‡߀æ3Óf¯CÁ-2:G_÷¼<¨ñ@úÝKVø6 ÖÎímY¦ >[Œéæ£YˆŽÕÖø­RÈ&ÿð­cˆãæôíéžïêÖØ’‹wžwÊ=Çq$æOåw—^ wÈÁ@—PùO†n¼ÃzÂnÁœ³DÜ—¸Fæ9'Ñïé^~m Œ/„ÎL½›“>ñmi<ãwø¦œÃKVýÅã¼òµB!‰Üp޳#¼Vc9NiF g:Â…’‹Ê)Ô5Š?$bH$«0Ʋè¦|Éø+gЀìÅ3*@öò »r¡ÛG¬¤æü‘ ½pæ П=tW/Èp†Ê3\<ÂôçÎ2¹}dJ¾ÏÔÝU î.o €îŠ…—·nyÙ³PîOÉ‚‹G€þ™+À·|aÆå­M¾gö,usÀÀ“•kåægîú÷º„ýë)ÿ¯DQqç›åb…Æ¢DÑÖˆ”sMwW…J»ÈÂ={ûÜHL[€\¿ëØ9jß&ª¯>Œ€@°A\ÿJáí•W1Ò€«+½9¤F2ü­1ÇsÉ´«+ž¾§:Æ’¢‚êSk'†º…K‹³uíh\=x3‰Gé57[ Óú½'iJ‘¡ŽÌމÉÓIÛØ+ÁEÍ•˜íWSž%(Ùjû«ëÊíµ 5¼«Òí¹ù–u•-Ô‹Í9$½ºª" &B‡Ù…­¥N`y$¤Œ|Gäîåm|vR!ÆÖR2ÂGŠºö¢¢’ì¤uËññúç\Þ‰»S›ð»Èf6·O¥¥“Êéu¬èY@gÀ8“¹ý[0i#Ú–m˜Úìö6êͶB:öb²Ž6ý@å/ê u…šD¡xï*ºéZÚÈ TCÕqO©‚Hã;Û稺6 ˆùüÚ.¹´¹¹x³†ø'ÜH.›<µq]Dï¡f‹‹ç¦‰õuMÍ=D5óøÑ(B¸¢4ö›s·E.*c‰#Hu<Þ­¸I,.Tgù•3®ƒÇ§Çv®ƒÓãúi•¶_Oœ¬öYÏ#st˜,1v{œíb§è ô¦½Wë)ôè··†³KO$¨Œôá®Cûæñiên.%õA“¿SŠté·]ç¸[Gp7&¹›RëXó–2݆jç2:L•O¹¹ë”t¹|¢•ÃYˆZÙ° "A'¹LRÝFùÁ¨B' §Š±„2~4F ƒ—eT$ZFÄúâîÌݪJ-86sé´V-%WÍáÝiºkÄM“zhÉ6 iÚZ¯N¨f R?3G·iM&3º³ÓÁÍC´³JÒXzÆÑçþto±8n®X[ò¼<÷.G˜o«ÔØÔA`ª4±0Öì«NaÒüêG…Q¦á!AaÁr)‹ýB,¸‡ÒÌÚ— ‰¤B.ŒÎ:!C%Rú•!¤×Ðd®¦ À!¿ð1ùu¿­)¡ƒš!m©¤£ÞÒT‘‰fZWM£Ímlkê;¨­Ã=~¸§«®ƒ^(0§û{ؤ¨\öz§~»zÙÖÛ¶fÞà´&kmÇûÑ-n;Ï=ðÑ}Ú•8⌠ò¢ £ð÷\a×L„Ê$\ 3´½ñôPV&WtÉ#ó:j!‹æñÞô²c¤/ý+0r³§fOhèÎ!(5vg †D‹¹ŒÌˆ|’¶†½d6ÙŠ_¹`2!-NTA®ŒPSn:á%îŠ:­ƒ6H1hÔE%‹F5Ù¤+£;¹óÜðѤëJ9îFnE¦Ž,¦98‡­º¢âVÔ#À³ßq·éjdØ¡]°¥3; 24€+h^EÛ-ö»¸ ù±3®vBÛ‘Û…PßÞ”ZÕÞê¸U^\ÜÒ$D}\‹^vva¨æSðóòiv>Gp& ÉzußV¬­Ä¾#_ç{"ç±Ì>‚ý*Ôhhz½‹?8º£C¨‹ŽÇMÔÓÏL­Ø@ª¸$|1HK) tÓ ¯¥ Y8ù,¤v‡$—wý^¡!uõvhü¶D`¬ñê>$/'z‚£˜Ï,õX³í¶¯…·mYàíp'ë°w)â:f[^tz5Kû‡`WyÅTó“½E$ÍoÖ1ÈBŽ%¸›ã”å«.žWCýØÉ_v4Œ¤ù¸Û6BW4`û´Ãb­~ Z!jé%ãÞjè¥õŠÉbå´êd1ÚIÁÞ¼£õ²ÉGÊú½º)hõ‹¯¥–÷ut–‡‹©θ1õYeãZå•ʦMÔæNÔ¿˜CANê8:Kî3ËW2˜(O•<—8þh<ÊyÜjÌ8G$´'OãÐ~¥Y×|Oö`ÕHñZö_˜ø+À0öÞ·Þ€—JQ*3ìh¥¨é²“~ ­!9\ÞNJ¯¶é¬'÷fªñR2ž¯î—\Nûqøš¦§46T¢{(ÿ„¨ôÝ«Yj°õAõ{HM§Ä8ìSKL9 òñ!T5\NG’Ê烰jÍÉÎBÌzÿÀÃG’–K±Ë1—<„Õ ™Ì“ñÆ©ɳ5Ç#A›U7ma†E6ú'²Ym ÀÂ$G± §MkŠìšú»Äófþ £]ââÝV;Ç$É~>ƒB¢® Aˆ§¼¯…ŽïÑß`¥¼Ä)LI†›ïuÖm«Ý 1v©0ÉÏm-Ïó P’Ú¹­¸Ñ _Ý/‰ši‰äÏRsŠÓ ˆ£õ‹“mõ‰s}ÈÌ/ŸÉpAÄ¿#˯J‹o¨&ïÿJnˆÛôéØëžÒ+Ð ‰‰jÂFxéÓÛ4D_zm¥1²]xBb4´ƒÆ 59#Š€LÛèR4÷ÉÞ«-9ÊNû±së_úvK°-ÆGÐä­&™txæTÜo”ã&êÁæb2NþùG©6n¨<Oó&ÚWªÄÞ ÷¹/¡ÌÓ¦ÐÉ-}xoI± ¼w…!±Ð¿u”ø¶±ðè…{ÒeÂi~ÿó ¸qx"«#:Ù]LR•T§$6ˆçÚÚ§äúªä}M!¦õñÏá,ŽùŽÏÇ»ÚøkK øÍgª£Ë¸4§õ»ˆÕYŠkÌäHªGíñ$÷B¶íSÖnèág ÎQ9ŒB¶! Ù÷Ý9ÌéK w)75¶_šK¯ ”ž¢ ÏŒp7F–Œ\ÊéâåT¦Yåª[yåIõÔ•¡Ÿ{†ú„ LL>ð!>fsB—‹µ±ºYíXÑÏmP}$lø"-ýØÍ*¾:…â(Ù þ‹×î‹çdœ¥›mö;•ðåÎY# Wõ3’ëú´<‚ª¯Tö_è³S¹‚;à]5nº³Ø¼´\kú"''s²ïFEL¦ö¬š»¼Y„YU•]ºé44\Íà̸ ÊÌØH&y©Ì"•§¬$ÒUEP%éšaªU-×ÜÖY¸Ìãõ\êéC™þ”;ÿñÆ„€jrêõVmVÎðÒÏAÑò'Mm® Á}Þ.;P=`íšó’‚ ‰%ŒþèvŒÁ—Í‘‰:`Õ>ñ¢-Ñe-°ú?å3ˆúl¤Õ)¯…++iEÒùDZJâqfR=ÓÞïje§•C£0d¥rËhÉ}#¯¸Á¯$¡ùa|ÒX\R{§Ì[ K+Í\øY­\@®«ÕnÿØXá±–> ÍÜ™ž²:Lzü%xʹþ˜. ÖŒfY\¡o¬ôçqÒ"ŸIÉurÙ{BÙƒÜxÕóé¸ïû°%Í´zßÉím‹·¸ñË•UœÏ0lr‡{¥,rzs™,Ž óS  LÁ¬œ‚…ý9Óã]5Ýç§àz‘˜ .G>Ÿ1;ñ9s~|Ö 1ZZRñ5Nœ›%’@R¦ ƒdxi‰+â\mÉÀmQ·‚¢’'¹0õ9h³­öªëAД`æÂ`äŠ$–žR~ÿ~/zõe4hs¬5q3Z3R3ÆœæÂ<?SM¶þ¯¤ÚdêKtxëÍçzÚûIUëñÙé¼5O¥ç™ƒ¤Ï¢{1ÏóïC1­ßK Óª¥ì}±µïñ{È:â8B©‘›ÐˆÕ÷º¼÷‚‘‚©~wÎ>0¬-ŽŸ@Aé<Õ{ Ñ‘q8Í×vdÀ.ªK9]ðoz+„´°¶Ýå5ðᙋ?Œ…VÍ_c¡€ÚÏ6Æ}Ý îñøÞÀ+ €ø,zÞ¹×¾-}žÍÇÉÊìRãõ°*ãÄÊê<ÃÖ]Û³7ü"Vo›ÎtríMY•¯r“z½À𸂆__Î2=:á:Wº7:üv‡¿xšâ/¢Å›ûÜ•€Z³nb.4%7S9™C†®ÊIª3‡OÃ*ÌEƒØköžÙ6·68bÂj½a#Ë‘¶(qL”u±ÊÈ}ËÃãûäO§ç­SÓÛŠrºmcYzR~”zާ ÇÆÜz{ÈfÆ’…dW·¼„ytH4nðçl•˜ ~M0þù‚5˜Hè¶¢íÞìwZ†2("ñ^CDz ާ©ëì ºslRümÕf}6“ÕôúYx‰sií€ÇKœÍÀÖíëÈ|¶K¤;,¯øHV”âyŒtçH’8eï¤þ•=8ŽÁ#²ïfÚ9Å|ÿŠ4/ƒ7q\X9O×ä¬isÂÈqf˜aªŠ™h O&eéîû"¼Û¦xkš6'Y1-ù´9äv>Ô"½`X/þcÍ^tŽKÌTžÍQÎÒˆÛ(µô'—æXí7zPWÕú®¬Sr=?鵤ü‡íYGl5l8Ï’ÓÙ M‚+)ÿ‚B¦D£µüŽJ#뚆NcC¼òDš¡lÒ¼â~"ÖŸÄÈ㤇¶‹«¹÷îÚ<ƒÅ9_†µý£Ã’sº‚EJ“›ýB“?·(»'Õ?3c×X| ø¼#<œÐ†pÍ3ÅyhBð®îFK °Ðl¦‘&R»Ó.ÈŸPÁMS{ý®ÍÉ~ïñ9èY“©îƒ¼|³p:ÜÏd6}"ÝÆ"›P:’U«Æ/Šå~[DðÏI&15Ûm_;™_Á#gzjØ÷uŒÖÆÇ|ÈV*Ÿcsš£\j{VÖ´b*h\XºÌßT*¯:¼[ŒÁ=»m"Zë¨(¹h1“j¦c´)ÔWc{F#Ä+´-â2>BÞÄ'AîϘÉ™¡å"B#å#Óbý¸¨cV¥Î·Yn¾ž½Ü—\ã‡R̬-´ßK!U‡„õ, ADÉŠC‹6î:ÂMÈ2s!ÅÚæò}ƒb( gPÀ„“bº^ –mˆêe” HqÊg'«1,JX:ɯÛ)A–Äå¨0‘ŽÂÿ A ‘näŸ?nœz¦Á`,/´·–ÛÆ¹F}¼¶à]A«¨Üe|›G½Ê¦oq¡0!’ìoR|…†€ƒ "BwêbP{©œmx‹b|‹o‘Ö ²™Ö 2¨Ú¹Yæï±‰×æ}ÊÑv*ks©mwùÜ âÒË üú3Äil[øf–_þ¦vóéH›ã)c›ä¦¾?Ææ²_ÂP¿ò ›Ÿò›ÿÄ`+8í/ÈÛ×wZ›^m8›­~,CçþUƒÊm4NØÒ`Ý{:«|C}äX ëbLŒÉ¬è§N}F x“ÏèL4ºÊSr’Òb"ѹJÖ»Û6ãËv8w>â4Ûëhp>EÂŒÅZ/krŸ{f?ôR•_Ø8¸÷eßËî—CÏÖë=Šž% Á°¬3­³ ?CgFgBgI|&cҫЯðQaøYxN€!s'zHÂ6 N‹ ¶ó Q¡Q¡YÊгPC†NžKxlKlLf:#A…ÝŽ4oÁ¼X÷*Þ²‹¨k‰þé._ð_ß_À³ Ë@€€ÀÃ< ùïÎMM,Âê¾Òt[Aï)C¥Ì¤“KïkaPW›²˜†&Ä(i:ÒÏu%ʺ ‹ÑåWâ£ÖV>÷Fyb—~x4<³r”œ˜‡¦w;~¸ôÜ-uìä¼µõNR$y'™õ2êö'Côg_˜áp¾bï³xF޾³cñ kŠZ2>ã{ÓôoS±sOÏŒÓ|¤&FP‡¬­S ?(M!v'n Yʲ#ˆÎÅ£‡½ðÝ$,vº:óó7’ñp´*3'_>\ôRJ²"ê+2ôÕ¤éðìïIcb¾ÖjÉE—»¾"—êœ}eD’[:í!e0j…‚ Å Ókå`­Eo7yjÙ%“‹R^°Ì‚HNñuð«·Ž½F.SJ?W,WL )ªip[ÄTÙÌ>Óøá÷–ŸÂìév r-`c)¤t³)ЬWb"h°ªgîÈ>“õ:ï¥H ½˜aÛèPd dµŠÒ†ÂÞ¢Ù®Oyâó’ŽY$êpD{åY‹ÕΙäÖhµØëbî9qj;Ê-N•’Œ[‹Î禚ª ðp~/ygFO]‘’H·¡Jº™OöBrj¬J­ôKf]#ݘ}¢ˆcüµŒc^ˆ¦°Ž‰†$³• ÛRêäÒ'D6ßéâ˜hÄÖ¢­kµášf×að+}Á¯ïégŽÓÒD¾c1²‘Ia”ƒéÞðcÂÂù˜rçÐíAºÖí^dŠ Ñ øoD°ëU×í?-¯“ƒÄDâ}¿V-¢m¹ìVkOL° ȱÌ"ÌŽm†^ðó~kÞ`¡pÚ¹¦±;H/Þïo“c+”jÜ£h vD˜ª¤Z7#:±&:£’¿B¥êü-×–Ƥ®dtNï{!ŽËè<’C´¾ªµÛRôÒ·Z'¿+ÿ©F›¬£òJS¯œªýYl¿Wžz´2P¬;}ŽMõfR¥±¸zM_žJåa0V/Œ¥µ¯éÊxgòuéÇ‚“–û\¼ô†]¼ÔFkÓ‹ÕÖðXÊ÷×ä%Ï'vê\÷ÕÂÜ®x>Ån}ÆšwÕOãdð'B¿ >êãóQùŒÁäÏH„u{”Æé£õÙ¼mîÿÂÿ̯ îì"­1@•I­„Ž.P,¹}Œö3¢Y ª?­¬ÆT=E9(;di X+Âz=¬èçןÕ!}oÛìü–ÑgÁ–Që!—Pg¡ìà¡aöüŽí»ïÄ\ì¿ Ü)Ð\áŒéÏUù¾œÜÛz!ÆÒ}½ "3$ÈgÀ:á=jÁœÉž6'8œ àƒ0õÆæîÏîôFçî`Uäƒ:rØÆ깄`àrâÊ ;l£gùËjn#dŸxlãëû ŸŠnƒé0œ˜n£òƒënÒŽ²xc4vŒ©_r­q4θã_!ýÚ-UG3š{ƒ€@=vd[JJå¿=“²³¡ógõ]”m”µU‘}ä……³E©m, 5¤eÆÑKTÒ²¤–Ï‚ièaZ>®W#.6ãøFè_µ;„0úŒâ¤i=_;«ºëÀñõkm»Ú’Kí;Èl9¨2wɺ»½…öÓô&èá,;–Ã'Ö!A=Œp—ïJ³")< »¤²ðÑaˆÐv@ e EZ…`è=î„@½èê!#Áì¾3B¯{£¡6‰‡1¡„Mm›ä*5gSöÅD½YÉc÷EM|“¨~ᔊ$n =$=Êr¢®ò‰Lð2:T©ú®ªqúp1† :*Ø ›ƒ3 Žƒì€;SÝØQ’÷¬;·2‡åÜ´+¯UºuÕzmÔk "é0¶:m¤çõU;k86ìi:Å€AµüD8G۩륭-Äê†U]jŽ´ Åi¤tX‹êA¤"c|‡W³iÕ»c\ªtÎI­è* €Lg¨:+…hsÄ)î@}¶tMA†ÚK±Åb7ïðàÈnâ¤ÊàFsBlucŒd¶i{yc¨Ú[3³/óô?#F3:ˆ®ÑrÉ 0EÀm]‡cb2 ^°Ã› N¸VX¶Icç\MÓ2îYÇ7ogbS>¯§,0ÞÜæÅ`ÚÉ©$-öΞéÓ!*Ѧ †Ø„8·ñTc–cmôúÆbÌsG–‘'·­~Ù¢¶¶žøÀÁe:âØ]s(zƒI½hHÀÖ:êm³5øVÂ:8$‰·!>AÉK™‘üì2Jð!&%«[./*™KFø”Ê,¹d-߀#ck³®ld”ïˢ̈́A± Òî]KÂ{[m¦Y$ï뜵m”DE¾š¶=† Öê°éÊ"=–ö[5ƒ(”L"È%ĘtÆóÒ[îôûJææ4|æ8 ™Ü< ªÊäƒ4F„³L Øæ Yàlà~õ„ÀàÃä€w½M.8·H× DãvÈUˆKºW¶úf^#¨h'M„>FÃìbÓ®ú7êŠç|vß:öŸÞ¤ ßp4¯Ÿ Œ3]Që©müL+¸hó­=wø«CÞtI´8v2I’6?nÇ™Ìj¹àŠëU;låò¹í‰Ú¯Øß'í ‹t b–å¿û‘›q±,÷0 Æ\Ч ÇpÑ é$­H²/wŸ 1`½µã[yq{÷§5y3 _â=ã.ÿq‡Ð·Àÿ­ß_°‘?$·ð#6n"kî-½?«£ÿKh?œ¨¢)5¹ª &:»0â“a™õT‘•©Æm𳚙\Š¢qO§½5–¬‘ŒãC~~_Ð ?a$/Âo8Íj“ÜB̃豻Ug:1¯0N½Õ3aØpÝ–Â5/>½j ûþD¾Zâ†#"^×¼3‹¨ãu÷š$ ßT¾³Ü­›¸sZÄÖ ½Ô›=°Õ/j®Êv¡;aE4z Ââ”"ºFjJ«¹ç{Ê@¯m¼»t HF®”·çxo7 ¯g·lž‰¦$éUÁ¶R“mxq¯Nþ22Þá˜w⣠€ì‘TWxžw®3Ľ=¾6j1 Óµy­°„Ó&Þ=ö¬Ï…“8ö8¼† wz »¦t²Óôƒ ŸúR…|aÍjðVsUhµ›áµ²&óú’ľòå®>Ù˜Ým§46+щ À R£D@ð"ÉrïÕÈ(R‚À•c¡¦»œùqÿ¾£ÜVÅç3¶9¬ŠugÚ.mr­çètë¼t÷׎ìŠ\Ú³r\‡å Ž®Ç·à‹à¿¶´?Ÿ{c8ð©ä±U~´´À àlçø›kB\ÿsMÈtåàê ª1ë¯wƒ´Þ$ªX =ƒb˜‰XŸ ˆ¼i6úÏ="š{–fXLÌ0&äIä_¶È6ów¯)Mó)Àé‘AaUýXë¯ÚdM L Œ@@Å0Å Ì 0Ÿfaô‚Y# <ØGükXØÇ‚-þg¼u76µ¿4­jㄦŠîÃ0GöÚ9Ò”¸[*2ÇV2M@´ L•Šj* W›¾d•½1g‡b϶¼°9¬ðóóÆÏœo¢äø/ Íæãp|üÖˆŽ /úîü2«ðöÀÚ Í‡ÌGœ†?le~Z¶»s…oÓò~oô4âíq|D²*‚XZ‰F¨zʾÙ7š*ÞÁo•k|fלȢ,­¬ÆÝVÍOÞs‰t[@”­!š…¦|ÀÉ×îÆn]Ÿe):¨ˆè¤‰0Ä7‚\“Íî²V îK«ŒˆˆxCC‡Q '.ªÚÍ„a'ʼF³d¶å6{ªkÖi˜³–çg«nRj‘x5P°¯1•®\ Ñ%J¯^Cà¾îGG·À|EYå:5دTk¤Q[]Y x#ð>Y|S·[Ï£šf(½Œ”L1t 9dq3Í™ŠLÑJ¸>×&V.L³9RœTukéstrš€;a?ÙIçŽÙw åÛ`cTcçõ™ÓYÅ9V¸€¯(¿¿œFËtf*)û–w àÝ‘|;îÙŸðÀ»/‰ø°€P6¹Ò’t!%wEð|”¥ú:&) ¯×³gOf™©„XV»œ^bqëS~HMfr(ž¤òŒgÈEåÒíëJ¾Œ§·¿ö§‘ªÍpÐ ‰È9ñÊ{kSa C ïhjhóǽKj»Nxêw%nê´e31«b>}°E ÃóI’x“¬ìÑhXþhÂñ!óOD­öçÕH¤…b'ÄqµÍËe€9sÖgßG$Ìì%C½AnanaøÐ†ÜÔO¤w,œG>lÝ ¯ez4\Ü}ÿÊçgìÞDÀžä¡±b8%¥îáJ‡dÅ³Ž°Žˆ.S½öžB=U“@uZl´Ê­·iø© í“{°iÙÉ”wFèkžæîÒ­Ýu²QÑÚ<ͶŸÑB)[:;ݽGºÖ.Zü‰R8;fI/ˆ‘ø™ŒÁù ’úå¸2û¸iá!!3&.ñ7äjW‹ªu©ž%Ñ äÒ ÆÃÍgìÊQìÒ™l’Ngšvä ÊÈ$ÄúñÖâ'µ¢jÙ¦ÜY%ÅL)¨K_wTߦÐÉêÏÖ¦g(ŽÆõaÐlDnänS‡ ê‘Ϭ¥Þ\@Ž8|X rnØÃ˜«(e3ÿÞ\§‡ åX Æ›ð\W³àÙH)Vzº´“–E'¼8#Zêpº€;E”?÷ wGÁ!.aìàÙyò¥¼— ½ð3Ô^Uè·ÎåÉ+€iå†ëú2÷ )ËDˆÓ(q/éŠnÓ—îjYfæN¶~lJýÄ7ÐJ´}’úïÑg}㿇R°4ÈxH Ž Ë'€¡|n»w=þ¯@ÆÖÝ·é!­%©9[W§·ëQ–®ã¤fA +¥1ÝW…F‘ 3aCÙ%Ê6ÈM@¾7¢ñ€êZGÜ LŠcxkå‘ÕÍÇ›Aˆi÷&§h!£xF?°×¢ã°ìÏü™àGNöÈF2׿4?¾x’eEO·* ùÝ‹L!õÞê œp™‚Í ¼ïûl7Ê;gò (ŸÐ:ºBjHá›y÷¢x¼óÊ5È·'kX,VÁÅ=Ÿêd…¤Õ?8{4àåWÖ}$ÈÕp¶Í; ƃÛ[™ËàFëãÕÈÕª¿ñÈ§ŠØ>:H3P˜ù¦”ÿÙK<ÙÒÝ!mpTwbbλÏʾ>1C¨}-æYmò˜.?¯JÀŠ£^å•Ë$Šeèõh¬b”¢vÔÄ;Ä5V¥‡·ëÈgA Ž\\õôì‘‹³ ßé·* r‰ýR 4‚ò—õ[y8ªDsüÂrz¢a> j{üÂsDb_„¿ë[fÚÉÉ[V,\ •,l—ż£[I½Æ²TÇÃÇuÞŒ™†àì¬È€#v±NîÐõC4ûfõœ au_igÆ2¨n 0÷2ÓrÔ F½bžd)Tä[9vísåO!Y Wƒ—>bb5ˆ˜DÖKÄæ­sCä´K?ˆˆ”(©='/%¶?*¡Œ ~nmGÚô…!,ðÝ"X4é˜w{Ö}ÛûÙk»ÊæÕMH›6Å› UÕ9í0VSÕôÊ)îÆwœ+ÚŠËÂêÈÒƒ†áÒjË¢¡%°öâ ½|ü†Ë³%¤Ìüs®ÐŸèJŒï(·8ŽÂfm9Å^#.?§¬|Ó€OxÉß¶)!<›¯Sô†Hj©mÙ>‹OÃoK=ö‚.Þ‡á š ©g›-)FS̶I6‘—¾N\AæGDyL–[Q.^…X1Я/µmìO¼RÌ­sQ¿ª¶“/øâÉ—Wóc2qÉq¯êqÌÎÍíB^6¸D À5ŽÇ÷ÜOï•uÕ¥Dµo`»c®°~‰zͪŠÑ·%´&õåõ)m ¯ÓùSþt3<ØãBVwãS2"w<‡ZζZh“FÑî)ØS3ç»í³µC;è Ãø,n#ÄË<‚÷ÆöêjéËHŠÁ…88ÉÛ\üƒŒ{áûþ7$įBçU¨’½ …žaiÏ+â¥HÓï³2å]¥¼½ BIÝPJJ>ÌA»ýŒl<nn*Ôwæ*¬—ׇ !||Js!W=>â¹w úµôsÚÖ ±Ü|c5ó=˜È/:.²…où÷eñ3‰æÚÞ4¡n$ÍáYèY¦~È1³ ZsY`×Â)^« (TµÐÐì‡.iGvÙ¿ˆþ)üÚÝ›Ïý¬ö}>ûQôkN¡¡«>˜Ëú¸æ˜2Ö`T¦]Î+ÿÃùöøCÏÔœ‹ ­°¾H¡ž¥¾ ]r1ñ)lÞÔ“KÂ^q7¶òp~on@ÄìÿVÞ—ã[پѤµäoí?Pk—Kë*ùLðH6°ó¾SÚ;ccî°aÍÏGE_n«•‡3‚ÓRFkLƒ)‚– šñR‰µ<\e®{X¬˜"´ÚܘOÚ¶Üî°)*\Ñ`ñ¼.¯E7¢)¼<QlAÙiÌ>÷{R© Ñ –ÞÙW[êþEµ¹§Iò<]N7{˹z/ŽŸ†} l]p$ÜÂÛªÓ¢@¼{JBð˜žj „þ±{$úz# ª­Ž§Š~K;ˆ¢Õ‘¯£d=–ôÛ¨"‰Ä&?º:ÐUȪòœL;m°+µŒñöÉÌ8–Þ•@\ue1ߊVËÇ Æ>Jâ” ` «MouvËsæ#‡¾ßÏPÛ ½w{@âé·Û¼†*gÄI.â:ðµ#5Ž„Rš.R†0É^šMó'iÁxe ñ¯)ó çHh˜íF…}’ˆP ç93†|ïs&`ÕKX“ Ë…â:Ù­â¢- Ob¼n¬¦[Ô€m£õGWÓEÈ/QsÊQ3v[–#Ä£ºÄPK !I]MÔ¿+­²´Ë1¢Uz®   ùÝeDÕ76Жѳ#0D‡q̧¥%s,›xF ¨%k\$q2‰–#'×ÂÑBžÞ» ‹X¸¶øö´†eæUI~ÂMré%¥†OÞ~ÆÃ³u«è3âÓ3Œ'±$[°OE•Ì™ZÙò.t­cM¦ß„kü²‚ãOûŽw?3ÐDµ€døk“3•®¸—¥n†6ËY}Η½r¥cÙYÞp}#ÁVšF"ƒƒi#Z¬L*1á¤ÿ›aàÏš!—l ^Á³]KŸš^¿·Hò- úÄsçÏ6zuÁ†ó–IÜÁ;dzE¢ [4áÃiP}ûJãå‡ii%t[“4‹’S¬ˆN]4;µ•LBd«Ò8ú†éqÌÄ«V8Ë"¯³¯çµ;=H6 ±êWíimZ#²âMßOšh£O¨Há¼è&x2•ùÍ9ƒþíÂT%ë« §‚wãÚµ¹ I ™Ø.’äòg.y»µzùIêg¼!Y´ÔžÑ$ $¬0ÓίÞÅSÄ3l¾°BÖö£ƒ«J¢ÛDcäš*r4™l+¡ëѸ€¾mö:SÕ4gYÖ¼ªGôK:ËŠHnÉçSk–ÀØR)buEµ…!öDšx‡Gx~{ÄdÇÎ#ßæãLf/óºªà-ç› ª8û¡•^öfS;GçÑ25Ô7Kô -~Š rœ} dß¾‡$¬d¶Ẋء Ö^ž@#Ô¿–¬=û0|àt‚MŽ­ AZT¹Vg§}ðÙ?aŒ_Ëõ;;ƒC€P³iWëÌVÈQ†S¡±7tÆ?&NgQÜi|•A+5kä3Î'A+¬„J¼®öFïé–ßaãoAA{ØZT ~Æ(í=ž„äôÉ3`•å'€Yl ‰t!Z[zÏ ËoÔµbt¦îLöæz;Rmî‰sc’Ûè× ñÙ›ëXf}u.5¢D˜Ï–äÂ[tISe+ºó®_†^I{mS”½õq@N…«—AÌ=®Ÿ=Ö]AiÑ]N¸¼†;)»¸Z¨·Ú3ç‚Äé¿´µ½ ê[¢ùÅJÇ0^¬Àž ÕÇ?š!•8´ïÐaÓo’!y²>ý[ÛÊÁ%›+[¨jÑeŒ ½ÿ‚ªÆ!ŠÆÍƒ¥Xã5¶ Á?"kþ>rÌŽ/ý±Ðñ²]®C9ä.R©N£›·Ù?9èhÊ‘‘>£ Äše…7•–R\£õë A#j eޑކÞ`^¼Ið5;_;ýJÐFQŽR_®àf¯@õ÷Éœ´|q„âÏOL å} Ì”1˜ÊCŸ%xµ¾êöû4Ö¦E¼ôœZÒX„#„%8ñI£"ÈŒ+K:§Åû¨Ì§oÁ@ʇ֧CqC“)!KºäM*%R`6Ë©®•… öþ…,T†»Èf0«žóEÉ7ß×pZK¦˜Ñju\sBi\y¬"sjÍÂrnšVŸ% {ÚiÑl¾Hmø"ˆ@n|%Šç̇Nñ´'GçCTõ'{<ÓΈQñ±·ï„LD®M`¿!¤´ëî}ÓéÅìè‡û¥!<=îûÕ›1©åÄé!ÔË)Ö–¯þ¢*HÑC”9pºJþxÝËš;Š::þ÷5f´ª¾2p”ºÓEí¥Ð•šeWzI?…ZYM}‹EÅT¢‹( "Õ=N®)d1ûÙ,°†û…#7wËÎEîD´þ—@ÿ Ö¨åì5®&IC©t€ÙpÃÖÈ!pnʵe{ëq;³ Bqä³aFÚk“ʰ‚«Ío¯@¼b ›%Ñ+•’lO¤AÉD»BQVG¢ÑF"í›uò|©i0Š®n®Šd%&h„¬Xê"Ø»3-È Uv…LÑ€} ›âmw¢Y>2»0¼³ù×1Š Ý ,LGx°Ž§Ú–3:®ÉƒRŸàFƒ·5L™²†ñRÙ:váùÒx…žš-jH™G7Ô¨Q‰}ÙÛû|Ѱ8TÃÅ[f~r…f8àðN®@«‚Ĭ¢pn3F­þe¯mj“Ù;£ùüÉÜÝÄýñÉY‡Ñe:óèÍ1®L¿¤zcìÞ6Q}Ž[%ZCtŠyáµ)¥;•º®æ`áäþ-ì—8{Ø7­ ¼vËßæ®>†lôÖ¤"ך,Š‹~d·ö™rÁQÝ+_g>µÆÄ7#K-;#ŠÕ.E§ƒbœˆ–¡8`v>e:©Yb”Ìl…©ð•;7­T‹z!©‰±H~Í2G«ÈnáÀYü»/®9Zuº 4Xâ#º¯‰£zÝýÊLš#Ï·aØ¿ââQŠÏ.>­æ.B5€›ð^ e^j¯BzÖ÷EÕEÈå¹êûê÷ñóLiy'S×I¼úŽi/ö¹šÍ'P_\n&ÊvWJÌÐà®–vìäµ1%Zœ«ØËm» JY&Nó‹,ƒ9‡“¿XŅqà «›ï¯d4Ķ¡¤×y_6“–Ý.ò:üEœ"ÏE‡!XŽ®O nªFÓ3ek;§|òô7‡Bñ„”Ü.#oBÂÏ&Q¾3ï ‰ŸqHúî†Ý²;X23tyõžò½ VBoH˜>yªöm,qæ†Æ3^Â÷-|XÇ‘o]Y®7P5¨„ª%ÉиD>‰,#G#óRà’_eZ¼Ú~ËË3•8 Õ˜t~ôº È{Ç\6Î{ZözÜ- õ8_<ͱ#YG6î@Z¹ñÅNfòvÿ«Â+øŽãí7”õ·”;̼RÕþK ÁAPr²P5I»¬šPà‚V…Ûôˆ]Þ‰DìÅÝxÛÚ·ìO¿eÞ½g½›¤õ;—¸Y]!S‘k³…äíÜb{–Nn,ˆ:| #~h˜ I*oW| RF`""¯®2Òë5\3¾­*ÖLÛÖ{°E|±Ï~º¯zô’ìÜ¡e£`Dï|×·Ù^ߦñÀsÁÿYDi¡¯ï"«ÞæªW¬w÷ºhÝÀ› ;Ê…À€s^¼zÿ×nÅîØ,}Ø¥Ë@‚€ýÚ­¸8¬eMœ ÍMÅ íÏ^¥&AÛjR¹çÎÜ)¶È–q×uF¯x~ßV㢠FõH½]ˆx[:0™&©v6»éŒr~‘Ó%é80°-½¹>xÈon–ry¹»€âføúå³A¶Í*®kqÚY•™ÁŒ‹µI2뢉ÒÇÃ6œyùØfŽL9qÿÓÊ1Îo—‹u²“ÃTøùHØy¶vY‚>èñ"¸'‰9ô‰þXO2>°wî/e©#œKµ½Þ‚_”È—§‘¤…òúšÜN‚t§yÔr‹¤&#øVr6Úø ó{¼µžbÕôe¶fù3óö.rÄ::ëÜa~¢ÎUV6g:뜾òmñž@ü'îÏÜ?&tát añ†°9r­;º+ Ôñ»a ÞÙˆ4ËjÏ€ÀIãJ:©ÛQñ}³€œY}¹B9ÞÞýZ±Ö¬ºª„¾­<þ•eàð$ì•^A«GeT±‘/ä5ÌzÆd°lÍb‰¯ÐÐ-ØN'5c&º‘—ö퓹WW^hTæ³mj° •çÖ¢¥Þ^˜ºèÛP9šýˆÚBºÃt-dGOVàæjK2:ukÈG,q…&(ƒ¥\?M°–N+³¢ ÕËÔ˜Miå}‡ ïsŸ[bQb°@ÛÎR¤Å\þUYÍb>|Ž?EÈ¿W%S3kSã OªÀÇ?&JêÞh=·˜UZeíI("íÈOÉ{+£ád-¬ £2hâ‚­¸•*“Ôj ‹UÕhÛ>ŒW|:k±ðŒÏ;Я®Då(PÏÎßy±,Yv&sè»Ð¢YÒ=¯õ6ïêû™ùfÆr³‡÷ñ2Ò ølŒ¯d 9 }â» sRR£(ù\}ŽŽ:§qk&BB´'¨¬èõ‹6|«3äè†Ge¨°¥+dÔÜ}G`(ŒëÒŒñGFÍ"B uNíÉ'5Ï9G°õ áÊ>'¨K¹cè µêuöYáèQ®Xæqz|{~™²±Ž˜þ2žcUu)ªŽu¥ÄýuPS¡ûÛ ˜¥n{­®¦†•&²ˆ3׃U/‘fõ®k‘fý.ho….·Èzñ®|Þ0|Þ) ±ö'Šr|ûz¸.!(³ÖוSÌR ëåýù9Yãy’°qb>–aº²ºêpåˆ8JùÐÅ?;³ö±NöSîkß–8S¸«¸hi¿ )jBkÕ-d|‹I¶¶?´Yõ‘´T¡‡ô€¾ÎG6–í¬†|Ò¢¨S0vÒ—&3ª8‰‘9²Z7älOdº7ó©ªl;³¦ÂùN#3µU/qÈJ,õ©õzvñ9\ýPR²¦)l•hzzƒYÂþö±5ËþÙ©úÕì¹ÚÜ÷©ø¢–Ü}mNBˆ7Ñ><’²¢ê–•`¥pÓÔÓ ÝÜyVªH…݉™ôØi Ùw•«µ*1ï¤Z°*ÂWÝK*Ã2˜8ÐLd ÌëÌOü㭺ǴM¼¡0pª û뉞 ö]Ð&2Å:1‡s…Œ \€µP­I»Kˆ!p0§';€ê'1…qfœÅs6 ïØjâG•}Îõ‹öþ®"2¤9ÚÍf,@»1ñU…LFEwæÌmó¶¶ÙÌ„30jk»SÝ”'ªìØ¢…a ¯žjÊveý5Xi£ K)¹TÑqZx£eˆ]ß;ÒÚóBfoõçG/pøÛLo``5ª&w¾çˈM™Þ`ó×7²÷_Pû|²Âim·Ã!D+ïs%kαêË@Ç©ƒ¬oŒô-n¾Êðúú!øÔYÀÂ1' Û°sÛðFï#b}\{aÁF/â;¤7 Pº¦n–:9ƒ'5ã1›™2rÊ4$s<Šnrká»Ô1VÜY™£•€þÞ ÒÛ®#óœÛŽ#õV¦›Œ"„;ôrâ|Y‘ˆ|žó:§¸•ùOírwrY 7Š_Ö9„¼_RSr•‚ µu×zZõñ5)8^„n)=h A…ìŠJDþX®Ëó™ \Åž‹SWu ¡¢øÒ÷Ɔ-Ü&ÉÅ%Zçõòx_¨;h ¨¯FŸ„àÂÙÙDš¸>w÷1Á±}{ò¡¶_³¦–º,3j32$^¾¨› †n¹ã•†àÑ KµhŸ™c&¤ùj‘¨ ö²íXÕ1eW Åíû±ðg•j»ê‘L%YbÂŽˆïºs™ žPQÓØ¢D²ÂÔÏ~86œslÌz¾å¢;6Šùî»tå_©†­¼­¨‡€ìzé 7aj}ƉjF:·„vÓºE-§ßë\m‚ˆ“÷c2ã*¯UxßäM憷*#mY‡£ª¦¨ ªS£o/Án_Â{í¯o.ÄeÚevD‚iÎÞ·»ÅÖ¤IÉ77•"MøæZ”ª·©XâRü¡9ƒ]‘êÀ›6bÁ#™ü<=mŒ²ÈÚI£lu¶6wÈ…,+›²ÌWª?xtîM†J¡ÁkI·Î»ÔÝû=­ýC Ò¾ŸyG‰ÐWì®U9Õsî…5£%ë;fïs ‹åŒ½H&=c†X廘,&ˆX¼âdéw¥Ø“„'³ÊÃ3÷¯ô»ƒ]—ζßg´* ÆR²Ji´ñe‹ iò8yV4aÎýï¼o„d¼¯Õê%1ž‘ï飔¶¹àRè?Ÿöý`Øúì`Ød‘à1ލ{@ã!¡ÊÚÍ­«Ú‹ÁÚSPAc­ŸÅT=šõZ§vmÐñ}à^Y¶ïÌÉR´mßæ»%·vu±F–ލCžG·¦ƒ¤#ȉ¾KèE¦…ÎSóχÖHu‡…Y)ZÄ2w[ÇP×|d]•‡Ù…6¹pjŒjëo°f†’ˆ::„×.x°sªÍžøçùÊÖW½¨QÕaŠüÜ0 W¥ì>ô©º¾´‡Àùù)ä§HÄQØqðGçˆÅ³1 äU2UA/oÜâúAgõrÚ’ÏïhØÇS]FŽú åGYZ'vçûÀè>ó" Êûío£’p42,½È¬’cŠØSd(O…O·5^¦ÜÛù*ždZÌá©—›$ÝGúD—¨»Åí‰:¥ùq"äv@Û:ÍìjkH¯!Z{LDI¦×è"ÀG*xûÍÚ8è2\7X­H¹'@ÆU …]ææÝv3‘.˜çbiF¦åvæ–b8aåä'SŠâ‘ôaÞyÒÄPÞ.‘xÁsºLOÛ' ·†p€ªúoø8Fõ˜^åˆ3†É\ÓåçãrA¨Â]ß¿-JRvøºÕSñ¯6bEK&ûš“ì|ãç;»ÈŠ“ðü>"C–ÚJ‡þ½ µ³¬5™êô‚æêœl؈<ÙJ¶±ß6©"™l`V<×trŽùJ¢> \§1ʇAï#H2ãš§Ò¨RSã‚4(:øÄè@€üé ñÇ7d}Á¿eEUé%åÄoûA@î“€“ŽÉÜìÌŸª€Î*úŸ0yþ´N*+(')&ª¬Â +öçÌÇT~Éâß~dÎúÓ—ùs …âÂü’BôÞûùs*¥©àIåú‹ÏôwÙ!ÿ’ðí¯ ­ mÍÿ6[Ô_ROþv§ÐŸÒ+ÿmî`uõþÜ‚ì¿ú=>ÇU#ç Pf|¨‡Z¶Ä¿ÁÿžúݽhXn©3é¿RÕ †@ãúµÑ÷IP^hÀAÅÅ—û'ðïÅý±„Ë$ÐÚt |’}8å+ü6¼íÿLë~Q÷!Ó7Šì…G”–ðæ¼â#!smM~Ïz“Ö7Jd%ƒ>,µ£ò#,!GCc+Sge33€ûï©_¹±=ØÒ-ý±üž:¥òUØÂ`üH/XåZ€®‘ ¿à¤ÔÃÙÙØÛ9‡{#û=›²äeþóß=[E󶈩™©££©É?¡¨Ó~„ËDÿK;‘j?†¸þžÕÃÓ) diƒ>Ë tcÙým}ÐßúQpðŸ—ÿÝ·u#zØÚŒÿ©ÜC>êBHÀ2;ƒÿ îwO®Õ„,jcïü»üAÓiưÐüì! Üè1šƒË­+UdP Íô!-Íøš˜¡µÓ#Š™Â° $9€?´ž9“ÇhÖvÀáÉÖ\Á`û›Áéu™ §h9°?ÜS¡Í£>Úÿæ?³ïõŠ© ö°µ~(îh tU, a¦ä›uø™º`ûá6›fþM ´úѶKÏ‹øÐ½·{,ibjë 0ünýÌh«•_Êjþп‰v~ ùÓçû=/ÉÈS{Ø@E®ðd€óxe¶§Ø~ôµÀê‘û?ÿ¦&gevÈ€D—¿X8¹çcÔŸŽú?Yø¾Tà”Ô+î¿ZQ‚÷#dY€­‹ÓïiãºÑ¢@Ê_úI<ŸÇhvŒgF±E/~ŒµX`]ÏtßÇX.ÖbÑÛ$“\`åaC?lgÿG`r?Ül€ë#ý…m€qQ PºÚ¿”2ø1 Ý#ÂaÑHáYÌQ¹ÇY£.иbf×À§W «Î+ì1 ‹õ#0bÇŠcí{2îaUáÀä±6¨HmµÃ(ê_šT2ò”‚õcº¦ŽcæaAþÅ3Šz¦ììì¯S“»>Ùü¥ÎlbÁ©8º<¢˜e©ÞýÀ'4пÌ^>ûÏ<›LÅÐÑÜô5ÙÃ}Τtòñšj}ÜßAO{üž¦”ü¯b‚?> •}ôIù7³ò†¬¾ç‰¥þûÖ©ƒ;ßSÓþ?B=?Ä?Œ†|Ï~ýϱ‘ÿLû]h€{ÚJõÿ!PÀCìÃË¢ï±Mÿ·«£’^¥qO6ÿ?^¬ñýð8ü=úrúߎ8U|xF÷žÚ8ÿ÷'v’ž½'å-þ«¡ üð(æ=ÐöÓ¿=˜ùùð8Ò=³eõßNz¨ô77ßS?~ù7[Jùpà=oÿðö>D=ÜÔvÿË-n‘7´Ü#Û¾þ»í-‰w=ü©¼çÿn„‚4$ÔòÀhœV äÿPK œ•D8q&Å{ÿWEB-INF/lib/jboss-vfs.jar¤»pË–-*É–,f&[ÌÌl13³ZR‹™ÙbfffffffffFë;sÿûsæÏxîį¨Êè½Ö®Œª +2²ä$¿|…ùÇ‘ž Äò¨¿.ia%~q:¹ AÒþ‚vlLí-;‰þêPY .… ¸‚ÊŸñŒyÄÐ…dñZd‚6Bc˜¡ÚÕJ mÚ%9«!5;¿'½æF‰ IÇ=xòÔøgP^Ò1é"Ý™µ/”Ãŵ8Û –ÒgIû"Ç„µ¡$¥ÉêÍJD$HR2YØÚXEÐÅ(8H Vê`Ë£šëJG¶¯fa'.I× ¾ š>Äs”Øa˜rª%gÊUÈŠR½˜ Ž÷B nZêŽê42s* 9:¢gÂ= òkÍô…Ò&OÌÔÝC§ZNjx'FÐ,G–:\ô>r…œ´Iöˆ¨Z0=˜Bu~˜ïâô¼zÍQV¨;ÄÛL[Èl$uÒ"é™+QÒFw§t¢{Á–¦"F©¯4,y)ŪÞÇŒ”‚C”¬B?äKS%r´U{mU$&V„Æ3Øæú>Só °Aaɰk*ƒ¼®Ó!ŸLŸŠf—Q pÒR%iá^ÀœÝÅž„L{çÉ—‹PwW éª‹}ðÎé«ÞÎ,°yui@Kz³XoŒÈ¨G¢Ä#%ÇIYÙü ›€Ø&™ÍAÞ=qálΑ%B  ÁbÁ†[òÌ¥)ï§¡™&ŸGwæ@Ô"íhª.|sš/ų[„B„:²×îö@ùBÝ!BpÞ÷1u¦·Ú3bvd™aRKÿÌÑÛŸNàyHðZ7hz”[ÅÎÆQÂù90®^ ‘ˆÃt 5YoáhG^¤Ý”×áWˆçH’K3ÓncdÏ—$o›TqŸ ‡îÀ#AÂ㯈¹=‘Ø9°x¹CÛ·È82…HÙááuȼtýÕ:’˜õ9’A©*ògàÆ'–¯Rª>1&³ï:Ô&ÐóL‚šÒ”Ç“GPIk‡8V7à“1€¶¢F¦½¡¦ ½zâÆÁk|vd: ™äªÐr¤í„ÈŒs3ƒ…û·Éº˜®ZðLºþDÛL”€b¸¦0Ý~tƒ%ó›÷"ÖƒB»›Ò¹1‹X°²œ{t'ÂÚ5~„€0C»¬èð\ˆl'š±c¬ò3×D½’×Äæía×Mr óÓm"?^NØ _£+¯ÝK‚š_u=cº}N\O} ‰,¬í{ º/ÓéM4¼#4Ùõ8챤g‹:u»ºãPrz.®"³ff¡Ó;ô­"Øuòµ ‹uRÀó=dné "v; |3ùÀ•ÉÖ-Æ#£‹Á®\5Ön˜â4»“gÃ:A‚H·Å,ä࣠ËaUWl ¶”Ui9€ê<ߣýÇÀ‚Î{`‹”e»õÍäÊkæè¶)lìˆíÓZù: ÓÄ˧Üfm›i `‘ÔvLvSÀyE`sþnoRõD“­ƒûŒ²ðNèLO½´kX”̽ÃñÌùîÜaq™%J³oÔ"hæªCÇcê%vš>踞ýӬ߲4+{ oÆÝ†çž “ÌžŽÐ—Øiy -¶S"RnxŠ‘I˜Üºü$ë§Ø7J4zŠF‘9#Å8,á,öâtõ¯ÌN"$$híDß™}«”¼â¢ÝO>ò—œâjQæ^AÐ}×ÑÌ(ãA^¿èq™S<×èæ*ûÒZC,èK+è'4y Ék—ÝÜ¢•ìmFŠ¡H/:¶‡FD°»+ê¢ïà#‚¦Ï¦€ûŽ!¦¿²-—1IH¹–$?âϸ c½~û{â‰5D w‚€(ý•xœÿ«ÄSVXZíþ=éÍeQøQyæØ¸© yAt-]ËÉÁ4ôõ ˆƒ„DÑÍ9iA4ÕMðBÞøu‰¡H)!Kßç…ðº8kB'¦²’²¦\dp=eÚ_v0ñýò|ÐC³í§ÇP‚³ýJ?çG^Ïîi%€3@ª©‹# X™UÒlAƒhœœn³ \Û¥°ëCÌÿ '8ֈ͡ëêsn)ôϳäbJ*ˆñú¥Œ¦%V^ÄK­-:4¯OŸ§Î‡–÷:ôgÆ}h mè$ªí•êCR½‘I{Û˜ƒÅJL†Áæë1_ïBàš4u‡ãÆÓ€¥áŠžõÖì‚“õX‡k&ÅX•´  gŒ ßHÖj\VNy`g)ú„ŽJèX¬ „gR.ÃHcBU?ÀdP¥‚[¯QgöN)îçÔ3×&‰êuÅåsl f™'žû:j‹9˜õ¸B×”¾ íãä‹»K«P ¼äLQÌ—C úªb"Pä—(M8ž~ëGu’Òj×kUQw¹¥x72j¿ÿ A/ ÇUJjŒ)p4øEÒ¹l>³¹~{S›‘îDÌóXVÖþ“‘!°àrNfÒP­þyÈðη~»èÎovŧ¼‰~°4hÊ¡19ó»Íí†ø ü¥ík¬Î—‘ÈXk¢“´ü Mÿ페”‘’˜iÐå{„{/ámuFïé§ñ{2¾gH¿{ž³!ZÄ>B‚Í‚žpÂ0¦ýŒ²=½àöë @:ú6 èÖ-óWOóx•àIº]Á0‘Oö;¤RÓ~çÊgâ·Ÿ~þ;Œƒä”'sßÞëÄ™y®ÒVl³ØE•Ά áüm52ƒ¡4T[ûWóÇðª+w5PÂðà[ z–ò"5_×M‚5«uäÇàÕJ.S'ÖX¹.D^_þžȃ®_A@ö¡þ÷Y!õ÷¬P¶TÄQFõ¢õ·PKlú1 FXaM_©R¾úƒ¦@؆”²¡Ó‚µid׈­®-çøï—·î;øG.ÓE8øÐärÔäsîÔõXlÍ^øÈþå†û¤kæQºûåDÖ¯G.oÕ ìNªÿjåØq·Ûl3Áœâ ãfLo»šfÂuåWi„EWmXœÞ÷LÝARhäFb &X—uGó ¶Ì“åµX‹„ç‘ݦ¼Ò;ZfÞðœºK XÏÕÌΪ2Ö§… iš¡èt6Ë9]=ÆÔ½Ä…ŽÜ=×ÓΓWÇ …ŽÔ’Kj ȹ£o^—YÜØwÀ¹]ªVíÚæ4.é9—:‡¶rt¥ú±–¼ÀþXÅ]ØTÓ»·†á š“ {ØQ©¢÷c-©g´9ƒæuÁ‰Ò$é5ň@)Çšã—J«g!Ïò ~è Ø£OùRIiçéÍ•"ÙT¡U7±l@ @þ˜d£ØFúé¥Èp“Å5„•”(´‡Ü¢ɈÓÌkïЧǜ÷¢|ZácõnÜáî·ã‹Œ^lˆlo¤¿¦’´yN.:¢/E‘=¾q""Z:·Ú÷üDüöËÜ]ÇKVÁÑ{•q…µþÃùféÛŽQz·r È&sÇ.;z’õLYœ–Íieð dŽã-ô/ð½goÖóüT×±]à††ÃØ¥¥l‚¬§#O—!¡B.F"ã'h`¶wÉð—öÍÔŸ£%>#o Éÿ\3J„NóoÂ0¥a¥¶Þžˆú-úšpG\~÷òoŽ:’EJÀm¾PÝ› d¦¸oÊq¥ÊM‘ÌB©ÏöGÒ8Í _øÄ »\D<“.HG5ÚæGÙ]B}’†•7õc—=Êóq¡’‚ª×eX^ÇÙŠVËeBû,ûõŸjÚŽ»mt Höÿ¶¦©ˆ(þSeÿ³¦©A¹h)£ý¶fŒcKqo•^=¬gŒs‘ôn¬‡k(ð©÷)Ìo¤~e¼‹mwbD1‚‚ó † Þµ*+.W¦ð‘Á†F5,£$ü‘}¾jM;ÿÙùdÄ'%A™5’Ô–é>ùkÊijÌïjà ÛH8‡ªZ›uËno­¹—l› ºó¬÷iÝf—’£k5ÂܦgiÇccgðéæ ›(_üê¹C4›Û5ÑúþàÄòA/ >uwí:éÛ­¡æ½Bàz3ž;Ð>Èâ2~B»v…ìeƒFü2†Ý‹ºè‰²Y¶çÃj^¿ aثˋ0-K¢ö $‚û5Ó»k—Üu0ê³$~ÂG•–‹Ôc”ûõW¯ŠmqŒÌØ¡L§6«ùmJ6¯0câ&ã ø©±˜ÛZ:J—? ‹ºŒŽü5xyÄ`xaÓ ÊFÎDÆ!c€Ñ"ž°Š =.¿‹Š‚ž%*K,Vƒy¾¦4ãM‚_6£±R8»Ö±n±*@ß²Ÿ£‰Û®¬‚Øo`(´,Ra®9Ûórm›Á›S8ñ§µqعD6Ç^€,àIø‘;§š+º‚Ld”Ÿ-UN‡º5M°­†u¬P‹4·TèÎõÐïVÁ4š ^qS~1˜¾©ÅŸ.-\¹Š!­H5"ÇŽ/y¢©˜s8iH™ ¨Ôm"—n\ôÐïmÈ }"æRAÊ­éXA¤´$a÷4ZؘM÷å»NÝhE%Ý.³ÆœCµB®Ó0ƒ]ÎÓ ¢¶‡œ_ˆíCž g$Ù=šÏÔ[ §8諈dÊGaµ°Z)º » G!E;€qwvóÄyŠ÷aW1澚Ѡ‡ÌJ²„Y°ÄÎb=±_ò¿‚íeÏíAy ‘d¯}õã¼oø½©±>ÕKÀTUÀÁx‚~4ïÀÌFòÒ,I[ÃQž— ÆpëŒÂpeV¿wiìoi ³ßFsÌ`4 Z¯¥Èœ0/´ë1¬GÃùIX56Ìx3Àìha¥¥×CMj‰ïUÕM*81Á=¡þø2d±œEÄ«»„vÏÔŒ¡ÍÏŸ%ÝÒïXð%¦=Á›€~AË–rø:˜vkÓ³%í™gŽÂ»1HÆØŠÖEáÏcFC/îóm} ¬f§¦þ<´ÔL:Ø,up—˜M•ãEDÔÚà‹i„ËØê¾‡¾‘ª`}H\×ZŸåØ—Šœ|ç•ú}ŒG$9Ф¾zÜ•ùe]ŸuÔ˜âck†k®<ìÂÞOÈ3ǬCáe©È>ïØÉ/ò«FEÒSŠz×®žÈÈØæÅ¡`‰_ª8V‰ÏB rYñ‰ñ]bM ×áö×rïnFvzáD> À^¯Xj“qsÌÙúÔ=–â40X•é½ ’ò£ºÛÁÝ?„~DóàÇ_5GsßYg/±@íüiæÕ;ºôû©»'S›´Iqe2 ì‚ÒN;˜R"Sª¥ŽÜ•ö`QÞ.8v)¦×z„ŸkñˡخÁ\Ü¢¿uâJ¸s’J£G’ó±/¨eð¹újÙkëË?k¾3`©jús hm‰ ¦±;Uóeü2Þ–zë%K1ï®ï¶,^*íÖQ²Ü? ;)Ðjå +šýêš™1®ª5ªPQ×HM°å”fܱnbž,žÒ‚9Éu^ÀuÍ`ò¸ÃºÆ}Å Ч` o·EÀÂt--ÞhËPʦ(&€!7RFÕÆ´ßñ$3#kYã³'MÌÙ%ÒVÖDæ×+JI«ý(³ïdP±9D,Œ×ËßDn׋ÝSÂß=ÅÝ5Û4¬£¨ÁÖD<)o0³XéÀBlºŠ®.¡ZO¶“"SVr~gI€ƒ¾jºµ ìwM¹»C\8ü·3wj~‡ž°g—@äÄIiÜEdhkzhÉëÓpÇ”¼¹¯Ç•72âd¤ˆµ¦. ½¶¦å£—·´ãè6Ö:•Ðè{ä ]á•>Á@~2~#ÜíLã ‚ÐÐmCÝc¤62Ý s=„9̘¬Ž>¸¬D¯þkp‹s‡›zÜÃÝìðéÒ,qý¦jVœGîèÈüEU#/<½HÁXþÕ‹‰TÁþèf±ïÕf8 Nò;‰ª]QhŽÍm¹¥ DÐ6(ÞDLO:©ÎÌÙ¸Þeî-žZõð…£•hÊTÇÔÙjàJ¬¼þf~Sñ] SñT6_7­î ¢/XØ:ï"6xã G* Û‹K;pÍÖŠÉ?z3ýž;aêrd2Πi¯[GÜ#ÿgÜ©£…ßX™• 0Oë/qQŒpT,{+诸£Ü”7WÄíÍäZ¥ #Iþ©tÉ–¨‘xOQ¿O­­”2UI•QÅègð˜kdàt·Ü>ÁÛd=ZØŠlt§î0ƒÝ>Å•HÁ‚——UÖÍÂÜÝpøŠºÞ°&æJtw!=^ÀFä­Í|B#åÐÄø? jUäzÕMfSôŽÁSÙבßUödðýqÏ”Û?éšžOý;Ò‹ï,>Z‚‹Ô×›fv$Ùиëø-U0 sôÙé€-®gè¥+ž3mvYñ>rΜÎ0q=ÖÔ´%Êž›‡®ÿcÀŒpmäHÌE2®z$…è,žäÄŒ÷I²]ý€ƒçÒ_Cìe±^({ RÁÛ2 &fÒô ]JJƒ–ê­_òVSgG¯—v⚊ ÜhŸ0ó`à¶ÿõ&"ìyO,läÑ»ƒùd¿ —­W!GQO bÄ4ïØ#‡Æëx7Œ1¡Xuÿl±ê-~ÙA#©{bΛ0ÿý¬HRV5…íÉ$ÔÛ!”æ0ÔÛ;H Ю ækUÐ\ Ó3Èz{µWz—Ÿ³Á öH2‡YËOˆ‰¾ó"Ið=GÊw8ÊgéÃŒ&—”¦<¤ {#mÚ®ù²gì€×cÝ!¶qç£4Ò&ËOð¿K~üW”H ”¤ ÿ;Éÿïÿ‹˜Zÿ¶œQðé¿àø;Š9+"“md “îÖ—g±×›À%î@øu´ÖŠ7Ö·¸A”Qÿ8;T@5'"dÛÄb4k ^7uâ9;àÌ?º‘@3Žʲ5Ÿ¦@}•xúsóÉhAŒ\÷\öjÃ}«ÅøãŠãh2í»Ç ÈѰoÿ5 Âï¾ ÆwcôÝ.n—©°ÏÇžˆ§Žçï ÷’Ï ]ƒÖóÇ¿:žù¾ou)Gm)ç u=õD!xo Vy[#EÅ¿ÐÃum Ž.‰jF]y[ÿae•͈åæ²P¯ÀãÁë_ Q…Ÿ’Í*«47oPë&u#Ö€Z’Ó˨ÌSX2ä5~=*ÕÐs%H´©Z_7¿›5žÈ!q¬Å’Z„ß q²åjØ©ŠîÌA ºîEWΟTÚ º%Ñ*Q(¨”8-È‘À> ~€tÛ·f_qƒ÷$ó°«L?Š‹y‘9ÐQÏyl騭•P1«b.yÁnÈQX,ý0_P¹D z*¿u˲ˆF§Û|Øy³óÁxëh^ “-^€ñœ¥Äx¹Ž´¸K¥}!™Õ!Á›=‰“ÆÝ®ñWΕZç ÃD¡G Bx{Ê…jéšÝU  írè°¯`ï,IUaH‹Æ ™QÏXãJL;.À|´¨“§cƒ‹ÊåÖOáf qù¤šNØ(^ニÅXaù_ëœë¯à/àÀóB¶ ÚœÒec©9 )vÜ;BëŒOš¾à®§ç¤äèRp"~Ú4¬p#T‚âŒó"–Qšy öäø!¦Z7ÓÞÅ,!&ä Ù>%ÒeYí«©áP¤«¶sÐVë2غ³ç,l³Ùnoæ«¡ƒ¾J¼é2”¾T ˆpß–ÎTq>ÔðàÞ&ÄÜÉŽÄ„3›ÅX9ù…&Üf,0>Q¬nï‘ÌÖ¦lÖâB&ïù&ëçRçŒqšmú«x!ôD¸úëìÎèÚ*¿âEX“¢91%QˆJ²Qj¶_µ)¨° 5I´yT‚ž,fgZmøø @ ¦úyçÌN¢ 7"Û0 D(;=Mma)ûÌ¢ðJJMN}MbÕ$ˆ“ÖÀ#Â`%ûà &ÂoÚl~-ãÖCš1péÞœÎw«1B˜¤ Ò®s”ðůê¥ÞhY˜?Ø`Úø†ÕZô–øÄ¾—ŠEïâóåS¨¿5R&t™j@8®k¨ZWñ…Ï_ñ!LróÒ¡Š¹Q'Q‰Tl¹‰ÿ¹Ã;°Vvm>¤ÿ(vƒ%@ÄýÁJ|Þ|Ä/LŸ…!¤Ž?b¦Y"=cM.Îwš“•½ŒŠÑ›9^»c’2ãˤ~Ñ 4XLNÑ.™­¶ !Q \¼¬ÆžËÀ_¸ËïSá4ÑÈ» Ä’U,Aü h|¶³?´em«½/ðt´OÁç ½ˆ*R•÷ã+âÅ¦â‘ØÄ¿)9èÑ®ï]ÕæòЉ6ªÅŽÈacfÇÜ£¨ p{€¿%b¿;^K¡ãê çÂÃ7,.$\-¼áªumñ ¥Q:—xz¤4qs }»`VèôI—äUiáŽoû+7 ú_Ä0ˆË½¬(çÍ­ä‡h‰FP.ÂÈ®÷¿6V~±¥ªçKˈ{$ÉK4­C‡AE›’œ[Ô[¥Èy%N$›ÍOãAÇŠ8]X&Z39+¬×NK!YÛµeZéUJP¸gH¦=¯-ÇÎØXÕZÞ€å†_a ºîÛ™9Ƥ̘Íׇ1*A‡õæÂ„:¦½ÎãØIô‰f=«¤ÅkÜË…ÚŒ—ŒwV qb±^H±Xß+8'ÆZnCàæÖÛ²A¬ÿXƒÓ âlÅ *hR=èŸÅyž€j³áiÑ+eœ¨•/rlH¬ŒKºI7°B<êgù|°oÇàj¨b7£ƒRär^„ÏWT©(½öøÒ´íStîÃ×·±Ù$XÙ{7Â/è4ºà‹•gè (P6º¿ôå  ³ß‚7Ò"³;.0yÖ|Û^bìZ¯°@.÷ ·º½ÖEÆ”Ûxü5§}ÝZ u §V“籘çNä¹m ZÝ(³ŽÇÉ«J™ÑBg[v'Z6D²7šŸ[o˜Å®@ü 2Vovby95÷È,îPç±ß¨¢t°!Ä¥"³ü¢À®A ¥<Æ4Û-z÷=iN|'Ÿ 1n%,Ë…¼&ðœˆÐ°  ÛNŽ÷2FóV8à( 1˜Æç÷Ë`øÁÎO”8Á¾“Û¢n%ßÙšb„Ü8ˤ§½³ËAÜñ.fì¯oÛ^‘ûœhwVÇ>yN/"A\Tèà!Ë]C·y#‹c×¶6Þ—¼T x)'pã­Xׄ”"  ö \§CpÙ焇Iø5t€ôåK6ñg1Z@¾(œš†ÍiOùz¤\9[ .=7–++5®¨Ñ„¡/JV6+™Žñå¤ÿBªØ‘묖k‚«q;n…¶fJ¦¥¨ÈÓÚÇÞnì„xÈ©.Óžg«MÚ˜™¦œ$kVy,Zù}>2sd˜{eSFeÅum?é¹~Q„%ÎÌ`©×4#úРü•Î׃FñOn.{’5#•Ñ·ùº¥0ú@Ò£H¯^W]¨Ç´þÂÐìÓÈÆb^j·ŠSR%˜öÓ1 m¥ÄD‹ÊÜ'¦~A6†T³ª£\ Ö5ŽõâB[)ïÖ¨µä“ÅS{@&d|ô¼ 2åæ8^ØÒ·…;¼clæ¾Ó#PF‰•¦ÌD‹;U”áõ†Û·®ªÓÉæØs¸/’’lÉ DªhÄ %U •Í^h›µi*x ¼:JËÔµW˜Ú­(S ^ƒѵ㠴ÂD÷žóœÕ k‰4k¨Ñ’.Lß²V£NË ÅÅÀ×\õ<2¼\3úŒ#ñÁÕ(‹ÑoÊMêÐ$Ô§“uX¿åïÒæ”Œ 1¢äLâImž™)Ð.êW°J̓cn-Í k´°ÈÇö¬™O:mco×TÕzjùÔpÆq/Žx¸Š ÁÕÇ_gk¼°¨•éDìŽ&†ú˜ Ô)û€ÓÃ@ÁÚ]`GŽEï§“(G­tŸ²¹«}½>Á•¦ÍÛ;E»M&¦\á(—õH—Z-Þkp[õT¼:Ï4¬RÏÕRð)æFÅGx×åßÁ&Ñ”7®õiÙõc'Œ1Ì?Ø8¤ èH¦ª9nµž™­ÈvŸñKªê–à„Ÿ¤½†üÆ{ˆ…åv/Ú‚Å^¨0•§©R<`Ÿ¦RgXƒ€@4ÿ”2­—²‡”• ¡º™­=g8ƒÅ›ò×0ù‘£ ¥[ôT;*mWœ%øœ ]‘ç]x¦Õò;‹…:«öÈ-x3Å*¢Œ}öÈÖ°`r²,žgê®V¶.Õë5h­Éžæ%ÛM²êû#-ÛÀ è×ìÆ™Ã@qƒL‚ WóÈ æ_ç<iÝcG‚ñ¿éY¼ü§]QÇ®1iû³ô™èD:\¸X?ÔÝßê/6"ߘ-.}Œ÷¶>\ºkl»üÞ¤ëmÝvMd.:‚á(9®›#{¢Èè ÔáŒg ºå'3Tggõrãörç±”-dkž›¨ >¼• HR–àAß:D[t¥ÝF¤ RÞï¸.;r• ofLtä«AÙ¦-§‘wp)qJç’É_/»“¾Ñ™ŠÏ‰3…Ðz$ â%†‹bÁjÕÕ øµ´(Í•YG¿©ÖµÇã¥È)ÓÇk¨i?âìQ;ļ’›Ñw-ÿ®:Z¹rdv¿¹úªÎw¬ï$\ ƒ„oÒî {ˆÐ¾s`E„CŠ|ªùÆÀèþ —p1æ¯qþâþÛõª¸ž[G–³=s[ʧTù u©Z¦Cg ·/9O¤J êzx>%ûTm²&/U¢šu_s@°¦"Û•YQipÀA¾ÖòÊC¸íy8¤Û¥ àõŠñòs{G§ºq·èþÖü3: 1«ù™ÐQY£É¨ÁÊ1švHÄð˜€úp+ֲ類zW09½(I)G‘‰Œ¥1?E+c˜ÄZ2kºu#ÐÊ/‚r›¬t(Ìn¿ëâé„Jm¤ª>^™zn&Qm_¢«€K汧 itßšîÌ"c(µß:ETð´„q¥«`÷Fý¥Q–v)§ûÁàÒ”ù‘*û•"ã )ÈÖÉÖ2Þ~;È®89WÛªügBùøž™¡ã÷ÑÛÒ¥›ƒ-{a‘ª©5rõ°Lê¦yÀï+ÅÔïå¡Zâék3רíptx;ê<:Kê^æ©e;C¶ª{æôز;Ü &ví€TóqsÈÊѣ^:´jmºC±sj1Ž­‘@JµJÕ±ÀšW`WÛù¤•štCÝ sIGèE9Å—.éƒ}âTÕœKE5ÍÀ=¶Öýã vFg4£épø]sÛ_X¥@¦B ¶Â1Öy l —¯¸Ê¨²IL™mˆµ¸SO,äcHˆyÆÌX–mÔùࣷ(IdÞúg½ÚªgZH’ä²} ­üKQòÉÆøvÂøã7ŽÛºí_Xº3Àë•su¯Å‘©„q#º wƦ{€´äIYŠÍöÑ{nïL†%öR‰H8oÙ"ÀÑy> HÖ±!`]—ÅY0j.³#@ð©r0¤Ø,6Mï$¿ãüïuçIȵ‚;©jßÍíB*‡AÚª¶­î€•:ZP¬)Oñ²½EÑ=;E£ÂÀè æÂ‡ó÷§ä{Bc#—¹e“Á…Ey¯®½Ò †3¾NßYüKà÷ƒ2áÇ®”ŠN:ö/ãÂóR‡5Vÿ0ÇÓŒv™‚ý×Ö¸fCÈ‹µÓ2®s¦•’.]Î|ÍÈQEXú)‘hɤ’€Ec“nIЇpFÎú·ªuÙeînêÏè#ê8¢ûÁãØ müª¿¬_Çr`GÉk²¸XÙ‚rº?¯.!TÈ«öÜÊ'GÑÏŠŠ²O°õJƒ‡ªÔŽP‘®w5Á5þAMl@c&•<œŒÏj±ª–p‚xæ~Ê¡ýˆ"÷÷!“ã¹ë1&5Ê©ÜÌbµ‰ú‘Ì)óÖ[k¤_a]yv^­§8¯èò…^üŽóùge}Ë–\›:öZ8G9®IûŒ‡h®~Æ÷åLT-¿¥=Ê~”%ì¬=GÚc_n;LØ Z¸‹ >ÀÛP6¨°K«”$£*22ñ/”ð D×mi1& 8£­§¡¬çž­õ+=`@_XóÞñÒé¶&˜<\¯žig–¶`Í]í|ß0Âò þÎ!áa^úq–3­ X}†æÏuVœÃc¥üÄef:EØ~pSk\i·ð¢Í=ДKênÇ!2u^­ÿí9q†`2ˆàšóŠ4ñÌ€½OƼ‡Ç<&k[ó›4Öæº”œYÎÁóÌà•;±"`ï%7è¼Â—0×Mržã¥cñ‚1x¥[÷@RŠ;ü EÍÙ“.{ëMÈ}TöN¾#bp~yj{r’Àb² Ø”©£ìœ©r|2‰ý¼p~î*cÀ·4Z‘ïjÎþÊfyÝUÇ 4!‰ÕI‡sP)ÑNTñ\Rvû ú÷•˜#Á9æ/ ¡P ÿÒJŒÐh p0µ2þû~’KkaÄ¡Ï3-OK EqЧU|ËØÛíhæ‰/¶îâ’_SÙL ¬Ó+&7tÐ\ú¾m—yE.†; AþÍà~Ô\h¼‡ %ÉÖÄÆô–¶²²q“õëã¶Û‘{t‡ZEj¿Ç «M%<–Ý™(ËŒ‚®Šrà»8ähàŽ *¹?$ÞÁR4SU’•›ñŒû›Aã½ žªüϺ"2šLÞ:hzqvn%M/m|1þ1½ÆHÂ9Z"†ÍgŽî“ÖPQ”D.q;9±÷¡K¡JúÙj}£[®r9m¶»;PÀ¸B‹]ÀÚi~9¼º3¹ÐB”oêô “T¡L O_/êñù÷VEhÙÇzB6‹éÎO [.»1²$™©÷Þ^ðv£]I˜«]’qg%šõi}ø;tôúæ’ çáÞ¡çþ^B^`òYÀöº<áC¼½pvMT´PñÐ]›ªmY{õt)sWT{Qï Ýá=›âTiöÛo¾'¤ ¼É§Vù|ºôݦb®¬‚É”ž³änúvì_EAN1ƒ®³Ò1 к[½Þ—s+TªY¾ÒX¿ôÎÙ ñ¥aynÜMGŸÁûø‚ÙÄd'%ék`ašŽÝW_¾úÿ¥å­6皥Nª]˜s˜nŽ-Ûýr\òç†e‚B-8S€næU'ưSøDi=QÓ+˜ HA©Rëœ9·.YÕJdØæ†1øœ…¨ä.°LkßÜÁU?}:ЧêL¥0²3¸;XˆŠn†0Ï;à¯ÉV$:–nÎ¥l¯5"så å-É1ÕjlTC×0å å^å© ‹^ÔT¥zòQ'Ø% _ÔæKÝêtÄëÚNr"—ÒX2<ÕÔo)çàò>«]+ºþS9`âtEùË$Çaÿ—ÊÁ¿}”ôÿYŽPu×S\ÀúÌ`‘žÕÔ&D9sI†0‹‡ªE•'G--à„Vv8¥±tgè±CÉo= <çù~Ç"_~’|P¯Þ˜c1ÉáÈxtÈêxùáÕÒté|9QfJ¹øQónk‡¿õæ±uÅõ²ô}ó˶‹üž( ïÞÐH³F‹—Òž_eß/uññrá¶8ÛËÎPƒÎ:õ'Ù“uLæÇ5 ÍwʽF°²k{ÈÐâ)ÏjãÀ¢·“8ˆ+¿’ŽªY‘ö2¶oCa–Ç®Y¾mß& ÷RõÚá•A1ô×pÇl3º¡9½ÿ†fb#/µ14~Ìg%}Á4Ër˜'t§‚ßËsé÷¹––:ÝÖûdŒ¨7[ݤÞN‚’¬ë½4…ÕšQKYŠçFß"ðS É > Ê^{ÈÔ¶ô§¥foýljÊåÌ.ÖÜÙW­-Œäùùµü€¡æŒ3Ð_õ[ÁC«õ&|²gésR«ÁAªæâøo­¼Š’Æ ÜÚ<¯5uáæFºÍ\Œã‹“B¥tí¶‚½µ½iáJœy}*³Oìö%¶ Fƒ»n¥ŽP@wtœÂBõj0ÆÌ¿Rš W:ÙÔÓž“ú¢)â¿~öõgZhB³Ja&|•æÜÊêzd‰¾,¬âÕ(¬Å´¢y£\F9QæÖ«ö‰W2;€0ñˆIÎÎ,¦éŠ“(y^¡Uœ"§ ÂçTŠRgØßãk2«èƒaêŠáÇgU~_'²†Y¼ú*¿dljlUƒŒ›üw ü‹ _cTî1ã¹9ž‹ Ëv:ÒODÓ€ÝÕ hJêE9<.ªN$&78‘>¿‰"N©AaÃ[L•¢Ê‡ÕoÆs }À~ýV 9ÁTVu_Š–Tdî¶–üQN8IJgÓ’yêRŽ"­ªÊ4nD<0e2‰.5+ySŸö½ûÞXI 8™Âk¨eÌ®2 ö~b¤&cí—'c ¾ExY‰&F[ˆ9óSŒÃ}iäÙCó3ŽŒÉãKŠ)ÅyÑjÕ.°#þÙûû5¶iÙþ&K³­žhe·òZȸa¶ ³&ë ö)«Þ? ú«7ÓwkG-ûèûRd¿Ý’68𘨞ßÃá<á#RƒÌ¨[2™†Î7€¶é—ÂÍܳ(\ãù¨£…õ<æÊ1Îö^ ‘¢-Ø»êî®Ô(t†ÙÈ “uRÑ·`¾)§.L]þ@ÈT½æA£Û~£TÉæR)}U›M$ý©J¸‘9œ\# «ƒ_ÄÒÏÛ7 %q(‘ÊO»Ÿh?‹ ŸDã‹…øX®9%!u£`¬~d}Ј½¢Um“Aë(ß(¦“™ª–=§¤hÁcW"ªÝ;Õ Ð]·‡’ëSz…è uÅöUŠ—Éƒ¶¶›¨ï Ä—ÎC-BçˆÜÖ “ ó)d-¿9›RÀž«ÜpaB{Uí"<ç…ò‰ÏüÔUzG«:À› Pغv>Y„ÿ”»‘}—üñ¬b¯6ÐUpü¹íˆf-W˜Zå ïC*¬TÖK²ž{],Ѓ.좼cëÿýø¡l;_m~ªé UÆl®é¦EÂĠŨÐ=)ë¢j¢*@ÅüfSÈìg”¼×š4݅ІŸ‘Æš–ÝªÒøjc³‘:²f£?- üØSÌLqtñ¼Ë¥}.ë•·zÔF,;+z\9 R KzÐÏ ‘7E¨8OêÁÖ¤žZUý»dÕ¼!ZI;÷zC6(#´‡tÊ"·¿Tñ ãåŸÃ•Wr3˳n£õìËO…èß¡Z’ú÷·—ÉÞÕC­sP8bžÂ¬GFpîz÷¾.½± ,¼§<Û€¼Ë8™k‚íîÙD×ÊxÖ(Ó %¦%Ä——w¬%€µ º_{•ÅA( S¬ð[‰@Ò'¼¬`õl[oíw2)΢|ÖVD\ß#%Dm@TU¹<›¬|x`wº – OG¥n]âI«:ì0Éšð;V/UGãpãä úÊ^˯Ҏ_ؤ¶““£®Ι¾8·æÌè©\tÛf#°9”̾§‚6o.4ü;!O"¸<`[¯HÏ®jsÙFòcâïc¹Vî#l-6ëÝÞTa;uæMcMÎ!,9öJïPÓ' \aœ£éуzF œ©í¨Hm„Åå­Qˤ:ÇãbŽ8^•µ:&[t-µ©–0%&Kº©IW¬ WuI:Í|yÅ —Ü.šsêÔºN!GKþÿ÷¤™ìqSÊ »³+*¢YAÕ_ÇF!ºü&‘G|â„&•fXÆžtÃù¿-ßµ”ˆÞ8SéŒàáÅåûÓKê69ÚÔQWþ]` M?¯Ýèýò›'Im;‡:í ïèMVòÞÓL¶³?¾mµÎ™k©P0™ÐOQëžàÒt$uÜ”ð¶±ðe­Hþ¹Á¾ÒôÏØÐ÷úÁ¯=‡Ö­e៵¡ï8C{|­éŸ{h/t?Ó—D~—b`扯kP¼¨NífhÓ|3Äš Þï¦>ìneLípþjïb'Õ¿€lûmÝÝ­ƒ2B"Ïø›ÄzÄè{0Ûöáñ*- õ6žˆ=Úäzip†u;¦ q5Ü¨ÕøÆ€båwh"W3ÀÒy&vð²^¶fžÚzå¦QÈt+3à÷iKKÄo¼eìk–Åñ¨bPkoº@Ûöxf>œbOÜŸU@»dé=d‹½·H‹`ìõWZž[¥T 9 -¹&ç\.OœÔË¡^2ñÞògñèaN¾ãîM‹Óa‚ ?Q¯ÏõmžÂ8gº Ë«0©ì:“„m¾¦®$~žh‡;fÔÝ,íÞgÁÐKu¤•‰nÿ@X«^2[¦«S•õÈ‹f”&ße7ÿ¤ÎÀÆûjsRÖ—§înwO¹ù$³ñоjM©¾j5o¤Ȧ’eªD&dFðGôƒt O˜0¤i'q´akº¯ l‚"º ‚…-:u>Á‡„ÚÓ4ëÈYß—çø‰3ÑÄRWsCÊ@H,+¡UMxu}lÈ ÙŽÀ­Š(Íf8á–2fíΘô¯«áõ»é3¼æd—²é½´ÐÉöçÂbW6:½)‚¿L}~׃}˜æÓõfÌ©óö¿¹~‡?çbBø\Z áóM|¸;„ßÙÐf8Dg ~¡`Vÿq‰Û-/É¥aˆÝbA*N¢H¶M &\ŠŸg•ÿmY5ó-oÈÞòú¶iý.Öc¼1VÍѹ¦†@𠂆ª÷sƒ¿ocbüW¢ã¹ì÷/ôÕ'ì]>•k–Þ_PÁ™ÓëÔ„ìo¾®¥‚òÓG;žÂ!ÊÏ_™æbŠíeg§ »£Ã3çHÐvˆY÷f>Z–‡°‡!¼,Ú®‘Ñ:Ç÷Ý „^Î}oW¤ÊeâÇP’–è¶–8æaŽä¦h®rÖ³ö$Li{·SY––ý†ù»<~ÉÒÅ9ùË|ÃüW¿ü¿òXÑÕÞhù·íÊÿÏveΑ´öö‹|i.Ë¹ÂøDÃX£ììÝüŠF“TÚýÒà¹}Wà?¶+S„Â4@7ûPdSKØð÷²šB)¬kô#¢"BSªäSûBB?g±ÑÅ¥Œäç{xy}Ø]y>mÚOþZt/|jw}ˉT¼cñ‰s ×*ì#aôP¬2y.ÅáW÷’¬2oV…¢µßÃa|«–:hî rô@ÙšµIˆdÔ¢écaÔ¢êkbñís´‚=¾ÞuËy®Œtl– ¼¹öÄòÊ6ð4» Ô‡ç£î)i–Wñ#<&ŲZ´…±Z°Ió vT2ë³j©¥±Zbçòï‹ÎÀ~hnŠÑ.÷ÿ+ïœ ³mf+¶mÛNVlÛxbÛ¶m<±mÛöŠ“ÛÆJ{¾ºwïª[uNÝï_ÏþÕ5«ç¬1æè±…¦êkQuŠi¦á¥ïçôd1îZøã€Y báÌØ§m¢ÃÖeôD}‹©9gqëÈâ>Ë4³´Šoí¸¸N±sã#›-pv®Ë[¯k¸QyN §e«ÄŠÅ9¤nÖËQªeˆa³=è¤; Þv±SR`² «Èøm4†@ã;Öïø‚2Ä«¾ÍŒ‰ª &ˆlG¿çÔb¾s \{Z‡ŸaŸ\t˜Š¤a'ç_&äß›ý°‚{!Û‡“f]£çôâŪƒø½³ÄÚÎ6:cÁDÐÜS3Ó²DÀ&±‘7Ù„êd>'©Ì0Øiƒç›¹oÎÆKòDKe¼y%5¾¯Î…Õ8›˜¥¨Ö#6D˜ùJŸ(Ú<#‹¼g^W¦EÑ[U¿„ SçEÝ~ôå¡ïåF†Qk\Ã:íGý þ¦0qˆ@…•ùÅ~KÉ}ÚŸ'€W5Ep!Ò0S5´ó d¾ÕÀ[¾å›Û¿©ôƒŸÃæ 9A7;VOPƒîˆ)‚…ëÀ4õ˜èÎB£?¾Çb×Ù—íÁuÖ€Œ¬èa!¨0É<3Y'ºØGÖ©@è¦ó0`®ÇÖ9d5þãâ³ö  ·~¡_ð®2Æå–íÁÂc»¿O,°Û[~%þ· ¢(NþÒ>"‡}ò¾¸2°Í „JË*É :E@=ªýì­Ñh¸Ðôë0^­˜-t¢¿g¢³S•ÜabCÑNmzhh™6/±Pà"’ú4TÌò1Õ¶@2† EN×:i2ž\QªŒF„-kºßVyº)ÕErZ±Ä*ª tqÑ*ëÞ¢rZqiN.תÔfVY?´2Ò,±À¬ŠUƒ)9 fvE5´ôûµ»ÜsŸ×·MÞÃ{1uÓ²ÜPÇgêòBÝõ[®=Ÿ›ºÕ˜¶ÈGÒ[nlE Ko»Ñqà†}æQ÷mðH,w ºW¬‘—K„«Zµ´;¼þë²l=£I·&¥f램ݚ½‰šËÝÐd÷0Ú@¥ž*<b²gMh ‰ö;ö¹03wÒC)aóA5Þ6•,=w:•2¥Õ3ù°Ñg'ÓÐݯXÊ®klaS}¾–à¾0ƒÛ“Ëørˆ,‹qî¯cS•¦_/8*Iy+ÍwKw—KëºDyC #Îâ_­•V¾/š™#îú»”\]5 !ñôsì.ë—ª³X‡Ð+ê® ^Øî¦Ó5®Ia÷¯ï…‡ƒO»|0ŠÆ(^ Cüß`Tlµ|‹EŽ¿ßâ{ðZï«0ÅsÒßž÷LªUe†PÉÏïIWclò¡Î4áF5mû 8A½fXä5½ÄXÁ­9ˆtÄcj?J¸°apÆКV%'8|Â_5D+µ§IÜR€áíû>^8s& –*ðuGV“ )Ë×£Ë-`åÕO²2ƒM°¬áJ¿yBÎZ¤¦3Î ù"3­ñû[‚Üê=±vÔç.ÉE2šÒå =9=`<ð¥¹ì OgÀ{ÑM·rÅÖ Ÿ±y1Ì sÑðÙJMi®b‹yÁÈcˆZ†,-Hñ£Éäæ’YDõ0Ý­ÞVå%ÖSs`¹0?¬Ü×H4vÒ:Êmˆ^{£ë­õ÷Ëb.J\—+9Rf™nh¿‰ÃŸh„Q`¶5Dv˜Ó_ÊÆºáv¼²Úâìpýnn5wº”´’Ã_Ä}︺G$×»aÍC‡º’ÍPê¯ãîse§óEvCÂy7êt[`_š=ðÑâ#ž—†ë#õ]x*ÇûÒ:6¦QRÚ6¡EIÕà¿Z%¼ÒHwæ;Ô¨öÅxRI5̇ †x’áýQJŠ4Iáë 8h£°›SgT-ÓœxÌ8+ߕȫ¬±Vjz³´ý^»k‰—á~‚¡Ø¡¸J½z6“E ©GÃAΩ™ l™åà·$‘‚c¶²±}ÛþXàL„ow»ò¦ °×ÁûBÑ—šÉCøÄ\ƒ©ÐµÛVÀÃuƶFáâɤ&^ÛhÛ+Ç5úR›Â^—5N´ð鬓kAˆAèRÇÆ_ŒÅiNêò (rÅ j[‡ßÖþJl“Œë íº»8¦ìs6F¹oGÎ×JóØÖ·…zú‘ÞFi Vš¥9&å5çdÖ“SmøÛ»…l‡3@tƒÉJ‡ÿ†pp2@ç4Y³eåb—ÊÍ}~ì¨ 9¼Í㤪Êó÷ïK@¬5¢<ͯüyvHJZ¨s~Íšy…i{xäx$'˜ãOb|‘éžïQNjG#Ö• uU¡"ôÇsOäÓ94õ`W8²%[Ük‘ÎXxÙ¯äÇ¥[0¼¯lÒtN*~zÂìÒ2¹“þA¡ñ{º&ØOŸ\$“9¡ ,lìÝ!š=³&BšìP?RâéTÔAÝaMõÍK$`Ýñޟ뫼«ôÞ'Ý[i»oÜ–8Ø6yŸmnµK”öÙ‚€ä#´1}^ÿqN”h}xÅâž9¶i]™O ?æF³ÁçX8¡Þ^;”‚‚€Ü@€€ˆýÿÑÿæ¬Q¢ª§²ô _–ºÄýzà¾y`TD€X½[ùRf+Æ…‹´Œö`ñº|ãÈý¡Á"æÅxùÍÕXW44apVxOçIŽ·“;§ ŸßÛOC‚9t>("œ~¤à %&Üac!’ZCù@œþ!¢NfÆpˆ7'¥^´þ¤ 1˜4ìÎßpSHp½§.À¼ý.ÿßõW^-å›¼Ú Å²\S2Y™«6"µ:R}k¬xa&i›è®}ãøüL6J«²-f¿iÃŽÊÉí {ˆ—έ²Â¶ H­Î¹rKm†Cß+-ˆ ä4#Ì^ZÀäZ\ zýRådóH¯—áRûé‘ÝOáÃÆ¡eX§¶jÏ»Šë×©ÎØ¢bdãÛ.ÌÂÓæq®°úf: Oymƒ‰_!©4ïpftg,v-*Ž=¶ÎYM® ÎHa Èp°W‡Øj¢;é¸eN ­'6! jšj¾­ÂCïA£(›Ä]& 0ËêîØ„Eë8‹Kwk³ÂÏ  ƒJ^•WDÒ¼(Ò'`ë±Ãb¿ù45ÎEO¡²oõÏ>Bj°2n X“½s\l‡…tóH¯«½@)äp‹ØN!|¹¼zmÚºó¨k®çÆ6˜y½9ü)oöì}~_:oHÇ ‚2‹ F Av>aÞáÔ$=›ñô¡ûìÅé>eÝú»@†YÂ)ƒ‹FBÌ ÿ`\’!ø-²o…{¿¨d‰Sºi?q ÔÉðRÌÁ ¯Öƒ¨žHw/Iªyfa±IºÌ)²ž ÇêÎ#3I§”@»Ø} µ¶d" ‚;[4DµÌâºÌc³ÅõT§Gî±ÅæÉ`@=‰…š¦[êhQõsÄ`½ó¢Áuîêâ¯Á¿˜‰TN&8ˆ ìÿ¨d-í¬ÿKl!S4r2µsQ0û×Þé°iÿë_ÿØ7§¬‘pƒd¥"BS$ÀN§J]xH†<gùÜÌ9™Ž¡Ë‘°~w ³÷.4·‰”õÜÚüS:îä: I’ª$.s½çè={³ã=ËÏù±*Ø÷áBŽ®Gqµ¤šwVê­æ 6Êï®[Ñf\ÇáLe}ÉlG–Í$Å„[¶8bŸèýú=æ×Ôs”ÞÄ[z‘¼![=v˜-7—©­ICZ¸t–´³öÊ3 Õ¡%pÁÑù’—"çd#¦¶¢ëЍ“ó°Æjžµ ñéì…šŠ+6+Ÿe[´j˜•zj·õ…{jÓee£J#žÄú’íª üHÅ…4qBºK0c•Ùú7¹Ï ¥Ü†M¸ž×øºÊì¸B­Ò©¼.éМÔ;?wQ¢oìíåm¶¡øHÎ9-k%>ýnAŠ[j­NÏý1˜X$ØU²‰—%ì·c;v‘›ÙVD3¿f©ìiLãßáɋ̱º*qЧvŽL÷V=¶KðTàHHÂàî;¥#]ViŒƒ—g²(ÚXÃιrÄOv‰ø5¢Y’VX,1@B®I¹mwsÉ^?$ìA -“®¶ÜFqÅõ»£U4m®q‹îlDð4ÓæV7‹Q™ Ú èb€™óÊ‘@ÛÞ@‚¼‹CçøõþÌ07Šª¶WjWl‰Äy¥à”{\-sÀžº+ç:b|R5%mÓv³‘ºÍFǦ{Æá8¨¤œ—»V ,Òtô!ÍÜZWs¡gщÆ.RË$fß@Åüئkü+ÙìfQ[u‚É…Ç–à*us04i§Š‹…‹†¥²º„é´ïîDÀª%Læä[Zq÷tVt€Ãî"šÎ%¾ëLL¼ãWF¡zjúnð;âÍc2pÒÕYÑÝX¿ËäÝ%9³ÜObh» ˜M ÄÚVn´¦ßkœ­Nù¾º—1‹ÞanÑ?¡0õ©Hå:J‹6t©ç·'Yp’EWåF°™¶ m ¬£¼ÈøïF¼êÔøe³o¾ é})¶_/ð»õ­Ö4±s®ÔbÛk Tfí™Aþ’x*Ë\ ßæëܺÖÿ„2éE û•]ÄvU¾gûþ€¸‡ïU.\!¸ÿ²{q*&çãx Øá¬xá,|d­¦ Ô"§, #Z I ‡Â$…ŒèM9Ô¼CR¾ÑÛþˆ@”x^¹8ÓÝ;Ê›çÅç5pär øÔòà~\\&DñCÓ{–M`H¦—.ˆáGÏI%‹!Ä'E³ÑÛÿpŒ!•B¡‡Em?òŸ«°-„>C¸^ }D¾&Þ—!<@°ÏSpìkhQkDVçŸ0@ÎÍYë_Âô£Ú°ŠÝpõßOìoæÖC(’Ê`„v‰8´,.G?å¶ í£›%øDÕð³lôî–Îõ`¬±w4*2ˆ¹…¯À¼å®]‚qePÏ-B±¬Qÿ°&¥ò!¥¨$^9ïß°ì–Ä0þÇàô\‚ˆRúÃÊ€ÜäeÔÅ×Õ™²É‹`¯i¥ÎP?l?¬™oö…Ûÿ6Ä}öÐ Ô˜ÿ#¡ùÿÕûþïv7£éí‚¶‚ý½} HZŸ  ‡£fN™^‹Zž »‡)× þi½)Å"õ“ƒus}]’½ú—ŒRU š’ zUE"ǰfH«pU3FKÍÆÆK×ߺ2þ²²“5?w³ÆuN²?– ë™ï~»_½7;{Gîy‚?þÀ|ª ›;DG„®1†C!ÚÑîÍÝÙ‚ºÁ¬‘"uÁÞq}uCýðö°F´÷*6õkÇww ì't‡n×6ñ‰¼F¾3½D½C¿D$ ñ~;IïVèÿ«ûúùè•fÕ;¡­—âÏ€0Yáà€Ù#7WäT6‚°­y_L•Ÿî0*^²M@Ù]L) ‰‡z¿3h ×(Q†¬ZqVohçSgmV‹#y¦j2\‰ÔÊrŠG“»ˆ}¥ÁHÿo´U¯Ee—*­È2UÂÿ˜LJ4ÌÍêGªÄ”’RfzË&4v«ÜNãÙT£½ò3ræ¡Ë;ö¤ Éx3mjr)Šf¨¶ ý&«4”_{Õiùøä&¢ßTµÖ©à5 î.‘¬h³’E¦V^æ3XY¹n¹«T^Þºì¶=_äYµZ2ØÏá÷Pûòr âpÛÊmÚ‰Iq£;Å%n«~xúñ¡È•Ö(óÁü!ÖA†Sßrãä­ÞøW ÏÆÊ}J”Þ5žŒˆ2Ï3~Óëâ6¼òèƒgäe*Ê˃ߓšmÙ×*4@:èæ€´¬asÂý{5lw9HðÞéÝ@Øv@tÝhGUØcà‹îrŒ9þـȸp©µ%£Ñ öÊ{=Ôw ‚꘺'Dq@̾fê"6?V;,Њ¥PÄ5sKf=¸T/¡‰7×@×h{j¾yfg ‘ÖXQìL!Änòà§ZH`­$›!Öþ“9%i¾ã‰¬Gfá€ÜDªTÈc¶åþ8O3þ¢¼÷›(S<Âäc·>ñÔd E£ðÇŠEaQçÛ’&1šzÜÅ’ñ» ²v=´ß¬ÕV@üú·m+çþÁ°ÏÎ;øÆZ‚²*¿[Uªb·[´y<¢-YÇ…õ¸á†å°‚ºâ¶îyþ›üê(+ôÃÙÌkûI=׆þœ„~ýwS­/·Å Ézp’j«Ãd±£– ƒ¿Ú45®YV“Ë8³•­PÎq‡§¾—Fû¨«ŠN¸}­1wOGÎðÞI ó ™pÑ‚ùž ¶Ï‚‡ÀÁ®ƒÝòÈS8t³Û>­VÄ\!aNèé!®Vz—\Ø2…uEÐ4€+Iá~ˆ;É~ăŸ¶YH#8Ý­ãy[aÜKCpì³\ãY1?«2"³ ¢[ždq°j°ûE­®Kqô-€úýþífÂ]\M,X†cÙä1j“Ÿ*„[Õ˜Y¡3•FŠ2õÄ®äúe‘;µé£v.¯¶ÿÐtÄEâ§ÊÛè€oqlJŠ—ÿDº?@@øþû NÅàêdéâ)p±´·sþ/kTÅéa&$ßõ«Víª®Âz‰'Ã[’ º ²ÂðÔž2æßỔdzM|П ‚Ò²•”ñÓÝ™œ¬ö†};‚ xuã˜+P^ˆR¸7nlL¸ƒ¿Áè"n–7hCÍEµcâ: §ã—¿ÕazPâ”ÿʘíò YÚêMuzÍ­ 3²ù/úÊŒ:[Ê)Îî&«ûT˜ÜPuÓ™Yb‹t4÷$ŸG%míä})Qþ.ƒšø–gšN‚Zlþ,=KË  &Ĉş#?dÜEDfâõöŒš„Œú¬E4¼c÷SLùZgTöþÇ›K’iˇ¢¢eRä¿•EIKS'#'€…çÿ×oxß~˜Á_h!'#¢´ñ†¡Õ#Ò hA¡ ~ÉzIð26~óUZ ˆä8t`òÌ>pC/^‚@·ŒP(ÑIIOºæÄ™s½YS«ì0ï« y,;«™‰x…rMÕEª6Ê·7•!YÍQmî½Æ}?{™ØA#›:¹ô‹Ê½iõšÎ–O aÍJ¦pò-)Æ t`éõÌèÝqà?Ü>©1"Qlÿ¡“¨ÿ]aý_^öÿÛ@ÚÈéßߢkx»à©aË5foÛPXâ,6CÛn«Âdk¬.†·S$•²±KÉ,…K åØPLggššq”Ö0Ò¦JßýØP€TVíW=ý±ˆV # „|[ógáà‘ÿ‹òëzúÒŒs¦5Õyš»Ã›p×ýæåoïîË6¯ù×Ã+*HÚA Òï?¤%š±ÙbÎ2 m?ï|¸ö_B>|›ÂT#,> máŠÑ"?¶û)GË‚^]ò·yÅœÓ-pûO@¹ðùð  ~B‚rÑ#B¾ù€ ±º‡×C½DGÿð¡Ž`„¼KE:ÕîI¨ë)|³‚zÙ˨?ù"êÅ\½‹!@êC ›§{ö§ ¡êÅAâ!èoÖ 6¾u‰€^(c¥.%D‡‰‡¸m‘–ag'oa§Ÿ™os¯N'²MRÜ1;M«9}F OTþëðM=BEmäwÁR*ªÒšáDÒ)ÅÌiÝ¢d°bëÁâÝbÒ¬ Ó•R½à2£O»w-Yf„ &ñ?gYš«Œ¢D[!ænsº÷ÖÊc׆‘äð±?% 8£þòK¯¥h³Í­ƒ©>AíÚGx!¼¿µâL¤ž—ìu#æ‡Ú`޼œF—JÑßʹ3‡ÒÊ¥T¶ÐyÇK¹÷K£™$¤ì‘Cöâ3u¶k¯£ŒæÚÝF9r»¥æXP`HùÉX˜"zr€ŒE·CÖPJf‚b""ÖÕjªÒX[S}’a|•T6ZA8¹He½¶°mqrš•{‡b:%G2|ÊÁJ'Lcbµ³Ü¥uÆ™|EôŒÛ^•hÆŒËãå‚­)ßEªƒ`ÅÚУjÓoëRóŽe °•ààÊÛçj•:yËÈ‹(3窩BƸ–ùò†ólâøu ч›jXõNØZz±°Ádº|5’ÄçòŒQ`ÔWíQ'§tã¼t FÀ®bì…¸™;HxRNô†Ô °ì‰rR#G²ª?ò®§)r}j¦ËRq…&i¢h“‡ßõá‚bÍ”Mׇž$ù4óÜ#Ü~4dl·Á+¡CÃ)çàëj)’Ù™Mcêû]¹pÒ™vòˇ”g@ ¥.³ÊÏê.u2‰øD–ƒJëÃϦдÈ›þ6SÝXì‹…Yð<3 ’êH×cE«”Ró!ó.•HÑ sا›qÐ ëúÆ„$5Ú3„ƒò(uNÚ0©þ|p«øá›ÿ\×ÕÈ‹¤,Ì2 cÎ$¡-8æfßû<ÔøPÔWutÉC|ôå®Z“G$*‡”sbäÒ*= ‹mZÉ5 ffü5ðV~ö¨7†pŸûØfRñ@âµ!&ϰ,$ÚlÑLµËÇlM²’§= ‘e¶ €JL/Ò§<ú7ÀƒýÑMu€¹FY„X– gÒ—r‡â—Ú0/ƒÍx€~|TýôKôF zCl>R«Õ¨ÒHI}°³ mú±”{:‹vjŠÅügŸé'N_¢ÃH¶iGÌî¾;‹âÆä§ÒhÞmJŒûÁŠ:ÐnÚkªü–Íz%ÊÔ÷ù'i â!‘ýç®$k݇gâúÉÔþ•»Î`ýòèDXþä»6ø²F5ñÙÎÜ Ö= QOS–ÿQ•TRdë´ÙïŽëÂJÄȪ˜§Æà¡W¦ š‹ÆÅ…y #£â+Ý â1½JSj:3ô —Žtåm8…ûÚ >‘meyÓh¾’VêáU”ç'èf‘ë‹ÁšÒ#<.´ñŸŽxql—“›ÌMË@E±3´—òÔ:eBî¶0®¦Ö?#2f¿ðU•¡½­g4¹—¨³fN-uxÙ?«e÷»ò—¥#MÐŽ™ñšF|íȾåÑŸSQÂèwTê2‰_ ¼{M& ÅÒ”;h7 3V„rÝZQÉâN¼e#Jmú6 ²sM»Þ½^~~Õ{e¢Ìç促Òa%Ä<(Ÿ£»ÿþÝ÷:´OÈ3Âu€_åprñÕYZ[ÞRÖa®høí*Ûò…J%p}¹0Ð¥ý‹S°Ž€ÐzK{©m³?-®{#\ö@­Ì -%oÏz•³Ó²&=%ª°¶ïì5ˆÓ·t1À‘bÈû!`õûÁÒ­qûôÒàòú÷+TPè ͧGíK*% Uëƒ&çï‡Å Ãôˆkœm£y¸uöðàÆÅUçÈfK-s,'Íì%Þ£0cïh“8Å(hÍݵêÙõáñÌ€©r&}­?ØQ¤Bu•+Julígв˜ø*]¢ Bò§A(*ü­q¡˜dh\TUš¬bkÌ 'ë>–(áJNžòSU=©‰/• 7U©¢?(”jœNç %G#Œ„j¨—Ÿ£J:¥tù„dÁÞÏâ.Ìb@o.õU„iÀ,äŠfB.0‚Üi•@~:àÚ _åp?ÇÑ!WBºÂ•桵Ü8‚ú°ÉÄ!“•¹ƒý+]ÞHL~ÏÎ7\ÓHaß`Š= 5‡uótÈÄ´~D¸À„¦©ÜåvZJ:ò̸­Ì4˜ÉÅ8çðÐ\8kžP1½±y²þ»Á£@–è\ªv×6E‰̲;ŒBBàiް¯º©”øQÍ%[‰£”¸³¥kxz©£ÖƒÔX£…Aù L{:Õ¶D× ¥ââ\xÆ8ªføAŠOFdVXœTÌÞݬsä*“¥¦è‘xÎá½ €…Ïì¨áú\;Få½jÈ-Qq ÏCB¹eHtV :Ã-´Ãœ…_ ¯÷¨~mWaÜwÆt^6¿µ‰"[dŠ2eÜ;J-*U)ÕË~€U[x9ˆ} £rAjÂì_ôÇ| Y3vÃ)H4t„A‘Ò³ÿh œ~ î5çéŽ]'Ê|b–5cnìD™/|êŽOýÎu}Òw7<û4z<š—11½Ž(T£I“žÕ>d—Ñ0ºýµ¢ ‡£ÅkªÑ9Æ ¯Âغ³Ï%ÄàÕLu(%ð.Ë×È;Ì¢âÛVÑÊSwã€iWÏ=*·3~¹âyESwÇ÷>pöAÖ%9ŸZ¢:>Å7.PRe‘Y´0áËfP´0\Å:Z]ÿ€Å¾×HËé[¨ê+Âþî‡ùLÞùŒ{Ù3ZÅ™+#Â~ô;f¶WJÛDtª…"¼wÖû`òî}¡€üþûŸÎN-À Ž"Î(ôÿÈ©¸8¹\\LMþHGÆü_ o¬4˜’˜¿¥‹ \)U{ë²la9ƒSPÐ8§à aee ©ã„@úòÏNìSÅ÷›âòÇû×+xýp·ÐR>yó¦êòÔVˆƒïª©Ês+;ýN”ô÷ôûxbaêM¦ƒ'¡¯¤gÌPôšÎ9®.‡$§+µyá d¬)ÀM@,ÙݵêãâïLÈà'µø‚ëŸrT ÈrX<È— ¹ýØúwAXT—]îZa[֜圽æwÏíÖùúY¿ÿàN¿ò8E@A@!@@´þÏ$JÄÂ`-nï0•·±wø/e¼EUïÙß«ÀtÑE§À”+)!•@\,ü’Ì2Æ!ª¸Ø–O¯˜bÈ̵ýc°Bøùã‹ê_[0^ ‚ÑûfËûä’ß}vºíÆ TsØ’£Îxc”—áú 0X M¶ÔÂhgP6ëgš)ÙŒˆAAûTý˜ë“rbâšô‹µpÏAKÉ›ôåƒC:­åï\Cõ›‰bÔ¯ðXÍ7cZ†1H ¸k34h5Ï$¨JƒHµ?ìÖŽIô.“"7D²`Øä@B m<«º‰Ô6m™æýÞZ«ÔwµÂ¯´*N¾Êpᙜï)öšÅ£nÅj6ÏhoâxP{ú8‘ÒIvYf£ *&8¿Õf€*‹›Ù…[ µOIÁ0HØÌ isO»ÉÏln]õv<¾°J8;¸º.èfÒÈ[ò§Ä¶"™0¤'5ƒ).íkæta×JGi°Í„c›2«B]¸’³¼{ꩊ»2ðw\>Ùˆ¹P z>·;p½£­AÖ°sÿpË»O&, FàÏ¡ª)®TÖ¾ZríËdP°wU¢”Ò}´Nò5|êçÅ3‹ÕHfMz‚R㮦M°ö—TÍ÷Êv…q"=Äð,:qˆfœÒT‰4;„÷҇ĸÚy÷~pì1¨7».nÝÐ@qØì±kålþìËQåiÝtžáŸWÌ@’l¿Y¬J~¤›#ä8Å8´.ØT ÊáS­ŸÀÏ—· 7Rfvî ㄉ¦=Ë_óýV©!…ÂÅÍ|uL®0ÐȇëŒEÎÀ9NbþŸ34ë0TL0HÝÿ3÷úŸ¥˜‹“§˜«í?Ä÷_Cƒÿía¯ó¯«ýUZ’ F“ä„ÜB?µ1`5R˜JÁFE†SfªœN·iÖi½<ìFA¢„ò43LhÊפ—ÿ‹&CÎÍm.óÁ|öòëóéˆ6¹XØbž’ /d'` çKi€6ÖbTÍ~_i•Ý¢½@éØ ©- Ñ8¨@Is¶2a‹# CDÂ,´o¿€[ Ü‘Ša 9Ž ±•€ KÜh¢¨¤Õ=o—Õiõa?==Ëñ9dîù•RÁ¾K×j2\ÔÁYòn-Ë”ª0U7µ[=l»ªT:é=w€m%ÉÝS!/ :S¥ 0öƒõp¼·|nx¯qŒLËré.ΣõÃÕMY¨,SÎbÚ,#|œ˜ílË]˜Õ*ØÚmÓeUS¸ÀV:bJ9}جÇG¬Äe¢Â{Qwko•Å—K,.ÊÆõ»CÛý…5AÎp§} µt"ÇHe½ Mœ †Aás³d¦ VôÈ·òW’’Ó^ž¤>M<*ÒynÁ1ÜÄÐ`q¨Ã‚œúcÇVÔø&Ã%"j1é<í Ÿ…DOfÓòšë%ÚFÍü1Tv¬79rJ̤1ðÔ^/º©Ôp¸X.2ÌìW(EèåÃ&˜Þb~ W|X¥gìm|R'ñ¼û ¹cc|ÍU»{·Eô tlKémTmhí3WmÎè­„ÿ©QÚà84»Á×ô:cõu±ûS=©0Gÿ(r[ÀŽ¢Ô%=çŠ]lœûø÷ë‡3Gösu÷þï¯%ŠÏhzW\(¸š¢/0¹Û´í"(º`¤l!Ôl1ÈlNï˜%»Ù²€ùЦ€bð×ù&ÚÕ®\ëM1]B©BŽ‚®$61Ò"%Ñ¿æàØ;ö«UpS>{“tñuæ¢ L+8ÀÌf}êu&\¬^Ò”õV®öÀÑ[¹ãèCÛŠI•å a(L‡Ä÷µB)º$åžkn)OyÐH¨º+æ»üIQüÈÈ‹—T,—1bšÜ¤ Éi¬Î½ø/ÈÖwø¤y-jÓƒ€Hþ)ÈÿR^µa}TWr¿¾’3;Ú¡‰± A˜IŒ%¡H£„Â#à%-  ö*ÄÂ):¸2#~Z´£ã+kâÝZN­Ú6RWhhU!IjâmÝׯìÜÛ¶ÝÚÝ«jZ®ìVÝ6í®T^xOä)’M‚  úè?¹^ø¾oV¹‡Òwü¾ @d{Aj‡5à?e@xïZ@zãüáûCýU†ìÁïä|hìÐÿk½¾ ¼v™o­@(ôYo·A&o³²>õAê>ÎÇqúåÏ~3X¾&"~cÿÂý¢ <èS{(µò+œí±üSöczÀZà3þýk:<¯ê†Qõ¡f‡qe§-èݯ&k÷õV‡Ð¯,Í¿¤»„©»¦¿oH<:JFÎ1ü®|´Ê .ïîÒ1t €‘òÓ±6¥‚_EUÅn\õ©†H3ãWpNiXª‰niÕœˆÙ;Ú¯äéû ›[ù_òc›0ò¡ç©ˆœbòU'2ð8MôAÒ§´*3ˆ'ÖÃè  ‹rP¬´,$å@²KÔõM$õ@6M :ÕËø8à6.'ÀÂUpšd‚€6‘´%É5XИ–€Éñ«©ÍDš„¯¤YH?>Á–ÖÄRhŒ-M|­ÜÉ֥Ɣ^‰æàª¨/ƶjN eë¨C›Ôä7S#+”Ý=¦YÐ<ÿ|"!‡Ô(5_G^dž±Zòbص¨œ~StñÈ™'¥å ;‰X“¬ãï4ñ&J‡¾lL¸PàÀ–½_Þb”íÚŒU³/x˜OK3) „–ùë5+0•€ P¶·Û½Ê"¨ÑáÜ Ø“¸Þ]¡Š`\Ò ¥\"yà^¶çê{{Ñ)ÎdS5»ÚzŽã ¨ót{.îAžE“Î%®èszg¯aoê?š7Òâö0»¨,©‰×«è—º6¥[%ÜǸT²Nó‹TÇ:¤Ü;ÇJ¯Õщ;ÓÎZ*‡R)*ÝircÜŠ#— 7¤H 3 ˜ŸaŽ{ºR¨–{-’¬Ð—c Œƒ’dY(¨pxä“b˜M¨n-ÀP¦ñdrÐÄù6ª Ø¥ëƒÎ†JVw9©ÒTˆ:ÞÝlÝWVÝ4}'‘UÂt%yUÅÓxê´Ö»Ó¶õÇC[;ߥÛiÄl 5ØÈ‰¼ÿ¤Ve›­$+!‘—LjžGªuŒƒNËÅ(©ïµè o徺7~¿uQVäe¶®C_r,h ¨5aÙÈ‹þ16½Ñìä«Oê<@~@d+÷œ„ÏÿWLn!ÙØçJi×…MŠ—¡a?7ÆkcÏEœ { ÈÈU0œÖœ¤+ÕÈQ{Zû¬ÝãÏßìø‹H±'»~ÈÇk–­ˆlý'Iž­ÎâË`‰»šÛ}¹èÃüíٛ𷹙LÞµûý”"¦ÙÄ ž¿Xº›ÖVTƒ¾àÀßYtÝ")i–1“ ©)¡…nÎ,¶Ü ~à„äa›a5Û@ƒ®l롊öpE©Ð†8ªqÛ0&pÄÂÂc*Ÿ¹9…?ÜàˆøÁ¡¤WñE°ûT6¬œð[ÈÛFmÕ€#Ë^m`¦‚†e·(¥b|ìÄ e¥Æ^¬$; /¡^E‹å¸ý²eõýgË4¾©£€ ¥tæ€X—·Ã~^Áê*¶ŸLSb¦Èãeù3;Úg;ñ8…aÜ[þ^#[t³ó¯5åÆ*–&Žf\ý¼zäOÆYŒŠhplPhºÔì-ÚG%=N¨€¾Ä)QV9·<·ªmâ‰I`lzO\t"~(ÈÐå W~÷Tˆá Zt÷.fJî *¨vìJ„Õ‘©áõThTpî¦ \ÊTª<õû¯[Ø,ñK)"9dãäVmÞ¾–~–Ë?^]êzéÐÊéjèT K—C¦ÙÈ£HŽ:þº£Òö¿‘Ï“ðõ•DÉ€r“Ž•h=pUZC ðÏ ±²X<>A̧Óüda3÷‚Æ—çU[ÔoÛv¹nŸƒEÜ>ÕèL³󊜴ïà´OeßÕÑ{ª²€®¾Ö+3-@–à¯æhô"59^`š7å÷õÉKróY™ÅÝÜb#¤ÅTݾ¾"áîk{»cßë]@N´Â8Õ•‡¤]ÿ*A¢Î-ufü$©‡,ÁÐ’ÂdÓkŒ¶Âçmsw\ð=€Ô~/á!\oé®Ú!®½ÒqÙèξï\ËþÚ}ÁÒ}º•ÞÂø£{9d£ì@èSü®¾xç(‚U´÷Çï}w%FÑa…hFæÚé)zÙÒºõÞÛÒšŠÔÙ+tÂNÝž*é¼îô4~u"-u% ýG %ñØï[A–ø¨ç±1_÷·hh]òÒ)G›MYäj¶ñwÝýÛ€ÅU°Rs[O¯Ü-7zlB:K«êb7iØ©Nb,3ÖÓ.ïOÌÐzòðÑÿ Wüj…ÊñJÇmà˜«;ÁꊧnqmÖ‘èK—d®fèÔ#ÌP»äF#TTâ^áˆ"šiTÏóp}þ)ѧLp€² ÜÅÄI@ Õq•`¤1‚ò„ŽÌ¢_þ’ºüAû7µW¢ÁDõ}®hÉ»åÛÞsjHK·=u‚’) Z7\Dèj$§|ŠšÆó̬ ÿ@¦Àp¸gnÎÐëÐbΈ_íV.®WLä#ø‰V3äFq«®ðGÝž²f ÛW>FïœèÌ̤6Éjâ» 3b¸%–°+OíXÌÒ¦ìbKadZœ¸Æ›¾ï›Âß·ÏÉ8TÌ¡¼À?Ƥª0ÑâºÁ¶Í°VyIèÔß—d€W?[N–áÏTi;ˆ$œ\ÎQrË”ÙÊî_ӥѾqÚ˜WvgHñG£Ï!ë ¯0‰çR¼©Äé•Á(EC­\C*ËÕ~DÔ0ýB—ö <þk, ó‹jºu¹ƒÕ 2`!ú…òÅÎqÐö¦\À~Ò¬/¦§¯½ÙÌ'ú’R¬×y"iÍ@¢(­}áJ¼G]?Ýí}úw„Ì9æïÜÞ÷Ä^…3+UÌ Õïø!Ã?q×øBLjµ’’¶ÛJq÷À¦éñd0Æù±’|¯LæJ/G(Odš‰žœ*ã·•–Ä$Ï+ÃAœÁ:ü”;(s£X×hŽZT5ÙBýwçvmçöîJamn ­öá´…Hám’jÏ>Ì'÷ñ󇠺ܚÞx%cóÍ=Æ+ÈÕ~Ž ʵâÛÙök+L2Gpl3LzÄ01r´¼Ñn¶üÍLhÊ5Ó“¥³+1âŒ}1pU§=¾†Úm͇F¯ˆík*AÔ ´ÝÁ³IF¨ÃC8K,Ô› ô¸N~µ•s±‘E§N×$t,¿`O#ªÑ ÎãqÃ>˜ :q¤I±«KǾ´+Ÿ×K`˜OÆO Ï”L‡N݈~ZgU -öàùV/¦ïsÑ(°âë–4ßß d¸oÜêu–9©Bƒ-èuj»-µØMwô³(×ÐØÖÅ}#t·qe¸GoÐëUßÙ¿ÝÜÜ–ä„VÏu„†ƒn𮥫¡Mžƒ’ÞF>31‘Þ¡aE¦wÝô§O| &ýXˆ`XI„çºÀjµM']óCãÕ¯OÇM µGÑuíiÅTÖ õiþ#ßœv¥,D  ¹o2½Ÿ×ÝwççúüÿÂ÷ëûâî¨ÍG'×°upä Z2ONy02C8¢¡å h5˜éf@c'è栚I¾ïhÌÂBëªÞþ`€vÖÊ@ }“Ì Ä”…UQeSPK1™ž¬'å_…'³ð\¥=s^ª½¹ˆNÃL×yÁ¤ó­ä0Z?–Êl³×†J¹‚ß?7nç0æVwP•õ›Õdsƒ{t>xÛû¢6#t5XLlÃs®æ´õJmî—;Þ.4RÀ’³›³e´ø@àêÖO‘OÝ=^€+çÏaý&oÅ«T ÌKSç¿Øà¡'ïJ ;4k¦2’c«d̘`XÎìųjÄæØ@ÖÝQÌXšå+̰†1áæ\Æ»K.×såÁŠlÃÍðeÅKFÜä0®8¬Ç¶´€î#Vq¦)I¯ì¤†.ówÓìõøÞ_ –‚·1Æó„],s(×öÍá4ç Æi¬©'>óR¤Ó2  ³ãŠÜfç„‘LigÄ=ªÝ:mÖŠñµfUÆ6IbTú]Ôäf§ÂˆÛesÝ``U!"/ù¥îAR“m“ÉÚX·²'ÐFý"’{l²µ'Øœ¨ÃDWco@ÃNBµ;å™­ªñŒjJ•Ñáw]`ìáO 2Ñwlš4G•‘±WÑ‘² CóWÝW;è][t÷áS†Þ„»’¨:&škt{@s&ÿòaªC>ô1%…úP§ð½Æú¹êuECG¤)%SÚùŽ[ þòaõÉN9Gòtôµ:J—P®°ÁPé­Ëî…jŸ§Õß³@p»§’¹Ì°§+6ûês–O^@ôµ»ËïFsXÜAŠ ¥lûŸ…Uªu†'^L­ù·“µÌú‡ê}t4ĺ۹ìhÔ“|›ñž¹pŸ®š¡gÜMXp/‡<£¨NΫXe3ŸD/!J[¹ÊkȬ$•/s9Ûe]_K]Õ¥fC§G/DÔ<ÐR ¢¯1"(zaöúG—,…x?z´Ý ’J¥ÖaH^ -ÿ/ÒÞ)HnK-»Vñ+Û¶m«lÛÖ*Û¶mÛ¶m۵ʸ»ûžÛÿ¾ç¡ûœÇ1ŸfDæÌŒ1r þÂctÒ-ñ«RDs5(äbÞ(ŒWq} ‹¨=VO65Á8A~ÄãtsŒ~W§#yÚêÌN`C¢énÕW÷3oê •JXË8 ©YÚM#øz1’W8ž‘Ð0=‰ j‰O>Á˵=P áùþ|uªg áúPzóugpìƒò5£!å{/Ê*óP\aG)9×ßuŒ¤µHâX}‰hs1gJi{=䔜Jé„Y¥DèY?nm¨ øµ šË…¾xÀ(qp󘈢÷Œ´ÂÜ jÑI/|[΄·žtñv ,qÈ+„²Å V%稰8Å…Lˆ ®!›jâsÆ^ÌW= Õ¨ÖœßŇŠ7ˆI¸›a:¨×>qy_ššám‰dµŽ~ËZû‹ ­Jl’É–ÞØC:$-õ%wޑ͆­Šx«X²ôF£ñ!X¾Y›ékÅIŠŒ·Q¯I¥ê R9»”jЋšù h±áh×Y¹¸…·½g@RË߈:ÞÆ%ŒÂSÊg§ãb,‘:ùU° ÆEËPùQ›™Æ—+ª#—ѼÀDy¨ÎæÇéêm´¶õnÊx…>vº¸¬5×üÚÝ¿uÇð:Àÿ'+«þ‘,²ø#óþ°ñ?BÈÙ*VÿoYy!äŽJIåè¸1)åØ#<*»Ÿ’éô°´)¹dÚ56Eþ›ô$&ê}ÿØ]…Æ¿_Ü´ÁÍÍkf=±óåù#vVXæ ="‰'‚ ?¶*‹‹±„0*)¢)â ^QfÌ@iµ„ô > ¡‰n3Š6 —?tÆØ0âF2Su­žÙ,ÕïØ:%”îj¨¡Ë2¹Yb5éb¤ŒäÕ2Ê{l;¾Fo?ËüËZmiªA‘vUªåSôª’.Êg‘U7ãfcÉ Ü ýì3´…™3¤\Äu—‡~y$su=xžZ¤»Â±Pè ­r†á3³Í Å­]«ÞUb_´Û\5xw€‘‰{®ª7‡Û9HÃn„‚î4 ÿ°âç¨< K燻³(ãµÕÜÄ:}ôµx*JšC8u–*Sn| zÕUÊY>IRj³¿Fw;Í(íuõó2mTY’Œükµ(Øàî}‹é‰kKÅ©mŒz¹Á†Ë0 HÉKq9EµêÌ=D—Ý!Òà™_:Øàfvj9€\{²œ÷[|mKÝoùˆ'Ç=þÄMÍ¿ãò!B/)05‚Ig[hÞ EmR̤´:5Ö–g9j}ÃéÍk]±÷ ´Îó—1¼t°ŒX#ç&À[ˆÀ-l~M¸Rõ]XÕ+aŸ^ÿM¡Š4UÍ0 :)¶i;›ÅÕ5~á¬8ÝWLÇ5½K@H¢¤V‡K”ƒÿºš\!–Miz´ ¥É¦Dytn·¤÷ ĆÕ‰¿åz*·‘„'˜JÌC;äÊû‹dWŽífÎnaAa0 ~AšWÞ)ø ÌîÒvpY4<–l4fÞ7*¦ðÑÎêouÕ+äð¬Ài"r7:b÷-3þ'Ø?1P¦!åß”ûßmãþ_øÏªìÁÖÙé¿Vðz£.ã~ë6Œ[³%Á‚!ƒ@@Õµ¯Lø¤ô“P TšJ„غÞЀtÛœ T®(Õá-mXbW[÷••©šÛ\ØTÛ,["lV¨ZiY]ÎßNO鎇 êëít=úyÿ~íò=“(Þ>HDŠéº·‘~t2…kã ã½Ävüd –æ^¼ãBîF‰¼éD&×ô™!ßšQH'}*ÅÌ å>©í#äpÁÞœío˜iȱ¦?\½E$x MónZ`¦»“¾Éf¾™Å[•¸h¬K€g™Yé,ãin’yðr•My œ{$³Øº®¿X¶Ê”«Ñp3;Av†c«‡ÙØ’{aý(£Ûg¼O’xq³a¤XBLà*˜ÍЉTF2b»nqé’ÉÆ¬Ä·½s¡¥XÜø„MÞ‹ úlqÈÐ$V¾rL¬Ü° £¦£2ÂÁ°‹Jj B ¥‰T!%C6]¬6G;©‰¬¢ #ƒJÊ!’hB…Q2©ò, Æ„ªåz e-Å–‰È­À¨P² ‚¢.(³ZZ#hÏ~ß‹jׄW”¡2«0*O)Ý›hWÒ?3‚—€Yý‚økK«ŽóWi‘å¶(QU‚=u ð‡È»¢,ç%.© 5¢LU—NyØZ[–˜ÜšÐÀ6“z°^A kz°zrlž¸â.òe~˜Ê³É\”B;^ÇÑ7&´MT_&\U³)T­Œê$bàB5“„<…òîMŽmZ¡N€ÆĤNGißm¼ˆmb•„?;J ¨–]Ë®S7Å(7,ß“Õ1Ö ¦kÌ#J©< Q¬ ƒ|80'º®¦b°0Á™@hRAVMseô4Gg½0ÊËä>îk|ÁîèËv°¼™Â>„Í‚5Íí•F']2óoŸ}p•¼©dR“Ý>rškÂf1y-sùéÛ•šêE€$©U|ˆERC“Êt‡Gko°žts8qõxhdWâëg¼)Dz^|—•wôú—‰ÖĦÀFŸ»¿ãÈÜ1(›(á†×Ô.D]å24 çØõJò~xhΓ]f½ˆVâ| Õm½§¼¾5¥V¯~½t \|γ!±6ÅÙ6 t¬Î0?ój>jõËIÇ•÷’æšÒ*úH­XÍ/]mªÈµ£6]ßVÂߤîÔü¼?»' <ŠjXÊjè\ŽGâQÄk]†ãÝ€ ÑÚ!óS: ÷ø”t2üÁ——Üåß,](DÜP@ߌ œYy¬39:aP榚Ùjr5̇qªú½³"!²F—›ÃNÁQÍÑf­GIƒü ]5ù#YÐù$Þ^½ÓžLn‰_)«wFïÚªvŠƒ¨f/$çªs‚dûÉ×ÜâG[r‡lŸIàXÄÙßÜBƒP¹w3ÖôË6"c”ï)½78_‘R §*{`‡G´yóA1|âtf–pFÒpœë.y#1S>¬G ˆ‡«§¾Pï 5%#´$ýg‹’‹ÁHÙRIPï0A^Û¦êMªYÉDWm„› J,âç$€ ïÚ÷YCÖ\µ±úNïÁ!Qz…‰cßÑþ"6òFËä‹Aü“B_œZ›L•^Œ)߬9Û ’2æ¼@­"ÍÍÏIÂikz^PÅ ‚5Ãú0ó ŠŠgˆÁÎ!Ð,öœ´ª‚UTåSŽbè#?©ÄÈó$ªm÷C¸¢3É¿nž¿uŸ¯X×¥-lG—U¯áÏòÚÆï#$[ Q¤–†WôtÍ3’†­Þ®ŽQ?`"|H×u²M$%É÷©Ÿìâ Úx%S¼pR&­bòͳwÆAÓ‡¼°<~_Ó¾‡N25çZ8ÈìN œ´5è 5 ºâkèjK³Ô SâÛÚâÍw‚¸2,ùrc¥¬2Ú&èFÕBô(ñÇZÚ¼W;ª€¶íFeM8EQ¿Óæ9ÃÒáò4’¦N«#w3€—ðâëàà£j¹èfù jy<0|ý[:÷`Ýè©ÖÓ‰íùOèÇ¿Šé¨×ŽÄÅ6ýÝrœ‰îžpÚË«o0LSn›ò­g 63P/;P)œÎÛû€l\ÒZ:2o ðo 'wcEÝÿœ–l†¦eã•<â’ÊŒÒØ§ÌÌŽªS›ë¨ Ú×ö¯Òðïæ‚Y÷é­w¦Ô¤ S©®„oÁe>’^€mhßÄl·`ÎvùHTñf YÝWm3,¼yÏò§üý\Å”z~ó$Ÿ#—XÝeŒa¿<àZ­ƒ{Áj‡×ÞökÐiÛTB*“n;SLHÚå8Á ey#@s¨bú#še`'8ÁFš"Ì+J$¿È6;§‘[l“#m¤ÉNc#›ÜKͱ1”•A5Ž'Úþ9Tÿ ¡y3¤tËä9ô`)Øò¡Œb$A@NûÈ3û >Ó;œŠ±BÏl¬gÒÕ•…@_ÛrýB:µD’÷áÐا ©~ sÀaeþàÍ)ˆpß 3‘/•ÕŒIä3X³œ,ÎîŠÇ{y “Ã_˜²–kýhUVÙZl‘Ÿ„m "‰ïô9NP•c.]4ª±I[ür+¡i™f€wëì›?Æ€ ‹¬Ìu¼p›0ÊÈÞ©\`‘á³9ZDó}jî AÇ^Ú~Ê%þâ=™¦®”–€SƧ’»x´a—Ú K6`` IšV¼óÓQ»[Ë:·,}Κ8óHU,½Ut±ëØÿͧ–Æ&Cž}Ï«ç8Ðè:.Lʶænuæ¢kô~çzñìZVhëc‚({YÕÿë¸ÇÄÙM]¸Qú°²¤Xç2}œKa^?äGT§t2ñ'%}^œetÛÌ$šRx6—t‰©³Óy›¦Pž!·Ùz¥׿Ç$±jɲïð±YæÒ6Yêw•Ð{šC†í0œ™ÈjIÙ´}H”õï byiÑÍœ¬³ò­d«õw¼Íë“€¼nî úpòª.[dmL“£–A)„Ì·€Kü;M­lµ¸5ðòJÐ%'ò7dÖnŽÑÔ,rÒÚvæ+MåtZµ–†pî4Æð˜~Ö«‹–͇*ÁÉãªÄÂ`'jFSÀU]ºGoAÒMâ^¿<àSfx–±äð)4ìñ©´wóRnèÏJ ù Uf5m92Té u‡$Ök¼/·¹rb¬rüvøË%¨»J\´Uî!bÊ8¨Rõ&ÙUµLvû6€Û½ˆ€šƒì0– ë2¥€:»yK°RßTÍUE¨«²ã¬%­~¬Î¹Þ¶C¦’¥¨¢èGlØÎAË]x8Ð]B_tÜŸp:ÝàVížûS·_åSä™üSƒÀ£3_ù][Í^yXïžp»[ÕÀ$Ýâ Ís§ç"æjkwZt¸¡9BêGùc7-… ‹ÉiÙ¸ì Íãi, á´435µ|`Gvù­€øƒèP>ÿ=;¨Ô2¡Úl׋5c;¸Â\%ÉÇJß|Oygýþ²b HÌëŸß&Œ_ìwqÑïEÙd'­q[ÒÙ[ogAf‘Ä|%Žšë÷²Óšëë¿eÏ>0˶|†\9Gg‰§‚rNƘ„õMSüŽ¡ç5{¼É²Ôj!1§MkÜqOùxa#£®]Þ‹œëvqK‘¤Å_ ¶Â{݇‚÷wväLMÍ$º–«ÇHÅâ©^xÈü«i§:”¾¨mÓËâÿ×Ú™"o¨%ÿ[ïª6Ì™ÂèPŒ*­Ëd.XLB‹59ß,ë¯ngAÉ‹r ‡ý‚<ÒOqiùUq:¥Ðz±¥Àã·>@tU±©¯DK;®Î?—šRd.rºlëiŸaé³-lOøó4èàñk甃Û÷þÍ€ÅáªÅqW~‚•"ìÑÍ©ÂÍɬª–yCÃ@”|Qu5CÌÛá!BŸgRÙ¶6/wL•„J™mõV¯"O¹9Ö²kÙ7*‰KêE;?ÚtG€w<|±ö¬Åò¯"6_DöÎéœéÕÐñø¶íU>O;öÐèYú¼†¢]kêÃe÷6Ô³â.Å‹¢ãÍé;Þ©Üû"5ýÑɬޅö±Œ{HÙ·Ažî\]=PØ´w‚Y|G$ K>ˆƒØL²=/2ä8·d~Áÿo¹boøÉVŒ®èÌAÂB矨_©4VÚÌPãŒ7±F¸Ž95ª=ID—ŒræE>¡$sÍÁnE¢÷KË3­>1ÿƳ“ÝþÔÙ›jE^æŽ?öŸ÷fʸ¿ô^_øI“›ûúX6ÜP2WrG¤š%+®iËo¨9»‚×@k‘kV1^V׋éˆÂÙ×éQŠZÕ‘í‡%<9û—¯ÔWÈY×A‡PÝ‘ ÜÅê%£Ý=Î=Pko`Ž©F+"Å£‡eÔ°“UfÑoÿV_¨©sV§Š…þV{ÿ©!~Û(k‰¢ú¢%l!ÒÍ=,<ÿÆ^Θ[ÐR´’þ£IÅB›"Sm—iŽNÿ2²]Âu¨w_™û…lj,öu{ñt5 $0ì!3Ó“eæ6û˜ÅÜùvzŒïò Å -â0Ûç Â;F¢o0ÒWåßf؆?zÚá“7ÝŋՓÖ0nÖ`ºÅ™t¨"aRµAkö(“é+£Û¯÷gÕcÒVâÚ¢…*ÇÙÝÔÖ0Ö¯„…í)¹¿YAF0 ›æÈA™b|-Ï¢§~¶W›Øq3V8¬©®ˆÑQŸX<è‚b2#Äú"LnQw ™:vzçnæ@]MÿÕv:r¬5<=wO–éèCÔ¸› 0 8u?p°©¥8‚ ï`aÎz”ñGAÂb'ÇüÁÂæìénHñQD^þÃaŠqÐãL3ª³Áòº£§\¤éb¦äZÞ?²s¼ {Ü` œbÐþp£•è J ~zs18«–„qªS&ˆØ<ô"üKWŽlS3t•ÊGެ"ŸCoÅ#7ª*ÒÓ¥|ï®x´ÅUúŽA×…:÷Üœ «É71:U¸ÑY€j|Ò„æÑK&mH gxå+](ËÓϸ\"èk(ÔàÞ”óÄ?îV?®G>iÿF²ù–q˜¼d^°ÝÙ[(Ã3œÂ¶I–³ßþìmr`åmt ÉYÌ…Yc\üd²P ë*‹|[”bÏ%é’™@½›ÉzŸ½[h^ĤêÙ¦Jk¿õ;Ýrä]¤Àç£w…mðóGêXÛ‰9qß’j[‘Iœ/»<*ÃAYJs,1 êõ»×£ã/ÛW£rs.çrúXî ÅÛNR £.é{Ræøe]M¹é›±Ü^fñ'—7϶2\a¹-áˆ\ä¡+e"Š«2YŸAmªü¯¯÷»Sò³x…5s@ï>i~k…o‹,™â\7œGzñVÿ–Ç-½¾¸ŸþÿÌÿ‹Xþ'ü£êlaý¿j:ɪZÊ8ªˆßh®ê ÖèQ5tÒÿrotÈ’2,ã X CÒ!ÛƒLSUN„ˆµ’š)·–9ÞO¤áåBK앟Øß¹™w¨W~gß,.–~\ÖvZý¼^žêe |‘ÔTŒçéW‡2îD@wQƶ9Ч©8èèÚ6•Ý»"/R6ˆ W“ìHl£ºJö¾yëᵪb(͔ԡI)¯ÑóÂPEpDT2X*>‰)CEÁË€}9'§“†;Ô«1Z é¼×’by? ÁÉ"&x~ûà€Áf½ÐÂJ“5QŸ7ÙN–ô뜻ZHY³‹‚畸¶=Ô ó Cõ,À‹ÑJi¶ÓCˆË¢½¬Glt…ZLKéó‡”Åâ©ú åÞøR†"E0ÕÙ”µËU¶âÜÕð¯óê]è-@äLBYÄ¢&ªoñ™Nú­6^uël ‡´ ÊZZ|]f¨ì擸D6¿Ý‚'Ói›¨ÁÊ=ϸóW_ÝSUvsñ1æ:ÒDÏÌÉE¨«ß;Ǻä<ºãÍÃ)Ü™5MÕYe¿ý võ7ÕzS½(2Å-xËN{’ò,&¼!¸v‘aIË‹t¦¯yíÇÓéâÀQ7É{±¾›ÄšÍ‰Ãn¸¸ˆ,»o:RºÄZ“lÁS ?†3•VÞj‰"ràyxüÝ]_ƒW±’®Þu4Ââ±Bâ¸U ±còL]ê &Ĥʼ-2õªÊ.4$Ö!#lPÍÀEÓÅæy¥—?í·`ÛQÜó%ù« ^nü]`GȬƒ¼`‰v2‚v*ë9zÖÂDïqF†‹ŽQðc?Å—Ût*%ѾØI—Ä”ø€ýkÞÏÏ´˜ì9J#,ÑìÖö±Ò(œÕŒº¨?«šCïõ‰½Ò¦eH–SpåcŒ£ˆšMB@‰ýÕx ¦…Sg„.¾ éÅ—’k}OÌûQ²’D}Z \Õ–N©,åEyÕD-‹»ÐìÑ•‚æ$¥öŸ‘Î4nF(^FyÓˆÒ éCEußþmî”ÏÄQû¿N8À@@‚ÿmz”3qrþÏ@¤˜£²³£‰Íÿ7¥ ;ºf@1Èì+RLPZÖ*6ÉÆ2žœã…ÎÍÑ )wzò.E‹Úm "å+§öT @0ˆBH&LYy3j5ØpÀ}væÑ‚úz#ƒêoŠ +õ±*ru6å!LöíZî4¥Pnúñ<yMðßf•ƒ‚‹®99c1¯E)j_ïl20Dìêuºdç\ƒ'hRº_£ Ìòi?Ñ}$@X¯rÌPùÍs¿Ö…ÈÝé­qlÏŶÙÿù.Â;¡‘@€  €€äþ¯ÞEÓÂéÿ—Û®þ­%¿$€úmj¬d (ÒHtƒÖ\µÞN‘*ڎˆq_Ns¨Ô°i[B[ðý ÿ¼ç5/¡q"c DxêÄ OØËvX›~·1b„·ÒšFý¸ê:¼3ÚnݱÓÂ)†ƒ:2æ«2åλÑ<)Ò·¿A‡øv “º„Á´ýò¾ØBY¦”åÚ6…d*ÎDkjP¢"ë‰GÏ-…CXy¦á­JOóè £]½(;%+‘=ò±¤îˆk+Jò.6%³ù ½ÄŒ“-ÍdS; ]võØ™¯ÛGI‡_8±Zv²„û*‡ö¹•7 ¶dáÈZÌÛÕÆsÃ1ª¼r½™‡>” ž 1dP€ê+6¨Gü"„aÒ„ªÜw†j­äÖÓÆ½“C¸uD ª2ù ´Gt‘C ]Í}§ð3ChðK“H#°—YKdÅó8ŽØjÀ°í«3p¬€´‘åMÙ]>ÃÙ3ö()Mfêà"?nÄr-Ô¤k’¤¬ÌǤÅr-Pí/ ‘n«Ò—d©a¸ªJ†óòKsšnå­jýEj³ÿÔr7ÁŒÕaŸ´ÿðC…rT»SJT~ák)È ÆE!4‘éoc¤4íÓi«V’êxû[6úê%„Û$ÕÇ®Rïæg“³¹äÅÔd4î>?®´È÷vïº<¬·‡&‹»B´‰þ/yó×Y缈KŽ*RzðRĘX‚dznSÌâ¯bêí áJIMQsÛe¯¤yvÄe£Ë°skÜûRÿg],lh„WܲX¿>M‹ ϵXá¸îbÐl“À=}u¿1X’B<Ç+Â'û[NTOÁ؉ÖÂo4©+$ÃùÑvµ²ÞõFà¿ðþÁ|KÁ$¿Á¼C"èç0’‘# ‡ç¦‘ÏŒ\ÎÌ,ª¢o^P–9pv $\ÌÀ (f3@­ôò÷KŒë¯ÇS¦+šüI‘̦Ïl¡úÛýÝF㊠²Á®Ø,“Ü_œ®Ÿ@R`™øT™’ žBÇдÙYsãžÏM®£'ÑqI1‰Í4qr{Æê$§ìÌìãNаÎý¦-2â«> þ‰õÜÏùdx N þÿ¬ÿW>ê2æ·îsš ³@„$¢vÌ)Šº"*<¢4‘¸=(‹¿~^.›°zǺ¬™ø•u·Ö¦áí“B¤&[sýŠ–þóÒNkó‹Ïú­Ÿ—1ûú*õhæËI÷Ïû÷áWãË×)±¨zµë´?Öî–Í^ÏkZ×[\.ÔAâkÒmã"S'ûØ>3“÷ïã×,ÿYìW!D—ׂ¬·„º·8=Æ»e¬;VÎgÌ›Ô}l¢ÛL&oé;È{Ü,¶»m´C`L<¸¯×8þ¸c“×ø¬÷zÿ\°z¡_O‡¥‚Ÿpü©Çô ¯ÅÖ?Rh˜¯.ˆ•wö´¾»—»˜îþ»“OB¯£t¹pŸë}z ¯•ˆ_´aÒ÷up~†´ß„~ /‘¢?0{»‚Ÿ±öù4ÉJ!ŒIäy]‚Ö¿{Z(z%¾Ëóá¯ò XJ@€Y¥súÿT@-]¦ãϵ9ßâò/àXgþÂ(0t*QnžËh¦Ge+¦5²Ç¯'MüZ9&[  &©2ν6nÛÙv Ø(aèdΞhû=qݘ ±ú‰_¼×N&ÈiZ]Ym¾"KR¸JRè…2¨S¾_µyÉÕÂÚ$×ï·æèú2DÁàÇdÒ©XÓŽR§\ã$s›¾4q-‡@ò‹ì ÜŽÌ!ZvA„j¢£XF‚'; 7´IqRô`>ú}>^ŽÜ†šyV§s@g_}3 /nƸ@‡ÝŠ´0}_¤ÉΉ¾Úñºð¦£\îè4EÒ«2Kbc¦ã¾š¥æŠf:Ö¶g_%x˜Ì?ïŽÏ¢¢Ð8U¾Æê†&û¸€=Eb}³QÒÚ,Õ…`œýo½sVLÃ] ,=à‡=‰qÙÅ!Ò,$PÕÎíqgÊ&ÄÎÍÜÙœ*§Î™ÒcÕáAÆò›·!E(É&ôús—*Œk¿èñ:CÇTFIÕöŒ'ݾ2ïø – ÉÅo‰bI*ž&É|ÃdøÐ•¬Ñû/8:ÅU¦›J§c~us§’–…Á¡?Ü¥†vY£Cù8QõÞ„Ð „×¢¹í鵺‚h±jA\8ðYÈ’Ì4ótО5мøÂ VE¿Êã½/ 4ÏôЇ±k³KŒ¦~…زqEð…¶2­R¤Ç¾Jû2 cd÷ÙXÙÖpŒÎ&¢îQ€"Í`XQ|aMä2R£®»N óaBæhÙ®åPŽ>v'Ô56$}§„B?* ÿld©iY§­jï¼KOù@ź Ò²aÅïæ•J•%ô²å©èqÿÑË WoDrx—ürºÜÍB:SÂeRí×­~îö.JÙM« ée“Kå§WRæÀ ý³…y6™f]ÕÎí4¾úábªßÞZ/kÉ'ùÄ]î׈ýyùI|"þ„ÛMÁCÑ% Ù%B6L˦ÍÃ*ZÇÕË.„ÆÒe6%Jó¨Ñë©òz(¨hr‰·U”™´lˆŽ‹ùŸ>"´‰ÎßË®»³™–}‡Ò6ÄåmmRÛ½„RìœK^.øxŸ²³ÿ^ç:Mc]pE“5F®ªÜ&¥¥üé¼,«k­”Hîï;xø©5¢\ ¹MYƒ烢­ì|ÍR“žüs0#¥¶É%ê)w¯JðëÂ¥úuÑ­Þ<‘gˆ£2Nek#©)Ô=F²$ÁXÒݦ~,Q†ù9cbï–lUŸe¤”Ͱ_Åë%xk¼ë´rÉ„Q­âiˆ³èkÛº¦ºŸ’ÊÞ¥!xÆòeÓm5³LõÀ}ð¾ ³ ›,ÃÙ¡z€ï¸~´üðbž¾ƒj hÛï k^³ÆªÜPùçÉw¶;cñi3^‹Ð¸.ø2MǬáÖbÚêè1½ÂÞy QYc¸ßYŠ®Ò½HÇ'q¬/NŒRĹDRĨ*p@8 VŽ¥ìâ:çfÿVKÆÅ;6hašÛ¬ j;ÚöZx;*·ŒúÀÑZgØ\ž ”oF½ÿí¦‡#1×k+¶–„¸g¦üÈož@Tù’^¨A`Elº†w³•¯6,q qSq‡(Gc²9÷'™¾û‹uVw2oÏgl_^¯_9Ò9£í© v 5æCz€×fŠì Ot«6Ù܋ٚ´V†Œíâ’É<]]üžCúzF:pÂ23]úpLœ†Û‰+_µ;ÖwF±ãâ)³àa¬ |{ò ÝÓ›ÊkÈÊü WÛô!•\šc±Ï@'’NJ*À–.­«Þ†»¢àzÚ†´·5{×cˆš)—ïö·žÑú¼vWʧC¬þ3s0™œu•Œæ€5}µBRÏR¯ä·Þþ'öÖkwîη©dáðÒj¿M†ë4˜{ËÝÏõ“0^$t¬vþ=ãÐ;qáÞð³ºôvŽë•Eùnú`âsSX†§Ò®²öËI]äåöëW–Þ àEíù Ó¿µ³Ø¶×4yPÕp‚í‰ ÐŠ*3¾:y6 é€Ö#îÔ3ku)s€ß@÷öÁoªó ]î+×*ñ&}Õ_{ÊS% ¯ø—÷èUAt™ùíùož¼…}³d«y«¦Œ ,+cÚÆp¨´£¬ ]MØ87+¶t;>ø}äõ¨¢`)ç iáD‘„ë"«ŠñÊ÷U ™ó{bûý貺Ãolû!œ÷ÝÒXtâùûÒ&„>¢,³á'•T=h¢pjAWƒŸ¢)6îºâz(3ìÂOÀçµUïm»á†øºQu? æ=Ô¦ºhÓ/¯|ºHÓ*]XÃÀSeî²ý¦³Î´Ä܆9Çkƒ¼âŠn¬œÍGøM|Ææ yEħéõ¬YŸÅb Îq£ß+Öjyœ5¬ëb-ywNÛÇÏFNiWg±×‹RˆG!Ò-w³7W)&fC²Ç3nBeÕ]xQ½4sd,&sŒ…Ôj³&O4ät™tœåjí<{Ò÷-'}t¢diÏ)Ü÷v ùPIøÜû`.褹‰—ì¦&24PýÜ4›±î?ÑwÓ¿EÂ>¨d=!è7zÕ4†\äØˆÙ~’†+àfù÷« ¥­3;Ü©g±“WH°\Kºµ¦ïWþNh[¯úß[0OËìô:框R¹ˆºOþ®ó%ð»B¶§Ãóß.D+ã3Œ”Žðî².€ç¢•î]Uìu´¾Âì}æÆ;-”7ÛRŠBƒ¢cð÷GyàV¸Ýá]üó`vg¯”¾%‡X5Ôk#˜C¢+4ø֓Ü%!1ì÷)1¹°i'DçSZëQç.œÝ›.¸­¢ÆN´Mvéú¢£ôwÒóŸìB°¼q> q_›cvÃL1z—ï¹»ªÉ|k÷æÄ©Iü™ ÚŠðз7¹¾ÃøÏÝÅiì!ÁqaÛ&³ìVxÖÕxÒ[}¬Vhäa¦ø/_Qñ–ï1~»£¯ºÐðüæïùfÎ8"™'e’•–”=ܾ_À‹òL†kªö=¾bü¦Æ7Ó#Ø.Uh³¢vO´›Ó[–´Ç '­u„“WU¼«“ՌϬ½DMzKÅÏB4F™}Måk‡ c©éÿôÞ/ŸÎi¢ OS Ϧi,²C^ÝpF~ðY©ðˆl¬ü±ÒaU¡:xÆúZXÙ’à—Š‘OË1“Yx±¹_®8?âMÿ°¡u“ ä8ö&æeŠB)'Ýáú]ÜγœÍjæ±Öš¨fÓÀÞS,|{·uºi»>Ÿ\ºÖüÓ߬â3ë=&]‘R0]TfÑÅoôª<ùÜϺÆÓm s!¹±]bRm§¾µóÁ¤™O!gy]ÏCͳ¥ÎÄrÌ…>ä¤$·9ÙëÝa©ÝÛùZ± °Ó‰…ç^É¡ÔæIªKExeë齬ƒE „GhDßÓ‹§>*ðÅQú¬‹@‰wÊ=qÚ‰óéã´¯*öCòŸ¹Pê§õ²í*-²©WîÞ¿Þïs¹Š7Êï¸Þ™8|üù§Qpǃ§T•bt)¯rÁãVê÷°–´Ö¥„[HG†A}žÑÕcR:;žËá$ïòñ ~B+s [xC|”Rd'ô­å ±µˆ—ÿÕ z*À”7B }.Ì5@P0ƒ’0¾9jE0â_jÄy#R gÛrá‹déEÁçFš½ËUgþÁtÙƒ kË|9I\˜üå !_bpn…^ì,u õsNÑ!Ù3ß TM‹#Žð¯Kó§,<²½$o¯ä^ FUåºí°¼€˜øç¢%QóÂÈ5–Ž?#%ÓàÖHKl¬6€Í>6_ص˜æ42± Ø©˜=v¶ ûºèp˜Q!Ø5i®¥>†&dÓ5SΧ1”“4ºíç3Û HV9…h¬P ~*¼é Hã±€ÙqÀˆñ0eøÞe‘s=i`‰h&¯ˆZ[0ŒÀµH%úÔØD 3pÏÐfJáæÀ(J\§Ï'\D¦šzïä9i(äy¦±˜Öp×\F«o4¹þ÷J~HÈí.\†¯YÕ;dÂÛRÕ[̉‘è-Šf»ÄhzK!±åpjS }„ØÜøÄLïhKzÉ#X“þéÛ羚²*vÕüžËf§h»è‹î+g^³›”r&?ç]QéÓã@—.7ÿÆ`Å2UfIU£1.!O'>!—€TÐ+; ìZ2</A)Þš0¬ ÐD-3‘®„Ë7PÛ·,¡Öõg%óx-åðqA«»Lù¡ùüÊS"\³(óE™»1Ì9LšÖ R åVÿä×N… µJÞyåÈÖ½ô5£Å8L§è½t}!‡F‰æ~~œé&õ_°É:Öâk0²c· þЇ¦;s W ¡ÿ¾xøÏqÐÿ{ Ѭö¡Œ¢†úMW+»rLƒ¼1·‚XQ¾¬ >D%N¬ª^§šZ4%žpùàT·æuß®¦^êÈ0*„m¸¯–‹í¾½âÍÂ/B}1lcüï°§ý¦ÃæMñlDÿÝ/?á8íkozKGo:oa,_BWb5vÁ®—ãñ¢ªvApÜÒ%ÞùyÀ¿ùk Š7žå €€fQþÓÑçÿ¥cª^ö®–{W+S1«ÿÓF VOÛ®éŠn(dŠ"$!)­+¼³UÞ44%#A)BHGªÀ¨® ”×5ccvšB鿺 ”ÞkÔÖFzØ Ë‰e“£e«ùÿý ìùžÍì¹-K“̳˜Ëá>ýܽõïeÝþxÅåÚŽ?“hÂÀ÷ ƒ§„Ò”€±¸îãbÓI{ªHÀ hŠÞ*Þï?¢ä¥5ÂÏ-hûÖó÷jEŸÞÅ0îOå<Ó¢ôâ G³d9Œ®Ý¹ øßú&#þIºK q˜Z¶x»Ë%28™»}H\ˆzD1H\¸‰ôúñg\@/åÎáRøKi0žìKkP‘ì+¥p`ÁVŸ‚mkþñižÂ=ÈX·ÀSg݉Z•¸Xµÿͼ9/·fp¡x&±½*w@˜§9WµR»`¼ãäƒm=úÌ­ê¦Ú:êXaö9ߘ?µ ‹Ì[±ã,ÅQ¦¬”¤ì~ÿeo\…ÍÉÖÕ_$²‘eVÁ(T¾‰Gm0Á¢æÂÀs³ÙɽÖÅn(ÚYÙå7qw9:ÁX×zfÜ©W‹º›TÙ±°d:Ôƒ ÷ãO[çDꦊ+O?mùBí6Z:߀^|WFæ=GG#šs«0ÍSn\X‡ÿ27Ë…ÒHH£X$Çåƒ>š.§©Ï׋µ”Äp ²ð¶rÄWid»(5s^†ëõ1[ížJ&UAÀ[¶5æuÔ$`”À÷ÉáÁ02Øœ@ü0€/ŸI¹PÓß`QÃo<ø¨©Á®RÙFužåa©Ž ï2Œ%oÙ7YdŠ—RŠÏbuýÃA8™ºW³Â_ï¯à2UPÙN¦C¸–OFºI‚JÊQv®îÆî–r9[@ÿ’\[b®²ÌæXȽ½*×V$jÎrìkæMo|RíìãÙYÜÍ„^%;µ·Õ H–“@ALGµoe^ì_ ¹šæ5lç;æiE‘֧•^‘Ÿ÷b­Î¾71§…ÊÞMbËßm(îG­3¯®#w–a‡»Ü¶œÜ;gµ/½ÊÍľé¶ëü3ˆ†78‡Ö–/Û^²‡©E/Iþ¥2PgÞ7×¼Ó ãÝ-‡Âv?µÃ•Ml§o›ÿR€¹Q¿BPYÄÀk´s‹ OF•n¯Ú{} Š/”¸ÔJs”Æ©F©£Õ* âdJßÛpk ×`QŠNt±Š®,³ê°cÕÁ“£Ÿ¯‘}+âtï.ë $dÖºiQžÂoP1ïêì`s•TEÓѸ³è–ß·—­Pȶú=ÂÒ1³öÇØrZ—§‚šç½;ú•Ì–ê ¶ ý ½ k í > <ˆ>iuI¢ãY0Ï’C’‹å°½ÇåünVsþÄö¨^-¦móCÑ©B5m«qX…Üÿòï a¡2ƒb B'YäA 0ãÇÑ0ã’׿\‘íƒKqœå&¥J2K°ÚPþ%8è«ä×;þ¥ÅEª¦Ò=3ßSòT w¸D͇å…? qAr¹Îñ;ªÓFéMæçÂ/£ÄjÈg}€°eq\È´&Ù˪Kš  Ñ©Ê8®õi¿F€K±§BGÆ“Uš·¤è]Jôر½Ð—ér¥H¦Èª Ë:“EL¹ßnE[nJ({Íó!ð?}ÉYêûëÿÒð« ûQ»‚äFVʨñÛ“Èñ½i8]ÒWû$,•ŽÀ¢‘†¨V·Î…Ȩ{qù…mÅ%³’ )­sH'{û!¤ëª+Ž‚³=# Páp!ß³ŸÔX? 'ëÂ/‰™P³"•LÍÝNžôšlýµÌúÉ?§žQêàÕå¶Siå¦zjufnoƒpxª”é,ØÐúë8ê˺پmë‚ÀEO‘u%í{Úº~Ëù¼ÌZÕ¥Hοve¿S½7Ù{ž‡"!Œn¡--’§³ ;ÅQ„:Çp˜îÝΪ+Åñi}†ÑlÅ- *hãÀeí¢¡B}&Ì>|öEÃ¥¹QHP¿¹8“¬ãÏ;ì~Ä]æÊû a†öp¤RUëÞ•27(«¾å‚óá2jÃ…C;ˇ˜À âœ#ío•ÕY˜y·½¸nwÃù”6e+Û¿—f‘¥ªÖD€çe)= Ѭ•ì„Ïi&·_cµÄ<”N «Õ©t 7&8Îxç^#blÓ.ànx®òý´èßÖW˸0C´—ÄxJ´(¤¼“hF,­cÔí f|ƒáOrÏÎ'ráátƒ»h8ž&–·Ê·Ø²+ Ó<¬¡Ö@;?æÈžCïO÷´ÇJl‚n‘]ƒÔèdøäºÛËbö‘|sˤܧ> pA)„ïE"Èÿ*ÖiE¢tÞö0;QkŒ¦’»¸Ü¾Ãr*•$—“Ë¡ˆÊ7þMÉzŠüy0\Îâ jƒªo—x î» ª¤Mž+¢Šbäñ•I†O{nVGf¨[¸¾VnN:£B‘ó'aËÌlJ¼Y¿„3áÄqíÏí÷¿ýB½åïõO\¸Âý§õ,;€ƒ³£ü?þ­«é– *í¯ŸÝ¢ü"}zJˆ¸œîääõ͈Jƒh)‘m²]'  ×³ç— ²šZw1KÌa0cŒi¥©¤§)ž¡ï"¦¤çq½Ò\[v5˜˜%å§þÜ-ï©ÇìëÖ÷óm¾=°V|5pÍ2°ðò¾%àìõÐ ï°ç°ûUçåÛÅ”„R$Z¾²§Ã|8!Ü} ×/"…÷‚{÷Ã38`l÷YU߇ %ÈhÜ 3P­“Ùx,T&!~ °dGþK8Xº5}aFšõY¾ÖºXUF¡nkÍ´öA{@Ì€)NØLCóÓÒâÝ/cíÅ ëMmídŽÚ‹´6W]ì¶RdÀ0e ¨ª åë„·Œê´!¤µ&{¨±8tCÈÖ|K‡IvUõ BXh⬱—ZšëHšw¯..ʑʴòä—‚ºfg)hÔ)¢ã¶QybɼLÂè»t<‰œn sŸ5Üã Ï Ò:ož G£%´g°°­{›èꦔhäRMŒÞ1+Ȭ2´j¢ ÞšF:Á"Bë-™4‰6Ó6ï±ÿ©í›‘ÈÁYjE%‘½—b¥Ý1«¦¼T䋯 §¼7uDíÃ-!Ö.Gŵ¨·³oœÊ>»*"º*…e<¹ÆU+‡¥ÌWZt«¶ü;mFUgp99ñš8¬3|u³)8˜x¢ÆŠ†˜É™‡ojX—m™\ÜlúþO%ð…ÇÔÇU‡© zúð^N”ÖØ€Xç.V«àR-Ò=÷¢òŒå½ñ¾8r×Å x7ý~÷TÃÛ¾5;ž?C¤gDc{ˆ˜oØÜ9ÂÜÍÕ<9½S6MûxÅe§qø± ]x®Ì–D¡Gh¦†•tq“¢|H¸-_2²ážlØq¼"öP’6dgsgmÜtÞŒègTáñyÒPÃy¼¢V+5嵘O·Qëø½{I;iã¶æ¯4ŒÆ5äüy;¯nª˜ ìâ¸`ñf=ÙíM]1•¬DIýà ÑZEÿ…Sëá¡S§•\IôL–ºJg·œ1§ñŽ\™ó³rxj0i”?ÛCn¢üÅpþM·Sã°‰(q©)iPíIù¹k¨*¤ÜÉÊ®IM'*Lä)ÃzïHzôa]R,Z0d©'úYF¸ÝØO.l»K¾›{½¹Qƒz½HàõöOî2r<éS5˜#8EP`Úë°J-ÆÙF=P1µ¤óym„¬D¹Óˆ‚ .89ű³Î>Câ>„Ü—½ÏòŸRV9© ½…üL—дÙ&?p´UUŽUï¶CÚï!=]*Ú¡÷} “A -`»×cFÖƒÔ×£Ò-ËVC‹Rgf)åùkíÈ5‹fájŸ¶Â®ß‹Éq˜­{¾"pÁï`,œ»@©:q~±2ñVìDê/2Õ¢± jXÚšp¿€YÓ>ÈQyRñƒb`VÐ 5gu(.|ˆT¿#øÎ´Õ LÙ§´y–)op‚'bT;g`æ("^0P„‡*ß²ùߢU£óåU(íT?:8Q«!륈Îì+‰»Ä:€Þ®xÖ«K9†ÿV€ L¤Ñ“œscyñyóró+ŒÂQÕá ÁKÛ¸°¢»œòAñ›=yœ ¦Õc,Cê½6c" ùÂËqÆBgøXÜÄÓ ÁÕ_ª¸µÉ¼ØÓñpÊswñNЊíËY(©x»÷‡kE(èðKÉH’t-ÄqÅz;AÃͳƚ29á™r ·S:!ÀR:?¨;½áàøSýñÈÍ7sÂä¸1^žXW[ˆ‰ÀB¯Í§ ä_—í¡M9sŸÌÌÿêˆIoŒï~ØGĹ.ç²¾‡5 Fä¹ÇG(ˆŽ2Çì%@TÆo9¤ñêŽ{ð‰¿ê:?rÎ;aßfTò{Râ,+r¹¹¾þ«Â`Ì\³™B)#‰þÿV˜éÔZªùùß©"Ä®)º)!”¤°ù'];™Í2yd)“q%d åp€DxæÌ] em[«FõªŽÍE޲jõZKåG†ÀÅaßÑ¡Ïì4Ô¹*ôw ËlΣþîíwï#þ‹áßï¥l ‚~T®¨š°0ë„ZQH:îé©}UhwXÇ‹}’ò}®=òù¸nÁ8x­”ìt6:+-…è .†©÷%ç·¾1EÜü•»”°9òÂüµ»P®^ªø^²¾Ôù%•3ìóWí÷w7_ù>-4Þ æñ]wX½Õ›7ÞŸù» Òë·4¡ÌÆ…æb¿bÑC®ò°“XqR;\þŸ´äkŒ]…]ΜjGëñç¦ów+Î|EFû÷ {¹îÖ.;7}Þ½ÞŸ™vüí•M vâßhÙg½¶ðqøKŠù¸¸uaDùÍ‹h Œ^u—ª:NÍ­B¥1™ôkš8„ݤ‡Áè£^h¹¿s° WuE7\/r²_yUw)ãžeûÙ¦!b‹,?IQ< ÄqX°ÓÚ!> ¹[¯ –dÈg Æs»AÜ¢’ä4Ôîs £éø´hãÑø²W0ûý–äÔ‘@ôugnÚl]úÍm—’+ÇÑ};HçUÍ«^ãàFÐ¡ãæ²*2/ÈkYËì0¬vÔ¡ïù*ÀÀL2¹§ò6ü·Öû•²YùDör¡¶µí½[r=Gê]M¶é=±Y#zJ7ÕyiìÎΆ!ÁìZ°E&ÐøÎ)w4u°Þ¹_ñ÷ñ2â^ñIÏ–îìðÿ x°û*޽:‰ï½½,ß“Ô]¼ ´;'@ÚmMã¼X1êj%©´ƒ|’½OÄì“ás/EsO ±T^´‡U_QG"[Öu÷€SŒ=Qµse#¹•.ñŒÆ»~i\ +º~¡ ¢r½Í²38¾†=7ꚟ+m¾wôÿx´ƒ‚@JlQ($ ü‰ôMšMâ!Cå¡p2ct÷Õ£}+3ÜWD½­êvýÒÑÑpxѨdÌM]¾¯¤qjµ{5f¶gä៛bt|ûû¼™äì•¶ánÚ[ÝÔ“<§,îá°þTÐty‡müþzØïç±U«{EùàÄòÅøï«ç“o¹6=ä8\øöT±}DöÏþ²Þü-Á`1ÉI¬þ,ß.ß39uÓ5·½pF<8;Öj@Þ@ÖY¯÷|•sj„Ø×¤ÉmŽ$1Â[ÕûÕæP®vûq w¹ŠÞöb½»j“;i0/züƒtV q Ðé²åµ=õ—*^„(ê&í;ñ/¥Yó‘)/å\\õ3éû ¾ê1àåߦ^&SK¥ü£ájÿWþ/åžZÍo´4ÜÞ½9ٖ•ˆMiIˆxÇwþ7úÖf‰JP‰9°4„Î¥™G\n®¶…¹éâ&¢Ý‚­ÿ3l:mZ•RaZ‰Ÿz@å雤—ïÍôÕ ™6âIÎöç¬Ï­ßîíëî÷ZŸà;Z¿ßY$A†4š; ‚®0óÄ»nìÌ6š§<•±AS}%87§ÎìÙBÌíxñ§Â—A“¡ÒÝ„/c$½§2‹¡Ì]/cÛ·ÐÀ”´í"ù':÷—Býäþ˜ôv¬ ü›4ŠàÈÚ—ÞcÒ:¼"BýÄ~Îö}QÐz7q‚³ÛØü´ôŽü³·’Å<Ÿ­n]¹ön‰yÚ“7X€HpŸs5:8GlîÂÉo¹ Öi8lPØÃÑšR/rIÌ ƒ.,߬,ölìW¼¡,|¬æÜéL«-7ÖǰÃT6VU6Ùæ°csçÖãsXƒ²L[ æäçòý_^ZÍe7pWåýÅÇ nåá`(ÁaÏOð+Wx×6K3 ÄØp®ßGŸ¼  ÆåÀ›´€!ô\‰ïúìå"uX)!5z™›…H6Ç„n³‹kƒç#¯Ùhw°Œ w¶’Ò H—½=3¾Ú2Þ‡lÁëj-fD*žj ×2¤Ý”“+$qáá}Ÿ{hV®äïmc:Býø¼×Î2??‡íÝ_Ô'jžjHxÉ9/â OxTo{^wy´CX#)0ŽrÅg1kóiG@¿šFÊõiœ)¯–ðu),wÏY£ž>¸K$^÷óÙ$‹ ÖMFÝ Ó¼••¿îìÂïùâ}ŽÀï¶³ \ eÑ  åÇ* Â:û³ò±%þ¦´ìmªf?o) ¿jº;czÎòx«ºôߣ1…§~3UH–Ûž:¯}£÷>×½%úËôUõ6àvçóNa¹Ø¿£Èµ&½_Žb|DÊüªº+³ÞbYí÷@À¨¹×ºŽŽ\­…$k=ÿÐ2«ñý‚D×Sº—í®=xlWÜKÜ’!E'å*9ÐD±Òeƒ®)w…˜Ë5½MUÉW»‹‹2<ä¤ñöPÿBÀTÿ"ÀÌôXQ…Ä“ÔMy/>à×KÛÕlD4D“úc] þœLó!m[O1}ŸtŒ Þ“ÔâÆ>ÕÔà ÑQ½=Òen[>ÕTÛCÑœ(fΣ§q_ùðÃëø ݘåÂ’_)pJyž’:+Í(sáAV‰À°¡šoˆ‡¶86øš:q&8F¬ÝFx"! 3 TŸÐTÜèÏL°›Ñæ3ý)r§ „UiN7Ï#n®B’ÜR12¡»†ëœ5…Ÿæüc ÎF©ÉöÙ[ѱlâJíÊ8âVÙ„;¥OT÷!¬8cû¡î?®Ã{âUcd%e3dÜ}nƒy"` Ší]²|Éˈ´Ü‚”¶bôçwùŽê¥‰4WMWÇ’ *‹„T^v:#¶ŽÇNrU˜‹…dçK”-}öŽÌ/lwûè®c{V™€UëD¾¬(GL}E‹S«™T6î߸Ëã@îà› ½ H‡Ÿ-ˆß%¯ûZá>ïsîc·Ÿß·Œwù¹¡®Q|îâqˆ÷—€eQÎ.ŸÏW÷átboA‰·áÁ¡´Ÿ"‚™ïÉnÒÝ®Õt®ÖÏrˆy©i4ˆFÐÏFHÃÑ¡£X¤ž3AÓ®{(ÍPEþI~77 Ñe•!.)^÷©Yk€³xÝõÅ7T#b¢'"}OµRYÚ‚Ð Ys}x,sNõ²µtJ-—ÜŸ˜MWp)t;÷÷‡E¿P¾Êãx2ÁQ‡ «×P:⎠2_rèûõ㨖ø„gòHJ”M?½ýb?öa|']ßmô ·Íúº!^‚›Ê½ß!8°1Ê&Óc¸ût¿ëмdLê ݳWEób„Z5ˆtÀ$;üc\s×Ù¸²ðùÔ>„ ©æå€+qß÷œ áØÂCåô“yìÌ?¬>[Ÿü­>Vg‡§!Ä#¡ôÆ®h}ŽcV–Û»ÄE*·tüµNˆ£‡ièPŠßØÄ VmTîÈãªC1\‘® [Ÿ‚XYÏuéćL0n| #Ò©½‡ÏVo2¥¶µ hùËÞ^ÛvË£r 딘1—àŸf·Ç½zJ:ê¡sû  ÔUѽ'‰¨T´\è0ææª–˜üsžþfóa+vµú'ºQOÜ+)e©Ü¢žÍ Òè÷›øL£¹CPúæžÜOZ-‘…ˆÙùtÞÞôš5+Lr1/h†iabn`P¶F£>†¼56o ÏË„tê+ÈŠn6vPUÎ,޳ëtˆó¬*ây ¨Û© SÂÒé,ë#·Ã~l»`AçèǦ;ƒñø•™a—5z×ÆÖ SlyŸô+é *Jy•%:ƒ³™èðçY? µƒÖö/aC¨~õ°/åÍ€íúQr(ª^¶©1TÎ=sþ⿊þª½ªùü?+n` ±ÿHôÿ׸qÿù†„•-à_TßOQ^TÎÏʦM±¨¯?»‹³;¢Hé¬pÏ·µŽuÊ7å‡ñ( …k+Š .ä(´û5©þ6^±½ÆÑÀX¦}UX-©<¶ñ¹Úùwªg·n‹uõ:ÍÚ øaÖ»í¾èÐõæØ¸.ªŠFš©ÅÛ÷|mß·ñG÷Ò"ù¡~£òÝäiA©!É6ÆH*‚J~Ò­Ï¡ó@¥¶…‹©žÙµ~’þÁ_5(Í1È´K W’í+ÉÑÇ­‡Ûnæ@&!B68fš·š‚Þ8YRB£Ð3‡@µÞþ³Jÿ1öÿ1wsFa€‰-ÀìBš0#3$„4öWW·X݆?*â Ps.ÏÛRø®x˜*¢\o(lÆ~Â>ÈQà"¹_Kú/ÐÇoÓ°ÌÛü9F M®(¦(G,c:&_W·Ô=\,ùžrö'wí h¼±ßð%×ìéå«Aî«°9»­1l“'*µ¸,Êê û:FóTªóÑööæd¸I+IX7”ŒÑ™ý^œ¸ªF)¤”‰`-\[M˜¢òo’³yóhôS§HÜv§$4 5$äsm.'¶ñDÙŒkc°1œ¼‹AMDŽ«¿„âÝ`kŸæÿ6ƒÚ6 îSìÎÒ‚cŠ^ýÆ6&„ìûW4s¯©?¨@€€>ÁþÓÒÄ¿ ù/¥‰\µkkTa4þäzù5KÛMëßþ-­›f¨¬04EE)ÖVÌj–lóùÙ3Xå¶îC7d%ŒûÍTZ 0ÿïn.]a pvÓÕt.«Ïl…ÀËÜŸü>`>Ά¬‘,è0 ¹š9c\ˆ›ìñ=a¶u6%6%)/wI&4kI÷?'u׿½ôÁmúJ:ú_уÕƒ9­?ŒÇ?Y”ø·Ž5F©vëÖ÷¤Ñ‚˜H+V­Áe4'Y$ª/Ú~ÒÓ&ç­ßºe‘¼Yrêë§Ü®Û!˜±Å ¤|ˆ†ªF]tö´>‰Ü¼å¡€Ž|æ‹ö¢‡‰¯¾@• 4'ÖúÙmùr:ŠiJÿ…ׂ˜„“Э½îR¡›9à#‰SÃŒäpÏtþÅCnÄJ£€­–€ Ë¡ð¹W„ô“~H%H­ðÊ"?ÂÚ¶ü®… )þÚãbàX¬:qÄÖÄÊÓ·ÅÆÎûÊo_S7â­jT%\Âh<ìA<üm¡Å}ÝéEíãhýòÝ·è¿å[ƒa±´¾v ¿TÓ=Ñ“¡C¶z•嚊ú4Ÿ¦ªÑýA¶sÎW‡" HŠAÜö {Õ@ÅÊ!æ‘¢. œÕ?]8B#ŠE9î¿æ ^›ZÔ*Cƒ'ëâö CjâY$)œWNÉ>?ÇÖ+çýf±GòG¥uÂÏ‘X𰺄lú3É‚ã[5")r®Å‡"ƒÜ$wK¿]æ®BÁOýh7„ÿ½²óoמEŸõ8p )øÿôÚó¿ÛÿšºÔ°ÑDµ@ò7€²…І‰Â,á0ˆ"þ5°©"‹$ž‚#?ÔÓ@&«µ}UÖ… æÓöºÅý½i8_¿n]qœ³©ø=Ÿ¿ŒÈŸ»¡/‚ †xÀÍÝõØËû8=ÍÊz›ðóy¨T~o …/%#ªlª`”Rz‰b/åÉ =A4ú–{2æ õÜNmLB!÷pX+!g¬3HÏá£;È[s_òêÉ‚2HÇb› pM-í@’î@Êb& ½—è˜ñäÙ:Ö^I0j"×D‚Ò±VhÆ·Ñ&JÒSÂHÕZXxÒecŸR§äÐè§zñ•¡ÇYÔ™UÊ)*…¡³_²í_ZB'Å”åM3?:^šÁ0—ߊ£·þçÛ?i 3ž° ™“Iê;›D»¸ÛŽ·®|ÕÔ™3Z¥e9ÉÙp H /¦‹ö¡"ÀJ…9âL̨òç¢x®ìâ¨Z„¾™[ÎÙ•¸ˆ1ÙšC{x¨°./˜øküEoBµ”ÎÂÏW¢‹]û1ïÏ\³ת:˜÷¦P!¿¥çÍå-z`›½aò`°rÇW.øëU„œâZ^h>вÆÈX*΄ðóØâT£tw¡K4àÀT>øô+=04êB(°Ë[,d,ÅÔô[¢[çG{ËÎdGíé™2m³Är¯H§ð:S=L+ÛOHt¡Ü°ŽµA'Ã!˜¹ö-ˆZ5[–‘cyÛ¿¡%Ê3l±™Ÿ`\mN9bb£Ÿ `›Öì.ÕÇ+ÎÇà¶ G#Eeê,—4’¨/¨°´<3îÜ5 €ðS9Úi¿%Â4ã¡Dåa’p/É ºÆç¤Àvê]` â=r쪮ÈèØ›˜‘Cj¤‘`> žÿ¤ÒøÜ+Ø™ë_½QÌ·$Õ/ ÌNíÑê³ä{xI,‚òdJ9Á!×ÁÙnœ“@èlã‘èH’w €oø-à«þ0/† §(, Îe½Y¹ï²6…Ë—&ÄQžþ™ñ|yÁ‡â(°åÂ4‘}Y±V˜dÙHVšx!u¾æý'«¬³S³Ñ¦¥½. ·KŒñ XÞüpOòÝO€Dá ˆ¦³Ñ‚@~ˆœuJ#ÎSÏV]êJ%£¡÷ƒ½”4Úž&7 ¼z>ðJÚ?ÂÞl—!ÀûE„)µØ‚pµâ”4‹¿1¶e6îE¦^z¤ô#kF¢ ݸàV¾bªe$s„6 õJ~Ë÷9–zý³õr±®6åà-Ð}%`8Ñqå´¬4\´Ø²F~ m¥¼ô ”»š±:rÊ@GþÛjLû2 SgU.3ðI-Ävºôbp-Í—çè^ÓN+R¯ÜƒÕ¹‘Í5 ˜òÂqƒê¡\ J§JÌUµéÑ Óæ[‚qESÝ1WÚê&hÕôã–D>£õ`­,ý’a^âÁÔ3žôíìd¾cäÀWÊ€tBÃvËf}Å:¦öúL‡~=ÒnÙõƒ³áŠù¬³ª]õ«3(›Ä|¬IMÆ7bp•7±˜mÅWÅ×R¯3¡|Ùó³!Q'Í“ô~”ó_à Ø4ÿ¢ (˜ Hàÿ"Üþ3½¶¯êšßßÛ‰¤ãKHЫÝVÛ_¿¤ðb¼°mQm™°,ƒlõ·HšŽÎ€!²êâkv6k/[[©µ“Ì7pVCÙÉÀq柄“8f²8ìÖì/m¬xu²ø; eÏn=nV~›M,ÿ¼m»Ìò÷½>êõ½½°ÎhIܺã÷fD‹¿%ºÁnxî†bÞÁ:Ýg×wÞ¡ôR M)|%£zì¡c>ÜÃcöFj^è){éçnÛïæÞê@ÿ¸êeD`ìÞ8){o‡Á¦GãñÞùþ£BúÓ &Œ;NæóÞÃ÷^ 3æzî€×+½Qü¨†ýuÞë„[}!ú÷ÿílPÓÒ‰2ä½ `èäÔ¯@ßxý{;H£ç†¤§%:¬¢š6Ýô8.ñÂ7I§y<É‹™\ÊGi¥0顼T,B‰Îm•”•˶!®Z1,­z<†]6µç¾œC­ílÞ}2¯G™ ³èåÅ–?RÎpUÊ·—”cpT2ò wPÂB™:µ|XC©Î3~)‚©~o„WKq¤ÜCKI@¼Ì)^Ä¿ÉKÚ¨õ\hÄ–w^õ)™gÄ¥±ƒ=öèù\x£åæGWöêöÔFv…À…´XlÍÝ>4à‰o,ºAoJë@¹ŽCœ«´ŽwIÙ«Àß¹4="ŸÈP±C?¹¹Ý2âÌt[&Ý gÌ7pކ#òƒeš£²ê:0nˆÿîSµ’w0»‹þ@È/“ÁvB_H†^BOæƒ&gŸŽgyÿJM<ŠG¬f„ÛG}€˜3 ]Ém¼É®•PAMV¤/ÇÌ‹ SlÌoÐSý;RQIô¢+<70Ônbø½¶"%Ã12«Ò~»×©@ö6’ÔØß–•ŠúÁ”ñóûÞÀk{i(Gn7]ZxcšBØô²%Ë9rfL‡ Ô1Œ~¡põ<þ¼6-)gÀQ“ ©EÁˆ[?[˜•rÁ{i~­ÁoµÐ~p®ÌŠ3/;ˆ8= ]oœÁvOz8¸ðb´à¹Ù‰Ìèó[™Sϰ(¦ÝDX@—ÐÂÕI?‡—oãÓ°ãÇŸøg¾:üãÙ²¦“~aoÞÞÅÔ‰ÔеzÃ3…žšhŒ8°:‰CHÕ1„™…Ws £ô¬Œ+ú±ZmèÊq ÈØÚ{”{1šgJBø;~ð2³·f¡¹ïÀ'ŠQ)áÄ Ëvï Y5-Ý¥Z¿vëaç›Ui±ÈðªÛ´rX·Dr Þ´P(Ó/r,ïeA˜ª¦4¤nÅÀÕFvo–í£±[-ËÑ_1sNQ·yÉøž3Ó}[¾ Æ?›“eO”..·Õhl*xX·ëtØIëCþ¶jA=…‚¥Pbßßªé ½¸.ØÁ¹.DXX6ˆ}Yð¿´×†MGîGaòV;†;IDî Vò°4l—.ì¸ ‘ ºñTÈ#\¬V„{³w+zÏm¬É‘ààA SóÐÑ$k£gTq5^Õ'1u†k¨ßí›Uó´^ @†²] •¿!IFUKGE²w¦“ÀÝ[¾éúÊS5ÞÅ«n CÇ"(;,*Ë­Êt¡+†Gº $âjzË(£ã¥ù…%ÔKÅpaß“—oª¥Cˆ:6ƒE±ä)˜Ó²öá(Û­AC=Ñ|á%w{(¹‰›&W†I÷Ð`ÄÑðèÕwL°8¤4=ÈqF‚$¨på–æÊö‰£Çv¯oà®|oŸy-òS®›ÅèwÀÀ`‹^°Yo=,G3î+v dY2tVçŸñúôš½ð²ŸK FI¥YȱÅa¿âŽŠßQ±:„6M¿ ø\0uòî1Òi'f®0/)Ö…bMý8À\¶{+gÔXŒ7Ú÷V©!>ïàJ¤wÆb§Û†Ïç?¨ÜtšpÏU߃û®” ALŒÅ‹>U|/鞦\ˆ¶·§ºéÇÛZE¬æ<[ËM££1yzI«e¤Þº¤È­æþrñœç?¢Þ¶>\ÃÐs­šl*n~¸xO’ÕïEÑ·´ÌCõÉ¥1ªÖÚøÕò˜áŽé¥¶ìbí²—*¨ÕrFÉh¸LÍÉRôO“LvuÀ;/OúÂwú5ÃN"™Ù u{?úKí·B.÷ä *Á%êZ/ª\Ì0Ë©7ºu1KnÇ!1ƒCÚ¥i„&ã».LõkÄÅùN{ŠQï^fƒk~‡í¿mÚ Ã[åGy/p|ï†ÜÈt©–][æ•y¸k£÷vÄ{®Ó[ðòŒièoââ,FZy*ûþ»oozi^ìµïbêéýÎ¶Ž«fP×=ðhÂÈÓËA<6I¶‡`b¦À’iÃã’Ź•S•fCr¼\þÌa«º7ü­!‹Ém%Ì’!3%bc âP´dD¾Úv=S…Ö×û% ˆÙKy”`¦_†Å\z}­jÎOæ„• )¶E©ËEeÅÅ!`âLÊ7j¬<3}Îy8WÃ׃°9qhÌ\Ûwšå邹Âb…ù™Äßc¤È€b™œC%h®:!A™ ƒå¸¦#*1¹ïþÍy;I˜Æÿ&ç EPú–¦ù®‘ºÇmï‚%‹=ÄbXÇ»ÆqÃÅWÇáZ ¸ƒ2iÝ¢ FƒcEŽà%Ï:ñè u»¯îXc@­4$CšC…³Ë‘Ïuž†œUý, Mû¹!XIÖqU n5nòŠÍ†9úԂɲ©ÓÞ¶šÝO ¸Hp¾ŸËn•¹y†'˜u‹C·â”²Ñ ·Å­ó•ÖµtTV¿7RÁœÔ6Yp B¼8›~éšp«/Òž²Í“µÅýœ~“WB+«>©_rc˜Ð5 ÇïøŸmk$€?fâôü¤$Ó¸mÛØµaâѼ‘0s*FeŤËì?köÚ!Œ©ó§t³ÅÑÆâ»Òܸu‘͸̅<3=m‡ÀâDÉEш%7$[ ÛuÒÄš%TVÓ4Ãpº¥ßÄ5Ðd’i‰ÕüÆ%sÇñLgó‰BÓC·¿X¡ö„£rÙÑ£?˜ËqÒBS|É^¦-¸zX¶S§•í DöÕ+í†[ãSëÙðèë›Üý.ZKb®8Í áƒæe^–Kˆ±8¹×Þí—Ϻ+IGî§U±÷†º¸´ A“‹’ lÞf «óðpPaâ ©ÅÔÙ!v)=žaxçäáx]èØâ:ÞrÞÂéXÝ3(_4¨ÚïÚteË‹"z¹Õ|[û™§íII|gÜ0ƒ—«£î÷éŽçîû«®û§€mO˜^¡™½UÃ|Ì‘KOÍðjBh‰ÎVfihÓo3ý½ƒ$tZJÍÁBf|•Yp ^~zü¼ÄÛ1t_é>;NŠƒèæ}höƒãµcTÞx SÞòÝû—àXè=æ\û!ül•ßx3£žêÃ.Ðî{¯ê¾PöC0/Ñž¾jÃ1Ÿd·/™Þ0Ó0CcC:ÌÝÕ»@Ý$ÌÝïÈ‹ÁG­&êÓLÙ §¡€‹*¥Ñµv*#•·*öÚbé%Éb¸‘ËDŽ»’#€­žpÀ’kÀzý}yÃà ènƒÎ*,U…U+€×õij͵ãš1_{'ÎJ ˆšS YùB}vÒ×z³ Žegeտ΀us9WnQK“6õ.ü´¨pzcoí?,ÇÏÏ¡7ëÒý{;|E—ÃtÕ{¹éb¨¯‰ßÕ‚T¢:›^Ø0ãív~³Ñ^ÁR—>ŸÅάIX¼î²ðªjOó%/.‰"ùª{.‘±F,.B2¶¬|ÊK|…s¬­àhZZ1žÞô±ÀF“œÏrιM¨ïÔOo‰úi-wƒj,¹æWp,uëQ³€½ÏªZr¢5HSßaÆ wùE®9ñ^í»vC¶ŽåS•ÂN·({‚ÅÅ-T2?fAgE¦®£zv²v/=³ñ‘8‰SsYƒ]2×Î(_¶ìÆš)G˜,&g.§|´Ê²,V••#ÒMÝm ÐaZ€n€ðæd½’>új2ç‚^¤êщå„õf3…(ür5[F2Ws« JŸ„T„Òœåв éE'ÉbHóvò +ðûˆØVµú†v„“-gÁªÔY· Óöáì\&Ük«6íÞ½¸í,~´Ï—¤X‚JO¬êíØ[ëEp[Ô|o¥[þM*£û³È£IfœŠVˆ.jÿè<¦'*,[hý?ùê ·ÝÈ&åÔþA­„KŽ‚’ë¥ûlL.EBò`y¬B½¡S=È •žxf´åšÃdPåàAfºê·àê¤ì­Ì¢ThûÈWu“䛞•¾¬6.¡:¸‰…ÌTËzINjC·V;ròÊ‘¯Qˆ êv[lDYS·þÄ]%ø‰üéBÀÃ}>øÄ%(9ÜQœü~5éþœHLNGl‹,9„.P™°ìŽÄŒ`Ž Ã@R :sãÑIÿ•+±½Î¹°¦'‘èFk¤â îàæþDk$SDÓ\­Â7±Ú›p¼·ÉE’xÙ áÌó¸ey#\?ĘڑsIa}F„ãW±°<éZä>ÌŠü± áY(;ÇÄ-­5ˆw+’\çˆ:DY¬d}yxÉ?Zêø"7Xfj¹C§3Ûª3cr ݬ0×á¡;d7–;±JÄÞÃòɼ>¬þÛÆz‡yÛì•Û8ÛÇ4w¤ibuK4ˆ 9f³8ÎÿâO‘Àu±käÒ4,‰ Â|ÓpîóǦÔò"†òžJɾS86E$Ýé/’?LõSo注#š½*1î=1ëÑΡúÍz—%T§Êà}ù,ÎîP2ìÔ¶u6„0g´üdLS#ùò…>ð O'^ z8{]è•õ$ŸìÒ ã„déë„!³ ômϬuI­\­zŸl„af¥a¨‚ªác’'›8(RyS ìN¹äCul?8&AÅeۧ'H,‚Äð8&Â>Éa"dyKªàÜ1³Ýò~oÚÐâž7J~qØ 7„â>¤¡ …7ÝH¾)´'V‘ƒ½°µŠrÚ‘6h†Ú„ピc£·#´op8°+ä¼÷— ¶`Xk´®­ t§Ç…Ο3¡ýsXÄI¼ h¹Ò?Æ^¬Q 4#J™¬±H}A-ºÐ’¤¾2¹vÿ1ë¤=Ñe¬ô ùôôø_æìŠÕôTP¤PùðŒÉaµô^ÅÔÅV¤€,´RÕ‚ ïê~‹;FAïdAÉÉ™+³àIøm40ŒT/»ß if@¡É”P”Órs¯|Þ³}Þ¶yø»¿zQõbö¦í$g°ß!È=˜ ÷^“#{š‡x›- .÷fGñóJë `<ܨ"ÄËò²ü65üIÄD¡W~„õÕäœkÐŒàÞEø¡¸Öz³®R¾šv«—Þ»Ù!Õ¯c5Fˆº#ž’N,fMþPÌ=~¿SãÔr)ų±éÞªÓ|?žnß¶”$¤¶fÙMçt‘EÏ8˜Þ™lØššR³Z¦æö‚(0Mã\ÚëW¾“ãÔÄÞ&o•'nƘɛо7XëlÐê:¼ßÆVÔª«eÂ_H.ROŠ«týIJSKÒvWBY!íMOµ¬nmeÀM¶?ÉhØ%/¡ÈF†ÇC‚§$ ЛÁ é¾~=ì×gy8²Š«ÌTØ…±ÈÑÞÁá¿çN6A†½_^S\ÈŨunR:êÊ4@õN0*ZòÛYállQsI«Š †%Õ¢m¯)õTÉ.—w`Ìê'T—¬c× ôñ¡™WWy±¡ª2‰=¿9´Û!b­e]³ù%ðxÆ«?»–8߰¡p•nô"Ô·$y4êb¤zΤ~È}Rçç/yoN?_ü;*Ýû…&ŒnÊÑ+|í &ÖèmczBIe¥¶G‡­îæKãÞÀJÃŽù°ÓϪ¤cXp*,Ù—¤êHˆf«"ת»è0.¶^¯Å~ʹC +GOËÁbqrs†™ž·…±â7†";³n3? ü³-¹gµnÅÑ`i“œ¢Á`Õá _‘ç£ÂOÙky@‘¦ Ø~>ÝèmD_ä«KØáúÄÇ+(WÝÜר™th—¨ya‡E_‚P~ЄÌs‡ Gz~òak‚YrKœ[ˆÒ!õ!ê€PÐÀ\ISúõôv‡[S™±7¤}hŠ\¢¼…™:05›ÿf¿šÍ5o–²Y÷€<šFzsÇ–|üV#v+'Àiýø†ú) ÉŒ–ÜŠÜ–“ˆ9¤G<*ß§™oy„M¸L·)‹Ó }ͪ»8—ûlÄáÆÿ#´*eºs`  0ðÿ#¯ælû¯·—þ»:* Šˆ_òTDèt¨ƒ0àEýr¢1„ªÔ’BE,¼á쩌VóRóãß·'±Í!“'…,_”#r©Á`bík|ï9[3\Ÿ·÷@šHÃ’5BûHb±¸Qö¤LãBGŒÃ!‘4Ã!Ž9)5LC$¸%z‡&øD“Žžý{T ép|Ž˜æõ%j©Ï²€ÊÌ?ª¨zôçiæ«wL’5WëwÁv•ÅxztEY1Tá½Uæ–Ó¸"Òo+„s¸! vèªá¹UæeçióñÖ]jˆÓ™^b3T€£õ‘~ …,tú,§‰y<5é‰h¥Yµ˜—ˆÉzkD‘)žL+FIewƒrêú|î»eqv4>³\B«ÚãSÔ=ÖÜÕ44‹³mÍ´BJõ)Êä•-³H·]»t6®•E–Ìš\ÄÃtø;ëµ)I´û,ó¡ñJú`£“Ívñ­I`bI¨1‚­3Œ#Fú½.´Žš¨‰Ã0áÛàbS©ú-óŒ°ÙdÝšsÁÖPšÂáܤÝ*¶sŒxN+U˜`J,ƒè(Lék¨ > ОQ\?&j" ÃŒÞ>¼Ú\¬+¿U+Á:û+pˆ'¿óH,0m V°ò4œ gãù(«æpÄ%=IÍÉ‹týªŠ÷g¹ ·JüMçDß1Æ N%é’¸7ÉHñ·(oüQ,ÛFLÆ#Î}¼Z”VCCÆÝ(4bËEœ¬ø.j/3øYÇe‡8Îè~´þe$Âaä-5ðP?/çÆe…?OrBÁ%¨n‹à÷ª‰G‹þ ;3~Ä=†ØIzpCDï­ 1væPàÂ~$^| Ôâ˜åk?ùlúzÒ]Û×þª×=Hô_EÑ#Â-lø¹éŽ×' §g”+в$§ 'Œ§ÑGÔˆ§€_‘_I ]ô¶çð¡ôÂ$TNAµ‡jδEˆaSb—¤3„x…È%F¥LÃÛhîá”Ý¡àOð üà3ùuóŸžßá Á @@º0ÿ;¿Â^®fBÎÎF¯‚«ÓTpÄ0GzpéC+?,ómŠ¿¬‘- «—ÑAa¡DU½¥ØÇöÒÛ:w¿»Aw¦ObÁ$ÌϾ»)G,®é­$û¹á̞׎_ygøß/¾?ÞW`€T^ˆÂ‘|—#l4£°ò&梃—(—_€O1§VÐlg#¦0‰=‰É ÆgÙæ¨¶#Œx`k”ÝÑF4£Tžãˆcm›F—ôŒeáW­çêJ©  ̿ٷµŒ =â÷(s›/ê›Ó[p%x›uભÇû]ƒÍÚ?f—à¥ãÙ¯9}nö dÝ~»TO¼˜Ý mÑboÊ??€è±¸6T™éêdüY¼ú«îGÔoŒÎ6"¤“íVÚ˜qñÑ¡@€°ªü…£µ…îŒ9`/6ï†u Lf¸ÝüXè +ý{›¯Èn!µ­ÂÞ%sì E°/ë­»¥®Y•qÓy=Qt)¦kcA3ň©ðÒNîÁ–\„zAýB®¨i§¢I6+ø³ã”Eb EaÖˆ†t&’`,€A5þÜF•¬«_Ê¥km:š½MjNSÍ^ÙVwÇ¢U߃˜Ön©jY7 È÷Å¥Ž8¶€.®f8<šMS;3;1žz¼Äìžl£ÙönlÔÄ Ü´]§*cäR¼aëØ5Wô\ˆqrhC%«uJÍ­ExcF“­£÷ö€¤ ÒV ?æp³u Í“—:gp…É6+¼ãY}qšò-x·Sô9tnù |fô “ø« =7 ³ÊM4žØ!UXúC“ Îø{RMÌÝ€Zª¢º’ðéófUž „¡(žO!;;›ìZÒà 3ÍÚgà°P¾d_xD­{–9{ö OM5Ææ‹yëÒèq»}*­Or}š}ô‡ø}Ø8îÏÿÕÆ ë4}>:‹¯„J}Ô‡Q'®­¾|á)žE´½f¸m°žùï&¿×jñ•3w[–äç7¨-PªÇñÚÍIùž5z->*ʰs§wÜ+sx43 ÿf9ïó?éçI­ß˱®gZ›%#®¡úˆŸs`Es¿;}6Ä—¼C9¬žXc`d)(ȯsÉFúg¤¿¢r!)ÆàžåqE ÈøÄ ì÷AëPD>·z¤v”œ KœÀXß~Láï£KYøòn÷sîÆÙØA Åo÷uˆ&>ßð{w&Á²Çò°Â§,#~Ž$A/Y’Ó‘ N¦í`_ùð»”¾Auðl[CJÉ&f×µ »Æ®hkå±×ÈÑb%“n*ž…'~ ¾¬ OÎs-y< ° ¢ö‡ê,BkÛSá ª4’°b]Т~‡Õ­ BºÊzô­v2-LŸX™Òòþê¿ÅB('-xGeËNBë(œi¡È] ¾#&D[¹<ÐÄйGçoÞÜ@Õ|mõS{V)T*ýfò M°ú$cû³65ÿ‚RÞ^¤1/P2ïPQöVô‡xCl÷Öß$>~Š)V°ÿéIVus!gK+w3ag3gÒ¿þ¥ù]ÿƒíTuP„P¿ÌuÚÊ2åE€Š.Bbý`¦ÄH » %QÝv+Fkæ«Õ ib¢$E ä>”†Yt‘™²&³¹|¦=èwÆ^oïï5€<9C‰teHâ’ãË…R$wÛ•·%È©0…Ô$ôFãu`Ëá4BuÏ¥ô£ÌÀM–î[uÑÕoó·oŠMšuü3”N S|[Û(/åZ&Ò‹¾Ùwë7ïõSàÆ[°ŽÚÜô°ÄŒ<Äκ Œv;0¯î–ìÁ…œÐ»Içm{&àóý¦:v̤éŸ+ÙF{Þ¾tëÖN¯ýÖPó‡ØÝvQ%dzÛ*äjn°¯…ž=8ÏUy¡FJ®Í^E–Å)Øs[¦Óµ”,j‡X%°§nÉìQS0#ó?­tô&z¹acƒçº}‘ÍÆNÖtõl5·KJ­UM™m}¶ü%v¯I ÙXhDW‡±FòZ> ²Wf”ª$ùÃzqœšÍ¡KÍò)U^.¹çËŒŒbê%w`¾¨gm ù]¨ÿjüÁÍülµãêˆïà–lÿ¨ "Ø(#H[ÞK½iV¦ÌÜ„ ¹$ ü*wýt«b ኰgötËê™öe“{ƒYÌ#1iž(U®§9 fÙôwì¶¹·¡¼ü•—ña€¸þϰûïËkꨨ[-XÐÑʽ?‚8™ÄBÔ³ã((¯ KÛÆ‘‹¹dÑ+«ºY[2  Ü%CèÑHÃÚyM‹ðSѼ«{HÒTÏÇ`Ooyäù…s«}<äÉïSàù8¢]ï•„ÇÆƒËžtþ´@åW;ša•=·ìƒs˘s”±›<³8w–Q—à¹:;æƒ3°l­5¡À§„–—Ò‡úˆÈ‡ÆåH dºòbÆt»dLͬHÅàL¼ ³qšF©<U²íX¶}´sNd¤ 61Ÿ£_SÇåªa“g湩išæ„ÉÅ BåÔq¶‚y"rf5pæ¥Àžß½i§vë×maÉŸDq°‹=—Äâk KéÖ V ÈÅÞ`‰§ 8(æÂÚ¬?ÖÕv7ýȾœ^*¼¢.Û ¥.˜ãÐwìœÕ'M'±a'°G-&×(8 !mÔmbÆ;WþéÔ£‡ãÆO­Þ”ë ¥£0†%71›’íì±íû™Ýß=U vAŸ…·ƒ×Þœ24zËWƒW£Ú”ÿIíxò;B¼€Òñh_2œº)7`¾ìõÎÆZefd;uLÐäZR6‡#¬ øöˆPйÃ܇„5¾X»å.í´ÕËz` H„£æ®#Çn¦o„µ %ö xüX$XøvõQt…é.Ì}Ù2 hcég|רV²MŒõ= ÈÎ>I«±!ªØSW3¬o¬î@Fïi %¬ÅøÄeÿZ‹—¡Í‹Ò¯Ú«r²ÄÊ¥7„1ÌØŠ¤_GPíìhç¦5÷?t©JâëdXò^W$üÜGzCnÆ6]1î†N“›äDr8¥fMu Ü­YIguçL+?ÅýV̼—U¯¸…Ùl\œÇ­§'¹G†.d®û4DÎ3s£k©°|hoÑ;—ÖJž\³Îŧª+ ·yÇ’§eW•j×äÍã8B¯0Š9PÀæõ‘WUÄÊJ‡h†•¼‚~‹è<ƒÀß X1¼X ö4)['Ϻ“¶ñG“ëˆ$Xiûù‘ÌDÌÓ ž•JkÌ%Ê=×þºÅÊ$_É+ÔÚ¥j¤eû•7BõCÞiǪqöÉÑo v6“¾aSh,- áTFŠª`ãåÓ#Z·ÔŠ­U½9;_¬ I2Vù‰ág¦¾Ž˜Œ;X5 jQmÝ;O,šm.çì†Æ\î%¦ÐÈÐðƒƒä#âÂ+Ì:{µ±Es©XÇ—róV˜¹¾{b€RÅ=ç¤Ã’íš?i<³ƒFÔ[h+lÒÁ¢sJdi=Q×ß±QT€-Ý0Óð Ò«Nd[¤Ð‡Ëdzb”w«ÏŒºÔ{Y\ m²w Oõ¶¹r=Ÿxú ”Ôù•ì*YŠî8æŠ}¥2'M#OAª\Ÿ XÐ/ñg–Þé2Їʗ”®ËÍ_žg -í«|”g=ÝsS65W莣¦ýó~ñ¦.`…åų¨h\¬#J{Cy´;n—Š/øƒr+Þ«ãWTCö–¯ìÕÊ3s|ƒ ý× þ þm¥,GMOeA•OFFE˜v´”PRhòGR4ªÀ¯@u˜É›9,üWþТ”"´ïd…·ùéÑØ·‹çN©ÊÆ`UÏѭã ¾ãí®Ž÷ƒãôZ £:²}vsÑAFAô½ì@/¤KOZC¡^”1ÄÜŒ(¢›xyíæcl3¢ u´„D†b½.á½ÑÕþ0ङF7S¸'Ò6à;ô9¦mMµ¦nwErjs,ÑÅm;n¥;\ó¶áiVh‡UVÎZ ÙÉb]ª³°:êr{¥ñÙc•×L³î–¶¦ò²x+?ÉDÐ¥ýè°Î¢g99Ö!ÂbØ)½:;yTž¤‡:euÓž»>{î¹^MgV½iîô,(r›|ä¹uYq„pãà…øÀ<Úú„—Îô¢/j ŠCò‘ãÒœlqcÚ=¬Iú¤C†£xØY­Õ¬,WSƒSÅ1_h­é)lþÑfô«7ZImEH«€6­£¶ð»â¥JF|×M¿±U:lFêD,/PY½n±GKŒ”´nú·cˆ¾#˜-ヾ2i¸ÑL%¸Ð6V¼{?Ž?|î÷¦ íeU+ß1À~·×1‹õ"c¯j™¼iÂ*Ëó2“YÙóœ¹ÇD³Û „Å5Ïfu _… ³ :½š_Oð­g7%€]ܤVñ:CÌ>›8Ùκ´‡ÖºðÛö Ô~©W'ÉÆÕ(Æò E1ºˆk±Òá,üÏ{—Cå>ƒoõ¢Æ~H¼– Óƒ=0“[T0øÌÙ±{R©Oc¼=wæik‘K{œøº¦éû©LIÒÜ*¿ØûÅ'>!ÎM¶lrš5Ðfb\cj«FÞ’ÿÈí)ôz÷@ ^eoÏ…€ÈûÞdbOtoé% (Â̬“fØê‚Vè¨Z¨±š«ßý~»R÷y †\I‡!Å*pÔÕ€ê&&Ãb»Ý¼‰ÇJƒÂ roÕ³ö‚Œ«Ãpj²ö x+[+¶Û ×x=½Jb §‚åÎ=N/Я”2Y+W±ô NVåN)£Ök€‘ÃÊê÷Ÿu0çó€ÝAþ²êïàǼjaÞ^tÚN2´ë2‡¬·„ š+¤†¨XyñÒØ×9Ø€D°uÍáÆ§_/·™½ýš»?ÎæÐþŽF2¸š¿Ðaø:äþoÐñoí&u+«¿¸øßq!çðgËáv0ÑÛ‰H½~!Èá•ÓˆZ!ˆI") Öï ÞúåØ/ÄÅâU¯|ê ¦yŸ E„½-×I“!ööu\ÇMeÕ=̤¨%8ÎHÀèЫ¯·†ŸÛY;x¶žî"6`»Å+‹Xë =1ÿxŽHé£~HZ©D§ŽT(’¯„¸¬Ã‡¼«šóšX>-›€{u3`¡§µü=ãK* u-ð¥œ×´4{ÇvÌ/Ðsøúm“ IS P¼ù)_DÿBH‹.‚¢ÀÕAV+Öœ'­ÇC"е-;\½òšÄ“´â}Îþ´s\Œ/mhô˜×Ì>¼/ zSgš ƒÚãÈÕˆ¥ÿYz㎠ ƾ\‡‹ þÕáɤôÁ@Œ`þ»“Þ‚0—ë’‡Ÿ|r¾*ø°˜éh+/ |Æ>÷ ÚQÄöégøÑéÃ)¸pæõ³Z_jí¼À:,#°•0wñ 6Eyr/S-ÃÝk’¹AŠ¡`isÔBóçʵ]]ü2E-¾v‘Çs ¤ú†&[á¸ÞìJ—qµÂ @³¼Äòã\}<ECð/`ˆÿßãoˆ(VÖ“Áùã[÷)÷jì ÕJöhÀ°h;¤uñí¹Õ\ĺ_^œIöos3÷å%z_D7ú[a´{ ´6ä #˳þ4cÀ·Þ'øïx1 ´E½UO¥!XóÊÅnWÆcÃí>à‰&uæñFI,}ˆ¨³×OJ)•oaêœÛU3j·nŽß °O\ÉϨüM]8¬ªœCMFYPgBøúÉ2ü!Ör0©ô"ù‡¡ÙùÒäÆf‚Y\\Å€ä·Rb~ êG¥ ´ë3Çȵô:JÚ¤$sÒ‘áCO…“éœ*‡ÌJ’·ÒŸgÐ…“³/=y-~þ}|­Ì+(µ¼¬ŠŒáÔÇ#Ãf¬Àþ“|ߌg15æš^”ýŸS’™9;|Þsjû’šDóÁáNcýÞ¤Í4ÉÑäx϶óEÑ [VÉV=*¤1K7Š1,¾°s•ÿüE½¤]áF†ÿBMËdÒ—Žþ¿p×{ ·ê—¢F,µ<èùg·Á/Ž&÷Üûbû)&ð0°ý·AÒ–ÿâ{ËKßV·Ãâ_Fž€Â\ƒ˜x,üØFµ²ýïÖÒþ3Ä<]Íì]¬Œÿ=küǨrŸ2Š¢_Šm="{´$ê$´´01Œ¥X("Œ²fóÙ˜wr­”|€žµ‡Èíß0ˆÝΓ•¼š¹Ÿb¾ RJ‚ûFÞÞÞí;> ïð†PT'ž©Áá#ã“§£Å‰¢ú#ñÁñ‚õ´zXê ûmñêÚÍ½í®—-[]á—=-Øð$&nµV\<†¥6‚ÅþxXPBÃEÝ•§Êx4Pv’J·‡¬8ÈIÓ½ ¦ç{vÞÈÉøË‹ C{¼ðfÉà®dyË÷`ï…ßý™?gËAfÜ€ öƒö˦>ÉnrÄ{@êp[ƒl~½Û(¨Òyud c§ÍÅú”£#2.½¾ùÉN9Ž0‚ÃD³M˜YÇä=%^v×44_oY‹pçbóÊcVÉฮÝ\pÅ‚]›ÜŒæý0<¾Ì È€$–f •!Ò"«7Úv/¦=tÕÇõ±nðE—¬á‡ƒ å'Å|Ý–ûjy²Ÿ; GŸNcBƒiêu‰ËQ÷†#or’/…Ç)êµ1ïtÐp–¼ÐÊJ»0=Цõ[Ó…xÏ L_ò&Li¤Z4+¾´)2S ß°ª8ϰé¥?€O¬Ó³(ÇŒ•»Zyÿð"]ZÚŒEû”öÅuš‹¨&ñŒK}L{˜¯ê€J_Üššo¸ûO Õæ 7“zÍ;y™èŒSDîð……h® ±kÈÛõÓcy¼µ„w÷ ˆvÒ9*F‘®m¿+Ãm6»œÒÚ Üûƒ1éÏhêÒ[ÂuãðŽp­u%ú¥[SUž‡غÛ4„Y¨@ "ÿwO)ÿ+ÿ„5lq4о–ÕMJº\ìM8+¬ÔÄ(”ùƒä»ÜîÆ¼Ødò‹EMÍ+Id—äÅr?ÞÀ×™‹é¬ŸÒ8PXYÁ°Úy8&o2‚‚xÍ w!¸}Ÿ­›’ñÆ®\y¹Ÿ7}f>§_§»ž7qrü‘z­?:ÁmŒ Œ`ö@)K€Oú]VŒòÞÅ|ü€ü}•17 ã„qQ8 .íûªà–†>Yñ“ Ú_¸çoíätÉDv€´B䡹ä¡lÍ@Ìúˆ=óço]`[ö5FC¨ò–í¡(ßþŽ–På­ØŸ î.ØgBK¨ä,Ú¯¤î.Ù?§ÎU¼-Š.UõâPó•2BS¨ôjðç=¹÷ÇUr 2“ÅØ=˜S»ÉxÔ‚ÃW[ù«=ä¹ÌÛ·‹‘ÛÇ›»ZŒ3£6¦±žMÇ•Eð†$Æ+îOŠW羦<95Ž‚$¢÷ˆ¨±Õ€ò™…¹#RÀ`éS z8#©&K,fa’ÒéXU¯¢%:‚î:fÿÃÁiˆáöáÍl%˽“¶]7¬ùs…©W­A—¸„ÝÀ-‚¯…u\­{¦ƒ©*5Ïûe”öS§ÒbáJ f°AE]9xze†]) îÜ),ŸÈ;ì³y_Z Þš3ü S!LeÇDëÍßé-»WÊÈCzèÍu@“byÒòD¤‡ ”-»OK@1„Áú…]þ†yÚÚSÌrängèÙsåÈ><\ÃI~À†8v…­3èÚæå‡ÙžÄK]xÞ®ÜÜgyxÞžœ~Œ‡;z•:غ ¹‰f—ÕVóÐ4ÕīΘD€šMYäÎwî’ŸW'h|Ñæš;4™¶ÜC‡ .êö;Ø×Ó4ZÓˆ§eÊ›>‰5Oû€ÝlÖ¦4Vй9©LʶÐröxYn&# îÚòD’õø*.4ú9ºÛÁg|Ž´@ ùF¢w?1#ýØs"9¥Ôä¿fÊêú툎:3­=½I“#2µ¶…N!Þ7žŒ~œ¾6HGDÖúƒQ¯Ä54·z¶×æƒÏ´ˆ·KúƒC/ùÂí"w®´?cLz^žÓûv.‡{Fb"bv(ocXô‡‡0Öøan “bÄgÄ y™ú‡ØÈRð©S$0_ Í’sÞîÁô8fêü²…´ Oˆ|ûݘNÚ-‘±”iܳ8cuÆL¯çe@-GPœ”ÈÕ$ˆ},è àÇ­HÈtø¬W¼î,UuQ&BMðød„ÝZm?Z82åÒ9/ï#YßB’É C££@H\S…Hò`¥½BŸZùãÉŸ‡«  ?óyåYZ!-bxéWik”’å~eÈýÂÍJ?90«÷2ûÁNb¶zg üg­SÚ+Þ²6iêÜl¶5Wœ p_ôÀÜo=g+4,ײRâ6…PXq÷[Ò@©¥mQ}±{)[û…å±KWUÈΦ’»RÞðTäª@1‚WmŠl%lZÇ£N÷˜ç Ûï‡õG&ÕÔºÌ ëÁ³oáw¯ÄQBä®BäþŒ¯áW¿ÆcmчþtOÿWÈÊSÞfMSþ÷ÑÂ=Áfèw½ñ·¹N^¥ŠéÝí“›¢ú2õúÑH W³N<þü]¾ ‹•𝠹)ä­Õ„£RÃvÌMo¿Ål2g”AXÉ] )õ@ú J÷M½gu'on|m$ÅÇ^ÚmaYÙR4ì6 ,*D&Lˆ4Wq úVÔέ5nžÀ¾Tu/•mO-5È1•óŠTÙÌŽ0âA?¨Q›°K°Ë€P<‘Ÿ0iY²Aºh‚l>¢U‰BšŠ[)½N¸æØ¦+éÚ36”â¸Þ7­5Å÷sªèÒ÷?·Ë%d´Í_U6äg4øŸÅÊ¿J”ÿ¿º«ZíÝaAõËþÑ)»T»™É2?µ„Ýû hl~>^B;ƒ;ZÐ69{d(.ÆOÏ.ú[Œ-|ð#ñ¥°$Çç’M §™2ÙÅ÷Šoç9g¤Ëÿyf‡HÖD«ïÔ³0¸OÕ‘=Â_¶³ŸcßI~Èß7‹ìœçöE3oLW•±8a ×_T¬ , œ ¿$<*“€óÈ{ AÄeÎÓÔëÈú£çÄû©`“}à—­fç\ã f¸õù2ÀL|óq2ÇY{²¦U~b_ÉEöZ;÷“±O6l?&tÓSó¯ã9R‹H¸ÄÕvo{h½+¼ß?ËU;0ߎ?Ù¤iºè<97*µ„TµKä*O9hnW µîó9U¨§on«mÊ0qž7ëêQ–N8X§™Þ–È ¦û€Úz'4Ÿ| Y²Û9,À ³Ä_K»"¾ÏÓRS©àe1|r ß-n÷q¶Œü4ÇoŸM8I#vÖÁƒ8‘ –|ˆ&ƒãÙö?ô[â&QM¦ÚnÐŽ÷šº·¹«B±[¥ë¾ñØ>¬Ù!›H:Ž‚ ¬p…T^|ŸÈÊ ¶ÎèŒÄ_ù—C½Ëhpd¸³ŽˆÐ謴ÆÂ} Ø5ûØAòZ•B†ŸDÖ4Á54­ùùádáã¥p°qºÜÖ|‡AK»]„áMòP”k’@éÜ)ÿuÊŸÆÒ>ŠÒ_xkÖk•wìQ@{[æ€g´üÜ¥›hÇ+‹WB~-í Ìwž¯³ŽM‡´sC·|=%äÈÉò¶Â³ox¦¼]:º[.ý;’A?*öák4/ÑÛ(Œì™CR¼{KêšøŽÌxlóögBÒŠAþ78æzüÂ=%ª·þ¯Ú1Ô“,Eá°ÈŠFö(Ú]m¼¨|¢~na§XÿBLP]iPÊö¾f¦—cø ê­ÆÈ¼Ž^Ôñ›VPR[XöÜÀ-òßüo gÃ奊Íu ¹„?èFÿ¼îkÔ¤ôš8Â;2ý@Ìf½ƒþIMBuIFÆœÿ~CW9\ï·½Þw”4D᪒§‹—âÜWÏ&Ý!r(2Ô:Àj„Å7¡%§:™IêéˆëG)뙂½rÇίŽäÅWB®„ÄSÒØŠÍy€•Ë”ìO¼-ýû{0WÉ Ä9ÿÊþïF"ÿs0˹šX ÙÚþ—îë¿uQ”ôd€…Pù mÎ5ÌÔ`bk!Ø¢³1Ê‘¨ æÑŠìg£4•=§B”'…•š~¼ŒÏ6ÓmÏ“›-ÏÇ@#«ñ$Á±ñqœÂ£ƒ£¶g£g«Æ‘úK8SÒ]Þ}Šåkò+'-v+lâó·áºX lÒ1wñ6¡Ø#l5mOÔÒM%2å x œdáaõEÈÓÚ°ÚKݰlVQo7ùtÙä4E6Ícj1<ó3bSçRéBÇ%Tàøbﯤ~X:Ô›H•$~wWŠÞÖkª,n·á|®²ìLþ¾³Jy žÈLƒXÓ߯\R'‘ÌE€ð}õ•V«ç°S¦C4~3“ú?Æœªhtœl«Béàz”»Xß"Î8*ˆÂÉU=ο á"4‹(¹ÀŒ¨,…:„¬—wS;à¬\ž„ÙÍͽyLÞæ ç] †ÎtEé{¢0Bí) „p Lø³ðõ`NÎ þþS3äý™½À€€„ ÿ» €ÿüS\-UlÌì­¼ÿ£–TÓq@Ñ@übïæÇ&—oŸEGŽD¤/þ¡œÌH”a!Ø×àÄnë>å-t\V]¡¯Ú$½®6.S<ÏOZVv£Jô˜ðPÌð R¼ÃÅÞÖK¬–ö‡«å'×½‹ËSB€¿¬!C6¥*.ž(&Ea™y¨Š¨#oì‚1.ò~,âãt8n%v" 1A$æ öp%û®1¦‰Rg¸Œ°.ú~4¢†H+ú°'êF"Ô7¦6$ *ê øô±sÈZÒí^wR ô¾Ë:µ:SŽÞ5¾ú,£¡Ž™FæÒTÕIã\<üÑ][Ö.Òó¦>Xwó“Ø×ŸdéóX™us W Ñ,F·½ zË£²#Lc½‡Žq­¾ ¢ ª ò g.¿ ÇÍhóóbKM]…´……v­ùgoM—R‰ œv³Í%¼ðæü².?uPu%\jK‡ŽæHÙ’-­Y´nÏor°è¾€ð^W›äq”´rª-¥DO©–ãŒæ_ Øå\[KOõ î31ÀÌðõJɈÄW.‘Й•oh+Œ6o•·ÐîCÎh^ÁOƒJ4i“<¯ÉúŒ¬*ŠÃ’Þbgc£±Á'»—ÁúÎp:†º©Ôñ…:j‹ÐØ]ºzÉÑ\Ÿè.e+¨…^û¨áUqlQ—ÈøÆž(Sb"i‰©›Zßà“P#® ت«V;ªsÊìÏ NbWbŒä•Ðs?רÔþ°ëñjÆ?öˆõ"‰;£žÏÆÐyB¼kuDÌ)¼Ò3c2ÊïËg»à•®Â–’5«²ùÈ87GìHŠM·s<'•=Ïå! Í¡ªªÞHÒ¹`yÉz‡†×©vúC‡s£×}YÞÙ€¦BŒíü&:ç99^özpŒ|ÝÏB³Í•8·`C1 ÄN‹gHÞÁÌø_ë mÆ<¦b`ˆw‡‚Ò³´idœUʾp&éYX‡õz7y©t²”Cƒ°¾Ö‹gÚoЫ¡àÀ߯]z"u’È"‚Cܽa_O3LGØÝSî­ñ=‰­K¬ìðŠ2U ¬È®ÜA¶ í¦¯Ç93+X–f„ý¶Ow²/ßYèÄÃÆgDͰn¼hEoñoÞ:Üø;Í…Å#y7ƒË^ Ž’²(÷‘“K|:‚~Î5òR/÷c` €ŸöúS®wcÙ dO2 mä»Ôs×÷w˜³e#´Í>–ƒ#Õ ’«¥¥3«ˆy) ’+é´ÝµÉ>²} ­yË’Y„ë ÇeuÈJUJø½¡¡3-Ò?#„Ò²ùf¢¼lCQ”ÓŠau_N\³¿6¿ŒÔzÂÃ~½FxU¦¿*àAãHZÂ}ÁüÏ…Â9k´ÿRÜ•àqúÿ˜ÏUÜÌÍ­<Í\Ĥ¯´î. §b;äItfÉ#Œ?Ƕ·l-7’'Ô‡Y^>¨¡œÐÙf(È’ÜÛMv4Û¥ùr{Å'Wq–xÛ‹\·¬³ä‡(_s]©_µðmóñ`o*Õ& ´0ƒG[jàWô’#ÔàY4€ÓšÕFRûµÆt9… ¿Uýcµo|i*Ä$ 0ï§Cíº™½„ï¡7©4°•JLûjsÞ¤\‚Œf¥¦h×VƒJ¬s€^Sg¦’õæÄeu=^•¶GÑ”¢—›Ì{ÙWû˜s5[s'v±Ë„YåÊ©pØ‚³Ÿ¹>À]Æ‹²Ö‚7÷9 ÇÍxtVÖÝR,53ÞgÅÇ8X†ì{‰;ÝÈ1’±r” ÓïË|ó‘²”ÖÍe'¶Í…º@·ðàÞÛ°7øÌ#`«Zm|™Š‹D×pWÚ‚²ðwnÿ<Š¹Ê½üøäuÚ=„ oÊ}þöwœª”Þ›¤•u^L¹òñY¼šòúçÆ ¦5Kavë"7r5¢sójK»W#ý%`ùÖS+ð5Á.[ó&k®Êl'‚m"•ƒ§{ˆœ½ø»„wû†’w%wƒ }ò05ÚLw«ìÁ&➯¿Øû× •Û¨2ùÝÍcÐÒ—›…à…ì™Ù»L_Åð¢G|íÛÄw”X[B;“8P´æ;¿ôv±`éYƒ<"1\®ä_»ÄF ñH“s6fY6NÖ‡™Ün^ÓN'm\{L7)Á9õw!P3¬b+eŠ:biÉ[³D‘4V 5œøVÞ¦L‘.¾EÙƒˆM¢¨&° {5ÇÄ+ÜÇíkú ÚÞ \Tßrç燽²}G0jgñ*¨°+ÀåÔTêllqxEt†îòŒú¡{8`™¦œÂW¢ï »?šØ,õ*/VÎhgæŸxR€~€K¿›L¯OòïlïtgÿÜù~{Åb8ÐAÛÂTg æ(rå…ñTCØVN„6RC4¦¯€pï4%il‘_Tü(–WåÅãOÏ£Õ3nŠÓ^¤w¿/á p‚æªñJì¼~rÂqUõÉþ”ç_›µãéªHy7ÊÚ¤H ˜]ÝÀXpQÅŽdOE˜æúvfvš‹ƒ/¥/')Ú)³R¹½Ñ•}WdÑ 5±~Hmx{½}ÂŽ±j¾Žr7ŒG?:At®Îªàj·]”È’ÍÔ‚µN¢TÛÁhºü‡åý¬·ñ¦G|ìæ3©éhÚÒ¶` ò8»¨4ºÎœ‚ã‹ø,ÂVÖä|àEêà‡†P5g¼)à`jÞ°BTª¹¡}p–L1iŸq«+=F}.°obÿÂo(ìxzù5~U²HªƒÿÝzGÄoë:.tuÛ¿»:±d•k¹_5è=D<ˆPãL ±´Å/ô˜Â)\^X^ Ró€ü­ ã^ ÎPÈ{äWÙ!öµ¹¾%0_:/·¢?(wã¥ê >XŒÖ:FÓ5ÚNûß° %þ0̃Û/Ü`›M…¥óDœûÙ\êí:¸ƒD«®±úö€¬@½óòÿP/Ø ÷ çóvA>"ešä·=C5’ËáGÛ%̶ïëqTÿP±ü3³/[Ã2Ùç†Ü´âÔ@„e–€â–P¬ 3}¥ÖW°˜ä}óM(Ÿx_½MÝœð†<ßDáOý%ÿÒµ)‘êùþô%hðÿpöQšuM–YiÛ¶mÛ¶m›•ÖSi[•¨´mÛ¶Yi;sê›þº×¼ïtO=îZgÝû+bGÄ>'âìk‘‘ý„tKOø¼s%à•ŸÌ@¶ ¼!ökÓ.[íü´lï…úQ}vñáÃY)µ‡x$Þ”²ùŸÌGq„xüV¼¯Z7î²¼§\.?ï®ü¿¥JaaŒ¢ö`˜h#ve’ûÝjÛzå~k*#õÑÑF.jPÛ›ˆU\BÎWÆ!‰¨S^‚×–GxS_šÐ…é"žA ?”%/Ý™‰ô*šKlÏ«¸-7(ku2Wf±È4].•/L¹[c`çÛµ”F7Nø •¦(ó¬ËW¦¬±”Ûë5+gŽ·¾ˆqC¡ÊEOß3[MŒ³æ}é×Y¢Âº¿ªçªÁÉxLòíç\¦ ‰â|—i–)ÍÒa»Hàì4\+j/1ä^BÓF(ý8Y 7‘åKÿ6Ï~¹äÑý»­‹.?Æ<«ÃÞî·šÊÈ–y]&˜ Ÿ½jío²ù"ÝŠÆí˜«á¦ènöà‡qoýß1÷“XÈàwp®H(ußφ;”ôm„lé±èãuû‹FGWT×Ý4š=<ãvŠËÅ'kaµ…q‚‚pø\–ã+›Sf§Ûi8Ý`IÒ”º@<㜾–ºÝ²þ9‰çfˆ+«ßK°Êx@é@šðõ@Úð•l/é‡çOlcI¦`œ¤2ÐLŠ• Ð Ë4Ž@b¹Ü°ŽüØ3Nä¬Ð7P<mù·Ã!·SYJ> ©t 0Œg=Ñ1—ø|Ҋ׽·“·ÆñIåÌÌ.û¾üf>ŽnF{¤—9‡“Øná™ÝHcä&´~ŽêçäB&gTC‰oaç"ÞAñöf̵±ê¨/?!Ôx0ŃÓÎþÙ»u’:šwóck >µÈ…†ûÔôósËH²,¿mëy‰cèÕÔ>[ X"!üŠý žŽÊPa,#Ärs Ù!Žï4Ë)F ðõ YÖt‘µÃè Æ"Ž{ w›Œ"u ·T5§ž›ŽïÖÁÅ1®Ÿ-’?õ†yIïÖ9©rVŒÈO±ŠÅOq'üú~œŠÉÕ3º=û%Ë\y¨ iˆy÷õ7…%RŒ?i, Hà”ÆþSm…lu;5T?{äºQs¯xô5ÅÒõ”ßäDrå ÐB¶8yƒE¹P¢JJ£dZºî,«p…Ûïp1=ÏS”°Ìó~çQc7‡tPyb—|OüÇ\ OYÞwOþ@Ž)QH¿HZ"cûÂŒ™ƒ¨LC8éöM&$ŸEûø°ˆ6Ro€´ ~J§%çÒZñ#®¢¢ ñ¡:0ùQ@cEF¤<‰‹`˜µ”».PŒ’fëÎ/)ãŽ|e¥ œ¥r»ìn,‡ ѪNUq|=¦˜Aó³X© Úç^Ÿ)Æ’Ͳ´Žøp4,`­ö>¬WÀ FÙ–æœ y%ìÑy=ú€è 0@‡ ‹ãV¯ÅF›°œ¥®3W¿ÃÞÒådš$\Ž'‹µwü”œ7]åIÜä¹Êf)4ïüg¯“S×’©=uÌ\Ë~*ÕåC`·™ÃÀ[¯ëkã^>q&‘F¾jia–äúãØn½ST¾ÃN¥¹Œ*b¬¦ Š£QÊð'™Î8£XvÑ­yhg]×$.vRñò hÓ6©5,ZÈW®ÈJZ<>UQ±&Ä Lãº)$?ˆá&9͇nlÛ8ywÌ&È“ë†g»A×$˜Àf[êY¿a‹ÞS²_~’¡éÄàwÔ›Ð<#MG^ns‹vmkvSyJ‹•ŽÚb£ZóšÄö5ZÙwÍɲ˒>C±oÃAÔÖа,ºj?CÀڸϗ•‹†ãøýGñ»‚Œ q`¿Ú­±ò+Cgk—E)¬Ž+Í[Ô k©F²‘ÙÅ£‹F%ÍaZI4Ù£«Y›m4kƒlÃå·ßè–VÁ¥ËÏc©?÷Z:©èmèÊeªº„[Ñ,3PÕpå}Íè¥j€†y[&ëâ\ýâËjϧu«žÒÂþÛ‰,!I}P9{5±s»Hþ+V)Y"€†—*¦PÊæUl$– ׇ½n]ó|`yvÌ*7¾*tHªÍË–ë­\Dš=ìNu’ûÙE²KøŒKþˆrÖ.‘9“ßû‹Ø« Aïk¦w¨¯+|ÅÂZ?ìa$Á„£æ0Ä{i/ê–œœ~9bؽ oÑ gR©†f¼/O>PÌÇ™þšàÄí™öšØigŒÝT(m-ɘ+Ayp—“ A|²/%Mû Z&Ï Îyq ¡/æÊ ˜#FÑ÷˜Ñ>ï–“~UFlŸP:ÔY|!ÆùšØÝdQÖ–2°í-ïY>d–a¼üaÜÑúØ–vêWʉ¨j€½,ñ ýwž4¡oO5o5§Tñƒ iu‰ÅÝßú!ED&Æ7rš(ìœPTÄMm`”äCdv°”[ä´tEöò¤Q\󛱇!Hòf ½úždOüMŒÉYFÍtýÝç¢ýÏs޳ƒ«ƒ‰ƒíÿN:oQ=S˜WDýÒ[YR‚¦DpêÂä7÷‚ÙÏcœ w…b0k·%+LmØ úJöÃGþ°ÜóøÂÛoÝ$ håâ»Úæ:Þòûzy PâU™ñCcPƒ5TL ƒë§>AIõý5Æ@,%å¤;JŽ&[jÙ/6mŽ)ìRd÷6ºÖ@‡Ì55“Ân×¥´±~4ec²N,ç­m GcÂY”T> Á¨ÐÔæôòõÐi©ÒgÆ«¶Ô|í"áGKÑ_sz`ëŸÒÚH7³D{Û‡Z?ÒšFešk±»ïè:å*ʦÐQ™r¥Ôæ¼ÂJx`Ôì°jÿ®¾‚/píSY5þTÒºq{¥)½ ¸ftRšH¤²[^48*§Ç5rëžÈ·ÈO<œÈU£`¤U²>,úК J[® ÀÆ7‰ÏëwèG}}Ü7…Ý,ÎÔ¡ÎPáÍáÊ@Ùˆ^닼™HP‚“‘´ÒÊ¢mÌ7R[òÊ7‚;ƒU±@†Ï-*D‰+Ía¾×³]„_C²¶?Ç[oÐÆ N8ÞÊèšÒìØ">fhmWkµVMÝ–[²[f9§¥3‰x×ö:w—å®Azù,L\Îiˆ«UÀa¦ømο«h¸‚‚†&¢Ñ9#k6ÁWÝÃøQ y*?:¤F=Îè×{©°•¯Âñ™à ÞÙ"íÏ÷Â0:.ÒIšÍI‚Ë úv’Y÷2†Ùn¡+â Äá˜Øaz4plÆÊû2”Ç ŒîpÂ'ìx™W)By±Ëœ1"D¦.~GÔP …¬3f)Nè’;ÓĆ …»7öÃÄÓ‰œ[tŲ—ñ¡hž'+j6Ö÷ŠñTägIO¹pªA³cæ”1ŽÇŒÈªö5ºR†<É ¼Ê–÷œo·ÜéàuOõêÓßZ%j›’¬ @@ÍöÄŒÿm˜ÿ©È ”hU!ÄOpöÕzÄ‚Ü,$¶o}ØhI‚‚¤ 2IÌ[)¦aåãöÖIøïHøtã,¤jÊ…·¥|™d¼½¶…¯l›nÓï¯<¸9”'ý5AH¦hQ‰Nz!Y„ ­T#tBC¦Q4Š!AëLH6êC¢°^`#£iªq=IQíÌ—L¢Å°ã×–óéSL’õî¡,÷è°‘“n—¼óËr ¤ÐîZˮÈ>”I€qFåšì²Çï›îzv㎼&Þî«ì•pýŒ­’ÍÔääXßϱ›ÍíÆ÷̦kè®m×ÚÛsl‘ÞkwÅ¡£DîÛ >&ðnÓ+ÐÌв›eÖå9&šjs2fÛN”¢*+k¼ƒä\w:}”¦´È$”bÛLXÜìÖ°cëÌÕᎪéuÖoòéÓîÖš}%œâbò£-Õ{ߊÌ&JÒEê¸05V&Jÿl€#$4Uo0e¨¡ÓÌ9ÝXŸ°¶i6”j£ˆ Ë™²Vx¬ “‘ûO§UìÇê:QýmZôù·Š`Š Øh5X…tlÆD(¢iU1Â~ø#`%@ÄÿnéZ+…p[`š¶WqdζZ®VÂI=«nßíbè\Yªdø¨Vrd€#%ñHöVpý¡£_yÓIúøƒdoU¨Œnñ3lä@oc0é„ {Z¤IoÃ_ÔHà4l#þÔ~¯ê[ªc‚}dz[@¸É÷ ÎhuqÓ’olŠáâ »jYDeìpŽèÇ–ÉŽø#Y«ÔRf v˳H±‹³­#÷­ŠåaõޝÐX*éf—‹!9¬ãhgźWšƒDàDƒØsV¯,uñò¶9ˆvÉ>ÓFPÝ!»º!Âo\se†ðwId£!¿ìS¾Kv2ÏñQê˜ÙI}Ìk«Š——¥Î @K ¨] §+ Ñ”øšvë7êüˆª—èAy%Ý•¨% ¹CØHFôð=,iÑÎ4Ë$—ˆ/‰åâ‰/‘ŠCÁhgåÕ³|-CFIy5§Ýûßÿ­2Üa¦ÉÛÿ© À°@@Ìÿ-.íÌ윽þF¢Ôµ\PÕP?¹Ys`áB "É¡òåÒaF³¤ˆÈ¸Â²Â†•óóRÜ®m?.s0 œzáœòîÃ1Ê+ê¤}Ójwf©ýCº{¶sýšyÆIe wT';›§ùŽ7®|Ž7§ýýÚ¿RT‘^Cr£hÆ’@¹æé°J˜ñÒ‘d ²qïs’¿âç9éF­ Ìdö°œ Ôù1ak¢`&91²q¢IÐÇX pF›ò ÃWkpú1ŤŠV2©ö{ñÅøƒB‡$ ÅXÈM-F˜èûS;·ä¾rC$˼…úGqÕ-äÖO¨b°.ØM•&¸ÛÌᬫ¨º,B”üîIMëbxòcà¸rŠåÓª hw¸» xR¸™Î£qöc¼å/æÎ;ÌZÞH+œ¡›»+MyoE"¨¥ªî²™3ªë׋(¾«¾“0üÇlV4hVÝŠ™‚âxÓ„ ­…«$ÖÝWÇÄmTFdQêN |j¶Ûi÷‹XYÃAU$¨sB‹5!rhçý]ó °edð ¿Å…rIÉf&MuÏTŠBQ¯+ZITËËé„Üñ†- ô]é¨ëíˆà{Úfz\ìÛï­L,÷‰¥çmâwÅ»U\ÝDr'sÄ¡ñŤ…¾Y˜µ@ó>CG¤Fp¥ÇÕ1Õ=æ[Âiôi50]aê\ŸìœnxSYÙêmŒ¤~dÂu^ÈÑX}Y˜ÑŠÓ·þ;–¶B¯œ Øë› 8«G`¯˜q9ß[âMiд£~ïñ³ð˜Á^]Pµè[—Ò52rÓö¤}¢¢¾&ƒ‹‹Ûýx¯ñ³^/@;ÓºJ5âÒŽÁͺmšЦE°ùâ%£²^r½eäË™>Àh~Jf¤ˆÚ¶Ù{ûeQ;í£ˆæUÏ8x†ñ’'/ §)átÇŽ£÷B1tõtÿ[¯p‰d–ãxóÌ{) ¬7›Ò5çoL2M¨‚ÒÃvMüf™ªŸÚUôžÀ´‰2–e˜¿û@<‡óeàÁ‰¡Ͳï|L²OãÉR1’ÎꕟÔG¶œ¥…6 ¸›3BJ­[ƒt‚¢¦>_n½z~ì^˜úµ}T¥ÅrŠu¿ÿ>!x)/¨ Ò¤¥ï¢Å‡€rÒ™Žà˜ÈlÞtCàÝ d­¼ní¡çh¦¦Ðô¬íPÁ#FaÚtæ‘óL›&¿‰D~B[7÷+='{¬­T‰óÛÍ…ÖYU‡è3·5)^‰a}£df-ƒŽúÚÓˆò5ÒR®"ªë ±TxE`•#IÉw³‡vfÖ†CC>—Öd;4çÖ듎PO®yå¶&k?+ðhÈÊØhz=AM˜Þ݈â\gU2­IhY2„XGo0Áˆ1ä00óÂtÿÁiaŒX€ç#€—•÷Hÿ]*[;6>Çýu-xk}‹P?O-˜b[œîÔ´8ƒ…#Ñm´q¹æò€ué8§ÈÑ ÑÅ—Ò*—”°ðõÉ“^¹î ¿Q¤U³’_±ï#o dá4Ož{aOä‚»ÛØä¶™=~Y¼W JN#î—*,‡õnÁç‡NTó„õ±$L¤¦¯íqÓˆ1ÿ*_‰I{¬*(éÚL¼m//Ó€;ì&é%yü ˜¶®(ýÑß«ã?„ϯNÏ8Ãq8Ñý…é?Õ+ìQàBBn]q6'ÒxÜèÝ‘J ½òM%¯K>¨Ù’~Ø‘ú¤¼Â"€I"|ýíæ`*1Ç·o@@©˜Åš½]­LŒL,ÍDþñü·”Íóà°Ì.nä.äN$~4‡,÷³b Nô#k ÃÕ÷ëWŲ,’œìŸ¦v&î;æòUÅÁí£ÎâmäÍMÃ(ƾç»~Tüzß3þ¨›ÈO˜ÀýØ ’ý88ˆRõµ@ÄRÖŠ‹Ø´')ñÈøæž‚á4%šŠjvThâH;–6Ö›ÂT\ ¬™¬½„1ke²oZJ ™†ÇžØt'™ ²ÉìpÓÂÇ,.88B`OŒCB‚YSÔ9Ø|Pì% kkÈÏ“5ýíÈ¥ïEWŸ!kfD èoC§!åÐ?Vüljþ_±¢¬ƒ‰Ñÿqi|\„ •ÏÊfÛÚ·£+×ÍÈqsO#8h1&Þ5ÊD:‹*«{|XXñäòÆWµÖý‰œâø`C÷rülŸ%€Ž69~ØJ$ư+ŠÖF“Ò0>§“dCf´æ7èÐ~§="à];=ã‡ï ž÷$ŠrbÞ‚zCþJÜÞ½ƒØøi¸M¯/Ö;HñKdî]×¶šö%Ô—®ÌüyµÌ õšùÈ`CÞQ¾ª æöÐÏg1ùHÒ•h_~zI|Õú(_Ùö]¯@M"¨?‚¢`?P±ŒÒx`‹¸Õ­dÛÊm'ÖŠ70”œÒËøØø)g£(¶H MÉ|ýßÏ{ a¾oíwYõii$ᇓïŒ>ÓB•å®÷{îz¢}ˆYF5ï$΢åUêIR`6‡ùx>§,dñ%‚oÀ&yRÄ ¨n/åàožolQJôF¸(u{ƒà#›D.‰i¾Ög¥»¤é ¾+•ÈÆ‡P«‰—ñ­äºœÙ’[sèÖ7%}ü?!ù‡lÓü+Uõr4ûw¢}å0gˆè§¯M™ÏÎ^œ™™ÙÖÚ—4ö×1Î &ЪX²î¹taLZºý"ü+Ù$œ{’ÿMëêb؉©aTï²Ó;ÇûòâáéçU7P’¢´Ð@L”^G\ ©‘89Ó†™ ¦ÃX œö‰¬ÃX2{i«“Ï~)Ð 8{hš~ðµ3õ*YÏð7²Øgej'¯OÃÔO.)ü¦·*öÞð4°a)!8"oÃËàšœŽE.¿”H$Z¯Á­Ç‚÷.ZžõfÏ–DÒ;CѲƒ½¯Zm›_^ ´àúpö»oØœ¸k<ÑNñaàùZÞn °J :WìÄ=ätQ¼Ðç»DÉ6Vv@äIÈ¡ŒF)ô8Õ°QડúHB4á|h5·,LèU`¡ÑÞâi*+† Õð`”©u¨_câ ÔDÑ2‹ Ð$Ù¯T‰øj,¼/@Vnõ°Ϲ3úR©é<}ÜúX¤4ú¨æªZf†°máþ<ôsÊFÅB²1ÂZHÏ·8x!‰íí"vÙ…ƒE!Ïß Wf]ì—úøf¹^x}¤í‘ŸeÉqœ×@¾%7Ü‚Ph)çÙÙéWoÇW“t š£D‘Í(޵i>[^%žš·×9y˜£Šá¹tý’X¾ +&†o°/zš'-tAľ˜Á僭¦”lo{Êׂ'øƒysÓ°­‚§õ"H¦Œéî–Xwpe1vT•{x€Ãß.×óGÚ™!î“ÈÔ¬É)Áw1°b5sE2°Õ¢ÆÓ¡bjãV¹•ý˜pb¿Ò>OB`|=JyR 8_ãñœ ¶¯­Š%ñì煮5&)W‘$ÁM„çc ÔñSÛ‰þ²Ü¾¨µçý[äа‘ <Ä ±À<¾«d f™Ê€æóÝ‚Ó8ùÆ¥!dåh‡QË'Û8ÌVô;Àu ñwWÉèÈi Ä.ù §%l¡¡ -¯FÅòôÚÂFÌJe­ªDq£ò®‘Ò•vù¨èñ—G<Äï„B¦‡¯\ªQºYzRzÂÆÝȳâ^M§%!éûí!É˳7„cd=ì,EˆŸÝAo½ã ¡.<€A¬ U»qm± ÕAø—ÒcVjH{¯ûyTIñ°1+íÊrYº¤µU'­kyßFe—…9™S;‡¾š9}ŠÞˆc›óK±Ô(ŒAúFÀ±ç° ù±šÃF¢ïÁ@~Û¹ïårò´‚)‘ž}¤.CÖŸ^*~iVRT°B’dšXΘo#®`›Ôœá×ÿoý[¶uNåÚ?+˜?Æbÿ×õO:ôï**ÉÑrÐ}Œˆ¡ÛÏ•`;}n&ÓŠ´0½¾Ø"vPᤵ'‹ºž@dâºíŽŽXˆX‡œê7A©0*ù€·K­0zcBÈjÞʱ¸·×ÆÖÊú$>¯ç8Tb2úX‹¶†Î©Â¦‘¬&¶NmëTmSÓgšËqƇ030䨶•Ë`vb ã¯aÄYÄŘ8´‚ä×¾1~ žO1:Ñà ÂV?ᆒ".÷½Ôü.Î_ð»9?XöOdAüWÒBÿO#ˆÙ»Ù™9¹š©˜9»[™ü»Y¡Ú™Â‚ â×E ªu<ÈA^~¾1gÎáîbàb´³gø •ºŒLÓEøöGð Bñì€@Ï?ðøœ²BÒÈyÚYxXº½Îï—¯®¾E‘T“„#áUZc…–¦Ô’#Ëž¤ ÐÁ5»qoÌ:jH ˆc;)̾Y{å’DS~)ö7$°Í1±‹B(ú¬m ‚9yüûÕ.tÏw³†Æ¡ÃˆÎ#äâÉ[¼õÉuå—P-û°€<¶31Ý5¢i'-TxŠœÚ/]s]ȧ©[³Þ Ý»àZh,ñ&ðõ¾‰écæ.ŒÛlÇ-wa?Uû°GµtYQ,/X e¥"½†IJÔªV…güMCÐ2’èm]͉KNŸvbNz ZW»jÔ^­®Î)²ðLçüU#ÒÑA: ¦õý¼—ï«Ò ‰[/íf™‘6™PóØæX=޵œ‹ݳ–-ƒ‡ÁëÒ–¯zTh-=Íw¸h&Ôf;`úÊyý#¡Êž¡­’-ªT‹vʯuÎÆwÄRßáhG{hhmF°4{m@øZ&ïºå†ãx3ä4_Sý+Vgî#“c€ƒGn–ÕÔ ˜§©8tGÊRÜмi|339£Lüß¹BÈRõ¦LëZ W“‹­±qéb…+x°ÁBÓ!§ò¢à Ë’mº-7Ý%iN2q 0fE˜.D<>„“ä"-¹*À½½3½“Êâ×èËx"PqDÌñ&o·WÚlZ ‰ž{STï{U+S›5¾‚32î»feDZ’‡Dp&ï¿“.Èä©@dËæ³r9š_Ó ÿ´J¤¨„‹UŸó&é °× Ê`Z8u•¡òÆóí9áXHVt€óíMGÆv7ðÙG`í|î¼°…O·KšáÕíãj’agÍ©¬m–¯ƒ?4¹šéc3ÍÄ4¿ßòAÖ8i—nÕûðKÐ#ÑY/q µ€Ò2PÓ$k8ÏÁUGNJüŒ¸õÍ—–_¹á:bP­)у!­.ÏÅPL‡ß'že_#;åðúÆm,Vwó7…Î4n”‚Ç? +óÙ—þŸÇ«„™ë?_ˆü#NeŒLÿC¨[åß„ëéôJ"Us©©ÃÖòë T„…­­ÃÎ$”çžNÝëdë/3VWÁ?“»roz vb™·N«Âé…3¸ç´o±x\¾¿?|@€ç$+õ‰c5i]šÌÓ"À6™™ ÿñI,¦4sÂk\žb¹VDe f /V¸ÇépŽ"ErÝù ?B»®Ôþ±¡Òϱ¼Wíu\+§""d†#ß<̬}JdkP(hïZè !ydÊdy¯òŸ¿Öí<œÝ3߸ՋPW³K­2IÕ ‘úµ+/ážãÚ‰b=xÝÎÏ}}6nÒ¾Á2X×C[±Ê9TÔûŽë]°Ð¹™ÃZäÑÎ'ÍŒ° Ô”¶$áŽ)‚æûØ`I@hèÞÅ1§ò8•ù̦q-U#×Z sj ®ŠO áµÃçö2«Ûòšy>èò˜½ØÑþÛÑFþK~1É\\jAOXèTÝÈñŸû±‚åö²^×]ïúðòâLq«~m¤”SZ¯å—ѹ$#û'𠆆ÚmfBž!â‹lZ e'süS$ggŠõmÅÁ›;Ð Wž˜°®ï¥`Gä£*Ö‚}‡©¦•ºœ™ôïæèq0íëšwÀ—Q{W{[#U™¿Æ‰ÙSJ8ÔêJ&¾þ6™ ¢§S„ý‡ß×ÿA—äÿºDÍÌÜlÿùÂê?êAâ¶²âp··bÕ̼±Nã'e¥6êaD8 J˜I. QÐøgFpUËÁ÷åó‹ø[ƒRkŸk„ëXæ©oK ¹0—·Õ—©óóêm?`JŸÂÀ騲¦ +êÐ×ŠÃøé+ì7+ð"ÆžÂxŒu­ð"ç?‡×Ïë×ãfë§m¨Z¥/|ÜʖÐC‹HŒ]»e}œyåeò /ÊŽÚ9Ãf«nA‚íÉ o¹g|¨Ê¡16Ç}—ª:fÛ*ïÄÆÜH«X?Ð¥Š`ù¶U쎀˜ ným{*ª?'fÝ+xO49^# þñóhh±Mä}ãØÝÁwZ‘:²×œa©Ê2y à-˜BE’v¢AÅ–Ži>2ÿ¶>nÖÅ[‘Õ}µ<Ã}‡—»ŒÆ8Ñ1Ñ%aøvòmOÀ1ºzÍØõë—C0ŸŠÈѶÓùäº$àݲÿûaöw ›Ÿª2‡î^>s–K8?&ksö±þx f‰Rñ=ʨtZMäõX· ©_Þ;“)p%Ùl®‚n$ªæƒÂ!œ7“6šݽ»÷YÝ…{d­EÜÆ¦ãÛü}7<Í!nAì=Âè"ù´ö÷ãöl}^S½¬ÖL ±8ÙŽÙÑ0–ä̤{_ò!Õ­^rúñ9ìøäüÅ·ÑÝ€ój:g†Ønö{R®N’áóo” ×ä0~¨™ˆõŒ¿bMËÛPõ0ù+ÛÔürò ÁØCh,Gq ™q-MhI•Š8»ÇØ*NÁr3V­-S©®Si_¹¢Ngm¢c§Æ êÚÞÞâæ±^µn×®ÓîÞ®Óüع~Ù¤Ó<·Ýz7Bš¹úÿ¶ùæ{Ì3½ÍuüF^Ýù¶'„1ž 3|õâ²Åxí‹òµ'Á¿E+Êäg¸cðÁx 'øýìðúìáû>2 CþÙK°o·ù™(üŽ*ÀríÒÍx#ƒÒ}k¾u¿/pcÐvoƒÒÍt³ýú!îw6¬Û‘w×M3ðµ÷ê ñU+€éÙŒxç” ”vp¸“ `}“¶·(õ“ @ÀgüªDVôü¡L‰þG,Rôl5¯Ú-›x @ÅaîEc^Œs®U–¾gšÓjómâL0êZ“»ÀqMǺIóN'Ý}X&)ûêæÆ¾é–ÜÃÈj•´éšŽ °Ïs(› ¬Ý7n0 )—Z«a)ÛIFd× Ä·jÈÈi kÙAãÙ<ÔÎ%ɼ;—.¤+W/UÎ [ƒ0<×ê.=›UV°ö&‰‹,•gàÀZÝ’Dq¸Zhû¦S¥ž­ØŽ‘wÛ¦ ›­[KgúÙÎÆVé*^ÌI­¿söŽ»‹¸CÖd(­k@ í»ë2vRqÏXðô†lñ¼õeg:¥g¯z@@‡G÷*…¸5…ÔŸ™Ì†øî^Ú‡ƒµÛJÄ„?@5 dådtzßxÂQ|ï›ÍÉ@iRQ Ú¤Ïìê­”§E‚$*¥ó~ b wüUĶ¢Pã¨Àš†éh+4~²¨6:-§Ëƒ Ÿ¾l1ºŽáŽ Ò+)×! [ïk"!=úëwðƒÍÈ÷G@Q4ܺ6·‡ƒ­ævk¡ïñeå…N{£Ç%*j¬åoKëí­Ž®R“§%ÀÔ8Ô´#k$É.Î9} .Ùuå\)k·í{ …oŸzAŸR»]®Cì…+ø“¨­ Éz°¼f·JbލC¾žs;%BŒªm™ÉSÈ>ÔºT%$õøÔJY GÊÉb ÿ™p½ ›ÂŒ:"Q»³×$Jmn’¹~ƒ¸‡öh+„ö…g/b6£/á+V?¡ç…¥p³Wf‚ɨå­cqé —ÖÝ$”XûÙ„•ÖQôÕRZ{È ›ˆp¢»Æ.÷¡®­QW"µOÅ0„?¸Ôod¹ÚX|WR‹ú½ZAÛYGœÙ·‡œªÐfK®ös6Y^M²›’ã£l¶k£^«ñ1‚I(G°~0ñ&â7·x>¬&¥ÞçÝãÌõªÔ㮦ܾ GóÅŠÞ…ûÚ-$LF‘ / G›Äòý/¼sÏ¡Äì~° £§˜ßÃDÞÌ^L4¢KPÞù¹í¶À#N,‰½ ɉ4ÁƒÖ𠡍U4‰i,ÂRô®RŒòØ5¶£È½uƒW‹¸“jy’e©ž¯ÕgyŒþ¶=P«8ýÚžS™%8ªåâèüë´ѱÐG±%+¸á+|½’Áó" b(é´&68a¢ÒÃ7¤0­s ÙkkæÑnºû‚œ{æ’-¾…A¿(å¤ç;XËqM Óë 4¬Gé[µ –5oùWé4SW)å{I«YSÛ”Í_ §º6RŠšÏ„ðØÈu¿dÎÆóë£êvÞðÏ$=´.3˜ìS©™ºY1‰„ÛÁYÊÖô 7Y½DUDÚèNãõeúêR­›cë"c‰š®Ãt%ŒH¸æw8{…äpeˆç,$Òîqœ;Éb˜£eŒQ}‹È´˜ 7çÍ3V& Ö£p¿Kòífi?èZ•¾Cù`–Šírù,$d²ê¯ÂL6lGéêÖû$S ûà™aœñÉЂ¯8Ôeø ›k7d]{Û¤ÆÆœzèFµRé^rÛsÛ–Æè»Ñ?q >i/îf;#­qÅY/ä&ÃT?(/Ü}ï/~¸ íl²~ââ§Õ¤×¶h”¡ØŽâYfc7¥KÁí«V(0-;ð„÷Zà sh:µi™Ò¾„õ™^x^¼’€Ðªßd¨•+ýÆ®”Á£o¯}Iêæ$SÏIG8µfË®}ƒyt~;çïÂqN%ó€©}bjý!~`¯hee/5Êæ6ÐùúÜBöTJr ,s‰˜iáÖwš]j øK¿¼ç2Ã5#4ÒênB¬ü£¢Z¬1–‡ˆ45›l„V=rò•ìB´d]-fØØç÷E-pŠ8·JS;‹JôóÛ6Æ™0_dÕzɸ@³ GtÛ˜üм ΊSÍtÆJgm¬æœn¦Xb9n´ø2ŒOàûv—BÓ(n?fgGO¬æ׃ã¿åo /O²#ñš5|Fj,ƒ’Ÿ^ÁŸíòóéöå|? œ)'„OOäq4¿að({T¡YøfNΆ¼èÇ[&o‘åa—X[,´6w<¥ó?Ô5lËQ¶†]/gKèNsV™êV$¹:Y’õm£¹ÜU–DÊôw2K^ÝýgŒèü²\ëD);t1GF6Zõ“.ÝÆèW/!f„QMÅœIš^'ÀhV¬µ7l5æ=Ù$öà Uý-)ÇÝàÒAE:jÃ%'c†X‡ô&ÌSuÏ,¢h /¿Ûžä5 vÞ¼”V'†]AR|§(I}}“éÈo~ÕÕÿ™ë*~n[gJf)ÿ³HüL¢)O’¶ªkÀ«Œè…©¹ jÌY½×¶x«D%µ9Ô‚rþfsI…žð)6DÞ…Fo­lHOôlû.ÅÂÑá6%ÍÛCA)=Ê]ÁÜ„ú*DOŒáØgvóæ|35Kü`Ï¢Èhºˆ¬c+wÞÈ@ÀpÆ~ã8ó7:ó“&g› K¯2ÅNô.åMè¾…äÉ$qUá“Y°ÌÉ?ðÄ»€¯÷Œ? -ѽE·¡t4~<üÜU@ùó¶`Ä{ió{¬LÒ°oÎÓí¤4òî~Kì¾1_ÖHõN`¯“öK9%wà{ö`NÁu—®.¿Ì UA¯×7“c¥´A°þëT„GÌ”õõÝDƒ3ª›,Ld²œB·­€'µ$‹+*é ªœ¾Ô“4îº/.YÏX“ïøúBNÙ ;<¡ƒŒ$õ¸—Ï®á]^/ŽS>/¹ùí\SÌzuµìЇƒåï2d9ý–Ô7ô•wT.ÑéÙ±x.»ÄÈÅ/àsÔ“RPŠMýœO¹©ºØ7f8æ×Xù?ÛÁ6)NŽò0R´‘„x^Ã(ƒQM4_BŠÙ |pÞ®E·u8 Á$GTÁõö@Hœ!¨¯¡xZ]÷ßóñ›w„póØZvUF$@àwæ}îâÖ™S§~T;ÇÎî£fèq#t¢é³5 §ãXJÎx<Ó\…íšö€)cgýQʉm“CÌퟜœüìÑm;é@ÿ~Åy5Ée0£í…ËÛ@ÐGÜ¥›‹{Üœ¬74m¤ ¶NyØÇ{ŽÉýq᪳O,¤£f}öZ¶°$æ†}Ì9v;$f~S2âÉÅýAü’ ÇÎ+r} ¶x·IHW(Ò»qÃèR4#Æ’ÎFceâr­¬+Õ< õ©ù±ùIq* 7pú%=ÑgÄ+/£(†Á/D18ª¤wÑkÏ­y|»(GÕ<õ „ hQ¸«]ÅÏùøNy#‡Ô7á÷Ý/êŒëAÕ¡GG±Ä»¾¨qš…ÃaE©Äò…C´SSOòàÞtû$übn…™"Ùâ€tS_iÊÕ]*Þ ?´ÖŠP?+á¼Ea›-•TnÙ¼aÊ{Îc}\²ûqOr²{- ËÖOÑÔŒå‰l0ÐÕûãšDÞ霞AžCÊüþ:Ÿ;¨Š™ií'—” ÄäQ#g4zµ´…Fõ_µlŠ.­³Éê‡äg鎵Ä;T7t•,ÀCLØÂVÙé¡?ÙDeÍêz@'Œ*øNLÄ»Ù]_kQ4‹‰qtã#µiŒN¡X/+hõýQqÖʳ®…¸ìK^c 9{ã1»Î•f´AߪǸ>ÈùÔ6|p3oĸYÅŠu$ŠÖ9;ÉØ:ÙØôa5Ç\@er ƒÝwµ—’©ž·Êü&æ_pß^ܸïq4Ø5 (»CÕ&>Ä}~´w û ìL]õe¶$»4×÷m„Ôâwˆå~¦xf:}Qå O;" ì`<Û¼'dùG_íqüú¤ëö+þòC'ØB‚ñ7ìô\†;Ÿj­0šîÿÕJ¿ÇÊïšWÞÆ{ ž®®.XÉÁ?eK,šCNŠ](u \ùÿ‘9Cb5:)25ƒŽ0DßUe/«GƒÒ‰¨Ñ'œUø3Ø3'¡ôMë#ôöûk¦J‘‰—’dIJŠZY2¢½O ¼{ÔT¶šDíe> ÖÄ/Þ3²wH~ºà.ûª» {¨ŠÛÀ¯RÉÔ‡ÁD¤Gض’NC@”ZUt‚5« ëÔ:,H°—J390È´’ÇQ—>»+¶Åk±‚»» ôÁH_Ò#Ö‘¨W{iÆ&t ­Y­Žœíá‘Wd AÛ?WÀ•UKÞ±¢þô›€,•0R»BD­æT¯3Õ¬ÿ•IöDŸ9T®ÞÑ5Æòˆ®{ÎcýDÿ…n»Ž´S,mÏG"‚£è˜“&ú.“VTê/äjiµ"F®Z6ΞûeHtC¾È]æ#ð¥<0ÿAÕ‡Z ýiú{j_¤>ÑŒÇZ┵j¤éÏ(±Ä”éåp¡J¥×¢Ùc¬HVÿqáŒáPªƒ_?ußxª^–[UɼÓPñcÆÇiHsYsùÉV:±˜ï4—òKßüÇo£¼¡©óÙÊëe²*ö´,ØŠF´e“Ái“Å—!Æ[ з¶UŽTó™ì†¡-Ç>C4ŸŸ®7£¶Ï˾“¸°•žéz€–£Ð%îÝ·Ö7¼gO0]Ú­ýªšœfºÇW2éc5¿B’Í Ü3Òõoðõe¥âJo¸€Ì¬59ÙÖõƒ Yy +FãÉŒ4©È¹ÁÑTÕ?‡%ÙÅ?Ð%?üý3ðà“uÕeE£ã ÞÑ—ÑË› tqÎΰƒqÕÂNÎÆ´Ø¦ˆ„È%ofÈÙ‘¬‰pÄžGðd#ÄŽÕÖûèº5ãnÛmºÖë™âéeº%Ý„+Û‡då¤ ×Á¨fÙÉG`8’kk̉?rÕ¤+HàoÓÕHbíÇhÀ@@ñ ÿ¯ žÿûnÿ?Vÿ<ç)ÔäÿµXF‘ßQÁoÂ/Y¢ÕScEà™é^|Áºžnn!M-0 ñÁjÏf™ ã „Ìô,—ËÎã©Î·³§ØŸ@ü;Áð[Ü+fŽÚ}9·U†”Icú? œ9Ê_Ùʧkdƒ6š$ò³‹Jʼnú_E«CÜÊñ­R»`±ó- Õ‡zy ¼aaÔ5¦i¨ÜÌüe½`mT{÷‡rNÙ !1d«áuó×6|Ð…?Äô¢tßn#`ͱmNˆ£)<i¥]hƒ)o ¼…•(‚<°"P ”ÛÑÏÖ‘„ÄÑЉ kô”OKݯa>)‹7M‹,ßÿÒÁÙŒ5¥Œi…FŠ68®¡ë'Œ8;”ÁØÇö¥Y&±púnЄÚüvî'MÿյõÍl\Žš7iäá‰&©Üý€ÀÚl0 cûÅã.<¢O}¿æÌvcHNjÏŠCØnÀ1€-#ªúMI$ª/ÒÊÅÛɶp]ÆýÕâ!ÆR‘'t´ÅI ŒF?vÜŽÌÛ³¯¿(¦8—OV=ÕÈå»ÒÇÕØm/j¦BÊ ­P=,¬ËýäÇíÇNÇ«_ü^Ð=Éžrƒo>žü;ý7D\Å{ýÎG$·»ÐüGÁ¾ÎÏ-o‡nþlü ež‚½ßÈM àøCÊŸ£"p|ŸiñU¯¹Ð~¦æ\Ã/íñêK8ŽüP÷Q‚7HèO-¼×8X�)ç¯èç3P¹)A€q¬ÉH”8h+`ã «ò^ö£`Ƴ «e)2ýîOä¤úQ-^Œš¥ì´öÃŒ³dÇŠ@}‹êm;Ix;Ax;Eýq|7*¨þöÏê½:M±o4¤ðª Ý•|ÒÒ1—!]ìܼô½Þ…8¤s»++Sm0^ñ¾\[³ýýÿÕÚY€eÕl{œîîîîn¤»»»»KJ@AZRB@º;$•îFºK¤K@ô¾~ß9׎"ž{ßÇWÙ>Ìÿ7{fÍÚkÏÞ3ëQ ù•[@_š¸ð¡<âùö¹Ì·\;Ëîw´CöB‡*q·×ð@Æ^sk.LçUN|ô±æ)½yì Æ1±+͸4e.JÞ2+ÅLÎ2ʬªÒÉgv=Q—ä:Õ—öyß^éÒÛU¾˜íhMÙÞ¨Ö\eL1s•˜¸œTSA$“·HF¶Þvƒ\àfò6ÍWí‘Âð6^&qQáPª¡Ž´xz“Z¡$2­z£v?ßë~ÔÚE}Ÿ…¡óÊÓý„üÜá&™ðÉYX&®l¬õÁ£.³4M¿1K«)¸¥.…'çÌnسÊpôï>Öê¾×E“í#57i¨’'Å9\çèκ6 ÅjjÚWx¢Ù·~êyµ‰o%˜áÝ\=)é¶“ù|q-¹™—B«!¶#»Ñ:Í¡_6žŽ®…yö¦ÃÇ»´5.ØV¬¹X¢¶¤î•Õú„—§'ä^!*¥b%µ#Dm²jT« ÊNÇdh+4 jj_Ô›„ŠMò@Ù‰Z/ÈK*/ a®4)(MuE‰»ôë§ÊSoO/Äåd¥wø@µ¯±¢E_°:Ã8eÌã4BöáR—hÊ-¾aÚ„·2¡Ÿó{ôùr¸QÍ)þGÜ+ÎZ©åƒ,‡„æ2¢ºí49 òOؼºŸÝΞÊš£|uäYDÃêÚƒqe^c Å–<+X›pâMXŽx6`¾`œzλmŠZ®öt9”¡Ý*Ø8N/À~X&ÐÂqßÜÖ p·Dëy†<ój8Y7½v«zY´Þ|¾ÀƒŒ•£È‘´ÎÙ·ìÁ†õÁššqQLJSJácûÌ£¢™ÐwÝjô‡u1"<½ùl±ˆ=$Íô!Ó´Ò'_¢:]OÇå~hW6Ÿ&²M’–(·©ØD^‚*Q#:²4OŸI;ž¬fo…FôLž#bÏ8¶ ÑZ. _TîIR í€qyç²èÉäMeÌS«È\)3¯ç rytÁ¬C’9Ó²ÁÙØ2}¥’È‘jr/‰4ÈD¸+ËÔ ”±e”ßj «ÓÍ"Ï-ùºR¥ô¯R-4µÏʈ–FéñŠÜô $zÕ|Ž 4ˈž'‡òá㨷±HÒWö¡4ÁñxÅšNÚ‘ìè§ìdš$ÏŒ§¢©J÷Zph›:I§Æ»WÖcY‘Ûº% ã¯: =0ׂò<Þ(xÍœ".n9=|¸5Qºž5Ù•ÂÍ*êýª#sV™äóüÒUK÷bçÊK±fÛM²4†>pÏBéo߯Š^®ª°yÃÕ¿Úÿ"sl™Žã©Ÿ.+AŠ—¼TIÊ–•}¢†›MnŸ(©us^RH÷-ýkøqkúã¸*¬.ì(ü}V êáª<Øìgé™­â5nÑ>âÊúB2˜~ƒò<­›ë#ëMMjašò‰!%ž)7“±OÌm±…bÕ ì*4*øNEO®Ì·ÓY’ëó•¯6:4Ëlë_´=£íß~‰±Ye¥Ö…µÚQãÉuåLõ¥Cªí<¯*W'Û”&¥Î8bû,ªÄ³"Ó´Ù"T±iË£¤!¿I³NE ôÝ^XÛ]ÏÓoåƒ/»\‚÷Y[ÆNt‘%™Áp'Á³m^Ìg}*¡i,åwì²»ºd$G?5v\©"«‡CÏO³#Ç'Á^çB6ŽhæRË"IVu}ÞVeD•nÆwÓWùI±¦§Œ£ö2=O™ép\÷+ê9p¹:¬*5á]›^hÜqZß’HL¹TY\Ô aº/¤æÍ¬ü,ýÂ*’Çh9tʼn݄2Ÿágxßoñˆ¸K lƳ/šõÚoçãfeSïbÕÖrçN¨¼ŽafŠÁ­’(›6-'æìLY0íõã6\AB°1Æa¡*±…=}ï?:øUÊÿeQ¸]ÑÔeHœ•4 r=í§vX´í7²´Ú9b¾éa*’óðØ1AÁ/(BàC*ˆ³ÇË¥Ú[§Ÿ q~#±ço‘nö–-Â=Ö‘Pq‰JȰÊEÎY½•ZE€«ž7@…—ÛËÈ‚ŽÞ„Ê»®8Ëq¼µë7:â<»3RË(äŒG¼@"ÁÎmÞ[êœJüæ4(zu}æ5F¦ñDdÞTmb]½«œ@Yœ¬-ÛÆM;ŒõŒ:]üXrË"hš]æÛô¨¥á·Š ß½¢‰ _dï7v:‡O)ˆ^_ô¿+ôYèkÖxû˜&£Q&ç„xó4аͰwÑ9zü°#x–Y6ƒ¨"Ál¨Œ ÷%5áä†I°îA6ξm’ê[¦ ¿KÑ%÷óÒa×9¾<ã ¬º|d»ÞÏe†VK½M(É•ª4ÉuY1Š,ÂÙèZ¾Se«¢'‰O Ž¥£RÔGËû(ὌȯÜk§Ëâ-5ÆN¨E:«m©au“ójlN¬D”u`Ò#¤ñIsTýf^HØNgnÓàj”2m(qËÇ)Üè²l<姦Ȳ¸Z!>ÿêú %ûQXîÙ@ ”;ÝB–WjX¸äØU¯÷* *äz5ãã÷UËÁWªÕ& æè,QžE©…ªlB¶M%¬ÖÔÔœIo¹Ñ&ûK&†)[÷Ÿ#•@ÁËéa’êÆyçóÀ/¸6­Òû’³±É0Ê,AkÈÖ¾yO¼íì¡H‚,7?Vöüqc{ÚÍÍ•‡+‚­ÚÈBø8Q\ƒ > ÷ŵÁ¢+´°Y@*ïä21Kå à^˜;å{Vάþây^‡GzvÙÛÍ Èodø—÷‡\yJ jô'jãõù#H ¼xÜQŠ÷‚'b]¿\½ò•i§=”vu:“Uq{7€7 X9eÜ÷†jHæIª¦™‹öãä¢ý9!ÕbËJJ68PÒjʆô0Ô á›fÔ©NÂäÔ õßÜ»âÌEsãXË÷K ÓŸOG¢Š3\ñfruÄððïÃ…_&x³É?NGÉà¡õŸ0îËYuÉáY?–â’‹t™µ`@ïÛŠ‰µuØjEñOÿ´¥@×e ¤›”ÿX)Êç¹ Z XúL›W•eúÚõ‡,/7¼j•-Zükô¯:ò"ò³QG:fŒeÝô×8ÃÀx]Ì_Õ×ÕºUšéÐ:†jµT÷ø#û+lL\¡¿Ì¥é8‚Ìs 4Ñò¹i„£>ý)åJZ^°>—T]B]A1Ñ((¾ÎJ›:Ûšv!n#²8TËÇ÷=† ¼HÃ'\{u“Ú"c¸Èûž“IQ»GÀ B)ªk _w:/‚>#Mj|Ëwä<Èœ#dÊ’_XŽžyíßZá»é ¢âI-O*¸lí[åÑ8Îô"Ãk²dÎüS]zÈ®ª ëÕ\zW 9/»@8·Ö À3¼ãnOjÉç‚§òNÏì qOZid[4¸òåMÚ¸3xßµÑ0\Ukæt§( ;aÈLí¬[«gˆ™´Ñ „•Vñ}<öòaS ÈØZÐb;nZºØ%“ïžÒ‚¼ý²UQÝfƒ8­f]þÈB#òTV¹b÷4Ë3É»\½˜EËËÿͼ/bz;«fØ›™¾ô× Üò’û—‘ã{pÈžNHðp£b®™âYõž4·Õ§—U'{¢ê™ dÓô×ót4†È{âpéPóL°êb燷Hbz'#œÃxtÝ|&~úæˆh©;ÿØ…ìÌSSûøyI·ÓìsT–§=dQ=›>âö=¨ÎŒéñGñ|ŒŠk#}럛›#ûi}¶ =Y{³ƒßægG›p?B˜Ìˆ‚Lâ±–¼Az$á³KeÝ— Žè¤*ñö˜)¨ =^ãèà&ç ﳇœ˜`•ao,Í3¾­Zò­0½ÒÐ>¹+>y´é£s ÏŽgxíGÁ¸R˜éDË4ÖuïúbÄùçŽÈüÂÛ.iüÄ_=’‘‚²rñLɶØCë#‰9F#<“_ÊZJpíÙî’ÿbIN«™’/JСá¨ÉÜùsŸÊ–TUaÝ 9+¥)ë“P¤—-¼ ýµÎäPƒNãk`ŽUzˆ-»£´N‰Þw‚34ñ’Ÿ³à§è„½^e«Mv°å '^¡1J×pû`èyƒæ/éçu8O–R1Xì™û9¦‘>ãáÙ¤Svra{ɹe¼X³îu¾Ó’Ö úvDſͥüt8µù ÂüÔƒÁ¯µºüt)µù"ñHc{Tx§ú²Øµ`£ˆÕy^ïM­ÓéõË£M©¹ˆuZn;1«ò#=4Š"Vy ²“^‡¸n^Ž7³ÃRkŸx9Ì8åõŸLPó¥;x8É¥h1¹EÛY›'ÁŸêe˜-òβ,£÷ÔDQÕ¨ÎÅ•RêP€iÊ€ú ¿##;4†À·+;š¤A×ìÆ™!.#iS_+þdÌ”‡±bóIEÝûšahóy\¿×  ¤~û^kM]Ùâ̘5|è éj+Ø¡W¯r±v´õ±qÊ`«lr(D²žc†Õ§›‰œzÆVlžôÀ.‹Ìzèjî¤wéÅÓi]®\ '(sªÊÇçéâÅi[§ùµ ¾EìM»ÌèCO­BR„•í¯UA5Ò™«k†q?¯Â“É‘º)gV—bqØ€ÝG‘.Ü(e•»pãÞbr(ø¬ælðl¹Zibû|Ù°W’8/-“Ë™ä2uãú Ž räLW©«þmWiø.Aȇ¬+ ¿Âš˜˜Z±HYßaÁɈNî³”•†Ïˆš¼Ð²þ­¼­<îcS!šºÕ|õ¨Ä½“@@.a\oê uÍi}Ì`föQ²¢m;PžBk1aûh™‰DáÁŽy]ƒOÍFÝ ³ššÅœ[oÎëzu«ç´°…t¨®•ìÀ’•2i^uZ=‡Í¼æ’+*JÂ/»Öjô“ðB~§ÝYCEêjŠ-m^ª‘ÙCùimrBûtç‡gÇÝ-öÙ'°àv€3ÞO4Ñš]/J( 2×î?yôe7rÔTàæPbXèËsùÐ×ÁȱXîL=L‡ÍñˆSñ+DQùÌReüPj{nyÛW‘0¥öörv rúÉ5ôñ˜¦Þ·xU%3ôŠZ[¼.îy6ûÄÈ‚x¡OW9_,>ŸêÖ|ŠË;âs¥Â;o£ î€þ íB"¹‹æÂ-ë`ÆÝ\J…=h„á;Š ÁøuœÃý‘ }îGµí˜óÌÅC­½Øx×4¨$s Ð d—Ïáù zª}EýБÑÿHõÎYäQ.ÿ~X A\ ÒŸÏzüx¨ø¯×ù5¡}Ð&ñ¿ê—ÍÚRà* T9zÁHHÛA7`$Šà½ÙäëÇus²…¹yDÎÍGêÌEB¹y´ÉânÐ1Ýï¥Ð·º óvµ„¯t%Õy»ð“ÊÙ¼óÀ„ógyì·á›{ÞΟßêÞà!Ð|Î$ZØîˆÞ8íqö”G‘9æóËZÉ÷c[³P>ßr>‡å¾2£Öo-ߨÓÐï,÷õ”"XáD¹zóèz8äå&Uô|T‡óç–@SD}µ#‰+)~#ËJþ¶µ_¢&À;“A6éX­¬ò&³»”3¿ò µ6'Ë£³æ] XÉ{ëÉ‚½`MVKaÍêÀjü¸‰´Iø5^8åÙsA½- »b Y-q:¬¨ÔUU’ÌTuÅêµ q®[õžuf=Ö9)mh=\YÙ³=ØmŒii‘î'…Z…O*<¯w¤·ò‘Ý“D¨iMƒJ,cùÔqòŒØ¡ÙTÒý䢕dø²dp‚ =ò!®>uò”2vs¢§3íç…]ï¿¥«Ê‚"L Ìð¹mœ|d=öe'ÅÃXå™wS­PQj_äy¨I 7Ò†¼Ë34.ê¬(ÅJtƒwuqœhlwÔ_8…OÙùöf’¡_KµÙ”¹J$ºBææ£Ô©Èhë?sè•¡/)Ë‘´î›l´ò~7¶ŠÍÂ@ö Å75¦Æ2 …t¶Ðæä鬽(I£Ê1ñ¢k™´áyÁ\ïÆÔÓtÙ.º€~>¢}ëL¥bHý aƒPJ2Ê‘:öm™…œâÆVMÉðÇxE㨟¬NŒqSÛù”t$ å‡i×c› ¿¼Éu ¿,«¥¿Ö+é_ç #Ôz½P±®›oÚ‹ž8½€Ânó”ͤ«`Óö ­†ÓL¡ÿqƒ3ˆ6Ý€K×s‰çßè± f¿HÙ'‹~]Z‡#Ä¡™`Ò£HÇn˜t½˜'~6ƒ§6:»Ó¶ã„å>ü­Û›…"y³òL;m–ÖÊvÒd~ûÌšb”¿_™gs­/tœý <«qq‚F2þ*¯ÌÒéYuîqQ§¡óŒ2DòOæ}LÉÕfÚݯå©KgÙÖÍ- pÚ‚XêB$ß*í:ZwჿbaMûÔg¸÷ÂÊ6¹`Ü;‘Ý7õSE­°yD»çrÞ±é¢Xl¤ŽÒ¶æWE¾¨b²=¶#…©ª¶­àÍRÓ8 «nè‡mÚËIÌ‹¥•X §{mðuÉgbmj×àþjÈí<ÁX#a–•:­_4ŽC[ò¢‡ƒ/ìPOÞÈuá¼*];4çæ€%uÙM¿q™;{âÝü’€)8¿¨ÈS`Xå}+Hâ0®we—‰æk!I§šm»9:3\Ó&ƒ…ˆó IXÒ—eåcÆ…¼µeO6Uà2(b0óÞZ†ñôÒŒ¢,$Ì‚,I´â ra¥§ ]¹õ²]è\ è¹õÊ]ººÛqÅ*®Ä^}j' Fr<‚æ*CL Fœ×òðíŒý¯‹>³±‰Å‡%ÑŒ~ú–‹´•”·¶þù)MÞº5úôŽ˜jqpRásé²çZpÒWÂfº…Æu\Ò] Ì!e–Wþ‚(Ñùƒ’O´H^¯±Ö‹.!“ªu•ÖG%G²Yo¾X,ÇÆä‰Wkäð°b.Â~OJ·Mð†{N§YdÞªÝ.}2k'’Y-ªKJfnÖl"aÁ>8;´¾o?s¬ˆõKEJÉÛÀ¬Øv`hEþYˆybþ›¾³P¬4‹H=…\S-5þ·}Öšý=Jd¨ô$¬ñ«Sn5N›c*‡´UËsôŽUóe»by7XË~‘¹EL¬2íÔ{Cy&VŽõÎùþ–ØvH¯›é… I°¨Q¼“dëæ®Šž/ Âó2v ¾¶t~xmÛÈ0#‘jRYòxwû#B©Í½ºeº)æ ÌȧÓhU§‚Õ]¤ç¹tüV¼{“v¾U8Cõ\jKéw§ƒµOÙ…“­±ø¹ùõ^ûvl<®Ùæ¬ãÎ §ÜD1dëË#yóá¶Ÿª]÷Uh5×á¤p£"ñÀk~‹³ÍÓÇZª o—ü¦ƒ²¹—Ÿ¸pŸ åŠR­¸XíC‰îû¡}ˆzíˆÆÅx€/Ô§Oå½Rì ³y¥4§³J(40×ȯHXwÌá\Ø^™ ™oˆ£~â+0?"ÈÏÍ@ÜãÒÀ30x±æ{ž¨œJ.eVêÖðê™ððîÚèLK¬MÞÜaêt ¦} åBÄ\5ùL*O&hŽ8‰8U‹êbáÞµ}Æjtà¯sF²Ë!0Ì9(Þ›>ˆ‘£/Ä9Ú?¼‚ÚâJ52çh¯ÃƒjlÑ~âwä‹^÷^ì¹Ô™ÑÜÌxÿÈðÒÙ¸ÒWŠ•öˆ%•ÞÑbÎÍ+ ýxHø«füU¼ôÞpk£+a9÷lóA2mzôô‚­~´üöxÄݶ%A¨†v}!n²S¬¨†•c®•Â>ýD©û†C&Ò†£ŸwÎ3‹€pwX‚¶¸ÛñÅÉÓ/:·l57+^4k ó*pâÙoU?/4$ŒÊ¥)2r¨Cíqd1ƒmÜAÌ,ñÃêYŒÌ:húvHÚ$¹bt-V@QÔa œ†æ‰|z„¢¡ÿa®XלÝgjýUÄ´]bí{m“~÷t#‚!gb- Á¯ÉG$º¶¸…Ìø>/s.Ëœôú†édéÃ=ŒpJ]›ei®é©#qòÛÍàRu¤&…½qDkºÐ}–öv©-Ÿmɵç€=ŠÙº˜á›3tf+£‚‚ŽNÛæç'û0+Ò<œõnSR3"G¨é£k™Ç]²€ÁþLš™w$Aß,_÷0á u’-GÕ#Ë&+V›9"8‡$êtæ5ÙlÚø‰î!æ!D™§ É ª{–´ùÉ TUÎ+ÍJÓ¤3s,Jx“dÙ}:†~R®ïÝN¨DÉq»¥®oùÇá\Èašàkdt–ëq•²lkh• 0ÙòÂeQ=EŒ›dIÿJú™*†…Û?âÔÆe~å½,nü8Ätžc¶MÚá(D´ariE”º¦­íkôáLôÇcTÆÏ¸¦Mž©YÑ–8—ŽzŠÒíº5'Í£¼WL™H¨uëðô¿~N…cZŸì‡{êi⛢Æß ûr5rz=î• BÈe¼S=ù¢'Ûl$¤HfñÒpƒ…ºÁÌüýŽ"WN¾gë&FÚUɱ9Í5Æì!_Æèé!q^µJš2K{½W$c0×ÔëOñÇ>=ÝÔd(kµv"ŸëT›!sÏ9EéËC|óìà5%Dîìš!{ kHµ» ä۾ĖY·Š4wíY1T®éŠ *”Zâ—Ð|=¼`“™Ãl»}0ÕŠ²|s* ‚_8c¿Ê pzäÈÙüvÛVg¾0G?‰±ÆÝH qzl^²’ý é$œÿâëTDåAoCáéÁWX*ú%½}=*†9;‹nʱ:Ø®gM»Y¥2 Óó+#ä|-TcBÕ¨Íi3 {ôŸžgÕa¬VÆS&N˜¿”Ï ™·ô¸Æ¼ýÌ‘xn=pÔ øRÿ.úþg6¾;èÉ»C¸»C ˆCœwnl¼Œ5‡ ‡ÿɆxLPû‰ÉqÖ¥Ø]½­è¯ ´ã_Á¬±²<'îq’²ŽÑW7Ö"! bÑ"’ÆÆ ;sA9?»‰«RŽ“™ÁÂÆÂNÂ|ó,& 9¼ÓØMŸMn6Ú‡.>û`©G]¼ð˜Qg½^©v0‚ÓVñªo–£lRŦåêÅ"f眜·ŸN¡:ò¸Ã¤@ÐS/Ì„ÚÆ„“xFÃöµè”$A,0øó0(dñ4¼ 5øÛ§võ.pôð¥ùÝißzÓ7¢¦ íÙHéÍXØÊ†À}cǃ52.¨Å8iiæ9¾\„­!(¸Ô‰–6ß]-ž~ó<‰2‰\:\»1ÈExEu l›³Öܨ‘3·N?y‡¬cq ‹âi­z9ì.¿Cläèõ–ª`oT·ä›‰vïmèê¨þZ&tÌZ:P£KH¸ðç;«¼7T‰†H¬mL_¸ìq lªÇîìoiͳ0g Ð_¥2ÿÏ211st²÷º•=SYNa^í•ÛWRMŽÐh¬ßSe„$¨ZetUjaá"´ÚuîOuî˜1•cQÛü×Ú¡CA×ZC ŸyîÖã-ÔD>ž½¨dÍör¸8?8„,ç=2Ì^]{þ’AŸ9ÞÃŒîL"X¹˜ß°â"–0Ð(“ÑäØË ê,Ùmç†lcì ­ÕN³Õn ¹+#\WåAWþ˸0³ª@W¥¢7²‚ŠÐQü/DR*þt ǽ„½ª;¢g5ê,XV1e˜ªp #Ú9S)41báöW¼³Ü/ºÕN 1å ˜lå§éæv\‡ŒKâì‚#±¡á–¦Ms„+3°µ¿ÂW³o˜è‹a—…«§}ÓDzþ9ñ†±MñiÊêå71Þ 4EÚ• éwýyv<Ÿú¤+eUÕ N¨Ç³Vmõ[yò;ÛñÒ6K¼à£‡wÀžxñ{Å‚¿w>ñK\±ÿ ×­›¾ðA6Ž_¿Ä\Q¦¡;D·Ëp^Öô$vë\5Ü»@ ´Ýø„£W{5sžkoÜîj¿NõR 3p Ñvµ”›«‘ñÿë»®,7näû‹ý=ï@s»Ì2k¥ÕµÀ]uƺ=;‘àÛfrÆÀ  [äæ°«É««#¿j¥§Xfy(<>ë銣THçÃZ¶ÕxÝFAn_u8ä}º´Õryöõb÷ ÐÁzÙ3):ìJÛÎR<{…öÚBÜ!ÒXUˆfDg8õ:KF½%!vm/ÊùÂyå2ë¼&(* êêßu$°¹ï ~ôÅfœäIÓÄŽŠÈA˜4)M°íÖÍуÉœò%ëöQELÐà· VRÝ—Î59ÐP0£‡‡,c‰_ì õ#ñz‡a=YÒs~öÑkå©!|°¹veØ8VðfŒb<&´ž@[=|G±½å¥“Žmp¦yR,e)ˆœ†ëbLêÈA.·—J¬09Gž Ëãºá‘˜ôNf’3ýço¬T: W¢Ø… á—=%ý–ž›YÎTr³ n¨‰ÜÊ´;ºLâ¿2–×.¥xélhÞ@–ßûX0%&½àS«þ˜!‡T8ÛQ€þ „ìDï¤Ä–® 3øžò×v3°êo¬â’OL~4(`ŸEOXs}‰;§Á¶?M(ç`ëµvåÈTS)q°RÆ&je[NÄžA$/®‰"ÎzH WIM½yª½#¯Tßï¸ Wr(¢éBÎÐ×[B(¢9Ýk¡9=2:=B\ò¬†q ®Ä@D“e Ëžâ8œŠL?q!ƒ¯Dà¶Áæùî‹MüR5ô¯c‡ŸZešºœË¼*ÿˆ»mO"êz¼à|Íe^(»µÁ%PÙkŠ÷òpЃh³~ÐýT(¤}ØUˆÞçFB©î,£™ _²y.èš*éT8/–.\¶Ò/rƪ·¾ñW<9DÁjÛ2UD3§©dÈ‚7z‹ôaë=ØZ=)F*³-ù ÛDò¬&h sÞà4,fŸ! ³¶†k˨ü`\ xbœæ,ÞF›YðéÚ3ëtÄØZœocôI”6«Î©ÄZ4eñý]Þàjfõ¹ÚçB_+¬¹å¿j¾Y 6ßh24÷! ‡«œïªmjbšGQ#›4ÎT¦[žŸSõ(\2ic_›8æ+LeÏVÚ"pÆž!i_™cö¨“]J6Š(;ðAl¾Î6…eÓ¬|÷Œ‡ÓÊîT»ÃÝÓæƒaÔ¸ ŒƒºÞ¸Ü¢ž”Å \ŒZñ°”ˆç¥ùzAÿ¾1«ˆx­uŠÒ˜­^IËÐó« (ë¨ÇQÔÄÈ—ñ‹§M1{é–L¼¹*Á…{ßâtѸb|õjpü¥h¶mÞ8N@.лõ;ÑóNçYås]¡¤ë—b16Næ¸Z¬_{! ÛnA»¾úXÑûqÁʤFžû$·Ý { ™¢_½£ š‡¬Ýr:²Ù¯ß¦Œ¸Ø&ÆüXn™j¦ ÕØB; [–eÁçÙKQÃCêúç2p´7ï/ü"Ñu»“Z¯ÔÛБõÐÍñLà&|‰â”gš3“!/KwˆËcÖªoµ?޵z̸.²qóÕöƒD3˜z }¨òöÕ§÷p|ú¨Z9ž-÷c–¢ØÚôw;—NÛ"kh¹'×5[| òÄ2T!L·,Ýâø|͘_ð‚61N8WÙ=ßã"ñ ö ‹7GYJ,ÅZjsC$Z†ð|>ša÷¤`A‘nx]¯ÜóY•X¶åÁ éÓëýÕjzdñT-‚ÀçYÇ öžšË*òšÁ/C¥?S?Mý†ƒ”Ø£Ï40ªøD¼˜B©ü½Yt¨¹[S•Õ)QÕ:†¬Òõ£GPX¼×/ö²[+:%ôLF„gÎT]ÆMö¢·¡ÄÖ»o ¯¿|Ó4¥Öü,cPðaš@”‚ïæ%h¨è¨,YŠ,Ùå ïäõXPoÄFœ ³@ d€è#x ”SÔË—Ö韈XHC;•,ßé\ä!0éô˜Å†PˆñŒØ8ÀŽWÉEË\ÌT 纂n ,´¹ ïxµÇ-èæ—d~Ìã–LFá…Ãût„lD­È—¶ÝÕ„UG>»øx+¡-Uòú#  Wïô"à+'¦*D/%/ÎhgänfÏøë_ÆþÏ_x†¿=˯‹‘ÞW쯿鿧¿úáÂ^Z<_1ž€u"ÿ:?@ÀÑÁŽÁÓÎ6WcÞ~É—qÔß0ˆï±ØrX]0 ‘TÌÔ³E0w¤ úg‹Z×úiå&÷ kï4r%íYÜy‡5]Ä%}l_Ð…˜ùZÕó LÚ­"Véi[PôuÚÞêí+—ŸØx Ø-Þ¨»NÍïşƒ5­wt~Ù>YÃÁŸ¶¥ˆw“ud¤¶EÒ·~5ºÃsEhXÇ}ãóù’©©6³+Z)Vcð‰ó*®FÛ[ªQâ¦d—¹°,pVy:l*hˆj AyT1¶Å'•P\}VWØÊãdo§`_fóìåƒjUÌÙ`Nš[y­ê_bªÃ¨apzbí³XêDôˆžãà]ÙéV²£ù¿ëþ¼±>¿û*Ømô½8F_ÜÛî³Ã* È‚kfŒòfcû¤†«"áù…7‘²á2/xé‘=ñ´.>Y«g0Ù­d:R´p´¬©yÔµyf4Qf(ö1*€ i™òNµe¯#rTVM>ÔŽ Ž&¤Ö‰ 殼¦›áPÑí1ó.©*1uΕ…¢~‚$ŸÚ¦…›üxkp±ñÑ;‰;êðx‹É(ß*kÀø[zi«pW %>Åê¶^w-skøx?—hH)6¼fæ{Iμò¸¥|âHÏ‚r6£¼qžÉˆ[t‡E—Ñ_8Xû&§t7,Û›/ÈyOv5,nozб}Æ}œr¬£ÊFC}:¸ƒ°¨åè¬ ‡\æGøy¦ Iü¾Ø]hÆètŠ1oj´¸oŸO}.kÕ—çhcù4FŸTð‹©8QžazaFXµD9~Þ‘ÅáÍS­ê6ÙreöKêAây‘°Kÿ‚^%ŠH†ôæùDg%£ M×'O ÕV^¦áLgÓÒÒÓNÚ#d-ú4òÓ9äÅ^]L<ú/L8ÞyXÒèÈiCÁ›ÙeéµuV§¹ Ưðq¿ÈÞÛ z„¡­}ôZºNXÚMápý:ê}<¤?tÐÜ—;'—2–O|He!|°¤2ÍS²üc¥?öÄÕNe £˜VjMB Ù/=Œá÷+:åß ÖµÖëtÜÏäœp|¯åOÆ·;=‡‚u´ÆÒ^UиÚ?ᦫZ3ØÐ¨nÉ÷[ íþ´Û e0íGè®(ÿé*@”ÕJ¢Ê>8üˆÝ9«IŸ;M:Fr4a‘^‰‡²k¶l= ?Úåâ}-‡§¾¹™·y:_bòÛòf3aã¬SåKÈîWz—/FÛ«ž*Øx=;¬têBÙÝîãODlNœói茩åR7±±{ Ï­³®=÷¹›êðy¡ÚGôóȷAM¤óO²ˆ=íV¿ óh¾‹œƒÂ0\3§PµÅå9†„»)sWÛôñÍ ªñïI…†`^S/ŠÆ‚ ÕÞ3,–¦ÕÜò6Õyš§Hv>24&EùraoÃÙ¬½a¸Ê ›"Nqí$B¸æ5^c¼ödQp«ÚˆY¼òf?£ˆÐb0—›ª£Ý(¿¶XîÎ=Gl‡ZzNÎåΪÚ5q]€rUÌjßP²ÿÑècnÇns¾¦ïÒv¬-Sw¥›¯î4;”@Q¨Nc{o/ýHx¯ã[òG#û<”Ûp`I,·nš÷¡ê¿þðœß]¯¢MиàÈðe~¸çttvp4svµ2sQqW’¡—¦“’S’,R=’£“ZßT>Qq”‘SfbRbª©`a®daWrt‡WbbaªXÙ¤‘¡§©fgÎ+*£_ö)ëzdmþ:Ëµå¯ 'ý²Î¬ØÁšÎ ”×Tš¢oèà©`€e€AÐ@~á€þߟ€ö…€þy.?ŠA¥Š™’´œ¯ŽzwähÿÈ  üg19!y)q1U9ñ‚“ï€Án¹ÿŽ ï+s«„ð?cî–K¹SåV¹ àŸÅê÷•ǹU¾ú§åÿØö>¢[:»÷êüœà>5’[jÔ ÷ªý½9à½z”·ô¬¤÷W¦ÀûD)n‰–=Hô{ò³û4©oižÃŠy·ßì4þäÏ)lëJŠ{€#]@LÆw‹Âbô`ŠŠ™‰›³•«—‰«•ƒ½ËÏI$ƒV§ßŸV~§‰ÜÆÆ!IZ™99›Xz=t|Qc„¢Ø°õ®Iú˜<4û÷˜–6r¾—U›ÈÑ8âþ{+þ,1»?e©¸:»™¸º9›™þ þûaæ]®`§¨`(T†‚Ö-®½ýÿ WÄÒÌÄFÜÁÙÄLÞAÄÁñÃÍ&àÊN!–t«âNÿ/Õü(fïêìõï#3ûyMê¾ÀÇ~wâÚôïZÿ£&Ó®ÿ5ù9u2¾˜Ð&°§ùAµ~(À¸×멨=‘*tµ€Ã‹qþçŒ{½]–t@ .IÁ¿ë.£þõWýųwý…Sà\íL=Í% bà½E‚{õ§¤{{¨¬ÂU“àÀ£¡ïöZ΀îeäïïcÐïXÿƒ1YðŒ¬ô¿Kðí”ÜháÜŒÐ-§҇äͽï-îì`0q3#»_y‘¥ð'€a$»wÊÿ/8m+—ßäŒë±vx@dD$p‹ý¹êÿÀþ9 Ê€¦n`†ûÈw Þ¢õa÷ÚHÍ™ƒ% 0wG¼dæô>˜ô—'~"{öLÐ}Ã(wÛ‘‡òT¼ì]-cØÊDÔêCÍ¿Š¢à¨"!îŽiÜ™‡"µ­ÿi89:þ 4ï瀸ÂÝí5Îù?˜‘ûëŸ{}/ÆÐ>› À>”ïÆ.É«ÿ-é^,G-ªþPoû¿ÞÛiSö*检£ï³‘¢·€ÊÇþ¸V>4<ƒ‚ª;¾½¾{×ýôä¡3PB..fvƶf¦?G¤íS¡XâØ]?ýcĽ¯à=¸0KÂßí/Õóÿ–ôKù>;ì\ »‡ pÍ´û¼¹þc `X›ýÅúÙ…à; Ø$c' (ˆên(]õí¿§ý¼)å®xªó¦‹v×cÕ ÿ׬{MQ{ ÅX ИPwó-Ö#kø×ÔÊô»«|q÷Ýðþ˜¦ælû÷…í^dE°Fu `èÂÞ„E {¹š 9;Ýß”¤Þ¾Š€“c¿2d=„¤nî"¸É³r7vvðp„þ·ÿùjã]vƒ{êgÀYÀÝPÑ¡ü¯Ø?Çȳp^ƒ¬¥ë?†^Ý…¹÷Jð\õ¦ªà"]D•[4¦ûhÿœÿÉÌԯ߂¾[&rø2@ »U*–ÿC~¶MìKm¼{9´ èß ) …Øþè{™ÀKhßÙ€ÝuuReŠyny\¬ŒÿÝÌ¿Š¯mªŸY¨|N'ÊÝa‰Àýß²~NrÙ‡ ³´"ÔÝË{“ÐCIë?´Kä"}— r×Ë={(QÎÈÕÄRÈÖöKî"“äýX¼~Gæîø×“x(RÑÈÕRÕÁÆÌÞêñ¯0BÁ\eÚ€¶,†¸{F/÷PŒŠ›¹¹•§™‹˜§‰­›é½g…µ;\€ 8+sØ»÷ýÿ ÷WsÞ‡ Âæ¬–ô,øÝ¡®«þPÔ_»•½Åõå Á ;À;¾;´~‡þJMY=Ù›™üúÆRE‰Ì@zu÷ÆrZïOHºð:˨™ÎZ”`+t·`2Æ?…ýóIá½Êj‹’l+|è+¦[ÊŽf¿SþkÒö^õª¬E@½¹ ÅxKýÄòwêßïßî?ÅJ’·Tpf¹%fó;ñÝØÜ«ˆF p=/Aþùlÿ»¾¤ÓÏô<¼ç žÓ{!ågÑïmÎpK4Êù¢·ÒÞÕ^VÒ'T ìïÕ-?´ \ ­êåø‹J-mõ×*½'»%Üíþ+áï ¤ìÍ~®x7üÅ·ž¿Rü݃·»™ÊhZ?þ½æ½ÑÓݼÞ?¤_z?XúN–ﻌ»i³0^ùü1ãI´ÿãRw'õï¦ì“?fÞ“ø.÷nRØÜ¢Àÿ†ûó±w©wSþ Ò<ûSêÏ wÓhü (&þ’ðÀ‰Ž»~hW&=\ûÞ«çÝ?UÉ?CüoÆ‚»Bw·¢ý!„–ó ¡_LWÿl‹—j0µ?U»»áËÝêÝ]µúCðyëoï‹{î®ý!«Öö Ù‡ÜGÝ]­ù!ÛþȽ}wiä]ÎŽŸëþb¡ä¼sg âaªÎ‡ ÿtAâ]ÌÝåo?0¨ÝÃün1Ü]âÝõK?ˆ½"Þ•ýù‡¿?ß_HZþÏe¿.Œ}«0âÐþ粈_ËÜ~™Lü>™.“øÑV?[(ñ£­B&ø¯eÿÔýÙkÄ?tÛÆ¬ûã¥bEp ¿äœ>FïÀpþPK 9G8ÇU‡k“Äí"WEB-INF/lib/jsf-api-1.2_04-p02.jarŒ¼&ÁÒ.<;¶mÛ¶m{fwföÛ¶mÛ¶mÛ¶=;ö¿ç~ç~÷žóÇ=ñUDuWEgwD=‘™õdVU+Ê€€Bý£üѪeú¿ (œ˜ª”¼8Ã×8â?E!îþŠ‚ŒªÎþíÅüBý{ÿoQ9!y)q1Uz9q§¡ˆ~FÔÀ¿ÕÕ@ÕÊíó|Å<Ú }²âËÁB2©ˆ¯÷¨ë"í®é ŽYª*ëYˆ§€é‹eãX[!)k ém©ÇÄ&WÝ»Äx…æ_SË+Gû„É—”Ê©j]AÊ4+o¦¼¨êw\dj!ÒÚcˆ$k-ð&“¿( ´òpfûÔ©fš•JÄÚ(©d]ÄØyeSgÚn_8ư®eâÑ.÷ƒf–«2€®ivVµ”Lrµ¼Æ2d=êÌ ŸU*Ý÷¦¾Ý¥¿þ  Û üo57p6pePü ûß2ÆF†ÿƒç?¾†óÚÿvðË~ “ÿÇUÌÕ`ëhfcModiààà/d³ ˆ´Ãm·Ù\˜GF¥¸.sNH;X§¤Ú¤ ,ÙxîG\X¥µ/eòDð¬¢Aêz~éfKßÑÐÁ²ãÁòt# à ìI‡Á¶©ÕÎM¿l·ÒÇñŒuÃÒ7{î³›ãÊxxGÈ=˜™7/b¥1̼cTêØ¢€Yþ>Æ3®=¡Ù‰3-ê^‰Œ…ýIz8€’-íÄž²Ä5ÐnüôƲ~W± #ï%u‚”úž»mmn~{BíØlöN‡í¢~Ônôà¢Qà ôÚTB>IpVG±‚rÓ lr½HœS[S˜|‡ãŒ©Ë' cŽWÀc<:¯¶M~¾O5q¹«?ŽãŸpKweÕóéØl¥$±÷øá"Ô&‰}$4¥Ò ±v¡²StlP•Ùb¿llÓ‘›Oÿú½‡î‚·”›gcQìCÔÓ„H:^ †’@n”¼èlQ¢FÃ@}•èzÍï“mMa6ºN¢e¹Êsò‡v31i‰©1|è,Á‹yÛžþ7^¿•?›¡ó¾ZV“3Ü¿*º»‡K×_í øÿ+ˆ£½›¸™õo€ýéG–&Œ§Î’××tÒ!ÍG˜ÑH]g`§Õ+Ñ Ü!"ÎayÙÈä„ÝB+ÅK ÑäH|rø Í–Z'¬È:§-ß*º)䚢"©UKpåÑÓavèk<«¶ÍW½Ï{ƒnÝ2J¡Ö_ì·|µ¡£ƒÓ®Í½þÌÎÁêìäè ƒÚ´ ýJ’gÚ#Rð‰jÌ6œö›2}+¼Ðѹ?Ã߇g½#Ýú:ÝÝÍÚBÆAÅÈÅÈ"Áj`ºø 'ûÙÚ¢îÇI 8É^¶"3nDs8J&ӌْ€‰«©7ã&™ŠþËØå’{FlTœ"ñ6Ìãù†„–FÝ”ãe‡Ú”uk´Og.ÙÚöSps1aÛZBDðšW^öoZ~KÜ2•S§žq¿aa3·*8˜UY¡íJäBjèHkX½SR4:=ÝšSØíæ gÞpß-*Q›Xæ<ý Î/ŸúYÒœ]¿»7©mSóvžf*Èv²‡$]~x_ª«…j傌¼À ª˜’¬Y¯ýiĨE¦b=6턜ïÉ}MaIJ‚“Ëòç ž\R€}5óübáÀݦÄÚL6BG.¯O<–^? _/d”þÂQM·GÄ×¾UÏÂE„ø¦†æi62ZæhÂJ4¤k¨c¦Â÷¾ñpø¥YóùäÌ~u¿þ+y‘žû3O„¹D!/p¤k›Ë:ô™¥ûrì®?³ÔÛc}?LZ6âVe%vš¶¹jè±ãS:²„TК›Žè܇¯BVFÓ´'¾ì¾·€ˆFÁžþê°YÔíê¡m"ÚfH$O²•#±8ÍZÆ,ÎŒT¬þfùçòÆøwÅM˜&Õ8 «e—%ia%¯ Íó|nÂÀŠòÀÍnh0ßK`p;Eúì -xÃ%gîýGu0þC¹a3ùq¨ð6oœˆyA]ºZyjE±’ìŸây´{V%âc•$º¸Ðm‚pP,ï‡È=©1yó|Õĸh**ìý»ÙÚ´è’„<èrôРtJŒÊÕHĪ0W:ÍI塤tMâdsW4‰T¶€_\\@£ M´X›‡îÊ sîu“ðˆ«âß‹øÈ³•|‰¸$•¹Å¹y©™™ÍE¥ïÙÊ t4 Z¾2¿œj˜yqþ¦_H±„«TM›³#ÛÊb“ AðE¸4mP«´ª¹!ÛÛ<¯IˆŠZ¥Ãït¦”ÐbìîÈSÃ*M‰œÌcµôVmÝ‚p 6%Še-áéÙD2äÛmàpDfv™·Xë•lZ4¦VòT˜žÎK½_º»j=·lF)Ûås¬™¤…ÌÙL˜®Ù òõ‚G°±»•E;œ©UÚ7à”5—È‹àì©f[{ìñõiÑW“|c£帴ñ†‘Á69Zã%mÖÞ&ì5•–Áj£ö/”æÆÙÊ&¹ç¼*Käåœ]c"‘ïLuòŸÔ$Éz• Îs´ŠÙhƒ&‰‹ d›»‰ˆY¸ßàˆÚ듆]\èwþn^ê&^Ñ]ö¤S™<˜< çö¶Ni—IhD4¯ÛÚ¢Ç ¶´×xÑÁà§ìq£¶F”q¬$ëág‡‘¢:\xBZ"]²¦÷4Úö¡Í ¥"Š›”ëà†"îêü¿ M ™©çÎî:+•73“–Ĉ=%9ºO´'[¹9¼ŽN ê8hµ7 üt¤02cå(HŠÏƒ^k\3!6UKOÂð<«m‹íˆ¦ÌÖ9ªÎ¤›è ºƒ"{MØé f7„Úʦ*®ýCÂÎa‘ŸãL§Áž!;|®°¾<Ù>ÿexÍl7Gö#R®¹]Õ[õ ù{3ìf>'G…€*¾ÛÒ"µÜÉÌWwjÁF&ˆ8Ì ðóívËØSJ¢ú‚á¦áyÿ{¹×Üш£sÕ/ qu(Î wÇg§×®ÅjsòÎzÕ}”8þ@û@Ánrq²[âølòƒº!ú÷σ5J·5 õZ§×aBy¬ÙÏá 蜖°H,ÂÍpË{¤> ¤MAËKþ“ë‡(¬‚GÖÌ-«™È%ýž^°)+¸Ð]Õ%yü@-+j^O¿“f.Ü¡Ï97”Ür+ä³þ‘؃:t»‡ÏS­9÷nhÇëÞå4†X„š<{*7¢Ì¬¼sË2a\ñÓÓ§hn­˜qßJ°ýÅ^NE¯(Òð@ì1h„?ÎP=Ñéœçùý©—¿#‚4mDÄ/ƨC`Àç-÷Ö¼kd9vyT5Ðh»—;ÊRº t!ƒ$ë&êÆ$éUºYÐgá²ȉÌkF´¦PJ$–¹ør…¹¯€Y/e8ÅòzL4ÍÉ¥"/}“ûPÍ¿+¿‘A6¿í»°«¡ êÒ‚7ri°Å\sY…ê“×Z5¬aõGU®<‚É—,ºœ%õH‰„2×0Ó¤«zLe³ˆf®E=oÉ”Ç4ëÚ¼ ¾S¾Ìë8TCM“ܼVº2à§n·Rz~‡hïîØH†¢ñÅr½Ëj­ÃÚ«œ}þ/xmÚáyÙT–ø0Ï?K&é˜üê×MÑÇMrÛ=XüSAóÍç'Œ-ãB¾jjý™-}§æ`ÓIµN¿Î!ó69O*¶v$7‹ð1§‚e«ÑAûä´èY¥¨zš4ÎØÏ© žTN:/D#j/Væìzn‡-™d8€”jeîh°ÍÖ)ørÅm½FSX Ù7yãh†x äOÅ!oelñ0ÎØ;Ö¤bî{Dom~އyBø0g%/Ü&ùs·:Ág¶êØZ;/$˜ Ýém–VefV†Ý5·,C\™õ s\3¡‘¼±1l£øŒ—)¾Ì®•V\²j#ÍI¼úŽ\ ] qúN}§6æÜPÅÁMÂnñsyƒ(Ì!'^ëWàª})OaÙù¨láÌÏ€}­ƒì¬Âžxó/>ì ‡:М¾›%ge&c…mïÑ_BOÊÁw£ÛJ?fÔMY]"qW˜]ê†nD¼pÉ¥ÅKïóå~ay¹Í…+UVîÛ V`úÓ'*©¦æ™?‚RwPì^<µ‡—+ò§?!M"ÊMÅô1˜XˆÛ©éL9¤NMŸ#µ»åë]Û¦¬°…7‹ö²ù«2@˜ß°ªJÈ/¾™•ŽûšK´É©€‘WÈ«çr¨åg.2‹\À5vù$Ç—csõ".Lç\â.ÙZr>—?DZ±I\1clyƒG˜Ì¦rH‚\fCïˆÑXW0®H Ÿl}£íÁ38÷Åf@rbéÃ-§†>}ãEW°‰¡ Ö„›\}O‚ŒA—9Âîù;n’„:‰ÎÒwü§0‚<Ι™Ã{NBïH¡;¢‚[ɰœÙ@ïpžAÛÔŒ»¢/Ê;‚»’/ï}Ò¯ûAÒíA¦}‰PŸÔ‰P©³ý‘PŸÌ©ýò/œÁ’'0ߤOßDOƒÝâ—8ƒÝb—[4ÞÁÏCÁR>IÆ›½;]/$陓MÏ{1k2÷µ Ÿþí¹ÉÍ€´m&£Ç†Ë¬ÉI¾¬³.ÃÇMWž…%ÝÃÎ#bèQ`fõ®"c¬›×§,zåè”ۓŦú?@3캢ž~4‘·­!Í$ Ö‚h~žJ™æqwûé×¾œéx²‚+à™¢‹c¢W·íþú%6¨ Ö5ç¥Pîk‘Ĉ£BZ½F©½$?›VX‚£ìg<÷œ²zç¬çïªl~“t½RP½oX=Ø®›MBœ„¬¥ƒ?QS’ÙRjtÎ&ÚÓ*WB Ê‹4«hEµ¢åÆ¡-ÕÌkå´‚Ø‹7Ö¨ÕVóTЇb@ƵI-ì$¡vk•Cx’9Ëq¤ùú™åÀ{zÆ×ãžé{fwñ°ðÍ'+õó¥q:ÅÄ]£<ƒ‘ÈWåNþ,¼à\g¨;14\—húNBÊ‹Þå”g|‚p]@ú`[ª˜DNœPýÖ¨´ßÝIy¿F/©;Õ&W\÷Â^à –¨ sˈ˜35öæjÏÔS)86´Lö¢—1VÛËN½ÁŽüæaÕÖü‘4ÉTñKêÌëòä6ã¤’Ò {¿8B{I¾ëÌŠ†H’'ùi‚Jž£ªÔNnÿ‚Ýø}vZÁª[ré§Òæ„xtš—ì¡”÷˜v©÷dšÉ‘1êÙ ô\ âbɤ "Èûý³$"Íÿ€ ¾'­ †|VZhï1:ê(~ÁÀ/Æê5]©q¡¥ÁôU•É~o*A0CP‚ãâø*A%¨A‰Š ‚Ò2ðsÈ’,˜€8‘´Q«VoÔ߯ €| ×Òý)õº³$õ‰T §*ÝŒýƒ3J‚ªÇ'¡lՆݜH]Ý"¦¿ŒßÏm+:ªÏÚd®ÏZCÉ¡–§ÆÔâVI—ÁYŒÍ): À“ª$•Z µ"fŽ1PÌ9’ÔÃvÍôöýbû¤‰Ô¢@€€¶ €€ˆþ-¶—µ1Qq´7³6q ·µ·±Ø;šªÔ”,H8½Ÿk0é̈Ôì!¼ ûV]¬L¯Û”#™´¯.«éµÍ⛋¾»r›úÛl˦ü]ØXrÄwR<ÁâÏ&ð<¨ä?Æ™ý¼ì‘o “Ë×–P7ºqHˆÇ~wwÝÄky˜Òèà<õ“ˆI,ÃV*Æ`ªµxA~·zØ¡¼ªÕó–ã‚‘°º½Xá~Ð K("hn×°ÔñËHl­Û Úód‰EDWyt¥Ö,f-·n ¶Þ¤¶ÁåzH{~E?çæÇ“·“wWk¶#7é®. lÝ[4êôô$5â9 ´]m¯iüÏÉüæGz˜Â‡ì³]jþÅóFöУZZG‡†þ'þøºz%9®¹í#R‘Í™ÌÚé‹4u´¹âç‚ þ3É"½Ú)RÓ„k '¯rȇ†ÜïVoÒù>èmP__¤¶Ê…µÖp¥§¶ J”nÀ–€Q¹m·pFóÒ‚dñï0e!;"i‚÷khÀ¹\š \–7fŸõYMFBÝáœø‰paÜ%¶ñÎèŸã×¹¶jf§«öÃÜÎkÛ\'šŽŽ¡>áYÜc„7Ê^¥Ä8¢Ù#2ÈÖÎIšŸØ1Õù¤—ÌXÛý„ä—]÷ïãÀz?ÚíÒcÙc¢BnoŠÍÜì4½sF,‰­اÒS…µ„„Ó EFBXÇ·)ŒVH—®•1øn“ß?½£¡¤Y ¤ßJãŸy\sñZfrŠcµˆÖ:›ÕäE¬õIšaÛ,º" ]Î65ã<'R÷TsCM¸ÄTjÚˆj‡ßd™=ô7Î3¹å·¾gsFΡUíUsáÐY·¯Ôy#Ï;tÛÌ@µõ‰ÒÌw„¬Ûz==Éßÿ–§ElÀÿ›-«ºÙ~‹ØXZŒþ‘Éuø¯T]’ú•ªæ·ž&¦&øœèN=ÛÔ/ ¹JZçÐ:IA”|E,çšËÊÚ+Xè'ë"ÀúÄÈˬFÏKß9î,/ŧêÉ‹ÄCž@¡ûu–ArVÚ/îÓ¶Û¶ÏÌD×sŸ@Ï'ü.w¨yÆl8GÆ-zñàL§üA¤ Ø ÞÝ5î£k OîÈ™‰¶º}´±,»oÄcåKZ˜ˆ˜>%&44ô4”JŸ% -*#Åò3Ž¢ò/*‰>^ûëÎCL± ~ÃÕ·Æ1ØKT¯áZØ’œ¼æ‡x"vÍI»àd¤}£û†…NV¢@,d’¡Jkùs2OÁÔËà,°ÏÎîYõûC»èðˆâ±†ùŸéyt'k€uJŒd)•‹Øò®ûhƒ§äW³óóeÙ›\©¼*Õ  ÏdhÈâI~=B2{e£KS=#›Õ=²-ªäБzTÑF?bãUT{jGjÅ„ÌO‹ÂºÈåœ'#Jû±¨ƒáÈ"ž{2å‚(Hq*˜‡ˆd~ EÎãý\k]0Ê7GÔ^§ºÌxpå7ÑÂ:´¥!%­Ë&zìæEZ^·m“®_w÷)­äÀgL,qY­ÇI[‡‚ú8€ŠÛ6º¨‚‘œì@ùXS4œ ¹]-eî+? ŒF‰!4XvùþíÅÕ®;ñHÎ.Ú >{ù= ­ã60ü¾5÷—Ð1}ù õ‹äÐÈK DoWé¬pò 5ÿ 5ýžƒÁ Z IQ>H¬Î¸{ˆCažr™¦¡)CÃpV¼Áì$Žq4ÊɬhvÉø’-Û…>ILp‚•]dI¸|vв¼~ËèIJkå~8Έu÷°wV<÷ 5…Ìï̬î\t·’Ü –»¨ä¢Ü‘fiÐ2Ô¡ŽçÈ,Žrü–ºÚ”ŒC“‡ÚÐs«d‰BmTéj°Ë½’†såU‡!±l‘ÐèÅæOÛC ßëÌT2m(UýV:?òÜeæKƒ gGí ’JÒHöIÛ‘uLý.G4dÌ·Ùº ô3_@ 5>ÃãÛ&nË©Á "±yñU{!µRDˆ’:†Éç6¥³ª}: yœaxÜÈŸâèÛ:và) ‰%˜6º«‚A‡¯ÍHž‡ÔÚ¸üçyw“ú(ÁÜ9ù<ŸôŸŒ—Åz U‘ËÜV`—&ë‹¿>—eöéy¥zÊi|»\×[1Õâ‘Çæ° Ô®sƒ ßáͱ¼×1‡Ý¿4f˜Ï“5<î‡{|F¬ã«fÅÑ…š×ÇÖ­MË2ºÝ %¢*›@ªôH«q·Ëâ2½P™­ø²±²“›ÕÝ ¼¶Y=Ô÷Ýàá u»R b¯´µÌ}ò£·Î—»†u”æäWÕG£±n¿ƒÝ‘9šëµÌ5ê¹äÉo‰Ý/B³“j'×ÕEšj £‘^C¡Œ½›vmˆ¿‚€.^E#Æñk0Êúÿ걟 vf˜­ϧ–Á{(zó,c•j{a¼{ðx™ŽM .w"«{e_¿6ràbn©. Z/«v¦y±%*õñ\Þ¿}DÂÇŽõ£íÕé¹["¸7RóÂň$–ÔŽhŒ0êßó~-Õî.+¢[<†[Á©Mj¬Ï⩯ÊÇo¡AkcÅl´¤PùÓ^Q;-³ž2¬4ùaÆaBc>žk÷jæV Ÿ·28õ§¸oÕ\Hõó^#”““ùŠ"ó$ß­"'®Â šûˆéÊÒU¤j»{JÁØ|@ü¿—ù0ÿÍçØÚZšüÃß3üëL!ÞÁàÔû—ñ‰aQý‡·„þOû¿&Œ&Í0T¬ï©¸Kc¬tžßH¦­ýǺg[ĈÀQr@(p¡ÎõÛé5ÙÙvI1®Iè`ææ8v£ì‚§Ãúáøàª©õ9ã+(‰•’ŸC¶<*Ñ ÃVÛ÷lJïùª¬‚SÓqEYŽ.Ë.É×;,F’Ã.Ég nj%šªä‘p<›Øš+¦¯Oj\yW–ÔüËFܽ‰(|äó>jyýã²M›l×î”ր̣ëÖéóÒS ‹ª5Jd °?­¾j\htß|ë°?|qã¼ÚT :‹àUûÑÜ¡Ìø)©s­è®+»A–B ¤†·1j»$[áÕCÁ¸ˆ$¤}€zlÛ×4¹“¤ão¦³ÆÊ}…¿Í6¡Å?Sêü «->šGîVT>ô”^#»Ã\øW×dŽ’¸àoš œb\Ÿ´Í}ŠÙ³2çÂMÍŽ£˜m6 ×yà“SÆæ¤e‰§3OY6'ëáZ DÑî–ÖÐnÙÂpÙ–5T«šJžÞvöfŽ£ÏtŒ¬Yó`°zâÒ‰ÖÓm9è‰ÀO‚Å“Õ Ô.¶É„&¥îOúê×ÓqÞ‘?¿œI_Ä6Ÿ«SîhBsEú°x A8ÇïVF±Æ‹€ B1¨Ã°oÚ/¡;Mên-x·¾Í>¨4Ò;_4Ú,rz!(•VJKÓxl%:6ƒ°Eò²$‹öḽ60—ü^‚½×ic‚¡‘Ѭ¥ß "O™˜äž¸ž¡Ýà9·\'øÚ>ÈÏî s‘ôÄGçåóBë š]hBfÀ2E ¥ ðùjܪùüžÉ³i:× 5/ãÌápÊ™¤CTÊžPÎÓ˜&ê1Ÿ±5ÊÔxÀWäõ0ìÀ·@Bà—¶±vxL&Kèê¨Ûc›×ûyekÈÖ€ÈØÌÞ+UÈ|ƒý+ ”4Y[úúÛ›þÄø?£ÿÜïó_l0J©N~€Ñk¥*PYZÈИ¸ 1+00–[ŒÑ·gUƒ¨ #iÆPØpäM)ÔA¸áæ:û†okm"¦Åˆb5 é°@?<oCÓI !V$Ô~}'K`Õ"ú±ùWjÚ¹:€‹å³q‘š büí-õºo9pÀ±<{Qx›ÆÊ¼Ì¸aÓüÈRk4"dz°‘¦âDEØÅp³¦_ˆÙt·è‘À,žUùmi?Ã^ߌ¥ÞûO×wž[<èz Á}$ß­ƒšì¡;Ûz˜WãKÔ'”àvÓ¡´=iôÕÍiP:ñ°­¾QTÝý’¯Ó /¡%ãÁyûäýL¥j—¿bé²zQò·wñ·Òþ,ÿ׎:9€ƒƒ €”éŸ8F A÷3"Š}›²iÃ,ã´RÒÃñhÚ*éºúcެ#ÏÏ«ÞYÒóú† «l¶:¿˜|u®¼ßÆ##ñ.®¨;¨c“Ó2­]fR»ê•eO¶¨g¬'5¶u,Røa,í\ÿÙ)2ÇV1_JjJêñ%%óE¼ªuii($Ñ~Fˆ0¢˜­°ÒP4Q[¯â,"Æùr’Ïnr’ðxAc£î»RòVš²zæPš‡KÎ5¿—‰÷÷ëŠ 6 ¨?¦û@cû€mÊ^¶?ï ˜RàìD†·>#,3¯±kþ/ɾZ_Ã5·­EØLä¹è‡íN'…ÍÄ`çÃ)MNtÓcCê‹Õö¶U E«q8“sFêÕšŒvÊÙX΋M&ÄQM·üð¨‹âL]´”§Fv›ÖCuycV“.LÛäAÊ‹%!²¨´âF–`uJÉúÂMZœ20: *+§¥Y‡ôcóDòßy¹tãÍ®åÆãk*VAËãåÆf…—e¯€4‡7nÉ0ê ­ø'3(ÞÁßJø4» µ>£uár0‹ÜÓÒy„$@~~ÌÌjËÊëI -s±è’ªØâC'°6²ªtu¢õËéY Üúó=Rj¬ùaDEù?œ¨Í±¦óôûBW|äûTÐ \ÉgU×_nÓ­‹¦ŽO¨‡oý÷ÈZÃ7QCSÂÎñ ›Lè òCÈFµ}Wêû=Ý$§)ÍO³áñÈÔpJ—´q.pª:ÖûB@[Íñd*X3)ó7{ ÕåldÅCHè^ä@ w6ÕK^²¸ëì|ÿÈEÍ}c†ˆï“ Œ=A÷!üGƒ_Ãí q,jG©´3²eÂVL`Ti>Íø;ü¦}ì!Ö—ÖÓu]|ÖƒúŒ&0 J†O§Yi'´¸8±„ŸH§A„]r¢OvN ÚO‘ôPWl·Š,àbè®…È TSÅ2èx¼Ø})Ó0ÓqóþùìJS¤ŠÍÝ$¬1Œ9ø„õ!ç®øªÍ×Dí!éU¢l¤,ƒ&ƒèû†'¢ýŽL™ï’îP”ã3Gd<ÏDÍ2ãt­sUb1Õ§Žb‡KtŽJ¢[Ö;“®cMŠÞØkÍ;L{ö×v …cH¬Z× ºý’³8w³?ÿÕ¸n#¥Ž €€€€¨ÿ‡Æõ¿Sº.ªhßYn[cSpR„P‡JLcÌ HuPsD²ã‚ñ}²Q„gS‡äº©m('Ó ¡5åJVÍëæh`•û:Ò„…³Ê=¦+Sr>Nµ×é´Jß3=NŒ™…꧸Lnf¶{ºf¶ß7>N®½€¶\eÄ1Û ûE²Àø'ÇXuwÄøuãëÀî=ùÉŒXøé söËŒ÷åq* `t¡qºÌìè8a1Ñ ƒ!È(sy˜cU¿˜Eë#âÌØŠÒœœÙ«J;³ÙˆA2Y ÓŠ¹ šÎì*ø°ð°ô‹’Y°Ø¹-“2ÊXiŽ9EÀ‰JT ‚¦1Ždå×^r5Y·úÕîBá7cÓXufGÞg?•S#‡€Üæõ­*>pÚé ‹œÓŽ©’>b‰LaØcŒŽom/aÔÉ»zýlÒ~²]W\0Òž.T¡ØÁZUúæIIb‘(–øw3àv#J ’Ÿš£f,:Rã“‹Ðßš½÷‚ÝV<Á ¨à)²ËqÁ¡ÿMÞ´Yʶì Pù-J¦"º!ûó«RžèÚ•ÒÅË´é}ó|šùãO¼QžSð…šÆ¤é뀳ì¹pÖÑyQ?m¸j¼kÝvûÈ…T½ôB•Áûç~*ÞðU° ¦ªOHDÇä&/s„Õ¼¶·Ô€‘Dyhãf/«Â"œÀ¡CØ– ´:”È>Á”†¬O–þ¢2ÁÞœ¼ŠC#çê÷úC81{m3ѺU=åÖHzk[u]^¡e¼Qœûðws¬Œ÷L¯¶‹£³Ãt0cå.ÈjÍ.%AtžN!9cù¯L„’;;0>'°®Õ™YõÎ+WÒ3SëâØ¹È΃zÿœ}]ެ/Ly©—6ÿŸ»)ÐÓ»P` ûÐòûPP=ê·8ÕÏ@Ÿ˜Åvá¬9˜øz+A*uw×H‷«ìS 9…>¡©Ö²_?ZH7ÕkCy ù#c3ÃõNCͳ‹äÙè¨B÷cýWæèöªý=\Eú2ZkƒE`¯lƒl&Ö[<§¤æ2Ü*~:ò&Nl=½FtíZg(D/Ô¯»ö·a/ç{Ýa›܃¬ù3!ï%ÅkÊÓŸ;ÚI³ß ’C%u¼kâ?$ZÉY¤@•S¶µ m¿ Ûeß== ÷ØMaªvÆ'ÉòOÛÚV©¿~PG® ¢¥O”¥P–ÿX:ŒÁˆž-c#Ùó¹ˆÈü¢]’‘~×cd^£òÒæEJoV<»c~ûÈ{)¦íQ0®/2šzfŸÈXôcVòºý䪫p>@¡Ö!‹q1Šºz8C+Ž©¢_ÌGò8‰Ogó’t¿õf5ȉ°.$pÂ  ÷f¹CXý@h{¡ô™<~n}‰AìY9VZصH5NÓ {„i,aF³qÝäò ü’rC¸ñ2ÄGu@St(dZ´Û_p!ÅîwéíçØkƒ³IÝ ŽAøZl;ð$ðƾéñ™{¾ñ(íëQŠá¸UÚ§N$„‚¼*h~BÍzšÝÔU÷hµ@òË#5ýÐ ÛAù¶2(îSdìUÿÚÜ…ÚØÅs5³ÖÛøåºB\˜¿Tkúa¶$·$`„óELÛ¢Í7QÕ èÞz„„5b6 }šë4’ƒŠ&Bôv‹e5ûð€ŠõAŒuí0K­-ÚüÑ ²É‚Ra ûÓNSÞá÷À9F°ù@Ë®Oã¦ÿ øÏ[BË]of(daƒú {‹¬ <ú–™îMÁV ±òÑÌ öl½gt[ PNøàlEAð Ámâ\ “ú+zBoÈ®í§=Ö¾crg%SÊmV}±(±QÖîðsRÜm{5»ÖmâÍ(ÞlK„ôU}ÇZ¯SÃw½Z®Z—5;ã: èŽÚ˰?w÷IÃ7”C6¶Q/Zk'yðIâÕUE4¡p‡÷Äå¯õÆHMžÛ’eRªõJ–†³“úÉÚ¸2t©…ÈÆ©ùM1ÆQO%LFž+ÕM¯j\òy;޵Cía4¥Ðj·Üîa'·ç  ¢ÿXÛqu¢[ÒóÃE¯ ¬IÞ1daÀ19£ÎæWM0¡t  tÈ¥S™ë%ŸW^+®1;5Xàì7Žýeb—~&YwϨ‰¢9¬vtý|Ï “ÕiMø=³Ç«•Ž<÷¬ˆ;¯Z‰UÖ-1·×በ3ÌÁ^Ïcªí+8…®DŠQŠ1H‚N$cƒ|T„H6â…šxØšÓ‹‹{0fÙV%³Ú¸ fÙÒlfÿâcúü4;ý¹]|l±êŒr%ÊzÕ„g臧Ÿé‰}ùæó-í!³Úæ«È¤ÙQÖÞŠQÚÁ”µXÿ´fÿŽ&=3qx®¶Þ|bê×m“¢BÏí”]ŠÛª¥}Gš‰æ. ¤ífèV*Ïí—NØ<‹+4ôïë¾ÆeàC¸Š¿•á?yg3“ÿÕ”4°þmù¿ÏkD)öÉ3!zLTWSŽöupÌG`Db ç#`^o)§Ä¯“É} S  xû,# ˜ÜkCÒÜl¶e¾ß½>Áïbg¡:5"7¢d"ïë»H;º ˆ°U¤Lã£sçd)K(3MFÜZT­Ù·ÒnrâÎÅÉ–Ó+žÙm±2Ã0U -嬖ƒ+åG|*tüy|0GÝb®§_«„ÒFGÃõyx§` ›¨––4€pÌoGÝjj¢qÞwÀî8RžÐéçF³CWÏ%SŽŒAÃâ¦Ä› Èký0ÍõËä/Ÿô<éëóeîìžsJkÑ—¤×?>5É­ÒÌ<м,2-¨è)ޚΛ›¸ CKÌÊë§DÛö¿†Eñq¾ËoiÄÊáµ}\45Z˜æTŽEMªÛØ­{!ö擆¢: #Õ:Ä øBÅ«ÉçЪvò‚¹DŠÂZ¹þöPPÏßXof& 5f.[©¢ð/)Ð/&÷ŠµÖœ4š"‚]Ö^íð  '\Ë/ì»Ý3'†®¨Þ"D…$®ì/{V[{— iû®Cå <ª§pæè ø÷?`C¹ŸS4s–£¸z®î} ®†oV¾ý„ÚàŸ{^_,¤µbo§ C6½’±¶n´kr_¬Á—uíáÓ´>jâ¨n,¹ÿFØÍ/ àÓÁ€€báþ3aÿ¿æŸ¢¾c£¢†ûym}Õi ‚õLj1—fƒº¼<¹:`|}O»ÄiÛ)ÄNÂŦí¹V5ÓÈóÉló§ë<¡6rÔ ç“¹¬läŽÃuQ³Þ´”ÇôköÍMÎÉ×Û ‚n!ª®éˆº,¸™Ôk¼ðP¢&=ô&Ž, Ir%ëÝ`L¦`æ6´!xʆYòà†+…¯K@êÇS¡I"Æ{oÛà(,ë3m¡ž©îž±\r¸;ãMãÕ´±áú°5YÚÙœ 9²ú“’a†áb£²5GÚ¤_rôædtÚ³‘A¦ÃuŽF{¨Á­f«ÑÆœ\Uµ²Úî8Ra ä(g—,±iƒŽôLx½jÁô:4q«‘\¼fƒ0ܸíUóˬ0º,’v¥Ö§ÓfÁÉ·‚ÑBa÷…Þ …Ö·æq[ê×uý`*¦:ÕGÍyú¶‹öuÆŽ>•ÿH?”'Ÿ8«Ò Ã¸ë;8.„J£(§çÑÙF$2êô¤ÙÂyl³âvï‹R€¢ºø©€È™Ö ÉAf³ó]Ð@FßçI1ç˜@Bé¡H¤³ÏÁÝ,nÏÀøIKý!ðºh¡•é{혗H»þM7]Ÿ|?]?Ô`|i¼*ÚÚ¦Ê 7Þ­zŠÒivŸ¢;’akU¥¯D]ÕLC´8ZùËl&¢_l#,xbªÜm›J†›Öš§øˆÌâî•÷¶íÕ”`&C✌TžÉ:kPÎVöy:ª¢FX'ÅI‘Ù0o ýi´¯;ïùz'ë ð…ÎB/´|îáÞÊ“ HŒ»#Ï‚©ç¥E1ý‚g"½+ƒyr³hQ,SJoÎìÐàªnÖ„‘âþ¥ZŽ58¢Ái%ÚJn…&ê„ꇦ²A¯ª’¨Ðœ&¬„~®c ¡Î¤ø'!Þ„°!”—7¢1Ø¢mGᬕckßèãAsøóÝ"†€Ã‘êëÝêð˜Ù‘ÙH¥AK‡ Rx½y»­Hòê-‘˜G;5€S|ºoaüiô6â0¶Á?ñ¦Kzs©‹V6£³4‚\—•Ùxk:bJsÃõê„ëÙ¶v‚¼e¶5½Ú×Àûô•pC¦“ìN‰z'bö´< §g÷ )‘p^éJÎMæFá£?‚­Ý#zËÜÂÐkÛ䣛µdglIA3xq Ÿ{&pÉí¾Óo<íö"ÙºŒƒ£³–ú%û”/ÒÎoÊÂgXAü!¨–" Í{OH¤ÎèkrW´Îˆ¯EÇë\s íw(ì"qÆ?˜´ýÝ!7y…;â³ÜÀAhsÓêu9„KEÃ?ÍLò³ÂÚÎ3q#1x(ÆÍ’—ÉÄ;DD0qä©ã6B­¾Û®ÈêzoT1|b‘|â÷{ƒ{˜¢} ý$¤Î0?˜u¡•.oûÅ‚U#å]Å# :¥ãÆ3ãé#‘»l÷`?Á(<4q`–iÔ®œãÐê*‰“ãVEØ ž¨âÅYÉ.&¦.Ü{IâH&kåéš8vvîQÔƒS‘òtIžÙb› Ù‰¶ ÉåΙù %æ{°(œ'Kï'D˜Fq7»1ðuIug£$ŽÊÊ–ðAã§Òp_þÕ}Š.X|‹u1µAµ a4ÁW…~[B¾[b!U—Fîåü}Œï¨#«&jL˜¼ÇX›û‘Á o—­Ö p iâ32¿¾üÛî:±Üé@ÓÿÐÃkØÿ}òߎ^uCyQ‘Ä/ÈRT¬¯ƒ8ÿÚ>"×Z_c–N©B—¾È†ˆÇ°”-/Þ7q&¹ç×+X÷K.ƒéënLjwà™ÔÐjÒ¡ÆÇ·uòy69#°Ó ‚)¤$Q}¾`Á›ñ‹eì˜;ÇÒº¾mè˜=ƒÇÚòÚ˜1©¯Qð¢ð€{ÎïX×[_Æ@Uë2lwT°”1ŸÓ„Nsx–ygYÁló _cT‚Þm ì——°˜ÒæÈÑi†•µí¯ªŸºVkAW)ò7êZH½Áð_Iú þŒ7h¤†9´U=K\ÁÒ´¨'- ¿×N>Á{¥ðÆ[âÿQpÚ>Ï ZI«º³ ‹pÕ–§‹0e¦–?$ÚNüVžVZ,I>»‘*šƒˆÆ•ÜNÝ`Ø&s|00cçã¸Ñ‚þTãÑ}<ªÔ VõiTºÕ¯v­vQ{êÁûLº TnVA´9:º6…"œÖœ©\4ëŒùÃ^ÃðÊÈ4¨ÌµÅOttVW2ÌÞÐhn§!“¶Ð/Ý¢0Þ¡¥:ˆ»í»U*\`OE™?©¥ê$PÆØ¥©­Ð΢uT0pépÐ× ·Iž57¹úX„¬ð§ (Î(5—W¢SÃAfÊ-\Ï”FIo—ÛL˜…¤°áÇ3Õb¼Ã:Äú pZÃf/Lþ­ÂÁþšíc'Ád³Å2áq­}›…ÑÝ“€ÆUÌçÉÖòì|ý4-9“»ú†…ä§Zûld6Cem~ðñ{‘M wŒ·R›V E¡‚˜3Ŧµè#"\¡ª~ú‚c…³Ì}U>Í>ö'&dãñKÏ)¬)"Ë;nšé?l"Í»WìrÊÓNPôQ¾ŸÅ™ÊMûò­Îçˆ}­i¯þ³£¸­´‚"f½Æ„?3½+–SÒ&ž¹?ºr`*cßIýLÅù†‚»øVGJönj՘$:®‘Bì5ò­ VÎÿ’\]SýèwBHb”@E;¨{üî=äiBz3âïæÏÜ; ‘øˆVU1â©Ò®á‘A,o› .9L; [Y42Û@þƒDŸ3ÄJ*à$`  Ó¿t‹ù?â?H¸˜«­™=à÷¿ýÁ IuÍzA‘oem«ÑLØ¥U:ƒ[JN‹ ²\]˜Z¬TÔ¨mŒŒMúj—Tß×Q@™Ô”4ÖõÐ/Fxrut¿¾s2 k&“åyR®Ûûý«—8YÖ€ÃõŒÚWF:Ü+RÁj ¶-`!û*#ëqgpoŠpäqíB&îùöÐÚ~‘æ”´‰Tû° Åû„®ŠEŒ¾7¡€èÔK¸p`lö&hu8 îxf7bˆAy½¾ç,önÊ­úá¬t´Á–~ý«<%Yë1 ¬f¹2ÆŽéQj8õiV‹gª¸"Q3ê–[ ÖÑ¥hŸbÄs¶…¥½EÖ[§ï¦°x¤•&I3} b ŽwÅ–'íVÏ #(µ=—J›)í"_ÝÂËHÌðÄ>»‰¡W7œhþ';¯³…¡±ggökʱ6ÜmzÚ¬šbþÇKg·CôþPÙ– CÒíG¯]‰‘…©y11ŸNëÄ«eòa_h-5êƒQcÍiP+^®YÇ‹Ç͇QW4|7új(¸”qléü·½-aÓJU{ÿ:çN~¨æ vîÜMUÄñ  ™ÚĨUŽ‘1ݻݗÿ¯Â£$6Ö1˲6ó…Ó€õ–çËx1¢EÕs±ˆïìö2̹©³¬mf°šËdO¾‹¢ÎžU ¾©¦u¯&;‰rHOZë* ?¨Ž°ÄÂÂàgXDë-ì9uÑCÆ ã—ùžþÚEŸâuÆ‹àöÊM@òmBD\‰¸­µqA¡šDü¤¯ [éÁFæ¼Åžªe;zJcàÊmH£-uŽÞ`uÕyÕ¿ycÉEwèÈÊì­9î°ÑŒuC ,AxuO—f¥‘7gÄù¢¾Z‘Nµ—®qþ™hȯÇt^Ï{#À¹eEÛƒ8ª #Ýl_ÃÛ`}¦5ÒõÆø n@ªVJƒpŒGk<ý‘½¬MÛ[Y ‡\ µŒ®QYeîfÝïb„¿ôz‡êKXÙL÷ì"ù™ýPÊÌQ±©‘K-Zꂽ?ô—–i¯ÑÞ»r(MËÞ¨†_0vá‹Ö÷ÅiQ­F–¶Ù›ÇÆ»•‹D´RÇ–”׸Ýü¿¹:%Xš/¼±És ©EeÍõrJ¬ìkfíºwÜîÿà’ÚóH*_ ø1 pÕƒC/Og»×d¸÷¤›&ÚrR8>úê¯`†OÈ”„ÙjÁÆ9àZc:ˆ+``7£u¹°1…IÉD´¯Bù¬$”y—·0Þ\Ù_pw»ãO*Ñçf)8,}w-¸ÿhF…ÌW¶ž°ü·Ÿ#Šm{ Á+"eŸˆÇ?ïêäÒÊ’ü¤`Cß´±¢]?ïÞëk?°¾óÉû\t…kè‰á[{@˾tIÔþ,›³ß…€?!ß °>Û‹SL.zž‹ð%xL¬ej6nC +pœaØœN`Ч›Í—ð%—ºiBˆÝÉ`½A‰ÝGÒYˆ„v Ráû6xpV ëŒTÃjB+§H/VRÉÌ?S4”zh(»tHlcQèA«Œý´ÁæÞf¡E2èo3Éòaó‹¨'®s½‚ËÌ̼_•Xk)ÅâØò´1O“´þyb}ñ‚7Ç·¾-Î?’x–#˜ïË€wÖhíß1¹p6}ùQ«$À C ÆÒCm¶ÀB\e±À`ñ@‰A ‰ÊÄŠŒ®5ÖÝÓåb¨{tO¿©‡G!mœ9tè¢a£Uk¡Ü+õŽØ‹Vž•h“É'S¤)²hYXå)Å´½ëÓiŽoìRò…ŠO;ìëÏñ/ÚªFu§öm+6s? ÿ#cA`À=ü–iÀüßÅDÿ?ÆúéQIò–¢ÆÈ7¸)¶ $$„¸¸€˜v1I$ñ¯È0ŽEcwš%¼"cóvú½œ7ˆ> 4™nûu£MøÊl5èétÁ¬Î¥Î~æGþÓ7—ÇÇŒ ”·Bâø5\ç|YfÎASò­«›f¬fÿ-Lãµ¹¢tdŒð ¬2ÕÝ& VóÒ㤙Ím´ymkh$ÝR7.’úAÈ=Âyj]OÌ@»ªŽ…3a‹ß9ÜýÕÏdªÍ)SRhŠ—{¸úÖAñœŠÐ©”|¥š& å.!´•l°ƒ !¡rÊ5‡±,û:%3wcâ6းthË9±‘®ð)ÎL¸‘ôžÛ=jÀá`(æ5WÇùˆ9SÂUH9P ôK.÷ˆÒMt—Ç¢ÉWYí|ö»ðnžAê9á>‰ä÷©ŒÎ~'<_¨ O¥ ¹EÙÁêüÓC³iéa˜}âj 7Õ— VŒ›½æòw@É7—dð¦ÄA/æJ²€. îvªë3Ðá|—+Q¥ñ7ü{)Ý-é„ô&ÕßÇä}¢W­®˜a™já¤ç1TeiH}í'ΪâŽc\½Ûò¦ƒª—•ŸMm^H‚‰ŽÓù„Tì.E’¸ÙKDØl·do컉¡@€”%ÎPz(ìSD²åWNd}ÑN^§aå¼Ë[I ï«´«:nþ·¼í1b`­è†'OLàpé$Uø3›¥ôZpWÈ4Ó/Ž|ø2Pq î(v•LFQ9ž. ´¿Ð~' õqPG<èhÞã^v^ÞCU€Jaù±«’/»â†¸íа²­è"Þ)¶’ïâ*(šò²lÞñÅï†Åø¡FP•à³ qy‰ŠZ#Õ0kÕ¬¢Å׊4QÚfÖ¹œ¸ðµ»NMµï|¶ýËúÀRËšÙôA/2R.lþ< ’þ‘Éî@Çõœ'Æ5!Û)mJ+ì:vÚñ•UÅe ñ(¢OÞˆ;@*õRíÛœjÈÝËõo;ÈØÞÖÁÞÎÔÎåß вÒX  ôÿì<êÿòáÿÞô§jïêdü/™HˆRŸÌ€Fvu}½åR©ÆŸß$䨨3¹¨Á‘Ð}¢üC¸­äY‰U}ö÷;Ð/Ê{v`ÒÂΫ#“Yœçïûè½ÜH¶\†8ƒÅ ¢,c¯âJP×0;É7¼*µÚ.&ä&>};z ,eLJ–öõwDÞþºŸ’PÏÏËr‘䇙?–Û ¨í’É f˜l<¾²Å®ˆówGêF(âúÏ–eÒÒ*·-åV¬ÚÖª8ß=9ÀLÕÌ”Å?—|&öžRœds„[^ºªæ”ɻńf§,I•:cLd¹,GÏ3ðpêyÐ÷ˆtŸ’†–]–ÿøíUĦ¥uD^è«Ø:ý) g„ÖLô f?Å~9ÿ««‰ à,7ü3¢ýÏ1øÿynYþ5¹ñÌÈ}J!3%:‘bé¸Z.·ýV,L¨Aƒ3ê™gè¾Å=Sÿ}VÙ ÅÈ8Ÿ6ïsvùr[y‘ž!éA«C³‹ü0äOxËß³ôâqNLš½ò¾Ÿíy«Ø‘¢Óº^zú$§}•p}$±—wÐprAÁcùʨ¸'A-FFóSÙÔ¡ÏPù·Öíê¨N9®Ü[EÞ#­ÜkZÉ@Rd®tŸa*Û“¹øoç®&±bG'íÅoYäÔä+l’)V —«XzæÜAú³¾S5Òá]š³,9Ÿ´Šx˰ÔÊÁ €S”çH÷ñ÷_ýØ¿'TX/û¡_p62%Ìâ,œ‹ø!´Øý°kħŸ•ÁµxI¬×v¥2º5 Ó€ò󂤕“‘¸éGW‹ ¢R‚"¶ýª˜Ÿº)¶¡PÞ¨A1+·ÇM dq7­Ñ§†+þ°ž¼W²ß&õ½mr@”6 rꦙ%.װЊÃËüÉ <º¿¡„Auæ7ÎccÏ!ÝT†ÿ.7^œÿ(ÿ¼ø/að/…Ý¿ÄÏä"–v&–væÿY|—£a«Š®‰á§ ÕPGÙ…W‰‚&§Õµ„–?4œß©´A¡í`ÙeÇûälþ†ÿ±Îø9ìV*R¦ó$êXê_ò]pÙÎi ¡rjât½ÖxÌwÌÍøLéÿyä –-ú U.ÊT¢¯jUõLQ=õhÐI•ϯ”¤z‹…VmòG=ÑU¹E¯=&]W)äÚÌzÚÔN#mô3o#mÍ›öÀ÷`‡íé3Ï Ùäí9â³±ë£$Ë |@¹øÖ|¨5…Ƚ×y­îÆØë!à¼A:É8ùâCàþþËÒc³IÎ=1>–(„ÿWà OióeÑ-ìR«Lé3=@•Áo:±[ÈX§é2‚1“Ër"ÀyM³0Î|R•Ë.Ó­"ý÷(m=ÛW¶6M ?füW\¢n?uF3¼ø çéZc­5o\§o~"ä̸\‡nõa_pºÄ´ƒ+«ÿy]E‡m[Ô¡ˆ°;ºN¡¯_®Œ²{{ VAluvß.ÉçòˆH¼ßt¡fU“;÷ØÝ†–C¼8®—ÎÄÔ³b9uOÄ£tÌ–š„J2½¸Ü*óîS ™” ·Á¤^’ª…œiB¾ P£zXM?ü%ŒB©èJ‹F^R‹¾,Ôwk®¢)Íu€‡Î eð)(ÏÁÛðÙÏZd×ëõDü”²ð “pÐEƒé+Ä}=ˆÌeì9 dd?Y]ŒM*OïfÉôT;(M‘Û˜74”Åq¤¶¸ŸQŸõ²ð—-Ýk®Bÿ´-Êï ¬.¬…|»çÃnAë?1Û›¹¦iS!g=¾!ô)ǤÕìU±˜U4ì3pWœih Ü" 2t&ºzƒ­çö ß>†qXOisZ¬Lì ÔgÜæÊó¶±YprÐÇZß’¥OÎeB³žìþjäy«¬·vyRyõ/`ùábÍôü\m%þ­³âçÚÖ©ÈÂÍçúEf…‚Qò‹KÖ©‡äÅ¿Ó!áøMöo}ɬ^ô#Õ“Pý +„QÂë¢Xà»…áíýÎȬ"ÚKí1ÊÑ‚#.ðL‚_¿÷Lÿ±0êmvêºVÄRYH&Fº™YU%»ÖKØo¦lÀÎx >UϼÐE]ïqaü¤ôÞ$³ŸìPæLÀƒ_°Akgp‚²à€ÓÝ1H¸ nðlwC ElvSy ^9 þõØeN3•Îþ¾Zžq‚1uí(y‘#š1H¬”—Oñ…6ÎX®Hå†÷7„òQqÖOèoï›j'WŽt—X[3À«qùû륃´ñc”-Dß¼¡È¢€Ùe–‹aÂ˹#˜ÙO]Â$½^¨mbï‚>‘< õn3ß%Ç2üÀ{ÃÊ4Y±hœ²ñ ÇwNA´“õ€'qÿxNñE¥{¯eÊòù®Ä¡ôqꜭm=yY`ÉöB0e}ËßÊÑ+0-Y\µ,Å„vöW|ƒa]ЧŸ=EnðL:ü],Ÿ½Ž¦¦*QiQÖÙ&e>Ï0ÏCiNÓÁxª¨!¥fnUÔ )‚·Ï CâÈí}¹Ùûs‡à¶ØÜÉ…ârEõ†ûÓUyÛå¥ôNü½eö½ÀØ?ùÖV9üWÞòxÆ!ÍOoUsÜnŬ£â²0,CÓPåùL3b.s^åuÌ•¹`í|­‘вÓ…$î–2UÎãM;ê†ÝìiØrzUQ&ÁH–ž#Æ? ó‚Âý¼z®¹åšê…ý´ü¸®½·ïùf>}íº¿>àAjúìÙñj† ß #¶Ò=ŠÙŠ™ˆÜ­FI*û$|VkwA(¯òC;o„oÛt‡ÂØØ`…å_êŸÃ´g#j›•@îDÚ«…:0âZªÉO‘x¾ª¡h_©²Kb"»^ó›ðHIöª>RÇíÛ—ìY“ä0v"I5¾RRr5OÉ¡}øþh*6TÅß/‰‘Œ?,®J%+æä%ú'‡'m–qØ1O|+’3Në£m–'io¶Óå(.á¬t7 0=¼æäVgŠ¥“v6«“6¬¡ô¹/ï °xl,Ò·WD^üÒãZ=+«örbîðùdü¹ 4¼gFhÌ‘Ühf%ä7øÕn“Áþj8÷dH¯CcnnцˆÑØñ¶¬ÌËÝWèê‡_ÚRäpÜXr"SuYè‹Î[Ð`uCŸ3a;+«iQ«ü&מb`T-DÔÅÕ‹ÒʱsøìL¢™½~{b–/ôiëVw#w^¯Iÿ 5vûS€ô £Qø,ƒ©zcb­YlãÜïfòÀÅh_õö»21°kYMØ&׿Á‹¾zȽ Fhi yê¤sïd©sFðoÓdÌ¡;™H{C°_f®:ÑÄÑðp4Ây¯ÑºÄ¼‘'o´£qôd3nÒ¶Ü÷Ï€Qß æÏá:ißÐßy-Ïr×ú' ™ÕŒó´Zª!($üÍâì*û1¬P4Z+:këh"Àªú ˸õJ`†åPìzÒ„I¹®ÿ:3+\uÊæÁXÆ.ŠjoáV¨)"~„ïˆä$&¦vS5K…¸ûL.a ôˆW—¼$¶mwá¾¥z×àqX¤1Oì~plíî9mwÁ>y®²£Ìçmt,oìP«‹Ü^S,\¯rã%6öšL±dܹŠ7­©<%–•š)Û»jŸ;Û Y«Mƒ.åë*þëÊ!¦€¸&[8ò˜î|Ù%1"•f·³ ¸Æ2sµíi0¢íÂúhÇùWu…N¡.ŸäC@”ÀÅˉ)±´\Fižgz·+GV-<ÛõDܲÝÛåFp™9žÇ/0&EG7QŸÐ¹QvHœq×|AN½¤82ïüÒ¯b_ÓC{¤ö62RÓµ+4m­õ÷í* ûB¥½V%T-"wz:ó a¡¹:«|PüG›’¹Qc:Í\·Ú2‡ ìÜÀ„—hè’Ðv_±§!IN˱q¦¥ò‚š¾³K¦ì@úÖR΃¬~…i£Ÿãk†óuçØ¦íÝ}¥\™`{ì¹Ûˆ2ªýÓ”x é¡ʧږ'©O5-ßì°‘€xì6O¥£¥uÙ‰) û¬„ß\›n:Ý9¹Pçµ_hm;¦2v—„„'M•BV÷ÁNK©Sæpµ|NÙá¤Iæ\æQ&NCÑŽÌNf„7‘Ì´58ÖØ³ \æR3ðšŸG{x|<ñ4bù}ùä’,W”™ñЕ"Sç:C–)ÄcXÒW4÷Ó9 ÁJlì$7QI ~—ç%éR÷E.§º Øz³” _bQdÛ±| tæg«¢J‹l¤•F–Ç[Aó\‚º`Øf(ªk Η4¨$ßJ?Áo” `ù‚¯n„š!Öú'É ›‹;— ¨R;»ˆ›§H¨Û 5È7ãu}˜¼4üzØ!ëðå’ýž‹”QxÊÇ»ClùºpðÜØ3¤îø¯â D›b ŒjFèž‹Þzå¾>µûä±;§|—bðã»{7@øçV™¶G$t;‰¼`]²Ìvô^v'ª_ÖcšŒüh/©žç´à×Å¿6Ú{Œ±nÌ~’9LB ô3ök*Shüâ$Êèÿ-Et†‘Eü³ê ¾<.çmê“Rzn†²5ýMwÉé"/lš0ˆvU`ÌÒh$ôld§L?}(­ºê(~B7:Ð2i˜ Á+C;âyø,FÓäá—Õ!BÍÙ6>QÛVêÕýeÐ[X0Ýal¿È,Œ·ÐÑhÇ4䣻÷|Ÿ É*èâ¥0Ûó;vêËT|{š‡BÉѼ>[N3Û¹¦ÇÔ h^oD&™­€Z4¯WPÌ)&¤wy›ÒŠüó0¬Aç"×ñÒ>òñ/ðð㓉Àì3ßñ OM&”¥[+²>Œx² KS«®ÎdÝC0N†y( D/ŒïãØ'•)Åo™soö»Â7ª™Ò­ß  JÝÚPù^dϵ]äÐQÎëÒ±‹­³&QÕÇð"g–/¹i»„³Žª˜NºµE<*ÎôkXÀY½€-ÃÎt<ôD!Þš}ÓÚõÇòÎìŒ;“fxÅR=î)Œ‘С]|µÂJµmUOÑxh“rgŸkŸôŠ›MÉZÛ>ðt‰l˜*zƘÞêb}\[¼^3 Ö%Á€ûFÊöØæËë7©¿ˆ&g«Ó1VžàN<Êq:¯à‹4êtÅÙÇb_QÅÄ×çJ@}Væ ¨³‡7+-ߣ´î¹Òîµ’$'”-€ßg|Û´¿«äÞW†×Í«´¥c~õÔI~¥8~àŸŸ^7·a}'âAFæžßúmJ º¨\%ª~õ9¹²˜ VjÝdáÆXS~VC6åH–çu„š÷¦M0}e…þQXø ¢ qç(ÑcL«æÞ«%9„.öxÅžÙ¸ê§ÿñ‹ž~~FÏ"?€ÐSì]Ö𣓚V­„12ÔLœQ$Ð>Y/1lÙŠÁMëùÌÔØz£¹Øµ{SXüÆþÑ-7ªý(ˆ8Ûÿ% r±°7ùWÖ(ltp1u:ÿÏŽ­¤ »!ŒÐoËì6öÐ&ù$'kñi«4Š˜uuøß Y«¢,)¬èžÙ‰æÀ"a£>ð¥pc*ú4x:ÏéÉkÖ¿¯æûÇ­× DEg½Ã®Ðœ¬§[NøÖHNÔZ­õ}ñÞ4)Ñ?YMh—P•à}ñöÒë~’ba]è‰ ›óÈqäI·jM{¹lq:TÉq]Ï›ØÃ÷®þù)Jõσü„Ò˜RK[ˆ/$XsDœ…}u«˜·_$ZòlÞêÒÌ£ê+Ö¡›éÃÄý@ÆyâÄß1g%´¢Òržï€ŸFêp@­Ž^S-si„!Ü^=òI¦hÜlw/œ×=!Joƒ¬æÊœà=#"xŽ«¶ÕA}ìg‡¿ÃàØºåm£Æ Àãï*²2?Æ+Ûã`ŽQ¥6“?÷&§‹ãKãtIóÅô!=‰ÓÑc߀9°â5v 7õ@®p—<àáž²z\5b‡&G¢y¬Á¨ á#_d´QËæ…ìÛ+\s»Úf l5¯t¯ºž,¨É’Ë Ku*q,óŠÙ£"õòȨMÐ7Xu£T¸EÿÛGÒCäR5óAœ¯Œ÷›¬Z%+~º2¹>ø°É ² …TÖ_&Á WE–ÆùñßÀƒÅøà‡’@"ôÿ–ÿ1÷ppú'¦¶´·ûxþçE °jK˜_öfžcðkR£ÁôB¿€‰(â°\ÂlñhJ(&soé]½;&”Ó` Ö͘ºÍ•:ØFØ•t-%©áHÔ)Cˆ%KÍ5ÍÕKCjÕêïŸÍdqȪ‰=¯»½gøŸ³¿?Ž7Y‰Þ>rÿ€Äb/¨©2"8„ù\¨9”Áñ¾al¦DµÁQ¹U¬Ætª³íAzc|H„„zc^¨×)Š\i*Gƒ«´)Žo•íùñ‘H"ÓzH•¬Ýí!ãFˆÔazRâþŽÝݦó<;ýÝ¿»¾¾GRÝ&–©GKþdø"ùëŸg~°¯ 9SáAÄXîêŸùSE9H°Ò×_ù6rQ Àþ'P³doEí³VVô‹’ßW´/ë5=¶GöuóCT8mó¦ªé™Òþ‡‡ä WÕžZDß„‡fŸ úä0òº"=jÀéýV 7ìî–‘æ>ÁLJŽ8ú¥UHyæý±×@phÞ:‰…RÁ˜PNͰ Î<$ðºßðªù+öÊèàYd.+ãµ;À Ø­¶~höRüƒZn_·JxÞ‡èÀ)92+Yò 6—hÇ˸Œ;ù.öË9Tð$n£®Š«Ž3Œ! _ÃÖ"εš­?ª8_HÚzTÒÚu}òz°˜¿c5=¡®Hõ7Áëgy%/ÆA=l‘Ùká×Îï,ד-e€œ¨d;ô­(ÞáôJ(ÃŽ'ý(d‘„b“_͇U‹^ZÙ#(Ûo¿¯qöPÆu®ÓQ_ch¢M¢ÈiÄ¡@¶^sIz‚Êøþ;²6¬ô²²EíTÇÕÂ¥ÝYXÌ•‰«£&3»ªñÕY"x¬àòlšBr>y]>ÁJ]äs}9K,¦69ã€òhËTuvW&LêÊè“ÂÇ-ë3f¡¼gç_6EÙ þhIÙº9¤ XækJ々۟8ˆI¼`¢[ãÕÚ§‘Ž@9äÙY÷Ôº¤· v°ÜJ`kïa0…šÑÊÀ®•ÙÂp˜D¼HaÃ+·’†N¥ï;h’³°wûR>ï眷á½ûÃlL9Qé†ÚŒ`Yʉœ!`6;ú}Vî©ø‚IžÛA)&ºû`TÕšnÖ0UZÆ“–“Ãm\~øAôTŽë:ÔÂ+2·õgT¿ZRCW<3Èâà¥eA¦Q°K ¼BV,ï5e@¹ÀÅXXËŽ%ñHýÌñç"3Ç*H†‰Ò“—É®#——¨SF´Lǧ=Y‰@i&{+W€U)óîÚžJCþð«^™íÕB”\U)ÅÁ…œnæ>#ìLŸ9"tºa“…žô UVŠB25øñÊN»M’’e¯üPež ®´=î`{Ç”%#æ)ßRE¸Œ¦jÑ›ƒ§ÄI: þÜ” ¿™Á;€-¥GÖ¯DwÁzôv˜Ã|ªe2¦RZ¢U D^v@J…Q+ž±’10uîßE¹Äa÷@4Õ–NüEPþ;K³8™oGò{îW`%^cŸ±‚ÒdêQ‘cÓ»ÊØÃ¯"B“â¼ÌxWb'Ù€,„%ub¢»‰s±íbD†6kQí|~_› êÖË‹"›PàVµÑi¢{Š,‰uÏ ¡‹ÞˆÊcD’ÉcçPʈU…ZÊ%'уksý8BNçÇuO  €{u°,TñRb‹/ˆÄ©‰@5*&“°4j*Ÿw íÏÄ`ˆG/ r)W‡ßf¦“PZõÓSÒ¡å !®ÌSÒ¥bà%b²Â‡Óãqhöº.nÎ;àûå’ŒBŠ> ª÷òQÜØÑ u”WõŸæç’[+ÏÝ>´P“Ø•co")âãЇÔäÙvÞ ÂÎ> ÞBÌžOÿ²;™jÃÓE©ÿÔPÐ<ôÝÊ|£›¡“ÍÐT/âÝø¨w³ÆÌ€*Ý µ4f@´hñª~vO^Uþ9]ͧ¬d—T[ËSÉ4]Ÿ÷LE ÒˆR;›ÖŽ‚›ÐMY3~˜¼Næ4Žê½'«OI4jï,¡°®U=š¸61oáà¦@ ×â’ÑŸ›+?SヲÅ5-Jkóå²:»BzñíïŒg;9zC¦ÅuG0*6ì²·k0Å]ŠãÒÎÄ*ëz ìz=kHx ¯³ÜF½:êKu.*01¤³¹}A4»þe mÔ EôÚÕÙ½y…ªÚ³°ÆÚ’}&a#Š6ËÔjuß‘­š.¤_;«oÄi¬áZÇÃ÷:Ó&ñ÷Áé’0Ñ›\öõLí¢–Š¤¬â‹ÿ x+uÐú9S!}EwHª;¤•ú@‚6§‰šú‘_ÏöéÏ[ Bs¦Iƒs„ýRõ í‡L¨¥ÈõƒUYĘ3w3ÍÕR¼^@*ý’Ô/cNmcº9¦ýÒuAÙ ž~‡ØCÆ'¬È•Úf©‡ùÍ„2ÚçÒ40=çCg(èDÙÛÞø22ÁXÓ¼†<¬¦ŸÜ‡8éÜìhé`†}rÁºý˜G#÷|,4É@âˆÒœsŸ÷÷­×ѦÏîK‚ë×ÏÒ4dç'ÇÍ€ãztâf¸Î AÞ!ˆMëá”ý'P+Ëñɵ´Ñ¾Ú=£»WõÜöánœÚ$õ4'5oO¤ê7œ´9+|[ï´ÔŸý/œÎ3œòŠë7ük£›úŸšųGÐò©Gów®iY¸E²ºåk*›ºÓüÿšš=&ôü-ú‹ÇÏ4É£$ôŽ‚Sï™KÐù„)SCñ:3ÇžœÄž!Øü…]ÃiCÜûø>úÝàôÉcdgYéF°ÈL_Ýk© X¿–°în'g“›Ñ–»ëÔùûkŸø0w„¥†Ðœv(爟ùèz ¸æ'ª‹6T–X[ 6•t-’á¥ÁsaéŸiJª'c¯©-.høó‹Ô ò&w ¡ìÏš»Jyó®°PÅ›séác–=KµÜ6ܹ Ð…².“1!¶QpZ¦L‚ kÕñR1ùñ‚ªèÂh(bÒ¨ šÉŠ©B·¾Íг«Q•ÖÏÆPßsW4Þ9¾2TÞ„ýçâmº³‡NnÆ¥škúÌîÈ ú´M–Øf—è ¦ð”ä6ÛqµI¦üôÌ’2Å‚Š\­ùzmºJN2ÑzOÌ3PqcÆøwüles¨6Þà …T—]ði÷¹I×ìUÇXVÖZœ8]œ¸å­£«­Ê¡î\Þ8ÆÄû·D¨>y:ŹŠå§7\bÖ’Ò‡XCn\ç-€ ïr”žÃc uoL! g„Ñ&­ŒübgU ßPXSÞ4»¤à!uïÜTx;ßgƒ˜mÆP+Š?/½v”îÔÁÌ$|C”ãüo»åhœû¤z©!;ç3…íI+£!»-¦»þ ™<”ßâžX_•wþÚZš­žÒ…jW²e­Kwv5̸žY#øÕ–1f²”¢¨ÆñŒÃ,•ò—ê©PXm1¥í)tÎ,Ÿ˜ó®¼d¾Ÿ9"ÔvŠ®ID ´gô)œ*ºŒï«¶¼ÀsÖF¶œ!DŸ¯õ&ã‘oJ Ìž@ƒ€8"ÿ禄ÿ"·ÓÚXš]ìÿ•Í¥h~:˜~ó=·¸{g•Êg¶¤‘ùì: +×i®g–Ò`$bdqØ’euÊwL™=wmÈ‚‡“PC&»£Ri™ +Kž6ZèŒàšø,ÝÞ_0ê„&éÏžœK`F:$wá–YWʆ ö*$lˆÓÊ Ãð¬·UÆŽeÖ‹c§ËÅl‡¸NŒ™}¡²ÎÓ"}õžÂû[I¦G®+4‰ƒÝi Ér‹Üü?á!Œuœk­ À9ño°ùLÔ}㱩ìäJ ¿ã RòLžAÖ;®lë1K™9.÷Ê>æôé!ãi¯€wý‰^*iܯ¾ð)ÉÑšªÎRã8ºÃèÀl% ôÕfãášaÕ\y¡†;F/ú–ÙvÚh`U1#zÍqOÇnO·[øm"DºCÔ!›à’¥ ›ŒiÔ•\X³,ñ¶Í¬Y4û÷«ä@ªm ï•t™Íñù–>£Ë8¥æ»®Ù¥ðË‘‹5µ$Q‰—°ºÝOSâ Ï´3xùéRƇÍ=so~/°LÜ ‡Ÿ¦6mž úWÓñq“+Šê в’Ë ›}'[÷yd·I§ŸÇÔßšø£M·Fø ¤¬¥Æ­U¸üœ?!£¥ЍëµÍyãc3Ƈ²ç“éÜß)™¨SØ‹gkw|ÔEÑ|/ Îã÷M'¼æ™qŸ¦NÁt³*¬=pk™ ñÓ²„ ,c¤K‡+(ïJ¾Ô ]¿™šË¥@!Ù(ʆzd(…ÝÒÖHÿ4î´þù;·ß8V¼Ö§ß±vRpîFUµí|/7”“âR®žÛ.ù o»Ñé²±G¹ØvÛš+B³«hW¿«l×÷CnÚé…[Cê[ð´›“ƒT y~2`¿ã¢Ý›#œda¡ ;Ç32w]Œ×r!o½¥¹Ú3†³énÀïY0ц&£å:¨›·‹â`Ã6:v馅m¥Æô¡©B_û^ùL£²žw­Æ…7«å¥° òova;hýDûKD¼5i½7¸¿èñD@“ ·¼Ùµ¨´çÇ©lfwÙù[PaŠsµ«6«­¼V†k¤À-À¶‹Ù:_£ÌQ°‰ä—÷«2ær’à5XÃõ nPüŸpãÌJÔ+x^UN•=V•¾”®+‡‹=h’×Xd•ǸÕþWw¶Ÿˆ¸›3eÁ>ùpž}«Û0gÇ6„îÐýqË»DûTGñaVj&2Ø®7ùËë‚ï.þDyQE䨳Í-/©QþÀ«€æ;üVbè/#}KCÅ<ýKò)¢Ê‰bâð™ÐCÊ‚y‘—WBUÚŽŽI}¬é@/ã H…QÏ7ˆ¸±8bñ¯WoÔÔ¼]bÌ——®Å_mðÊÑtŸÛ úÐz’&"g7D ö¼£ÏåŸZh,öD s$xØ¥‘»? ©éâs™É/"÷MöA^¨z·œåtŠS¾O  3 æô†äSÄ[ä %éó 7g\ ®Ìý&ŽÇ)ºí«ä"÷uÀÏ!`–†¡ö±xÞG–A(¡DœôûZà:(¡†5PRÎë¼0TØëÚtvL9ÀÏ ±#'…Ò˜µÈ?'Š_é¤ÿì঒诊(ÆSV,NâþÎDÏ¿€ù6ii _‚+1Nî ÅéÈ펹ªôøá ¿ñ*» ÝX0ÛçÕLˆ óÀ…p8£t3IÁt1-2È/ļH @ƒ5Å ‚- ¤w1üXme¨×•©bìÙû!–Z/J.2±š.M!’·E¢“ä y‹ÑîâíIl’Llrà¶+ñ öýš0Ãýu¿ßiƒËÈZSË4^[®9´BýÌó´ˆuŸ%æ‘…s~¨/ñÅÏs^è#•­á‘‚{‹êŠÞSœä/ßdjU¥tÖúÓ3P‹c}z¶·xÝk<Ù@Ý|pá8-7ÛKmÎïQmÀ7#Ç? r)ñꕉpMÑóƒE„ƒÕ#Ñó÷(Éb [ujЊC)^ì‘»õ!”ÿ_µv;Ýöc&mu[†„Å«PޝN̳ÍrkÒ¼øŠ8œß±ån|SIkËÞèÞ´«¼©_Ø{Ÿ:×ø² œõþüEŸm2¢ÚÇ/ЬoyÛüÞ¾<·M²O8×ÊÔ·¶©vù.¼¯ÏMaÏ[ÿÞ«¨3O ýåþù‡rùþŸ)×ÕTÔhgn*géìbj÷¿~¥j¾;/.ãòß ˜L°àœ÷)mV²ÛI‰ QÍâã¡Õ’Òí¦pˆo§Øh¬KéìSZfÿÃÑÉ] "Dªf2›§Å9,ªXórA_³_ÈŸš<üš‰Ï‡¬„uOÝÞÝ÷üµ×ß_ŸÖ È{ª¢\[„³CÆÂe˜†£éª³až¸ð,r!ïæ&Ù)@š!eal\ªe’}qH>ÜîhifÆ(ô(–išU²A}º±—„@oåäÛÄ@û|êéîªÌ->?2?Z¢Úqùás?Ê‚J‹x`ž%¶œ·Aÿç‚ùƒ¸¯¥Â þv:0Æôü9/~v·³ã3Ñrµâ49ø ©ÔöÍ›bp~`„|*'¸ßd‰Ïz¸WµK´dN_ó Çë¹ÅSÚYš.åèß÷@ηœÏv!+Ówª±–®7{éi¼þà3À¡7¿–ÚÍ ì“Îàüد1 Å…„ :Ý}”» iGjíâ‰A#²Pi¢†Y––‹ÊÉv·ù«Uèß¹†IGˆÒ8æ bÑeðTž/ˆBÔÃáæÒç: ‹íØ3µsk6­¥Vý^j¬H“ˆ£Ô¢:-%ìᶉhÜQÙ«äâñV˜pïš'ã^¶r,¨7ò6{ `Dáå¿ßrÊeóʳ§HrA¬µy%cÖ¹ø½ùHèž2VäÞgB jRJº™Ùä2“åø®°Æ°ØYcp’/nóWoÿ§´=Z±A+å™þ$æî°È`7€˜z)J¢¨ÙE)ÝßçXÊÂ^H±¿Ôl˜L± ¥zá!¶âO„¶+ÈëGÇÇ[ro’mve TöÄ|Bêh%¢‰ŽG=dZ!Î{™îrU® >(%dÛ®L[Ùë¤K)A’ó¸Ý6—aä±Nm¯;&`´ÜÄs`vµÈj‡Õt‚ç"}¤õÌWPój;yvË&:òç}¨Ã§Qb~5}n„öÈ#rØT@pe?­_ÄOiœò ^³7Œž¶jëÊÑXžèŸû]Lœ6VÕ@‡š‘B*ultZ†[ÜërìcŠM÷²–Ò=~P0ª5°•И×ûAPí˘sÔó Xj½Ï&>å{€¡kå!ŠÛœ¼ºߟýÓ\\ʳ²“Q¾'5¢î6!ì;}o²é+c&k®¨Œx. ÍNYfyl—âÇt‡ÈÛâ’Ösœº-vh™:´ŽF”&Š^òK-]¡öΧá?X'¸ÎöÎÎe‘[Ït>é×Ã,x/û¢'ò­gDøY©¦wR«Ä¾TÁFEÆï¿¹ÛĦž ¾B§ñ»C™»n{°èa>@NÍ.¸ÒˈXÑ[=¯×Y­ÿ®ã;n#½å§ïr<ã²Î îžB,@ü»Ç«‹ÿ]¿q‹Ù ÏÆ÷å&„&?£<]ÚÆpë^äF˜H©/š…Õºº´Ó« àý’Ë×,Ê÷†m³ãýÃÊáïQ' ب>êA„Íì LEŒƒÚÀV4Dž÷¹COÄjÖÀ=j ,º‡©ÊÓ®Ô„4ÚúßÙ§Z­ÍŸ’ÌÊ%/0nª2_ȇÁÚí þ÷? $÷ŽÉÁèп¡’êô /GÒn 5ÎC+òͰ’£,ˆõœ’ŒÙ *9{DV¤álÚbc8kU"m„%Å,9ö ¨½Ð¹Ç²PÏ8þ,t =…0UHX¿ÇA¶ø†·q*s„h €ENòãäØUæÃÊ¿ìÝOŽºÝ¤ÎíM ÈsR<¬ #J9‘VÂÿçq™0ò5É|&ŸŒÖïßï_×=醡N2—06Bn~©â;92׿—noZ¸á^åN-vU+C:¤²ÊúX0ýâè!10©ãËT£¼Ÿ×'+ÐsfC[ ¬^ “ƦU?Cˆð-¹ø¢þ±v)z6ÏRÂKíª=îû²4Iÿ ß2 ÷öš×å3"¹ßI»Ê—?œ¤Bë9¤&Òà=|húÝS²þC*EšæέôJc–3Wo¸%sÐW¤ã _|Wà” ­äVE±ƒíEËp~I¢Ü™©‹ÕÁ<ö{tÊ Šq7ä Ó4Õ "…ßñ+"f‡ ÀOc½ŸæhÝ}›èŸ>)8½º«Óþ0Ç8ר‡„<‡úûÿp´XöL¸G«SDx^ï`™Ë)Ù'¨ý¾³O¸àƺ_#˜{ÚìØ½¾ôÜ´ªÑ›$¥äŒaf‘_¤1#@VÞ±á†)HÔ„K,øÁ,ÑÆ,£oæN7A¸êÒ ƒ™ ’~á§nA=c&íƒÕœ/ÒHá€weââ•­…¤LWŒ9­k5™vI²‰²¥ðÙý#ùï'°)ô5ð L› 3­€°ŽýŒUý$¢Ocê°ó=3´fÖ³5}îá!Æe¯@hÞ-ÒËDÆ'/dCƒ¾ƒþÛ´÷}÷ßO&CÃCæICiþ¨xþï"çÿ©\þ/šÖ†õ!PÇýî¹`3™×“}‚ 1ÈÚ*An±´†©F$§a+˜Õˆ3K´[»å—(øµC?N:ˆÝ##\c©ƒtˆ¢v€"†‚Ùž,‹ŠúÑ“±Ȳ¥¾Ø›o¿_]û^ã{œñ^9´iý6‚³£ €n?äh¿H–•écÀ´Û,4tg¶ÓT޿ŏP¾uÞ¬ØaÀŒª×Ç}¢iÓíã§¥u¬ÝìRdè¡fTߌƒŽ¼Íÿð•ê«UƒóÕG'R¾±nÅoÿÐ`ˆ?t§•¹M×#Jãà' ¤A&JðîѼÅÈÕ¸Æ4Ø$K3?¸“lç«ÜáÆôï¿§ýŠî‘ÂôW¿û*ݧÙï"7ýCžgªX[îéŸæòM=l gÀ(b/•J…ÙU±ƒàùðß«žßj7-‘]E{›¤_%;ú˜·±þ•ZîäïÞ´Û#ÐN¯qůJ ß)’pXåáøõñD¶ƒ{ƒOƃõ`¦¶sR|’h•óÚœ÷é®»Ât!’·•Š1pQʯWóí9ÙŸÏ…Û6ÁY¼1ƒoç–_É@Í©ç‰1ËëOY0.7¥ÉJ%§áp Ôk0Ës F,åÍã`‡·ëæ¨vì`ÅE"(Àì¬Æm¢žpÁ ÂçR.Øø•òðŠñyrv;ÿœÊU!AêHhãE#!‰Ô¬³m”&Ãe¯%¹g×Ë)¢qùy»Ëæk@ ½×S^ª‚úäp²Ð¢ðžÐá€Å‹Ëð© ÈR\˜\ËR ÝÀÞÏîô© g‹Ñ"ˆ…tø Ò|36&¾+%ã—̺òü¹s'ݵÎ>˜ÒOœfqfQ/9ââ®30>³ø¤ÝàIµ€«aƬð+±ÉàU1ûJë´AÓÉðö¹þÒ¤`¨Û}¶QAŸÐÛì„ŦêaÝ^|lqo`¼4jz²(ëÛ@qý…põˆ+e-~µ˜ù: × ôÒh›Ä²ŠÉ'e%`±5â‰ò ‚úጜiR…Èî®s¤ÃkÙ)EAа°Ñ2”Q€cuJÓ-ÃøÙ4'Åk1Ÿ~È?24?¬Õ^ñÐé2ˆ«m=‹M(UTg»Äà%KŸÅ’»dê¡­pâmÁò 7¼n+JX #¤ —€”ÒãÇáUnYVÀ# Y\Ô(`Ç4oa™eFR¦J&%toŠLPXµfþ”J3o™ „Å€òoâ#Þꉨ‡Í´t‘[Ð.A¿ò‘¢ê›¶›ê)eØ´ë;FÕ³a\Ó¢uõU¢ð#²5ËÜ«]jh²3Ö.åD)–Þm Ọe>2²v£Ó)ÓÏwj‰ø¶°NRû)XÆO™‹ßƒG¥™}-¤žn,·Coy©™—Ñ6b .c)…=¥ÜnBÁO看ËvÔ+C“ê%tªn¸«ÐË'tÖ2»R‡Œ”½”òøÏdBF$E•钤̨`Êþ?ÆÞ1:ÓniMÒ±ítlÛöÛéØ¶Ñ±Í'¶mÛ¶­N:¶÷»öùÖ9g¯sö7öŸ{ÌúY5k̺ªê®«Øé30‰0P ÒŸ¤5UƒçÄêÚ1ÎÞ2`ÓÐ[fïy¿ägldÅEÅЭ¥ˆÆçøµØò#•µ]k$²} ?¾±rBñ CZÌ{³h¦F¿)&ÄCtiØ•B&Ù”è)¬ $–¬˜æj#‚â—IJo¨Œ)(¢¨ÁeãäCÄ¢)J"½Úñ«",ª#}|håðiJhB)Ì"µ2Óé»"-æ‚^0æË"(ö—‡ðç«"ÅIK‘ŒjBe3@î]¥öãÓ1:H¬p¯`Ýænó* Á[’õQ¸Aª¸çnKIv<¡np†`ÇË ’¹=Ññ€bÄ#Ñr´ï¦ÖöiX¶Ò|ëx­!Ë^››pò¢ì;ïvˆÄ?”«ºj6ë±÷íòiÇĦÆ.Æß3ÈØ¹ÓL]Lã:C2 ßýU.æ¹Ð—èff‹Ì‘€ÎÐÔ&o ñ(Ã…ÃÇúKý’-!$[»bHºb3aM¦R·3Ƹ†79vI2å_Š>ñúø Œ!ñ„v†ÈçôÎ@ÚN_xÝ¢+7wqÌ@¦å@¯¹r©=_RuŸ>]Ò«{ê¨×žÉ*$©t#ÎL¹¾ó6 Ô¨ãD˜Ð±'z9àw4œhíüh¢éý£–ɚǫhä(DöOV4e OÔƒZ…"°*Þš-ã}…Íñ» ØßtŠu ®™]þÈÏÑŒ<¼[È[k¬¸¶,žL©w%J²ºÉIQRËU=H«ë10¼5¿£¨Ru7ûJ𡳾± %wÍ$:ÊA©(¢À%9€©ß¶\B¶­ "šøô͘œüeÉ+—7ó©%¢?å¨É=ÕÁšõÔ2.°Çò¨½KÐÅ•ç²çhW8Ô–áïá*¯Ÿd^*ȼæqg"ì†ùr†}³YŽé 펀5ØZÃÑûóžûºÍ°’»©x.òlÇÛ±ëÀýèØ]WµïX;ðäv«Æ,ÃÍ"Í÷Jà‰,*ª0{6“ —ý'žò<äÔÆʼËyO^+•2· g8♽=åÙÄŒo¤w*ÊKJ(®4C¥Xgºå[ÕštEDê¤Çþ„\w2B´×äå²(BþØ OѪÀ\Èî#{œ;C³|*—w™tV(šü¡‰EmNŒPRØ](œËÔŒp·>¾ øGnÖóËñ±ûzŸÔÓ2ÿ!¿ïh7¨:¾ç¸°|^ƒ’ ¥» 'Ó±Næ«ÎA7{Ëö¶&CôPŸ+Û§»ÑïÖ2_sÜäA¯Â*K˜6׃¡(GHÞäÅ’ó¸–3^J¬Œ¥´‚?„\ªàìX†wJÕ˼pQׯûkÍþ5s`È‚¬2]Faù:‚OµºÙ}•c)#0zǧ┒ìòÝOðU‘‰nÅ)z¯A,²I5ƒÂEÀËK9³g³´‡/;ÜÎcN›ɳ2]a臬y5SÚ¸ÜdQ²ÛJÀpŠø½}c3"ö-࡜¾dyèÔ°•Û ð®Âc[Ø‘IsRÄäÚÓ8®t(›¿“2Ъ¡³è™éãä½…Çb9#ð2y›‹Lñ/µüþœta)YÈÐå¦ÁÂ"&g8ÝX‚;uØÆÅ9Ê ã?=p‚ ÿ´ÏŠî÷D:«Ü”ÎiÆ” Ÿ€³Å¹õŽK[N²(d<ê§RãÿLßË@¦zNÞeï`îm(i(9Ц{L^UAPõ¬PN·¦Ù‰Î¸;†¶œHxpaµ:zç{ðçÄ´IUj¯SŽöéb¤Ü2gNëK ¯ƒ[—í¸ñOÙÿÂEY¨°¯‹ñ’ÜC¥; œ„Õ•pÑŸIÖþЗÖ7ÑæðBh÷Žr¤·æø;⶘»§¯U÷ÉñÙq+tµ^EväÒˆÆmѱ4c#l ÓZkü´®#Jj~*ÙTÍ#2{/Š éØ#5ÅQÀUµÎlÓâ„XáµÒ¡ø˜}¦ÃÜ@Ú­iå)ëƒIº@õ@áƒyzJÑáO/vYÂ÷òWu)æK…ùI¦fJGR_=Ѧ_S³Õö:U«:Z:X‡›bÝÑÉU5,^õ‰·\qJ$s c¥24ûc³ *æpîGËëüÑþïd!832A$—•ÖY\:H'u<,U~MZö&¹ö¨o3ô\€ GN0à¾óvDI EØÖZXÀ·ˆ{Ò"K2•Í»s|ázŸk›)š§y§=æþ.~TŸÄãצBDº5óu`îáñc!KvgìYG⧦—uIes¦JrÓRtK4¡àOúÅá˜"âeõù¶ìU»ÃmÍ.ˆ4¶«AÔ/™ÎSÈ,¹™vj:„6±>z°È›¶ùûËs° è °ao‡\­ ÛN‡)ý}¥Ãت,Ó÷:®½Ÿ jÙ%/UEc=-:ðW¶eì@ÿQzã#ÇXc‚*KNûc”ä7‹£ûßnu„³£JåQ­«<$š_vD,Õe¶{ô ]"Á=KÝ&Ý3¡Ïî»&ß~p¬·¤/ˆÅ]2܄РÞCÏïGßñ‰ã1®¿E#© ÷Å4Û˜è såé•b5˜jmò²l…b|Œ© 6ÄW ̹5'*é «{Þ>†¦ZÜCoï‡×Eäx·?cÍîøG`]+ˆ?â› âª3¶l›)skšÝõNÌ,ZP.ó6™q’‚´4 uÖ%èNÈŸšžä~²Ûg@ ª >r»ó'å,LËîzcÖÒü·“ò€Mx£Åsóëcpö‹§6[15tu•&ÅáZŠÁXÅä9eÉ꺀^û¥f·´Á_6nâQ­)þœuõÑ"Júû‘¤pàùØ‚“Ñy÷Áj“›6¦o+]5ÀiS¾]ú?œßHÿkÒ§Ù–†ŸÿÔûßNËÚþ“Ýýk†ÜÐòÿ.ÃêÅð#þfÂÞ%TE/tt¸©á¨± ¶È pdo.«4âAÝ(Ž œ=Üy{æ^_ ÄÔ‡%@å2ɵŒ!Ê+ùÀ< ËæÅ3Á4W hœLEIt¸Õ¿DØÑ»kÃÜÿ`dMÑž¹‘·J¹‡¢¤ÓñlÀÃj0Is¯.bù‹D1¥‹¡[L×q¢œÈj ×v¦u¹yd0çª&ø¿jšœœr Bñ¿ÕTÅÐÍÔä²Bþ{t\OM_ÅmSyBB)Rû¶ÝT\ YP„­d|§åR3-Yo!›#” y y~Hp/ˆBUîTàí —yg]oÍÎ5©Ûût¦Ý}†ßýiôºv4úPž?ÝB’sFÚY?nAVÂ9”‰¢ =q×ÒÒ¬  }¸Ê…QÆ™üw%Ê”8Óìœñ}d~šs—^ªç÷ ØÎá9nûŒ–9¹„ÅIµšNÿÏå[³ŒüÉš“UxbùuC)ºêsv=Ú 3éΤ_ÇÌÓy+ JEÊ´5ŒÙ¦•BPãâ©p¡7ц¸F©ùôü‰ÆŠ'Õ$ùiðI»55ÇžÇ99Œ¼PmžbI+úŠ(H@Ã5î„'!FZMë‹Ôq¹|ÓG\F³®„?ôŽ õW2qà·WÍÀüÏ?fEdøÌ³6ÉÙ…|%¨Wá¨þ`D„§¶ÝDz.9þoæàƒÑ1ÔÕUáJÏ%"¬è¬Õh!z,¤¸y,:æFÉbpaúÁ0ø:’ã  ôÎè.SayŠ+¯-?ªÒÄBè&™%ŒYÙÅ;”멸8®rÅ8†.}‡ ¿úQ— Ršhj¯´GŒ„òî×õôÌȡޫv´š‰wÉ—ø¾ôÞ¿Aù…‡.;áQ¿•{ qþ Lèûy÷~FŸŸ«¿°z+ms |Xá‘`œþÍ‚˜À)íHQ˜a[Ý2gtŠ'Ú(°;`ª>d@ä{Åf®”øÕ^jÖ“w©R(¤ ¹<Ê›¸,qç˜u“hCx6u†¹ñ1*X!àJó×U)Ö°TI‹=&„$?N€d,„iCŒ 'oЙ䮥¼©Ê‹Ee¸vl„ÄEü7†Ò‡˜>JÂ*}8¿ø†ÒgdYmÁ[D)ɵ2ŽºáÖƒ½7§Ü{èÍI„Áå]ÏŠŒK[ÉgÛE¥«ËÊüñêÕ â„vДëÓ¼ ´ßÍb0P .ˆÿÛ‚Šé¿Ö“K»˜Ú:ÿóqúþÈÖÐrÀ_Æà·oI•¤—‘jù{Kq(.ÅŠ„“`ò—«AܘZL³Å´±ÉL[y’_¦Ã;x„ŽNf-1<žˆвŸ°–”CBíCùUú˜V­|â—ß«tÖ}Çè”…M%Uûn—ûµïsŽ{ëóÇñ·À vŸ|Á=W=˜ãeØû fÔy= ÒJReˆ4^µ$*5÷"ú™a°£ÈÝz4mº¢Að|¸4wVruX>‹ÓXè|@ÖoÂzÈ$Ø*&®ýŠ,åEìE**®â½}¯¦ý&ŽC%n犯¥ i£äS„2j‚ :þ{æ†.Á¿)Â¥…¤-œˆ*(1øŠ÷,óöÏ,u ÔŒ” ž£L‡Ÿ±v–ò+çšÌ&Ñæl”öÀZ—‘×/Jµ•[ÿØ8E;Ê) EÞÏŠâ{E ͦh¡—É8í‡4U€ãqž´é3J¿¶Þ뉭fä [xó8!ïQ7D4ÂX6Šèhx…¸ó•î2i€3 piÊpšå¨C ž R¹3ònø~Ã4 ö˜-J7°z²,OÖâ)@@ÎÓ_òÚÖlK¼ñWe2zJ’Ò2¬ÈËS{éúkyÍMm£4 XSºè¯Ìèµ ‹£Ú-”.*“WN€¾Ó¿Éqü[5mµØ‰”|NûÏ—ÈÚ®¼¡.º NË‹‡·¸Ñt 8- ðòÐdQÝ 6\Ø©H¤¬Ä÷q ¾ûyP[ß„Es mcÄÚµ*çc 1:*#íÝ0GYir†izÂ0$Tûïiôû” ýQƄܨr³¸ Î-½žú\”g¹%8 z“7èÀ8õ9©!Ztƒiü iü¨Ã~í‹cô¦Ú“ïNäã1Öƒ¥&À‚ÙŽÖ^*@0Vz@°Ò˜ÝV𠦤håï±cô^Càbâ„5e MxåšZBPW¸~‹øˆÞ–üf¥ù nUÍJ1?ÉUû€ð§oï— õ[\ewÎeÏ©½iï“‹ cuH›ÔŽÍÁgRÉ“mp^× QË›:,Ž R¬áµ4+ÔӰЬR]Õ]eL&¼4¬mc…ôfJ£mrö+ Ç kÝÔäÉo*LEð–§ÏqñœèHYåñ¦ÉË?;²›¢íÕq[dXm´žèæ ãúä­¸Û¯.Û´-S­ppøÿ¹"8èx3Ê­Ÿ-݇/ÊËìšæt…Ía¦_ÖµFë³Ê¾Z*™£Å©ªÄ…ÅO|s¥ë±PÇ+±V¦co²Ó-Ö pk#Ôµ›ÎóóŒHøFÀŸ åw¡°edêKá´‡„iÆÞH«6‰®ò+Î5BϜёÁg«ÊÑçÚê’/9÷h>Ò¯/£ã¯¶>I¯7ô~Sà.®‰†<9½¸žïò:¬!g…G>ï% âv¡ƒ2ì8º_¬Eò"÷mkz¿ôlF=®IFµ{Õ…±µ5^'’¾Œžè6<‰oÌœuÞøÆª¿ªˆI@ö÷qÏ~à'‹ýufK@CœU­Òsõ²$–Si&¼ÛCfk\G†bû͉·  m×¼ãï0æÃ!ƒÑw&†3ç"¹½­”CÉ܈×Ð9ìÂ$Ó@êðzëýÇU³Tw˜“_†|qQT„íK¾”¨nùÇ£ÛÎd6X³nE´Þ–ÂXP2úkÓÑ‘x_”áS«ò|<Ùåý(ª´éÛõk„ða¢DfÄ£—³W‹HIb›¬ÑÓÚ„g¦F?‘Ûû•ð'í_S+&7ý¬_õâê0‹RÃPðû|›Óa6$„(+£.‹âÇ‹!™ÖÅ¢ÝR"$›E×-šÀ˜Nvhðí©rž?3 IXòç®µÆØŽþqßÿAÇ`}|²ð¤ Bù¿ªÿ‚žÿoX~;0fäÝøAb]âm;´(HX™JÄo*ˆìux‹ù‰á¬¨±|䯍xhK–QV¯ûîgg¿g‡Ü#*Ñ ùsN…¡(à[cv.‚´ÿDwOTÁø@[)ËN2h#hš´*×µ°Qxb}ë®&p¾‚î±’ü7ÚýÝ7^²äˆøÈþˆìå N³0‹Ø[yÓnɇê4ploǯšÁÑôý(_6´IOÏ%¨ÌŸqpÁELÅ^H‘òc%–ùÔ»#R©Èª»Ø]fþ–#/¤€ÿc˜ÿï*Îÿ_³ü ¡ÿÛ6jz*hØ~ò¨šÐ“œásHý!ÈÑêQôáÃ$èñ °"Âåz‰˜izëTƒŒg›´¼ÝÅ[–Qs3MO8æ<Ÿ’Ù§6ádEAXÞ3ž³ï]»×ÞO½½Ÿ {,]T7žäÚÌdi:‰ø±Fà¿,°«E¸GŽXjöÝ’ÿ H#$)©ÒÀ,¢zJnS3RDBÊJG¬S]Ê3Ü£Þëb²ÑYµ1*¦1óOÖÊ2·Ït×ë€éæy¹²ôì¿8‡f³ObêóÝl#ùSBШ´$ŒËââ• uÜ®I­…6f¦ßòOj]b…›EšypúÈC@OÊMQ±®´ÔÛÅR~µâOö;T«· ÒJLL‘)×uüŒÄ”EAçý‡¦–î:2îÞ;OÀIDí2)¬(éF³¦ìè€;Uª ÛN*Ñcy í“á½f¦à‘Õ¶6±^`Ž¯Ë¬KåìC¿¼]”&_IžL°p®ãUG[Å,³S/5’n×:à[j€&$~lÑ äÁ³ì‡õ‰­­þ/‘9MEñÉø®B"CtPÛM]ö¿@êŽnXºÒS- VÙív§0òDƒo=kÛ§íªÔi_;›LDGª"Ž£j£Z-vK·MÑÏcôT™ãÊ9e:Ö|ì… ΋â)!gÇF3Áé$/KÖ0OêMJhO$Ú’£Q㙦@7 <ðØ+0—ò”tNáp¢ÉœœÍ'ö~‘±jUgtz'"Rã`uúƒ±’u®6œ5º·1}!­x˜=$Ã)èÐîÄ՚쟺ý¸¼2j­-g‘…" {¾–4ñc½Ljêf+¬YÑâ¿’³Å[2}\âä“aá4SLçÝêiF}PMè]§”ý޶–NÐ #œÜ¦YcØ:YRùÞ¥°h`íÊË´Jˆ±¯Héiæ¼ø(_¯ª¹e·‰5u»‰˜ÿÖþ Mš±³?® ‘MçõH;}~ƒÝ÷õË‚p=ár@JrGü!ZôЬ’ÑÏO!yJòÍæó!ØyòÛÉhçK¢ÝÄ9hmCÙý–“cÞ4‰$Op"‚òWûªc—í]Þ!,ùˆõ¾b”îósX¯o"´…µ~™‚Ⳉ^OŠÀ-ñQ<ýî£nb< ¶ž §¬ÀEásµ’£eÐÌpÁRÉ˙ܢBüãZ½«ûf(œL1ÒUCåîÎLÙÆpw*v…ö÷d]ƒ¬¨©qTrBÔvzÈùI±¢qvOcC`á7=å/3[t\ÓŠŒÓ¸ôWG׎E0ŒÛð)%Rgn¥㦨·ÚzCup1çXä”Yƒxsm„Ì2[Âio®”è^µV«¼T:üÝÑ?§¯ˆŠ+ g0Îuíqª-«j‹ ¶Îám³T¾‘»y î÷ÿQ‚ð§^Së‚ñDüïÞ:UOSQ{›¥W–övÎÿ^ºéŽ&Žý-t[t‘!¦¦wW–]L (³P©lB¯n‚°ŒÁ¼i 5m(_Ghò„¿¹³ ô9ZrÖŽw¦ä€úF~®_–ŒÛÁf嘙õ¾_wNMùûÿèýÀ`(ÒžlÕ¾å0š-G–?Œþí~­w{«=íÑ Á›rf®.¬-LÌQô{ψŸÖïDD1¶ãwÖog®Ú¼9ØÃD'ÃoÂÈä%ñ èÉ8$Þl‹Gä2Œ¸'(ÛKf÷|ƒ}òÌlHç¡vÌl#^Êð F¡¬Mq¹tXfž–ÚЬÁ£Q–ô¹ €Ž·pPÚJ |ým–›¾ŽTÖò–lQTÈkA?-s7×,+é°ONiñ)™¨9Ïäâ)M ƒO|L›-™R˃OÁ€ÂÆR—Ù¹Ä8ɺ¨0-ß,Ü‘p°Ú>aît*·åÜ3“KU=§Ùm¢†Ì±%ìÀnJŸ( «ÍÚ‹ôÌx¿ú/ã Ûü"<Ñáx9»Œ…Søiš4)ß^A;â³Rº9ûi:\máR‡»(ÒLKµ&ly>+ÜnÏê´dËgkí’ÒE´µ å½+Ó5z¢öU(I¨®åHÈF"$~‰È¢Ç*;K «®à’"Ô*ZÑ#+9y™ã²gaZ9ñ:AüÝô°bõõ²µ±&½päzibU³Lò#1 (¢lþúU~X%5GÖŸ°AGÂX èPÖüiVøÚf@ò¨m¾ðì€jgXMÖa”[RkÖê©Ý5é²S#̆9|,ù“r¢£åMºB¦2’Ìv…Œ¿ÿ׌œeøžÏ5þk~¹Q{ò‰¤«c¬m õ3 MÇmQä}[žð0 CÅ 2!õ‹æ0åK²¡dŒ·Ré|[.‡ªO謚îÖÀLMŽª8ÌIc ·tŒmØ «ú>ÊÄ96l„ 4=%6‰8> ” ;=)Åw~>ä™yHlh¸x΢^sGœz‚ïñ0 mÆ4åD‡P¸U22 ÂíŠßÃÛ¦˜‚kÌ9]k§Î¡]wǬ»ì†ð8cÙ²Ò®!ÛýÑO,0Ū#÷PÊŠ]¦FÙâ#aS(6ñŠHIÔ£ÕE÷”F‰ÿÕ/Ò SKà9 ´)K'6Ü" ö¤1íñŠj“àYuqþžn÷$Ò&¬»òÓÖ5–˜v‘\VæDÃî¦q¤óÅ"3Æé-kTKNRÅ®_*A„fÛžBÌ(bÚ|Ú0J{!Ië+H»¿I-¼K½‰% <'°a25Ò;ÿ“:946¬Zêñ „ü¿uH[[C;“Wy=ÿÅgò½=n²câaD†6TKÂRÍ .NONƒé ï™âï£3þ6çë 3Ã¥4Œ_sÖ5ù~ppj¢îu¿öŽŸË (ÒŒcõ®Ó_NN`H[’Ü |Žë·p6çTÖ•à!<àŽ äÝàáÝð½Üîìðæõ…/þ⟈?@ ßÞa ÿyeg¾ŽEÁF^ñHµ/œ’Ï5¸¼°¶r~m:F 0½w¸Tú{‹L‚ÂŽ­ÌFbÀ‹mb¼]lŸ‚¢v™'úc o‘¯¹D°°Ra¥CF ëæ¤eßWÜi±±JÔ¯‚FܽÒ•#³@uýÄã,ÏÈÞ¿·•WmëK…»ÀÁtÔnå]5]O´ÏpV`õnP¤ãNëkhhE—ìì^û(W¹BH25ˆ8Dò£¾ w¹kShœŽŠàTûW½“–ЀÊyùĉRú5È0Až%„ÒÆäÐ Ï*}T"%1>-ˆŒ:!¡i½™È®¹<4æÝÿ“¬$€W^Â8h¬ìRMJŸ±–JFq…ASƒ“/fMáOE•,mvœAôþѳÀ“W|`S°Øž¡’Ð|È"DÑ­ÅR]C°eÆK¼ÄêãýTG ©U®¾ÈÄÊK|Š×?™8#ÆPQCÞÖ€JŽÍö^;‚¾Mü³êVì÷êOÍTÙYá?Ä~05Un§ÇL:ÉL¢Ë¦ ©ÃËR6Rì@µxÅÐ%¹!ëæÉä$%9‚•.zŸå,m¶£èÜ¢¤L¹êÀ…`ŸêáËfkQÛ«¢1…"2ô‡acSYSD«¢‡èØÝmù^£Ø[¸¾U°™WÇ͹””GÂÊ;¤à½µ–©ŒžX¿6†GuÔtÂB´3š‚mr :7óË“cÜbøúAÄ1[Qw•­Ì²¾,úúÀ;¹u²C ‡~ìEÀ¯¯îj{Gp(Îä{³¥°1Ã×hƒH`u|mÔ\°_Áôžqü…[?õ§v/ ÕܘÑOîOZe™"÷¸Dü×[<ÜwLôîÍÂ"y[ôîþ3ËW€†©MhnG·¡ÉV0Ò¤BšÉGÂà´Í¡BÛ“}Eô"³e} Ai=*D-Äà½rÓ7¥tÜ ê(Á‘¿eòN?íV£‹x_®çžÇTÐ9ù&5ÚÿÀæ;ñÖþCrÄÿ¶%ZÁq®Ô2XU´$Oj˜ Nn«f×>§ê¶ÊÚæœ¾€e}«ÀKÚÁK[!®êÖZ1Ÿ‡[ZãgЧ»ò(u…0mHÞÿ áÐ+híÈW~›³,-‰ ÒJ 1±Ž¿þÆM7ÓŽ}¹b²Ø»‚Ãìr§#fÇFþ;xoÁ0ÁC߀&Úü‚YzY‡C"ñòoòîï•Ùߤ2î¤@s‡v§ú£ª ç†Ï…m¸ËS{z”T#«0í%UmÑæÞÄ&uµ˜Àéõ™B"íT)˜k͘Ìð·å¼ŽîNÌÄIÚWú˜/†Ü³´é ¶qßrÙ¹\ÚEª–4Šê´@¢ÑF.Ê`‘/2llè°³êßSɆ€“9 øšAÇTR¼ÜÔšt<+”rïgŸË+Õ¢-E¢Ë“J¾eñ…ÖÊÚúŸëíæåVS`m¥·†BaîÈÔl$>ÂɹլËwù 6,æ‘H:æð|JK˳‹ÍÓå6¯S‡w£>Ýo®jÐÛP‚cÏ*ó—¨ =Užëa[sˆ»3si(æoQ ƒÄù_£"±Â$?(B»ˆÚ—ù¾ÆÍïèéÀìàálwTÏããIŸ¯úv™b²¿ °ÔÙz"mxÅPB 3yÈæû&˜S†,'ƜȘñ* õzl,.ÆÀwˆ˜ºÚ¦½t⊖'óúœ*þ5yÕ¬Gã& daÚk/Œ¤ý¦¡*£‚Q(š*«¤b›Oò,ì§$Q®¨Òõ Õ“7‹¦PÁõeSÇ.wµ=ù»½à{¢}/¡²_ÉÊù•­s_ÍGr^«†Ô^㹘AÀë²Ûä¡0—§s©x¡ÚWaÉmíÔ½ÀÝ8 ™ÛMn ïn©^¯‘‡™“¯ß|vDTd‚þ „dˆ‰Æûz`2¸ý¡Ö]÷Û”ñöOhZ~Ó«!ÅâT¡(xGç6vHâ‚?V‰ÝrIfÐDä=#'@LEw¹4çD?ë®R›Á'xDü¸» ¯”ÍQMýf±1ŽÒ! ×óE¬KOIXlr«Þ•MwYHÏØ´)Ê0LÊ÷¡KÀ²å¯òK¢Ï¢ ‹·Ý‚ÕäQZo„ØÁfÊ'æk–çy”D¥7³0 hãÖ‹u®ªŽ´‘Pæ~hU.h,vTÅYPü4—0¬·,Õ¿ÆÂÂT¶$j :~¿/DÈÜÑ ¤_-¼vÒ4t9Ђ¹É®õ3,{¼ÿ"}g ÄÎ~èƬF 8©µvYþÖÎ4ìZ¯ ÎÖ ŠXNRHìÅ~ðŽ•xê´Ñ½±çMNÈ‹©Q´”bÅL>Æsà§Áƒ¹a¤ÖÉ„<Š#Ñæ(&FZêä㙂UÂð0ZïÌU“E“4n¼õLâ…š²þë)ää®Ì°Zj©KFzVÄÕˆ{Ä¢í( ̤U¤Á´¥ÂR½$.ZÆÉÙY4òvµÐëz6¼qçIe|œ)…™ Í^\1ÅF)³-#þà.ôq}nø“C5É]%z F©·ýÊ®:×xÍ‘ëª •J“5ý¸+á+Á ÖÁ¯ 6‘xÃŽ¬v(ó ÄÛ%÷&h½ì œ)®XŸŽÎ|yo*errÕ¥û?!µÊc>–Fœvº‚Õ 5Äzç~ÛbX{¶eaqFÛŽÀŸHr[²¬6ÛÀqÔW·¥ºæÇÙNZ¡ØänZs®nŠUî—d•ä/® ‘î?ò¥ªbüYh7W{dN®Ò´+<ñìH,Û•Ï>Œ$«Ñ5¯®‹Í¯8Çž`m›ø ¯ÌI»R,Ï"“Œ€rð™>ºoÄiˆÑ‰S¹NoaÒ ;¤úµ ‹éqQÎd˜ ’£ØÕÅŽó͏D†# ìL“[äÿV_f–›ÓÁN­B3¹Lšþ‡;–]ºŠ jzG”ÕîªÞdÞ};™øyN®«qMØ‹{+.䯰jcXKሲ¨ø_ÄwXn÷Ïÿh’ÜoäÐjü#n`ýwM’ÿ Eÿ¯ó¿é, þE®wÕ“$«Êi‘$=MB"l…*’” ÎF'®³™–!éqÇ‚v2=´·PakkÛ¼Ñ]Ë0l1 «†B»A»rõn†e{iT©·´R½Û}=hb´@èœvÅýœuM÷û iïîθØ~~ÏQšO?’ò†ž›§¯•ü˜×饿è-G×÷¢`ü Òñ )÷‡&¢ õ°Â-kû[;¾Jã—!Ç4Œ8­[;É<£éb‰\éR:Þ»èdímGÒùL°Ó˜Ží ‰.Þ… €²HPÁƒ¤,oÃ|Ý¢™Œ¿ý‚ >-н¦´Ö"¹¨ŽsA)' ça9Å`¾¬cB_4óGé¢,Œ¬–ápõ”^µQ©o7+öMÌÂÒ˜M\\ ÓsM“æ-S+Øu>½È}Ð âì©q o=W …§jw“Ä0Ömx²ÆQ›³ñ¬‹x5kb—žp™™2µÊÁ‘G…保pq}ô¦,¸i)Ù l3uÖwjJÉû0†ÄS“¡£7‚î¼Rê”uVù{õÉX%ŒYÆu½ãðd=cîrfOºZŠüO@-€j:¢‰ ٔвŸÍOu¬¼y(Ì3ùLÞ’a}è¹À!f!ÿÒ~Áj6ØÒ}ÖÑK”¬æ‰z·(Ô¨<. ÛæÐ\¸ã£ÃƒõK¯ª'×F‰ÂE´ð5éJ÷M—‘Ɇ€~ds˜I,[w°GáhY‹&­Ûÿðäm‘EÓ:ÂÐ/”îtÌ·àˆmÒe¬áÃ|«’bª4˜îdÐyÝ.s9KP3M±É75Þ«T¯sà—æŸÀÃdųy£úžP‰ÿÞ\¤ ŒHq§| @û˜p:žC33¼¶ãh¥Æè#-3>U+·Mb’Þ¸6-lÊ_Í…ê+å—ÿÌ_<›,»ùîaÏA´“›$O ÔKƒ`+öÖÌs\x6%ð'#137'Ɏά¤Ï8Q¹ðÌ?Z¬;ýÃ…'ãÊfÐÞWÎmͳÐÒÍ`x›iÂ1èšeGPy«hÂj¦ ¿›Â6­HJû Õ75¬Ü·1õ…Þkåñ Û½ðÀ…žÂ¯­F¾ÑªùÊ;ŒóH…Y¹èŽqvžh]oY·]‹¿rAê=ƹ¡tº1'ðï'àùŠB3}B½zsŠ]pöǨïvàÉS“!oaGO42¤XÆðe.®w7 ”3Å„uë©•<¥©Iëpv2JK +jc·ãUÞ"+–ù— t°HH,z“YÏÓE+ZÚø•P À0ý¡Í*}iq)g³ñá²/2Zë2®¨}¶M`nÛj5þ{žÊbuèb¾ÁÝèö7Vþoõw‚ '\u%òÐTÊ žïÁ\ˆ@ò¹½´áÄ g—ºhAŠzmβöØ]Mš—þvd:Ä>¬D¡ÍZìú,’~Ø£Qz*”Q÷ŽI‘Š>Fß ýµþJÆçê­ÉZ[³Ñ×KÍC½Ï`eÌ5² kBÑ?†/œ„bó 7A7ü¡Îe³É tð«ˆÄsÄçÏ;†èö5‚á‰O7†àžMª4“ƒÍ®ƒsì6›¥nƒT÷ûJÉד™ué°?ž[ Un@ä¼Õ¸’˜ƒÛ¹ÂY Í˜n=Ó# ó$S2 +8±àæb!(V šµ£\ÙÃÚ@°hàyëwØe›jÃKÝNjZÂ2%ˆBµYX¼Çi?î}©mæªZ¼Ð)w[FÂÑ>á*þà â©3h¤ý¡Ž7â©)ŸrÍ+Áèu ù+ÒAiPYªÏ¨CfØØ¸€Mâ¤aIÚðÄü{ù•™fU[#_*æÍöíýúü-¾üq¡JÌ)ÌœæÐª1În Y—ÔᯂyƤwŒ»^y˜Z’ØÕ¹Ùº6h]ZŸ6%‹5ê5rzº ´4¾0XKÂç!ÛïDˆ‹+ºªN~Íã ½ó4\ý¢ƒ£»-EÂÓ %QE…év]ñj “va¬ÊdHVÝš¿¶)K{ÙÈ]‡zmbâçݯüLK[!e™ÆLËS€iËæ,ÆÇûû™Í»N@›Âê²¾—åÛ`p¿ëäÄ×üšÊ–PR_2ă…q´ÄÜ9ÉcuëÞUõ ?‰PÕ/aŸ3êEžxµÙ[‘âü)Osi7% s^«âPΔ¥ö ïçÈÙáîÉ(UhŒqd£ài}¶J ì{Ó¡,åcÂ>Ùv=¢tÝeš—ÍsBŸÃršo}ý_1ÐÎ  ôâ8[°» òÛ‘ë=zeOÛ¡!=›Ž%׈tOÛ=sGxX/WÂKîŒ-/W*¡­$}ÑHiÌ&™L„Ÿkùwã3Nz¥êi¬&>V®5GŸ8bõ ¯·úH#ïT‡VZ Rr{5ã´Ú«N~`ç<¶0æÔ¼RÈ"ƒe(cíV‘Þ<³âýUQDzýJêwamßL5§ÎÏ’R¯TvŠ”ë·G¾¯ØÔœ1ù[|‰„›D«Ë\3Z©ŠZÈ?n®ÓüªKbÅk. PöÝö‚¹ÄCK„¼³O—*:¢yyÏ=Ýæ÷ðf9Ãí½YùãO ¶¼‘ÍèMl%Ö¾éÅz¡IÍ~S‹nyúø2Í´=näÚM•sz1n—™6ü¹mþ¿¡-ËF¥_È|ÿ¨HgÝš†NfMûùÀ枌ÄÍî5Z}emÈd×j܃ÔžèðáÛ?žèítáµRÿcʰÌë!,ÕÄ¿J©Ûÿѽí³PMA¡ÿ?Á¦ÿb 'cþ¯¾²Ž=ª0úWèæ@$½ðùçï í²¹{ÛLªþàð‡ÀÔ¢„IèM:V`7ÛK®Ï–´MAÅ“$Îl_*ª‡aR6·ó‰Ï.÷)ÐùözT¤ÓÃŽ$¬!p”ÕË?qXÚ&sÌh²õÇ&$ |†¯$Ï>¨hƒò%S‘U%ö 0½Úb ã åºãˆš#ezñ™À76»ÜaÞ`Œ³ÝoúX˜hLÅ6çŽU AÀQ<µ:4'Q$tűÐͲ÷8pmk»Ö‡YÕªËÙ_ò,Îv,íÄÈR" I(‰²"TwÐТ¿ƒ%•¬  $(XBÓY_¸]ŠZÓÒjV¶¬àºË­Îâ•Cì:ëtÜ[·Ýv«}mª}-*WÜ:7¯VüN·x9Ý)’âßdœfÚOo?w¿ï_ϯ{nÀ† 8è_x—}Ø´»4§æwñ^Â@>^$oÙ—}¶ûËùw¡óvÙnfAÓ=˜?¢6^jA?ð¾¶ûüÁ™¾-÷t {úà»LöxAU:ÏמÁΞÕî~€0B݈víIÂBúí•‚.í“tU¼­ªÞ³Š?œž?\TxвÛWœ`Uxʰ÷ªNתÞï‚~à~J|WJô*îâ¾ô¢Ò)½·®MÛËÜ|¿èÁì`*Æ0‰ 臋,¿,­\—ŸUCoðD*v˜ÄPúÅê‰Á*a U’+R¨“Å’•(˜Ù‰J"œDe‘ Ó ÃaEUq h캊VÌ[Ê8†èD§0¡ƒUÊÅL4xLÉ!JÜ·1íäJIæWözäöÕÀ†»ºëh²ëÀÕ£·çÍÄ뻫»‡"/õŽ3þ¬»—Ó´›C¹¾··Oú먫¦sp°þIâbÉu8)~¨“¸Zd§ü•ƒT¾ e¼ŠzF2V§#whßñ¯sUh›´tÀUoŠd0+ÈÊýƒÁ¸:¶d¤·k-s< õJyM¤?eJê—žØl_ ±®y–œn\A×1#Ä•­ÁO8eÁz;jI{6•Q%ÔÝ;üÓRÖpw0Že=5ºâ’‹fíÍÒ6°ò1›zI¾ùšS±Áñ"–µ´’nެ¦óFEªËÈq¦ìQÐdü”õ¿?qÇê>rÜ!y¤s•ŠdÞêU¹Peôí PË,°;ko%2Íz]ÃsõÆ+°Ï•ÇÆ°èð1˺ƒ½Q kSœ.säø û…`¯wLŠŸ†#&I /#œd*»G²²Nב#%ª»÷-¼ —3þò­™#·Ö¡ÈÑy…:ËtaœÎ¶ýÁ‰lqsóÄ‚EÔÄÉy¨xº› úƒÚ䎎XDý÷.t›ºö%Qó3àJJLY]Eœ-¨dDסïŠ\ºY²M^T^]±…ñ¯Æ—¿«¼tì1mºàa•G˜$†#ì<¡FÇ9iØ:[(x´TC£?‘«”ÿâ-€õ*¥ŠÑ*Í˵ó2µ{¹„ÍKs½½“ÄAA•ŠºhƒÔßl%0ÖC•;жáÄ1u㎶$Ü0£ŽûÞ½"_è™kËÄE£öYŽÅ#Çe¬y¿çskñªÝ¸Ý°”Âr;Q²ý¬ÕÆŒæn^½¯œ²Îœ9¹ÕWÌ”'U^Û¥I’ÇÚ-8I+_ét}.;V‚s””ùÀ£5œë»,»ÀWVÓ ëý¥”? -@~ #ÙÁ¦Y3“Ò —1Ãȧޡ7G'iJQ•슪•2Ûh y öy“U£ŸÇ¼ÀvJ²ÆFZtÊñN%TBŽ!F‘("™U%‹3•³W‡v³?ØäU#§ŽsÐ…è1Kæ,Ûß/^¡eŽ ý ûFÑñ°Ü®µÍõg¬sgÿø ŠYÕÁ!¢¯stq¼²ô/²ëôJeTÞ˜¡k>­ÆŸ˜R4ß•·ðŽó#¦E–z¸wµÅÒLAVG4;3`2YIÙ0)ÅNH6E‹žu®™ü~#…‘øŠ,~iI𳳂®]¸—Š.ñÉ=w ÅSÉ»´ß¶[ÄXZ‡‹§Œ—©ví]ñJú®c5ñ†\}*Uh]WNe5°@¥Je –õ¶¬á-+b¡5¢Ôð~<]QR‹Ña=ØRݶcO–T„"êóBnž3Ó(éŒC,.B%r²R¶^Kn¶»(Ì|j&9–p½Qg¡^µh÷Nó ²^œú›aï:¯ÎŸ‚3ž5Ëgép¿ˆA²éÊêûa6"IVÚEÒë¹Ì޵8kã Ü÷”Í#é9ýœy…X£×džDm“s'™qq)ÀÝ/¸¿e׉S‹ò>à¸[šæNouS­ý8c·ƒ¥W´TªYUžÙ¹˜ŸN~qêí-ŸA_ç°Ec˜ÕÐMÅsë›Ù€¸°yŽçtMÕ=w¾Ý<Áü&æý2¢ZàÒž›‚ðS~ë5šþîvT™š´HHT´gÑ3E0¤Ô̓†…É`˜Ë§7x¥*ŒÜT­ÇKÉ¿W“VC¨ŒÔ×öZÃ.YJÒ)¯hWÓ²”'¤ŠäÂ8+[Q-966×’hhø»2ñ4ì’6ýp¦ » ðë—¨T{N/q“þcããˈ'…}«mÑÿàì¢sëlÑ$+¶mÛ¶mÛ¶mÛöÛ¶mÛ\+ÆŠ“û×9U÷Þ½N;UOãa>wÎÑú8Î#ŠÉÕKÙÌßJ’'Å<%úRHäÏnæÄâ7|.¢ŠÏ8Eçö⥯Ç]=Nªñ2YÃ+>‘íBUKx>“Rž¥ »mk£ByšÌ{‡¸¹ã½¢¨…vìs<ä˜ÁŽ7ßÙï ½½\¼é0¥ÐÉàÍ]Ͱû£5Ô[rÇ •P½fŸñ‚—ð7ÒQ½„Ïÿˆ ~ Âþ$4D<¦ý5ºµ ħ*NÙ˜WOº01˜è+¡òÄ“›-W, „a»Cm= @óÿ±| (úsuMoõ«J\‡m\)^Îöòƒk\x:éú+—h»#ÍÁÚ_¨°û”XÌ] ð*Þ…L$ìÓ‰¬6H(|PÄ¡hä}ê³_´ôG£âùÛå«–}³>$è=¥¢ E¹2ÔZžHN(´*Á6|$ä3}ç'Ó¼âXznhÇ »ô÷Œþ ;IVë²ú¯ÞÀŠ5Ö_D’,ŒOŽBñçŽô¾Ö̆Ö5O´o0õ³ŒzÒUÍñŒQ؈P+œžH‚á¤y‚áÜt?ø *“¬ùòô#žÌf•¾ŸCaçjûï[c47Ô .éî$–»~8RšôsS¢*R¥’ Î&ÈG3¦ti;gèµ fÛD•F%ùax®_íТ¦dÈMØ'´;dç5ƒ¿’ÓZsËÑüY¢™2xqGˆªüá@8cŽ,I¤¹¸‡ÿq— “\«°Ï˜Ö)p‡UEââl=ŽzyiT[2/ŠYñ€D„êÝ‚ãÝà£ÓøíZ@ÊÔ>$àJ0¬Õ§¬½€YªKµïø¶òÂf{uw™"±Í›+HŽv¼Hž¤¿ã õ7[¶8xƒ´šqÃÀ{!C½Ã°Á­–߆S«“õy*¿#áeÌ2t(N|_O@2› N›°Òœ‰ªÌh¬O‰W¦G5‰ëGœ½ÐÔ§Í.’¦ÅêDûm‡uårjruƒyÚ;4ë‡&M(ë‡JÀ ÓquvUnßy]5£p[Òþ´çó\É+¾cú]‹Âõhà¬p(¥—g¡8ü5y¢Î“jnƒP¨ÌÁ`Å›féЛ"o*ßú²:—ÛTð ïU.\•ŸÜÙ+3»5Þ/æCY£~€tÓÍ×CÛ.£œ/|}õ&WÙ¶oj•=h\È—sªŽi?¹iŒÀ.éÊôdµGaUSavüðÝiH÷î/Ó¡Ý[óKúñ*»çñèÁû»%üéY×gFŸxãX„n\ñiÛ“ÀYËÇ‹Ú2/ÈpÞXª‡ÈˆEæ %~$¼—?3êFQpëÌŸ¸èðç‚}‰·"Y=4 Ôv Þ‰.¾Žò»Òb (ï¿B¿:\n^É:ôsþø@}! ïsÐ?4â;=mÿ¬¦Õd…6Ϲ¬€¹µ~\ŒÝE!Õ錑SºÅö‡’‘0à1Ônª|ƒM‡f;˜_Á…ÐÈdºIgéÐŽjO 99oÞµ¬2‘æI‘Ä­HÇY›±¯K·XPŒÉ,Ѝ†ÉÔ­‚ލЛ™‚\³œ q`Š<º"ú~§”àùò×ýk´»?ì¨Ü›ØTéµZíµê“r{Q±püTƒ’I-ýy6)µ”`RûÉ*üE¾=@þFjŸÂIX0$ôÆÊOá˜à þ2iáÔ{f晜qxî(ë0‰T»Î'[IÄýjòJÚÚVÉ.ô’A›ªíFˆ©9móÞ ? £õî ²/1yX` Mà/†©Ø%ôÆTøMXex„oJL{ðJÅf:Uih”cƒ`Fi—PuË×eñHÜów­m°Ý ‹»;í·yº…aÿÄÕ/M0Æå|'Wm:-ÍQ˜ê±Y¶Ú¾PD+ëÃ]FWƒïVÜ-»ŸÇ²OÎ\‘ßùJѲ柕töÙÀ¡DñÊÏèq¬rÏ›¼ynÉ^yxeªÙƒÑº®Â¿qweÖ<Š}âÝþy?Ã)ÐÔ:Ô^iüòа`y”<9F5ºÕ7ÖWŸ 6,òǺ\á‹H-#Ì,è§×,Âç»lÖ+T»ÓöÉaŒÂ?á¢o•‹÷%R>oï3øhkµ´ƒR^qµÞyÇ¥-æ¿P¿öÌodæøÐ­‘W ¬aW_U7Q¸þªp¹´(a,®H`h@(mù¡ïòèÈŸçWo±ÏRHãk7@æà–a4‡2™Q@N0OöDk=° Ï/ï¿q£Os`öô:½¦ÿAñbóº.'ÒÈEÌÆ’3îâNC—m @7Èݪû~<Çtÿ¥PÕ ü\EEþÈqrBõÓΫ(CˆáJZ±È¥–, fÀp]Xç¢ÏªÜo)/H©'*%úDõjqOoœ`RL5a-tÑrë?ƪ+’¸Ý2 ÷ 7˜¶à>Ö7ÐSþÞ/Z…OmÚtgB0ª=ý úçá»úâå_³¶¤›Í 2$ çÿuÖ±´²5u6³ÿÚÿŠÚ:*:ëhßñ®%q¡Æ¶±B‚Œ†ÉŒŠX5­Ú±×ˆ9ä•aœNa¢®ÎÙ]yo9‡ËÙI¾¼û íùÅu¹}î匹'@ýµIyÞw ?듎DIíKP­Ÿ–Eí­ŽÞß»r…€ ‰ûFàLþ–ãð!OÇá'—$U͇ašÔ%ÿ«Á&È>jq"š~.¬‡UÍA 3Mµª‚>òáuSO=Ð=EÏåïºaž¦Ç:Øö*'¯¤.2ýôÛ¨ì—Ó§?M/pX}•wtp}¢ÞV\yÌÊ\p×(G4÷«{ožC¹!z5ŒgßÁo²˜]б¹»i|ÕBðåæ±°­ÉgR™² ²Ù˜F,Rv*ó$)Ž&«ïc©l|Tæé²µà‚.вr§1+¡Xdlƒ4©ÍL‹&=Ùmî\&ËæGšÅ%*‘=ÆÏÏX]ÝÆ©Eo˜T\ƪÀéÊ„°¤L&TÌFêÕX9òe­-)}sæ³&÷,¹³X‘¹XòšB?¡,j}=¹áÔÛÜëi#Îâäù2”ä˜û•`!ÿ-6¥–ÑVŽ Ž]ݵ!ÇéâçªØûCèþg¹,˜JOú¢ØåS>e"ø{b¿³<î¶áC•‹ÒdqÞáÌË6b"¢$ÑýìÏc1µ,v¯®®Ç7,jÅÊv©1ۙƥ±MÑÉÍDO—òaéZ°n“@€íù²4œ'˘²÷hâU£_åÂU³édÃM/§O‡¦$&ZÙ ¸ö`zšwKÎ,EV+Üé/bÒƒ¿ÝJ¬"8áЂCÓXÌ´ª´¥ç³ËL #GTÝ,à´ãÕÔ¨¥WÇ4™–ßj^-•Ûš24…›($åqØô™k‚%\ß(Ša{Žßƒ’5á}ùÅr)óš¸Mâùà‡4ü½w5ù¥kA·šØYZ^#¦ç±9àÊ iWQˆ&ðˆIñSÏ`ò`¥Ç¥/;+ÊM6J£Î_â ʼMÚÂU}Úƒ¢‡ÛÝÉ=î‡ðp³Ü9x¤ÁDp݉ íý¿øCxü"ºYÅ(ACÈŽRg'†âÓ9‡øŒ7(xPö1Ç{§LPƒ­|„Ù|tVðC~£«" ·‚PbjEô[öÀ©: i؃¦Æÿš Q/]T!*ñ㪬¢®SA( ìwCŠš…ž5Âm,˜ÛuÑ"[ A: AÖ¿÷…áãmˆ¡²‰6Bt«Ñ%]Ñ9‰Å˜tŽ6QÔ½âÆ?Ê^}e]T“$ f~[¬5ü öa}@dþ)ŒIÙÅþä ñÑ¡Z)¬¸kô¶ß¯›·„^8Tü ]ŠÔ£Žüª‚²«ÂÒ«ë­B_ÊU½ÆTÆCÆv Q.ƒ…¸‚”? €_Ô©`’îè¹.#†[YQ(ǯXÝÄiÕaµKæ7J}Çí{¾á %'LJ½8õŽ›cÝ8izcó–Ò†´³Õ6‡÷¾;}íü½Ü®tO±†d£–­—X¨ó^¨/Tx6RÄü=ž‰ÝP,̃MWut_!Âö[Tt…øš8ÝŠÃú‚˜¨6#1^»„£T^¥J[¯¦ÊÔoÏÉJÓØ›³b?ì{€o µ'æ Pƶ’tmš0Ùu½tc÷™rÙZ¹“w—´#å¹BõºJXµÊh½ l*Ä+ÏžˆÝfI.)}.9g±8Ÿ·Ê·â±WT!uÛàPZ°$¼õùÌÂÚÿ£ïU[qNûœX[5ð³“3&–·¯´XRzQTk™*[óÛˆ ºîxÀ]…g%s ÝUÿ(vw´/üÏNˆ"4z®¿*‡¬ÄÈsRÑ·v'­¿[ÖáïïU©· ÛÕí6ß§'®n߆ÑÍ5u;;£FUí=áØ1ž;÷çc(« ¢S«½ç˜þ¾ßd¬‹Eú‡z B‹g…–Ã0Â9ø¬˜·< >]jˆîU®êWøÙpþ 7~úÀîŽ:¿½~T’½õ%Š3ðR°+#4t潺{?¤Âž4{ RWÕ /±æ·.¾1ß¹kis¨ØŒˆÃÛRÕöþ`ùÅ+¤é7=lv¢ ´=˜@.D{ÑjöǸö¬ cèÈE3‘üÜHÒ½þ@ü«ÏA®`à „ý?-éþŸ|Æ¿/ªüã7ÔP¿å‘›¤8u¡QŠôv"E:ô)9˜`q• åÂÂ5üä_¸ä¹Œ“P!üïÅÇv=²ãXf¹—2jÜ$Š1ÑÅsœÅ {¾ ‹?‡ù#†‰újzÿ¶÷µöµ¢< ¼ôƒ,„{ L1 ‹xæ"(Ü]Iå›zN%@Ö½Ž2¶Ç2êšyn%ð²ðKð‡wø¥"¬whÙŽ‚2ÍE@ñëž“7ÃÎ3ñ2 ¢¬+ƒÃA= ä¢'©ñ £o…»éÉÁ¤©JËIY&ÌÐÈL9[ŠGUU*²66d.¨íBÆ…A´­IKóƒ^¦'_2¹i£žPᯮ]g/R8¡Í9‰àH«B‡"˪‡/ìؼä²âSJ9“#©ïÈ*ï{Íž0]°Í‡BáX+3!KAñI6úå _ñ*#åƒå¨(ÿfNÁ³Ì%ÎïÚXÀFˆ(™Pº¼â­„|bAÕxÚTÌ´aNf7G±âKÇ֝РO_˜\ÏQÅ@–©:ÅÝ•¦%ņ1z¥.­–t•-©:(PÚ² *ÁœÐoEÐfË+sQ~Ú·ÙH“ý¹ ¹ŸxêÁféH×éœó™“4¬vÄ2߯`¯¦ç–’Š»rc¤³‰‰È]2_Dßõ ½!+IQr“<ÎSÏ&ò†Ot‚¾fþ­Hs Ze¶r· Ó!ú`€–Â.ã’U‡E-¿Q´G¶öxÀ–-+v qr ’·5„b‹¿»ï஑€U´CÀÂ`$96š™ºÅ5Ð;¡ÁîZ >ÆÕÆd…Ò“BŽfFKRlë'Ežð$ôV§º&sÓÈU"©¼l^ –‘æ­Ÿ¹3‡áñw½˜³ž¦Î­Ù,:ôã©3Úö߿ŴxkÚô2Gk實.J"€Øwxž/q¤ÆpÔgþÑ•O$ú†(Ó¤0”*aD±©þ÷¢×xߎÇ€ÍÉl!刷g~š9Š.”úÈÕkλÃA&•/›Ôí®ÚiÁÀÆüS?ä3:åŠc¥a¿êñ>ä.Qƒ««4‘@ãÚùZrãÊûje«„)EÏÜ9€;Ùäï³¾ÎÎQJ(%þŠ©ÉýH|ü¨(ʃuf¥Ñ7€õÛÍRËÎFËÎZË5k«t>zÕÆý-XNµÛ-ug–ð£ê×”…ÈÛ$>šb/„p?¥*ýíeœ®Á.†¹†Ã©ˇ>ýô³Z·'ÜÂQIEUŒ?†,ú³}êúß8´eüjUB‰ý_³²ø?ß]]„ìMÿ‹žÿ•šKÕvUpÔPvMé'‘‘e“Ú¬û)à iÿŠl+f£ãàJ éøi±ëlÌ5ålî2ò¾R¼9\ Ä ¸‰k7²Ô:̽¼šºYÕjóY4‡†¥fñ_õžçúÌÝúîu |¶;ñ…ñq.ñÊ?8Ggx(OééË—;[,cŽb6ßÞ3ç6Ÿ3f‰#Ì•OM¬€EÅ «P8‡ÝÊè&SJùnNqç0'Óqj"õamÅÆ—‚ã¹½'ØF³í sW…Ìè“kO8áV`]—µª|ëÎ"~}ª;%ãXãºmyS-D¸Nyü*ô¶`[ã¶ëðã`ïîÂBT=³íVskš˜ô€UMWÉ%½¿²ÃZŒ¾9oš¡Óî„ ъÆKµ¨\ÊûÎ2q[–dë­ŸE& AbU) ñÇ=Hš~?1Z«Uh$¤/“ÀðZô8ƒ±­èâ¼iN$g7Ö':4{Ô€S“_»L;d~î÷efo§ça ‹Ó+¹r6Sg§íf|3˜Øð†ŠÃ‡ø¢F–xQÂÎx“$!Ã-î"À'õŠ'$®û‰IýÇ“>¿Í/†™‹0õSËhÁDs ¿ª‡<ý‡Ê[ÈnŠ®ÑáÑ›~€— €«¹Q&×;û¯9Á|˜´®€/¹Á‘-u(¾âo¡ûD·$·3Íè³/P9âDà`öòÛžz cMÝ"H¾ar½~=(ÀN–sÒý•9ÈN8Šñw?1ðs h ùÚeÔÄÝ~c¹!ú.][ž7æ±/G^焟£j(Ê )-ËIf#ïVaZ‹OÙ¹A}F^åÙê¦ÛL³ „ãÈqásˆõ&ì´ú\øo Lf;4iüù»)åÏfìÃ_VëˆQ¿cÅ–ÞÏŠÕ>:—rO¿PŸùr|‘RöGL`£xãåßøÀå³'8Û“þß[µ6ÿ{‚&ðjÒœ 2R.ØjÓP±'„’I °¡­wCÈ ¾Õðé70¿"¸³áY^Äb0¸’   ½öa—™ˆcÚ'·˜?å›ÿÈ=÷›çêøvyáüzU‡©ë\€•+3ÞŠC¬ë‡Sš‹2ÑÈÂBq˜u02ÓåÃ0K;É Ñ ËB1am;ÉeŽ™¥™ÀǽUáÈh¶9’õœ‰ÃécŒâ íæEÂT·“öЙ´øi´”›±ð)éb°ßʼ EÀÖ)ºúa/’8…÷’¸lµ¡vþ1Ë„lˆ¬+íú·¦ŽîXH${³ Wt}nÁ€o=‹»XL$¾ÌÌ‚µÙ˜-×Lï)‰"":^@V¸åvÞ轉ø8$>Î*:f*@R”ãcH›¶lyá»üãzÕØÛ:H3#t¨ËœÕ‹NœãÙ ¤ª%$ª vÔM%FB®©vª¤µ§A~6g¼fc˜%è¾ÃJÔœ»*ÊÅK—B«ÝGgùL ®{,.+]!3T{‰A«Î|Û­”Í -.]?,°M|Zb¦“šÍî”Ö]ªeð—?e~-x©2’3Jvâ^pˆÖújCÖo1’œÒXžx~Ô¡ŒS½(íBŠÌã%Oœ„+ƒêt2{q¦º-[F–NÒ!|Pvà„íê«¿!TV^¥ >¹Abé—½·<vëÃNT¨ÍhL‘j^’¾ß¢c&l¬e¨­¼-óŠZ!òv2UO߇e³9PÙµ±Á^r¯— YÓÚ…¦µgöx×ÁÛÖ\Ίq3qÑ|G-Öɽåìå¯pNuóÜ€ˆHšçbU!Î8ÙŽò9™oÍŠoÕ‹o¡ì†ëAa(%K›çÐ_‡\w.¿¡¯ ؈6H.ÛµüÜü.¸Êà(GOZkQÊ®/"?¡d­¶tX8…繓l·õ'«FOhµALå;6U°ýÈ#TýÔ»Ú`Î9Ťó+Å»¼…g¥\áEOë?̲>S)Ë)gÍ㬭§H$æV_!w®ùD b ¨Ý¹-¦”³ŒìÊ:õ¼>L’ÍÚ´ £µÕ™õZ‘ª•.g»ñ²¡&=âjx r]ÅX‚›hÊÆÇY—£k ×6÷òÙmjå™ ÐבʧD*ïϦ´)”éžÖÆ/rb¤9Vý+ŸTl€àß›ÐfÊ¿ÁÇVœ ã¦ì(A<ù¢½~éú"üU2P[ÂÆªÉ4{*¶³2Ù+*oxxWWl 7Gú‡û`Û•„Ð(†IùHÃy¾ÉÛu=i›xׄˆä½X¨=a¬;1ž{Ð|:ètåLZ±&XÏáSÆIV”/²®¸¬Šz(l+Cx!át_²‰Ëæ+͸Gö-‚h¤Hpz–›¸„üvßw@$'Á¹¨¤~Ë™W»fF_b©ˆ<ü¿ð¥Ê×oÿzFâm'ú \Q,vçyO¼®¨©òŠj5\3yâè•þx\Ý}ø‡…üæ_í¦ÆÞ3<&!@y$¡<WçYœQ è^T8¢¼¸µÚ³`úK¶YBŒ#Êð^£ê”m|U˜´{Qžhda+t³ýSqy½!<Ö¦Âóy»Ñá^§1 2»°Þ®µè7`Ê¥H¹-X/Å#ÿ³5 ¦µ„âkªOˆò“V•?VŸ?ØŸ?û¨Ú˜œI”¥ÊjNkêWDÚòÌFñ«D¯”4/»80+Z¬Õb”ÉøYÚgÈí‚®àó¨ÝŠÕ™Kµ¹w×:a¨{Übt¨¡—¤,~ôæPs×?ĦCv%¦B³±VÊ¢ M—B垦ð¾î…v)¨óÔ¡k+Á-kŠë‰š>,évÁauî†XwSt¬jBAïœ$}‘ñÇ¥ùƒ¼›ÖOêp°}È.W…}@|€Ï=¼p–ô´?ìV”¹!ò)…è‘Çݯ ¿"EØ6¥ªÍsV鵯ŧEÞ9›Cø,õNL¶t –£¹w‘*WãcæBí‡2D&{¸…‚¦›ßR¯ËÓ^†EI¸0ûQª‘³%†_Ý!JGÔúp¾Ñ>©¥?›  ²Ï 1K¨&çÚÎÍ *ÒnS”/„2ë„P6ƒ©ÃÑZ«ôGÀü"\<0aÃÖßäUo^5§ Y¢$8tŸx-‹s €‚~‹f‡IW5l²]ž¨mÜÿ©¨æ ˆ‰³r”YÓë’߆G‡ÎE;­Š•i¹›žû*dÞa¹¶mÈM*7…Ÿ%qÑbùi‡qc}×¼'ÖþPûgÑúgo§«î¬ùvXçÕ–6ëº g?Ï«ÔKîè“s s sÕ'æ’ü }c¹?Î7F-o¥z\JoœIv ÙØú¶ø§‡Î©ôˆî'ßÜÂÎ’“ûý૱ D«©Ãq«êw~t~÷¸ÿÌ»=Ʋ ’‹ ÷•õ„K³5¾…'Ðý~­™%M•pÏZá!cõ‡÷c…¨0C8òÒy¦/GÀ•—ûžS„g£/~>ä-æâ=^ýX\Çö6‹Ü$›iSÔ¬GiÆYAÝ(ÌØÓô‡ÙñJx)ŽÔMš­Ÿ4Áp]™Ñ4ï ï©ww ø{7 PwA6+¢æÍ¹ AFL]j.ú 9^‚]ä!Y=ñ¤±‡’üý!Ó¥S’–WJýÑ._d‡ •ùõDŸ?„üò¯jAͱÍ ä$ü?W‹ÿuþgI¡.〣†ú]7~¿“%”ÈM×Bfg…ü)½ ä—ÄºÍ ç¤<`EÝ%˜ÝÂ2Š…ãƒÛªã(‡N¨D¢©*VAg rŸ(xD4…ÞÊù2gjÍ“~H»;Þyî{γÏçq’ðíu‹(¥»Æj‡p‹i®ÊÛ c”»ê¯…ÇÄ[|ÔÓpj¢ži1j­ž«·@e*;m¤?-n6[SÕ1Qx:Stº†1CÂtΩN§ÃþÇ­zŽ1«ß¼.g…!E‚O¥¦F&þ´#KÆesö™«Ù>R%ô#Ú-ÄHRÜ|ªLe u'û:õ‚’ÙŽ§g81æÓ“Fß8‹(·V·³Èk»džFÝnR—J‡8 Ô2=c6›îoÓUÝ–êj>ÐsÏñš=*­Æ, Ù*:t‹¾]¦™4®Ã¡Ói¶šk9²¦f©öO$|¤~‚Ɇ‹e‡;—ˆ”8Çâ&÷pÒ54>ÙtÆ:b E—hù£YóNa‰I߸{¢ïjM½·5Íýn£Þ 'ß@×Âp«üsfvóÚµtH îm™œÈz‚›:n®X÷I¦}±8«ÁÖï¹ûËÚ©gA¿ðäË0ébõç6Ë.M‰\4Lð¿‡\¿º×B<%Ga»»‡¤Ð0=A%`QsïÚHaeJ‚`ã±4‡È~%:ñP,Q_ÊþÈ[`^©&5‹ˆnJŒ”ô×^±[*¸9—¸—6nÞK èÉ8èq¬©ÀqŠî/-¼€½/’-ip“Þ$™Ç]}4ŒýjñIº‚ž]<á1œ\‘ M¾ÌQÜKFXæ%<ð@<óÜû`‡^Eô0⎠։b“k+E®­ ûgX)pR–Þ6%{îþ8;á†l+Br~Ñ¿cÞ×7ÑîµEEº’ÊHjæ(:„0È{~gß%Pá ìuAéqGp€¼s)ƒ|šý@ª<=Î#žŒõø“‰¿i`žƒþ€—¿¶gžîå$}ÿJK |(0¼/0›”ª-ä‡èñê¾á“\*Íðˆ m“˜äzƒ½=µèÇùÝï×PÎTû#ü]¿N¶-©¢oè)”€t?…%6¯ VÂÖü+›µ”5ÍÞˆ`¹$AKâ:ˆ"¨WpQÂR: ñ^Ùõ%ç*›gC„!õCêwÅ)¯®P‚*`mÊóÈA)d¡¸`¨éúßl©²‰Ä˜ò/ AÈÿ~!úÿ#š-DkÕmþ×RÙò:óö)*(0ôº™Ø=X$q°ºÌ¢*Óëdi¼[ënòµàÀ›JhEÔûìYO³žM²ÜòfV³ÇßËܦ}ÿÏë+Ö&þg°S<»®ê0›îÒpå–“ÚpI—þ2c­È°‡«(¾˜€¹ê†\ûŒuG©‘ü0¯Hƒi­uÇìÀymOb˜MÚ $O¼£EŒz)15¬IVÆZW«ydtC†út¼cÉ%߇ÿrUä ö0©H ]˜ÍdÓ4âc[ŽÍ}¶A)d~3L<Ùºî`¢%"³Úhtº £ËRkÞÐ «Lu%Ñ,b¾KÉG6 Ùž…ŒàÉ0z†u§á»“›ÁÉtÊÝ–k–1ŸÓU Y†Ô·í3VÚnv#~¢.M=ôcA› y)Ÿê¼ö(ùtËú:„èm¨líe…“÷™‹h¹µoW}ÌšZÚÇH­ÉX$ y’"uí]eÒ/;ÛÎ÷œ`ëw´²—ž'H…L£Á'þêÑ”LR*ÙKð‡ÎÙ¤ÊÑ“®×ìlŒ—ž”­†‰ZLp&8·ãŠ ‡7ìÓahPw‡aTj8ìðŠ~ŠÃmÝlì®ÈöÍQj!X8Jÿ½k#%´:Õûƒ±Ú–Ù¸ ú9l¬±RžQÇw‚ùQ©·¨éu¯Åˆ!>sJø,œ|:à4m£`Á÷'–ßµ°ö1" ãå]‹Kñ!Ÿ0.ŧ7‡7ðV¶ÇJ,ç—+0šhêñE¢bÉU&Çm)Ã[}[<‰ì#pnÉ=*Ùˆ+ž¤]Hé†è ¢ª%[Q:‰$ÊÃÜ6¿ä±“w\`Ò7gBQXʦè®®H.‡Q¤qWU ¦8ȹ4n1ˆÿo'¸‹J9P¡»²t’¢›;õ„é ñ7]Y¯”"T‘5ðÈr~!òlÁ´ª¨CšWvWµra›ž®¥Qž…i·§‚î­¢æÐ¸¡'5~2ÑQXš"‡HaW/œ1 ‹_ÙXm 6›·ônIìwö–=µ=ÜËD{nÙ­vâ|mþìË·Rœ­akíÝ[H5Û¸É üM8oõ.Ã/fùƒä©;<y‹¾ÑdXW¡d…~ þ´ 67 {ÿ¸ žÿ>heÌþ¿$™§¾­¼­Žª7Î>1N)HõBG¦k7*\8HM•:Ä&…bÉÔ$‘Œu¡ñÄö$oáii®™Õ6ÿÔ÷·ó+bÉT SGVF¿¤ÖoNßçºõ…ëïíÏç'L`÷FT!<—õ}ihd°'¦Ð/ü¨ñcèã:GMÄŠ¡—´ÐRHêZ~ubT ÷Úh8›¡vz#‘Ž)OúC0GƒIé×ì ªUæóTÚÞâ?ULYê²*lX7s7TSF¾9î™÷ªæ9‹j»Ñ ó²g×P£ªÛ¼¡Já¡e6k˜Ã†ë­ÅݘÂ)YtikõåÕ·ï2k^5öå“ʬْԧhcË£m·ð½¸Hu/Ì„Õb²UcÌ>{gŠDhHjX7øOíE#™tÀ%Oñ.,-If*­Ò.*{¾< kg—ŒÌ8ËeKvSKìh9æï¯ŒÑ¡R„¦7b“>¤(Mª8¦àC™­ø:M®âÏÎ×è`³Ê–*LRጠ1δE:±åYb>töÈ ø *7Õ“c[¡ `;à,6T“q)–ò¿ÍkIy‰ CÙÝâÖ®nã¢~È߯©8¿ýÏSâPˆË³d–à|„[1„ËþÆY»dAâþ5H÷÷]n%3[ÌÔM¢kJÄ¢rÓFÑ«¦ÃnåG">&yš®`9k²?kÚŒ5ªÔÑRBd³úÍXjFDBo¬o,8DƒUpØ ²5‹Úf k" b&Û·>1ï™Ì¡ÛH,¹Ÿš4Ð&«±Ø9ÏIŽYã–èa+r+66£aþÊvmžXX‰å?XÖîšhI鿢ÏWRC´ë¿zFqóÚþà ïŠö†—÷Ó—/¾(üâ†÷…»@Eô|sÆ{¯¨ìâB,¦©1rìâ>]ØWv;h/ñü¯â$¯CîÛ›"¹¤íŸÈÆyÖy…Áû ?ø¬êÿ¬8mᩬ¼!]Œ‡Ç®LÑe)G8ûA“ø^/ø[aï¶±E"æ™÷¢¹g7°AnÐÝ~î/¼ži¥Ö Y¤5òª/,Ý'°ö[h^ëèàcS[çƒdªCäB¢ÜK`NÀAnÒ‘t™_iaΨÝ&ßùÚ‰G…&fybå§j Q7¦¼ødÆ©ž‹™ÝÌô;vZ— ›+nÏÁYì^êWë7”•ÇQQœÞ-¾Ñ”ü£ýe|e„áÁ’â7ßúj/‰úÚ—¯DÉ-Ô&(ÕS;ãÄϛτ Rî ÀA5ä7ËŸŠC˳ù…Á‚â‚þ €(¢ï)rvIª=n¢¤bΫ6 ÁY¬á_Þ.ÙDó|[ûKÑ‘WPäÅO’ûÑ\5óŠh9ý—ÕÙ7$GïÀëêÖø¯èNjV–mV–îŽ9·Ey6'>‘-³,¿Oî6ž=¯Šèy¢¬'š‹cvbù)ñ‹m/1Õ–ñ”½‹Œûg è¿v:D嶾ຟÀÊ®^X³/ve¿Ái“¯Ž~®ˆùƒ^»#Ë#?aþ•6!)´Æö@€€ØÀ€Dþ§´ùo¿~Uwÿq:ˆ?vœ9‚T”SÁ-bœJ¨'*¶¤V¢¾Æ+åÅuŽú9‚ Åå| âÞ^¡„WDýXî˜çô@袗]Ý-ÜÏ8Xú7{÷úü!©ÐZ/Ž9ƒý©\©æª*Æá~;ÊG?Bƒ£é*.R(ÐW°”$#Ã~×$i0Ž ”ǵ8B¯Çñ†¤·ÐQ0‹¡a±ÈŒE7V &çÏ™=rÉhÆûÓdmì0AU‡ v¬–‘ØOnÂqè¸ÏÄæ?Õœ ªœ›qN·FÞ3«·˜ÁÚ)pµYÑÅÊ+jV9cbS+`UÉN»’c‚GÐs±KlDíøU•ÙµŒ\9»ëopĽÅ&n:[‘°Xl”­ð™ h±Få!±5¦#Ë7­¼žÅlÀÂQň©×(÷[^Ñ—¶è’áÆ]o÷Ñ5u¢rϧùìf [EôˆSÇAXȦ_·d²“6‰¿›E†«‹²…"®-„F†s–á¢`ËdD8ŒaÎŽáñT˜S`ÄÉO1ã;º²Ñ½Æg´°½©†h:f¿ Vn* %Aà:“ÁÀ¿½0­ ÒK£mçŸ`°b4H/y€‰›_jaðÞW­…0p¾Î¤O›w“•‰µ›»í ࢄ›ÚN¹'PKM¦/‹[Xû 1ÍówR‡Ĉ·iÖ·äÁ¦o'C-I¶! wl ¯,Žß¸­Ÿ`Øo&-w ‹òüIÄ”hîÈŽM”â]8ú¿…4 V^Á? GïS‹¥óï2èÓÕŸ2{°ð…ƒ{NµTz ŒŸ¢­5¾¿‚ž‘3©cëê=€ÙÓ€|Ÿn½ó0¬û‚ö7ƒßCT XíŠÎÚdfáqˆQ?áP¿ÑÝ>ñ´ß|Œ‡ëDñaTo¤=¢]ë>Œ}Pv½5×ÝÁ!úiþñNO]°X—¶»½a—©^†S¥¿þ >(—?JÿÀ‡âä:ÔlÝÌþsÈ>/Mç?ÂøÏ2z[7=R4¡~¢MŒòM!X k"«— äÝF]‡i÷ö•=Ü»XìûQBöÝ?°!Žz¿Š`Î߬+E_šž›Érñ°0·ðÿ~‡ d†Æf¤ •3Š¥±J}••é(–†5'›¡:ag8 €=äe”d™Ñ]æ{Ab`¬Ðš^Ê‹ÔÓðÀÏhƒéKñÇ·Wn~Û^¢cèLŸý¼dpÔ¸¥CQ†}n7ó|„E 9¯gev—·°Ôf§ýrbê¯äQx-“JO7Ó9>ãö€e‚EºíΙŠu³G{º|¤×‡.âÍ0¹¨ò£þN Ú„åc{U6ƒÌe— GæÑz‚eÉj”SYçn“æŒ#rgÉ3ÿ½CR¤œ|H³' P^Æ»Ù_T\ 1ù]d4 0zRRéÄ?°X„µ«£‰vŒ.¾o±©ë1FÂÆ˜]ßjöá'\°~lbè»\p®j‹Zˆ9‚½”ÏTNïm‹–QWDÖi#DšÆ0ÂV¨Â±}q®yBþ!‘ŸèMŸðצ1i=Nhyû(ªï¢^ g¶±øD=N‘/Ìù¼„ýõ„bÓ%”uÇá ]RU6$~œ!+qÛüQsJ‚Ùã¬@nãZÔÄÚßRß'Ë+É‚&G˜à±ýXÏÝjÖî q„^i¬¡_\ÏKᆸÄ]£Õ†À$7¤âÏ®tέé_)ÚÙË-!¯…MÎÆ©¿t«À{ê(kuékcH­øq#±Š-&²v›9Œ!æ‘åöàxˆ·û°7"opÿ  Joè·Tñ?ÓŸÿ  ¿zd÷úãŸÞ–냋 \ÚWh§$*&T›¸²Ž ûnUiÃÕ³—ô'í àáyä=Y…R1Ó»Pñ7îñ•:-!²ËåÕÌÕ Ëü•žÀ·oh! ÷Ñűe`åÙ»ë¡%¶“l°þº£ðp!<žß¥Êœv8[®Q$êhl88?ýà ¬øšSIF£X%© ìWFùhM&Ë­’èäL÷(ÖzR¼ÃÞ„¹ÿŸs1)w5ÄpÌ6­¾§Ð[oXºA§æ+¶,¸^ÔAõA$ÿÍØI7áð ¿6Ghó¹ÚrFVáñ"Õ´ù…ë—­“–™ [®t…YXÒv]gëà–½*rÿMç“Ug'eïõÑ:5v†+¨C­)ø<¥€)b÷-jL”!úiå¶¥× õ˜W”@ì¥2Ñ˪Üb’É;éKPqæV®–£á1uðòÊÞô;M4›Œ5nÜñ}–ª· ®ö«ÓÓŽRJëJëV#LIB3CwLK±œ ½ FÆèfð®»B«_çŽù—åTXèù­6ZHžsƒøÙÓÓX‡Îø Rfè§ÂpX‹oRظUÝÅSMôÎQ^X¸—ÓÜ' B퀄ê÷Ù(TÒÒk©º¼í®G¼FÇæå/9C?•#B{D¡¸l¿"ëËÉuü žK r>ñ>P÷”õ¤O¶÷²‚ÀÒM“J$%âì5ó[bã/Ô+²Nì ÄS‡7Ö;Ë3†Å9#‚¹Ñ@eˆÂ'\ 9´Ñ z>¤­ áj+, —õ*ü¢!Ö´º •h‡ä¢5C’~ø¦ê&Œê3HQÌÆ_hß¾àÊêìWŠ•ÇùjG´Re¢›<Äv•Á‰]—‹öü›Sè&'C˰Tõ#´OÖo4§o8¼Ož¤{µ¢ÄØ1—ßÏÐ(YD`OĿϫ»;ÒÖ0#Ç7cD?3j[Ú×B•/Â>Ÿ;cþ½.zÏ ¦BÖý?½`ûoÈúÏ®JÊPuu•ÿ¥ïÅœ[EòÑe&À wð†R’@qW,€€wöë”°Î}Z7Ÿ#'Âû"u‹(ÂÑ„Rû¬´üÄ‘á]¶÷P°ëLÚ?cT¼³t[JU 0®<‘°¸C{4Ži*Á¤IŒ “1íTéÜ“;@²ó0¡ªM*ÓÁ´HGáubÊGYîi•Î;EWîM5°1Ÿ\ªÏ%—ˆò¨;ïs¾Ó˜;Ø’¿°Ô/ Î!_7ïÍUõªÁ÷+îäÊp"8OgÓçišô²çÚ§Á˜û䌷ªžë ¬Aé8õÏIHÙ}@eУÝ3ç®×¥ýÓÓ¤¾ë õÂzgBEiv$Ü”D4s´U©«s–.7óvºƒr$ÁâÑΈMÓn‰uˆA÷ii†ÞÆ4‘fÿ ‘;¶[9fí_sØ·ÜûûFS§Dp'‘? ´ÞT˜7êË™³Ÿ7œ@¿>wÜ~Þ} ¦ïh9s*ÆûdìïÕß½BÇ`ÒøÊö¢{“®q—¹Ïˆ­Ñuª¦¿EV¯®{²ÅÝÞ3FRïC^ÛqêÖsôL 7ó–fß™ßÙ2Hâp7“UËÑy*ÎÀç`÷3kï“¡êÐ}Zü>¹¦C¢”TÖfXRĆ ß–…PdÔ]C Öm£ÖuªÌÜ݃’zôÄU(#òl&ƒ“ó{xPöi7¸©¸7-.iSú¸ì™ÚÎŽƒÞÞN[°µì \(B5[‹ÒÚÆÎ–ZXBĤPlÆÈ«¤híǨŒao ÜY éY ¼¼ÝÒŒÍÝŸgÊ–XžÉ7)`fü"b¨]1ˆßÀ‰ )}š£|¸¶ºŒ‡K.?ø›î-6Ðòƒ—[XóPÅõh­Ïg§îµÙ“"s>GW‹¶òñʩٌQ€]c3ªè0`TXèd=RUD¶‘%©¤÷ø~¦È¸¢ÍÚ_D«]€ áfÌèù;û¾®_ÆCL3ÑvGCh;œÇû@ “|bXh5¦Áf±,™dÙ>ì¼Öêá½Mr*ò˜ fb„R­±NŠO³ 3SI…¿ÜÕþ²gÓE¡.‹£½È›ÜR³ÈT}!6ßn9CÊ D\ˆ’!¿Í@4„Æ‹ŸF®d)¿˜Ð³Ê:Èà²Ç™± [i 7º\¸Vú–-ô& OO‰k{L¤¤FÕE{‘l¯K˜R¡ŠŒ·m¥D«6Úë4eaš“´ØŠ6^viWEüÌfg r¦œC$&Çs]/[$®V¥pÙ«ri:ûOHM}ÀÐmûatÃy]ÃR’ÃyûfE'ƒ=¸-‰ÅòÀÑRÆEFG¥ S… ý&šlUH6t¨:HÒþÛlä(ÈÑ3³pç·‰ {ì=(‚—V»F§l&PiU³\œuñ¨½(†?¯2{#Õ‚¢Y sÑö:D“•Ôa%èu°bk«˜Úp)‡„®h£åAÍm½ÎД¡FÛB™ùQÜ­±ù£«Õù¾-ºR•l}[ä“ÜÒV½³˜ûœÊÿ=@¿Qüæz(°¹ÂÁH[¬ÉÀŒ—+ƒQŸ²Êy]¾ªó#ÕÞéA´ê >ØšôH"’ÅIÜïš,ðî@} š$¨¤)NÀ#B©5¨¹G±HóÊC=>/j¨5¸Ê¶/eVÃfd‚1÷XvœaDmt8‘‡VÑ\û5£a/;ðºPjàZX޹/ÇÃóFõÀ¢`B‰3 €c„³ó’’dD¬×9É„ [‘ÂÊc{¯”H¬>"‘‡ÉðaÞÆÈ\ÇÁž-bv䩼2^ƒR±@l°ž·ˆ°àÏíäóÒ#‰=YΘH™ãÕ¦;­¬NšgûÇ ]:{j¸{E—5·1?@q£Êš›š,oÇdÕÅ ½wIÜâ“Né©>MLŠXOg§,7êëœÚYâbÇò•Q£ä‰†ž~ÀH“x¥’´Aû‡ ¥iT^kÂIIѺåï ˆõÁ:ï ZÀF'Ħ‘ì¹å=\­ŽØ®§Xå!hPF ¾¾Óº‚†uË17^'Ó)§—Ó¦x{cEivLµŽ2£–C±­8$¶ldÂÁåÍ+ƒ zW´áï­]Hk 7s`:]ñ sÄá0²Ø¸<ïUtØÇìi ,sª"À(¨ù-l`Ñ‘awÔVkZÑwðÑ‚“_z–¯Žê¼±ÄÒJKalÀYÉ&¥Y#b˧D¸´RþTU‡h«kª¢=̨³´pXRÖ%šìmÓ97'¢kM88KjÃcÙ0ëÚÂìô¢H+*ªU¬iÑ©i\ƒ†8•CkPzTžÊ¢ñѰ.QNÒ)5."TÚãýé>DK‰Äîf®¢F¤ÚñÜÉ´›õqòŸÚ™Í!1I\3“¡"#À}E÷éè_Æâd¢¢çX3`/`‰ˆ×Ò(«¡Ì\…2IiÑaÖôhd}àÀGá}tsXÅRi%ÞÙ6+ˆÓêê‚Q+gÊ`—ãZo#h0‡€]w1D—Å9 á>PÃÂü#6åÿ ‹ãr5ƒs%ì±K­ˆŠÇÎ'PÜSž$gbFþ?p<èU•@&p«—MÔûL$ÊK€UF>½ÇIë~æ¼:69Ênjá|cT7‡rÖ Ãx\5&Ös8÷x&Õ5Ùg#Þšæ¶p]pF£JýŽ5F3hSdˆLS,•&}I_™"[ä˜ô9}jÒ×ôIßÒLúŽÿ¥ïMú~4é'~üÌ}û [BÃ`‘†>Ñså&y¯IŸ OÞ'ïï:qÅyb˜ë<:Yª^dËÍnù€)·ˆ™¦|P>dÒGô±[n5e‡Üæ–ÛM¹C> 5@4íˆÿhû`ü=9vr{òrÞ“ŒDÞ¹åNS>"ÐòQ·ÜeÊÝò1·|Î/âÇK£ÒD_2öO:ìœòÔ?À Äp­nkjšÓÜÇOÊ=‚Žø¥™¾)Ÿ’O›òò™ý™'è1€Q @u/?ž5åŸäs&’¬é¦ü³˜ì–Ï›òù·|Ñ”/‰™‚ú& ÿ´¶F¶P¦|Y¾Â¿šòoØhñ xÈ-_5åkò輦%¦#¤KŽ^BºoŠ€¨0åëò S< ¶˜òMù–)ß–ÿ€œ'Ëœ;Iƒ…’)æ2óDµ âží\üí«J¥)ßµ¦8ŽóÅS¾+ÿiÊÉ÷Lq÷µ‰BS¾/?pËMù‘Xã–›òQmÊOåg1’$¹LÅg€!r Žá\l¡!Ф,RU‡Y‰tîiHn¨¹57á)È…påòg®CŠzòf=c^aŠ¥¢VÐ.+”†Ú8›“½ËÏÝò S~)¿2å×üøF~k  ÿ#¿3űÜ3˜›«Å[›öËMS´ˆ‚ŠzÆvçZȽäÝò{Sþ tËŸLù³„ :ê`À$¹Q2…°Ëâö~br·F¦&4ijš¸Ò—h:âê²@hdk.Bn4VÊ]ÒÎm]ÝÌ55ƒ]…ý—iº).çÇíÖܦæÑRÜš×ÔR5[tàdÁÔzii,wO›âzqŽ)Ö‹K ¸Ô¶ZÉã~SK‡Á7òØ›ø±ƒMg/°UÜ )Ñ2L±5-©õ¯˜b›¸Ç¿ÃCË‚Öi½µlSË3ÝZè²ÖL¬nΞû*.0;brˆ-ÄZ?(†æãõ^àa=Þ)1EoúQP¿ҥѳÿòp¸[ÐßÔh¹A¦xFÀ=GŸF=Šš1­¹¹ †ÜÔ3ø'Ä#ˆì:Çq¦–«jjC´¡‚Fô,ªbÑÃÄÍØóýÅnØÚù¡e¡æÓB¹ÍÊé(Q°IJu˜ÚpùA·f/A†Mm›«5x´ó…‚úÄ÷W67X†.bj#µ<{–Å……ÁÀ²¨çÕFi~A#{¦Cc_M>H½M¼÷‹æüºï±~]kþA˜$·á‚&ýBöqè„_89ÌÁ{¶Öþ®†§tqs˜¯Š8Þ„lÅ˽¯Ææ¢ŠÙq½u­-Á€NÇëÑû*­!;+?pFgäUÌàlzà~ƒi$P ÑäZkiÃG$Y ‡Köéó¹˜Ñ$HŸQQ].È—ìƒ11jÊ’|k Žý¹j&È럯ÆE/󖆃zDÖöyB´ÝùöÂêèäþÉwMQ’äÌì¾IÃcf3Ÿ3LCEhI3‚ó$G]ñYOtäĨ´tî·ò:“Ð|sGá0»Ç‡è=°b bVôº0fŒÞÏí@ÒË=WpE[ )’p=e¶Î‹e†--|a38ï@×óº_±ÎÍÛ/EX$ aEÝß2v³Ÿ;wìj0÷@Y¹% ƒ§ÍmnNzdۗ訉]àv?^¡n Î5®hSw=.f+Ùv»mI²‰¬neû{íim¶ºõßϱ˜ t0áAÜÍéAž^u‹+Ûº¥•5°/½ã^ÚÑ _G€Éå•Ïûäʼn©Ó?ѲÀj{ýL’ÔèéuéV÷s³—t#ÞêžœO£y@Eò3Þ ãŒ:_÷£kb§5ÆÓ踟¬Ø«˜Or/ DªÅzHíž³¬«ni \ÊÀWYÔàX– ouêÌÏlUU"±ˆ)ŽLolhTw¹m‹#¶$w7ÜÒÄcG&“¿¤—ý:ñ ÓÅQN²~X–>ñO±71c•ªÛ²“õûÄ/`;‰­®‚“Ü è&1±o!r#¥--pÎáFû|¾ç—)؉tû>6±Çºuà;wÏ‘ø£zþ&#Ák#@–°!Ä™n^ÎrÖÕ¹-êtÔ.a–Z¬`(xZ…úÚŠ|Gtž\_Ü­Í6€¼¼dþ8é™`še™æ# ‘/¥YêA¦ Ê(ÖrveVÀÃÉtn Ža!ÎÍÛÏ%FLŒÞÒ.olZ°û‰c•uçpösóÞõÚÐ4ë¶!þÃ!hiùò–V`¡Ï›;¿¼Û<Ž¿}¨ï¤LYõ«ù¾¯^Í™›õ]e¼´óÑv—½ê.°‰; _Üókþø£Ïƒ ZÌÅ–°-zïj,å=¬‹òî}[›]Ð…Ò&„µ¾îÌÊ"ë:’/0|™õ©FÃÁz'Uçä¹Í¾Ò»SBºù4×­¾I´|Qï=Q?”öRˆˆú—QóòI4ÖÏP—ôoü>kA‡ð¡·ªMߨò[ú*¿³ËÿÒ÷ªü~TåOvù³ý~ŸJˆSu-¶ŽÐñ3âÆ¹0Î-<$DŠj{ÑNk›øõ²ðâƒu”‡ð±Œ*3D¦'+£Ÿ— ~$æf‹<û µxa9šêßFº_l%ƒ.~¸ùááGŠ_ßJ^¿¶•R¹iò£?Ò¸/S3P«ôų„Òð\E:­ zˆ«Þb2õ i h !b)SØIcå:oxi"­¦£h臙¦…ð‰CÌþQ\Å*rã¢Mþʬôo¡¬üÔ[ÒnÊÞÂÿwþÐÉ©*ØCúwRŸÚ‚GÍmÔï ª ¯kã#G¿•r sŒâOò¹:¨ŸÏµƒ|-<ÏíûÞÚB‡l¡þ4`= ¶êYßÓ Z-¿¦VßNƒ;(·¦ƒÇ¡ZòòÜÅP-pÌMñeeâù+2èLÊ¡µ4΢At ¥ói$]@ãèB:†.¢P.¦K —ây%]GWÓ´Žn¢kéÚ x4—<›)ˆä¢ ”/‰Á¤#E.¤C§)4LŠšùÙb$Œ¿ÖÝdsÕ v1T §‡ÒÅb8æJ1Biƒ´ÇñÖ¨‘%ù.Æ–˜0Þ0¬¼ ÛiÈ*¨²zUí¤áµÛhÄ®üÍj{Q ³¥¢ ahÈ »Á‹ßA£6)jr/“R„_äc}@¶±ìEé 7• D! ñúÇC÷É®§(»<²Ö/¶QË-ú6;¢˜¦Ý¡y˜²é‘8ñòÙKXÊ1 ‰1ö·c–ŽrRþS”º“FÕn#ÿ.Q%üù”_[} +彩 ƒ ×SZán®®j's'Õn£1U1F+ê^@|k?œ^ ½„þ—i4½Bcé5¨Ì 7¿µ®ׯÂDÀcÓhQ,súÐq¸‘¯F1AaãýkïQñxCrvRïËØj>0/n‡>ç Tb:;òDô¦$?Æ}$?£Á°ƒC`óè+A¹Ä‘¢D±v”ƒê(U®MdT'A÷-ýí…Ù,kãÄŽ¹Ÿ¢S¡´‡U‰j ›R>^íÇ !õ>™?®ƒÆ£§pŠMŸ€éG€ž#3J:¨„‡¡ÞAyO*Ñ}úÊôûô|ëådZlo¦P‚ÉÕ…A& jo˜×~"U™ÐAÂ+²a¦rè0 ? ˜&|t T®A ¢&æ1D±åpÕJË@B¬OSÀ ñ(1UíÊZ‡UkE©˜¦”ªLL·•j)·m¥šR™¿‡²ó££Ö“‘¿´L­lß÷™ˆá=ˆÍ ¤ÖEP›1”ægé}ÅáÀ}œÂ©O'U2ð®ر*Í3íU‹¸Ío™×1ð.îÓâÔŰÁq´¨°'ÏÆ¼Dzþv*õçۮª,¦[T»ÕÀr6¥‰cã0Kwø‘®(c6ËáGˆÕ8n—0º½`y< w!Œí â$lÖ§¢wIeð{'#ÞfÁY ó½2º+l‹âåOìMø§í¦—ú™Y`Û)“ú#…C À£-Þ¥MÐÿVªôè º)6oàvªß@ãfœ|3ñ(HDp—Õ;Å’ Ôo`FáÍ”¥†˜Îó$BÙ­ ‘¹t‘.ÝdÈòJ/¥ËTê+{Ñ ™FÃd:åÉ '3iŠÌ¦ãd_ à]ƒàxÿa4Y,u ÁGÕ¢üÊ}Y9—NAÎN@ëÄú–Œ\‡y·?ÙÉïWåk 0£äꚺ‡R¹¨jß÷u¾ÞA ˆ(Xý9ʺډêü-´´ƒK8 ÷éêõã]9\¹•N)ðéísŒ¨%ÞN§Vs«_áS”­Þ̲jZ¯’دB,°rr\)ƒ¹§11˦V!+8ϵ¯}ßÆÂ˜†iª#ÀΑdÊ|J“ÔOަÁ²¬C#e1ÊÃhŒGäx°t•Ê#i†,¡ 9…Ž‘GÑ<9•N’¥´D–Ñ9ƒ®’GÓ:9‹n—ÇÐ²Š¶ÊjÚ.çÐÃr=!ç9b¹BZ¯Âû“((–¢æb;víIÑhGŽÛÄ©**9ÑJ1jÍ£b±\çcmR:Þ0ŒRž 6è6‡ü›E5ZË-UTúy,×”‚†J Ÿ¡˜—‡i9ù>#:/ÅgT·ÓHŸ‘¯3ÿÁå~íÔ¯ËWû¾{âXªr$Ù©\J™r«&*—S‘ …Í4S¶Ð,¹‚ªd„æËVª•mt‚<–ÊU´L®¦ñ(É0À@>JÙr´z7õ—S®|‚FË'i¼ÜCGʧ¡Ñ„Hî¥ÙòYx¹?ÓñòEÖ Èùú^±:€M?]œ­ïôÍT},³>h3âxnõÛ_)#ë¥q&»•¨³p[+d9+¬uVÈrVÎ ÜgÁÍr…ΣÏçØÂ÷¬Â<-!=;Sù)”Šo챕X`µÕœVž…à˜Ë³Û÷½;ôx’ä[°‘oÃF¾±x}îæ}ØÇh¬üœüœü¶ñSGÆÂÙž+ÎSîtš#ÓÄùâ`?™Ù…àuha:=¡ÇV,q1~—ˆKm)½ÏvºiCtÇEE*_de²å;®g b§˜Yç"¯,°rË:/æNýØ’߀¶oAÛwЕÿB°¿‡¤üð# —?Áî£RM:tõGœË±`"]–¡ÈÝ?+C!ÄeÀÝÚ—GmÜg%à~þ+~HJÃ=£¡Ü#Í /™J¦Ö‹zki”­eOˤZ ÕzÓH-› µ£õ¥ ­¿CËÐ8Zf9´Ì²iñEiqvä×ø]îPµÁ¦jôþ¨êíP•¢¨º0ûÚ`>˜æ#€y0ÌýÀ<˜ó±q{ŒG;v0ÎI‚ñÿÆ%b\Œ'ãÉÀx 0ž ŒKñ4`\Œ§ãYÿƺø ²ªØQXWNƒk¹íK¶Ò™Ü“}©´Ž+-láh@; Øž l϶ç##ºFiÇ™n¿ƒ“_é+ì¸J\mÇù¶é¾8~ýÞ´,ºlC,âµ0JÏG¤öëÝt9þm¶‘«rÌŽ“Œˆ&kKô|"ÅL[ì‚í:“оï¯ù*­qàí +Ø]3ó*Ö®yW¼uÔG»ä]gq=Õn¢#µp+7S¥v -Ô~KuÚ­Ô¤ÝNÍÚΑÏBÊë@4 ÅÅ#.¶OV¤9â•9”Ñ q-çΫõÎå¼»ˆEK\çlÜRÛ©ævgб]¿I²]ÛAÏгÛõ„ëQ¬íŠÛ®\Ë\{»j¯ºcXІ&ø”ªÕq":®ÜÅÇsWÅVgQðÒžÆÂÏP¦¶—r´g!ÑÏÑí' Xgñ¡¶Ϥ,ûÌLðg¨6¯Ø~hz7zvµã‚r¢.(T]¬Öµïû€ÕïšvòV£¼®p×Xåp°{]kã«ü»ö:ð}øþŒzŒzZø>ðý€ ´!ÑáÚg‚/i’öoš¬}+þâkgó j†T 8™\Â/6(§;4Nwt4_ÜÀ¾ ÔÝèÐø[›ÆqKãõ 1Ѥüb~"“?Ö%eë.òén¢{¨@O¡±º—×S“CË;èŽsÐà {ÓÿŽîú®èê½I׳n? ëºî  ;èæÝCî_€îFq³…®,Ä<ÄôSºψÍ|Sµ…n¨.ÐXZn¬áÀ’ãÊSÆë9úFúŸ}ÝTbð«ÄQçje†J\|O¤(Íãš¹}îÚ¸aß¿|†Ï ˜7GMÑK w#5Z±iô¤#ÊlÊ¢¯Ï«;â!¾jÁ+ñ0Ö%)¾Ý"¨Æ—¢û<5X0%ºØ½>cý¶²@/¬)ˆÙºs €¤€í…`{Ø>†rôb:D?Œéãi„~$Ø^BãõÉTªO¥£õRªÑËèD}:5êå´BŸAkõ™tŽ^IëU´^ŸK·é5t¿>vêóé }íÕÒ úqôº^Kïè‹èýxú· ÿèõôƒTÛyõBºP¤6ÌEäSëˆ[TßN:\üVõíE@w«¸ ™Ó 4HÜN_!¤¾Ÿ¦ªs/•R‡¸Cr.?9Bñ“-‡Ð»âNÌà3›·D;j‚‘gÅ]|3愌Œ»ù6‰¿R·]Ö>ˆB"zµÓ%Ênºÿª õb«V¢ûó µâºMoËHe2™ÐEFøcß;|Àpž!ŠK<>1ì{ÛìótÐííûž´Df‘%2ÈÍÆ»´ñîwŽëV*Ñ™µ%ž;ÈïóhhÏ‚txôâ’TžÈBa¥`,Uù¾T€>Ï-Ú÷=ÓÆ•4b±b‚X¬€&†i°ÞF#õÓȯ¯HœN“ô3h†þ+š«ŸI‹ôµ‰³©A?‡šôs©Y?ŸNÓ/ 5ú%t¶~)]¦_FWèWÒµúUt~5=¤¯£‡õkèýZú‹~=½¬¯§¿é7(Q¸Vx. · 2Ä&µÙ“hŠ-aÛïEl“BÏ “a¡ðÒÃHnY(Ré2ª÷©S+¨BÜš›î¢1JPø*ëUG(^u’ðWÅfÌ…¤'•xh4˜Vâ¡ÃÒÜoŸ§èü7B¶Ùm§Ëúvº#áBß—ëöj:ÿ’-H)vìs¡Š ÕÍŸxÞ‰f;"ñ»ªEá´,îžùänÃu$¸qã&ÂÝ%XR¿ƒ<>¾Î¯‚ ß•èqîÁlŽŽlqg,ã¡…¤?H†þ¹ù~£úˆŸFé;išþ•ë»èX}7-Ô£eút¾¾'.ê­NMØ\è°ùB›Í¬•¸é,$›SÕIÊÖ¨iy˜Ç¦| ¢˜MO‘éÏðÀ°m¥M|s»‡sÑA÷ªP®ä>°ÛËcµ‚. xÛè~Uå»!·ªñµ¯GÕø‚Ï»žR¶Ðævrm¡2Õë±.oz3xšiUÝ|Gxævz f mÙ@Yh¥¯gð ¸ù‡^›bT!„þgpïyÊÐ_¤¾úKPœ—á¾^¡ÃôWiŠþlèß¡4¯ÓRý :Svó-º^›îÕßqB¢Á”-:Ôé1øápr‹ÍIÁ@csm¸Éü~Üo›"‹a›´â=4ܺ·š»)»7ÍêMƒ¶ÓÖÝÔGl£¾ÏW¬+ÞNÛ¶Òv5Ô`‹Á¢ŠVãn4vtÐÃ|}¤˜ç´Sý۬ѦȷX°;wÓ#ˆë·Óïù~|Šqæê,èL„ë²wôBä±£‹‹@þ>†éùÞç š® ¹ûŠNÒ¿¦þ 8÷-ÌÊwt§þݧÿL;ô}ôˆ!è1C;q{ÜáÝ㎲?n+ûm4XldÇÞ¬®VKÉåçÒ'þÂ1=áxÏHOzáø°sé»}ê¿•ÒnŸŒ>dý’ß>©Ov¥ðß3Ù[Í*Ƈå+…ÿθÏòïäÐ%ÿ1zd=ÍÍ»«9J)TiG*z¡å{ ެDIpΧ¶ÄuǾ}Pí]µ~ŸkíŽ ¯øôªvê¥^@­vWÅ ênܘ ܧP/c*e¥”m”Scå3©È8š&³¨Ô8†f•0ª¨Þ˜M Æ:Õ˜K­Æ|çS•JØíßc;\û™âQÞ0ü±K€M€ÝÞ ›oÀðIÕmŠK+ÕV’ª=†>A­êô궸S Æã€‘¼er2Å>`]÷<¾>Ö‰ƒE6áÐuŸk7qù¸Í;J/q«k¨?ð5Tû¾?)Vø]ë)àwUòp‹¿Ñq|:‹Ž§“è ›ÏsáÈX>‡ÁçVð¹ |^ >¯ŸOŸÏ YÆ™t¼q6d¬¥SŒ³Àßsh¹q.µçÑã|Zk\@çÒEÆEt•aF·ÀKžB^ññ$äi¾uj&Ðxq¨âv.’Ð;ì½({Ô^´8;°Òù”xoÏÛ•uή¬T»rU’]ahwÃF¹Oψ½ö9Ê7¶„×"Äâ±,ZU[¯'ñá«fñ\…n£=%†6Þ•ã*|ôV:Ôg渊ý…\–íyÊþtË…çMŸb•pWnü†\ÆU”f\MýŒu4Ô¸†F×ÒÆu4åcƒsµ2aI½}¡Rë[«ì _¨£¾·“Ôd>+ø²x(Xú'FŒF²÷,ºá0Cõˆ?ƒdëÈõyü^ˆzCú ú9H8VgûSNr‚Äíô´ «‚(ð÷4kýQRÕ³’S‰gëkœ´0[r sô|üŠÙ‹§ƒ9y@\úeü–ÜÆ­”bÜnÜIùÆ]ù»iºñ;pânpâ^ZdÜïxûɈÒëÕeÀÒ1\'Øv6ªmn”ÐñT‘xѹψ·ªFBelMbU-&½”á/‹Wl& P# I[HÛ¬,¯ƒæcä_?bËm'ù@çåh~§åþÆ7@˜üªXÓuÑe„ ¯9ßL®Tª@4£7íí g£÷ŒÒ–¬?e=·þü ÇaÏÃì¼ð eiØÑIË(ÙNy–ZÍvÒ‹xÿÒƒ$pÖRG)X+“Q:•†c¥9˜7¡‰Æ.PówEÓëôWâý4zyÒ+ØÕ¿¡|åk(ÿŽòu”o |å[(ßFù”ï |e Ê¢<å¿/½‡ò}´«P~€r$ÊQ.B„r¢+…^TôzþPK ñY°6¼rÇ-`>"javax/faces/component/UIData.class¥Z |TÕ¹ÿ¾sÏ;™\$„ÈN2Iˆ !‘h–0HÁ!`d2f&,jÕZmµZmµ­‚âZŒV¬€e"RÅ ”VºékÖZõ¹>Eíj7å}ß¹wîL&À>rîwöÿùös&?ýüñ' RD<Ѓ«²`®æâ".|\¬á¢‹výp[£Ör±Ž‹õn xè{±7¸á &ƒ\tx0„avâF#F Œy »<› ÜìY¸ÅÃq«Þå—pqi6Táenø€+_ñÀ¼œ‹+¸¸’Û¾ÊÔU¼ø×eêïLýƒ©2C>3ðsO ¬YظhaSmSËê–ÖEµ¹ û6ù*‚¾ÐºŠæX$Z7 a@M8ùB±e¾`—aPrV]uc}C+‚¾6‰Æ°Á­èf?WWPWG¸ÝD©–ÞR±Ö׿V¨ÆŠù¾˜¯‘)ÚŶ/óEzcX¸æb[ŒzÝ‘ðæúP» ‚$2Š`ðGí¢G}›üí9ÖÄ®X XÑèë¤YYÍu!_¬+B¨k{÷Îî{Ò^ÛÂá?«hæÕ›c¾˜ÖZSßdqAÛÄ`]ªFpò.Ì;o¼/õGbâàü@Ô·&È@]³¡@l­Q\²ŒTC,`ø¿©«c?Ò™á6_˜àºÝ(cë´ß¨~Ð.­g¦òÙ×ùcu¾Ž@p+Ââ’L‚uóKp„„D‡´þP{aOmCí–6'£ç³¤,QŠù×ù#Ô*6ÑœáÉ9JGj·tFüѨ5Ïuv‘Åõ|`-Žù‰lh™NR“ ù8Ñ䜉ŧ1…7r­µgŒ;½=׿¯gð~ ÚµÞ&¢K›«7ùAKÄ6RñlšGí5á®ÒcÕX éœwôžaktv4µæ‰ø7’JÅHI©dh´Lhho}ØÚ™Ð‰³NO·{`]6,lMÑå¢6e‡®¨Mä÷]O‰‘íNÂôt‘‚l‰UÔq­ÆªÌÊÈ ÃŠ0öÔ+ ˜¤W±p$±íŒÓØ¶ï® ^Z+¸Õq•E»£ÙëÈ)³rCæBíÄ„)˜Ó SÂ&ìjòuÐ.ÆšÄ*#O:…Ô`¾Ÿ,ª“ûÈM€HšBEÿ82X%ƒ`¬ HõëÛ¿¸'b®ñEýÉuB›Âü CŽa!¬úbR:¹;¶'Ôø‚Á5¾¶ ³ØóSf§º,#èãHDvdtÐÉ}ëˆé‚mlLÊËåÖ…#¾XêdWÈ¿™L‚¬žØ–0OµXNg8ëÕ"ÖÒÊ#z!V§K]ÏÝæ0ÉÝf£G˜tšÇ$¥éØÊsõµäfè;@E½·áìEFì!BߤØ?¦7ûýÜjÃÛ”ð”ºß;êäCÉè×D¾ö6»sWÄž5¾ŸC,ø:;ý‘ÄÜl ñIÀÒU!€úü¡6òróüë!Ž §¡Ë J:ajÎ÷ó|:û`»t>Ðî#gMZÚI-<È$åw²„3Ò¢PßôÄhëŠDÔaÍh¯©£‹O:S9Êöäp#@Iyž¹§k½¥±h=Ù[}»%5î HÙmá`WG¨Îª¹¬!Mi¦3I‰õ E8¢²€ˆ/Ô¾!@:¥©2+Ñ@s¤õ1:­]ŠN‰®½—amMT–Ízö\YüþÎf+[;-“mOì5Œô) ?Hjn m´ìšÏa›8ï™05>u ÚD1Ãß¾<@™SÈÊi§ÏçP;¢Ì÷GÛü¡vJsíØ²àt²ŒÓQS’S ÔÙE{•ö³bm{ Æ‘\¹éd%*µJˆRJÙÚø¸I_+X‚%†& 2œ™²£ès:÷lâ‘•…zšÃ]‘6]€S‰l‹A“yk~¿6á xÒ„ƒð” OÃ3&âêa.ž‡§ÈÜ’JµÀ]Oé‡ /À^„çL8 ÛC¶LV瘬RSøÝ$R;x[ShBšB.C¦p‹,CxLÔDvb£Ôô“„›)W¥|´GLg¦)ÀïˆÁ)+ƒþu¾`ud]Wñ19\ 9̇™blŠ\‘gŠ!"ßÄix– Âq>‚ß™ð1|bâ æ×ŸàMS †fŠB?\™ð,ñó€ŸÃ/ì³§&&ü>ã­hö1Ò£¨ c¯£Ï ‡ƒ~á:ŽSè•÷õZÔŠ¢äŸN¥D†mŠ1b¬‰3p¦)Ɖñ&ºÐ0ÑÄRe0¸( ÞG’üÁ˜ƒP¾ï¼®k±)&ˆ‰\Lâ¢Ø%pÌ^S”Š2ÒÌ QÛ„?7E¹˜lŠ q¦ ¿d%–Y¸PÕF"aÚ RL1ÅT>'ž%¦³ÌfO?EˆGð¶D¶Öѱðh²Ôˆ¯-6:qͽ6îp#£'‘aM"6Í„c&Æ\[wNñXÕ¾dâxœ`b1 IYD•˜eˆÙ¦8Þ2ñ<<ßÄÉXaŠ9pÜç˜b.Ö™X…³LQÍÍó¨*j¸MƒOì3õ5 h2b¾)jEo}.9ë“D& ŠIåáEL±@ÔâÎÐâúÌæè‰Æ|‘˜½¼+è­cÂ$ÖÒyb=ëþÉ‘|æåGÍÆÄJí¾õyHPïÀ~Ô~¨fŠžFœ¬ßòž)Ož@Ôöÿ¤u…ý^\éQ½hQCëê%µ‹—Ö6·¬^VÝ@_b]»zT [\´daMms3÷Ôϯn©_ØDÝyK]»ºqáüÚgR~Ò0zYž§¶qQKëê†úæJÔṠ“/~_/NoSz¢^éÈâx@I3¤`”ÖDk¢”$ó/äËë(ågè¾¼‚(ï¼k=¾WZ§zœ·÷“äkÖÛûÿV• övå¼N¯{‹ãØïɈ×ç"·o+é4I°Iù]Rmza®­'@w|šÙkI›ÝÙIŽ:13“%¤ãà‰Í¤?‘@l+!O’f}ˆ2Å]^²2M›ûËîÆ'V µ6×.«]ROjR»dÉÂ%_x‰ò/4Á~<ðEü-á~À a|}¥z ýüšÊ—¨ö]Ј˜ã%œ^m.4/îéû@窋 Ã{Ü­=µ<ÜÍ…é͇{Ô>/S9L*ý a#dA„Î} äÁõ0 n†‘p Œ…;¡~@ã‚°Άõð_4ôPÀoà·ôEøo8f#,§/÷i¹9»m\ªéÇ)S5g*]kì©ÏR«¤ï¹Þƒ¶ Üô»¼¹ƒâ0¸¡ô0L.õÆ!7yqòä7vÀ¦PÐZÞÃbÙýö„²8îR-[‰ƒC{ö ÄY“¤•G[|&’4JH.^’ÌT’ÉL’ÉÙ$‡y$†ì%X^âÏ«ð{‚8FPÿk´&Aµ‘Óàðº:ûð¦} Õ4šGÝ9`xkÑcPÔ#z‹Xr’$—ÅPЩ|ƒ¶zÁ[oÃpxWj-coÆ+oö?4ÒÚ¬„â¬á͇QéÌÿ$…ù†Ãü·á{zu 1ùŒÜ‘¥ûa´Ë“ð<ÜK“ H4Ð4 ¾§ ½Ÿ Ò˜¾0;#¤ÿíÒ˜~ ¤‘ý@úÀ†ô!·×œb«§›Ö‡q»Ò0•¤`r;˜>rt4mþøôùÓ3Îÿ˜ØŸqþ„tžÔfœÿGgÿ {¾N®§oÞœ2Yw&ÿ)¡8Ü6°+É{LdÔEcYQ&Ñzæah·L¬8%MEânâ-çŽýà°J»¡†”mƒ|ÕLt¹%”nH¸‰,Ý Ö ¢­AìJiëÉ{”xY‰x0áÚï†,¼⽇;a8Þððâƒ0óð!XŒ» †Õø#X‡À&Ü —b®ÀÇ+ËàÏdÅŸÒQ„+•/¦Iî/d÷þjóÉÿ7åU?Íèˆ Ë¹ÈU|Gär‘«G„πς‰‡èȇ¡ÀD< %ø3:ö‹0AGÿ%œ¿¦ã¿ü8¢¿Ÿž#r±#2Ò¾M2yá{ï“<>èǶÑ?œª¢fº~ÿ5£ŠþþeOžC£y —·”ÂUš­ º)@\— Ÿ¼ñ¿á3[Ýyu79óyÒÄAYO@å>8“ëš·´¦43)@~+GŒ˜ªt+eí…iÝàÚ g©V—=LO 3ìW¢ÁméKÚ¼A.*=iP™m‘<ØTd’GJ/Ä@0D ¹P$ò L y"šÅPhp‰׈Bø¶·‹¢nÜípãnøN07¬ÿg?#Ýa³¸Õ[öL§ÿ™¥ŠSz`†Wqb é3©-G'Ūό×8ÅP,púuU7œºKÕÝÎxÃkªò`VÌ~ ÎæTÄbÃNH,6ЈY½D=²‰ Ùb ãa¢˜ÓÅD¨“`™(†µ¢¾"¼p­(…ï‹rÅ€ÑÖÑÜj3€(ŠWÏqâgp›ß¡Ñ<¾‚¥qX™könoîÛ¾ Sì{w#[v™²ìÝÊŽÇÂ8ÇŽÇ’1—äU ¦¨<1 DŒ `¼¨‡rÑèÀoÛ­P&’°Ö kåwSÞ¹¶ Pʇsز“ÜÈÈÅ…d+Á#V¥ˆ?Û9}¶Ê)yQÔÇ‹^mŸyJîœÒ8ÌÝf¯Þ #s«¹a;˜¹óìö=PsÐ[JŸŸÜ{8™ˆ­%.âR:æeP*.‡JqeЦ88¦ [%SYH&L!ŸÿCþÈ>l&\”ÌžWm:®[ ×m„káÚN¸î \wž±Ÿµc æØˆ®¥:Ÿ^úF5s-ù‰É™ $ÖU"EÖX¶ÜX~À*©M×Ë ¥bWay©w?,¤P¶«ÊÅZ\èb5&Ý^<Ý](óÝâ°dx %£y:¹¬–í0Xä»îæ…—ÒÂËJ-߇åUR-|Á6¸N” ªbº5+Z§gÝ›¯ÎÂü,âGë½°{ó³äEªÓs¬(ËÏÊ÷Ð Á…ä+¦ÝPY•mó0÷ËÄDfdî** ³ã°š¾ÄÉ*ó¬l-4{ࢃÞ|#>+ó0Iøh×L×½ùnjí†3ª² ³Ve©#fñ«X}…æS’䢘9•ââ"ØKÁÿ¬„:RÇ\²eþP;ÇssqmÞH–âäˆWȪ£Äk0FüRœ7`Šx“ù9¦·a®xœÓ‡ä¡ÃJñtŠÉK _ÿ„ï‰Ïáqöj<£yà¦ÃóšïkYðg-þ¡™ÚÌÒF`Ž6sµ|¢ Åmj…8ŽÚK©}²6J)ͽt7˜NÑðUÌ£s­„Q8„°‹’næ“ÒðOëeHóÉ <çâ0ê5è2· ‰Ê‚G`¥OÒè! aŽ ´«Ð^/‹Õ+¡ŽDÙ.”Tn¤RG¦Fᤶ£0GS›„18ÇÐuJ§TîK+»¥ò•È?aÚfu¡d7•KÓ¶V/ûØÅ=ÐÞþ´(¯UÂ`mjŠcËuL$'â$åØŠi]˱¤/ßœªKŸ†¶íņ°vOéSÐÖH¹æ:Nß”¥íæxIÓÖ“bÐ'P%Y…/æbƒ—nL¾´[±V†v˜Úù0@[¹Ú"(ÔÃ(­Æi-Pª-…JmÌÒ–Ã\íwšÄ[mÃÍ… ,A/­>ŽXWJLÒèn4˨W&Ø…tsætíc­±S¶Qvèàvº ¥\ê©©#-kÓ.]Û@x;`˜†‘ÚÆ6Žrp²Dëì|&ý«Ä [PÛíçõòqm¹G¡áüÞ³“(ÑvÂ4혭=ÕÚC)ˆç9ˆç9 ÍçVgIFœ©¢'L”„£â¶öK‚ó+‚óÁy™àüŠ´ßÒMåk¯¦À(q`”80¦þg0¢}aH)˜RBžÔaˆ4 Hºa´ô@±pR’ÿ’ÄNv'“$yTœd#­œFî&±Â5„$ÔÕº6õÀfôo$cÙ²$Gv²Eµ\F-[éb§FRëÖÄж<Š„q¸$—nƒaÔ}wsÙ_Q#Øò.·¦^Á}—÷À•ª£˜:¾ju\Å_í¯©Žj¹º•´çæ #uxrY ȱ`ÈqÄ“I0XC¾,qÒ å²Î’epŽ,‡&9VÉ è”gÂ%²®“Sà9î•Ó`§< öÈ)¼‹Û¼ ;éŠþœâÝ œ™éÒ!ÓÜ‘\º\œùÒ_"'‹”×Tá,k-ía×»ã^aŬ3öÃ×öÃ7šè¶|-Â6XÂíT¹Ž;¾)È^Oá•,ç~0 %qû†n(¥z$QÿV7Q=š¨ßØÌ†ºO<”Øë¦ýðmölöFßeŠvá ôBýiøÎvpuŸx³ò•›ù[&oIb¬rºìÉ-ª‹«©8N# §‘†Óèƒóîë)A! ß•íÓ]ôýÞt#߸]­c¾žoü€ÁnïÕ.ä”CE| ;’gsºmx×0eŸ2€äÙ²âð}k°§Ðc^Ê”=8›Ó ëôo&“v˜ì´Ãd÷9Lw÷‰ÍÝ'æ+Ö;*ƒ.rÿ 7ÊÉ”;`¤ A¥ ÃLÙ säFX #¤ºQ¸@ÆH}»À'7A@n ¼6ÊËà2ùøº¼n–WÀvy%ìW‘: ×À~ùuxV~ŽÉkáuy¼#¿ ŸÈëáoòÒço¡KÞˆYò&,¿ƒCäÍX ¿‡Ãå÷q¬¼‹å8CîÀ*yÖÈ{ñ‚×ÈÝx“܃·Ë½xŸ|ï—ûðaÇGe>!Ãgå~<*Ç—äüü ¾&ŸÄ7äA|K>ïÊçðCò?‰\¥fâlxœÓ1¢Î&г‘«pQ:)Õ…xÎ%Cºj°šÚ²1QœGT^+±†z=xÜ€ó‰r³a9Êq'C9޵XG‚Çð\§Áe¸%)Ûy ë)äê”üL=¹°˜¾‡Uf$ø©l7À/)”²Ã oI‹h,³uhn™­B³šJËãpkŠuìì6¶³8lÛ Ûãpûí¤»ºO¼Ò}â É;uÉ•¯BŽü= “¯ÁXù(‘¯ÃTù¹·7¡Q¾ å;°D¾ Kå{ŠŸsÝ9”6äcñn,œ©ò2ÂA 6òY»ãœVØÜÉó±‰zÉÅñŸ‘Ùg½ÐŽZÞ$Õ¾£µa'˜ä®wl;ñ'¹KKUy…<B~DþøcŠQŸ?þsŠ?,°·‹Ôƒ«à?V´7ºÕ~K›ÊwêÇŽ¦ŽL0õú¦r2ám”À•S`¸³ûÄëéò3bæçı0Œ0ÕJtº„)ºËyK·#Ö¾\Mµ¡éÄï7Æ+Mbn,Æ%vð|F4î(±â.%Ü»‰÷lƒUµî©’¥”0Þ[ÅÏBžBÝö„³ÙS>tM™Má>ªÉBrZ?Ø;Xôýû¡;A?°LÐ?Ü (uÜTRò½I‡]¦¸ðnio÷¬3KçJ™´2»ÎaJÀ ]ÖÄW’ì[E2}èz>xôa0X/„}8ŒÒ‹`²>¦ê#a¶~,ÐGC‹>.ÒÇCP/†Íz |U÷·õR¸E/‡ûôÉð°^OègÂ3z%ѧÀ‹ú4Åúµ- `)6c a4)ådÆÏAKIuŸ—‘`ØÄŽ:jz—+á6'ó/Á³bo†eJXî/¶¥“ØVüuëᾺ¥ŸMÌ™9ú9¤[sI·ªI·æ‘nÍ'ݪûtk…£[ ’|ÄÒ¨u¬QM–BI¥PÒQ(’íó0<¡P–ºI2¿žê”0ü)•yD‘»™Ü£È½L>ªÈ3¹ÏQ-'ãâ-OÑ+âÀûiz•âËJTzE¨”^éÖĽZAô0ô¥`êË O_ãô  Xo…J}œ£¯„óô/ÃR}éÔjØ ·A—Þ—ë~¸A_ 7éëá.=êÃ~}<©áÞ/èaÅò„Sp&Ìöî“L0±mcbÛ¶í7¶m¼±mÛv2±mÛv2É$ç;œª½/ö©Z}ÓU}µªŸßêê§ÖJq!g3jY †Ø+QI´S‚M–wip‰¼Õ“ÀËá>8[BÖ)ëÌ‹KtQê™›'«Ã‘Üâ]C{s“è:w»£j¾³d:voöB¹‘>ñÓªVç"9sÈÒ„Ðú÷!¢ÁÖ  >pÿù³UÜÞÉöÛ¼oª¨ºâ}¦††ƒ4êŠ*uç·fë­Ñ2‰5¡ Qk*ÒGh¹Æ9¸¬ë¹#FnÛ›•ô,-O/=™ÞÊ $Ëm,ij-*ª nœw”H|"Œ6ÁV§U¤ÝÞ¾ôøô®:ÓëÝ@~9NEi‡ÀÖ£å$ºH5Ònöèv=L´”ôœ%u}t¯ú1¸ø1ܺyÞ@!z)mð‰Q$Ê%™&ö ‹æË4Ž3T2ÒFë×+lÄMl‡C1yâ§„„µCAœÌÄÖÎ8È´›»+økDÔùÖ¹ е¬)–oÊâ4¸‚‰MßkN,›åaà/Cœ—hs¸5·¼Â¢‹C‰Ã-.‘‚SÎFçÎØsÑÍwk²À7Л=…аŸ\>+Zfúªð,³Ñ8¾Ú܃ü²Î{D±Æ+Ž’5Ìè»1Ó6ºñX›[Ú^¸Áûõ×5c¸¦òBúÈ &2`7OŽ»‰’êå"XÙ(·×_5ªÔ |Ó/u±šæ±×œ[€*¬<%¬;œÍ¾Gí ”}„dzPœu€_Æ›©êÃ·ÉžËØ¢ºö°ƒß”zNº*D[æ”¶=6iNN´y5€â×eE\ÿ³#=ÌTsæ/ŒŸŽÞÊ{ª¥yÚ•Ÿu݆õo힣}"Û=K¨[ˆÕ÷ ²LgHúe_H.§SußÔ1ïÕDx)‚£àþ e+Ȩbtš"P^{¨ó^(kyöÅ^ ÖH±ÓN²çêÝZŒíä½´ÒZÄ’NhFmæuŸ}ÛGÌ޲„8ãïóÔ`ìÚ¥©Wkm Ö¹z§3KЧ¨è¶Bv$5$W¹å‘ôVÙÀøc}è¹+gY?_~CÐz!B€º‚í@£É fÎ{Œj%?AQ2fËð9Óõ ³G–ŒQúbt ê›ÒŽ^qög÷ô¿õXèÈvÑb̰±Ï0ŸxóÝ4;Ø9øÜ´úÒW¥ªï’ÌYe(š-ç ÄIË£üæ¡ ÎeS:/œ¢!° ]awˆäU゙-löGéu¶23uéûŸv¨9ûé xX¾gVûÛS5ôrœõö(EÆžŠŒOÆ— üô]å•ú{Œ åˆã3žØ+IkÀmÀ‚¾«‰¥æTgrÁnœ”Oe‹šÙAe]BgÑ"íüa‹ë~ȺÅêùÅ:FSõ–ZÙKzt‹]H¨KýNiödþ²ÂþôËú;ñG:hÛ|à¦Å`N¨ûåw˜NÄÍ­ê3Ôþ—T»?òÍ.ëÄ}}Šæ_šã_Zäºß ôì[E¼2_^Â:xV†(° Š‹ÈÝ•{”šC›D÷tüøÙ¿c“4üPÏꃞá ~“F*’Iï¡:ŸéRcÀZ‰q}‚2­žCmÉ„Ó[wê†jÚ‹ Y´±ºÿ{Ë[>QXòÿ '# KÀ3$æ†àªa}瀯‘ѦAþLÃèø™iC•Pn›¢Mg©<ïU²¼BncdÙX°¿`Ž/Aø49Êap .!q­’s?=íëò''i:±šq0[fæÝ/í6û–¶ïóc;¤´þt£‡3ŒƒWóA©ïªæVƒ¼úþKQÜÓ?˜ã’kˆŽpg`ÅN¦ýPjçžè"<`{G1œ…Û½~4—ÒåÓHn”ýº‰âÍwÝÚ1úþö9‘“ò<Ì,ÐQtS‘Ðle#–Z“mg#ÇÒ<Ü´¬¶”–>∜*©\lÙ8åxÖ5«b÷Õ7•ÐFÚ#GQˆ¬ÖtN¦¹Š´Õ2¶°K5Ý’â¹; ¦OYpµíĶ%a¯l¤åê*¸rf¯ ³ªmsâ%ÀïüŽj3¦$i²Ö§q2ÄÔÍëN—¶mùÄxw覥˱ùþð`Už6‡¶VŸ,°2^ )ÜÝûê–ðÌjð5ïÊK³bç•c”•Þ›ø”\k{­ä‹­Ô àÕÀ”¿}ÙɳL/ Ä#©R7Üw$Æ6±·×È<áTžY5È˧LÔ’ ̇ÜåH_’­,³BlVH$.‰a§ ¤qïúQEß&Õc~3zFgur=f¹*’Ĥ¬‚î7ö”v–Ñé$Ãaû3?L57zѥY3j½?{RŒžLÀ!3À5×u3^¨-. "ÍšBötfNœ©é µ-Ý+¡Æ=`&±†“àÌÁg‹÷2²§Ëu2£½Ó ktë‹Ly£NϰËåÊ£1ï £±jÇ%IIûã†kC>xI$Ø”ëÊÁhä`œgHV-&êãÓ˜b&™õG~1HŽa z¤½±Wï+£WL°¸÷å ±ì›IÕ fËKÕ+CȧזœžpøÖ–¥Õ4<àýs–±oÅ|.°?yr]J Ë@¹‚.¬]ü±ƒú½ˆ]ë, LM«mNoÒÔ¶ 1®ýôå²àwr³° ì'‰|G2çâ(Á$X03-ù•ÙÜï­)F\l–&›ÅÛâ6ˆ¦QžxŠzU¸ÀUÖ@u#wõDWIHDkò8¸¬V÷†y}Ÿ0 Ö8ÑÂ)ÊÍ9ã¤pyŸ}¦¯íé9éÊ6Ñ ì(YBįã”E'E$[î½ÄºG#ü½'%o¿š7‡Ýí“ðJPø¬òIö þLv[ÿ郆.èž•,Èúþ¯'‰â 1|K7' ìŸÎÚŠAŒ9¯žþA€‰vöNÕ­qÔ½MAH^ñÛûÉ~àƒìï—}‘{äë·ô™#Ô‰Õ2á%Æù¥Ø¼QbãÉ˦Þpa‚”÷Cõêà?!õ>ÃëCMÕåæ‘†T›ê€o¸ãéo.Ÿ£G$=ò)¨.=²£VŒó£¾šßˆœo ÝdÊžbSXþì6©¶<?LSÙ Š]ý!êPN‚I1A?¥eûo“ƒÎ̾Ï"ñF@³âjH[OëV{õœW®o˜ÿ\ÿîo¼ËøûÕ¹û#:ÅŒòçÂn²Ž¤y‘YÝ3óé²;7)Õ_|MìÖÀÊDkØùí«¿Ø5Òˆg<‚ yM_¦ü6Ñ0Ë$šuÉZ~žzO¤ƒ­UØêD3I~š_¶Àrá'ÌJÉ É°´%°X“|zѶtyÁ"冽¢æÞ¸ÎG³üš?º8M‰ÐU±,nfS‰!§bQ›0GÌ\Æ1Vþ´´0væÑѱ·ú»aî+BóÌ¥ ™!ñ Œû¯l/¦Ì½35}Â&÷ß…°¤3…·´¾ûyûså ½Tñ¾¢É·P4 iÇ”´Zy(½$ñK‹´Õ =õùgî¿úf[Dœ_{"évhLô©½Y>X"þhüv/óå‹ÄNQòm å’Fl »7KZµ"y\¶ÈvyLÿêqgt®Wúf´Ê™¸µQ½œïÔž\ΛEX»U¸ÝßÏô7èZ>Ds_£ îæƒ›%þ<ì{tÎË ÂnH#'lqó•.êç¼ 3WbÐk6××vÚÝ? ÇDUBkµTå>8ä·”toXÙfIÖYYLjþ¨™/ tˆgdìµ²;ÊÜØ« u•©ºÄµÂX¡3PÜžSäªóòœÆvó}FL[ZÒ˜=_Éê0™Ïž^Þþ©Ê ÙÜîø¾0±C £©@Å9îlö^XjXÜÍ‚„ÀUh{},`IE>×làF‹Ì²u°CÀ¨ÕD·‰„Úo-\ËžGŠF±Àîß$àí!]"°¡(®<٠дbDnþ9Bà¼ñ»´ueÆÐ›uífjRþª‘‚{ìµk*‚ )-G»‡{ FÔ³tiššßÜ(Z§ÚMTdÿaCQKÎögK3d!þu·‹ÓÀÝÿ0Wu±Kdrº×KÄ8Y3ËNä I¹Ø° ´¶š‹=[>ûNõ¥fÉZ/g=‰Me¢‡·ä†[†¶ñi¨¥•NOi Û²Êbgé I9V®&>L9 ¼Yro ±Ðëvw: )_ý— ÖîwdÙâŸ?Á÷3 ’¶î:ÆBõlðGÔÐ?´ç™ Î`Å.ðeH)M„pi«êyëhº¨ð--Ìò%Ia#rÊËæµûIW¢iÍ:{Ã\Å]Üg12óç5xØÇš+½2È,í£¨DÅ’].‹$”¤â{}t±:Ð#—Úe³G·ä^õC”Zå'NZHѵ6Ö¹øV¶­²ÂŸ}@Û$ˆed³ñ¸3k1/‰åU©‡ièÆä,o3Ø8Øßg…·eÊ1„Ž]i-[Æ›²ËÒêBІõlcOp;<+5QÞ†eÙ!d°Ø®ò؉ë9ã^,+ÍmLãcÙ†¨„Ê;V6JýÖ1³Ñ©³)ê)Ëõ6CF˜[¯`üú/üv#/ú@o“[#zçê[‹ :ÔviÞ‚MÉâ£ížx:cíæW ›õ±: Cãûè¥o«VSIÓu׋vwcÏ5Ü=?oÅܲ*”ØþÄKjì2­#Æ«“{ߪ:s‘jfû±ëñÌþykrMËÒJÐ]+äl½¯Té%øÈç§ßUÄ©ôÉ‹rŽÅÒâ1…!:s­(å8qc ×=8ÐÔð9mus°$L‚:k¦ùWE&ITÞ^>îÌòGP_ÝÏÓ)«²ËèWÒE¬#˜26Z–.ž2ï|. Œ«RòŒÝ>¤lzb¦9;©¸a.~©jiúXáAæYܲ›©;í^Ï™gú$uL`ÓÓôîšK”âJ²›2&ZŽþ l35êm®zÇš›¯._…~Üâ,6a9®‡× ÎI]gáWz[þmÙ§wKIK’ùIÓ‹ªÃK_í»&Pë{í#‘óóÂ' /¢Õf©|Wê£DîühzÔ@©ò Ž[gtKz‰)¥ B=캨 ž®2–ÒœMQ:— ú“ª@IÑÉ£k:ëÊÍM½Œ‘‡¯Î¿·³£Ê2 a{oœÛ©ÒúœŸ8ÜYAÎ"NgðŠsT6 Û#Ü“”$T¥å Ÿ5˜b,Xy|HÕd“¯a C‡ô6¸·¸îOæWÍ"Gã½?܃J„ü.Î>>ë9²Â1ކ·q¾WŠí•ã@¾ŒK(œØþsddà‚4ûM}žúÊ~ÄhOl¥÷@INL£»;^TJ͘üÛiŒ%ݙ؟áü*Ããü—é<«'åú:°å$žY«™{B° ©Â[šý•:øLÍmê/Œ!Ysœi.}ASdÜ”°Žx8ßñ¨)'ºäuÝÖvß0YñATZ$â}Œ#ÙhÂA» š5YiÂB„ZqäLº  Zmû­Šªàì#ÉŸ‹9ùž¤äÞv°ï5â7ÿøø¦›è4ôð8¥*GXab^Fbú.†]ª"÷ïîíŽjôÈFãŠ@}9I·²¯ÞËÎÖv?hÂí« æd‹^Ç!‘” ‘çÓ^¶Ê:®üÎÎË´Ãào%i¿Ç5ÐÂiO &6®N)§¦Ì©‡ÂŠ}ªö‰bvb•˜%éa>îâ]1ìC¨Àٛ㛾5ÒTs5qÄ«N!ƒÐ5±ßÝ“îe*½RSÂe¤^ƒÇþe6H‘”<{”hè‚‚œT$67u=’ðñÂE¨äv^ I.ÓU¢f6ek¯CÇ ÉwDÌå冒M¿‹$§I ÿ"`MçÒˆî”gÇûMí×Xiü|TiÏÓ-“ëë—ÈËŒñš©H¡û‡§rÝy‰ÖNW_Ï ¯^_#2c²5ô%^×#:S½õ‡J¸SÍ-æúÀšWi_ócÚ“ Ã;©n¦'˜0íDæÉ`&§B>ÿL >nvÂ׳B|ÐÙš(ÜøÒNNyvÌ"O¾úÒÍ»†@Å ¸ÁóŒŠÈ±‘²¿Ä‘ÿ,ã~ów`nÖ==D15[kKC¼úüÞf›D ŒÝ~Ì/#*‚€O‹ÏúÏ„`ñ ½vÕ»Ö‹AÒ¹òå;§_=%þMŠ|»«¼¬’RŸœ4çÚŠž%ÿËjzÆÈ ?BŸ‡Uú}ê&éªxMÍù"ì¢Ò;HiAÓQ ņô zÒ7@L"–\–†XÜl„ÓÏ/ƒ¬—ÌûüŒ@:·#¥~ùAE:ŸE;2S2ëúõ' 4eqÈ/¤a—Å,F¦Ö[ªí-ˆc^+.l}ÚZçG•òþÝF¥  ÕϤ(ÿ«‹qÉÙ¼A¸W–ð·Â^B}ãã€ÃYoch`¶ákÖØÛ-SÍM àSLL[ߘ²K3uÉÇ‘œ“<#ÎÏÐcS}žêÃùvœÕ€z„à„°çöÔËUPÅøñëKÔ>÷†ÓøÚ—Š­¯à*_Zà„ïHõ72GÖ.üš…Çú®ÎÕmM·|oÛúõæõ‹Y—oØvï¢Ý®©ÛÚnÍ æÃÐÀÇ.àÅöôÛõàøÍf„žîŽõŒR;äÒ÷†lÞé:»0šP ¹¸%åâR™é_-ªïŸnÅRÓñ$zÌŸZ?:ª:íèÍDi‚ÑŠ7lÎp›ÞWø]¸²uª|šè2õde\Š/Ùo¦`·C¬Œåv”Ñþ 0ùUä‹&ôŽèeímòíÀJýÃ|­éòµ¶¤²)ùöùeÁÉ»bÔ1yhXG/Šoæ@⮼ÇcVݤµ/ÄãtÍüåfŸ 1 Í©Z‹¢"âÅôpOûÑFÛò+ìÁZo,uÊðjoœà p×^Ê%ºX¿JÑ9«t%¬Óüw)THî¥JVkìthü”ÑhÏ•þ{äh÷7Hw„Ð[WÔG?ÂkÀeþØNi{TJìükIÄå}3!‹ª“ÁsZ£'\!ÚæÓjÌ+5vÌœûÇüJƒçÎ×&kIÌ+™ã#v8º{wâ>ØÁNÆnXRv†µ¥˜Æ?BÎô‹ãbÈ‘L âJ ƒÏ‚ehXG¦Îrbô%é ûep²¥²¨ÛT;«³âÉr™åÛÍ´¹#,3æø,=#ždö™ÆûO6÷æèkœa‚7ýétÛ‚^­éD£Æº`c`\@¡X@ü!¶ Óˆt^™2žÐ1ÂØ=}¼7,^¼¿3ß•â¦v+e?‚%¯ «‹,ƒÛ[÷ùƒd®D¢ÃM çjÆãÀ—Cíëˆ'¾so%té•;=£“mAí± .ÿµÓz{¸ æQðÃïΜb#Z ûÈØ§õk]{`7&{Gsë‹òo—ÒÒØ~g3¬©£¥¼·Æâ¾äï28ÑÔÄP]r(@2ñÝ/O*%qÃDfEq#ЏYu¥²hgM–táè–ÐØ+̃< k‚’®¦úË Ä3cáBú‰®ËÂnX‰§ZجHe0½ êQ"Sqj•ôÀ ªÃ“’F—{‚–ÄD+#aeºdJ #cw:YëÝæß9I¨-Œq-ŠƒÚœ©-Š“ÚšCÚåæ8š°”õ8Z°“š°£òft´·*°„ÜÚõé‘–û¤òž´t.vºãüÅ×#É#øœBfÎ^n¼‰Ûr‡#.÷غßBx ç ÉlsÉ‹ZGøcêÜZWÖ eÙÓ…P€”GÝ2§ì`K<þþ¾)•wËo&ÕŸÀçÃ7:@{2“n?V­ Ü*#Ð5ÚˆÐ^‹—Ç…ewÈEÒCÝc”¾Ïp>0%wG·w[­ŒÍãÅçbicŠã‰ÕïÞPÔyþˆ îFIº92vcfre—¢‡U°7?ÑC¥èÈv"ŒL†Rª½2"õ]sÌ€ÀÃÍ:¥¸¡Fø¿Á€·E¹Ñ8y Ôa6õ•Þ¨¾2—T`,.‹¯àÁ;ÆN pʉù'z£m‹eš ×Ü¡Á¸½ð¡öéU3&2§yé©¶£Òd´Ûû*a«}ô•ßk\MõÊkçÚ³uö xg!ÑŽ<ßöL&˜'5ƒD–ÓusG**ûûEòžâ Z£V¯‡íâ-C}¨-ð< ù$¦¨îEµŽ¸'–ž´•’ÔÈäJ`Ÿ f(h+eU›N-ï=Åþf¶¥¸² °hÍ’Nßêá5}`lA\"L˜ÓžÌjM•?°=¤Økn~Ùú–½•R‡1&Å\S¥0ʨ1J¨9VWî›°A©Ih>Ê=ˆÈ ’_€|Jã‡_. ­#Œ˜µ ¹Wp­ž(±*T Þñ¾ö”#ŒÊ\üôÉÇØûå ׫FGè‹ñ”Áz~ô“êÇ«ZÍþ´¸BV¯ŸüàÀvõ9l7/X†[¢Ù}¬æX¿úúrú2dø~3ÍNºÇÎû˜ãÊš³ l ‡úá²â =ï´2÷û¤ÒR™Þv¦\|’㥧®Ø «‡ž0Œ/r¾sö'wô…Ô”Ì76+ÑÞ3Ÿ¥S¶ºp÷†ÜŒHÅ,lºî›p%‰hÊ@pî¬È⛃+^æWd‡UE%TÐ÷ºR;-‰Ã)) H²€=› UN*UæEX¡–VÐU¤T Y-©•«( B[aÑ]à¨t6¥W ó_îîMš"Œì!X“«V»5.¤ÊP&d5´c8Òx6 ¼÷ì 0>t¢ƒ Ÿ¤®¦\4¢À'ÃØ¢R¤ò‡0]2êË»æ$®Gõ{œŠú`ª[ÄKQ—40+DIŒIÙ€)Ú Gv‚ò»’6.ë0êöä`oG?#ÈjÜx´†bo¥ŸíÌV&hÆ2á—C*O0ªÐ©*Š¸Í¹|ÛG°rÍY¦ØzS`©Ë‹Ñ2ö¹Ð} êH1")ü ³Æ5®&G%·bŸ–Úa™ 9úaë[0+Jëpˆ~ZxÞ'\md—Kü ub$Ä­§N‘ ˜9ë¡ÂzëôÕÉa͵!á bU¢±´zœr‡Õ^~¡”âf®¡òž £Ã¹ˆø8ðõaÚ:ç&…u5³ž®Ä€“ ¶ÜÍú6ƺÀ_Hf á‘Ú ³4Ü¿_Þ¸•öõt½ÌÏtx½Óˆ°Ë¯ š±~-) )‡†ÿ¡žQ¾Àl—•F¿Ðh—þ ¹Z¹{ þLä)²V@í¡¨r__jÔ—TÆŠÏ`Íß]Z“[0õ‡, ZXc 4>õ óTC™­ß½Gæ0æÆæUU+XÊ }TVÀf ÐE`DZðþˆÂs€;¨ð e6Ú.«~×:‘3#4nfs£¥74H˜é5‡°¾0sC#°mj`»ønf¥BÉáFÂÑjm0Â-ˆs"«5†bå‚=&'jmZ㔓øë™ÜúÕöx÷ž]=éÿèÕ…è‘ÿÍ¡‚\“šÚ_u#ñK¨S=T›Ë©™”Q5ëHPÊâÕJµ—Ž,ïs<Ú™°M¨ò/Å¥ß"ÜÓc­p—[Òúhl‚«¤Æú]‘ÿ^މþ(·ÉCw¬ÞZÒI½–œapÖDc&Í–hÞm Ó’Aµ;~mW,]ƒ¢¶·zݶ‘Œ™§ò®ÂˆkÂÓDVýÖå鯝öß/ÿg—GX³¥ÒkŽG¨ Œ]ÄÁgÆÚ[‘ùy†fýK7"b9q·™E^öHaãêoÚ†0MóËRÛ~5r ÂËúP”Æõ á™ó¡ü|·´µQkѲäâ†./ƈÝÛC˜}m™Ô£›%W Ë©+`„Ä“ ‰7oú6è(M9,pŸµðtÐsFÁƒŽp¬—ûù ¾@•´bASo)ך°?;×u—Ä×ðM΋n½Úµ6í°†Ÿ„7?$*š…=ŸãKDSÜÐ*ñ ßá ‰=ÁÜå@¸{eVŸ· [R#ÍÙU.T™É;U+rÁwŒÔ /Àæ}Ì'~=ŸeÜ“Cñtñð`±Ò½’e:ð&¨Uª£¶íµ)“mÔ롵¬z OëT ÷r+›µôrº’g@þ±‘—1Ýîvâ”2câjK iÕ•P··rb‰¸'±l1¿l »s¾6ÚÊç Úl–¸ÁÒ_x9Ø–XÄ-Úúër°²–âÖ®sõ|RgÔdµ)á©Y *,)Ó˜- |nÙ_„2즹ìcn&X·òÉë°mRËë°lr·ŽÕ1–’d÷£õ•€Y«¶iw²\µpw¯8T.K»}ÕÃfÏ%›¸²/³c]hLø,)ýÆsq«Ü4b\qSDÿà*êšøB?¸RüX8¸³ï¨” ÛyIkxMd1 ½0¥Õ²˜­_ôHåû0`”÷FPi9eÒøø…ÓŒ9WܾؒæøÂL¿¬ß³QµVÚ”hþá¡ïJhùý;mƒ‡³üoR÷F—OgÐ’pÎâUÅ^E“Š)hÄkyŠò1ÖØ(¦| N瀃~h7SÁl£óë8b g“~Fë‹vqÅ¡|\wÄñpÕIé1Ù®ÁÎÖÕ`!£ñþó WªRÕã›q–ô6ÀÓ°î©Í>b#˜é—6MÇû·-1V:Õõ£wÑ– u ,úøÈ›?µÞ;V/f*o¥yvÍÛgæþ6uoõŠò{Zù(2GŒæ¡ýŒ4â&ût–~yoÔkNtÁ›¡y1>k£"üŒg=ÚÄX¶èÅ¢Œ½*¿ç{¤}ÀÔ‚ö(5iSáY?4¥nbÄ/·©ÛT¦Â…OL ý…¶òâgÿ › ôcòŒù#5U扗žå8YôÈݘ÷ƒ±’ìÒ)¥'3Ã5’¬ÖPbT#^w=´J×Òb+%“imð~6 qn—”i%‚ÇO´Ô †i’ã‘×oÉ[ZväÔy…mj|í¨ƒuÄ$8Ɉ-Ýy¸úší àÉ`-ƒ1g2³ÍéX@=3kW4寥éÊ1ƒ}ôÇñ c&!(«tA ‰èˆë±ò7æ¿þviŸ½k @€€ Âýg+œ©³³‘¹éÿZ ôlÐÔоJ»xš¶Jš'ò Š]xBéÕ!ÐTó›Ãíü eò\xšuÜÝ'nžŽC)Yĉ3± <ˆµÃmQ•~[Ýë4Q|õ½¢ºßÊ›ûwþ?Ùñ¾á{Í~ô=Íæù8î#4€ºCšÎ…ßHó0=E(ÀI 9°†k†;û#ñ‰yÃú‘ä÷ЧlÝùûÃHV4á¥ÒÕ£2ÄfHFÄpÐ,Žðƒq%jSelÑ?K”à¡á0•<^]^ÞÜÞž_\iÊcb3’ÌÈ,K%H˜(“$ã®”ê«åÿy÷]Ã¥CËÉ}©¯~Ý Î A\Xò ª@\•ó¹Î9MCƒ3œr§åK5D¨NLM1€IT% H¨ m)z…T·*.õD¸ x*2l1çÿÞ5BdÉ?žݸȄ×Êðs¦²„ÆsÛ’EHωߖëcÉÌ?–[¸s9jÆnkLhÏÁi[T߈ÀãÙ²5m: H!M]4-E‘igÞRŽEW+_Ã.,>÷Z-M‰vç);\iOª_\ªL?:ßø¬(®wöâÑà‚g»ÜÐB׿P]\IVC]×í*|°æ íúºƒv´Ô’o 8ËÎlSÊ`£¬IpGÛ›·‡$6äxè‰]BøèŽ :*aØw7Á@‘ZæÛ7ˆm2=0.63¶ùÂLÞ$¨m($§Ëúê›!•±¶kµXös‹uüiãŸQ:Z®ÌùìØŠYÞJ£“ùZ„2º(Ôø–k8#®ÙBâ"êaÁÐnb–š\Ç‘AÇŠáÚ…Ïb>IÜ¥Œ5Ⱥ3µj¸fŒõY¡åùÀ`n„}Kˆ_aP6<–ÍO8k”1¯å®rî‹gšº„ŒM…ãšB5Oõ)FiÓѰ/ë äÏÕù5ºèßÒjR:‚èöS?*Jc^ŒúçÝÌ—P/éB}39–ÚÞÐÀ1…h~†MnÓobÁ‡Ò>Å™]Q߃o<¿ò¤µÒw’™0ÕÏȦیê5ßm^W¿,¢WŸ ¶ð±qØïìÜÉÃÙÖ$#þJV€áCEÁ(}8M?¤97ñ„mw çh¹d‹tO¦î¯‰[FÀœÒ€¡‰dˆ„îçÏÞM÷3°T‹Ô³$î"›QöÛ3A·ï )œ±V~£Œá~ìùaÈ/FPlOÙ¶~ø›\¿<°âÚýBýOª–Íøš*·phÚ/kù/ôøfõOÝIU·„e›Ämy…çWt4w­¦Š¬þð¦n‹>Û¼²-ÁÙéüŽÄ ¥«Ne¥cK$‰±ô£ gYS±Ê3'bcO‹{ÙP,å¬ g=]¨’]P¦×ÅßÈ\CR­šçxm‰;>¸Áf }b0uËÅD-y„‘?Ð'=冭SýîÞÜ:2òƒùØâDìH¯Šv-ôÓýâ½³‚ÞÿöO¦K bpX—,þê½·ëÞKŠÂÅ/xW¥{7­¡d÷EÂúMþæ;LîDv•_gŒR›¢ 9àÔ)3[~ÏuøTÑ}0§/8ÀrM 5‘„„DV^Bæ#†rRw+,¼Fh¶z†ßš1Ç-AVe/Âaµ¤0϶,ü‚]«‰Š*ÓgÞ>d Hn}ˆ¢šH澬 ‘re”GÞÕ·OÞõ.¿--`/¹ÛöÙ÷eß»ôjá…4v2zÏ<{˜kÖk¶U…TÀ…~ärˆj ›½u{Hû ¼[ºÞô.¢.çš–€ :aà§ R E¿g£ÁD&%T1Þ“IËöGJõ÷•ÿiÓ3TÕ·‚Ó7¦ñ®ãç!:(à ®ëçÐcn‚ÂYÓ‚Õ“À¿B iv&¿éxüŠÿ?þgÜsŒš­3ªš_«T“”æF¢°ÎN1Éœ‰N5 U¸ ²œQ‰¢þ­æ†a&ݺ-î@þ ~ÿ¼’9V/#)sâLùÏÃ7ö/<ËèÛCŽÝÝÜ®®íbKšœõŽ×\çY¾SÞÖÍéw÷hÀǽ.–u<Ü>Á1à¯ñð‡1'–(Í”'Q¸«1?Ú \äò>c¬!Ut'FéM{4*s. iP’P32jª,af´25]‘ÈT™ÉÙÁ˜%6)³8ù’ëëëÍí­Ì|6ÖF^<’Tî>ë·øŒñ,&´þ£.”ZçUù,O'¶ÎVQZù³ãNeï]1p®e]5Ò} òMþÌKÅe L% Q_dx ï]“rNL›ÎK³H&ZÇÃZòº½*"Þš™À´º±š*Zz¿'O™úˆ´×/‚)³=³UÉRÂ~vÜ7Þ‹“Ž4ö«„Nå;a_rŒK›Ÿ³E wVôk7YxΫšUò¯¨Ÿ A¯³P_bAþ{éQÍ¡u(WÖSÇ1ÁþÕÜ} :Ð_tA}âw«§ »'A»çþ‹}I’&P>{i{›µE–ìo2ñ5ö^§)ˆ÷âë#Í“îø¥Ú¥Pì—lµ}$£âÒçGC^3$„5°¡yøPؽȮ*å…ã‰4ÂÈ|„Pz³ÃBÒeÀü‰kûÖ=.˜XýaÄlãí !3C¯T6ËxÉSý”.1‘Åt…–Ö6´Ë,išA•pœ›UèÚYÏ\ÀgJô eû*ph1`ŸøÞ~i™±Ý„¢[G0úC?žÏÕ{glô4>z" ;úgB§ê1zÐPІ#î¯7hŒ [‚ÎÒå˳Î5±j : Ô½q~ÆÝTS…Ú–ã|J(U¨ò²ø_„ÃF}Ì»Tß3˜—ˆ'(!ï1å7Jïê4D¦ÖEÔ"–×Ìû¦Öró>ÿ­é_ôp ¤ „î?Ⱦ¼‘­¥¹ˆ½‹‘¥éÿÌ(Qš”DãA.&!â¿Oig‹`­%§Ð&'e$«ž!]I®°„*ò/Á•Ó}õK¾o¥ášžâk;Íö.}=~>Çþ¡îm$/õx¨N‚:lŒ&ýXïå¢ÉS¾<{1]ôèrœhàˆÜcüÂZà¾Íf×û5¤6L* x$p®1£–)¥¾âÎÖ6¨´#µƒƒPö´›ßÖŽtÒ\.pŒ=‘ˆŸúE„b͆оÍUÚàáÄò,"7iG>'æ;’†Û¥0á5x=/Ë aÍ—%žŒ/t¼îHG‹^´…6Dé‘»B¼­s¸å]ð®¾8fóo?t(Á$ƒ^ç PB8»À ÷±CtÖC=án‰ð×ñU(ÎÀ*’Lúì¡o0v{l j®p(1fÄ}#ì}ìU" ÊåJåÐá ²µÑ –ia)z»{÷}]J&²Vêä¼…'»´ Ô0U?J•—ckešƒÖâ‡DU¨bÕ0<å륊°ÊBõ2©²Ù±íÓäWÌ·D$¥ãêEg?ÀåÒåœT“ëE½«x\çùÑví¢œôù =÷}ç±îhŠ®½2¨ÓÒñš ¦kÃo:ÑÚ¢†ž†7ŠÌ²Žó¨G§Ž@Œ”B˜ªÊ+£B¨åJBdÅ?˜ß)ßÓÈSñøSHE¢ŒOðiýÝbýšäþ¸5O£?"¢!9æÍ2zûq9%Ñ'peÀY4Iƒ–5úŠüãÿRÞ‰~ÙNêÒ Ûi19X‡ïÇx«3’Aü« "cÈ6ØÿC4u°ÿìÝV4²3µùoôUÚ”DâÛ\jñ¨Zé GÖ©ï7šÁiÆÐùÁ?®½Š#ÅA.%ö-m€æs÷ã“ʱq W_ßìe*×Ù èééëY̆;—4&fM]Ð4KoDÀ­4«YçºÎn¶‚Óúˆ4p^üÍo$™¢w.î §Ý»ÇHF÷¾ØúKÌyMU(,Ï“äåµkËÙcoÄCUV<Ín¬¾Àk7³û—pÓå+T/3s¢¶.L$ömDùÌG­û$cÃ'{ÕÎK˜ÆÒöÚ–” Ó|@,ô_š¦éj9Ò•*RJX+ß×3õÏ«}Ï_µŒúÜhó ñ§$ù5öPªãÇþòÚõR£XE‡dõÑh †cTÅÈß@Ô§Ò}jUê_pgÃõ$Þ‚ú÷ÔòȸåñÎ)¼/ÐÁ¬‘1–SŠ¥Ç ø\¶*±ßÍÕn¯F ÊäQªñ3Ô+Ÿ¸ÿš/ù*ø|‘°E BùóåddkêòÿjUS4?}˜-ez@–ó1†7þY)ó| †˜Lÿ<“£¼óùfšSTfH»‚áçèP»E4…+Škd攉էøÈ©¯w‡­VùõÇcö?ÏM®Óį¿ûæ ætATú6ýJ²û%?ÃÒÛ‘Äótõ“E˜ƒ4â# aê¬<䛫¤ƒ¸FO2eÍ@lè¤yá™&œÖnê¹Ü윌¬ébæõׯ(gêÀÚ':ëmfØÔ&›ï’î&^â¹TZîZs® 5Í&î_ú*˜f¥‹Q`1±-Y¥ÏblSW t<§È¥Zz`Û—úy³<žöÊDh¸ZDÆ9’øçÝóõÔ+åmª+ãZÍ’î­°˜iÞš=øG`J“‹†®wëaFZÙi5 ¶—[D‚vª­ý„ö8&;Dìø…ÔŠE¢R"ø·á }z…‹©y×{¡HÐuçEÝN-H·Š|Óu#³ Ê…õňšuJÑÏØz<º+P >ÜžHH[×z;÷•6ŽÝðѸçñ4—×kìÎ(Ç•x”ƒ"H ÍU,üJ}Èõ©çè0 óq¬In*{h,ÌQc“‘äÀÿµ4F€ÿ×Cw”<]6<2C‘ 508ÖÓÄUw$ø‹{g ØæÊS¾cqң冀fÅ'-á@=Þ]t]Jµp—»|—‹‰ÅÛL !o’´¥cЬûޱ•fsÚ©wXÓM±7ªs§á£Œ/_µø^-¿àS cÄÃõLFÀâœÊ _©r¯‰H—í+À–‘5«se¶n*Rs{´hüˆm˜áX°Ž¡Z Gáø²![nkÖ9Æ0T¬Ý22µLgŒ6êp!8¦íwìù ­2鱎›„Û²úUuË;E£ Ž"¯Î¹ÏϤ^ Ã=ª2|¢åÑ:à0~PÏ<Ð/-7£ ²UáªÕüv%sø›\F<yµh«Ïn®=±µ8ó}± i›oŒ£×n3óÝ<8CØðGÖå,Er8@"ÿQ5wÇ?«‹òjÑ Ÿ¸}dÝY³Çx`9Á‚TF øèîÌhU2+uHd_¨\g±LQ[:—]…aÓn}h8ªTH‘b¼Á&¼D5¨‘Ê(hÜ@Zv{³ŠÓ¨ðÕ¼@\‘þ­|{wå¬ü„aðpó+ñ=“¤ºACŠíGÅßÀ%¦èÕ$œ ×(å>ÁÊ+ÞˆáÛð¸gboIíÀ)¡[æí~C×Yòf<ò®Ðj·.ûDP•Z’,P[Í«V7óüA ш;hõ›Ó¶îUbÕ…:è‰Ú…Pûлõ"5aC¨Ð˜%(9ÿ¶‹ŒG'¦¨Aê…#žeL×J×ÑMŸI»I½¡5Ã. …úà³½XñêýQÏŸšu—'aRSS›ë|¶ø,È˽œ˜CˆKÄ6BÎÅY·; Ô¢}…Ižf/ú1Å à0 ïA>V!'În¨£§\×ì/ƒóYzPþ±!TH¤ütŠ9›rg3‚©ª²CJ¾Â„}cw•2 Ô]Ðù=¹ ByÛ­üˆ'ÌX¯9â^–XR×ùšw˜qþ|R7$O4÷åüH%¼ßºLöqåÎpEÄÆ.åâU 6ŒTVœò<ªHš $ ŒñoHô  2%š‹p=¨ J)î¸\?Ò~ÝJFÉM-"5Q •üb%÷Aá’î•kΛXÕ‹q6@âŽ(·¡ø€3ô‚ÊuÛ—Ÿˆâ&S—qî-k4 xU…8^ÂÕ#Ζˆ”ì*²“<çVzϱ£ÿ¦¨àP4³ ŒõŠ4J)Ú³Z z”kŒ wÆ´p{Ã9ÿ+×é‡ÑvuïöÈvå…cûúÂnÑMÃ~tMððrëåÞE¸ù·Ð¤ó‰à?~;˜Aœ¼‡áE¡ü»¤³éµáÈIÓµF]Eý^ý4]öcrôåˆ =Ạءé¨à9Ø\º Zð- ºñ§Ÿk×±p’’ÉmBÉm–ë0 }ËEUõ•O„++êjÒ)—¥|ά–Ó*¿½N=_‚\ˆ5O}§:Nsw;N·ºþ>úù}£û½"÷¼y‚rß'£šsЄ 7£zP‹í“POe¦2ëM_»QCHé÷ÎI#Ó™˜ØóD(è3Ïäó!SHC̈mŒò"¾È!J¨vny*Vê0ÝùãÒbµÓ¶äîªì šáñ¸>×î"˜QÊäà`M8¢äJÏ’Ìœ}J”Óø¨ì*ô½ÊeÙ4szº¬ŽîÖ,^R>ýn§ø.=Þ%Œ·d?¤§QyÌ:Ïf Âi¤<©OßAkk“ÜJe5Àb>Š#‘• רÎ:¼ò燷'pöÛÅÉ5£;@­–|þcÐò> ¶$ÐO‚0ñ" 9üWŠY»¹O«‚cÝ”lW ôyîVQ¶[¤²\ á¨'ÓEÃ܃œ©;•ÓÌx—¹~nCÚVb^ît‡¨-³”z‡ªÑʳxv‡Ð}ãoÞŠ^`Áuþ„¹ñ˜ÛÅ‚vû𔽫;Õm¥Î|ãXv¥¾ªDhÚ Mí)86žJÖkéÍ–ÞCZ÷|g‘Æ‘bÍÔiQÅ¢’Ÿn¾>/s ¦œF¦AÖñ2³ºOü³"ô¬¹iÂJå£.¤¾ ö"u)†+JnÓÙ‰÷¨Ùw¿Ê dŠ·Ûølôؼ#ÇÚÒOá*˜§­mP<àÓ—£©éfØJ½Sq:††ÄÉlJ7·R¼f[[Ý‚cNä}<8NÝ“q\HRqɘDƒ¼ïZÜØ %Ò]ÒÉjô%U/´Þ(³šîø»Lw6° {¢?wcoçp”C)Vhé2â[º#™?)}|ÆT½g&݇NïrÎAvÀÈé¼õ+sÀê’áUcHŽç]ÌÏ!9&P:¼î¡ŸjKYšøÜmãÏm-Fjêf»%ÙPS:5ÿ|öëÔYöyît³(ùXI–\»-BGšsàüêRòiI]^*]þD‘(ɤ³Ð‚ɲœ§˜QŸH;ŠÉodåðO]Lí8¨<º0ÐsˆÚ¥<ã¡àpfO;t°âU+Êøòéõxsi7`uÕã<¥¡³ÞTá´}ªû¤ú[¾^°ÕlFÛ¾Zðª[BºLʘlÊeÑRLüÄíóèwýÝ o¥mÞ@Ò†˜@l)nGDîåð§?~ ™Ø0Ê”T_­O £Ôí7i¡; t¶ ÎÌC¿k=ôb;‚Gïoæ§±7å§sÒ^ š54È{Fí†ýøsí?t óž$[ĵ¥'–©b%ú¿ÒþF7!?Bhí”5YÛ®á­0­˜~슻õõD·šVë‹}p¯Ù_É:çn8á¼vÓÙÎ ˆáÑ;Ÿáy(éݼÁä–Œ Yòˆ§Ÿba$³ovÚñêhŠ^ ±áöÇz n /%h9tåÔ†2Vý‚1} «]Áµ6R¯Ö©±ÀÄìU6=Uñ O™…1Ý@·­*‹¶muø;&¶^5pµÎHÎa–*³^±õñO'¦Ï@ì¾Â‘ºŽo»t‰>øŒk쓟DNvcŸhÑ–üq–'j^US´äªÍ0;¥ˆzo²û1Øo+ˆ½ª¦Ý,ïË¥w÷ |bo²VÁq5ßäûßomPl¬;%#^Á_(ûüÌŸ«™ƒ£¤ÞÝH‚¿iöùuÀùjö›d· ¶ ríþ^yüEjà'¡zKÆö+ÙÍpø6Èývšöà[á™áùføn’ʽ]ôð…m©!°Ú€Lû¯^£Ëvu„¾È-á_•‹£}¶hDPr‰Âá„à~ …“¾Dº]Ì`/É„oàæþ6žV˜†PiÌ÷ÀTvç•ÔÜ—–G€° .Õä!¹`(º¡´Ä•³)¾"²Ê.Á)B®DgZÅfš‹ø—‹« â-•Σ¬!#ña(]rauñû›¶Qü ÿ°-ÐŽ%qý¶ñ¦§èRôˆ¨Ò“ÑÓZ7°øþuŸµV <ì¿^e´Ãî3^£ ]wµ€êtÌÁrV½Sm{‡ƒ¯!l„»Ä܆¶F‹+P>Ì7ˆ“Ö†Sé Å–úRÉ-ƒybÆ_zC¨ÿØ·ãÇÛò>\Õmxíô»þ×xª2‡Ûùj…¹Ôì§ÆÇ}¢5ëVQ%pP‰‰±ÇU6fƽö箂‘ ðÝþxؾ¯|ÕÍ­²Ÿ#+Íñ€‹Ä‚ƒÆàtøåˆŠ:àù¤ß#»wN×0ލ³4Zçžæ˜ÐÇ“/ÇËýükóXF€¬çŸJžú§’©þ¯®ÍÿÎkÛሢþikÉ‘UÊfKC7O$7¨SÆmÊgeˆmÁ¡Òa»asiXMpCQ‚"¼Ÿ€=À"À©Í;xP!õE=Ⱥ^ƒ¥‰5O¦8O?flVü¾'oArGZ8Äì‰BÁèG:x†a£'£5Ñõ"‘¬ÜE9 ìE3OYº©}±gÆzò÷Yáë`áŽÕÒVÕÔhŽ_'p¬<DîS;¬€V¥=)tÓ•=-„ŒéVk±V7š› `rÎ=0iii‘8 ûÛ±•«~.©ªçŠRâG×½Òª]ô0`I. µ9ƒÃ•65WKì5Àõ­jª+±áꚬéÊäžÉx¯&©#Mðî´C5Z m‹¥6œVÓ®u+i²*±L²ÕJî£HMÛþju«6p9r坯˜…!é§ú‚ú|Ë%’fËuo@ŸzCë¶å`)S½ôõy­šàñkkVê¡3ma¬¼=õ}oÍ tã-²Ug '"RöÍ–—-kA©ŽØú9v™if´t_Ž@ÿ¨m±Gÿ—€ù$+Ô½’q™fŒêr·pΘ„8^Üï0}®!˜lÕP èYíÒQkZm®±ÜÚÆ¢³ ˆBÖ^ªƒ·°»¢êSYLrÉÂQü1åš!)z¬™†Íæ‘pxÀ7IáæÐàqÎ^½«NöÚ²rεµÅ±íâðkö õƒ¸–‰.ξ}—ZkÈz¶i‚2/9œ<²á¢FõrdÊ<÷†Ò/½ Ht<åÞï,M²gÅ /šU0ÛmBñÇÉì‘Ê(ÀPz\ÅãÆ—Î\q¿B¹dóÕÆ)O<êÙ°½Á9 ünFê®Âq”Eu»„º£½ã#÷(rÛÂcq‹…òŒ=n•ЧCµx§‡w6zéõ^ÒæÞéôØÄ{­¼a|„OÔ˜’؈Dž¤KàØ˜Ûˆl†·¤ú ÿÙâ{≺1ãkg¡\Ëß7^ðPò‘Šš5¿ç<ü øVenÃ=z"Kz&®ÁZ“Iõ+dNCÚ$p,Ð ´*mb.¬ob±®Õ<´‰tñÞFøjº-€Ñþ>Fƒ`¿Á9^8)€yñ+@'q4ž6€ËÅŠSŠxO›üçŽ÷Ã3LòsN8ç¡BYæœJt:ìZÑOÀRó˜ÊøF>{O~¡íþ“€zûYÇ­|Gò­ª]Ü.]™÷ùŽ4V–õpvtŽuBv©ò°Õ÷¿s@;×F„ „íäYC[RAGGClàhèl÷_¼e]yATÞ¦m×ÍÎ9©åH¥øVÊå^)™dƒ…âÈ`0™èÍkƒ4k³¬/ÂãÛ·ƒ(„L Ò7¿äû×E5¡B`7·Û ï?‰ÜÄï÷Õv‡{iQ¬(GbŠ¥ÆÂ³RŸ)†k ŸÂÂÒ±ÂRmá>€Øæ½óŠy²Óm\d‹s Ü³ÍyPú-”IOÀTO.l4ˆœúX ÑñC{ÛX=‡Þl¬™¶¿-È7¬ë6:V6Ã{ï5kO×—X¹Û$á~’r‰M!›×zÛç© uc»zêÀe¬4ø^`èXgËõ@Ò~wÙ5g›t§-œMû-(ØÚ’»oóX0‹X¥‚ !œ%T⩜=U-ƒÇb:{ýÛŽ ×tþ¹5”œà-•*ËÞc—ó„à’½ãºzdG»®`»±Øy´˜0\«iâ|–nHù3hã=YkÇͰ¾Ùè‘—™X-î‚{ùhëE(.àPT5ûæ ½zæœÏnÏÜKý+#ÚbÁ¸(„0P[A&T%õ‡Öõ±Ù* ŠP™²jx&ieñ}JqJù*|e!I ) ªX!ßÛA%ÔcëÇ;•pº›bä;Ô ©øu²»o?ÉFüxýT}Å{UH©;ÖNʸ>ÛQvÜ7ò^2‚°£ñ6¼·_½4êaNö 7Iq·o½‘xw"Ãå?Ñ8ˆ©b¥6 q9B 8öFè!ñ‡Ð*0•„ ÔtI6wpIz58ˆóYÄ<‹ù΢ĞËl¿6Z]¬6q6WÝênµV)ãw=cìªfqžBÞ»ñ$—Ü!KaÂóé ¨—Oà‡¿5-jK;[OVèXÛÜVZØØÛX]—jl¯lmëu‘¡ÀZ@Så~”ðmIßt¯HØÅ!<%<÷ææÓ§„~õ”1 Ç{=*DºÎø7ÆãkÖûdéTSpR¦Iü·ÔêÔ:;ßÓžùL–…¸N¡&ßþ”c=FØ×‡1U•¬ÕGAÞ$Õ"”ø&yŠty)VüÓSYÀugýÐ˪ähI!*åÊ*4YJXªÄ¹—‚§xßgÿ›jºf_‘§tŸT®Â]gá>8”­Ùê „~Õœ‹U'ÁS@B˜ žÌbuã°¯ÓÞß_\I v‘R …å*ÍÂY¾Â]k0î>:ÒŒ•',Ï^NöW@èé½2¼¢ý33OÑþé¸qŠÇ@ñHòA2‡·Ôx‚ÁQð­Ãm¹59¹ìhjßš}vwÁA»{nø¾Q•OÅÁ¼»Âд»ÆHu–OÍ'j|Ê\zPØÒn.äXK÷š”6ÇÓ>×^4ž¾ÕÜý§¥;¬Ÿâ}khßõÎü[·yñ–ñøTu˜±)uáÉœOjºqÚeõT„57ó4j+¨—#ˆlîKÐ4®”2;ƒKç4øI"¨x©}Ðkà ƒ¿R‰ ›5-ŸiÀÂ-ÄÔl9•å,r"°dr>pRJEüŒHZý¤¯c®þœ6‡áî aÉØts)ïQn5r 17³ÅH“¿:k\$Yý¤7³vD17eŤè&iš,_\Îêšq©“XUZH¿ü½ûf·š›d1œu?ÂÔDÊ÷˜ë|‡{2ë®ÊåFÁÁ{~~)Åíq/ýØI&ÇYN.G#a•bKú\GC)ßŰaw¦!:LÉêTd§Y iLí -5ºm$ÿ!w.ªìwÜ3E°Â©¹†=p~›±“@ÔÐàÏÿRùge@?ãVÓé¦1ßÞo¼ø+Òá#$}˜u”=/íÁ|l—óFÊÍwŠö;ØÅûD‰Ç%d ÒÕÍM+÷Ù|O;I¶´¦÷˜]º×‘ƒlˆ{?j)ÙP;bJ~é˜Ä:Ê z‰iý™G{ v=m]Jä’Vêâ%QXäãˆ^¬?à2 œH&T·š³,? Þ-®ž”Õ ùã 3‰:˜s‹):cØ&ÎG±ÿHÚx:s KB×ÇHÖ‡hÿ¶ŠÅMdÇUšêë(ý·°8UsI‰æš°q¿CÂKQâ£)7fµâ~ª? îj3tÄ EI ;J&Æq9à99~i65b†‰'›u\8r=;n€©&Lhg[æòŸÔ¬':·D»ë {Eq¤“pûˆD滚I‰;øµô9jâ-³ÇMüY*“´¼`UÎ#Îñe*ãá²ãø’'ÐÖžz¯XºžúÓNÙ\”°!$*Þžjʼnéå\7͸ۤÚeײœŸåöTrLiŽ`fª›ÈVU:UrYÊÛ]JÒinÃý¯¹9~”Ç@1„BPWEè°;b}ZÑ€òu#¬È!GÔ¨¨ @¥d=*zDY 2zá sÁ, ¹ôm#‹[ë…VÌZ(§ŠTŸ RœÆ¼:±ž{ŠS=´l5 +rn‰¸¢xÓ–)éIOÚå‰gKê›! ¶2K_5#&aD.¦Ó&§† šDÐ ‘ò ‘áhhO2´­Ù?;ü¹öDüW¨>µÜ‰‹qWïàF.ÅTÍúcû€ór˯½Stfl_©Žp…}W)OxŽØòÙ6ÚÀ™lFìQå›»ëSÆyÒÖ‰~uÅí]¡ # ,ÛV¨eKÝÿ˜ª°§¶¥xÌ/7.ZÝ©–HS¤ƒmÿÙŽŸÙ@åKr¡]¯p%ÔÑŽ§zðK‡ôF$fmš@Í 0å…yb¨3þº|p“¼Y¥I» )ŠW¿oF §s¶!›$3âØô÷€AWzXÑÄÿ‚ë¤ûŸ)TÐÄ›è™zÜø38FÃþ™Ã`¯fÜR¨¢M·Ìlr¡‰+(ŽJ:ÈÆNj"kXtE=&ðtmY=²º¶MÞ(‰7äo\4߄ȖöŸGo{ä~†À(^6º‡ïÆ’hè?Ž¥~ñ¥Ù€Io¥"e§ÙÂÓɨ…¢ˆ3jãšfðwÁ¡€¥F†E¬’ ](Z#Sü1¾G…:Ä<ú£vZ‹&¨vOûyZ/ÏcgОa1÷û(ܘ¦aMä|3¼ï”ù«+æ¡=åÚj³ƒX®¢p-¯}…2ò ¨85 O «‰Š&Âa4dBux§˜«ù'‡Rv©g«êhKÍ7ù8Ú0¸ƒ3¨«çŒg°¼ó'¥<ª`s‚—ÒÙ+¶ p²$º0Qã×d©¢*)Mu‚è^ÿ’Šj´Øéª€ž1 «ZܤåRº‰»]Ú1â´y¯L>X¹lºl“žIŸODÄÓÇ4Ík]¡R÷È‘žË]à;›Ö÷à[(Σç ï 囼ý[P¤;ŒCü7µqìZCxÏ1Êéx{o˜ÎåoxQÑø]µ÷'N«wxiDÚ(]—­ûÙµêBU½­Vé[‹2e›N`½­šVŽYÑ.ý§ß„ Ë–£wØÝ·ÌC“)xŽÈûÀRŽrq±ÚhÝ%“IϽË.ùl枘Þq¯Þc¨rÝ—¨ÒPfY {Ù¿K‰_G#RZ©í´Ž”@@DmcºåW´0@¼×Ô ¾ +=>Ë­â0~ÕLտꤓ×öœ› *…†€ÙüKèâè+õ&.ãìäGV$ag—†XD  7ŸŽ ]“sjŸa”ëêYRZ)n°üFd´\"<Ä ½ˆú˜ â]è.67 ö'‹+¯x¦öÇ>¿…ð,ÚªbøžU±a¢"/áÍ »|j»‚¡]ø?ã ÷¬&@È‹ðqûŸì$ °ï±Åú‚J•›Á›ŠzJ U·—£ÖDØ'#Éá<ÃvÎ9˜ü¡ª§ t[¿žC Vñ°7~[±Vr¹À¥ŒU,:µüÅ­bE;eÄéj—ªÂõÁFs”þ‚øßAºèư4’÷~oôß ý/Xª»¡¨¢~÷  èÎ E)Á©M,p -@j † ²ˆéæÑëå’ ð²§‚M†áEíÁQª>=ï(ñå'÷ö0xGù¥zì˜dÙJžLvº_onwvuw|_ùÛn@×ȬGšðŸ¤Ìó |·§IƒÄ¹I„PypåÁ¹§qoñÁ†¸‡v£Uö  £áái"”Èjb¢$IhU…Ž5É_˜IŒ¿d…ðä$ݱ:ÃQ1EÒ‰଺˜°L¹,+°†™˜á——dDÔ5Y'ðÎo¹·.cácá~áÝï^r•È“ãk1 ~Ða*!bªK0Õt樅¯y*˪6¸EÚÍiw–qxVyç\ê½H=ý ë€æ+¾i³fˆÄÀÄ9֞̂Ç EVæòè jvKrTÞZ>7tp+’Pm!å‚$)¡éPd µ v¥aH¬¤Š®¬ÆW¨Üjt…Z\â“E¨g^_5 Jd-š´KöÚ±vñzýÍÒ Y©Na™ßª&¬ÿPræ4µq±ñ&(šWôð‚LQ~i¡øˆ¨8ï`jJ S; n4ô܉$³)ÖcP²RõPûaÂn›Jw}b /‹:˜!ÿÞõ­r`Uä]©1,e ¥¤g9¢N`ñ1É1ÞFÂÚ ‰é#Þ$FFÛiQ²1DGÊÞ¢ je2ÆÞpõi ÕW¨GŽM Ÿĩ*Ç+W–%*±.ð]YßRs]?’-×9øï]_ "w[ߺg/c§z6¯<Í–&Iý(`;,H]¬Š®äœ³Ô‡™Ìq˜zš~Æyü~¦¥ÀhnXf«¥f"˜g-Ä(‘¸Ñ ùjœn3%Ãä¬$M4Mìäšà §F¦x ´K¯sOkE©Œw Ãi² å¥í挤*/ÅL~¡6ÉóÎ]?£Áxq/°½ú%ifÐÓѪi¼kZR`ñüGÝÉÊ>W÷ÑÁpíF›o–,l»‰€u–+eF¹ÄÂ|Rˆ3øeßozJ¬Ñ×Mè“M*“²ñ‘¯É±Þ•Ú3+u Êfœrqž]h†ÁÖA ·(® ûõ#s.2Lp;ˆ†hÞë3¿¥Î”fr¯š+¨µ.n=Rù›Vã·vBØe'ݚج¥.Å4hl~ÐQj~ìʇ]¥eqìUGoµ0RÊË¢ìÂ1´¯÷Ìæ½Öyl¸ÿëH‘ógÃ5ÔêO›fN‘+ž&&¿Cõµ¬0€§ß€ik`S†öXn‹üPÝþPžójˆ³2÷H‹ÄæÂÀ°ýƒ®]@°+|{鋤=ÚÌ~˜ü#a-F ;ÐSd´`b×Õ(M–_ ÙK ¼Åб,P¿\\#œ%œ”uÝåh°•¶atí—ï q}ýª'.\6Gú/;°]7 µ#v¨Ä96‰Õb¥Þ¤ãY¯œoÀrÜÀ¶ñ¨Ã“sSuç¬Ö(çV?ž3Z º·+]k%rˆHf‰:ûÁ{Är¾¯ý>ð÷×å=oë¤ã•8ODÞ\HžHâûÀ6áÑ­„Q*“+ŠÅ–„[ü .7ø‘5ó Š!F.±7™¡{&(U|(×BkX ‚øí¶IÆœ :Éõ.ýË5~@O°¯<§R¸KÅdÉ•²Y{ïÏÔ¿T}rç‘¡ƒ€è0ýŸËÕ,LÝ”ììþ»Ù3¬·òñú7ÿi±d&¾9{*"˜ô†’ Ý-Yˆ„gx³{Eg²„„T"ºBvGÙÁ’¬b?Žû69%CyGÙÌ4çöÉÉ–s×vïôõæÓÇ‘W®“œ}±ÿnkÞïís‡þÎi̬ÏCÎè™2~O{,E["q uŒp&±EöB{±ƒ´òÕþÈa)2;›¤z0<,T©"lÂ<=jB—¥ìÐ"8JÌ“1P¢H‡e#h>:4–¤n*:¡å7]˜—GÈéP‡EM&¾š>“r2‰Ç™XÖuUÐO  º ‚ð§|Bv¹Q‰dš…}¹óÌÁÒ¼3 8GêXjuÜoÒÄ®íŸK- ‡‚[»ï2ðŽ{>†>̽úΑ|^˜J3 ÊÖ ÌúZ`™ˆÁ¯.¥‡ÁüÐuVƒF_а@—FA•‘µµ|Q€mé<³Ø>)uE +(±Õ:dÎ9,tâÕÂõëðç“÷<•¾=×=+”C˜!q\}€—lḚ̂ݢ%ìâA%ߦ©Ø­ ®‡äÒ½êgÔ¢“U µ*ÆHúr@xžÓ"¢'ÒH¤—ò˜#É\“è¡·NçËФ`¾ÔmîN›+±Ý8+‰Ís™?¦Ç54–V¶’nêórHØ'úXa8×Ôz|ñ¹úðh¹#ĤžßjxRÃà ROé¹uN±†QÃCXÏ ÃÏ£éïH îÔŽÂVz|å߫ͽ:áxh²hÇáÅC3Òž(XUn≥ú­ûÑȘ¿xÉ„Áš*Íàåè³'uLu¡y“˜5 1>£|íYJ'®&™qúÑÚwÔ»F\/ ¬‰êÂ5ÉD7‰ÒFS0ÛšÃ̆®&j"ÞssÍ‹i’™ŠÙ–Ž|,hÆ þà©Ý´(kÙ¾,OÁ¡OMÏuP¹·Ã—ôK1’…8ËaÚ®Îà].År/cJD„ðåÑ JKYÀÏURáíóMÊåíä~Áë£Î!H¶š…eøU¦GþH–‘‰ä`¯[µå.ü÷Í8ŠÕ#‘ée£L¹z´6‹7¦Ú…zè4«vµÌº=.øUi§Ÿ½•ûä¶#tØ>H#p¥XͲÒ‹g0ï‰bê iºÎ)bꋬôÅó-OhlCÞ>ņGº’,±µf-À#<‰`¶p ç Ú˜IË›1íC$t±ˆ½Â:Ë'ÖÒTÛâ¬tÖêùé!çÝ á !íut'á*±¶}Û2n(ã8TSÖΤÇy¶˜›‘C°Ý dxýúNñ"¯s> ›UsÈkR¢þ$ý2»úé‹À´œÞ¢hõ(ÄJ†VJx]ÔqøÂR§Â\ý{©Ø.²ùnê ÑÙ´m©¼ú!v >íÞéSh0îÎ~wø•Å3øfÎ<Žå‹e¯°û:©ßͼO,®QsÎØñ¬¬ñÛl¡;¤Õ3;W¢Š’ýÊb£áü6Z‹ÞpšôkkéÆÃéæOó£B VÏÈ\9Ë·…³®'ÞØ‹õ½ 1?aqa Þ¢yAÏT<¿€¾_ û±Ý²S˜LòâHÁ/¢SQÊÛFž3ðóŠŒ{CçÞŒÙÛ‘ÁÄH\ 7±ì¯x½Äqì¯t=×yyÏß‹BuVÏßÔ5ïù;ŒOÕ¢¼Cyì¯@½Õ³´RÕo©"ö³U쪙øï?óv4m–O‡ü™9$ƒ×=#…¢Ýml¾‘oó§ÖöÛ3ºÞ8O€ëü-ëûÏžAMBé`ïñI$óîMæŠù®'|ÃùH¬ÞÜçJ¶ÝnaZ‘ƒ–€TÚì$Ÿ çé)£ ]/ûóáUù,%“£T–`‹ `˜ T¾RÑç˜^Ç„<¯§;Ÿ nØí~ýlý— u×XÃéi1|ˆîÙ¢Œ£c­s§A¯y51I™€ôi±wÅéÀ@k€¾I; ôW1#Ÿûe™Áì@_] ÛDÔêצ 0$åØ¸Ë…^-¢çï3-¼«%wo‹ÄÞÔæØ(Þ ›\ú˜÷¸ <Ùb ò9Ø:Ãå+¾9ƒ+Si˜ç§3¥ÌUÜ$çj«I\h¡ºÉ&c¹‚´º=`›•qo ä:8~r°PíZpe„„h,@}bµºv‡2MæœéV9xnËRéÓ$ —É„§«sÈc¥­šÅH 7óYÃÍ2ÅÞ~è.åK,óJ7¡ùà¢|Bà‡¬†/°‡<šÿ¨£òóξ ±ô®B½Ô"… írRø­Ÿ£9¶¿ôÁ‡¤È ³–¢¯t.LéÒj'ÂaÂõ7šüe²Rß[8Ÿí4=Z¡ìxa÷Gp¿ž…•ÕOü½¤ªÎ ?ë ò[œÂ€„þç¿Î5)ø†‡š|÷öèqÈ`Ãà/ƒ—`4—~˜¸ùæèôîxgë]ÕÒ¯í¹}^I£q}e-ò#ùÞNfÝ™òÓÉÃñ©ýù¦Ýo¥³îäÅW»çQËdy¨ðÊ3GP±À]@•Â&3ÊÛžäfE®Æ×ÓÜå±S\Ú×XššÆcRd­üSS\õã¬çe~ÕÝ Éïrìjéš2AÞž¢ÒûX‹?”åÏ; ¹ã˽Êê]q#®ñ'æÈ¤VNЛ²Heæy3ú1úÉ:æÀõ£ý!øMO8Ó'bÑ=òˆc φÇU÷Wš©µ*ލýu©¼P}ìdúÀ¨ÙòöY…7çÐöÑ£=f|+[œ¹­Yã?}u‡8ÝYçmîÜ1§Ó>ÁwùÃÇ<¹ª"ä½Ô+*bðøÆ/?SçÁ_Mé¢ÓžÛ4ø,¦jÔ]§&“èo˜Ft¡¿¶Á Œ‘gÓ*¼ëX!=Øð¨øÇò™› ¹º E>@W˜•þ¼ |K æx„ÎЋç v8Aiô‡¾G’èyÑª×¢Ó J×ݨð©~0êôsb œÑ¶[>t”ÑŸØžÖÂn1ç^7ç¸ÿd_aÛ ìöϽ‹Œ‚ˆEe…‹R›u·0²‰5ƒš[ 7Þ³5Þ»/ ½`â·ÅeÌFê‡Vý*4ácÎ=Ì]ƒ¿å‹&š2v¾ âмS‡Û{ã óY‹ôÚ{æ2™˜V&§S§l~œ#ðÖ &âS^Žkø*_ s€Ì¹×D­Ê¨qà(‡Ä&$zRßCV BWáþ²Í‘A͉9Ï›B°3gÌP¥›+@R¯sçíÐâ†ÚüŒ¾–<±&ÕºC­«tß`‚y<òUŒ1gŽ÷<ŠÿBFjÉúòKóv3B¿w=¢Ûˆíêý°:Þ!^ÖÊÖ8}âúTÌ»Hžåh莞–]H~•oÂNgÙ“vÆÄ¸Êá¹æ¶"]uâÈ:#pé鈼Él"à䜕|8`ñú{ñÈ *z‚ÉÏé}&¿®>QþswD¼qçTÞBk¹¥FïôO´Ó…eŠÑzlÑ7\/Qs±föñféÓš±qø,†dÌŸ>r¼.ÞfˆENLâiœ;§‰ˆ&5½³ƒ:_ñ1 ¬p»L7’FDE¯?åLa¦ÂêqU°f£¶œêQ78Z|RðmfN¦¤y„X¬3™e÷{pa샶О‘®ùC0J™u–ì@n{ê83ÑŒ:K2¬¤Ÿ9t ¶4<ŸMàeQÄyûQ~/†ôž¤»Š#öfø¶YV¹‚Ó|Þ¡õsv1°‚ÁÔ$S½åòwš}ÂrþêþRõ2ñ$à{a>càHúòDtùh§!ê'ý7 åIþižHg¼×·§Ûóg˜:;I‹†fæÔù Má Á¾Ö¿!Ýj‘‘ñ¡ðE:{Ø­ j°½5fÀÄÍLÂÜ6V͇â1ZoT-’àˆ+F­ÇöÑ^­ò»,z6ò·*›¤*ºdãnÿîêÛ­U:Õ!ø¤7Q†¼”V¦f€~…ÑSKô_1¿ Â~‚â>j µÇ_Ìûû)mU•¯…3Š Ã"Ž”5k‘JAñ× ô¦qÕ7, M3œæ°a¤YrƒÑ¿bÕagî#lªmÃ\3Ä©î‡éRãfØÐȱ´8—ɹ†&°—[Ëz­¿E‡nTFˆÆ±¯8ž`”/\¼ð>Þ2K3¾šPáBŸçx]†¹¶‰ Ìè¹íÀ|{i{bÙ߬2OÑq’!ÚQùK)£ì+ÑO¨›)¯®¤pˆ¥hÔh¤ãURš&8Û¥81Ø©ðÜ8 ¨0 ò‰ðU¹îyÉ‚WSRÜ…¡eKpì¨0p¤Î÷eš6 àêœÝ/М$o‹ëî¶d½ÞÐÌÌÛ(Õv6ÏûyID0{ØIEî2ôÒ}§¥rÖïdsi*¼á?á!éËlÞÈCwlã>±M47;4ýFèâ‹Aé:ø[Q¥?ÍS³Ü¥=¬øglk9¡Ì<´›¶Æ6 F¾4ˆÄÚÝA¤™Ûêç“ñ9RZ(Uï¨}ÊV ¤Lˆmj—¼¿ãùΖuo}ÿWì›eJšG9ab{ÿõÝóAE¼ÙØ=æ øCm= #Âvìù2\×À°3ÖÛž!Ü? cÛwÌ–]±2Eãf”âˆa4±­QµÄwìk­:öò»¬±ç•ÊÄÕ6w î9÷ƒ y½#Ĥ5Ïô…cò :u=‰¶©L(ß4õ«q*×4Ãçßîä$m†¡qÊw€É+Äôå¢Oè×lªf8n½˜Ï¤› ø‹iåQÛ~Òp(ð‡7êR}Õ‹¶ACÇO,æè„ÒoÐûøöLå/Žî?‡–Opù`¥2x¶ ¦V¯µœËF¼I¤e}¹”GÑqáÓŧk¢ÃÇr5ê¡Ãš­ï+ÈOÿäÂjÚqXÈ«ð>¿õ0Á¢:I½8²nºù–Tâo¹3͉†CE™HɦäÝð’Ö¨£U>“àK[î$¡¶Õi 9áa+Êßù†rbœÔKQ`··Ï’C!66Ähe´¦W}Ô±pÅ<"=hRËf¶Æo£S.X\("þ\ R#Ô¡_§äpÁ"£bÐÌ Ðra–3”yá].ÎÍUN¬Ÿá²‹faž™5jVHJgFÉ.„„=¦¯fˆ‘¯õ/dG‹ÕŽþb=óô {¼n ‹IíFÕ ü°‡U>OØÍ¤óá±Ì°½Ôs†ô1¥õ†fö6e]Ø„`€¥Wj†_|¾½K‘Çû=<õ‡4ÃÅnðžoy>nY–¯,Šº±¬S¬UÅ”å,É*ПbéÑ!{#úB´\I8½ôÂ{ör낚VÄ\­¨µ&'ÀÐû¹'›ˆvoѯiÀ—æ¯-O:稬œ„/B´Ö±KFòŰ’)Y“]Í8MÍ2jÅ¥&N#=¯i+ZVœ蟼·±ÀOjiMWÝ 64î19µ“œIü!“j)¨è6éU¢:e±Yw€§\ƒpÑéF\î¯ÊŸV2íUC¯Ä†ÑÙLÎÂipºç†bÙbHÕ¾?蟣(•ë†î/ÒÖÃkH:±ËªV÷h]P §¬æk|Á}.\4eô,™=*Ž+I¿³ü‡¼hÕ–{/~J<ðï×MìÙ€èwÀA˜Õ_OöqÚcþ¤@pö`á8”ç÷<¾ž÷ßËmÀð¬—Ó#¨’^c•±2™ ŒôhôAÖêz 7c‘]Lc–ìJ^Ôphn¤6¡É^Ø´+ôüä½Ðm—êÙ4p Ÿ¾Y~Ñ=³üdðŠp+‘¿‚\” µ÷O|€?N».A0ž 'é6Ù™¶=z‰~ûÜxܾ®8Ñ¿%:ßÿo YÍÐÚÅTÈÂÖÄÂÖìÍEÝíMœ,ìlM íÿ»ûAŽº3ê2–/ùú¶$["ÊC"¡Bü4988 ˜”¿Â<©òψ ×FnIôÔív¢=qþše5ðaê|:j"µäÒt!: Ë*U+/Ï㽈·Œ÷‹¯ÌocqñtFè–ÔO˜ÍÈüºóÊ÷ê±ûÁwÛãõǯ.ïg=*A‡b dÓþ ûð!B×þï Ûä}m¦Þœñ­øûrœ8ü³-†C,ùö„¨ŸL¹É÷xìp¼døòQ£‚Xa`[†X³cîldoµ8%o¹8âwÙѧ¦ÎQ/°¶Øx)ÂÃtœcLgã^K(½ä{vtC…i[Ú‘üßîš#€Ã`Ãâh(µ²`HaÐëâ3ßáõûL÷ltŽÁ1~ÓŒÄXœÅ|>¶åbaƒ©÷G)k±ÉÁ\5CÀDSÐE–þÞ#¨x€.¯?” %ó¿ZZV+*ĵ K%Ñ,Ë/m‡š³ «ÚÓØ&1²sîdC…´Š¢Š/m¸¥¶«L'«×Q!,ÊÐ>vFÀù‡4Ác8FI3{U$ïä6&h2#ÑF::uE›V °ƒ!•µûÙ²Õç`an†pª‰ÕÉÌÁó ³ìü’ÏÖý¤I‹oþé(äv²ß§FPµSh{–˜(ÛC·Qµè'*ð夓Me*äHÃܶoÅ9pÂÏ轜“·ªÏu‘n9׈Wz9äbj,ý¢}Ñ>ÁnÃá,•ê1^ÇÞ*óöuÁo÷Oav0âî õó§B3 ŠKEûÁ^±OýbDsèòn  ,ÐF=‹–iåj~©ñ»t¬Y­Ú•}-¨0ÕðÎÙ *æ Qÿ!{)¥Ck%y1ËàÈÞP>k!á6VJspLxªñ09L#¡5GlV¹F¡ÐT_³-LÔÉöþ Cpip$Æ6m$µÁКÿZ»÷Õút‡5 {ÆÑ@¹~RÑ›¡E®Âæ 2U 4«|TžÎ ŸnØB‹ÀFÒ°IRÇSiŒ²uˆ/ÒúMÝ-Ôi÷̧7Çìî£?N€Þdb QW÷ùœ ú9{QãׄüãOIa|SŽ<º{½ê¨C„]›X¢ƒ|¯o älE‰˜Ö·«#„Ø[à¾ö¥–¸ë˜yè˜yþ?Œ½PÑ÷ï‰,Ü fpwwgð I€Á]ƒ[p 0¸ 2¸ NÜÝÝ aù½zÿÝ÷þUûv»ººêTÝ>uúö¹u¿ŸÛݧY;;­ë嘧º¾ÛıýV¢‰I0²u?ÈÑ(LØ'ÆD¹?ÔpaE <òF'{ôŒ_òd_Ù+w8\û`]-Z˜å|”Ý?ºpˆË’›æ€n¿÷­8TRíijy£åb7èˆÄ’sÛ‘Ö•—űN8–+§Òß'ü¸¡,¼ż@Rv‰ðMTz·;ªì`R´€CµvuIzi7 œÞU l™ë/“šɦaÉ £Å3še‡¤”2º$ Ï7£æo_| ª kíIÝìr´ªTÊSÜÚDÕ×»3ðP@éyÏ“§Æ,'qìºöV’õoüÑØ°=M½#³QF¶jâÁâ¹ôurÉÚmì÷k[ø\—‚£ÐÌÛæè‰[ô9ÜÍVÜ/zçö+v‡’ƒ3ªaQz[‘ô;^ùMUçÕëçÔŽ½Ò^—ÅOŸQÖÞÃþxg)’dÀÒHˆd}">ÒàߘÈuŒu_"Þ®§}Eøe©þ®tcDÙwÖLòk®pU…¯r“YÊÐÊ%õnq°ï—ô|o ßÈr²Á´Oú…×w%ºì#†<Ò¿²û=C·+•uuóXvgñ††‚Ñ¥-^íÙ™6ßiæœê?Äwšz#v†¦xSw~Ñ9œI+¯ÁžA×äŠfT£¬p¬¶tR«êÙjŽÌ Ž°ù žûÅïá«¥–â€f×x+aû†éðy Òó)Ø{sGávz6½.A:Èù²Éõ×Iå¬w¸ü;7Í3‘©Å¸ç[±5µYÁU 'ª‡2¾ ó•j•¯C WB5WþíGšÍ—¹[Àîój±CX‰>î?µ*jÇ‹ú~ÖŸˆÂ´üv„„ý8jºiߵˎîû>äÚ%G>¨ÉÂÃYwÞ+híËæÆ›:¾_ZöÙÿôib% x[ÃíÛ½÷YCˆààh–^ROç˜?¿Gñ^mcÀ(C¦5f¼2†îN½ößÅ'=e|ÈЫÉGúÿ)>ÿÁù¿jÑÿM|6êû:ë̽äo9:²ãáã×kÊD~ÿ¦Ö)7Ž0q®Åkðý=&àÆòo+{› ͻҙòF›£zÌŸ‹z´3ò¨‰AHþŠGz9ÿ&<‹klJ¦<…G¦„Ÿs|NùI0F!_4NÅöDÖþ>¬me?Fp´cf(£‹4•ö¥íœ ùév­0ûÍÃÖsNuó×ÅQÿV|Eø¤=„N$Zô¹)zpž~&µgn燈™Z“‹*>çÄ|—ª¶–Ê“üjÌ~–Büw0#¡³pU#5ÿíš.Wl ¡hÕº|ËCìr˧.DÔ±rë?RDj͘b%ëߣ‰)u8 pÐwn{˜ã×½…Ú߃ãárBíEëààËØÄø£¨ya ÆÃFcIcvNæŒÁÃÁc±D?žL~Ó‡®YT/ @Ç…kî1`“]…x©®ÓD¡ü{†îâ}-;ïDIþ*&¯¾8‹TfLÑiÞTXÆðåWù35R.ėܹͯ'xç¼c¦ë&©ÑdHÚ­›JôIK³vEsJRÁÑÕ:N6±ƒ‘Û~¤óï²ÚKhZJ™Uóâßù¹'[¤ýr¸üßÛaÔwÞÓ?‡"ù‡÷†J^•òîè¹'UÖŠµYÿ"Sß쉟é¾\D¸,0Qu•´†åMÉùâ—bkQ÷Q<\ùg/g¾õGZTæ€/†…vÄÎÜò¦tU4y^;ÚN6f4VüàMœ4ÿY6²¥Öz¾T»Z„á=I,–¸?S(0ù¬Õ2œVý×=kÒÿÃèŒÿgÉÛíÏy­MèÄ žkz¾Z-îÓÉÒpZ®Ù¼â§+7ðÝm?~ë%O…ÊôôBË3E[G' Íä„sè.[Ÿ´Ò+•z3$l˜‚flÐn¨n”àŠýóki¡˜ñv‚Ág6ÍØÀâŸ*ý–.$¼Týå çþ8bÖh¬›Ñ$¦Ï1ÕmïÞUÏÇ”þ£ùk?yîí'%ƒ>k¤1~nÞÎŒã4„—¾á81|2¤…ÁC¹R’Á¢ÖØ|5)¤ß¬ÙÀ‘å[_rð”(e¨m•ÉjýÞÌÒZÑ8Ÿâ:\Vñ©Œ´ã²S¤/\gÑèY"ˆ÷âmg‰ø´.†sf^O5â,JtÊÅ!q‘£÷½ÂSƒØ¾÷Ž ¿œt¬wÕlë~RÀæzÌËmG—“Ñß‹j5ߥà*Jžº3iS"ç¡c-¿Ö^¦ÚF8eÌ}¼dÕÁŒfçÔŽÆûØ„XC«+›Ñ®›Ù?ð¯ó®ãÚ­Ó ÂêÇ0zóh2}iwí¬n—*RqùŽÅ:©ëb¯}Š„)ÁGœ¹Ò^ ÆÆ‘Úl1Ô§ pí0ý«*êð'[iˆ.MJ¬æ¯dÉtµ£´‰ÕBóÓ@M¾ñš¬âûáN ÈÜÀìà_eøWcx‘±ÇoÈø—Èï‚ß’¾ïቢÇ êø8¶ü уOf;Ù•:?ð/×›§õ26Gñÿ9W\|ý 5n8–Yм㧠ùXã­Ýxîf úlKk9ž'ïC¯¦gdK•¬V!Úº ï¢FþÂ'útŠÄŸµË,·/!üh/¥¤o_ú†Rþ€kbE ÃÜŸ/oïçv×Üâ€bø¯¸Á7Áì2ú—³˜ÒnE#kh"Ž/ÝÂWñfŠzFmc,ùã°hO§ñGÌb´Ž:—éøu{ 1^¾wÎ1,ÎtŽbþÈ ‰c.œK—¦‘Üdõñâqa÷f.¬$BõU¬_Ëj·ü'é2´¬ÎQðÊ Áœèøæ¶º<ÿæ¶þ·™æÅaÂU±oná1ó¾Á·ŸÜÁNYiü"LbD{»ƒMI—²]z õ)Ö¾GÚ(ìù^˜JuV¸ìI‚êPGéÎ4N±ÉÝD‚~͹KÑC•ñ©ÝÆ uŠ®Ø\~bGÉN¯¦]#“{¾ÎõÝÕ÷NÜ=«Ò<«»ºTÔågTgÂç,Æ‘¶¤Qˆž,)9ocr>,…d²ÿL ¥­&v¿à…‰DÙ ÿvùBoPÈo×sg·^¢|MÛšFDœPx–ü V8‰Þ]Ÿôþ„r¸£Ô/¦ÐZª­2ùQé­ÅcúeA 1BR`”ü-k뿸_äM t•·?í}¤xòÕd Yíà>0*H]½ñÅÃ|ð®'•6ˆt&V ¯lGN•÷qÅ©¨è}jK©­ÿ¸'G èÁ~f“ù+¢÷p¦&á|›0Ü*Qò¢Šö"ÍË M­}}¾©¡~)*Æ-=’±}&™ùUv$1Üúb׬ýÕ¥æ|‹öÝïé^sišÏ&²,iô1^ƒ%”yø~ä8ãTžª¶ Ÿš’9±ëÎNyE”Ã=Iìx`⽘ Öìy1Ç~uñûþÓ)uœ%²£d%ýiÅÞéì!!_,ÇF¯yÑÀýc.}¹úϲD~­ë»^ïï½EÝA̿ޜSúrØ&¬?½>q‹ª#æiÛóˆh¯R8ò3ËÒ×ÔD—›.TþŒ‘gµXÖÄû½:§8ÇÐo–5 ¬,I¼¥PA™>ðIÏ“6¿¨ÔY® Ño¢E0b˜(¤Âæú°JûU ÝãƒÉ=1gÄVšê‰×ó{ø“ŽÜ&üÕú‚øú4äèbE'{‹ÿÒÃa "o»9ñdûŸðÿ×@ah1™øšï5ßOPÔ¿ÿ¥‰gU¸Ž@‰Y‹ñnS{½»>ií8ÖéïÑo„ÜÐðÐbI™‹i[01œR ºó·XÄCk²ô3½ÕÕÁWÀ:wê;Çkò¥KFo¦Ó©Öe¿¨æK2-y§ÚÁ€I÷ ŸÞ OàªÌ½l)š1»ùbóÅ5…·}µ)‰âcÁ|ŒJs“Ð?Æå‡¾Ouz¿Ô)ÂÇ ê ‘¤F jL·ÁP/g‡—éÀIW92ψÿ{wýCB@@ý?ÕPÐwýâì v•ó|5þ«²‡Æ´$¡ØÔÊ©§Š ¢Ü*®KÓ{"Þ€àt¼oEƒ}¤ïbX†š§!?m°. σßE’óeÞIB.ÔR=ºP§,vGsÜFý=žÿÝ¡þæ=-@ƒLX 6©YÞªe][zÔSØÜk»Ž8AÞ_ŒDúÜ*à2ôžä*ݦ„»¬¡ø_9Ô¼rÎ89“i¬Ú<ݾÔ^“Ô:<ä²Ì³ìJ¯ä:°9¦ê“Õa­ [ôìÓ$æ·ºÌíFh5z+ Gˉæ7³ë'©¸cŸéo“_úSO»q `î)¦åwôna“…+ïÔ“OËCl¸aÜJŒk=8,Û»Â2/eäƒ|¥_¿B§‘XRþ¯¦–›x ž=ïi¿Ð™ÖöD¶‰Bgsˆß³—Æg°IÖŠÍïT‘â虞~ êÄ·; êvZÄü¬Jÿ[5‰/‹CÂY(%—…†sBî3Q’OƒŒº¹êÌÚd™ßc—ZO©#¢{ªðsóÐ!<±þå]x§Þ˜Tbìû!´¥Æ,rÕ8˜º@–†‘Ú"râÍ©\®x$'ì,¡òÈ翉§jõøÝ݆†Ì_ëã³ÅIï² ’L ñ%»…7nùÓ[¹{"á¹ýÄ5hèé =£±<ž‘É~±`7¾b-cÝÀ÷¿˜Õ„H° •¿"®ùqÒÔ½%Rgã¢xep1r¬<³hÔ§îð/U¥õd·‘-²B×Y€yòÎ÷¶þ!¡vå ù-³ê¬AÖÌOé?/f#¡Ù(Ò=qÊã·´½ºv/øNƒC®UNû…м¶Ï#–‰ÜMIδKM÷Ò¨t`š”Ä ,›Œ#ýô€ü_©Œ€pùšÊÿËFñÿšÊÖîöÿû@JÿˆŒ€0ô¬ û?NT|=È8Ù{8üWUXÝ3§%B±¥-,¶•ÉÆßsóx³Åßhîî’©Õ`  , ·Km…_Û6a> Óo}ïW÷_ºZ=i³E¦ïw…x{Í©Þ Z—§·þ{¹W§#C/ÿ.SêM ÆhaZà·ðž »¶äöáø¥÷)Ü}ì ñóç‰ÚHLüü]žäd;)!Ÿ:où-ë}²úÜ8?ôñÞxŽ–üù0pº¨7äéUi8îØ*‚…´»A^Âá?ÖëW*`åüyâ<ÅÞd¿fÕp4oô¬Xá¦îä@_Ÿå§Š rŽÊRk"cÅüû.Ù~ì „”a;å¡'⛥j/”3÷ȳ ¸uþEtÞÿ¾iµéçIø–ŽÓYíž°ãç4_6» •;[c½¬y—˜TÝ^¬dàc‡Ê]Þœ²=øÅeé⹸úD[zÕ7¤¨•TÙ"ú•Áu W«sÅÃ6˜êÇ®‡¹b,…àcp#C¡+ÇÇ*‹:ê]Lca2iÉÈo;š¹—èVŽ´”|_è‰q)ÕÞ9ž=¶ðp®@!ÀÍcxJHõ°9.:žqyâG¥9ê'ëæŠÂh_$«ðÝ~Ȳ âGûñÌtbDÙ– !ju¶-; »üžØG!õ²oÊ€·§Ãu-2õ´ ØÌo/Y°XÊ¡àdâfûm©? É®óVfúåÏœVØœLÓaú[ÖT1„œ±¥+¾ÎdïàõóÖ¥£ÚÅÊ;ç~â7¾×Î3Ùðí:S7wŽ–Ê²X+ŒÐG®é,RO5üý¢Ò¬¨qƸ¡6<‰™ÚAˆä7¢š‘E²{FzO¤dóvØþïÂvƒÃk—V7QðÛ-ö ²Ë8w(ÊÜ’bAˆË2íØÕ¸KwYWÎMlýǾ­EÑËW&Ö_¤©éaL¤dÄ úÄJÙHÆŽla6S» --1 PY)OO9G«³¢–ä‚w5i|7“UQÂQqöú†AÊ@˜I´³^ÇÙÃÌšÝók¤<ÒÒCœ–Äñœ¦ÉŽÆü*Þ…Z—ár‚\&?Æî(’þËuK0ióƒì¢ßÔ„}øË€ŸüÝm´J_WHȯÒ£{E5’W´»¬9HÇó ]×Ñc7$.¶ú|ïä4ÓO‚ÿ‡Ã‹¬¸ì¾ýË–Î|ùoS;•üŸÃz„±ÜÿƱƒÃG iww§ÿ9œSÒ1ütz©ú_êë;íùù‘éeÞß»F¾OC)`XV˜?vL qXz_J”P~ÃN}Ó)goG’¬ú:Û¶z{>»X9Kmª[ñü¼¦êÙ³åàõxÏðòò"à´:ì·ödµšå¿ûøHÃPÀÕ}»¿VDœ™(´§6¿2âO ¸FydZO™ÞY}µ—&þe~•–[BÒ~M×±ŸvÉ‚Æ÷#p*Jì½ÿ×ôP#p½@‚¼òœ‡mØ÷/4µ>pJt¼ÆiÍø(€cØû-T¯>p úáöŒ´!ü¹ uá—ˆçQ‚‚Ðì¥SêËm  û_ Zã—ßP½[òiK¤'Û°? OŠë–†bz4à—”K(>eÀf¾ÆýÁSÂÖKìÈšØô ãËù¸„Ø5‡T/Ïáͧ_ŸwCúŠûÀýc„Û5FËx•q¨[U8ƒ£ÖíIв¨æ ì¾ä˜ÐÚêH©<,æ7áÒ歷IÑ̕洿¿‹ÏìÚýÈÀªÈJ²}”ªf‰âqYpÒ5ûÆuž2 ÃÕM"ä’àb÷#ÉZNdÄ"è3õ·Zkëœ÷NtÔŽñ6Á›©²¥CÞà»\S«g“6•¿?ÝÿYÉŒgB‚Ipq+›F¦™Òªëk&ó§µW+ªÚâ¿ÚÝÍ(:ëwä°"+¾4c!>6Ó&Þc«Løƒ@o³ÚÐX$ª7©<÷ƒÑÔÞl­’Çò(ã’µ/Ü+ÊI ƒÉ¢8É÷uIâˆÝ„)î.¥»æ7?[AÙÝ™– ¬½fÎûSß[VòC¬ÏÿÐ_X8Չ鉠[Êtˆ‘âjœ) pq?´‹cHPÒp²ÑmÔÖø‹ì±•ø±*…’GÀ°O'wºépÝ39ïq‹.І ¡:øÃ¨·—Ù_Ì…k.$!r=Ý;ó¬žP=ÞÚøHì5ãz —ìqÓ}Kn),k“WdŸÉïgÞyºN_ÑD„zÔ§43Ÿ®H×—\–Û gŒP ´&©ŸÒ]IVNßWŸNw[™(íü•$öø4ÃR0 òm«q ÷}m9ß:i>A˜uâŽÓøÝg„*w@>»ÉÌ;-f:ªRÀ*ÿVÝz™®xSÙ¦ó™]Á´©ãlT¾×2¼`(õ€'WöœjuØÆ #óyͦ,›ºÄÄÙ‚Ýb„·lf…Jâ¢1‡×Ãe¸ÓeE;á?©·ú,NXõx é:'qùäjë·*Õ઄Ûs¾ËüB÷²«û Í·á èîNW_0¼p­2ç];¡ON7”ñoø¦1Üô®Þ½°(]U 2Þn ç]$Ÿ´ž‰N脎ˆxtÕø]ó=/ɬÝí=ŒÊ¼\Lü½…®ÞæüQÀñS ŸÁ:LîKŒ” qÉ{/<¤ ÒçæZ¨ü\Ÿ4ÂÌ_±À[kÐóa 8C-R-]í›V–¿ƒýlmT­U}®0.i¡O¦xkÚé­±8í—}ÄEëí—z1,òMcÿ cqh.îL~˜él«ä[¯Íç/;%4BvK«Î‹Õ/sžkXUתLRzº{Ie2õ3šFÝícýs†2W^ÝT?ÛðòòìSOcNË©u¯­n¹;Uæ2@/HÀi–ˇ§ iÍôêÂE‚6ŽTÎ$Õ/Ó²òD_UÕ,õ(RkÊúKöÖê—q;Ôø)ÿYùDßæ—á㇓9kšéNƒÇï·_N蛬×Êý³n5Årk¦v¸N–ìòÆ;eæú¥ƒò"­‚b1G¹V*`¢Ü~3`²mF¿Ð¼°útß6ГÿîœäøÃÙÛŠ*œšˆÇ‚®SIJi Ú#lf—%pm¨SGi«,óÃxTéŽvǸü" Ç>ƒ°AÂg1C·.ý˜ßb:ÍD+¿pïüÛÊJ«w1.çP<µ/³|$TýÆœ”!bùÍ YŒ3xëD²÷¸' z-jðUаÁ:Ý1ŸIW0…SøNKO¯ùÚJ9qö•Ó@ÔÅ+zŽ1…azÂÂ#d½5 'Ià # „dÈ9¯m@;C¦r4ŸÿXCÚúå¡î˜YA¤ø 5¼»“Á-ò÷Ä×1 Ùã.ݬ ˜`AÐÛ!"€*4‰уÊÖC7b¹—ãë¨9d =;Kަ<òN² N´C}"ýÏ-&©£Ã3 @Õ®òd_„h$’6“}‘Bˆ-ÅU®  ´c 5F†Ø»úCì²5ËOMˆ`#4ùŽ¡„'·íb¢*>GÌìb"ýl’¦;âþa¢>ó:Äfkdÿòwi½ÿ“a%âÒêˆvÉ¶í±’¹ñ‡l†iT$Çʹ.³k0½ Ø2ºž“ÞÕÆ*òºs…z…ºê§’µy£1-Y9s8Ss†]c;zÉg”ƒŠ‘vö5sáõ’ÞocÈ;¨Ðv*8‚®#·“ôCVV-;9ï'‚2¢+ŽX½íµ•ê‚^+г¢½²ü€Îú”ÛÝ%´Òïg,úù7õјXwVD>÷kº¥Å‰+Æûû•‰ˆ/jUÃzý*5¿pˆ—þÔ«ø˜Z>>–çÁ̺1FG”zi†ùxigö|×XÜý¯}‰FU§x•üv±=«Üùý™<3ëÞLe·ÌW¾Rg¼½¢âä]ûòßÙñ2“±%«—ŠÌi6͢Ѷ; ™&íŽléwB)ÂÛîuÙòVCæÖ1Ùêsp²5j‘ÕE« mWþº½ñ%Wö“äþ‰=Wêç÷GßôGIüw¸tfc0.¿ÖJæ¾O £c¥•æNÞ¦sI5Îet1õb§mÍ 0ß™DnÐßÓ¢lùÆJøåÜUôm`¶<ŸUmÄ.j¥¨0RŒ9‰ë¼2#ãSê€~Á4~.ýôQJ q£–dL,“&hí(“)ãh•K–Ñ*{§”ƒÊAeÊ0?eýrŲwÊD,ºU:0[ÈaÕ4öЭ€|*ãRNðé•iÁú€3úeÊ7Ú¶ZÏÚwŽº TæmTdçAeÛòWßjÚ‡x°b>E †“2Í}P¾±Òó6s9¤âÀyAV{›<“#´A™J˜¬@[uoà »Ñ>ñ‚²ˆ…Cáu¶±ŠÓ€Ç@©?ã’\nl ~QÌ4üÆ,ú˜ðª¨/²N3Ù´h‘ÊfÑ Ôˆ3«Xf8Me‚‰'|W)‹mS°¢TÀ5ÌS ¡®“>üo˙˴)¥¦¯xýŠ€œÿ¿PÕÆÑî®çÌ£ûêR£Ÿ¿,¥Y0e­ $áIÂé¾1¦}þô·¡ÔmY¯”jïùÅKæ*ª/GDGöMòÛ¹±“é«ÓkÖìûýÊ«–µÀU#K§¿W_šxœvEÎ$z,rò¢öQ¾¸ÅrÕ­Æ –ŸF¡LT‘.— RWBÞáYôo}RsÝÆ¯®CrL·ó@DýiØå»wuR|hl?¦XÞÂaçãhl»w ¡©ÎOÉR”/öãZñ5d ±[Ghl{w$¡zÎ~=Páx'ò†¤-#4oÁNX!š·Ð¿(ZüéöÖ]µTåOiÔÖ#ŸÛÓï÷ý¿È¢·"П ý 8¶;wQRRñy‹g~_ÄU"¶Ýÿ})™½ÔyR!†pyݶ·¸••Up;µBẹ¹“ALó:†T8¡j(-ÌÒ]ŠÓ±ì×(‹~hþ´€•­›ºDâ54)O§z&Ê 9T˜·L¾³ŒìwûóT2œ‘%âëvx ¶¨B"“Ânæ…BÇvÛÈÊš´l„•¸ _|û8wl!”ùŸeü%™H±½—8}‘2ßfQGÔÆ?Qõ¤g½·1bÐÚã4ÊùÙÆWò5ÌZšYæÿ´žÓ¸c´µ· Ã~D²lÓÙ-Ô/ösµÒþÖN¯¥[ß($×Ôè˜_7•™&p43µ¦ÙÁÑ. ø*á»bØùu^ÐʦÉN´) eŒ¢—O=k÷¡0Ù¹¹ «V_®Ñ¬ûÚ)äPuÓéŒóIØú}Žàã>Æ£Ð\(pÂRÂ’ŸÉôÓâ~×"ÄG¦ªBFê§á"¥dTVû­Ã § ÖÛƒ?Þê†}ˉz1GwÑDûeþÁZõoŠk8š%·£èÄ>j»‹Ú»®%¢‚mFº«LÞ“˜$V÷•¸0ÂäÜû7TX™Ë ;ë“J6X]xšÎc»ÍÅ›hEÛÞëps^ ^n©µr‹Tèt(*$h8W³«‹wÅwöPž•Î(6ýÿ›Ôm«V3>)28)#(¹W±ò¡ÓÒï¯i]7IÌm)Üòbÿ¬Pd”dóoò$w öÏ[w‡üÓdG£RDý9âÝŽ­èëᶨc‰#O)¢Õ±ŸÖ¨b„¤=ÚIØÔy†KaÖ3jþ¹Èp%V¾¨b¨ðp–WAwn†«ÜIG¿ÈjÔ4å}æJå>Øu:´TOp¿¹Wä;\Ý¥?`×W‹k¢§ê¸Ž´ªª>Œ*ødJèæ†VØy31I–­[jÑ­XñÀwxý3$œ!IŸÐ'L$^„?j‹Ú÷c§Âä!-¦‚G)ÛñÍÈy=À®V÷£° NXNC±°Í»/k¦»\*Ãæ©ç–êIüB6â#.“ú×ÉùN'×4Lþ kK¿Ô‚¦Û<Ë¢ÿ–î‡ï¾9\iìÖ¯Pr® rΊzÛñm[ à#ÜŽ©nõ!YÂŽz®[Ź8ËwÍ6ÛÅQY–ŽOË•›ÅaYUË(-‡Ô%•Õ9ÉÔPôœk=é7¼×o¨ð·Õÿ ²î Å‘ Oa®=?PצzW@£{î¬z*ÿØëX »¢fÜ^Äöê9Uþv¿ã­´¶àæ3H·¦¸1N7]ÈØ%òIuQM¡9{šŽ³y‹ÉÌ\·¸tùÏu¶BxÒ·xZ‡í·/H}‡+,ÜAÛJµ¬2W=ôÂU7Šdl«”f¤XˆÁš›b¤ç¥Ô¹þ̼1žOx“šk‹ŽŠäè‚Qxö°Y§,Ì>çï!\==QhÞoJEá~}0_jž?"üàa 3‰G¤2òÀ>ŒÜTÈFqôoxgáÆÅŽ÷ØŒ›ä<„l±%ßZ¯½ô¨i1"t †ˆEiY3Á¦ØáE®íYñ0þXᔆÔYZLC Šëm»M8.EÎg% më?úsœ˜ ]§§ bðõƒ“më’Øžíeú[wêA“㣠¡–‰Xvi13Cýð¸ßdMLꕸ™1=yJ.¥¬&>øß)=œÛœj¢ª°¶8H‚š—Œm|ØOGXdÇ-í¢U4¡T.B&”éÕb@,AzŒÐl5—^­n¨ì&¨œw‡ÒN9µÀ"x’Ån EÛ1Î>&ý q @‚·ÌB*?ÂaPcâ­* Q%°ƒ&XÔò rElX8¡íƒU$lÕ¨TZH › [ÞQcA¾9¾yyºÔÐ÷^éøKê^žñ©ØÇ2Lž°aðœÞ`SÎÃ1oÓ±è­óržì‰EIh3M¥OäÃd/áKiTOLžiœ`×›h3Rƅéðd—,õˆg¸Ë:â©”·ac˜µq:–E(ú¡u cwPýòjý×x\ÎÄà(g^‘èÜ,Kz‰'.˼À‘˰Þ9NåDÖÇ®&¨hægTŽŸ¦]íóDOxÙ ›•ëf!iµ/‰i ƒZ;* Î¾ÁdxÔ/-ȵŒQ"<¤)SçKŒŒA0Í@“†ù§¤õ-{ƒ.m Àx"æRΉœÖÄÞTLøGë!”ûý[˜žvõblŠ­šÊ¡-Cc‘`¤$KÙ ¸“1(êh£áïAñ*©ÜDLPq(72dJ2#%ȵ‘ b‹t]C¼;ävÊù„!Ü‚pnPj¨:\$ ýJªn,&ìÓ2”Äø“Ï:9ªÊ‚ßd’a•È`1€UHÝ;Hý+P¹vðYÁ€¥-ž5œ£ ØC&ô3©´`B*¤Zˆ!G’-Ô* €H%°Ç Øêª@©œS¼üY¬Ð#E–È &´I- ÃMA·Áuˆ;òvðópz(e´ŒAPÀ@;šö’8¨tÉ  ½Dp„\j!ÁGf!ávÐvêˆÍ ÈkJ9ʹ„r3À¡~¯¸õC÷Cý2ƒ\+øz©Tî‘ [ C¾~;åÚÂÐË  Dð%O‹}ˆ«?¼I‰ü‹ŠšdËJ¦¥Lm `&•,bsò5c´’²M¡‘·=*ü* T•l™ÊÔÂW"-(•C‹Ÿà™Ü†šò¡®Òu.h6 ü#¨/Ø•@€:­+އéq³½í-zià aØ‚dØ0: B"ªÃƒôbþ~Ô†›Y¤.þäóÚÂ;f!\ÑÜhä$ŠFp„ð´øê®¾86 fv£TN.^vRêC\A}TZH!*’-Ø!©$H>(ÀA ˜[F€Ç¹F2ë¦2¹Õ5_cr­#<6k£€øJµàB¥2‚ê†2¹ÙSëh È.€µ5²À–TÆwÖP.ÂŽ(iÇÏ}êËäO½äÔüɯœ„ˆÍB¢¢¹ßA´“`í8pMÐ*⎠hy'ò}T-dLò^ô-LNûÖ@ûÎRWK½¤¬…^"þ³¶÷tid/"æè÷ç£ð‚ñë TÑÀÊI„*áÇ2ì i®`ñ¡èµ†¤Ðgµ J2LøAˆžšMS±ª.¤ ªÃ DóÀÐì7pRœôÖP»¸OëC°«-¥2Hûu2™1þ¹1ël “J¿ÅZé@£*8@·&ß›;|?RºëˆèÅï[ö´0{ »Ðר·ÚK·{Úÿ:ùwÂæ/hQ<Ó&þVY;oÛ,Âû—è ŸÄM©£p ³¦ z -hûŸ¶‰GÎSIõaë†ÜÌȶD£Ž@Ì‹ŽæŠéSyMkǽ®Gý½®¶‡Û®š‡Û½®‚ÇãyEÈáî…DcùRÚK™ÖŠ_Àt…£D€N¹#¢„­N“ÄZy¹HЉºkYúJuæ¼|h­ãÔ »ˆC(ùaÈÀ½]4Gy‡Ì½®²S(+u@¨ÁpçJí|u l '0hÛª0;.Þôv0Ì]–½@ÇL˜9mœ©.µ3IåÀªEUpÛuB¡/¬N=6‰E®å:Xgª£\ó‘B¶ã:Joa^—‡nY“g_L7‹ïê Õ$ßTlf—Œì±' M±Á]ÂbÀ F?po2àžšõ:›Üɼ)Q&Œ#Úyæ÷S¥å™£ˆeh×»ÞÌ<:©5uî)D¥ÃùuˆÌC …÷)Bºz¥ÜiððRVmpN*¬nƒùVG—r£—a^`fÑ3ˆ‡+ë¤VÔM0Öq§ì”ÙÇÂÊ+Á÷Ì%uÌ5uH)j:)jZ )jz ’)¾êöùÒÓFXà„A=ræP^Ãð}–Lõ4»R½ð29yëÐØIÏù9x£{‰±‚#”d'ãºx9’\$¦3%K¶|™Õu{Á쇨îÖ t”q$RÙö.PÊåXÜæ¯Õu$чcý©º”®U1¾?¡Ô6°kó¨r9Ó¼òm…ö׋?ý·ÖÙžNï_Y­€€ÀþÿÍj²_Ü¿è|1³ÿŸµZã0üg¨^ImH¥.yÄñôû7çÈ7Jü’((E‘Ñ´”øˆJ(o²,”ˆùÛ¾X ­ÞHÆrȶƒð&ˆYAzÁZRU‹m)“m·âövFF?½´§Yð {þ½ ~eµÿ<­óZÍÊX¡ÈkwÏŽü$À–_3d”h1‘rýĉìú'ÅE¶ßœíãÔv rm"àŸÐyV@CêÞ³ê¢Íž³›+Á»ïo…m8z¡€Vµ~gš)øï4…2Ðö{ÞÖ¶íî[¨¡à¿n¨^ü/^Àï “P=—§)Ê@Hÿ)áöQ¨žÛSŽ”à¿U(^¿ét×EZ˜Ð¿Aè›~ ŠéÁ ±ÐY×§)Íø@¾í;P3Ê5Ò˜­5œÃÝ;\’çäšItÖg}b¶‚@·‹üŸæ{ ö‡¸'sÿÍ‚Lx™‰{ï¦Ö1??Ÿi}³:HêÙ6°éׇmܦÞ?]ÎKØR«‹Šó±÷=µ° ýßx 3˳ør!ÜYô³Ìfï›”3‡%±qæ0/îDÌ»›ù·F‚hŠâAVðß„ ?WU Æ«ƤxsèG,r™€íðÐM‰¢þ iŠ÷•—þ í·Á½3z4šº?v‰NtVÌסYa4ñG¸'aÔ`T:ÅUbQ€ÎbѾ ¤¥¸{˜5+6ÓO‚ÑtJ:+é'©~xÖÖ)êÛ&ø)[•Xá¬@ô !F¿HTWP6ïÈrXï‘aBEõoßÇ>Õ¼]ÈÜäßl<›ÚŠ_ÇDÉyk³Át»ð8~Oƒ…)!6º9ÉÖ¤Žjÿdt‡ÛQèÆïîêø]Ɇ‰µá-¢iç|Ø?ëïn+éÔv¸fy|Î#Ì*¿+m¢ÜÝ廃+‹Åfß•gD˜ý”ØmòìB\qžû_™êì4èY|‚åûÌK–öòxˆÍÊõ _qZ.sö¦X%tg²Š§šœì Ó¶J×vÅ4¼ØZd ‹éîq¹rÉŸ@oÒìrg¸Ç8àÍâ­Œj¦)§V¡¾×5«ÔÏ8ÞËæçÑ£­J!ì.a©«|k´–ΑšÅ´f)í¨Yºÿ•þáþ\­A?ñ`n¿Y¹ŸŸjé•êš ûù„ÃÝǹ*ÍeûÕ©æIg&¦¹ŠÍÓâW„7-¥²£ì‚ÐÑàßÙäÛ$)7E¤»õ¿{¦iP»’’çS7ܶ%6i£ÁøŠí>8¬LGujÿCƒÏôwž•À¾^«ZB'±o ­ÆÖö¢ Zr'RaZÝa…†–TcMÚrdE%—`[ìýÛkg¸ [m„žÃD]®!H¹,—Ù:ßcœÖö³ÿ8]öpÉç¦Æ‰×xÎÃ9ÉQÕC9n²ÂÖOôVÇJU1â¹T¹q“Í„F†M^¼I¯ø-cúß é7ôcEä2Pmûr Ë¦ð%+‰»~5ô•D$³DXµìÊ?>È›‹é|f»ã|Iæœ0¨Ð+K;-V›ªO•|TÜ»q˜"övãXÒJ·¡äÜûhõëí.õÝ\KýãÊÂlÕïPGÜn?¾°ûôî’ó·ª9éÝqéEm\aYÐå$ L‰-Ѱû[ B6:êÆæ™K1!³2-@®L+ÌÐØ°ð ®£€ˆ)ò<Š RÞâˆà–âå#U Ä ^¤|àv%dòņlA³¥[Æ2´ìKÚÑàGÞ+å¨HV&óH=Ôé‘€ ×HQ;Cæ¿wš0j™—P˜ª&\’ìµ¥ÄðƒIpáE H]ADdžÎâ Ë¿s„ã-¼zåÛ¡µRn)€„r³ÊE“J‡hk…t\„¯J>œ)ßÞ«²4—$Ë ÚœƒDä{ˆÀ‚z-˜* @Äú*{Ó¿Õõdp/«·B 0^þe$¸¨ e'[¨R‡‘U#}¦|ÑCU2›’J”Þ¼ É`‚¶<ª¥à#Á!o9ÐJÔ^Uiïå n¸z "„‚dÈ·ƒa·–#Ã{—iñ‡¸ ²¤àz S%é…U2‡Qø- $¨XôÕ*ü'\æÿ‚9è1êN ¤$h~ …R*KÀ€mÙ@¢h-Dep9ÄJ‰¾ƒø„¸CêÌüV·”¡õ¥¤n„pȼlà)k–K^À”»X´Ö‰€çÑ„_å0Ûéäêô·©­”SrBô‹¯£íç VÙÀ™h-x³ð,ôÒ ôŽ}‚à&ƒn…µË ¼pÅd €”š÷l·©f_(7­œ²á[2›–mµ¡’‚$f5–¢è†MÈ^6pë²U”4¨æ¹O”q{%ÊeH½èpAÐ멈«dø™jY­6; Ø N®¶°§šQ Ê€0ƒùÐaT05àJÊàû·ºµ î u"cpLDû ÜÄ®˜2‰òŠÙ™R6ˆ0"ˆ®à“s±êOín¨,>H˜w'ˆ] Š¶-‡à@_áM ºŒ gƒ.§~sÏàîU_@ï¢@~Sº«jCl^Ó€ù¿qƒ/9"’Þ(þ$Pç¾j†e‰(<Yܾ®šQ ˜’º×)‡ÐCÛßÀU íد´Ï”OéY¬Ú¤­âÊŒÓÖöÉò‚Ñ$0å{vÀò:´neȧt)þ¡€oÃØñíÈYÁUå20à½eZÿ°á¾Ð'"ȯàKqÀ‹¢ô}¸8ç’ Ç•åÛa´‚3F»bÒŠ ,¼aÑEiÊà·ºí ´`Ú< Âma€]TÈÖ‚‰i0e2äW€f–ú=ßÌ1…xÂQ¡ªJ’Q6p+媂én]8 :Œ#†,@§ƒ¹0v†F!†"àw€P+ïÎ7˜ºæ¡dF2óŽ!¨,`‘´AêÍûvId¥œ“ƒö@Rn*n—®)¯=wö<ˆ® w/ko_ìĉÊ_½2…Õ<¼qZ·~ wœá6-^¶»ëß¡wo™ù^5*,‹u«µK[ÞdhòS¥[pÞ`ë½ÜøQ×Û7ªÜPâc™-ñËza¹ã¿.YÝú{ttÝ›sOÝ›KSÝ‘ ŽØòÌ¡OÍ:| ¿~”ÚŠ®ëÏ ýû]Yö¬­s‡œUN|…N­KÕMCªÓøíSs¹!œƒU—m ½³üízqy겂nÄNEywWÅáSN=Ï`ûb7.ßœí$; F¦»9¯¼ç„΂Ú+[ŠXƒVu Ÿ+²ÇÅ>¿7½CŠÀ„§7ÏIRÓx€7KÀ©P§äÀÁ[$'Õk¼íRÝGcUŽG'³Êv¹ýA“] ¦Ö5&гmõÇØ;á#Kê¯\[»Fúå¿àzŸ=\ÛO°ƒŠ=†œÉ +dØîÓf©Ó2F+ÒË× #«Éw†ûõz£ ËHƒ`F²äéOLw¨³‹R¥iÄWk•º…Â{FQùIÒy†"¯ø—qú±€{¥^lÀÌ¢ÿŠ„=º©Uu‰ÌW¥öx;3EUeJœ¦A5œY'µä?: ¢ÒŒú(”N™)­TèêUÖ 2SÔ™Y4xSRÊí[áp~°Œ.¿6x‡¹Mö<ùU^=ëUÔ½cŽñ X–+üÔ¤ýÓ/=|€Š×P\:y§P‡…¦°÷ÒÅ=ï÷á’ÒÑNrƒ¦¸ÜÒ6û"›×ë¸âõ78ÍoÚæq—?…­ Z ßSê-ïÉæ?µ“2þ"où4 ‹A½ÄÚ$÷–l -P¡Æoâˆ~ÜÆ2+e½2½à¦fñ ín=üä¯ps¸µh7»Cép̹§xAþß!rz^›ðj*SÿŸþUüC¤¼“«Ã=é³q'˜#B?‹é«³ 8“Ä .¹ÆÎÓ2²öuÙ¯þî³§gÅ›O*L¬µ!îNÍÉaÀñUèV§P ú6Éø}<ÀÆpqÊÍG}©¨äyºað í–ÁæÅkµž-F³Èm}Åw/nµ}­]À|Á«³Ã34òÃ8Ç oh@é”͵¿ðŸ‘/9ñóï\]TK„Œ)÷v¿å˜–${ú„®6LOTJ0ãŽxõK”Õ×&Ê¢·Ú„Gö¾– RŽí7|ß2È!v-™2‹ßó(ßý*UBOâQ¾óU©D8^b²,w+ÁðûB,'Õµ½R¹Ÿ:‡\Èt†¬ÿ¯‡íæ×ù¹yÏyÁ€Ï…¸î2…±ðÖ̇ÖEïÆ¸‘8–£=ˆIGWýà–ãÊl E7màçì¸ì”® w·(Ýj¹?ÕóÔ%&3[7ÂÝûÉQ^Lw ¦Æò?D§¯n…î)|Y‹ÌqIÞÎÙøØ_—žVãÈBƒgSùu‹P‘)ü³ŒBM둽¬HwïÂ"œœãÔǼ~—E«åb̓V*Cr6þ±_N‰Žøý™4Ū(tvaòT!Óì›@Ó©e¥ýÕ9X»'w\Xœ‹ñ×­¦Ê›` Õ}§2¾ÙÀƒÂo•ÓQï0ô_„(–WAQÆ"ü3‹xŠÁ î­È’‘_¾¼VB² ÕµÏb¦(­ÄÜágׯ4ô \è§ž57_ý×(ìÏÞ ùÿðõoîé@PÓ圎·ƒ}±$²¥uUQ®še/ËpÂãƒÖŒ8To´;^ý_Œ½wTQÛî-]zéCWªô„*=ÐU@Št*Ò[顤Kï "¡Hï  ¡HQC“~ð9ï{¾uÎ?ß»VVVÖì™=ɾ÷ì¹~Ù÷ì«æ<‡}`›ƒ§vcü.eÆÕ>&v ƒˆm`_?Ö—„Ù ¦øwöº©ÒIÁ†óžÙùX~k~ÈER¶0Õ£›ûùãâó“Ó}ÖèGHï““Š® ÂÙ“ÕUî¢/¹š-ÞP#oÈڸǒ‰r¯Þ-M:‘Uq«'ËIÚàûœxM¨~N`öfB2LÔÚ¦:z¦¾hiXG,ÿnŸÈ” LªØÿu[kçæÚÞ‹Ré­ f ^_q¹ÄèïXÉH…ç†ÚER¯8÷v):*[+ñ•DZîÆ[Î×T­r£# Wwõ´¿·ŸZeœ97ÜþÒœÑuž {^q¹éº þÉ¢0×ô›H8òö~æÐç7²¼‚±´´Ä¸xhù;¼'Uëd0gƒiгQ­æÀÇüÕ SÿUº%¯…Òg7vW\'ÿþÛºÐØæ;íê s­7%v¡©YÀ©– àòhᲊ®ÂŠ–uÑR—àÁ¥Ž0(v«ùÍRS ÐHU~ý°zDõ»=)HsD½8Å€»îPlé.Ü— ýTma\ãÑ´)œóA½V*çPâýGÅ£‡Ô5>D'A)ØÊpeÁ¶;výøèi|Ï;û/ö>˜Ð>qÐIdJÒë"RÇóßl“y;pêþ2DåÔ’²7Ž„ynàbBÓs¶q-{q»’Úßð´&ú¿%h§v[¬føÂܼä>ãñk}ÌNåã÷GnðiÑ!¾…z2¦]±=DJì¢e%E1DˆYCe«ø R îh=/B¼Å7}v=øAÈ5[4ö$Š3+ |ëG AÉ’ð%d„ð'átº|–ÚÜezmÙ$’|ô.YÀIøK:5A$]õCBxaQd5¿ Ny´øqá€-˜Ÿ…OgªU& w”€si6~4¯ ú¡&!ú”5‚{«·éoõ6ŠáïXÎ"žO ˜!ζA­Ixk \µ‘ެÂÅ<‡Ì†bïIŸ _4—’%•V pDTJJãˆd¼‚†E‹´ƒÈÐ?<€$ CuuÃÛ`q¢Ô¡ùJé4µ¨bZÔ\¸ËÜAƒ!V1*þ“Ùtº2„è?÷æjþèl1uƒÏ¡bRÐÊ9Ô“qˆ|zcÀŠfpA¿sDAjÓüè©Y„æío|Ek —q1¶E Ы²à¬ËŸXzÉ€èxÇÖfð£­4¨Kb„R– (ˆÀš@®¢ëW² ˜uÏp¯?#… ¶Y„˜&?æZ•ÿÓƒ "GK#ƒ´îýêà—«æ‡Cé cŸÄÍ*€¯¦†h+ƒØ@•b‡+3—«ÀS ‡>Vò¦¿PÞE—?©4¢ÀÐü†ÒVžrô_U~·DÐDêÂYч³t¾·j½ÁÂL!pAãkfÝA÷«òÇË o5¹,ä'ØŒ9[$ W–€Ó•¶ ~´ö,B3UŒ1c0^OA§°€îj²¢E\Ð%ŽZ|@Ž $›.½Ÿb»VfVVOũӦKab|-q,¦»&;däU*ù2{äõÐúk•Ð,öׄ½ýk‰Ñ‘˙ёúV9ýÒekNÃÃÊ©¿••:û—3ú¥;—3š¥×?ïòÝlg8Þl§9ñÞl';1ôÀeßZ[ŠnjX—Ê\n‘ÈlÉ×9ôÛi|0;ù¬D?YW^Ó̆”œ^ê^]ú² ‹g³!j,iÃWMõ5ÙD^ç«+Ã×)Š?¸ûÔ¢“÷ÿÐäÑtlÍëÎ °·óœLÖ(žÏë¿f$ÚôHî¦=­Má ˜»»`µèP3"‹œÝ6¬¢©›-í8èÑœú“”Y6òc²“Ù¦H[7!’6*d`—òœ¡¼þ‹iŽPêˆr¦Z¢¶HfÖ¥'”œ.ëõ¡jÒNfìcFžfÔ^õf}¿2¥Þ]ñĘ©ž™»RÇŒ~X@ÛUÏü RÌ >\ñÔX¦ÞsXÀĘÖ.¯ò-_ AOTêcÕõ‡˜8n؃ÄI?xûØOr‘˜õWؘ4»·ÒŽ•~´•þ±‰±-Ûñ~95±¾ÛÍ~™±SGmU¬cŽ”<ô¼b!`AzÆ&'åóý¹Jw£²J#Ìg—Î¥ô“³®ó×ÿ·ªuPædb ½sçìVÕ>úÿWµžÏ_::Ùjº>wøo'»y?º&¢ß¾z"r {¼÷úïRsÏò>xg¡®xƒ›ƒïùÃFÒ-•Çl~ïóaïÅU#l:ïvüÝ}æ:PÝTm|ñ·ºùüȰòx'sñ&pL³Þ̾c÷ð£ÿW9¯Í‘ËMñŽß›‹Ÿ»ªÞ²Á›%ð#S aÔ`›_ _Þ[}ú¥’½“—‡iù…]zÿ;¡­ó‚ -ÃkÙÁ B3"`B3êˆÆ}ÑÝ€všfì!ÿlÒ9‘Hë´PbŸ­ã¼æ7_bœhË[½æ×_ÒÄjý¨<ᇨŽóÖß M6Ö×N|ƒs:?×ý¦K^±ZK;) Úòº~÷[»?üm"ÓZ/ÝvÖ!ò]¸ÇcÜ‚"` Ùy>»)Y-L.Ì¶ÂÆ2+q¶ýužù=1וä~ݤäu øàܱ?–€«®ä÷ÀqRŽŽß÷¨1¸ðyD=Qxá5N‰Ù}—‡í’ë&¬ ¿šÃç󇦘ìÞ§\w#g\’¹™wÈ£ZîmÄ«ŸôÉŨ7ã·œª‰&|aÛ¦$'ÖNÔ oó*NéÝ~K‹øÜл=‹”WµŸH™ßÙcÊŽ/ûRo³ôIþéçó—¡_“éIül¥¾~~[¥­\‡“Û(Xù¨d;¼5gj±AfžåÓè"ñ@Æš½Ÿ`û³ê¤“çÙA¯šLL{ľø~ëʯ¥©HÈ¢ϱˆÛâÝééuVÛ"¥gŽÔ‰¢‹Rž=0§b!›«Rm°yüP‚ê§+3ÙÑYîUï¼ÿÓ;I-}5ϘV‚äJwÍ"Ö˜ÍZ߸bÝÞQç÷MÒêç†ÝJÄÔwfl<Ö²üÉêRÿë®™nÅïV–³Ä5 nyßÂrq÷ì;+_Ê<ŸÙô<å¢péÌ^âÕ®¡/©«}eƒcæcqõâæâ|zÁ7ûn8;µ}ðô§ÑVs鿨Ÿ«ÎØ\ã§©|§ýÂ#ò‚Ÿ6î6™þPO~0Dí‰ÓQ]î¿Læ¬;8Š”jåÕø­ÖVÅ_ÓµïŒñ"öžSè6R"º­vLãÕ{ˆ¤IK+’¼sðêáêÖÄî´×§âWÒƒ$/È›q±šméšî¦˜¾´¨*MiH*ÿ`)µPn0ÐÇQpfˆ£H*ðõ`ÞRøÓˆo7OÓlyéþáQ¿/òñŸºªÍË#ñöqµ„Æ>5A§(ðÔ†f%æöõ˜ñ*ƒð)L«}Û2à«Ú¯)"Šóq5މ_¬Guq!ú÷`ÉuÚe8&@[?5gÆ‹'^>¤ò˜à¸«KKi60êìv¹,á5Õ§+(íÒj6¬Ë"½¿ìýrjH—Qz·Õìë(¡›Ô$aÆ 3ã~ ÑÓ#ó´8EŒ=£Â &É/‰É»âj{ŒWaYÿwÉwÿÌÔÖµ÷‰õË{µ û*—¸:~ L0×ÓØ‹×¢ƒA#4=bdÙ?ªŸ8L¤—1³OÞ¨š¯'t¤Æì¿«X8./Óq“ø²Û$·x‚ãyü¾©(idÏq·Ÿ($å&r ²Î,aël‰e["(Îô»Ê[ì 1Æ1¦Â»t9ˆ›q…‘•Ú~Û$úC‹-çèÄH¶fv¢Ö¶!QX¶ùg«ú`“lóÎ|mtbž¬ÏN«Þ౬Û8õð=2?Õ «È*ú%ò~›oÔbALÑš/ÓÖGX‹«ð°ÜyQ>ÔðÉ„Ê)„=Ì^QW7ƒâEÞ9ædžÖÀj¿lU= Š.œÄdâÏIØlíοõi}»‡‰OñŠ÷LJs™¾—÷xÍ­Þ®³¬&}Kä[MçûBñ`r¾Ñ^ž«ø$ç¥yŨ $K1¸¹û®o“ëéÂødw}=ëåQke¼ˆLV¨Ü ØIÔQè$©c1"¢Ìäìó¨¢yd|ÿÒˆ„OAjCD(NK4=ò)1z¦uÞô/EÈÒw‚¸TEï#—S"'‘üt^ûß‘õËR‰ùhÆÌo æ–ò”õkfW®–VÅ –¿Œ=J¡ÝÊVÓ=º+³ Ú|ÿ–½,m›8[W¿ï„N5ð·…Smgg®‡{(@>$X5ebYýcQBñ*J°QjN:¢ ZGÞ"mCÞÿϘàÄ*çž'hÍ'_·'U ‰è…ôZÂk Ã5 ½¶ï'<`¿Éo:ÐÞwÁ 1ôA”¹§i°š&/ûó Šd.BcQÄÃx=ÝcD^ D !Í‹†Z4üÖaØ–£lÏr ª–‘±D+Ïok67äèSä%Ð)kÔY)Ø‘_ŽWNmÍ`]— ’'óॗ†&´fÑ´@*[ÓÃ×¥˜iZ¦0ëíšËš§±ÛPé}úÓq°‡(ýé„ÜzȹêRt@ïÜ\ô-–h‡èOò]G¼ÍŸP‘õn·{^ƒÚ1«GÉB‘ÓL, ‚¦§‡¼§öçcá^¥T•í>µì ß°iܱß=A c·,»ÊÖ¼‰æÇ×1¢‚2)aä3ŽIhVAhVy½A:æý‹vt®€ ¡Y Ú¾bUï™Þf$¥ ÷È)®J54 Cw 䔊 IŒŒÿ%1UŽ×GýKbªFkÁN_º¥M‡{¤Á¸ò‹l¤…éËý²³Ľ çµ-ú-å5¤ã¶œÊüÂ|₽AOûµÂæõ­ßBagw‚E)˜ÍÖáÅOXÅôh£˜Ù ÑkÄϬ§Ç( !igNv½~QŸ90G°§›œÞü?ÏŠ¤ÿ°Öˆ{çþÿèYM·—¯¼Ÿ8ÙÙÁÿ{íw(•£1öy²â‡ê™æîg`)æjŽŠdÐâ“Bê>'ÔìK}Ðö-¹Ô…ÑÐ&|Ó¹„~në˜xœh[çe¶Ft6ç~Õ~ÃYÖ¸Ÿø¸¹¨•Iƒ¬ÅæhÙØCƒ÷WÅ­hŠQ¡ø£ËQ“sù¢£¤âžAº­—³Â”¢ÄϾ¦½Olo†ÕO"âJX°€'™³Ëƒà¤çk£JÉæï|ñÁ\úBK4_ïõe½HóËZŽ%¿7•ª¥¸p=ñIÒV(³=É.uòK…õ§¨øüí÷sðiuðνþX×&Ï=ñ‹©ãho!¢p¾©ÝÒ-ÍnD\£SDL¶”Å_%ü7æ!ZL€°WÏÇøÛÄlIÆóÝ ÂQLþËåžö$Qd ±±0‰Å®j^å°íã·ºk–›ÝʼnÃ\éæhÝý}˜1ü+3¶µì~ØÏl‹OFUŽ­o^^­ïÚ›X^:­µ1½¨Mqòîû±ÎÓÒ±ŒÒöSBfˆ9ˆŠ.õóZºçÖÈFÒ€ñØŠ9F§ x¹”td˜óV bó òSò¦Ÿ¬%)>KYõ dWîåæZùL£fI„— ‰µ%ÅýT¶sß.@^>Pǰˆ¿áúô!Ÿ…Û ó Úðœ't -YÕ2U[È4¥p䥙´`ŽyØv3oчޜ ¸&‚kæŠ?‹ß>"}ÿƒ„úà—çÆ©@¼ú*5Mpá7“ÔÍÿ»÷Åk‹æ;RÞ¹C(ø?ï}†p[Oø-À”ðo©Š™®Á½Ô¶¬¶´È‘¨ÀïÈ$z߇¾…%„•¾‘  yžJöü‹©]ympx‡+ÁÓöV®ýÀF.­¢¢·­Ï<Êg›«›g—æÌ]¬—L‚‹~ölÙ¥>=èÌúÊwæ~ºì5všs“¸ÙïÄ~¿H¼ÿ1¥pYÁÖ”Ø9AÜÜFú݆cm†Ú¿ˆ¡ua÷†¿Màž? žOcîäíñy¾f—c*¿&.ØÏ®zu_o ßÀÇ1U7vãZ³¯¥ÓÁÕnçUŒŽ)‚!,»=ÌÓnèEìøƒs–èë%¤ÞìkiGáÝ×÷èì¯ô#fë®9"ÚMo†‘ww“ÈÚ_Å€¡³7.øã2ÂãŠNã³LtWm`bG0!ùOIÇbpŽ 'Ùbß"|ÜxvéZåE¶8&;'Œý%WPÙËÅ‘ÆÀ.m9ô¼ÖâÛ- ÒãØ»®FÊÂÐÜØ|ÛX`ˆÇTû÷7Ï\ÜÛ¯rÕûüibÌ‹àì§í„ªØ=]Jõ•7‚ã…;%eáh¸ÝÃT:;ÂÀ´ºS_ý²ûóÔ‰¶«lkª„i~R=0Fކ.eß]ËX~òA˜ŽñéSá׃ï¥O€Å¬§q³ ÷¤0•›þuŽ%™ jKsë d?Þ0·øcû‹Ø\©÷9;ygWs@euïõÒ½¦ì1¶ëÆ´»Â;ë}«¤© ;æß$¿ŠÃ ¤Ed¾äq;~á¿L`¸«¦¼ïhׯқh*NdKñÎùúìÕß@.ðS,êÅ+a>ênÜOLUGŸ4HkøfÔ$áûOª‹Í3$úDJ­ˆånìÌ’w ´šz.$XL7SLõ®cF‰5> µ™R¿>ö$ƒqì~´ŒÒ]st|îîk¬ö ö r¸Pªgýx~òê!_›T|~™›{…%mÑ–k°¨Ð±Þǵ^Îà‚çígG}÷z™ivÊ?Éö€ï³Äye^½V3¯fÚ2š«ÉØGòEý,kœ§FÌs¶„£‚EJqÌ¿ÜbW:O;SEÞ=êî].=ƒîa1ùµ~µò æ½úŒ ;‘¸<öš¹öWß3XoHòÃs`ö,1ˆæ¢Ü­ƒþÐJçÞg“¶_Ô ¼ûᾡw8á2vsÙÜoZÇÃ|×%;–ÿ™]“ÔO5è`ÉTÅhmÓZ{0ÍSr0èd©™ŽÈº·yNXó“ëçÍE~ØîS‰ü~ª²íb%¤4'Ÿ‘娘¿uÿeTÛÝÿòõÊŠÈè#$îæ3ÒüÇV8(@¶šQú}ÉC•÷mi«Èw#*‚¦Ú3ÂåsxúÏǰ[L_„NÛ‡pµÞŸÎ%ó”ù½ä,ŸMæª5;f[k%³e,—:Q±D"+ìÅ8«ý(%~€ès^Ö@k…‹Q°‹ò«5§ÄãÏK*‡}#0ç@¶™ß]¼W,Á£%Ææ®ÉjDQ:柌EãÈ…¤êçûmÄ­»Â‹·«ÛfL½*¡lÙEÉnwÄÚûéÔl"ùcÕb,Ù6%€W´`¤ÝHdkLhWÛËÀøÙ&òÐ9VkÑÕ€EÚ©EÒ©?m›l@÷QöÁÃò´œ*8µ}]¢cÜÝ87(Ã#¡Ù†· O><©Ÿï³Œsjnø+`)óûÓ?ç·Ë1öQšÎöþïÇ¿Ävàj΋<0$Ýë<ÁX\­x`x Ò(@DÌ6XÚÔ}*TÒä:GûѨ}ùºƒÌAåPwüÁëWRåòІ,ÇÊNŽZmðëûâšFþígå‹Máá—!elÓ/ 5Q¿$ú&Âô<Í3D>eZiNñ¿]òܲŸ^ÑþþÓÆj½œö>¼[93©½ÖæHpr–Ü6+Ød…’¬™W/ywZºLç£æ¶wód»w?Ìî6Lʽj™…VÛšŸ:vYí¶ÎW§™Ÿþôvì‚îêš»Ïv(_X[4­–ûTCÅÆ·Ö˜ÖxðÎ^ùµÜAöÜÛæ£NŽþ2 LëEÉñZ"c8’Ÿ…‹æØ#çç4(Mñ.å6Ȱà±"ÖªAdô{Ð;˜@l­=ésûÉ„êÜá†oÈúåUú˜wpdÆÖøÓl]“5CÝ(Ÿq=G°É”d@öîDi»9>{Q_×;Òé0”#Á1û\ˆ^ŸüêÁ‘~Ý2ûƒXŸè¾OÅrŠ~*!6´x‚j|‹vz¤[ˆšEÂ+lùJ\vdÉ·ÚÁ”J&”ŒïÞ’=W0ö&ÀpÍ^ §‚ë^e¥§…»y«ópSº0šéË?Tƒ§ÅiG.oÄØkì ßH™.÷ÇÅA„'fçIñ¹ƒqÖ9aF>%EìŠ#ƒ¦˜Pˉõ¤@Dzjøæ©^ÒALyÂètVs[Èû0Ù(;Íߊ弭;^‰á+çk}~úà‡ª®ØlF¼ÿ€LnBÚùöÑ•ñÔÚ žj V´,W…AÑzýÑ›tÞàÚÍÄ«Ô×=LO7\xÌÈW1sŸÅK†åðÅPÑËÊ™ô.›—åL;L®kÉŸ˜¯’'7ž'7CÛ0D5¯= ´—¿i{GŽ–aÊøÍ¾Å“ûº/.t*ÙžXî˜fu7~ÝAÂâêïÚ¡“d¤ÚD ¹÷JýÏÔ<¬^–mžàY ®*Ä“´@ˆ UCi´ÈPŒha+žæCñS„°¤s1LÑ¡%A÷-l b„K¨§0¤MÎ ù/6šXÏN"«¦€›µxƒbˆs¨AŽ0ɉUX—ɳ_ôó'V)N¿®ôÌr·›SÜ~íOyÐRAÄH†Ûñ äOh„bñ!‰¸SB‡l±NKqîô¡„‹£1¼"AQöqXRd'!b. KYÅG[0A|ÕËŠ;‰§SHoÞàÀhõôi8p0î 39È5â5.Æš ÂþR]føMxÏÓÌ'43QÔ@0²²xb‡|ÂpT&kYªÁ˜Á†Oynw÷VÏz®ÁDŽxä±aÆÜw@˜‘À cC pÈ%ˆø\RŠƒâÅCÿ+òùOM„(â#™âc !ÌÓ­`ÄE±ä ,"ÄÈi$tòW¼ØRb=> }{EÍ”rÅ#PÀ+ÔÓª «'*ÃhðµX ²bHùõx±ÁD-_fD«ºÿ4¼F9‹!jWO ä„Õaõä€õh¨çümœR£‘:$ÉçÖBƈÐ EËdKÐÂ"ÔSâö5Û*Ž>óAt„yê3#JÔeÖýä%§c>&ÐöF™±é¯4ã…ír¶YR¦îȪòÔ(2c~–ÅÔD÷žÜ5ê ˜bªá6ãÐ/x©˜ß~z6O_ã”+_³5Éz7àøÏÑ{îfç[xŠ‚{Ar'.¯y>|»s’óñšþÃ7Ü“¥×ä¾2_h:ì}>™¯»ÁßS»ˆ˜g‘=bOq³ínÖv™ÓÇüÑËÀlZ¿>8”B+=‰;…®‚ÍmÔâ°Ó¿ O~“ÖËšýõ=¢¤“&‚±Fž;•ÇúM‹šž,u]~JÓ½~®š¥xýœEôÐÄþ>Ç‹t³~"xâ÷ˆt±¸³gE#4×Lìù_ßôzðÚT !^i!«ôa6ÆAˆ®ú~…&6©žcg])_{äÜQ]yôãO)ûWÓãðiÖÁ_ ðÄ­Ó7b|/Wø%Æ,†YuÆ—þ4óIzצtƪ³y·/k6ae5¬Tޱæí0+ lÀ"—;’ «Þn´ªz:ì>^ŒÍ9Š¿dèr/•ƈX”&m°ŸÃV¹–±ÆP!wZ#¬ÏZæ7ô¯·mØŽ"hˆ~U†ïÛ¬žGq§ö^ºo\ˆ’Ÿæª UfàÀ¯àu•6ý ®¥wÓë‡a%oŽi®úµ~fîÐçM»C›àÙ8{£å;ý-•šð«"kTàìEÊÃCFzY˜ þ²eÏety#k±^0ÃoÊ-jCœrÜö³Ç&t²óR¶© K™'Piè»UjÒTP%oè‚9C0B¬Â°¥üµI´ Áª7&b•‡M÷ÍÀj!¤UüQèTg :§ºS 3 ]0£FVmØ1+5t5nzyh!n±aXý½4?RฤSà¡ÔL,ÌÃy„“`²„Ñ…Xcõ W“ç6ØeÙ˜®U°hhVg/OÂR´5q?ã¬N¦„fÊ«æÀ9öW_¢wˆ°Ô?3“¸:(§*±4õ8ÐÜÞŠ÷;±ïß'ëÇòcß=¶Päù‰™²‰ RoD;¨µÈ‹4oõëb×õü•å9 7H×Ίü4º#G®có[ûøcËkù®ó@ÒBé+/®¦Ï‹hŽ*Ô° ÿoº!á¦ñ×^Š;wÄùÿGϬý‡Úap¿ÿÙý`3 ƒßÄù²ÚÄÿÃìw©¨xñt9•‘ZN÷CŸá½ÇqÆeæJ&ˉlKÓmoGúxô¢œWöEªyM[Ì ›rf+š|⮎.+W«¯zNsuxçäòüó7VB¶:·ni=æ5GàÛ·±?ï4MR^yS\½HÃßÒ:]Gƒ_ö€¾©ü§u³ˆ|RÐ "o‹\63¯ Îï>H©Ì;óHã*›£ç»7=vÞB¸/ᘙˆÌ: ¤è²ƒí*Ýk\B¾MºæyíÀ)ºl Ò»7’úü†lñÓyÒ-Œ_§»ªn^Ü¢y%á>ü*\ucÉ=¶&ÿépÕ&žu¿‡°»’Ž 4½YA¢È´N)#Þ˜ÞL!ŸÏÞˆ9Fß°H Ïu9ºÒNÜ•¨VßPER“®_Ý%MÒRÐÀ;_šY´T}«¯¶µX2Û%0jÜK Sc^OQÕWq‘¥×>ÊæsuLwžpuqÓpÄ3™&+MÎÐ7Uuo¿çdŠ)#ÈJéõ®\P¢J*-¾ë3hðŽ~'^£ƒ æö^è+WTÐ rçM´"¹(\O4Ô×'TõÛQÒ…Kñµ±i1c9[²u¼‹HÚÿôƶŸÌÔñöýÜñ;ßn¥žFLV/'“û!î#û“çß}¨Gà…k¥Æ\o é¢>w]o@¦kl‡zú¹å5„—إèÍ&üI£âa“y:ým¶–¶¶¥ *àHŒuͷ˰¯…1íTó$Hã½­5QÜd×£FÖfv§yÚÞ>©ßʼ´ªí…Ò+îówëø=|·ÊÀ¶F1šï0ªJ‹ú¹ŒU÷ùM76N®ñƒÜ纊£Î„3Cç¥ÊlÉ›Ò7« ´þmJcbµ¨±Dt«Ø0Óšùîcò¶ W|›Ùvu›úE·GÙ`·ú>Wgí½ŠF±Êûò¬xä-ï—%«âwŠs‡]–×cåSf·=ÓÂÇH¢¤<ŠCèV*Ä—Ýuçy|‚ä×´«^ˆ"ówØžÁeÀCý‰wÍÓ‚ ÝiŒ åJ¯48鸤²°¾®hŽgï}.8l¾kj¦W~õÀ¥,Ý|ì£*qÓE½Ö{ÐË¢È.îˆY;¥J‚&ÍsŽW>%º‘·Í¹f°¥>{׃²ÍKÏÞå°˜8ɤ{fu¹‹^gu2ZÊñRÍéýó~uìRÿo>cáfy8rPØÍPß š"(F窫ñx-G9Q7÷‰mÔ‹gµf2esmð¶‰Âa’ìœâ‹Q{TZùŸºñ_rMÒ>Ѩ컼D†–ä.$w‚ ¿Jêžs)±ôÎ×Üjx )Ó´|25šde)9ÄO_úQÞ2hø5á]Ÿvf–·ˆ«t”þ½Òßq¡úˆw}tà@R- ˜›©ÿ¦ÈÛTHØÔ0¯¹D ›ÔIeÅkpêVêüüÎÕÁ¦&ÖÅ—-¦F°bg ÍS?ÿ©(ZM4î^\—йi¿ÙÑàûÞ³º¤ª¸ç ÜBêfOA|äV£4“¦< a±†:QéV_Lúîƒ •­OÂWâܾÙeRK(V°½Þs ?Ò]#cfûŽR£‘KÄ»Õ^Ýø¼ø½¤$×?J9CŸÚê…M‡º¿=fj‘EH¦ê°êÎl0,–ûPѲyVî·ê¥CÚK©µã¥ ÷s÷ÿ>®|á¯-4ÿóFR¸zwÇ.è¤i½ÃOD·Ìµ1?t«ò;‡™û’«y‹K—¡Ëž€EAí«èÄ_³Ì£³–çþ-‰M«Å¯’f»ÌW+_ÌzT_4é9æM€vƒÍ˼{2fòÁû”;žŸÌ“*$›‰ŽvÞÑvªr*‘ý2è'8Âþ†Ò<÷”²k-Ú¾Kß°_³}>VÊ {©6t/ëtq4¿>_‹3J½!8ô\€žÐˆXI÷tY³AÞwBþ+qÅa&£FûgfÆ65¸­ìfœ€\ŒWµëEþ*û¾5.>½öRmç^÷&[Y¬ÚÚ#Žb~[ØŸ»Fì ÑâxY`«/â_ t%â屫ú’ÓʤNq+NMΦ¾æj†;4²¡nöëb+WÎ+]ÒÛw ø8ñ|¼‰è¹sx±?›çeçÆƒ3;Šaü¤Ž0аŨ| ÄC˜²#’n‹d '8<éx(Ýâ >6”y! n^pà¡£@m÷"ºð¢PO3v„~{1LZƒ‹ž‘,J¢Ë–¡ÎtZäRÆXOqˆÚõÞÞ>¨ ðÅ€Ûnëùã) ¡À€Ê¡5øœwÍ)㺠déÅù*k±LÙ%Rqv‡ë´0!JáHûÄ Íè½Ô¬nÆgßhظ9BóÎ8&U$ØKýîγLØ6"—~dG°oAùy/‘ }¼ }ZªƒNµ½_¦ï~oäY˺ è•SÕãÌ\Œ¸¹Ÿüÿ’¯áƒ¶Ø<ÏINK×X0Ë É¬ }{¸Ò'’îPúK‚ÙíLÓ^ë0쀼 _×ɬ¬Éoø÷ÎT[¹#’E6x³r9B&ª¨уƒá¸·§†Evfa} tPÕ¢ÇDh·Oî•’¥v=¾$œ~Fb ÜLú³X‡¶«õ¹rê‡ j|ÜÝ@ð_; 5z£Ør ]Ø”ü£†Xf’8¦iÀ¹¡¾N(-APlá±RÄÓžiæ ¡ÍG²õÐ\ÜM:*R/;î×D/‹[ZEׂš"ë"ËèZ#mø™ŠRÂm˜ôF10îlP›ØWšÕŸÝ‘‡yÚ¿W ÕE®»{i˜!! wàÏ [mO†¨Éx(IJôþ@š È…Õ iÁŠ—×i €ûÈiúØÛ¾a…Ü#Ð‬ƒ47ÀmSl<ªL¸è—fŒˆ/âƒ21ZxËŽ.äS\¨ÈÜŸUÉiÍÇxJB(6A;@ÁíÉ« x˨¢ï{ô ƬÂLn?ž­~í(òù·¹mlÕ*Kà‹ˆ2 D¼Q†Þö.H†AŠÕEÊ#ˆ0qÀ±âH&§Ú½‘X¯Z(„ƒžT††!ʰd|‚Ka*R¢3W ¡VøhwOäÞ àÛQ,!€PGæšhŽ0,²“1ŠeDvæa’å´Ši1ºÈÎÛί_4ÀÏR6#D`ŠüÈÄäCH´Þ£m øž*Àý!Ý?ëGÂÖ³Ôò³YÏ$9­4e'\t¬2t®ø¯‘ïC”AÄ[`™½ÄÉ U'|t¹ ä\ÝuÒ£µÄ È_2{. É«¿ý¾Á·eyÿh™‡HK¹8h” #õo9QQ:9°Z @†z*B|¶ÀmßnËø´D!62TfÌ[9´@Ô-ÿâ§ã!G€‘dxp| ´P@aƒ§Óþ L.TÌúJìbŒ‡éŠ*zJŒ¨ õ¤æî`Ì‘O ˆ0»@eЂ‹if.$ÐÒOkËÞ´Sÿ}Éíg ž3,ø¡üýLàLþ4y§-S@átBâëœcþVȶBÙ¯PóŸ2Æ¿Þ]O2â~ò¸ÿ;ˆôKôãá>+c8¢;_ñ{5 ðBéÃ5V®­ÿÔð{óò-9‹aXþ ?”— ±ú­¶sÀx_É‹(w¹ïôWï•ÅAc÷]…íü6£ÍµM)Æì¶Z./k•Íkú¬ Y±Srȵ‚þ¦âÆíyYR“qžvÉcËÑ+ÐY~Ä+™5g¬ÄP2˜-V‘z{q”+›Ý^µÔ¾ˆWt2´Ä4 $µ¿€,¡žê…ÿú=œú?}äô%+ì‹ ×CЃ̲ðàªÅò›‰õÐÂøèReèmÜ(þD‘ÂÅŒÈß|4¶Ueˆ€jˆº$ú‡÷Ó&LoÓÐõƒ ’»ùœâOC°G×ÜÞ¼bÛ@Sc½YOÈ’ñ£¿V×û3ÍA—S(×¥«•'×އŒ_9\ëŠ1VÇŸâ#ÇÎéN7ßKtnð$Z^ÇÊhY=@† =ŒE׬#œ°¢øh2,¹E*HÅÈžéÛï[ –~×[cy#&ø—Ô2+ý2ªrDàZ¶ »î3°—|]x1üFW­ÑdM}÷Û ux÷…)¿<ìŠé{Ú´à’Ù‡ŒovèÜw\øØf^ɈLnL³LŠ'ÑŸMžuÅ=Œ'ã(bk‚äœÌväÖ–“ \´ã#ÿ"²(Ú±?IîI¹Â¸ýn5ÏGî,hˆ=îâ½ØÑÍ¢RÌ¢£÷M£ƒ¹®ÃœbfÄ„¥†Àu1Ïe„D2¹×}d2ß>j³–PºE•$Rò×ËÿE¾ ï¶-Ûº• yùÑå_®%÷Òê•6üÌjû26ú¹ØÛg^oT}¯Ž›®1Ï[H4‘™iþa¨—°/ágèÖ·p£p{\ï?æÿà¸Zþu±,ïY‹\zAÖ¢=Ål ~…­âbÒ ¬Ê±}hAÃULº`­•¿!¢EÕŸí³Ba3økµüuÑ9éèJãU'tNi§ººêŒÑý :ƒ=Sç}öþãȈü_£Û¨Å„’LW0Ì ¸g`gùÝ›±R€{"¶ÞÊÁä»\øFŒK´ÈÙÿÑhZæ8è*·èÖZ}ëù3£ zFÜ ¡‘¹à?Oí OD ¦4˜LLa ì%JÃ.ÛÂþÕ@Ê\Ì6 b.”)ýÖÞ¿ø±ÅêÙ ÕžN³ ÓU®D —µ;í)zià–âž™x•Ç*£`4h…“E\æ"v̬¹ÛáõŸ»çݺ¿#þß)lÚe|²[ÞüŸù-ü~î þ_iÊYÿí·¶×½²§üw-~*•‡—Š“àZ{È<†O‡ßgß—Þ[zùÞ¨Ò¸ÚdWxѸÚUmNll>ÐÑÄî7Ín^Ûì<дªqqÑ“µò ©eeŸoèæ]–´ø·³›­Ñ@Ѥ×^¿‚U%Ìþ5F²g”}ú3i9P,Änû‡…¡þçqÜ·:¿>$_ð¸~Ýa#¸zõÙŸø¤|ÔVБüÕªŠè½Æ>•׿'žs·\¦+ÉÌ÷ •.w}Qej|slMf>|˜­ @JÍÖ27æ»F™ö¸Aäv{˜éìo1WöæÞÝ•&[üx®!kÖWŸ½yxKÌ®Ru!ƒÈQ²؆ӰeÕÓ¸ñì/¦[<îóîRÊÝԈNJŠòÞ¸3p¾Ï‰Sú3^Æ~®3ú™'.CÄLþµ‡‹Ånê ]ÂÄ•tf@ùÏX{LŒùW.0þîmN9D¾IŒn7ñÞQ§;Àšønsó‹˜`Mu„îA6>Ӌ欺å™p; ‰˜¾Ä÷LÎIj²øgS¥Î†÷H›4l¶Ãi7ôú—lW‚Ô¸ØWß½å¤1•è4K¥þå˜äD4ÀB³æF¶«Ûÿ(.±ÿ¤ußÇ„F¼!ûãÎ ñÖ]Ó;‡zØwÕ|gšijU$7c•]2Ó€ñ`|—£Öçh÷€»0QUžÐóõ"ì1ÁP¿O È $Þ$þ¹Ø´ýÃz S9$Pb•z!ì&1pœßìÚÙø^H¡N?£Ñ½/ùmèÅ[Gùììúê «˜0fZ¶Vçg^ìfË](…Ô#Ìož¾Ây4D Ý-"ôÄ5¾h˼òÛ+å·O-ס©“ú _±ZؼI t´V§°•S}xø¾Gâ·zŽ› £ÎHUGZ–Öƒ©z_m—#¢›¤ŒsÊÛ7=hO[ûˆ“ËlçC‡M.œX\O§HÌwÊ~ìà+UÛ{pݲ§°ÐúÓ$íK“ºM˜Ëh¹ÔJJA7RürZkøòˆ'SV»ÃBy5˜d¨æ9,ZPÁ^ôÄÝež¶˜Æ/{2)J²#¤T]¿rÞ⥩{0ºµÔwñC6 ÍÖ9ÚÖ嫽U“‹{GÁ@ÍÀbê]?ÿ… mC7*Ônúžb÷¼þ Ô·‡¿òøxJñœ^t¡-$™)d- yáԃ̾ÙòvDxÒëwxwY9Fï™çhæö;Õ7ÄQÒ–ÔïÛ'öïl^õ¸]ãMhc¥•¨©-8ª™Q_áÛ”vX¾olŸÊ¯a¢Ò0ª¿oR ¥OÍŒY¼ÄÛñ(t|ç‚gÔ*ëTµTácêcøGT¾ç–[T•TÜ‘*‡äkLwײî®ùR•4P÷yÎVXïË•‰ÄœPY‘åj×G¾L§X;ó;Øcë#äl5ºKJÝ÷<Û!•Êý¸3Z}¯Ù|‘ËËO˯ȃ›Ë–ë•ø¼΄«D–ÏiÌ÷P|1j֜®dÏØg÷5Æ]“8í•ç[¦Óxƒjèõl±ö¦„sS÷BÏÔ_*qý½Ãõ—Êæè!×ß»Ç0uï/9—% áúx[ Œ»5ÔóÿÛM“ô›´AþLiÁ@-.æ˜È|\ ›‡®¢åÌ ³Îí<¨ýí(¨¾õ_ÓÏïö¶@g¸€5ôÏkaò É{ª¤Ð1`Wù/GøQZ5º´û„P (.´y¨K…‘Ô¼Tg²ÕÁÒÍ ‹èô1àú1’5[­Šœ¾ƒb^²ð笀‰Lq|Cñ>ºJØ•D‹8 þÀå!¼qáÿÉÿæÊ ÙÀZu&wÞÁú¼®û ž âZéÊå¸Z¯ºÝ0\­{(æJœM™ ­Øˆ‘ÞðSåJÞêÄNïfœ§D]’!Êð0ñ¬€’§:ñ"t }föoªù¿>aÿ·§œRCˆ–=§@ìæB÷i̦ÀÆŒ p@˜G"Úƒ øhKP ðŸÿ]=‘—·>›XÏPÚc,¹P^þÿ¸Vˆ¢iAþ4€>æ$í%qóVϲÓð§Dáà$ôŸmƒ p ÊJEç€üIw< ²“qê‰\Þ‹7p×8Ãÿg°3 ´<.Ö1 ÃÄ„õé2ãÈ2KB+“ÑOݘbÇñ3¥‰ÐÕc€¡+P†m …×C‹—7ã'‘æP1kT~ç_ ñàdÏÐYŒ¸VŠˆ†ƒcœKÿ5/-#oýïhõć$⣡2¹â‘ÅBøèGf)'Dlñ ´F0 qáóvÝyÇ EúW®NPÜ[ùoÃʹždùçêTDö„Áó›Ú ŠýºÂÁlÖ¤.âgÜÊÏœ¬®wµ,å:»ñb]—Â*YŠ× È®LãÒ‚ojéLß}eàß}ïÃ)6|‰á ‡ ­bDªÄ´ÿšA²P—B¨±èæ3Åát™È¯ÊðŒCj‡Ÿ!¯¦çã¢wKkýZÛe–X¿fˆi`óM6UqtÕ÷܆‘Õ Ù¤Ïœ8ꩉE6þw’ӽ߳ê’{’I×5$¿“GŒ!~ìpÉ„ù ´C§¾Â“Òiw¨ÍTˆ6žU¡¤íØ‚¾ Ïúß_ \eo¡žïS§úé8Ó§ÔžŒQ•Ê?ÍåsˆÆyäÉ+/‹$Ñ)xú¸ãÆïàG»´Õúx« ô>’¾u?\/çË·¿ô<Ðm¬¯ &12I²lŒÆÍ04­®9]QÖ]²•gJ´ÆëåŸ1¶v¤»bnFÈœ$X~a' Æ?ݤ\¾û¨}âÿ±e²ê‡!@˜ :qФîH¬3¤ªÓCn°ú“ܲçÿ¢ì­£¢Šâõoi% 麤;fº¤†î.QºAàÐ5ÄÐÝCª€ÈТÄЂ€”¢¾z÷¾ëwï?ï}×:Í™9gÏÞg­ý<ß³÷óAþ³š‚GÓ¹=È#îÜž³QûŠ£(„Ãù$ËÒÈù¤Èi†Ã¢ÿ¨¬äˆiùd•ôÊŠ![„½[Òv¤i™÷æŒQ¯+>FσRK-ñ‹c¶NµÒ):¾%æJK‡}óÍB0z;Û‚Á:¼•Kv„}|f.(ŠÑL›iK­7qNÞ™Ž@í°`P©c¶Ë›D—aozïfíõgK‰Rpµu¾µá Á‚ Qù øù¸0ÕUÆJ¦ñaðtÞ­âœÿî-Ÿ²î•ïÝ;§ºwûÿÛ[jÃ}|þßͯÉÙA¾óF”#©¬B¹wì!Í5•¿Ñ•T?P ÊzCáhÌjm´ÍJóþ ?¹}>b>+k¹°ªa¶o_K5¯‡Ô5Ó­Ñ«w/l®ÿ©WÅðg~@:ìói_®VÌgq’ÞS³“žâÏ!c.~ÍèÞ[; j~R|‰ÀWµó© Ÿ {d|øŠ›¥¶]åzòmK‡îb‹wýë‡=Ì7j¢6µ[elMä]z8\oÃa€!æÎ>Ã]-¿K÷Ÿ M3aŒˆ}5‚Â)q »Ï^Sûœ‰¬ø­Ëe¤´Æ,Ewinl™ÍͤŒ– ¡d†•‹ª§©¨³.9èRq¾˜ÛñÆòóéŸN9“Óþ·0]\’ð¥I3Ä®\ûíeòP½ÜÐ*ÕÃTbi¦7bt ø‘ÍÆÂ‹”$CÛøeS’t$³ËäMX›CqnûuA-5x®×{c28[«á<—½X\v£:”É1õÓU¯—Ù UõáÓ¥‘áÆ¬›F‡«!Væ*çŸÀžù¸×8±ÜïQ«ŠioÔËĸ•qIŽ ÷•¨yn/ÿ~gU÷œô ¸T‰ÅÚt 7V[íú¼ú´t/xí¬¤B&¼Äª× ÔýJ˜_¥®¢oñ·çœ©èÓˆ³@+VPçS|S»ÎçÞ…bü:­mƒV]£“A×%3O,¢J07Xè/¾8’¼éR Ѐ‡ž K 4À:ÝeºSõêbºbްÅÊUö‘%mÕ$]‘KGïЄƒ]ÇÆ—dëgQöMº¤OÏÊ5¿W(å:ü:\ÿh`zµõ+^q(á4/ªšžÐ Fúê<4³:”p÷ÃBð™õϯŒ‡Õ Ú÷µdÎÞ6Mϛ͒ê 0´ä—/ “:p+I÷eŒ¬Üý©“Âã …³–œH~ZöÔ³ez¼ðå¥8ÆW¯H„úÕ„¼„óŒã Ø m)O‹ú>3‡ (WÄ7–M ‘ ç’éæÞàö|èÔ’N†¹ˆž¹…ÆöÏ¥vÅS¡lª]³F+ DÇàsìùþ+¾+`¢\ÓÜÉ;"%­Pj&r o4íŠo™Úž`U‰È‹|êKR¼\(%ë§ç«}’¼³As²JC{h–3‹HÛ´Jò˜Þ„Þ>8³BÊàa%0„ÿ¹¥Xë h™Åò»$FÑ•®¬ìV•}þ”/\¹T©”~\YK“»[Z<Ùi5=m[=Sȉ¬© †‡ýɪ¿á:í«8)0›n­él|êsCŽÊy¾‡Ì-þnÿp]É…VýG:£c££Ç“í´RƒñæYks]jQÓá1r%´[0õ?ø-bzþHoQjƒ±ãÈÑÍfQ÷ýÅëo{…#Â+;·cço}®2k «òóá‡Ò6| õäߘ-»pâíãj„'ûÖ0~9tˆßÿÁî*Ša6y•‚¥â±Írù®ûVèþé‚A†Úîℼ2üOjS'9—¥"×x¾°w.ß_I¹¬ \’ýà†ÓÐõø\ÝpûtjP»=¤“ÌÉ,/ûŠ­ÍøÁBh(Á°*PjÅR¢aEóG“ÁI¡Wöò+‡I[šª4lèp"-<_H£YÌ®¡ÞRóæ‚ºÛ6u’c@Гñˆ–O4Hqz Cézþ}xµÊÊf’^ D#^/‹ =¨$!¨>9.S JéÚɯ$éå¥x'€*…Üs ž(šRCÊé­,¡ ìÅ{½Óy„Á‚†åàÀ;…4‚$ѺñçÞ¸€aò¹— ­§ JÍ™ÑGJA‘ïúÕθs*@÷¯ô¯(ëU®ÿ^u Tì«R­2PÊMãBã)¡Ršãçq纥w\„è×B’èøób"-öW×Q¢µJÇÑ•wÞ=ºý†OÍõT(*ç}>Û—$A!be Dpû«½#'A È<ã(%2´ô. Ý}ç…¶ ˆ$Êô+˸Yÿ-ã”F7 i$+T3¡ýP¥mdp èjü¬< SZ7Aö·qêª&š€ßß/Š þCxk+¨Òïäp.h9êO ;«¾S)‘ƒœI ôйü%ý^4šŠy§°M½¢ð,{b†UÌú”ÊRI~#7šÏúäÁna³ûu)é5C´ÝkðˆšªfèÉn¼W ½] ɶŠ×PŠ‹h@ÁiíË›6zëÄ”¦‚>üUþ«£‡‹mÑ¿o'²¦<:Ôw˜izÅUvz¾PTZQ³7~R>Þ2'iðNÒðÛs®Àç\7÷¸ (CßP†Æ-úü‡æïº¿ȪT ê7iyÎÓÀûruTiºUéV:I†‘(•.ÆÁ¼BßùŒä˜h"‹0ÁAýþ@žó¯&ÙñW+Êw”… TûÚ.î’©¿œf8÷ßuw´cÝz9»ðÞº9¸¸ß:Ù¹\eG×g~ÜÔ@¢Ï8‘«D—³ ª-oÁí WdÞùÛâ¨=:ZÝA?BƒN]‹‚ï'ÌAÀ”›Ð¦6#÷óÇA’3ÁƱ)sXŠóA5õ «¥rí N÷Ëò³°xú-£'dÙ7n7݈¤Ä‹y’W™B{“†¥ÍîØÙ³3hú‰mýcnG:&=sh²–~Õ/ÝàþÎuk›[ ½ŸxçuãåFtxÊ §X‹1£AvXƒÊÖÓëë4àñèY!α²:gxP¦AY|sÌÕð4%[+ƒ>¨¦Lm¢fØÜ¢§³ `(—RÏ ‡„æmŒØœIùÆ}¶í»ÁîH|Î úÕu#”’0À?õjx{Ë#P厞/ŽÔSÝü]ÏgCiÆÔ¡ÜñkƒBjú–bÑðÁ«“â[Æÿ.xâöäd4ðïݳ~rïÏÿZðøü—â ñWý«xZÕý_õÜFGi?tBD?bÈ'&CÄ)0È)b•l2áŸ.vákõX_gß[˜Åk70Cv´afU5¡‰è2Ö- αÁ5‹¦¿Æjö@² nõS°”ÔÀ0¡žî¯'£ë!{^²>{“WÃýg<÷=Gc•Å]¿Èò¹±óàfx3»‚ª*JY+‘6ÍZšd?DÁ`ßá4( Ob¥6›³ÞÓ1Û£ÊÌ“¢(ïÍ£âáŸï¿>øõm*[»nX2O‰,+žÒØu‹ª-Ϙ-qÁn¹Ì•ãÐheé]Ïg›ÏÖòçBÜv‹ë¦ï…Õž´¸Ç–å#ÐØ8.¹&&NÅDx´Ô„Š§Å˜=Ób N5i³X’ÞÝ¡Šù«óºâ^²KÚe‹´tQn³Ã~Zm‘„ =Tѵ ŠõÌ~[ ݈~0)#æ—äW­ñ9ÿ¬L3(O4¦LjÐËÒ“<¼åôpܧ[pãk ¸Ýç%÷o,!ìÜëÂ홼¢ÚT¸ŽIÀ„FÍL½¦_ þk“læ¸?RîÙáUíqKJ™–¦mö0²1©FB™ŸTíûÇΊÄ­‰7* â@>ªÈQ…±èë‹â‘ÙÅlç•*xFÖ„i‡#Jk cÚ0žk5–¹ê>×b1fÐý²=‹¾;,9K:1š‘„ 6í«£æ"ËÉ1DàPCA‰Ì&]‘aS“|:b‰¹="b1 ŠÌoñ£ Êë2i¹å•+Ò¦}ÙæÇÖ§åò½5U>^´äãÐû0þrñ§ßª@ÖMþÈÜE²ð«B#ð³¡ÁE“¶9±Ø˜ÿ·öH²÷ê >q,õú)—å”9QËïp:lò‹ú•uOI_D¡–Ü$Ýz»¼Ð3³Á3°êÒÈU³ ‡B¡ Jlh^Q-ÀBi¥+¤aÂŽ~½‚Ë›Ô@Ý}Tθ(žCÑÊ·¥+ÚÂüø“*ëƒX?IÚšR z"…Ë;̓ÿêˆR)àC“+I¨äæÇê¥Òê@¥âû_}cW*­ Ì™@ò„ѱÿQÚ„²ï%z¨ãÞg~ëECKÍÑádÞ*ÕãJ·$Ðþ|¤IÙwÉÿXNUºþ†NµÜµy¥Å_Ð^N‚ rA¬èÆD›#PøŸâv®” 2Š?—¤þ‰ Ý`E›I@Þÿ=— ò ǘRpZx¶Z?Z0$¶ÏL`§<¸Ç íҧ1 „ž'¢ØTMME´˜—ë”°¶53S0tª¨yèÈz$°+p°+râ½3†]Ç©ÂÛpæp!{õ5ûLK¹æ(ðCªó§’*Â÷q ¬dã©¾å£ø'œ¼j–OjV†` kã8Ò6Wì=E°ãVåÞ7ýpÇáµ!¿\½Öwë½{ÚcDÓõCãdˆLZø[¤JÉü#¸J?È,¾%$çýêΡ¡KôM‚DrA¿þR»L©êL©ÁµßML–  X—s ï—®§a³í&éåÇ{óAIþ•a#• ý)-¤©ìTäïêg+öµ¦Ÿkf¬ç¨´øŸ\Cõ=íOàã ï „ü§æ×[71ëª9ò¤B‘ Ö¸2h"ÉÓ³'+ {†ôƒX^³–K¾“Æc@Üšú d_ÚÎïka©Æ§·›)%ÔXÄtÞ:^ 39×èODÎYï=ÄÕ€deÑÿXzìa‘í>þˆ»ôøÄrº‰Çï~M>&²Sù¶6„*`‹ —ŒÀ+€F°©?B¡ajãc [é]ˆ“I÷o»NÄßÁ†®5,:Rüæ4ìWb$øji÷vÐwŒ=Œü‡šå}¸˜jc™­OˆñÀ5ãJ×u7ó£®­Ú‰œZ<¾N¯ÏÝåD¢¯œ‘«Ÿ¥ÁjùjÙ QÎvcK= x:W»RѯíoEªƒN]S¶ý5EoPk·~2ktyùÐø‘¨·-SØàø-zè”_ùŽ¡uˆqúÙï8¶-‘¶„Zc®ßQõ[~ßãÅQzl!n„NÈ=6ãnuâ¶ nž†=ûRÿêËÒV±ÓÓ0¶öM£•¹oŠ¡ÈZâçCÄÙ+¯x>ÖY¾}ŽZº¼rç£~è[! r¾1M öOÝá7nƒeIkü”F?¤±Ž~²€ž•©ä«­Ã‚ß"Ú&ÃèhVu)<“[?;½÷™>HÒÝZó0¨¨kÛîNé$€pÿNÖ8cÜ0û3zF’7ü§)æ)jxX,g,:ªöÞu×AT¥¹»ôéù—ô±·‰¼|–~·ž Iö‡EÛÌžÚªrÎkÅ_NYQ!Hÿ»(ÛY2;Á¹w¯€ø•æëçëéçû/cØú?WügfYx ü©TÏXûž#̃™C;xÃhÁÎ÷£g±òÂÔ43±²Úú@ŒêlG€¦$Å· eÇ,¤qmãâe‘ÛxBýû=I’²‡)Ÿ%Sþøœ¸ÑÎÎ/Òˆ‡ø‡Lžüö×½½+¾~þ ‰x oúuÁz¤%ŠnfšªÇ©ë´ÌšYæ}@úåI ž'–îO„u+#¶qL¹´D'æ ®"ÚšX¬Mœ¬Wtn«„+iñî)•ôc†•ÇáNí§{S]{mYOmk}kâÚ1 _$W õant\­wd)ȃeP¿’çò!(#JsÊ““ã‹P}ÉNøÙ¬A«ÜŽ×FÁ@Ç>N¿ev.’N&«`3Ú_سŒ<"#ïý‰SòEø#Á!¤‘Ê¥/}Wòèwë•8mýu’ˆóP;ˆïäv±éýv¼l~Kûíº•ûAµÞÒ”Ï3éëo þ®ÒùBþwm2Y)Œ;³"Ö©ºË_WÖõ†é¾þ"ã¡‹ÏâŒv°JŸ4BYNøšg–»9K;˜ræ§ñr/)»Ùõãá—"ëD;ÝY²£¿|o{p{áW…\!ÜPðÝtÈÃ7°é™s<òBכܺ-Ô-ð„eúuòz\JþzÓ¹îY r\>ñ+E J,Ô!YC.‚xfô‚\°OLÂ/{M›àHåç'÷øà{íÅf.œ§$Êéú3‹ÙuT²Âܼzòwàô^ë•¶BûqV„fˆÑj„ö¤<½IÛþrÔ¥ä/CU’,Fa]«ÙT_­Í¹¦®¬±=­Ÿ-+m¹ãû⩟$Kg3™²sÌi1-”Ú^¯}¥cFü¤÷|Íßhrt?°ù³m@XÇõòÇG¦½œ·y »·×µ·ü$ù¹ÖB#Së·DŠ¡"Ê|/Õó!u5Dú(:`V¶¬Ý@ölÓ2,ûwÍ…n5yö )‹> øb¢®V>ÿ5½Ñ’ÑWòëÆ÷+Ù÷(ÓŒœkŠÀŽÞ—¥•Ä×ÞÆbßK°¸P/HÉçÑMin÷ç‹HõGã¸Ê>yÂÇ3“v\Jë*øú=ÖªüfxA.Éùbhá1´ ,;…ò·=‡¦BK’€Ïˇ–DüÈŒ»À'ÖmVRõÝÛ÷®·ïkàûc¾ ¢«øÝßÐäQ,%½y…kÊ|E£ `‹K)ôpqNõÝeËTö çM;¢Û`\0É}~?ýª á—b+昳Éh|·hmÃã~#ãXü8?ƃ„Q7çÛû6{ê’- _Çߺóèȯè rò,b/ÜãUcžÞŽÃJŸÜ =A­ŽÙC^ŽlŒŸßß ß#¡‘ur1Ÿ&ÒÝ ”$>äC‚Dø·p³‚I 4'žBu%~YWÐc?!é/³†´µpê)ºsÁÌ;æçºwÔM\Ë™‡òê•?5ø÷}ù?’ð¾pÆ{a‡÷Âï…}ª¥5Þ xÜÕ•Ë n¢T`¼¸÷ô»ªµw¿P8ˆ¦rP(;Þ;z´_èŒ?Ÿd¹ý=7 :}Œù€ŠIœµ¤e;FDÅëõèfJ·q F¡ݸs0Ô/Â!¬ÑõCXŠº§1®,aL‹œ”¯fA' KC•)¥Û¼Ñ0EÀ#þü3(V£lž²,T`¤’sò…Þÿè<éZ°*ürÛWü¼ÇU åóK}Üo ã}” ƒ|Ec\»¢ŽŒ_âô—ÕÉ: Q˜ü:Ϩô?ܬ±€0K™Ý^K¶ÖBȟϽM¥}ÎWÜL;àÙöKãÇgqW{ï°Ùï,ß&°ÿæ}Ö—ÃÑ÷‘i½Dí–«ìµþdÆnìºéïŒ7Ñ+¡äGDÊ+ãþ^ÇœÈÞšo~ðPï ´û³~Â.ˆiPÞ·­© …G( o2z„•YJä l¶Ê n¦yîÄ™„ SÞ‰P}$5°/Ú“:=µè¤m‹hOÛ ýCøß'ó˜ªFÂ{÷HÿW /ÿgòв¶»þWB½K þ0 Þ·?¹æWv­ùQvøÏ’ÍZ†°¨EG0™g³²2­Ïwár»ú+ú“Ç/ãœRS@êêŸ1[B°ò¦k@íõƽßmúÚ_þ(©ÿjû|aQ6¬æê¹û¨½ÄÑÉÅÛÞ‹É\!Ÿ0‡Ý‚ã“ÜÆAôoqnæãƒn¼HÞ’·,{l½Î8SÏ¥†òeTÚy}Œ¯ôZŽwøV‡=5:8•oìXú.œE‡â ÎÊ÷Òø2A’pMÎòå\ÂnŇ˜)íĸ/Íî~ýÎ{ó¼·ºBdñ)‘G÷øëY²”w›Æ=Ïç©ùϸ°%~74È w‹ð[=³UlZ’ó¶Š9Å¿HãYSÎBGóñxù‰u¬–è§òûÂÙݵ..ŠãUôFÚ·˜É7:˽³ Ôº4þ‘ÏP¼®~Ö}•Ù>¦9ß/Ÿ|LŽêay9óúP8ÝOõö"Øê 1™~+ÍÒÅŽ+CÑNÙ›iåSÂ%Ó@Á»¤[©ÈMâð¯Ò „v¼TUæ/¬f~tåÏϣئ)·µÑýÒOH>ìžùëëwÀÌWÞ¶ž¿|ç‰hnìš^Û=¶)~0[ü†ô ˆ|>åЬÑí|4X|»æ"ú#ÈÇ¥›ù“Lšç3ºÚº#’në™yꣃÄÛ»ÂðG•¾nCTIõ‘•¥³î—‚’;Ÿ@ Šx "‹œ¢®îöüdYØÊ#ÄÂÍ[Ç^åàü ž¶EÉ.{þUDvá±ß9¯×|?ÄõN‡¶O]BÚk'j<Á%’7a_¾>!’GÖ¥Q¼”¥®Cä ™¦Zªþ*í%E²æúbZóKLJÊÔBnpmµßVKJ’»Œ‘¯ù!ƒDX™”¤l@ ]vþM²æy‹×O¾¼eþEů›] 5ïdW—Nöo¤Ý´/üC‰543œ—šÏxU–Õ†ó—•\«Õ†I¯Ïœñ¦v&Ë  fn´R–+˜$Jv•~ý _Ìyþ!ØBù}éÖš­H¢acúçWÿŒ•’Ÿ´9YÁMQ Íj§{©+NWæLC:Xjb<;T~÷`%FÌî¨*ÔbP¼æÑµŽo™©©lÓÂñ þ†Ï©'­Z /sNßK.E_ëÇðß»©ÇðÙľۓßb9x¯0¾´]}ÅÅòçå¿©è9Ívîˆû¢—;S‘/cØÛ䯮Y*¹Å1]¹•Û]ªLUßâ˜1ÌiÒ6fÓνøÑ¦ž{ÑúWW­ÞõH´ÌòÑ{Õ›åh]»fÒTšo,…øú/j5Ùá£gßêæ.Pc¦Xë¡}¡{$Å´™:­ÞkNɵÒeßô×!Yõ×óåð[·µ0¢q(˜´˜Knò‹öûA¸,YšŒP}±iS?q©“õ4½GÐ6©ÀÁânõ”ý•.TPè"“è=ívÅe\eØô†Ë8!8Ù#`øBÀ°C+3L)­„Ù¤àZvˆˆŽç  Þ±ru)5ZÍmA)HÁäsÈ^ ´KyïdâËHVÞ›AÖZHvP âÀ‡WW|_%P"sõ=YV ‹žìæp˜šQíF 1 ƒO;Ó“ÕT0©/­À4(Q€Ï,ò.àS»%å»ÒÔû­‰6ƒÖ¾‚Ùâ7Ãm2pTÑ2Lƒ £NzIæ91„î,¤ ,Œl*÷íi¢Á ¥5˜9H ÎÈ€„æýKÄL(Õb¬û‚…ÔÁÈ@C¯·\‰ý\$È–&˜ $¦ÿ£-'_Õ ‚™Ài¹f®.KïPÝDMœƒ„Yéææ©91#%ð‘P˜{K%Ö ï!5MtÑåæŠxà¥ôÙÜïV$wZK4P¯ÒÎóN”ç•j±Àƒ»0½økàH<…AÜÛ+µ4ËŸÁÈ4Z+ÖíusK@Bj¹¹¼pj0iZK> S~̆™¡þþo!2ðOu‰7Q-z0ÿešY˜襼9Ç«ªÓ°bž€ùˆã¶J€CÏ’ ÓÎ Pi£‹ôJ@”åúšÚèµò& ½Þæ õL¤ªÝŠã# `'-•”Úèc_ð+&Lcy¨ ú³ú-¸¸±î¦{Æ®×ÿ óYä–ç*ó!¦&ñÜýGí–Ö=eóñ]×ûøq ä+ØŸbS!Ë“ãÇøçñ?†˜¶†v…~ˆéß8•k1Á ﮈC% pk:dUs?M§œ«ˆÆ9Ðãe…ó‚ýÊ͵Ðlåæyçˆ)¦ ½Ã ˆ¡ š7ä¡*ÝÛº`×ËSwbBf¢z«0CKå<»^’ž\!íª›[ òQG,ÐTzé³Ú9ÀCðšÄ ¶Ë®‡«†’Ň×W¿³Éò"Ë]³aÇ÷«Ü<§Ò’ŒOŒ­ã›ó£ÙXáðT¯­³GKÖ™fÝ!ßÖÀÇN§~¾ñ¡û,“t¼Ý5ïìWÕ¸‰_¿Ø «5|¦{QUslVW³ØIh0‘Vé}1ó%,ä±+uú|оèçÁ;Õ¸}Ç4»Jçn´…j©>Qò­,²££0\žÍ'÷¢æ¹Öï…E•Ԯߙ=~÷ɋн¬ÊÚf$ªr¬N¶ì€ñö½Wlüë9¶‰MGÏtq|îZåkÅûí§SŸ¶ÅlÿÛrFI+Þï4-™âA³³{cI+Á øqðÌíxâßHÀ?ôpƒ<Ýg¡ªÌퟸ·âaVÓÁ)Œ´óÎX"ïèž‹Vnsà∇9— \$ߪҲ{] ’%wŠEd'ÿæ•9Ÿ½Ï âËk­j(qǨû<€5 ¸îNä4•ÝXwÛ´(wêpß?xÖ2þõô;í÷h„pçÈ6qìZo>Ίtý dùécàWQÛZ¾e”šÌNøöý‰Ê@§ú›*ê}õ§ã…É‹o:suYA&ÑóVˆ™ÏñØnï^œ^´á·àak'‡ZuIì Ý9½»§ó‰bý €üKÔ˜@€üì Hæ‰#©LŸseQÌ2F„T Õʡ܃¼#j²BÛ}³k½W`ðëälëÃ¥¥îƒkq¿<¾/‰Z# šY›U5Vä)èº+œÞDɵ§}%’ý~½rò©kãôç^ x,õ²ãæÎ:½Õ¥+ÉíÕ߬IEÜ÷x¦7Cëtm4®ÚÚ%4;Có®ÀM¼ ;[¢ÕƒÒ'Q³nÑRô1×´PÈ/J{âñ» üoÉ£ñ´„»nö.øGS. .õdÖùÔ·yº½gß¿ü¥Ÿ4µ« A|”ò‰ºè“¬ vjëÅVøûãÛÕ¯}»%2±¬ÔKÈrÛ­Û¾…‘žïpQ×ZÃ>OÝT>Ïæíþ·EýŸèNÁ žCNî\V )ó u)óñƒë³fŸR¾½ž_i5Xê’æï¼vÝûÑû“f7+,UIE<áAz™ó}M‘Xüç?#ýßoxà^ _æË‹ÿ¸ú’è…WÞûEänü,¢6EbvA("%<Íô’›v³Ÿ7µ†cŽÎÀÂaª*L§p3\bIÞâ´lÌo:™»6ßZ@urt‘{8_6á0kÑ'y‰ˆ v²ÈîÝJA¼0¡»tÅeÞÐNK@TÛ9Çü¢%~!ϲ­.• ÷@Qf¯xô*Ì4LEïé{g‚·&¡³ÉËf!‡/.å¤~Ó¸Ž`Ÿiï÷%&»à± XÖ…;ÉtŸi2ÓDã¾ ÞKÅÏ«ûÏI~¤ôwÎ’üàûUEzôgÕBÌÓ¦ç!®òH5y‡ø|D"¾Ï!¹&Ϙ¹>ïÓš¿°^·iÏ#F¼^·ýaB›EŒÁ=¯ëÌ{n\›P¬~ý¦ËdJû©X˜û* ß“¼<å~v{aäI%ïB¦´Á9$œê7}ÜŽ]—ýšÔU…ßxO^”¥N 3’ë{>üc“c“ŒN v äì Vý3ÊnðB8B…:›U/Uùì z%±Ðçdé5Àu@?¢ÛÜ +ì"[6µe<Å<ªeœÌ/í¼-&ôî «›dZPBµ.{Óïj>xL²8=ä)Wfuha•ÄÿSÖ;–œÒ.¹x‡7”4æg^2bthܸÍIotôþ¢û]:ª)É’Á¾®³3µÿï¿?çÕ—â&ùÃÏuIÁÂÉèÅyx2“Æó¡KŽîXRî=Û5ŒLl6³p]|«<½ %X´zÀÉW\ƒ-‡Öá*Em9‹¶ÇÐiöÕ:ŽÏ¯Ë2iFÉjôe‘„X¬t¸ Öh—ë‰!ý2úògYF,›;¯£p€Yš¶×Æ=æu–²†îÜ ]s½Ï|l^Κü¶“Ä©¤ôå,¬Ð}nQ,»`Ð]¬÷“ßßÇWBëÇDfÍÞÖY«Â·æ qÊa| •R R6BxÛÆLÎ þ’}°Há Ìö@C©›lª°ãÔ`™Äëu¼ö–9lÙtF´­Ûɶ ;ïLéÀT{ÅY›¦)7ª´µò(*êzÐR¤·-ZÔpDÓ#Öi"õ*Á›ªQ¼#²dÍdPcëWøžãhSXz4\–°nqõã?÷åÓnQßCä^FU¾«ï=Ý]l@‘töñ÷GÉïmž)¥ÎÎ|ï ²PßI­9ÅEgþ ðá_-“‰\0×u™³P¼IKZRb”ì½Ù“ c¸£þÑ<²r°›pÈLã\ÌìZ㤪ùâ¼$èO¡ ÅvùÎnøD:lòî¢ÞˆŸ/çùƒ½²'\] _pÿƒoW+øänÉ€F¯æÏ¯Ïy@Ÿ‡K̵GSK¿ph'¨%È›Tƒ©M`È{@ ¾^T$Ñ&kåÇró4å[›GÉ”^ j3A)XQœ$_½hÖ£ô¢›”Àÿ°XÃ8`Œ”·UP¨À8ås)"[4`¼íDFÀ&‚.§ ÆïÃyAr&b½sEàÂp|ˆ¨Vãí¢‘VJ.È E;C_ÏÞCKBÖ[†¦ eتÜÙ¢nળPÂYAedH×prG¤7¨2¢…Ãé‚þèˆö‡ø!ꀦ0.´#$Eðÿ_€ž-ˆ¿ LE掅Ù}àj£VóU ÿŽÅ9ùÇѺŽh!~þ½usER|…4úÝÀ/Ï»^i M«çD ©ˆsißësfßߎtøGÇúÇf¹k£6ò¶ô(¨AÈx½ lÌKˆì D3'<­78¢©¡4‘³U`1SšI¼`Õ¸Åw´È€|@éV=ý;r¨dÝNœXÊ*f³à—ÅÌþÙ: áX]ñ£ç=ä#ÀA„‡‘`¨\4‚„‘O€ô'»öm¦¼ 4 ³¯&—Ë}ˆf…°Gzsƒ`ÛSERb…~¸ îp-¸Óö IQZ´C9´ Äðï½ÝµiµMð¤p‘&°“¦ -€ÐÒÈî±=DãBQòIЍ¹Sí1êMͳ)˜+¯“¦éØSWRØ’ÕéçÛc®ñsGP”='äÓÇi4Ëd¢[üÑà{¦¹v,†Ö:ÛeØjåYÂŽ$”óS©žhBî,K <Ø·¯*šè¿2k$Ä<Ú—Q#͹য়™KÈK[öO­=0}ý§Ë\c"‚æÕkÏÜKA†èF6ç¬$ûôšt-¡æj»7¹O¶öŒ ×ÔTÈÕÜï )Bebj¹µá8œ­µ­ÔçÓÁXt‚þ_ó¥– ¯rmC ˆªüü®<ËDégÕ·fbªêÌá(Χ•-ïþÑ|¥3µ!+9kõMúÑìµ®q芪:¹¿nMT>g`Xõײ=­h ;¯× ¾€u»VJÓ  ‚jÛvxôbÓø‚J—‚Zn‚ ùpޝo,|£×Õ:?jû6®k¥¢3”ƒúÀºÊÉ…*ŸÑ<ÌÊE¼Þ;46QÒ0ýõ[â(íÐf¥TÙºÐ;v™}ê±µ…T´Ì2uúË?…ó°¾=Ä·ÞëôñEH7Bu¢6ìø°Íò«óúNqîÝK'þÿáÔþ¯ ½, ÈSŠ‘?š -ø„åLȶvÊŸ¹®oŒkô‘õ««ß¬KÚõO¬K˜JVpÂkæ8èýBa?*Ê û}UŽzÕ-z}˜¬:•\=ƒûÞ-R×þ Àg"~O´2µ2…ð™,𨠽yø–DúT•§;´‹ú“xEéÈÔm×#ªeΨ ›ýËm Ÿ^¸ºA3•6ùÔº?¡áQË+ÌÌ»÷)»s𠔆]«ªÈ/Løb¢Ê¬uY‡ù·”û¦ .˜1ÃU »)“)WYW'ý'…<giCJÌYå±6†¢¹ Îzõ|Cf·KV½í¶"Ã/´Zö”D>ÏìA`Ê·’)anwkyùj'mäÍ:ßÞ®þ{áê¶ô,HðOö(ç êë>£.w÷å±NEÆ¢¥$¡j°c‹„ÐGXæ™Ýª##ãW±–OñaÖO¦ˆXõdâ]õ>¦Ìºs8Ipë~˜dÇ%}CC?VžÜFù´CÖ¬H'ù¡¾Ù«v-`ˆ%:z}0šekó0qà—¢ÍB™qß)—nŒ¶"w¼<N Y2´'¼„}‚ŠÃyçÒúËÁÐ.~ƒÝ8zþ~-µÎ¥4ѕԸTð¢zÞoåáÄzK¨åQTÿº9w"ì“¿èØá@ˆœ\%;³©ËˆZ‰ßMÀ°ÙIdMV¾Ü· ëС=–A²K,Üm|5T™sXe¿³È=;~=“G¡e˜aÁ—â·yŸx­ÉBñÉåƒò±àƒK×¹7ò1õËåÖD{"vÖÁò—âì½*ƒ¬¶·ñ†MÎòíÏ3ÔiâÛbœŽg=®ðP†pÄü„|Œ#.Ûħ›ñ¼?å¨CôuòÈÄK†kÙ8ô´yðŠÝÐ[Öcó@ƒjÊ"ãhw[¡NØbJÀi)ÿ²YòÏ€Xyºáù\••¦xK:Aµ…;ib\‡Ù–D³dA@FAQ…sVwñ/ 5d„g×òAéBÃ嚉¿NwO*ƒ­X}ÂgÜu³Õn¾…ˆŸË¥.·߬y–òVBH2×Íç„: &yÞ$R>C3G“t~»’öl^ å<†¢#ô€d•‘xãb£â̧VÐŒE«çü5ÆçŒZqÃ2`[Ñó"q{Ð)Œ‡öñ{ÞãrÃVâ/ò²xKÉók¦.|ñ÷âJH§àU6y3‘UgûU.%nv¿+®h; ¡µ&7%Å"A#%ËpÝX¿¾Ñ©uL™{ôéy’ê¾á»2GïõS¿õïûÜÒ„üaÕ2:åäAÒ)<Í«œ, VbWâ–Û Ô{*Ì]¼êééµÁMëL+oTg ‘ µ~bPXt­·Ãäµh )ÿ—a\÷'j6Ä*9Ÿ|ì4Ó@Ú¯ö0}Î^BŠ}Ô©£OE%ÅêJý‹®¼Ž}ܧKxæ–¹3pv‚nÁ̺äüMHz´¨þî@\l\ìñ/5™ößpì¿)ÛcÛ݇Û£ìôË%¥ž²BðG6’ï%³ >ñ DˆkL«à“!‘ 2 OiïÄX¿"0¦„j!ÒÐô¬˜Ð=J¹&XÊÓIJ(WàÔ°‘£Xºþ =Ò{¬]ªèfËKÓ±éÇã@ûͱØtœ)zneúäð h?3zIé6&ûW¨3þü“ (6±LŸºôßõ,¹jÈ ¿ë'ûŠ^²’]*aÄÆÛU“ù‡+HÕF[‹lãnej Voæ)ï»â£Æ·>Ä×jõ#î8¦;T æ8C‹oú(¦j1ÞL —¡•áŒ+®a ÷žÛÊ„Y»üÌü>°©~7iùÏl¦øîìœ:äýç rjŸrê•À5Vð+ë´„0ÁúÖQ·/ů“4ÆcŽ–«4Ѹ‰nFHb!Šduæ]»l ïj÷5…¾ÙÃCÑRžh×Ñ•œlp! ë7ÓýƯ®»#Ž•ïÙKÌk3i냒FU ó÷n*èe›dCkר˲ÿ‰ìyUÔDrï^çÿ*~bíwUõv²ûÏ©c…0T¡ïÛŸÑÑñu-ûô7xêqr¬ÕÈ“R·=Àr T ¤XÕbϰ³$ßÕ!cv1šw>ª¹\¨¡d4®ç«»yv£ÐÌ 2tk¿äiøÚáðsÙÁ¢}ùׯS‰\-ÞÉ‹ÛýÛâ?¨½¢ë‚{AºŸ[ñ•ñûÂÐm$ñ÷îÞGê÷ë+źnp¨v¶´#7Ιû'F¥pÝ6w,x7.f~ÏN™‹eøá9y1­jI«:°U4ð¯7ð¤-sÛƒˆÀû®^žžî¹(ÈÂaôÊB=òJ¤*{€f~ðì3q‚ç]Ÿüšøïwˆ¯t!Àv1Ñ!æ†wXüw¥¼WÊ8„qä¨#ÞÈл³WÄ‚¿W¬#ºD‡{7¯p‰=ïæò)Å4mÛ{¸Ä^w‰ò{>ÒÖÓ¼)/÷í"^S–¾^Œ—æ-åý²šê”Ö#ó~ûq ¢tW¤v±Á¤ÏõòÇÕeþ/¹þj7ø#×$\ÛOÉn£J¬‹}7 BmùWE•Ÿéª€’9 ¤¶â'ù9mØxkÓý… ”©äû!M|4ñ#yeòstÚkéŠ3Mˆ÷qÚ¯„þþ[’’B?#˜¸.lï~[úÙ<© Öw÷~n3J+|lÞÛÄÅ CþC°¡A©){äO V[÷^îÌD‹ï6òéƒm!=´bÈvmP±ðì]Žß½Ë~¥Ý cõWŒ1‰#ÁÛ¿ìýhGƒ·±­(¸¯9TI7ÕÞÓ® z0Ëæ0£È~A¹ò½ë«Nm¯®¯pÉÅ ’Xo›\øgsߥ]Ý/Âû–âsë^ôu%ŒMÏá½.UãN7OR…‰ù°,OœéX¬ÓÆG]_ûG‘EÒK[:¹HS$¹±3}¸³Ó}À‚W ê£hÝ*@qú5qä}³­n‹ØjÖðª7EQœïVÄÆ‰§÷èÇ`PcþA[ŒÔs$~ð²gÛŒ©æ˜¿)) WD¬À\Lu•TÅ"Å·öï ‘lÏIˆfµS,z«+¡V)Eo^t¦€><™°]„7é92öÏýØÏb>ÉèHÔ ‰¯Î=”@’‰¥pcÄÞº¼heûåöÅ%ʼn¿+6X‘HÈsaX>Àº‘ƒKÜVð‘®ú¬°^½boºÕ™’ÔoæãzÒšR¹!Q,Á~™J·àQò™.?D5ÅÌ#37‹ÂDuÖržynƒU±¯×IF?òU[ì¥Âωæ Õ‡‡ôºOåEnTB¾iߎ €SxÝ8¾œÍù•ø9û|¡¡­.5à“q_0ø£V[Ä6 !ºÇ± Ú’ý-CƒMz#¸½ó[ ‹A›»žqç¡s8 ÝÃN¶Hõï9fkô6£ß&íl &8MÄç,„Wý^ÈÃZHÃ+cP:ÈY– ³ýtû¹ÎNüaÄ›n …ͬ¸öû)+io´_füžQÝ›ùüsÿè;1£Ÿ7Öç·.N=ïºý±‹¿[v¯«š9fèRëÞ(§©RüTв÷) eG_:¬å ¼Ê´¹¼–>mFéêOSÊ:@Ú2ŸQÓ›Guío•æ'2ð2›»nÛHQCyƒQq^÷JSéÍY»øQjÞ3SÃ÷¨#Íwlâ/PËÃÃϧqlOÌdÔû”FnnÍ¿’o+#uõKFû ¶³@aº¤[¥öœgU¼KºåÉ {Ü.ëþ¾qÛ;_ìå¥Ô‰&í,‘-2å¶YãHBàVN—ñCŒXµšÓmݹ(îõU×—ó¸Íu"™)š=úR15hßW‡Úí´gˆ£‚Iÿ0|–æ´Ö󥯵×|/áõŒ?P¦ý««1eý$ åSïbO¨$)?‹ˆ}Ѽ¥¨©Hn‹ð’Ø„Áíß@Æ:É &®-‘›÷Ï5¶zEIÿË÷?zy?mÔÛ¦¦<¦ï<販Jé“üà›t´\¹MBO.™'Éîw¼ä%7"Op(^¾}+y2û؃t+7}YrÎÈÇÔF8ÃÆS qAò†è#6àa`a!3h'mGÜüÃzŽ(P¼ ¬²”ž·Ù¬$€*‘ïÕ Q¾S~Ì#|,"@ûf¾Õý_H’ÒcÅa=¿4=‡ÒW¼_4Q­ò5´Ê Üa¬(Ôï}q¬kˆ…‚v¼‘Õåª.˜¬à”ŒµŸæ<*Ý^xû££/Ÿ=Óée"ÿ¹dìC}4ÖƒÝJyB»´»?£6œØ7v—¡Zê0®UŸ~>C\wZ’ªT€§ð[;Ké„Èr-­ùQ¶Ã;±fô*ç1ì@¶ÖåpkîLŒÕÄOß[™míd`c¢=œžŽ¡xKæüÞ{óií0[¥ž€…º‘I§¸îgmM¯M£#3óTt8mÑJèøqêc÷Ïû9x›ŸswyµP„õÑx}‚Ææ)²¬ Æ| ß' Dg[ð ³ZÄ€ïDl‡Ü÷.…•Mã²ÑK>?s]‚ ! œr4Å\*ˆ;ÆýØrr3É ‚)ýѲ†r+5àÏ>úœl ”6Æ R44!‹ƒf‚*Üö !gu$Љ4 ymÔ»\½zÐBëcæ9È#òœ×ýJ²‡ ¤B'OÎR˜NDhAøl XLæLÄ`ÞÈDÁÛ‰°ûèN1L@Ï=+æ—A¥¯Ío*öµðÐ)k…fn¼®ä>k'æ_u’8R«XCéËÂ9•‰µ)+aيă%<B :¥¨=Ü×ü9°ø§˜«¦š>ù~=¡Ú”Wx’Uxz§À@»iL»/¸ÞÍoj†˜AÔ;Ȭ°Ò3ý%Ù[“"k‚žï»ZÕ€)Dg"³……ˆ¾ny h#\'PŸrõ\*È|”;Xú&p‚ PÒ#Cä ¾G ÞC?)š€ÄaËày© Û×Ê­ÍÉÝê5\ò(‚Ed\ÀE%KˆÑq@ KÁIAv%a ¯ÚW9—d¾~íͺŽl!ð䂸 1ª“À?ZÂ0&·R‚R I€\”^6&’òÚ› –—ÈŠöNBNêÑb‚ôß&¾.} —›É…1Fœ? `a–wì„ÿeïÕTô­ýÒAªô"E@ t)ÒKèZBï(ºô¤#" °é-”ÐéE”z•®¡ƒ4éàÅÿ9÷¾ã¼cÜqßûeçÜÉ^Ysíñ[™ûy0 Ϻ¸ Ð!pŒ3úfT+'Ä ¶ê+àcÄ ·8è{Ð.$#ÃowƒSiƒí—€\¤%ŸÔ™u&†R‚1†’’MtÕ­ñ/ŽùÊåjb+Ž*”ÊïVF­ª[7“Ý@ d”ÈÝ}ùjP½’´  „óîÕ ã]•$ƒ7åÖ1bbÐ_YGïÅPš°,°´¼ z™ƒ‹æƒGÖÞõPV¿ñ9Þl¥¹äð‰RÞD)ƒuš:ÒŸJE€"X¡HW\®¬¨£21xBn2J]ÂìQ2d´"‡S½ØAw¥`´Àt tx©¬Áú<ï|Ì6)ðº„Ù§dȸ@q™ ‡‘»Øc¨.ƺ߯ŒÊý¡ÛJ\‰Aµu‹™u`]XÝcôc¡‚à#¨€»zëIÐÍò ‡y=Âå*çÕ“1 ãEs@o…LÐ È\ô+dš”uˆÁ“rD@ŸÁ[ß•à[ì¿ðF]3zà `|Á Pß}¤¬ÝhBMhkÌ88äð:ð¢ÍAO4bØU8? y™éÕEØ÷£€ž ~@NÙ#IÑõ#Wl°nÉûĨCí#½˜@¥×_3ë¾êš¡ Iܬ£1xy¡>Üì@‹¬ÂÃ0CÍ•ÌðÑYÀF.¯ÖÞݚą?5°ö(iAH@ƒÞ¨×à-¼»Ywƒ‚çîVÛ×Ì ÛÒG`1èÈw h ­ÃR[õ…°0ÙÿvxÝ B8˜d€>——à·ŠâÂÓK:Tû¦LJ^žÂµô¯ë“…¡^Ûì2X¹Ã­¤C2O«_Zo„Ê~tþÀã´h »yX]Ç´¸-yíôgi-$cÆ´šõ5_a¦xbÞHµo^^ÔanTͶmئØgbìøZ‚So­ßÿ‰´¼"1Ô f¤øW´ Bí:½³‚îØ¦·ÂüK¨YŶÔí ¶‘Ö…ð#ÁÕO¤†9ŸÌ*ñCÅŒ¦¯‡uø/²“*Œ%IŒª×õìr?ç»V˜÷ä“Vÿ®ªIòç6ÊýêÞT¡».©bä‚€›MsùêôˆÛh°"äSûÄw„w=r/n=âvNUDÆÙÏóù!HÈú-œš;â?¤4O{ ³¼÷{~¡h¶¬éŽnßä¼à¼ììÈVH:{+‡¨9¼RMí°ÑN½R ©Ýš ¤RÄ>ñú4ËÁFõüâãfJâ[«#˜g¹ÜÃI=¶ÆÊέ1œƒdé[¥3^¯¢¬§÷tÑÍ!Lr¬eŠÚ.‡l5 f3æ.2O7ªP3¯ý×±hMc*5o> ü-¶”XÛySÿwiÈܾÂ;3•¯œ¨ì[I$u+ašoRÞÅÐø}Û[­'&ž•o”§C“ÑA|•F™6pCãâ:§¢>©©eUºðUC:¨Y9zÛȸ¤Ž 5µÒµ Íg8S\wø¯!’:ld–Š^¯¬2‡“J(Áã ‹ê¾ñɪÁÊ] Ñie®Éè´ ×:´¹¡qe]ƒà_Vlã% -ZEÜZAÇ#æÓ&§=|dfΪl“>ú†WÓáöÒë%)ù©Öݾܓ!/É„µ8<é÷Ç4×§$åípü^uâòvð㢠« þ±/²1†sœÚèèöî¯âhæ ó >mg¨kPõù ¯2}pí˜~&#‹“YînÇÑù­Ô÷6ÈÖP¨O¤IøK5¤Dªh•«Càý~`^ÂUßrKa„”üQ.Ebã»ÎNÓÜÏ0÷êA?O>™í‡’¦%S=+l’?—¶e_±) ¼áTÞË´dÑm4š)¢&œÞ躿 }˜zôjÞ!Í3¦š=ä:"€ªGŠÀù]¥F#!r>1Àoª¾Ãyžè…´®¥ÞXö¯VäÞல•¼ìæ~þÚ|¢õ‡ûŸªžØz““K9_ÄpFIëmã*L«dÓeþ¸ß’øQ|!SÕƒ°ÀöTøQ]&‹£,Ñï‡G÷Ç_Ö.AÕ·.”×>½š¬ª1rßAVÆšÑVÏ…ËéS_>ÜAåŸND‹Îí*©No úmwJT¿/åòלV Ÿ¼ AØ`'n°ýûð(];8ãíô#Bß…rA:…®Ìa¢¿ Ö®a¶Bw ›¥Â §@âÛ#‘¸›× |ýËev"0åAo¨^üÂ`Qlz;¬„0uJö[I ã+\ Ö‡w£íG¯1èõà½w©Ÿâ¥3}ò”ss´$AüNºå'efê³%Ó:¯Žoƒ-Ì ªëJ‡Ó™]‹ƒ{ëÖ^‰æJßÜ¿w;˜\WQcEjg¨C½+ا/­ô}Ë@·ßwÞ|µé†°ëÅYæ_™Cêì1ï¿…ÎLþõÎY§ÎÉíõA’`ër«óÿíÇ.dôV8)–%'–Ìÿ÷mÅî á£ìîî î¦âábëð_w˜Üÿ¸Ñö»'#2;4•©”‰îϽ¶ûŒ“€U¾ {úü….íñéãÇ™jÒÂFßT£9ljÞ12‡ã›Ãð\\v„|5,ÛZfN¯æoGÛýí“WâÅl> KŸå¾ =˹Zn÷>PLÜå,LÙ2 ˜žŒDˆG5ÕÏvÛòÄE“ÎâvÆå.äö°Ò}:sߤ¤‡$¶: Û,;Œ‘F2-ž´DÇ:)JÊ?‡rîðe _6 ?¿”¼ÍþŽ ¹gôL ]†)›*¾ šejû£IW2‚T«¢`œúrùQ)ÎLÑ}Œj擤#ï=©¹=”?;ôqÿèe"AcmÈ8Òo&TôùrÔ-0fËf¤§ØæùaE¶±Ç ‹[à’Ž;_™KŽt»§ñMÕú̺Zý>­dÕiÍñ÷77I©:µ#P;ŒÒr›ãר ÎÚ‹[“1¤$>æba!2­‘»Åú=+‘/±(ûà:r¼:%ûÅ—"JÒÏC- ôKÂǨs¾\êâgr²‰*A>”ò( ލ'NåHÂO8Ì_¸gE×ûNý±õÃÀ¯û8¯^ò¬?óŸl4††ˆOPîÕEÔ,î¼ý@2ߦª´¢Ý!úžG2n·šCÿ&òöéRų«¬&GII‚<“¦æF{@Pg*}2é÷y5è—5Á ¦°q 8¸2!±Ç§•Á8òEª×Ÿ•\Æ$ DRÃðË/êE§–Hí³‹ÓêC K#AæYðO3›7©—üøM²b-Ž.†¨t®½ vyë˜ c½QΚò‰†@)ë+Ha§±»Íry…Ér9ódWr™ýä6&pÕÄ(øUõrOHîÎô‹?Ä»üòMàðÔù÷»ìÍj‰¬uÝÙ»ÏÝik¦~S*íç±RÚEfîv§ˆV[°Ü9gMqa9ƒÞ÷¦~• Ì%¯ë•²è›c\­v¦¬^V ˜É™McÙòüjߪ'](z,ð·í™Á[¤|Ü]Ͷ{ßtÏðt»X¬u¾\;ÞxÚdllˆ}·/Ž6ί·/÷ý·–> —ßµÆZoÄÕÚe" T† 3OE =0msÍJmgd&÷°í8ÚVzø«JwžF¼|bÖ¹7 û`ñ±c–fhA³v`ö²çd;w§Æïö-Ü”„‰èˆX}6îa¤SÄ壅i;mõì©þCûúŒ[¡8nºaõÚŒQ[ì¸(ºZÇçµߨè´Ì^¬8Œ÷檅©½7>ÉÊ´”IÙ/©æVeË>¹÷jKA©ôVqÔH‰G懄{`Ííaˆ³Ó'.ë‚N2h]nK•Í ;.ÚÀ?ip¶7õv¢¾¬¦b¤Ä”Ða›3ëٽ檊>mª="£<·/ÿùøˆŠŠœ}¿ÅûlKßÒJľ\Ð4 Îlâ½™-ög÷MI S„*0ˆŸ¼øV<µ$ é½â$Îòä¹W Þô¶Úw©lÞ_^c«"É»Tu"‡ÚàïoEA„õÛÔ¶¾A„a僀›Ñ±é‡›ÆfÞ¥>`'@ñ„÷ÙׄhÒîã"+pþÏ•/¥¿9â£F¾|ãè3ÉiÏ^”ÝŪdç “γôQÀÀ$i7ôc$rÑN8tŠŸ´8£ßÓ”;*QÆV¬tŘ|äµ{­ì>Îïó,èä½é‚~¸¡謻í—FìÙ¾²ýIŒŽÊÑ=7åö‚o{­Ù>šÉ'L ŸF¢¦Ògl¥‚õyÌœÏŦZ»`íýO•»3Q@$ó£˜ S×\‡ïobU^<¬ „Ä ¯£J±ÂîCgìÀ[^ê¼ÚjµaTZ‘¢*U*ð*Í"oãpäÛÇ… oÁ4HÖGblHæà…ÍÃŽlHÓœ<õ‹D°Ú}«âVš'Ò©c´S‰Û¨\MÂ7™˜Ñ7ž0p’Ꮎz³:Mª5ÆTÚ&QƨkÐpÑ…mY(8Rµ~λÖ/“^g¿z¶ÁóñxoiPIØgäYùÐ3^ÑYÉÒåR7%‚ßÊ ûêÍGy¤ŒýÒ‘¨rÆEìœ\'ÑÙ2Ñsy@4FŸ™+ÜÅG+ wûìò±Ð)`.úÛ^Šó’"C»F;^1úäÀí\a)`vÄÄ}%]ÆB'‘‚=ÔyõÔ.°@“È!ØD‘ŸÄHÒ~:Œ2ˆ™« ;zíó*ƒ¨Ç~æ‡::A×ù€Á3Þ‘õA2;q?l™áIL›S͉Ì…”’â¡‘â b ±‰Ñ¿Pש•ã@ž@Õ±áâP]ÈK ~”Z¢!ƒÔ+·N0Â?ª2’ìs…9¸€ r ÷?V¯ð@ ò…CØèEñʱÓ# .4I:Hç…¦aÃ¥¡×`'\ÈC\ô“»ì xëi¤¨MÁõ#¼E•‘ ®WÛ"@"]±þY@èÀIbèC þŽÃÉÐ8Q^Õbh¢Qg½Z+6(;Ì‹*‹±G.facúF@œúÿÓÄA$´hߊ4=W(‡†×á‚dÃîCýààÖeFí?{f”’Y14ä×»_) ä;4Æ ÉŒ‡fG2 Áv\4Ù¨Ëð_Yœ™º¨ºFxƒ*#R§† ýÆÅ€  xhdP6FÝ/åãbâÄAq´hÐ*¨q®ð:tñ÷´8ß´ßwKqýÁá°º9F7¾?’¹ú1š*Ê«^ Í#Jâqˆ)4‚cA °QT ,øSÀ"Ö[\hˆû-^®Ü:ͯRe$ êÔ Cp& ùÙè»é*Cϼàr½È:í‚ÅõíÁ¤>qú§R{_moódƒ½—ËqÿÝÏó®÷—NqŽ38Mß «Q)3¶Éõ mïCALFI5Ž×[¹ùmñ¾c_í«Vo‚¾Ò‚>‡ìnÑÙ(Ò¼DR?ÎÈ¥Vvwÿ‘Ÿ-S¤ÖÄ9ƒvc5¢Ñbh¼QlÐ]M[ÉAßq1HWtÿäò©{ÃI,Ê„³“j+>ɺü¤Rãñ뚊Lº® WQ73‘ý°óv"ûQ'ñÖŸÙýÇûž^G¾Jð6õŸÜÞM!­Ñ‚9…—>’Õãdæ5ãêK*’Û j’NÑû¨¾?82Uô;”,“WcßkûǵTc¬ùÞl«U[sL\ÅH¶:N_Å‘w*»Ž¾­< i–«à€ÉšTÎ?wɾY§÷ù$?IxKø¿Àæèl #f´¡äXX+ ,,ÉÿS°Ñyî†øŸTóÏ¢Æâ[nßߢZÏÅ€_Уïû¶Ô² ]fÐ@woXœ÷ýì×–RuÕ³±ðñ”\†ù *"Ç ! A“Mœ‚ ø8'¶c{~Ä/·š,>°¶£H^†þ•äœ AT4äë)Ú¯ùßþÍ<ÙªÑÈç.T+”»lµy{\û'~;3»û6(pÿŸ “)ì–]¶†±!/÷»Ù5üWW‘|,tL/è$Ÿ ÷wQ>AYNH¯àÇŽõJA'ÇXFãÙ–'iJVU¡ÏÇŒg>‰ƒ†.M|ëC¬3Ÿ$ÊÒÿ„2Ò<¿yÙT{[ýϨu2óI „¾d‰lªùŽÄžùÍHóâ¦K)òŸ`ïÈå—éßn$ûL¨¸c´’¦Ä_;h쟿 âC—¡dLÏo"ýênÇ4BWþ\*®_õS&š]OkY^Kæ?Ì¿ka\cYh´S1òa„ÌÅ?µÑ"ñõÛ• >Æø3AZWͯՆRyæô d¤+”kg'ª.EùúrŸžª'G¨f#üڪžã?ÀXU¼[.£ÝOP ÄÏt2h¼W²”f:[e‰Iô'y±²ÿTŠ­wïÅ·/E1ÏåÖu¾¶¿èYôæXžLl#zÿ¬·P7Ccye’<¶™+ðÍx¦"eß»WÔ²«~Ô³*D‰¿êsWØ•ÔbΟÙÎÆ–©;¹?¡ªe«•…³Å7õh/ïebûçwUO&"ÕÕE©öu¾¾0å{É·«Ìÿ„iUáeõóxÃY¦ßñ»ÊÁ|Y¿m¾ Ëð JÆÇ oïï1`Õ Åõ•ÛWyß,ú𖤩 çñ9%örV¾!lçеÖ!w-äa¶ ×UŸû…_~ ´võï¨|nÁ òrS“”œëWR@Eâ©…=½fŒ ‰M'mÔíëæè5Ù#b/[ÝZ9Û0ˆ’L#sUªÛw£¹-&=)(B_®^=Wìµ(#ûø²CbÓN*-+£)uhñ‚‚fªÙ“ÍúÄ“`£èû„úCçÜ$MŸ¸w‚u;pü?.&ºj•YªõwZ ©œsßâJ«ÿ ÎöKz“*ìÇ[Ú2 ±iׯ´ÿ`r( jÔ Ò[PóCJÒ˜­v†UL.ô0màíeÕîQ5p_nkvFN¥Ì‹ìe %ˆVßs{lUyf:–µI8ñ§ÃgFªtöc3Yœ C·)I㓾F(~w-Ýi~uÌm ë9ë÷H¾Ç}æÅÚ.•32£Óæ¥òkSóC]"‰‘? üm²»}Êu“OÆ7ºeÄ4pϤÖ=s·«~²6n5áLJ0”Âo/_®ý´ZÞÿÁ°'s·ä°eÙLfç³Õa¿±ÿEáW•!G&«¿&ë*«bU§N»À´’S$g7&‡^â´¯1޳ÿ¥˜d‹#e¤”Œûe±÷ËçžØqHâ$VÞÖ•ÖΉ8Y-yßÐWügÊ)æH\spñú9ñ'¢sÕ$^mʯÖþ¬šÜñ´Ø%ÂÉâj"VÏ'ì·s íIoÕ¾xc¾Ü¾ÏΣ9† ³Õ(â¬é(éLOj7(ᵹ߰ââ”è<éîÑ©ø}|ZË`/òÅ–'ÎJ\&\Ý ù£Ä±tšUh¨-ªÆˆÇRD'xú‰â=ûþhÎw‰©¥§-ô¸N”üxO™X~¥Ó{-.ßoø¼'˜¸,$•¨§ ÔøÇûx`Ǭu¾¬§°Q~U÷›dжt[ZB±1iOYéÏ7½ößãŽr7À\5•N;~®Ëh½âÊ3ómñ¨åòò8„ç—…§`W™^qù”Rî£M¹Vó迳”MñòpW~ ÷ŒEChøŒU[PåÌóêöÆýñ6“·3 û“m6;e3 ¬c2%3žÕÔæN*;Åyù(_H:…‹|áÝêZ dº­ G18„Éšƒ#C#£Ìa¸.­*úˆ†§LgM§@§^6šC±LàERs?WŸA1lš¿àÆP‰Ð±bƒ7k ‘å\³>Au)`žéLÓ–qä $Ë& ü@$¯®fÓóJ…ê¡qÍ?“K&a)ùÕcè•É/Фˆ‰¥.ã^›³ƒ>Àßb&]NøÃ_ž`¼©k̲£Ä_–ì7‰b0ƒ7hPü¨Š>{³ÎRX(ÒfÕ–GœÄý"ákãZÝ< ÃøDíïp7$i…A=>s'ªÀáYvëRɩljIÍCÞ·b†!|äó:,ü Z kTl˜þ\Þþl¦5m–#®×ÌNª _íŸ÷3Uݤú¤Êã ŒÅfwßàìMÈi­ÒE•x–‘ÜßY·}uÚþYŽø–¤Ï“Þ·û²'×zõ „ö 䵇W{)ûbä}ëð‡V1÷­ñÑÒÊñ¯ˆøsÙ s²ë^{Ô“¯4úäî»ä“?§¾ßÁ÷:Šh…FG´‡ò‹òe•Œ¶ż e.e5åµL¡'=G€$‡/Åì>þ¸’¹*EBÜ3OîL¢;ÇšÒ‹¦ý”'2œxý‰¸c(×pd;Çå#¦ù"¦ßþlâ<à8gæ  Ħ ¢~ PvïSVù©ý¼~¬…×îƒçùZ‚ûOŽÐ ³F¤ÜàCCîÍÞÈÅÝÑ¥˜#!èò`DQQÐ8 ¼D9󎳎Ô.îƒB±Ñ»}A:ʾRoþŠ CüLršçЂ¥{.î>¨ž-€ÌÉà‰-{¨b¨Õ. †©ÙÞ|‘,‹àAë‘>.€p{Ñ1¨>\?EÂùÏN’)Ž ¿UHÂÅØ,Âìeai¸p5:€5Þ+NR­\ŽÖ¼(lÀ…sAqádÐ|ˆ9`±sνê:iHzë0 <[½µ‡…«ª ÎLF ‚[iA͸~ðt(Ü«TÒãutæ ´5 ²ñÖȬ®ãbòÔ¤q€¾p/æ!Cˆþ¾[—…å¢k@7ÿñ†Å'†cC™ŽÔÿñz‚ì Øî Pºï§aöSA rÿ‡Ì«E6„Ѳ`ý?ŠÃE^³‚BïFP#‹VæAk€/¤HÐ~ñ^ù²"e'<ô/9˜#«"¾¼šáŠH9šºXFO“ˆÜœӌÒð•Ç@gíE9UP]4ïEᜄ¼Ãô @äk/¤Üϯ:j%(®ùU}÷NbÔ=ÖÑ£·Àfä-Ø âBD/²r@üáu|$h¤:b–cåÅwWHaôCá¡í‘®Øh|ð\î?_Qƒ\Ð 8Æ^)ÆÐX‚é€J±áN] Þ¾¬¨Z @ Üeº¶¼Ò”ÿ¹oÄÕÑÜMÛ)0~¤‰¬êÿç×ZŸÊÇAK›Aýœ÷Éú a½⽚ð1¿wCЭªÒMƒè²ø`Æ,ÿ×#[ÏêÄ^Vhòýø,Ù©Q¶$tPgû—³áHèHA¹rWŸÍ&>-ø&À2¸ÜÄJW&î¢Õ>Ÿn>9F%‰âmqt5@K/Sר†Ñël¹h¶—h ›<:ç«"`Ö˶„ØH4†hä‹ò_if¦\©dœ£ª‡øB¶x½ù>‰fÃ[‡9“S™»y#©¢Ö&ëÚËüh¹pïa‰¾äm¦œêG£\ù–Z¨º”’ãÍG­ YkÎé“2­á¶^œ{iÙ›L­™äý‚>¥a¬€•¡jÃ.Ã:mé„zNÅ}Ðú¬¾ÉÙªsn—J¹±}ó.6°ÕJ ·Ð¬W5›™&WTˆÀNÙ’#úë´Wô¬pÊ/r§B;g‹¯E[k‘˜åÝy~ˆ*ñüáûÉiÝÁúå•Ó[Ïåáz±šC¢ê{s1ßß²ø Éž1MÛ0ÏüÐíTÿÓõëÓŸYÍR&“ù„¤rÒòwƒ4FánÖÕr*ˆÉÔ “em > ©…PûçÆj€hü瀓p›jRÓA…‰L*:.ÐÙÅøÿœX•ÿ9±Â´hY3D*ÚEÙ“[ÑÁ‹–ÕA¡-J:ÊÑ.ÆÖ¾öNAÏÌK>Cñ'®0èì‚:̰¡uå‘.t¹%r‹/+þšÅ`×I£‡Å_‹ ¦åÐ]˜™s —Ty7¨„ä ¥¥M{I›YCÎú7ß.F.väX§šŒeAõ¬ÕØ…ßr´šh§šÄÉ â¥Ô¬ùÍ×|Y":7“%ß*!ŠZžîS¿Âèü¢CÔ·è…ÀäØÏâ^…è„ðÇGT ®­ïÈHΎߺQž$Ë_ý¾fùŸLkfîEpÿŽiëx°°$þÿ0­¶“·ÏÿBÚÿGìb¡y@W¢^óéÊ/´œÜsD”4jª¤ØE+ïñª,Ÿ§ pg[ÍÎyÌ™[XTÍX:Ê›—O;‡7˜Óì±W;èU7»¸¿l,==Ë?ó«g´o_%\þ{óc¤+ó÷ÐßáÝ5Ùß × Êa*lÅêbž8G|–õ…Å èìÒ5ølØ+=ïãwJ£—”ù«kˆHcï#+·®Òß“×'*—I‰Ö?mÄã•è/6ûB˜´„Ç ª1çÔ‘3ž×åJ;Ò]¶c ŠbŽœ}ù¦¾Ò¼üu®©Ì ‡JöÙ<˜ê9”$øã4|Ü÷t~èÐ7òRêv’àÎ@³r.I u»ŒTŠ,$øtB¨(ˆT<ÚÌ'GŽpIÝ~{·šMÀ%Ý…)út„¸´ ”s÷>&=û­0ßÛó÷`\1øDX‰K?­Ú²¶Ãá`²ñß?µ™âuSTVa©†(eÌŸazǘ¾*;Pš%u,y4Ùe3²ª§7[GÐ#{G­O•ß?¨U^÷¨yXkü>Ò^åAeP<‘æØ_wà)•–I§ª²´RöPø·)ô¹Ü ˺æjm^iþÅX¼z þÅjíò~™îãée±wÒ±¿D˜u݃^ -ãÝÆ<ÖÛ¯OYŒˆ]­-8ÿHküUWpÞôñ†V6Ž‚GCá ϽWö²«¼ªÆRLûÝêêÌÛñ}…Røö• Öüu$±®_­ž˜?ãòWGèùMyq2n'| ì‘=@ˆ&¯[-œË­öÄú2¦¿P;Ãò‹„?¢ÓÌ‹§¶ùñ‘@Ö%æì—j/É4àâê/5>PšVïࡱ¢†¨J}\¶ ÅmâYo~=8;EÍ6O•õb äv Ú°%'Î"áejª—·åj_•ýø¢^8ÇRÜk‰çÁb…šßáVN™ÿý‰9£É¶ž.¦¤€w¤†=‘Ù(ÚÒ® YÆ<íó«XÀ-kW3v´hád„*6/×¾~1p`7I5bn(ú©û¥ƒU …&ïKW³Ù@Gãu¹ÓW¿Üö0‹ðrÞk–ÃU½Í×:ÔV¿%Ä)M“ä)B…gÙ>"’0·7-1°ÅbÁ“Eν¢L'¶aí›—)·*éÙ YÆ™'B¿Œ‚¾¼ æíP€=‹U.6\ïØÊhxc|IL4ÄMŽ•,Ú¶äñ&qÊÌQÐN‹Ùè0›„×ä·an7åEïÉaÉçnÞ“}:Š’”n-Œ>»ud¥…s«QÏWwhF<ˆË~$ÙÓðrª»ÒÀu¢è$ƒ÷ºp–†›)§]…[^ɆÞgþï« xK(Üw¡¿)ÂYT/8-²—úºP÷gkƒ7‰bt>A#™é–ö÷ÑJ¶·ýð=™Ö.ö|¯¼4—¾ÔN/õJW·ÅÉ'”sÛÉ*4†ì)ý#Ù~VYöÍ’7:œTZ:¿ö,™GùæõÊt‚ªŸ ž&WtS|J=¿'_±©l®!óQFý·–f÷–‰¥¶d7 6ÁåϹ Ë÷¥¾x¿­;÷ K2§›³•/Lû†eN·fk^¨öa³ú¾Û^eš ÜYJ°ðé2rOŸ)çœ!ú%—ƒ»¨<¶¯šöµLJøž­²¶¢îµŠ)yhjð6hñIF-z ôsž ý¼Á­’xtGF3‘wZ€ÂSÚ<-§ˆ Ö¬_sZâéLe™BÝÆ%ó$Áa oA›ú—ï"ª3†#gFPÀ;gɾÜ>kEdàìÅÿ(<êýùœOZ]¾Ë?'|ZJñŒƒ¶P>‘Ô¹Ë œ:¥KíÈ8½Rx¬ÛWóG—ÿ0î¯èåc?þMNŸÖ囹À³¨î^C¹ˆã…"z¶î~¿eT Ð~uÓ æ˜Æ/&VŸ¢Ö°B•æÞEîá¢Ø€pf ±Õ àŒéÐL:s:&›­n½TžBDG~¿æèj¦’“ᥠšø^?ÊûwŸ35.OÀ8Ù¸Ùt[c ŒÂWYo¦lõ|O<ß~(4󉶜üØgÎ×½™zJ92­a>œò]¾Vø‚2·`®Z¯øSè¬ÑÏuÚýû‚îÀ}ø}éÜ·Óˆ Í¿O«Ó´Ì‰üRì?ø(>ü´¶ì~å¯ÍÀäzâ×xÞeäš`IÖ[v7^[ïè–ë|Pîu-ibt’¹§[M â$ÄÈøCRSŽÄA£vU“ÀÎÒ?52tqïÉ9¬<³!Àð ;’#½"eQóšZà{tÆ¿ ÄŠ2¼úËxAèí›Èà€?øBƒ­s#ýl`P•pDïÿÁ£œú¯5ßAÁ€> TtÏ–t:&–¿‹êBž€RîrÑ‚û“Z96æn¾È©H*<%` ”™éU)‹êÕÌ$xÓAÒK×uÿ«k}$ÝK$ˆlˆ¨ÃPÈ rq_·ÜW_nD‡æÖ¹(–…·jb€ Þà9"47Té9‘yÄëöáá"FCé O ö=J§x!, ?úM‘u¸€Õ?±Bp«8!F×’›R÷௃¶=¹ƒEHd¡xÕPº'H2¼Ž°¸#Q`ÁûKÅ¥xó±1y«ÎEƒ, cR’~bƒ¦WBÜnÌX˜‡ 2¨7wb³8ˆ (2ufy%ÊÂßaÁí»€UdРŒ`À!BxÍ](å$l_ðú ¦~àVsÂÁ4ñþ§¯½ƒírGªèÒ ³6ƒ¬@R ÁO¯/ ÉÕ‚Ù‡‹ÊÚ Û‘؉HH"¡°qò¶þ]n«½4(‹6R½Ç„ø£·bÿ‰Â¬i&­ü·B†(>à$ Ê÷/ÍÙ/žŠœx5QÃkãQ:¤‘CÃé^ o°Fº.ªHˆÁöG3ó ðof J¹ ]'cÀ:2”þ¯AY…ƒÂt¡3kÈ ñ܉ÝbW<ÔÝ8Á¬>¥CÙ!lƒÆE"Iép¹ÈÑ3Ì€p«Áº4¯¬Ò\j”hï••MÉÔ`=½ðèñq âTÆ:OÞ$yÔ›63¯²ü‹7Yü™¥VcÞγö<&9É Ñ¼›<Š–Or¯.0­Ÿv[©×Úû·Êz~’c+ÞÑ¥?$.’c°vón‰ è\dÉ¢Œ`æJfÉÂpbÒÝÅôꬔ™é5•;±]üo©ÑAô XQ}S–y:†Ïþ&´±½Fé%3 d#²ªZÒéݽœS3ÝVÂig÷iØ`{ÖìýødžnüЈ"ÜÂy5Uz«¼ÅÐø×Ãá }îbT1¸`\ùá&š~Zð—¢eÙ‡|›k£æ ›£ïkôzÓdqÙÛiq‰ÛiGq‘Ûi‡îÓ,=Š–FÍ9¡çånø=ô— ·+m/.º«ÛVÏ»KÛV/Õ®¤¢+Y ðésOˆ+“b¶uw?f¹C+dcè[¶u×ñ Û Z>ïî?å²RãYqÎWRŽFÛ‰ Š9µåhèOñÝ!'‚. ƒ3Ï1Z¢µ¦æ‡ð\cÏëHÝJé®Bê>_óžÃD„TW‰Xßw_ç•ó7ºÕ2ˆÖ+žÜy©®rÙ>ŵÕsú\©.xió…sG é×öÅÅÄœ¦É+¿KpÑTEÛɶs¥Ëƒ,¦4Á²PQIO}·ÁöÞã´FD`ž}Ã×}0ÿLKrý)9‡Luw<¶7ýÉw«=Ó§æ;ˆ‹a“Ôïu«û ãâÏ'жöÝûÐê&ŸL±lF½p1ÑŽw¿‰ö޼™gŸµ~îîA^RnçØªË¯9â›wf”_#9ô{5IÐU8›ÑZø#ªÆeÿ3¶ÇJÊÈ~PAyËWü¨ø£nã ¾ê^úƒ?‰WíLçGør·êzé‰ÞO2î;Ÿ=_×÷þ¥ƒr‘7ý8‘ölãòÙçD©MÑ27(ﱩ윋<ðh;ò†oBe²g0ÛêhDSScþ!kiGøI\Q` b<¸KÏŽ4ÃÑ£;óø1ÿ½¾ì.À®,¡Çah·’{6ýõ¥cévì3Õ^»>ïºÆ+ÅdèÇ]wŠ µ§’# ëiÜ ‘á·Ìãµzñ°¥Íùa˜iûø‚V¯inŲ碞Hß«8éo›ùÒkFKꟾÂÝî™´2d êU<‡èsézký ['(þ°\½MçɈë­ñÛO=.¬ù¤ù¤=N?¾?ü€õhd»9šÙ#êìño‰t‘Ç¿%#;°¯†æ¬ÈŸçô†Zï,/ü;¢Ë~7atVÞÑ·Z/·tôWìl³¡~Ь}|Ó%›í@ê ÷"²c¡>­#!÷ ã»ÑÍQÄÛ±ûGnÄ©#¿ª Ü©QÆø5’åÁO˜X^߃¿Ž°êì«~»ÚâÀ:Óa‘M*U¤0»4ý+óbò½Xþ#®kO_ýÏš$Ž)tž«{AÁ¯ÕŽyà×56O°ª¼n ¡{É3¬Z:»•¯{™¡P;Yª{ùNÁ„mç/©§>Ëð¤#4 HýñæY Ç¬ð&ÏôqÙ¢ÀzIR6עƞQr°Õ¬{âfìYŸ•Íí6㱺R’™MçfÞê´Z’û€M’e±Šóo˜7`2¢yµ–ÒU\“s"ìF>þ<~äöSÞ©ãÎ ý(Ùï²ñ··éÓÎiâõ›0¤Õùí¦Ù¨ hòmi³:—±ÞÎß? Ž/Ç]•žË¡2Ù\ØŸL¾Ÿ æðoFŠÝ™ 0ª²Šá¬H&ZÓàù# o‰Asý|mGÓ†OÉ¢.# ‰Ýl)—@à'ñ_ôjZÏe"ÞLD‰'ŠW(Ù]œ'ÎK\ùòýêz¼ÊA»3gäjè«edYòˋ֤¬Eÿ›ßãZÍoOø ]kÕ¾ÓvnwÌTÌ–ô.”ÏpT°ÕâØ/ž:FöË1|¿¯Ñ–˜¼N=Ðÿ“;<[Õ_}‚²Ží1©»µ”ì¼7(\*ú²Øp pZ€H&¼¤õ¡l’ÁSj…êìÛÆÑíDõ³÷Ižœ±Oø§Œ<ÿ$ËyA$í›WòŽãŒ"­<¹&£[~ÕxL8‚zÔàý´ï²õ!ú ól©÷Eç9rÎËÖwL€éõâÛ熘À©•ÒŠžÖ8òVué¡q.àm#Éhjñú/ëj3~¦—M%Åš&ÐÖ¡¾ù?EAÝ&2À*c m25˜ààµB2À@¾±^"V…ëmøWD_½î2°]Øa(~Ôs¥¹N¯¨cks艖Rμ’¿J'§U:‘7쇗…ò¦|@²7Ä÷ŽùÍ~x½éÜgí’g¢ õF߉ßÊ9ïy«Lö»SçOq­kŒ#Æó4g…ÆñÇŒç¼kò÷îø¡Š~6ÙoÙˆ‰Á*“ÇZžÑ{xtðH°Výt«¿;Zƒ~Ç×Füh¶î®ê§•Ãéñ›Öx¹@šŠí"EY£E ¬ø)ÝSOhf€à¯âKR9±ÊNPàå À¬9€ wìLÀÿPÏ£®&òˆäÞ‹tm.YSÕ×< ¡AÛªµNd%óó¶"IãÒxAùáGøº§ZÐ.ÌPYÅÛJICf“%H|Ç@šJÖ4!¬ žÕbG݉'ô­ âè‰ ^ª«C ›©Áox NÙ¬ôÝÔ@ý)šªÞ«ÅHÁ¹AcÁ¼¨GsôÛ§i- ¤E‹‘qt¯EŠòY£I¡àr8¨^)óA¤Wç.Åäºû€ 4Hƒ!pA;j2’¡3x+Áfdh&¨Ríåµ"-yΑ=B¥Rf¸md€ð« !¾=6>rŒcÐ]øJÔ{W¼ ª°G[´‰dÐéûÊ ÃÞ;÷K Ðà]Å·€KKš±æB¨7Q³„)ÓE¡iå}—ÆBU nH£±ˆIl̼=ŒNˆuobù—Òï‡7y*>¦´£Šm“…ÕÞ³^ëÕ6^QþÒ]а_v”ÁÙŸÝ(ëýì’í¹5áGƒoþ:;ÓéÚ Y¦Ë:´Â§û,ìý21ýÚ{™üõv™˜!özJQ­$³®¡Ñ‚béC½h#ûU»4îzœLÔà`½’(šÙ›!ˆ]oý=ÑÁd³Ì!‚A×ä¡:¸±P={ðw%òµ²Gè𯿢ƒ©f¨¡7®±CGv3¿•jSÕ {ù@j9Zs¶¢ñ”ãx0Mú·ÇNáÊ•_ ÍyJ`‰-aMq[ *CÈWª´,÷ŶD`:¥_­†Ô­† j¾Z Â,Ëైy¬(5öbžV9Lí;©ïÐ4 Ú&ù¥–}÷‹%xÙlºx&‹:ibóÊ0Øó÷Û‹¥¢¢uFÅs›ÿ‰]ã;K‹TäXXÕ΢RÊs¨’b‚AÝR¢lGõb( ‰ ºïD;·‚ÃñðÍbX¢^¾F¢5VZf´±’Íp±·$¹±W(û ¢¯Ý$Ý‚ÖjŽ)‡T£7ܼMšó¯™w1{Åšf•Âðzòàj( <ä,àjô)¨<ðIäb:Së²Ïpy¨pQÜMi©ÈQ¯»ó°ô^±Ïk,0ø¢áÚÏE6Ûp¬ÊFž&–@¥ÞÍáÅ]‡„Õb)z8î0·Ì}l£;ò¨8Þï3væGÁîŠtuZ? áZ3bª!÷-+$}]IL¼‹Ú3{Võ!:Àâ‚ß4¹22Èc‰Iß™ÃÁä¶ÇÜàârïCD4rŒO¥FpdÇuIUÅ…-tiæ1pÅlf´ævOŒ/¨¬®i2Ö&Wo› ú&̾}fï¬(›Å¦[ù>•^|¨€éÓí-Ô0Ú‹c±c’× º$¹31^É•1±Û+ªÒH|ß’>ßç>ï.l;ç飧Uϰjè˜ðJ£NVÉÍ~SÕ¯„„~Oj‹©œÑÐ·Š½Ž><3K$ÐÞKW¶ŸÔp,¤ñóÜ¥?Õ5u½’mý0Eën² «ŠÖSß[ð¼¥Ùêö83·”¶4"ßaYHÓsZ?­aÇ‹$ud`¶Çä\£Xî2õ³µËá ÖùbÍ^ëê†)D7Iœ\f›­×¶¯CËšY˜rÙVÌ'ZÁðÍßZ˜RÔð2øL2‹£%®³¨‡ðó@9n_çìÏë eº—öŒ†“êuß·þž„·/³ËRâY±fõŽ#ËJgD;ZŸ³±9_í„a·þPm.ž‹+š6~1«ËYY°¢5‹Ÿ‰3´šŠ ÷ƒ ³®tâȘ=“öƒ5÷ëL7¬ÖÙ‚è¦H'ö_Š “÷¯'|ÎBê•->³Õ]+Þc~î/¸ªŸ)ø±G†ƒi²ŽG®&“¸ƒwW‘+±Œ“%±ª;çoîô˜$?Ø WqXSþˆÌ^²[·`àÎ^²Û|߯HÀ½¼t鄳aÁÏݺt錳]ô5“,N¼aõ:l£Pð ¸0ÐÜÝTÓ(ëÄ.ÑÜ›Õò³ó=Y~¸â:Ždчñµ2®=¬ûTpÑï Y–’Þ'œƒEÕfÔŒ¿õåbº-,T¾¸êÁàÇØZ_2䌣ëÛ߆†FJÕܢųÜ[ªÉº£|ò·•G¥nbŸÒ zY§ vŠgª%m+G“Uƒ‡ª=EÂÖ!ù²ç3•úñ†УbÜ÷B©í¾Ö>Ò ÓkÜ«Ä÷ÙJ)n”•4¢dýõ¿k0ŸÉjÀ/däêö=÷A£d_%ŸÇ~£b8NŸÏã`.ßT¦ïˆïz®ØôcŸ™ç.áø'˜ ¿™ ɽMí„`v|‚5— yCLN@xìX4õW£:|\r× ÙKîSôW¬}ðj²…‡ J÷{Žå`ןtò#ŒûBºZB¿Ô͹¥ø¬H' üS­T—G+ ÌØS=4/Ë3¿’M›|¸":ì¶#ïFÄúåÐgü2„uþƒÛ/ B G¥. FC¥îÕKöI•öC:êXŽ2â÷įÌ`T›bÙú¤}§É;0ÎT÷=ï¶Æá3L8Þ¥è}‚Ð#ïý)B`o—:GÔÅ|>Šóñ® Ùû1(;¾Lg¥Š(çUõK\òB!&è™ߨÉñ4!ˆŠóòZûMU]BØÎ°ÈçRºó€ò±¤}ŽHz¼jÛ’ðO,E.ÊÑ ç9ìùFRf£:”g5’G‰)N]š"t—>C\kq‡“Lº¢Ð$ÆoH¨ á}5cÊ@’bÖ²QÌ6ú•†Þw¯’—šÏç"mä$s’t‰­k^Ê«‘ûJÝdY ²<ÏS®¥ŽEçø¶ þOH Ãa¤jö`œlÏÓ·<álK±÷~Ùª¥€°ÂHŠ .ÈLÚ7à‡’¹óÀ‡pƒäh¡(@% °ÝH¹I­ ·Dפšó j ÌéBƒ°ˆx1£Auþ2@‹Øn¤Ü¬V†WHübz2€…j úÚ`!™à–”Ðs"O¹ïÁïN+鈺P>O‡d:"ä’”®“Züv€E®D 4AÍ·/á…úóSÚ——üs_N¨·§\lÞT€‹NˆïO$@ ˜@†(-,s—Ö”JUñ&²'J龺OÑË1Šwäx1Aø/’ *p¡èàV<ÅGGTËgžùr‰«XœWéÑéŠÌ£B¸€A`·À‰äÐs/O:-Í+ˆ¢PÍÁåŸd¯IÕ#˜ BÖC…˜ƒõrB]êø GdçÑ )DýŒs„’½þ”sk DX…E: ‰ÝåñvÈ6!€tÙ_ ü1HJÒÞÜ¢ ä#ÒD‚“ÂCß0Ír—6”¬ÝTÿì¬qt¹bÓô¿0œÖ‹^ éÒvY`ÎXÓp6Û ¬*¨˜(–qnî)—œÇx~¬G×½ `BÐÀX ´?´g1/]uÀ¹ "ÄCñ.Šß<.oÖÜ¡êEëþH.ŠGŽiPA=íu^y€&]s6¡ó*çÞBRE;›êÇwðŠ—zŠßs”;=^s~ª*äÍ9pñóÚ}>Ïêc½‹K³U|»ª 4JÀÖ" }9xAùÓPù§r]fîÜE´ëù ÁéfƒÑÍŸe{ky×g‚%ϮϘK7Ÿ)–Ö„d`GŸ8fÙ“¶™e›2ÕŽ'ÕŽ‘v¿e.:tí !Þt9QŒ®m·ÿ<+ :Ni–Ð8ÆV?njÒ<6-YêSi¢UiZ•† ¡@1ëþAö6*–¾_(„A–KnlA…Qµ¸  —¿ƒÙ‚ ‘?¢€Òê€mÇJÚû/Ü–à¬è5–=‘`3&¾4“‘õKWÆ« x/Ë2=ÐÉ _¢cˆ" —4L 4±†p/ÑUFM BÎõèþŽ#€œ…ÙÓH/ÓU*½L's05”P°bûÜ.ß÷Ás*ûmÅ'ÐÈ^}¾Û³±NG:ynÆñö™aà‘Ðo¬éc¼Ó¯øŽâ—9ü%koôâ½§ dù×LJtþªî^«ôÓߟæý } G›¾:‹nßÇ?‹®ÛÏxÜ(ýéç笶lâw¦²Œíç \V}^xáå/Oxši‡B©L·CX@ÝSÀß¹üþyCm9òñ³ST¥[Ò½3†–D4Ë6í–Uòtò\“)ž0XÝ•Åiºò/ÚkúuxlE£/Y¼î0JU-,}U–4Ì!ž#«èBùRg•¬'AéÅõÒãV*~ ¡q«HsH’ßÃð"'KbrSgÎÇ©MñcL›tuAhŒÏš‘´R­Rùž¿b5ø“§\ ­RË»é›tì’m»¼roÁz U©du.ÙŠEOBXžïË_·n^*6/ç:îÙ,Ê{=*оºÍÓŽô׳Šõ(+åQ8Ü“Äãß<§®jA‹à:ýƒí·×|U½:óÑ_½„MM»ÒB_®š¾R§cJŸYÄöbóâ‘ÒII§ÏÌek‡ì«kV¼Ø£J*TÌ é3 kémUµÓ!Û/®ý‹—ngw/®}‹×¾XŠ¢‚~´ç:΄jDú²çž/ ]@8 ›^ú̼ÚBúrMíhHQãÑ|]š 0–¤TÆ!Å…}ÂtéД2’’]/åÏÄ&ÃoFp”¸ìVx˜û™MâÇÀ‘ðz¢«6^ òAáA%W‘ëÎE4XR’È:NÔcÒ¤¦÷vÓ¤®¾;@!bšÐ(uŒÍ=¸¼áÀËØÆ|! ¥)ýúöñUvE7ÎOì¦ûËHðÉœåóòïWÿ5d |jÿJóæ+ Ûÿ"dþg´÷¯„yø¯FibÈo0(ç»áUº‘‘)I_ÐÞRˆb-5Z¦þžn9xF7qÂ[ Ȥ&µ‘÷‹Ù—k–Ï̠Ŭ̌Oÿ ˜\™æ ÍO¾kO«¿‡3ïFF•r¶×¥#­>ç/ôÃyáMwxÜñN® ÅÒdñÎ.zÅÞJä;Û(HO9ncj—õÙ9ëôn6cÖ9Ù9î@|Á>ñу©þ³%ERå½ú„MG7›íÛ ¥hžgÍâRÿâIì¸öYkº>wÞ3šìTW_íb<ÒßàI¹¸êÝ©Î3З¯DW½79sÁy¹jÍJÇϲÅqŽûSg£|w<Ï’Åœ¤«µ“‹¾œ+²ú+uÉ_¥•÷>ó«x+v-y½¾ú~¥È¤(¿=mÒøÑ[·¢v|Ï!_n‘þ.U•ñ´gßÞ÷‚ö ½ZÂjfše©Æfdoˆr4ÛèSÙ—J¬Ô÷œ†}tÔÙ¼!DäòK´®]Ü¿²u#Íh­®nN :Dtiÿ‰öfl¶t_ÐÞ¾‘.æ¶ÌkD'¾£Ž×Ñž»Ï Ú»¬˜0î¢^þE{xz'Ñ^põ½Ý—%{Î+K³OO+\‡ž>‚Gi¿æS̨êF]3Tˆ®Ч ¬nº¯Xº˜î¢LL¯k#ÐVÇ~""ý Uæ]%8 }¿‰M€Ç½¹?¿xVÃgøKwurzÿÈa#º¿ßîâ6SpYhdÚHµd2<}p(’;µúÚ¨²¤ðÒ)M}…hÿHM•›(‚8´DšìøÝ‰8ãÌR¸Ìª"_øÓqÅÕV ƒWF­Ü’4à™7>ဧðdö:3K™ÎÊ21îÊUœ2Øõ3¶ÇûLÔÚ½æåxCÛ>mEe¯þµãë3¯‚7Ä8Ž9ϬBUΆùx:ó{Þ¸…­\XY@R: ð…èinšñ‹ìÁ›+’Bðmå¤8 Ip© EU˜‹ä§ô~Q~D š3—³{XÒ†™Y…˜9챃¯SÈ‹+¨@­£K쾇¬%Èy'¹bÌâ¯õ”æÝ^çÙsD5tyÐHhm>è\´ :w«€”t÷T/Ц‰,Lëµô‡hFŠ&ŠšÂ"ßçJ<ôïmœÀÜižzJ}›ì<ä¸pØ–e©3è m âýØYµ¶ü±Ãç[PsÔŸKŸÜîT¿Uo×¼¿ì4­0Ê×鬤kJJBƒ€%èúD¼pA›<ó}¢^¯@´›/¶¤Ô”‚\è eU´ÕΩi0A‘ÿÌt]mÎ@Á-DáµËIм¯!¬4<¨Ü?ɵ ¤ì‹!à™g½CUÿyÊÚ¢-i_›Â?9 iሠ]1!WvVok‚ =X `;]» ô3R¤‹(B‡-|‹hž˜§gªHôž®K„(`Î7ŠÒÁâ‚jy@¶•t]yt)`õ0£&è ‚.4I!A7)R [ˆÿÒr Þ܃r5ê´‚øñ»ÁŒ*/½Ã¨hþÑú¬ÆœP.r0*çC ‰%Žã ôY_@áû@íHÕ¿fãa°,ÔØÐ›»d§HD¦8¹&™G¹DsšÇÄÀšÛå2Ešˆ@dà%TˆУ'÷ðÛKã³%È2+`ªi+—X€¨š€úÉaÌ…H"¼È\Pö (Ï B&ÕÎ×5Òô¼–“Íá€Ð à,x(.€¥;÷°¶¨1ÿo¦C‡ÈIÞ%rª«Ê‰òò«@øÁ-hë—4P(Jü®†³#ã°ö€ëû›,\¡€ „ì+Ïœ)ÅËE‡ýNÓ÷Ò¤Œ.:oNd'/ª]ðü¨Ö+ áöÒÊÔ¼~¿œúBSÅE‰_ºuýùEÇAï€Q¦@¨s[¹Ðõ€óì—i¼H zà‚ù;À´3ÀS[>ެ/j­j®¤Ã¡6Ø¡–³†1' ‰X‶y@>t8yt ¢Ö‘¢Öj ¯:jô4…Ø 2 :[m49ìŸh®‡^û·ïÙ<ôÎr†G¥jM¢bÍëÏäiýØñð-èÏ÷)E€‹^ˬ7­TõZðš®)ÿꊥbi*È8¢ :Ç(»¼YŠza€’Â?ŠÔ¥Õ ^A¡„ %ÉyKÅtjºd‘ô?CÎ\A„êWà ŠîÜ%GÅt\Å;B² Ð7ê<€Ó<ª@$A÷*ügxg¹ã)7€~ÆŠéØ’XÖñÙ¬[\sa²×yÝÀ£ 3²ÚWÊb~×]Ö /E.ÌK4Ò¥E‰Í²³Àº´!ºGÚ}wBÑI!(XÝ6nj¸Ÿ'5,l”Þªðü±êð¼Í«ÖöVìàx=¾bl¶~|E׬䛬OÐþ«ß¯¦ßñw@ê²Â3,}3Ü-RÖ¡ÅæÛùámŠ7µ™]†¿jùÚ™q§µÃ˜y¾&ýf¾=°c{yjäwÜï ´ú£–?äÀÀ­ÑaÈÁ0P/ŒÉXmÁ…³Žè/¬ë~KOà¥Î€8É–¨lÀ2ùjá]ØkŒn×—ŠŒO2@j‚•5J)bü2'z×tWœ5Uˆ@ò²0CÚYù—F'0]Ö=¯Ó ˜Lp©Ô™ 2iiÐV¿Ä‹÷°v<{&øYãRòUDYòF!]•9oú˜">;/ƒ¾¤¨9ƒ,~w–þ"s"ü¡ÍÏ6ð!„zgÞåÏɉF›…Æ> áuÐædLI×·ðbSóÙdÔ°@`sí·û24a¦ `/’‚ ÑԳɧͦ›÷WÈX¤³¹Ú É™§ÒÔ±¥›Úe ¹˜iRÖ²e¾­ÓK×€Øou¨[NEjI o¾ê|Ó5í"†ÞTˆX`aFUrrjJZoèAðp¬A<ñ½‘6?E²”/º©u(ßOê°†rE¢Y5‘ãïæø)=5ËšMŽóÝMn<Û£05Íx/74“ÔªÓð%?ö»NÓ—rEì«Òq0ÁE=3«áâ;|+­H)ûb« èÐõU”’,§ÏG*W=­TÛŽH±q–kþ°ÿ5tñÓÜ¡ú`ÀÀ þ¨üºTͬÿ%¡ùÛ¹¦ï·¥›«¥ -Š—ò›@ BD¹·Vßäj(¥†‰É“ÏÙ’(‰ØÒQ\iaë++BQŽõ@­‡±™²[fðG}Ïò¼k¨Í÷jûʆ‡æ«é£ã™ª†ÿè\39Šôï:"¸ã;úÛ¤Õõ|ãk¼ ¤D´¤yÀÌ„'ÔrývÏ÷ž<ú¤î6:íã#CtÚko˜'qN+Aþêš[•?a”1å=K¡{î`æËñQ8uÙöµÔj’úy0“нy€ÍîkfïI°ÃL;›Ã! ®ñÓ âÕ7¿A°ÁÌoc ÅÁoäžÑÞôI7ø^ûwš(\…¿%0æjÑÞò)N4¸b•0r/ö±ÝtuòZ®öÙ18Lûw˜ ±pî‘"x¢â÷,kæ·åà@˜¸>ù Iè§zö7ûj¸ß›ÏÝ£B Ã=þg(ç(”%õîWÎr­ï•ûûÇ ßŠ’}×ýV¬ä²—ÜEj5¿‰‚‚*BRâ¨'Þ%–P =&®¬”˜¿–òD;¿¦Vû<z;Î g90dHuH‰Ö²„Ñç³XHzoŒ ‰n)]€ï[šùÔ] $S4kî9“Qæ`.‰(©ÙH\ÀØV|ï½AµäÊ6Îð`ÔkÚüE’m|göÅBã#=–.œþ+æ!‰Çg®«ðb¡I4¥èºtG•I™®]8l„M|®á{ˀɵ> ‚ǯØkóάXˆ‰J­ XÒ#LS†XÕŒ t÷–'gˆgd¤½M"Ûv™§ŠM­«nÜãÏóòk]Ô4í4oìú`"b=µ±äYúøÂ·+»Ø¾¿8U×–fÄÒçd›ÂQt?³q1JnM¼ý)CßÛÆÌ(‡Ù=æš¿|VÕkÕ]_ÃÍË‘¥ ³×x l9Ó‹P"±t÷“k‚@ÞD½N8Ãh4 lLàGKâr‹Í÷Ÿ7V-ã#_ô¯óú’PŽû3ÆTÜw»ýãÏ4wá¬ø«Ñøˆ"‹i‹ì,´gná$s=Ž»¢…F6ô.u»+êØ¬#+i<–?j«XQ k¯”Pi8dÕÃ4íq\~ ¹¤ZMæb/|c+e†^^k›¦®2«5ÿ¨µUÏ”ŽBM="õ…pä*ìXÀû—3ßj³ÀúìmA3†‚¥žñÞªüEúÉóŠEœ¯ã¦÷ŸðêßßÖx¯°À2 Ò}·­m0*…2:æ6˜k¢i¼!u4®ÖËØµ¼{8jb–ý"u|y¢TéÔVÍx‰+UzUßðÜfÛ̺ž~'"e˜¦{ÑÝ|ÔÚþ¸FÞ'x\#Ÿ³”Ïõ¤iƱW`ÌNêßw,Ç3lPî2òe§!0ÆaYsìðQ®/3E©¨·W_çW#-†­ã¤ƒ¼;Ö®B\w¾eßkHdߘ˜ßRAôv2sÁh°¢qÑ¢¹P2Ì”ÍsSB¯ëŠêg ®¦Ì£Þ©Øý'M䋿½gŽäO)Œ¨g+n¡[Šlf©­ØQ”y,µ‚Š÷—©Ø@+†hährüVÆûÚv¦ã£&’1=øÁŒŒa©?Rk£×Íu¼6 éDg3zŒ£ÀÛD*Þs vE7ŒâBM’èèßîò²ìšúÏÊ‹Œ1Þ\Ô[£– xýP‚’Ù)­+~÷ùb¨ÞoÝç#6&öã¦sÕ»úÔ8+Û.ˆXìu`3ýn¡¤+·’jS Ã|˜Z-®ÊÆeXÙ^¯l]×?äÄÐôæ°ù¨ûYÿ(±=B¸õ.?ä¡„=ûx6ÏD–m϶j{v%]¤JëžF[ó²"{6¥šãºN¬¬I±kÕNs–Ôñ<8¯Ô‘®ÿ«ŸªÌ×q|ÑÏÀVšê8ÎzgÄuhë•l+®0*Õ¼ýRg¬õ…ò®Jfø¿÷¾‚³ 4…?W;Œ­Ÿª`¯£Ž'{}‰úˆ[wZ{Zó¡ï™ ÷ÓÜñÁd‚ëébÈ®:}ç-l…˜žOFMPY5{‡®¬Ø"CZ~ÝʼLeWuc•#HH:mèPÄ‘|×ëÝ£"ýqX 7@Ϙ<רïq§ÄÄï9…<·–Jý™CÑ[F”.ÂäE9J¼@'³c|Šá{S]ÐT¿@îV»ÿSGrº>œ¹ï[P¸ÕûêýÉñÓ³1=Q8Ú\áA)¡5ÛJšÖMÏŒ7%¼¾¬Ö^›ƒ( J+.²$’=¶@O%Wv¿VF“™Giu4AY ŠUÆgÆí^aGq— 﫤ùγè­ã~"»k"‹ñ– Îy -ŽøŒéQu‘í!ó´ZEAúñŽõל ^âÔ±âú!Àxö´…ºU„íåµvžèfê.}G’ãK›7šåo4©B’Ñ^¯ã!¯„œÒÃïÙ„œq:–Ä?¡¯û­-%Q…dº#W“¸>¸#g®iP2J![%ŽÁ—3ÆÊðîwØ‹XËŽXÓX›ÅŠmÆêp|«zpdð†,¯çÒH^žËnD⛸Õò~‡Ix–¨#_Äý6~'â-…ÓÒÞð1V…V…$|1q‡å›K¬ŽÍˆñ‹ˆ54ð£Rò±g¼Q%{P5ÌN8ﻹJªOÑü·P62;ª¤ ’ùåðO0±·¤ A5=A{J Ï€s P%1íàŽZˆ Å‹:‡>Ã0YçãoåB¶7ŸHK*û¤€N°Éúh ö8iYÅ‚þϧk¼*y'®®TÈ¥Wçü+ ½Ëã‡(ÐÊ ‰]À—V Å% мH) î‹×$À…˜X‹   >?Ôe˜D´á µò—Žã&À@â—\™ˆ6 hZäOH¿œHG‚bx‚i!ïÁv#Å*m[qlÒ¹/FQ1•û@6˜ ¼) R`è!¾)A„!¨Äžãy‚ÄP`Í ri°æ˜À*ˆXT~ö&£Ù’hÂpCEæ‹TŽÝ¤Q@€ÛQ.üÀcHZà9Øà m$£9”à…=¸‚/mAÕMùŒ@ZÀy˜JÜ+(+˜‚#r‡ÌŸ»{‚”@;.H©¦E2ó\1mdP¯˜Š"„AÄ P •¹“%96æ3ºåµÀ‚¸]_Ü/‚Ç€h\È;0#3.Ôܺ 8úa‚„·D›fÉÌq â`_œy³TÓ(Y¡l.¬¹l €<=þkPvÙùõM” =emrø1@ñ¯€æzjK„hꯀ&¨ ) Í›‚+„¸°(Á!4Q8/Cãîæ|Ð £äÑ$µ1@ì¯^4rºä4Ù4H„¿ŽPb à? h$Eæ3^þk 4™€‰„ŠÈZýÐhŠá 1b*"D°%ðá«éL4óP̯r ='ÈÆºÌ‘™§‹i#‚”q£\0Å?yðèbK¢: fÄ7¯Àî“ÿòè ÃúÆùÀŒ¢m]´Èí4«ïÝ‘+žù~݆Y”ç½`cºnÑ9üÅzãC± GørçÑÀG4ÔO£Î˜ 70ÊÒß$%¿!`é©XÁû#?ãc=’½»åzw‹XÄépl’þÖCÔ!üj'˜KáYh/n¢ ¨è¢¨ý‚¾Wæ(‘»/•B´ªâø3и‰}‘Dþ/&1ôë’Ê® p„×hñ2\´pæ@1/`އ´µkã+È) ÿÏ=—UFT;0Ð?ó ú'áã¾ÂË¡u.À¦?¯è"`"μXêŽK0ÿþœºtî⃋|Ô7€ž6ê›ô¼þá{K×Eü„W¶þYhƒ=ž°h ÉmÑ À}ÁÀ]åÐ?DsEqEÚ*Eó@m±¶šB¹„å¦lPÖ’UX«\áaB>ݯCÕ"€E¤Ý™†ḓng ~Ì×N/|ÌWK7ÌWL‡>æK§'ßJ³1Üæë¦§<Ž— Ñ?ïªYpúsй²ù»\QÛëS´»XÍ• ial¶wŒ‚‰®|ÉÙ=“wªÛè+ŠÍÖ¼¡džY;WÒª®y9¦;3Ú”A4« =iÚÁ«)F–Œ¦À™XÜ´L«ø%…Ù&7 „瀃7СДMlBî-{=1jFÑJ“Ù¶$Eñ[O†ËëíFoÒÙ|·iÒDŠ}ÄFùÓLb윾DY•Bç,¢³¡”ŽÙŸx¶…GCQa¹ÇË7yÁw‡Ä¢8Ûøþa…¿ü,þ¡-ÛKQÚZqN©åý!¸ë“è\ÓlÁóįÏûœ¥7x¿+û”ø¦ š‹÷¶ú-µ"6¶?ìÙðá‚ãa73šÎ¾Ã3¿úûéÌòw,PX{Jqšg¯Õ,(Ÿ$¨ÁÄŒ°MÆgâÜã¢Æø£»–2uÑÄ‹JÊ‘M.+gØr²¼n0ô"q§ŠŽ;E]r\¾´ÅÔÚÛ:CÅpaÌ^z<¯p㜧µ§DX0m˜Ws2]OÔ vr1Æ{ÔlÔüœ³—?Æ{„y{û󹾿‡¾«[T…¾ñT WTÖø¯âšƒ{¬.‚yeg(^X™º&®â–èqŸ!ôŒ¶¼Ü}»N噕b[†úÀ2Òú!²S^’ªB—Rpw¶öd…UÙ»·Ûx8-Ά¹V)¸Çf’gå~n4â_*„ŽZrm"ñDÛÎ6î+| I5ÜæƒvÚãx‡õêç$PÔ‹©FSÀÔUe¼ a÷þ0”Ôv˜¹©Ñµ>Ø 's6hPžƒÍ££J‘*“Eo¨-/ÏÀ“ò!)›0ÿî ˆAæöÛnúÍ.uWj|²“´ÄÜ÷ÝüÙ[ˆ{ìU…û¹ýÙÃ7®¿CæãW;J]ÁñÀ†Êékî)ˆ&ʶ–ÍEã¤Á§l^hX¦DrÎ!~­ùÝ ƒÝ®­Uê1:÷îvÙÜò†„+À¸øæûòŽÑéå•{>݃—Ãr…“ðƒ¼®°Ñ­ï€rôÕb÷¯5¦ª×HñÁ7Þ­p¼È„dvÂênÇèŠL/E+ñ[uë¸à›TÍÝêŸì‡eÌÝ'ÝƽÓ?‡¬FÜ~|8`Còb¾·³ñ)å’ÝÝ "+ØÐ|Úò”‰êHÜiˆ¥¤³è¦š–VSR£‰|bØÁŽQáTà ÎÓ4äÒÒ—wu(Þ&LÙQ~v Û§Žv› hâåS˹æ°€˜6S?•lK¥;Ѱtùk&+{¿ ¢>*ü, ™`•Ê/SÉ®×ÿ¬*ä˜LyÆXd#¤0!}ɪ:ß!þ¥ÀÒ:j<1,wðçQF‘1oK£U”Ÿøíþ‰QR‘5£¬–rd]ïÃ~êê›~ϵ:˜ÑÖÞ€&!8àØ½~Ÿú&"c¹†˜ˆ«èv ä§±†V6ö›]ÛŒBåeÐ,yÆpE•Š/æÕædY´”U"ÊLPÔØ›]}XoÂKqXoîÝD˜Öð¸unì¨+c'Õ9¢ëãȇîc¹Ä§ž2ÛtÞð¶8`8Tß!$b¸ÄUþ5Ò"ªs³¥Õøû‡x~æïBˆÞØNA¿yÚÞô<°Üànu?×û?Çðô)N…9Z„æÝRñõ¿?V1ûpç.¹«µßÆáîGÑ,Íü,Q#C÷,¿.:'m—öEŒÊ.öúóïšõùcb»Ò˜ë/¢_«k’§$æa­T[9ý__ݱ¿õÇØbYx;Ú?Å‘`«òV…gOzSÅ‚¸«=V çF|Ié÷±ÜÓËö'wã*Ø)LÈIƒ;wïˆ{øúà÷Ä%Óh ¼“ÒZׂ°â‘rõĽ¡i[ÄÍC’¼3œn1Gú2u±Òu±xˆb]yåš–¬xWaöuE>·¿V¯2-1ã/Y…¹B?/!Ò¯²ªò—´Ã\qƒŸçQQyÆ\À–Z¿¼B™!vyƒWŒ†°Oe«>Zü'­H n"Òâã¯b%Ò¬•/M21>Ù«TBî&°ÎG<úñÈÞ6‹¬ìVܬ=ô©å“,ÌÛrÕIóAÁ÷öÑ>Ö¹èþÍéusÿoýÊfrõ`a`~¾‚ü…_êeëŸUŸšõu?TEQ¹SäÍgÝ25¨øéƒ:Ò‡Þ0ö49“ ï'Cªü>—uôú–ãDô{òGØgÀ¦õ»HÄŒzö‹ëVnöÅê“xe˜×Y:œ(C»8â&x,ædiò¹ÄË4)ؾù3º–v/?:SÁRx…àú´ ¶RbTáŒÅ±™ÁÎ!ó‘cŠ‹Ê|çÞTö]pÒ ‰;(—a|W\^>R[•Q0ÑZØpµm¦U9ͽ/£!g×7ÝÝD1R¾ng¨„¿ ËË©…lýö–‡¼ýû|›¢’æêW¤ª]¹VSã«[Õƒ=杖ƒ»\õd],Å'gbZ®†oö¦¼auÃì ßÙ ¹µ²1¨OÂ8÷²ãòö{Ï“ ^Üt©‘Õ:Ö„Üj!D©TÙ€P²¨"rn,Cj“àÖ byóç(аýªQÎï¦îŠw×Åx¥nLßGôl  ý[ë§Œ-Ê!1x˜ä?7½ÿ¿¡ÿX—]%pŸ¹œ©$’Su­q~8«c1C±qïaÕŠéš’0Ò¶*óc‰d™·¹-ü®Üà[LŽÀŒ>Âêlµ=ì~xºÕKïð¯ÎŸ’?¬þ~~Dû…‡“od„|€è`"ÞW‰å¦øZw¢©Ò¸/ ®ó“ÇëÃu×»¹Y§Å_Tâ6£1{nä&[”°ºP*¿øL Oùíë\–O5kÚKÚ„+µò̘åB’LžñzÏá–A&¬/©;ayø¶.)å,©Z€IàŒÇ‘S¨ñööÁ„~/I¯Á7}ç:¡7Ï\ÂNýɪ²žMŽƒî[ !á¿>LfFWPw¤D™ê Ô ¦3³û¿êˤN Ê¡²© %ÙŽîÈ!#¯Š~»F#:5©‚]G¼—Ž:*>J;$6‹9_Ù ¶ê!/BUŸ§“)k[ä44§ìŒÒ¬ç,ƒFdbö4>x³Õ#0Ï®´X¤•C™œ•o=n³ÃªK.bñð@žúë;¤äð.iòʉr¤(IfoS±°êÏqy½Í5°ÍÙ²'Eïu?‡ Á5Û9Ew¶'Ï,\žNӲǽí6‹™Ãíq…Ë»µ›Ü—_N»(É}‡{û3Í¿eÈé…Iˆv HéT¯ˆ¢¢ÅµrÊgJpý¦¨ªï» ÷/ÁªŠ‚Ôp³YüUoòŒã·L8UÙMÉŽÉxõAÌß“Ý;dèƒ ¢Uä­-Üyß=e#¦Ë]„R5î~YÙ@iϯ;ÿ -kcé“Ðáÿ±ànUÄ<GæXÆVÙk7V—Š«m:X~Ÿú±ú˜e×Ã)ÍêPÇ®“±½å‹ä_Cß‘ìï3Ó·õh*äp•®¿EA“ü‰ß ‘ÛxÅéÏyÈw¨î?ÍDã—Íäw|!ì†_(»î(6OïädÖF,$Pô=Eº¾ìùd‘:Qk÷]`(ýbسÍuýpTxÕæSœ>qúÐFzœ=?úÀlÜN7zÝ]'V°æµn¥š«@÷.—ר· fÊù GÝãD<ž ŠÀŒ]žÏa± ¥WÄ´©ÃEG>A˜¡^¿W.6a X õ@Ð|ZbKAÔQ(ý„SµýŒäÚ'û (uµ)Bª¢3Þèµn;µÒ’h{—‘z× Jx½ûôèÏÆÙŽ˜? †¾ýj MS­ÆK ?|t땹Ò/ËhÜ6þîëÇ20NXÀ?£9žXpi9¤+*ãú¶¤OK‹=ñi›î‡$l$¹:Ë^!®TJÏ+vrîEÔ øw 1{Î×Ó.!eZz$ k…!\—Ë©ÀËä¨ÍÂñ ŠÁ鲡Ì}T> Ú%0‚üÒUR&ÓuoÛ©'Q£‹›8½kèÀYi‚Ø«\ò5Ê®…ß4ÖÂïÑ(§]Á?…WlíSÚ€¯ÏÓ`“év§ØØj#7¸¿±¸¥wfË"›äŒ¨Ë"ˆäîÈ«ÝK\¿Þ°2KCP¢T“Á`ÀÚzï ™°Øˆ#z¬Dyã$4¶ËL•ÐOµ/ß K+Êâ`ïß3$Ù…¨½Fr§Ë©nm<¹MXnó†oæ[Õ×i÷j÷Õ´Ê.r0u2.geìüßÖ+ê"Ç-þä|½5*cÝ:O­ËÛ<ã]4A+Ò³ £!µ„6U¾Bisöê¥,‡½Ù9Ù˜»&„ÉŸÝÕwä&›—Ý2§ýñÈ&íÌC°ãDxãuÛyÊÚ%¦¦L(dþÅô‹åG£fMJØ|{Oy»ˆ-O ENû܃_ †ŽÓÀVîVνB¢³¶³Ÿ²ó礼`ûxÆX×fvQM•_Á¯x¡r\bÓTt NÝA¼Ö4šÛá:*;o0¼–êº.†w±õxS¥ ?‚'ÕŒ\TEþÕáÛi肸J ÷2§©Ð)™gìcØœãò¥bô†\´2Aÿm«Ž#ç¬lK½ù|ì/Êcô6ì]GÄ"Š¡Oš¶Á_ΚϽ ýåÝùõ µTü‚kßšÖè-å(üü¹Va¢™WúòkùÖŠdN[NŪ]³õË´jÙM$U‡áíÙì^xêüÕ"jÑÆÀD¦Ek¡Ý[Ô?!ø–<ÛþTb-W?‹ádlº0ö<~€{Ã(2æûQb ,š&üHß§¾â¶5?Õ_+’±;C¸©ÑP¶QÕAÉ},Gw µæ}œr¥q Ú˜'¥¿Ì Ž?I¹¹7·¬¶ÆS…ÓÃâ}5ËPﯿÌÍÖùŽM̼Ñi3_unÄ‹ïiX„wÝã Êç‹Û ‰ótRíûÐ…¼8ò!Ëœ'ü‚y-/…¯Š­%úÆ­%Þ›°ÈÍ7šŒTåU!ׂûZÖªÖÚéõñ`]¶æ´Ô.é+DÊOÜ!Žc°ÊØò¼ ËŒ‚Ó÷ÆÕ½º!Þ»¦ŸHÆ8ª^U"¼{ׄxû=Ñ&‡6tç#§-!|»Kö,ƒ¸—DJË÷u‰ì«_knÚÉ:áßÑ{zÞÁ†ýÒŽŠè¤Ýy€zï¤Ýñ¶*b½,Ä5ïK²“~' Û6M Ý&Z#eXE£\¤—l¯"Š#šš¥·´˜J'›8c³jÙö }Ó÷æ;ɰOÎjË*슎fÔÒ½XÞ0*mqGÝ2ém®4 ¾ëüã¹ØxÛ”aUTžûÈýòg‘팀8 ±‚-¤®WpÄ©¾d¯¥~YgÇBRßÑe½¿¤|¸ÌÆÆäµk&lÆBfAôÐâ¸Ü}edêõçðLÍí°™[î•…\uq!™¸‹"ÁºhG)WŠ?É©1 ¿ßV¥hc7WÔ¥óŒ/°¹Ué¦ëÞÙy Þ(c' %nÆø†_>à^–œô6š}aš†ÍÜ¥ñY³M\ïÝRsË…Õì )›ùP²ÇÜ„RÖRMÌB`/ýÐó$túÜOoüåæç¸|eqš„ÉVëq»ˆþÌù#˦y=Nލñˈc„rÖ–hÎ0JÝÕoë ÄÆECNÛ¼&_é…X¨¿nTT~iÀ›tgÙ~Kêðã)¿œûÐá4úIc¨ úÉúg,»Xã`“îq$ôOÔ.Wô5'6æbÙž+~ôŸÃaj¿åº"VWñ%Ø3u¢“‘#¬’^ÛvùÑžO‘Fääߘ2ö?°9þ˜F,VýŽ~ƒ˜ŽÚ\Råê¢óàXÆ÷mÏeó§Åo÷KÜ‚ÅQ›´*2wÛòÒiD«¾Ôƒ„%ZœVkÔ…¸‡½ »/½}ßãÍw…`/u|Øb6hî ¸Cœ‚ÚÒ¬ŸPŸî’<Š}}B¯‹??ÿì0œä‘KBVŸŒPðøÕöC£×*f¡“.f’Ð÷”~DTý7üHsÚoðoíífµvÑ ¿ ÀÏ—Ó|Èd9o;¯Uãß0¿Añ§mxˆ˜Q%“ñ™í|Ø­VìIÙ', U…êð3̾S›Œw.x$dqsºü¥Â‡u¼Ö‡ºOª*#Þ°Ã×dl^i¥ÝÄê|£Vúx¢²›UÏùó{$‘X÷½»×b‡2Œ¥Uжqýêoư=¡tš“[ÑóågS–ÕòkŒw2·Ó4¹oDÄ8ÈW埂:)‹ýzÁFfýÁ¤gk>ý+‰pµJÔ´Y8[p· '?©ÚQ”uXCU‹öwÃÕ²””·½½‘yéXx˜*âêo%ì%Ò·Úÿ=\@?@Êoþ”„ÿï"ûçìÅÒÜå*!ŒºQ3^cbÔÖjü‘G¸b†t½îAŠûÿO q/x)!KHíŸòú8!ðº¸å­ø!Ÿ V’gÉáðR_ÓNŽkÛI–ëÕìæW'rŠòÝ."˵ (?=ì.s"-õîT›e1?p‡ Ÿt;øé«Œ•ÐyñZ™©X¶½ÐØVðŠPQ£Ä.sb$‰¸ 7š U9ÛUª—èô,e«luJ‰bíæÜòY»œ–ÄLºì‡e3K¨rÔ Œ¸r)AžÕ?ô´é@øYî‡e»×ŒâÔéel2¼Ì–<-%$-õßk •Q [iÚ³Ã=+8r×+&2¼Î‡f'Öî+EÓL]%G\ôLîÆWš¥¼Ó{⥶ý÷Ìu¿ó5Ì“¹y¯šÁ¦Ìt8b’Ì¢Ž×ü>u –Ïâôo]²O"œãƒÈ1H›Þì(Úþ>Î9È“0Y×mÛ¶mcZÓ¶=mÛö¯mÛ¶mÛ¶5íž6îì9çFÜÝ={#*ª¢ªþªˆÊç{3¿7S¤ñ×¥Çâ²D(#êÔ³Ÿu=2Áàh¸uÝw ®P÷—A˜mä”K™#ð'¡ŠGWÑ@òH®GkOîªØulÈ')ðN-sLÖ5C&µ¶@¼wÌsýÓ^™Ì ˆéT¶\/‘&œ‘Áði(šB–+kŒaÉõ(àÐb { lùóX³|–ÖaK”=ñ6?¬edŽP‰åàŒ‚Ïhœœ'F[Ô ™ m³øàÍà¤Û‚58îwd@uvU>?Ò#´.P­tŸð¡_ÄK,΃² œ|BØ57A”j5Ë^²B„Ðx)jË6ü”Wò?kpgÙƒÖ« ͈¶=õz›gfÊvׄ‹v¶ð… $ÿ–Sžs¥“03™fDg¬r*Z3=…O»Z8p²6Àb\´ é"<|ì¾T?_]BmâÅ^«lD_C\€§ÀÉ1H0¶(ÉøéÜÿTXÈ"l4…,÷+i¤­ÒŸ• VñÓˆëT÷+óËB1ãFæÚãùíiNÙŠ´!×7˜jSö¬\TDåMÈú©²x3έVÂë¬Z–liñ¬Rlá8#),Õj>|<”KÅ7,uƒ«ë†ÿï¥C^([ ›jFg™qj•šKᆺM¶Až ^¤ u¥‡Ò&Û¶ÚæùPT ýL E/Í]²'­qIžÆ2¢ .‡r—ÚÏ MD"Œ¥ó|wþ›?éÑî 3 îå²PÀ›°½·I>E<ü¨(Ö)Ê(u†Qâ‰|ÿ#‚fÏjâ7gÑ+½…Ø.÷Z u†Ã„¤â¼¸Ê#2º¨˜ð# È|Cò+SèŸ RyKð— hP@@4ÿ‰ vvÖ&¶ÿ†]eTu´/ëMtE)›ø–½X bmíw##b°¨‘!” ™tžÌ+v:†Î)Ó|矄BŸ¼°g‘L.v,ƒ„Ëçí™ä{|k©^7íÏY>»í§××_ïÏ´@©Lµ?„Ô%y°šàú X=J·ì “/?GZ©½)½ÀÕíUá¸Á©u¤÷!‘Óå÷;¢Md˜ËB,Mê¹z²zµ3 Î//;LÏ]•+=j,8àFab¶ï7µ—ªÙsØ‚Xt«S"•ÑËJ[˜ô+¦^/Ø9ºùDÜ<­ã…h¸z¨&‹'ÉÍÉn˜€að8£³•‚ëŒNr»qkf[Ikógç V¶ÁúÕöK‹Å#‡m0 ·p »D/åjK£t\‚ÁÏÇ~®X;÷ª:˜€xÞ½ú†‹µ­§¦\é'žgWðž¦Ó!·¼Ã¼6ƒ[ÕYgkžDk@ü³rÁ›˜(ÖÏØ¾8âzÛ]ÿ“oE…+ õÇQU±rn«š~3Y‡lPÈZ:Z•¬~J¸A¯ùdöÉŽÃ4Ñ¹è ªÂú—j®ªˆ[8é_)@ùŸÙÃÙäߢXVWÍ—ñ5Í ­K`ÃRLK†˜^©²¸@Ç2‰"¾h r‘€'Ù1ͰԬíl 냶½vz¾ëpsØÎšè·8 ŒÙî$8Ãê³ë43}Øë÷ ߇^†B¦ƒz[L “×gåÝÆ`Ôb å®;”åÏ)ÚE½OÑà=&‰ä ý#ÇïTl ã6Ť÷ƒp¹¾/öŠ †Šy¬]©>E¿ê3¦ ¶r¢$Á‚ö'­r=ý¶ù4 ÞdúÏQ5¸Î’&N6dbíÚ“lÜîä Ã|÷ÍôQ»3€í,³hB9Ž›ÙÎ"–Ý@mKÃÊRMÕ¢…`X%ÙU¶Þ¹ç‰£ð)bÇË ÉÚ$]õÒXeqm‰Ž7±ÛΊۭF¬¼¶x“·ø¤¢d.—Q¯¡™ž—uVÛÙ«ÏÐf›mpf‹þ¨ãa²½DÛ–)Ÿ9úZboŒœÓNË*"{W©ÙE›¾Áؘ­6š@ 0?ØŸ8%pDIs8€´y´~!uŒò&Xtï,¢*G"#Xnh«QÁQË[\ÇØ¨¼¥3‰eÀ…¹ÔºýwéÏoô†6éŠÃFW1ÙWÝ|¹ïg"PÓôýío°ÀœåWªB¸å[ÖŠõ†ˆRô–ÖÃCºÇ}SÈpÊÆ•ˆ ! @è3äïÓÑÎóuƒHhD7þ3˜nlËèX*[1'‚¾ÿ›•üNÁåð¶³KžÞço¢qç®Íªõñ†V6‘MBGϪ#!ÐÙÝæÔ!ˆq³rNE±ÄQýG’ü¸°´÷ç»$GW·€IÏâ¡,à‰Ùš¯Z±Ã7éÏŸ–š. }½0¹RÓ ‚Í¥jêtN_e<âݲJ-'=àIItãf™Û(¸R¦"‹\nCkòáÈY~Œ€Å°¹®¬­+AM˜Ï oÞ¿øe8±ü€Íñгá|Ê…:›@ŸX~m­wòMÔ3âu%ë /t~`¶Çη2ßQ‹Ÿy…å¼!x‹‡Õ_=‚ŠF² rOêµÖŠ WÉ“yö Wˆ/${²Í«—RP¸«»:XCŽ>ë.Îã?Þ çEJ £õ¿¦ØqÉöýød,ð¥3ˆÓrÃ’=¨XxåoÐË׿¡¨—j(|žr<›Bn—lØ(l¢5\Q”,3³ánÂ-š3‰3SãT·Ãaôá{£ …B’çkÍþ '$.ñ7Ì@bm Ç1ØOaöŸÎjæn‘~!6"À¼…¬{ÉZô‘7kPvjz‹nÆî½^ƒíLº%xnÉ>z&¹ê맪z¬µ•roú¯ÿLDä½Ü¿’€ê¯$ û$17p40rþ÷œ"y×iSi´s2¥²ŒÍ…ÚÆ‡¨ILî ,ø¶’¸¢Úâm“Ëôlì Nš”–¸”È,öüJz‘Ô£•ï’ù÷x›Ô8h×ÖöÎÕ•¯«úÛþ$Sl,zYZj}Þ/°½Á,½Ô;@Ú®JÜ 6ËNŠwlC-ÌNÖŽjÞ^7ÍÀÀ»0“±NrýTŽUóŠcw»N¯r÷„‚F·•mz‡Q‡n7òKË&=+'_+ašíK¶lÎhD›k·R-Ö]³Q´i·VçÏK¾棚µ|:fã&ÃH!–®YîÁpÕÍãæé?Ï™¦£û™fér“6Äâ™JsïpZ Õ~Z]µÚ9ß?8=Kì´€Ÿ£û!žÃíš&ƒ¤üªRµS!m!¼yçÔƒá‚ïQq.qs&·ô겸¼þ"‰Ñ5;ÊD¾;Ï:¶‰´k9]HÇ{5M{s#“2¸½G†ÂnÐ>:ƒcúŽÇXŒ(ŒKA/Þ·yÃЯÊá~1w:ˆ‰€Î2Kóöîm9çjåËDú$‹e©©,;E笛°¿¨w5T–] nnö9 ‡H—7£-ÂQ3G8åd%Ʊ ®%bÇ9H‡–UšçQ÷Ù²*œ6‹¢¡¾œ1å€ÊaÍ¢gIÙ¥q2÷1ÅŒæÉ>#ª’ÎwÍÜV¥¼Mp‡vnçaº:'‹FꨖɑWk± ‡ýÌ•*ì÷iœ,ÿ™ýÎ –î°tmœû²£aofFwDm7½¹0×_Ë%X©Çw2¬§WNšéS;ŠÛb´_Äsœÿýº£~€«Ñ>©÷ÁfÖ,Òt‹"§¨;_Iä5âÔ$ "‰œEîá-A@~þJüŠ·ý«Ø"«?Û”Fɸԭï:”†q. –³ôމ‡Ü‘GŒÕ§Ðž¸ã3f^`.ëôþ7iÔµaQwДÞ9rÃo½sà"xÍsLâk’U‚;B_;&˜R^%LŸð–¼Ê–MÅéë¡\;îaf#ÅøYk¤„˜ç7­? d¿A6ÆQ£öYa¾ÀM•$ð $:¥7øéÚ1ÃmâÕ0 ò¢H*ÕóBÙÉ:I÷-UáGShÃϬã$ôä=:2`î,¢L˜Ol¹…#S‰q€´^ò“›°W¯…—6ߢÆ\”Éú“%9úý¿§h®Sa9~ïjõoàôbÎÖ¿w~Àeà ô‰ï˜Y˜ÀH¡~‹„ô!gà§ÅÅ¥PÁDgDüþãdÉÕù™/Öøžþ4ŽëQuN^éÙ»ÞSœ±§W¿VGæ"ö¨j‘†¼ŽUP¥çoXÉŠäOŠS!a¬åmJ$sÛ l¾‘\ú,ãJáW–ëð$ $*¯B=ÏèØé»mðwˆÏÚGŸ9"ö¿3Fñð”(¢.>ÉO#ÒB'®{R l¥h€ C¾¹x3xþÐ}¯»þu‰ô/U“ ÕÀS ~ðÿàþïw‹¹™Ø;[ØÙþÏ®c‚®ª`w|µå2cy­©Þ·©¹Ù–ã€$*y+"‰JÂÒΤCw1Ù˜Óš£™FïÍmÉó È/ÉÝ”E—Ó„Øþä÷ÿ¬‡ÙÌÇëû%§hÙ¹Æ*“Ä:Ü^|”Ã5%¿  ÿŒÕºõ‚±«ßß°½Âë;1‹×~yëÛ{ÙÉ÷4ØgQâìRê»7ê¨Rå7c0¢áÔöÝëÆ{Šé:ó't±(]‚ÑÝá?ŠgìY6e¸ƒ„[eå„“ë¦rÅ9\Ž|šÕ©eôTî¼×¸tö˜sØp8‚ÌæŸW¿ÌæeÔEcRY0¤T|ÑÊKöHE„TQÏ)ÿUgæœ[©¹9·‚¹4ccêÚÕÆÍÌ>YÁÀÃÙ@ºjõfˆ`…yó°‡Õ&œe‚LƒCªº‘’¿(¢ií wi‘Ï–øæd†¼jœ!·EðäÉ÷ÖWW€ÀËŒm=_¨W:‡ A½HUj¤Ð%£knÒtr…¼Æ)ÅB¥´dN@JÉDÍ:B¢Ó¯ ]H«àÏCÒòkõç˜ *ŽJ##t¥Q2IØo5c§Žqͪßl—èõN•ÊU†ü")¾Î:®~Á[l¿áÑ 7ñ&QÒJ¢Âe~±¢xéäÒFŠu>¡zðÔë¾ øy*.t8Ÿò/@Rw‰ÄóœM\wô¨¹ÊŽ£Ç˜ . *~q›lËô•€DþÞzƒßR¡Ï2^ÚU|Éð‡u|˜œbÞM¨Øüþ—\{'öÍîo¬áÑþ‡ÿNÔÀÙDÅÂæßdº´»Ê2ú×Mæ±,#±Œ°0;pð¸1ÀiÞŸŠB(H2OJvhƒØº°q(ªÅ²²¬zÃP›³©zYª<£Å?.O1hCØÊªÒU¿®™Á¥RµsUÍkÆË.EFÈ[ÿÝǾÕíšû›ÿý¨ü™Ð®oÜ07¹m2¤-ÜíÁQÿx_Àõö–ÓõþÃ…àÚéЗo¯d9/Ê®M1ªsëö “Ï;2Ö­½×ËÝ]aDO`‡Òh,ÄûÝ„ïhdËÁ‚À A|Û®Ͼ$¶ó6V¾ãÖ³‡ô(ßq¿“¥gtI¾ýÖGà- ªT÷%×÷Cb„Õvi_ãõ3-4÷öV[ÐÉYðö”ï;0Tÿ>UÿŽÔ÷jÄÎ~-äT÷¥¶×iÓw–Œ±Îл1*Õ¸ë÷­mU¡qÍ!;v-,Utåoæª3[m{]±dߢ§¢¹rJÄŸUðfQ®•^Ѽ2fiËü´ìˆ"̤¸Ì7¶KΣ˜#Õ1³t]¡:#Yéwî7OK凈c+m^†¥^×ZK; *V²â&û¢R<ÕÎCædcôG{™MxÈŒDå¬<‚M¥ïϤû‹K¢Q×æÎ»]‡ 2z ®6“@²bZ$hҀ崔 L¤í! .Œ•èµ.ölÑu¬ò êêý´œ[Tü|xÀ¯”l©`;‚æèý¢>oü¥“Ž…ØŒªËðQŽrèêšð½'œèî ¢"©Þ v“\Õ“êú…†<öiÞœ°z ¤F5eFl9#v帩„¢õ#%&\ÎzÍlµ<ÞôFƒ&|Í–ª,›ü×e‡W, nS:™“U÷ê2,ÀÔogÖññÇ1:ùš ûøBhßÓ«%¶+j·5óktã…aHïij­-ÅÌÝz†ùSY¤"Xûd~€;!ÌFž$‰ŠéL¯%`z¼Xä~.¶ŽeÖ•òìR¢gŽ]"¦÷3yR+S2&3Ft{ë.r1 úä0ÞØe¯lÐ>0M–Óùß!´áæaÔpVX<ï~ƒÁ†Ø(à><0ÑÀéBÆ@¨æÙt õ5‚ó¬Å;Ê”ý‹,:`כš¤x™ù²hÒdoiCÇš²œLÇy Õ´ÐìåèÌ‘”ÕåÌùgÎdð!ûÆâ<áÜ›S°ë"­™vm)O¢SK#Êá.biÍJ Œ ¿Âa†Ä©I<—{h ¨ÏD3]^êô\æšafFµP†…ú=ºãïJèÁ1÷YAFÍvçr"DÕFë·ÂTn)iÝqo¨Ú8ÇÜÕI‚‡Œ ‹”à~û`'² ¿Á?xöA²í…äOšwg—•òÈôï@†5!µY¾jö_(//ôav{M>Äûß_~ä{“ŸiHè$ üÖKL™IN³µ ³Â—ãÁ˜™VŠÜQ°Áz !ƒj­ƒjÀ0n‚ñÞ’döj%GQ|‰?ÿRIꢟdŸ6°)Ì(cñò¯p/ˆ¨ôQeK^ªà(Sn¦ÜÂTó¬ÛHZj|‚‚"³ã~Ò­–ï5®•@i¶¡)mEP¡ÙÒè¼Þpñ¢Ç<:òÐØ†+"¼\êáU#DãI"ƇжÊÃP˜U1ž¦"¹c8FP5ÍT®àK Šž%²Ë»c?’ÞbØjÉJã*^§ªØª‡²DE¸½½±‹ÝùJ«E„„“ ³¸ÊSD÷ÚH=4»À¬¢N´;ˆ€š´·ÈL"•ñhÕä«+´XË£ 5ˆÙÑyíè4&sI±7%bláTÔûºêJý¤§Hù¨’ó\­Ä}È©û0ˆZ¬ð”¤A“<9¾uøMp¹¢!õ£ä q´5„ùzQj&Œ–›”ç]†É©û…ÞjÇšv±©|ܸLŸ\WAo×p)se"9«ôÒO9žþŽ3¼Ä<à¥>ùAܲ*[4Þ^>lpcφìŽ}g\±!£ô4£ÊȈėšóò­ÔCm¥Ié³Ar"SaÁV°Ñ¶WzÚ°M êk'=ÉüH§,C¡ ѼcÔ-ˆáŸ¸S5â ‚*>õb=‡!ßöaT mì›mðgý®ÍýPS]F™;UxdQøŽƒ:æ™ 8÷>Ðò­^šÖ Â|9‚£Bÿ (»ºàó"ëÓyÃÊL0óÉÊñÉÉ‚pjý)(ÓG6:Z@Ù®pV÷¤g3k–ó|%ÓËÒμ†Ho‰x«@7a¦¼‹dpëQäS÷:$°æaæUj‡xäcÿÊþ¾÷´þ”oß:c ݸ_ ‚ßÙçÇ“ÈO5æÈXn@x"mVJ…&åžéAø& äÂöÀjÇhÝÉ•ý¶53u •™šŠÜ<´Ô£’r¼"Ÿ›Ï;{Ž7O“ZËã’ SSLQ‹±æÌ6ä 5,°ëK5Heh2'‰¡ÅŒ J|èá~+Œ07U †tõŠ´Kv#?=d”ÒáxtyÁ/­;\ír<J³$† tÎâÂþ z(R4I¤}'Œ•pŒä H¢šLÈ–— Œ–P¢›éb¶Ú¿í>€Ž”ÈL(˜4Ü®a)Œ—pLJš(UËj(±(Ó¿*hÌS™4³~x¼š’›e;CÛ ©á F\a‹=Šº° Ÿ/@dÈFýù›Lóî ¶>ý«¨d­3ÂàâRÕ4¾K3B~Ó‚Ð üS¶{Gÿ9õ'B¾7/FL^Aå ëö+M§uÀ¯Ôîæ@lÝwf'¬F€½NݤâånìaлÃSÅOþåW73ù¯ë¬N'J7Ê|75qÜ,ïÄ\n»¦ÃgžDSEËãö”ÚYg)ª‚sܿǫ7ŽÜҬljS|$ù^!C=2ùaRÔÄ0yñY䜽Rr¦-ƒHwžôº9šzªŽ¬w‹QöZƒ¼Š½-òê¡­hú¦½ÆYÄë´}äm˜ö0›CfRk¤¥Cè5¶Ïퟤhn3û¾ëa“¬¬‘ö ï,5tQl†ÒÚ#\ Ä‚eô6¥çùö0ò÷M1=ÒßÊì-J¶Œ¥„Ä«{Z÷º—·Ôƒ‹gÉàSð›÷üÑÞSçé½´·\]›û0xþ«L¼iŸPj•ý¶+§cFâ=Z¼žÎ0 ªÂ¦<±QªB4û1z‘´TØ‘¿üÁ|Ä}²Ì[hKzdShÄ ÈÄ Ý3Ó‹I.¾Ÿp@˜Yø§˜ìÐ ª|ž,_xWXW®!<º(a²G0>lyŸ–ºn…³È5©ú9 ®ñ‚%¿‹ÞJ+·¬Zä‹[]; _² ¾ÈßÃ=F¾‡4ÁE†oöÅ ÿ öçë‘”¸Âê°ô7“œån8½Ìiz!¤<¹úÆ'Wº§lQ—gF©2ÚAb }‘¼ôùåtù“jå3evX‚~’†÷òœa®i¨ùE€=Oô`i¬d‚&)T‘.gÔùŽD‰±ŸQ"º'Ðõކ©vñrµ^³+ ú@V‡rgáŽãóƸé’2zK‚§YQ^TÉRcœ’!Œÿh.R–ùMô+¢#¶)Ï…`¼Ôjeë1Ë€!;(Çd}‘uºØgÎ)¥½ Þ­½7 ]þ[úqßZ÷Ot!v¬‚Ä$J zH¤‰õD1K‘¬H³ B® p/~d‘]ŠéqR…K›ä ¸@èlf]‘ø=ë¥4×sË«Ío¡ÞðOO#”GÞuÉ@ßt#Þ3·zy0'´2Îè>®âWª„®à2VrBSéæ²ø.I˜#ª&Â9Oå|¹ûÆ=Ón§nðVS4ËEÒÂu? ÙÇÚm̺eåëýŽ_¥ª¬nŽÀ¡'·àY#ç°cMZýô¶}&Yí<:çhmEb·¥†)MXE‹PGçæq8sdôËýopûØuÓØ©V#6G)(wÜ"¡Ó6'Wk¶ó\h16xE?'Gö¶¸kÒ¸KèWq!ÏuçS q ¿èÖßO1Xê´7f}r= uº¬C<ãôE¾ÜûýK… šŠÍ ˆúí!ýïŒÅÎÅÐúß·þ§W¥GBQ'«ó,„Œl-Ÿ³Xa#é‡ïðÞ…+E ­TÁRM´­©L3ö Xû¦Ö™Á³wAe>tåey†Ø*§¹ñÈ€s½åãw*Šƒ*…¬eûí_Ýr¿°®K$_³;i|Qîˆ/h`(]C ŠÄ%o c±oÓêåV@´ ÀÐs÷j"äó™³Î£—/el[„Èŵ™³|,Ý©²…äwlvÚcÚÅ£ž«üÍëV¶á﨎¨i ¨¤­’"^7§Yå1(<:lš´6:„L.7fNáXÐ=„¬°do~ÊûüÚúÄœ6«p®½1‡m÷E+çkó-­™%5w·ÖÍø ï¢]‚²_90#­ûk¹w¡jxðÕk+]Ï("±­¿7² q#ͼJóåoäo#² jq-‚ϾAôŠþ`¿mÁïÑŸ‚ÜŸ‚ÞCwô¿dþ8»*²(Q:^›6I)[ëòOµPá—1Àé*×êòyed!Ì÷09‘—Åòôx/ «û\ò Žd„¾Cšÿ´Ú‡Œ»d­ï?«U¸ÈW)&ˆW½ˆO?"^š ŽÁßk'•?w~3‡$ o>´ K…Âj/©½Å‡S~&uåqÐ-v j’íh'»ž§ÔãÒžÓ$r”\Øãlªü8ª«;V<ªD3¿B˜»Sw2οAѳÜSä:&ÉÙ•ÿ X‹Sî%m‘ó‰"0œB#Ë4ó¹û-‡ß²xý¸æ+iÝKÒ¢HÖ“¯ã'}ºòüÙËbÐ!Á}}KóÞ5!PÛ0[)ÓÅ«WþØûõ/oJLK°à@@°ÿy“RÌÖÅæ_i¢¶«Œ«ŠöÅðZ/¹Ö’´ðVØ’Òb(á/Q¼„!Ê žÿC :¯‰†ÁZš³sêâVÈìQUÜGÁÌûÏ:$ÞæÀÚ|kÊü3Ïa+Ïánþa»ç&ÙP`¡ÀïBîSÞSÞg^·‡Ã\}_ø<Üa, ñùÀÈv2.ÑJNì/Ñs¸T¦ýCæ`fdͯ¼AØ´¤¸È_4‘´“¬(zI· ÁšÐêXGά¬lÜìlÜœžñùÞššªJ†hJÜ£ Q„ƒ=Mk1†\¬zJ¤mDð&%”Áâ‰i& Nçwý:rÖì<ª ÙM5kƒý0õbaóYjLh¥Æåp¥V~7òj¿á°‹ wÚÙ,Ÿ’бZJp@ —?3ò¹AáÜßáD˜l¶¦X‹º,e©:&¸Ó=Äré¢k»§ó‹KEËþ,$¨_©ì°©©N" -^ë4S¹J{CBÔÇK l¬¿š°ËSëF®r_t$âœT6užUÖSÕ¤AÌKÊÆ–L>ôdCÎéÕC&d()w*êªÃF˜£K‰àhÍVÒÆ˜âÓyŒ3emñ‹óà 6fƒW¤²ˆ˜'Óê sÞ|’|>yÒØÔ¨S¬+ÙŒ6-er%í¶w›ªàÇÌhéUÕ_¥ï”‹Û˜4GítB>v„RoV(_ÿú€A? i’<¯ÏÒl¸¿¨£8Ò)ža@ ðM5 Å+üúÔý€{ÐRt#zÖšßܼÝÚgÓñ˜ÐØ¬Ž³g×Ínn6SYå¿ß^ÕÔóÆãd¬X<íeâÕ>ìwD “mÅÝþ„sBÙ‰Ú§Ç~pÏDÔÄfÞJªë;Õûä™!Õmá&JŠœT‹J=&ÆÍ±ËlåEI‡jezM[Œ;+eC˲£êduù €@$8…6é¤ò@Ê®¸#qåò ~e‹ @¢ievõÎ#â×_÷x0¢%âVa9¸ÔŽ«­KÖeÌò¥´m³¹«³2s–Ÿ©3–~ød—¾Q´Õ<û§¢rkÆu„;Ò½Ê}‰ô$œQ¸ÙsF]7سM÷²R&Or•o(¸žnǸ·]E§ÕæäQÉUF¿@M¡Z*‚Uf ¾‹Ï6[òjYåÕ?Œã£‹GŒ7é¿Üÿ.ŸØ~FÃñ]S"Ú9RÒ1§Ù<¸rGŽ×i3ˆ‘ÈYù³Øƒš¥Ÿ^Þî·™?{|ã˜ ŽŒã˜ ÷Ô¥™×Cò ÉEÝÀ±!„5ya“¤¿Ò,«Ï]Ø ò¦45Î\ÿ+qJÜ\/ãta õ‘ÿ§¼d~÷ªèšëò€É>aH[äÙÓŸ[£¡‹Ä»3ƸËÿ’fÏ¥Ùx¹.U²nÖZ¿“WÎÂú-ÄÔV˜Šô§MX#X”Îâé3D™Kh otÛN©Sv|Gs5_ž6F·mK«øQ‰DÐ&ÜbM”dÂà@Šx|­RFS*•0ëQ|mMœ A·f×Bߢ+Є.Rtî–ÜgÌ bX±¯ˆw& _kc¸Ž0XYJÀoæí‘`‹Çztõ¼þ3aÍW̺wÄÂ[¤ý+e†0áÄ-øÁ«ÿ–Æ #ÏÍýÿq}¨ƒ×ª‹¾éâþ3J€}g)@ÿ¢„ ú?Aÿ“\Û õ/LäœÒÏãZt’"mòÉš,ÚT"T¡,¢“ÈØòq"ȲJ”KXu-ªßòßü¿€õ?ÁC\Ç."«†wï¶X‰“€ïý¹ž¸ßï}Þïww¿€ì!ØÁa$Üõ…0¨$ö 4¨Ï‹‚'Qâ˜É÷E° ©Û+ ÇiþGXλÔdJâECXoÍ›$å’ÅtxZ ‚]›nêô„¦½÷Õ .|ÝÄFw+c}, _›7Ϋ!eÝ™m1}5Š¡p(ï6y+ÊnI·fê–õZÀW“ÓÅ,‚8AfšU´q…¦ÎMÓÃÀ¦xä*Bµ Êx™ÝH¯Ñ…ø=TÑLÒŽ%ªˆƒ%R+›“ÕeRç´%q<ÁΞ÷2|‹â?üµŽ†Õd×5Ó–üu‹Ó 1Ci•ÂÍ¢ªJ‹‚3{ªÚ»¥9×›´¼…”k8&-2ؽîjâÓf6#q³ìAU¼UfÁ¸ˆs®dÕ—ò•  ‡˜Ã‚ÿÃëÚVÄZw©*™&vî;žF±¼îK2øXžZÛÊ5[þ²à´3’—N¥+RPxEÍ•PœØ€o¬8,;UNUXp€QvÓ]B¶ôËà}ÈVÙÙÀ:ª3âðЬù§Å¯³í餌·ƒöðÕ;ì ÑÀ=—Ì|Æ"ò¡eL8÷åJË÷üW(ojóÝ~]Àà¾F÷:š/;à0c0^ýdT|æ83ò¼ù:àËØuÞ–#‹üÙ`Lù°ÓGSǘ+ÝûÏÐë×ø°Vn×úN–ÖjýïZlcËGÍêxÀEæùýÜ:UaFÿÛœ¦‡½àÆEEþ*ûyÖÓ™ô€ä9cô>É£îÍÜÓçªË>Ô¸øæ‘mBlóøûx`øªÿ 1Ïø\j X½²ö/DÝd­Ãë}j¼RÕ?hö ¤HÎ(’»/„Ž„…7g»q#9y§ÌÚa¿‹r‰F8c‘èçP"¿."6Ãìô":ø²Î£~¡JÑE“Ëæ¥:ÑÑ16"ôvF³;wIb­s"þrDb dÏÚCz„š ?óÏ_8<0?çÂt³Ûv ½ä6x4éàžÇ'ŠZ§ÏeÛ™ +~%•]NR¹ZDu6aR‰”R¬eï’x™9ÌÈ÷) Ç ¡¾s,úßÁ=æJX/,piYåê²ZÉHRÕY¾jí²=3s«:£+sÝ ¡Ç ¿\×èvßþä}or}Þ—‚e(¸IÈå8>¶Ò`-_K{Q¡ÉÒp »> †H>Ø·³'iJx?‰â`V}gÝ\ìýI¨äÑQ4HC‰]’«Á¬N/–=ߥeìš”)íŽù Gôvá¹¾•},MµÏqB¦¢l©bSú49¨ aòZ  µ_bÆSõ¶çÍ¿Gøu¶#Gìp|?Tyˆ9æM³ÏºDîã1sÁ "/Á~[ȈU7¨Íkù½ypGîî…Ò8eχW²·e4áç/êšôK|Çò9 ýdºÇÓ•ŸSÜ5æ}Àcn‰÷ˆ2h<æ7n {Z>B£üÙ76û@ û#Q¢KÑIógív £hÁú`¯ÅÊ™®#üÚÄÂ"„kÁi +¤¤w«ó¬¤å*Dæ7ÚgîŒjÃÊÙ ÊÏ[[ìDzt„ljNaŒ-³$W1¸Ež‹Gê{MˆB„+¥3<±£Æ‡£ÌJNl#ð1ÈP¢ñ—è='ËlÜV^þ)³gëÜi¤=×IäÞÃiU¬uâ·¤Hæ’HÏ£$ü ‘+zUpþuÖøvÿcÙ€K.mF1fó F¿hPkBWÅ(?S¿ÀÿyŠÿl­ã™¿4ùûˆï?ÐDÖÄÉÉÀÌä&” [Ø[Øšý×ð’ÿyõ߈ÉV³RÆ5Aó•³…\p,¥^)Fr$ivlEùQNܤ#Ý‘@ç̼¾g:¨ È{hw¦Þû2Œè21å7ó¢þxáÁ) c¢Í#Gqãõô»o–ûÔ'±÷ëõT ¶z|ÙO¤EÃôx&Ú'ùà7åôbîú-ôØ\I‰‰4q)@8ôóРv³FÕ@B° öø:šBd+C¢—|_ªxè\iwQ(ã öJdœ„΋F-OŽœ&#0yöå,S Ó€¹6EŽñŠ9o+uimë…_–!Þ®ú“[¼&8X«ðÛdd"§ƒ9 Æéõ‡’Ë­R·ä÷Ø#žÜå¸Zi› S&.•QzCzª²º|¼R¹40ÛJI…Ì–›ÔÒVaÀ]BõiœùéáUZTæÖlÖ”|av°…î4’âgv¹F·è®üݺå4Ë9ÚE_…šRRæµ´J¢Â™P<[cÚÆÑ]'^AŸì™‡s„>qy ·Ht¸OyT·vVdöÆmPŸ9XÙÑE:“3,lÔ0YçÜ[B>d… {æ®à7û8ù×.g05‡T†0;£þQTa¤?ÍyuÙèqõU‡$^”"èÁ-ŒÓDׇÌO~ÅfªÍ=@à7¬ …#yÕ˜óÿÀË [éö3ô(ʼnÉtò‘y˶}~¤Ïùl(noN^X,NÝ5šv3Úë‘R4PÓ"j˜gdLcƒK³/€„9á1`ÍÑ<5ONf‰`ò>¶gÇM‘ÑÚkѤ·» óo†Ûz®ÆõÌeíþV¢È¯e0W[h÷ÈÔ½–0@]sµ Ï™ãÍ©z–fu¿/°µØõ.ª¨úŸ¿îp·u¿üÀsßG #åòÝÞùü¸úA9ëŠ)½[_<ç (¬QàºÇ˱Ÿ{ÆÛÉ»Áj¦#ø„ð}ü6më¿T{1Þúáß¡(©(Ïož¯ç¬@ØñúYíøcKªŽ8غÑ †¤JZOåÖû#G¾ Ô²€È@D–¸' !ÝÏÝ]n„‰’È.¸U†[^²+µ¥îä.ÿ´^œµxÙ@y’¾½h…$<ÚÁûXÑòb?ûÎüôî*¥gî]{”k‚=?óÚÂôzÿEóyTjÑük™P¿K,.¥ÜóD­%n¥éW0¡Xë—D¤äõÌþ²mRâè»,—ľ6~¯ê­^è§Û;8×CÒ­ýÏ´Ž1þ½“'8CTþ²7Äæ¤-eNÁ$Æ®ý3'ÿ›‰ÃêŸ^ÊfØ=ò™'E¥¡JgPp…™lÓHÍÙTW}.lT+õûžT‹EÒrySçYN‹íùc'J1ótœ†ü WŤWöVs—òÔ/è —×» ÅwŸY‹€+üýàý ÇîCΩÇõ黇ÓݲY.¨=¾oå]ü’=ý“Å¢ôï‘!Òbâh‡»6eMxǃA`xHfb×P¶­İÑm²|I(ËPï6ñ*Bµ;dBŠ#­8•;øÉ»pÏ­ËAJðqo)ï®ÝPH6oœÜ»ý~o ÄrwAK<ŒÐ\ÔØYXY„{ÑAL{•aRaádq¾ª)w™ÁÔÛ¶ÆÊ—ˆÀ“cK²tœmk²)ë©)ÓhEå€T©ôt½É1Óé*›èq•…¼¼–j…€RN~á‚’/㉨ÓÀô”«ÑÚAx¯`6S•i"ÚÍuþèNfQÔʗϰI‡8êù0«‘¸®hÁæùT¾-øF™Eg(MŽÂÞ¦i“¡’½[&rsÔ’¹sfvþÊvc0Îá¡‹ÁÚ¸3–­üeTÔõæ™5þŽÅïë§ Q…Æ7f³MN¸nQÔŠ ú œn™î³R£¨yùi§³²ø™ÐÓ–|æ\Ôgä´±±ß]\òV¤ÐºÕkÒG7iP‡8(­ÅÖ>Ü¿UÔvÐP·™È¢Œ­ÐìêªrÕ‚ 1›U,‡“7jNà15žëPØfH¤Ê;r¥â çë(þY#í…Ž5q22ú ø³‡ÏlCjQß…?ÒÆüód#JҮ件O?<_à)Í×h­H@d90•jdd‘šÕDÜíñÏÌoݳˆŒjÆ Ý¤ŸDüÍhbìJ‡ÑäAhU6™»,ÂUõ£50<ÔÍÃ`WÓ&,KÕ‚6QiØàû-¯[×xãáûHÊ}üxÜðÏ{  ñ)Õ‡óMc¹ˆ#Ë~|ðÄ÷ÈÛ!oÕÑÄ— ÷ðÈQ9ôQ™ƒà˜ÚC\šžòC²%©ÑÖÛ¤Þ:íáV™ý¦2¾êCÞ—š˜bùb§*ÊÔ¦²äV*¦t7^îªCì,SD694ºä¯ë¤¯kçè|Ââa§+žqÑɤ»j}w•–æÖ»œe ~™ž¼ÌI¡üïgt6°ÈZ*(¿> Èì<Ó j•»¬'®Ú¼”?ùø‚C±Zçxø‚#òÎ2‡1¹f0ÂÇ-)Çj§ÅíÅ1˜·Ø%(JÃŒÎ(½ wV]e‡œî’ÓåU6E(~ê!ePÈÄ“þçœÈò¥Ó²Æùs%Ó쳪ë$ý ©ê´‡HÚÙ,Þ]ÙR³p9M1)®îqXÞˆ÷F;“ÉS\…˜Ö÷ì]†SܶcŸÊÏæ’¼`÷÷YZ^í鲬Jè¡›¢­‹¬¿>—õ0ñªeÆGl2!8áÿ&vÝ¿~]þ±t‚ ’ZN™6¯Õ²gsL 6O4ã2‹Äè0VsŽr`¶5Å¿õd¦©Á´Â˜kà2êNIÇi~žäö‘ó€ÇQ‹ùôæ”I´Xå¶c£((A¯Îsƒ­^•ŠÀ1aZUwØLcÅ9¶¶ßœ&”—å&jSõG¬¤¸ ^y±–]agÙ²<tæe)#ÿ4H(´Ö„Wmyµ8‡ð€6ïIŠ“EŸI.• ü õÁ’‰nóÿ:Ú„×A¯qÉgUsRjí% µ³;”s »uuvèŽ] ¯ñß”<ßï ZRü!ˇ2SÈÁ¢Š¶¦%° ÎÈQ̯¤1fÐÇëо9Ʊõç€ÂÑ3ß•#QýG÷fÈÆì3O´ð¾pƒ|ߢP“) a‹£_e°ö)Ó¾é£d9ŠFñW±šŠ!˜ÛÒE ìq‘쟑÷·Ã< yõþokÐe†çP!çé ZVTwô²¥;’mp c†äÖUÂÕ\a[ª)æÌtŠåÂ;aÙPÒl#ÐÒ[ŠJéGí±ÊR:ç÷Tàælp.±…ÚÐî"ÀvÀžÀ‘€Ž‹˜B~…Q0‹(È‹™‹38Œ›ðÝYq‚é¹cn¡ï )cíɈ.]©<[x³yá’Ê™v%0Íl–fÿºF ´&c3¤3%ЋE âÀR¹ù5žOSºa·}¨Uh¼”ÊÃn!ºÃßþ>0AŠQÅà;¨WÒSæ“1Ô©fJì7Éy…É·W4„Û¾þÉ{ƒøØ=¶ö{®™Î#j´¢ÖQM„Vûí :UìH×.HPQn-¾M1B^³Gf¯ÒI¶c iøø–;™£3IëÓ™ Ëf‘”m‡8–zìÆl[ÃÏH6áô Nó@c æ§]¤ˆG×|oBfÝá kÛ›ŽD‰žÑ˜dw[¢# T$Xç·l ʵ½•ŽžZ‘ÃŒ”f{N‚ŽñJ—?ÂŽ˜]ŸôÒ•ÉS’ºF¯QÿwNÊ7°È ©ô¹<Ó­YÚKäã&ÄÆ’¬vˆ è¸æð}CDN½Îì#S)~1[çññ ×ë‰û¾Þö¥¹ñ\ï¶ŽrÆ([Š+_ìr¬#wì²GAÆSíÄátÁÆÅ`“ŸlU¡ñ4Œ%ØG2ÿ½]Ôᮦüwžê÷П—Ö%®³_htBŸ÷9,óSçÞÏ&W&Ó"hŒîœ™ëO‡lîÐÓúÓÓ/Ìê˜çd{ˆ¾Oþú(ढQù?Œ½ep˲®-ffff–,ffÈ"X3Ëbffff‹™™™™Ù"KòçµÏ¹÷œåµ÷ï×LwôDL×S••™õVVbx°©³h,.y#øDäE Æ':÷'¶fÿöà›å9rÁ›W¤…_ˆ FeªL¢QA@Äiÿ³xIÑÙÚðŸ íÏðnºƒÎfWW[‹ggMõŒ5V‘µqšÌvu¬õuŒç@ˆd†Æz«—ѯޔ̕.‡Þ8øÔÊ4kTAñ‰X`2°H´´{”Ÿx¾€‹ØøîbJ‹fÎS)“NÄsÉL·>}uV§ß^~m˜Þp<š˜:Îüäh*ÔýQ’iǃ&̹ÅèýíË]Œ¼OÏÕ¯ƒyŸƒœ´·ÔÑn–Mª_CÛio1O­ï´ ¿`vÌžÝ}»|òöR@'†ÛA+{¡å?‰_Y{'jR_˜©~öÔÜâSu«CHßDËEoá•„Ý‚bÂðzTwŸ"À¶‡»7õî#ޝIœQo"D™'„X±Ì}T°»…Ø‚Êi`w UÆ ÆßÈJÃ>+Om¾øÔùb~fxˆ@ùžj…fX§•îø¶§{TñfXF7Ÿ«€ž¡Ÿ:®1áv Âf)Öûˤ"|ÏW\¨ÈïeÆo‘Õ- p;‘%zõ¬taMP—×`/”ƒ³kÒê?PU瀬•ªT¿õ§[‚”v½?W¯ëeæ*ÏׯÌÌ’å6Y]žYžŸZŸ¯.ÏÒ¡l8(<(7²¢* qJÖŸº9˜W «ÈÑ¥J&¬v™“•ü„<Ål¶:?µ8ÿzÊ-‰éd}¾a<‰rbsU´ÚÆP\URTU±¼þðèädÍÕդŔµ”PGÎXöÞ&|Kÿ‰?VVù—2o~Þáw“‡w0CjF\%Ó¤œixXܼ>Á^YØ>'µŽ8^OÂ^Äv ReK%<ï¤4dM²ÿpvʹ§5)ïƒ_ù©ÁyO ³¥™JÈ®þu×ʈϑ‘ªKÉÈ"©pÅzci–í¥s‰’€Ì‘u-*÷ý$’QÚ•9oÁwÂèSr+QÕXÖ¹TÐÑP¾ð¬×{ žÃò&T¿û©.¡úúNz¿³OVš=ž¡ólÚìUfާÆ9£›\—ø»zÅ´J<.6Ùž1Þb5ùù÷o<ƒ`ûsðPˆÚÁZ’–ˆC!Þwp åiˆßQ½ú=…¿~sôí÷J©X±®Á'´ðfˆÊ’V½¾3®ZC%g¸¯ÇªKdP­ š"æôW€Ë_VѧH;•´¼¥Éò¤·¸~ͲpC¬±Üƒ³/ VsSìhÑÁÔᘠëžOY‘-ñnæ ®õ²yQÈÝR¶bÁÀ7lÖ»»4Vÿ€?ül¥¯§©ç ìZ,?YPÏ—BG•ÓÀ\‡À;âúe¼Y&X—eèjS0ñš8|±Ó'K-äˆ2á¬dŠ*÷i²ß2ßàâ@à­§Ñ:C[¡Ÿ{„¶ñÎÆoðê<Í™uºNªŸx‹Ú‡ÓU~ÙŽ^°8¬Ó0‡®zI€0C:UqU[è§·±Ã_“ KgGÈ+<Èð"]Àg¯Ü_b—B<Šøm c<½%x´IM>XB“6z!ääsØ|œô‰Ø,„É΋ö ª ýÚÞ*¸GÛÝ× ÕSºê¯ÁŽiV‹¾úIi øÏ‰›œ¸¿¨–^ù3¬ÄÑ¡?}Ì˳‰ß˜µè kÇÍÆL\úš-ñó?úYf¨–Qè!ïwÉHñ:Qö1|Me3ýA®çGùëœ]ëÌ'¯õæ`(t‘5kT-œ2¾OÕaÈW 1õýkG€œ(|èSv2šwú:ƒ|”Ÿù³D}'aÔµ3„ý±á‚#~º±mÕƒ"1xî•q cıªÉŸq;6˃ p–O„£"'bõÄW‘Ûâ×/…÷=gû:KFÆØ×Í+zË&‰1§nq)I´[­Dä¸O)M$ŒÝù¦6é^Ô¯PŒÜ5ÎUG˺»tfjÍâŽá5 [à§ ÎoWûšfQ–ÐÌŒŠXŸ…†7'ÚTýv™ö!¸Úç'ŽkЇ#Eív­¼'Üî”Ï>×1ed,¸÷ÄKµå÷sŒ×7 |ètús$Ã*/ðœ7iŸ°ê¯°œâJ¿ÔvIï÷·îv|7 zÉw:Õæá¤úeßf÷UÙ{ÛÇÛþ½-@wž\VŒtR¸´†fWÝC‡-6mr|m€YÌfž¦'­4ʳ蒱8˜83¿ÞPejÏ`³Éýæfi»…–§o݃¡]Ãýmãµ Q.¯-§O4ÐÄžŽ½TÚ…ñÚ@ì­6 †\ðtgš\ðp‡™Ìg ·¦è`oÛ¢¢oÙÜQC.©z–¨ù™ë[ç qÓsŒÖ›ãTD ÜŠ¹mýQ÷ª9¸î“²Îè`4i÷äŒPL­Ê¬ÂCL(Ÿ„Cyý 6QLD I pZí&0©dÇdÏ(Ÿí–ö ÚÕq#Õþð´ÄÀ€"¥¼È ÞáHç_©æ|c¡D~!_¿ƒu„ÒÕßò®þBdèÍ<Ëh±óÞ¦Â÷¯¸µ®ßt­E½ÎEÜÄä °¡ŒŽ™gHÃÉéÉñ…à³+iÊüÚ:ïƒæ° ¿aóíç¢ úíU=T µõèÚîg¶~Œ_Òwß!/ó‰Úž…zÓš€à~HÁS8ñQp2 M’èüPÔ¢›ðá9,”òe]_7¢QðúL˜¤Rv_†|»èzß…)°@±Lì®aÌPnâ:M’§6ðÛ#ðUqáÏf ñ ¾^xO­ ·‡à§NBDµP¶Í¾l(Ä9hÎp ¬s[æ.ä$¼(˜k¡pQóS0s˜qBij±ôùÝRfâ/¡'(¤¼üðùäXùÓ-dpäm£˜³f›¨8*@Á|>˜Ù¬À“jmÂ&”÷&z2FâÙ=T“hi#q‰—P"*qñ˜ ÿ“,2lí—ýZÌœâ lÁè;û‰}éøÙÈ¡¼ð}˜pt¤JL®%£çŽõ]æ)ä)0Gô ¼à·Àe@|NЖçöFƒ²Œ`ì̲¨CBRÐǦ´öïz~ü{H… È0ï?d?ÁÇf0’ l§;ŽzZ$ÊÎ?-* WñEõ¡§n ECRK$Hq¸Ÿ+Í7Kž+ÏJç7L[ŽV(tÙpG+'ÇaÛ®KI“íÞ\lˆÜßÿ0´µ \„SÆ*ÐÒö{áÑÔÆ3ù¤A ä o2×<›)X0jŸóM “õçÄ ²UN­uŽYËúº¬h;Ǿ0ÑÓ^ŘC˘§¶ª]rCµàþ #uöì¿-óò`Á µ½¿BXv›%¤W˜ÝC´†‰äIîìî• W$(×okžXnÚ¨ v«CªVÔYgA*'Á®7I’Uœo«l¹¿àõË"üVXs©¿ÄJ8®õ>ÑT7×J4aΔ¾ñgxè|h„}’Ágã|ú¼iÃû†kjdü7Ybÿ1 —/As1‹cŠ4í3UCú&Èhcúº5ý—c‹-:a{"& 1t¬üUÃc¹ÀÙZ Òõ|ôÇNN?[5ÄD„N«ñ˜øë–®¶÷i*“•¦Ÿá÷E úŽ$ŽÃÄ † '롊õ˜ëµnöKFeÜ ¥”%ô– ~Í;륚D#…X+·‰“§y»:v×Ñ Z‹­pQwx÷ö(-ö¾3XðÛ'ãí_ÄOêÒÍ+Â@€€0ÿ?Ïjæ¶ÿYñ<Á",§s)!Û cAkÝTfž!Š_$c¦ì¾aÖ%îvì|f<Ö‚˜¾4/Ýg¨˜‰Õ¼EØbGKÃô‹_;xü¤7Œ»ËcäÔó5ÏsgMçh‚€[Ôp:Aɰ„×Àg—2¨®´àz‹ŠZݶa!š·¸/¤¬Ý R ¹;q€žÔzk \¿Ý±4Áâùgçà<óå‰Ëb½Ûò=Fiµ¦Éj¶H)ƒ-Ó½ÇÒâÔ¨`}Ö²ÏÃÞòȨ‹ñú\–ƒ¿ŠkÛ]:DŸóp3÷¡Ö¤êœ´†¯g——-“óî=Ì·á¤wf÷Ý爛 ¶¼»¦+VTñt×DïÕsÍ sŽÏ­xÊÞXˆÑ° x~#˜¡änW¸E™2WC^7xŽví4H@ì+Fa[PŠœ¡R¹ödä°âõÚ£¥˜2p†!Ü„:ýÌÏo œ¼C»ŠÊ„H„¤¶Ù0\QV"„¤B­‡sÈRóH1Þ´SÛal·t3¿©" 4²Ì•`Š©Í·+7ý%z¦÷T(aï%D¸@͵€ §èÒ~øN2…Æ2CNRZù%tÍÂdïëÌù]õ-ü¼Vš³ÇŠ•ˆYöˆBt7»t\ñ’c¸Öpd®Y“š¸`»¨«ãSû&ÊžˆdV&°@rêïûßHîО¯C­æYž1ÄÚq®BYÐÎBgv§µsÖ ~Cs­Ã†CðSý«Î]Ø%7O-íòöìÇÓÁ øî› K&¹| í°µ~+Rnˆfu?½TÇD%Ùûò¯ÿGÑ~ä?¬‰‰Õõú§U¥ÿ*• þOÓóûa  •3ð¯JQ”Œ ŠÓù먤 é5¹Æ¥ò¦ÅÏÌ¥ÏÊ8â·¨ð0q²ÛâKNÖäd­ Œ9p‚Ïào*{òxâ_Ãa3Ó¦^L¹_Þ<~Ô†,"ÌÑÔ1Ô'j's0Xj¡Jg4ŸæÀPÐé ú¤ÍÀæ9ç5–EŽUZ]ïfó©_Ò¤+Hõ–gû ·¹ü&×.Ʋ?(OÇæ˜Ûæà my%¦•™7`1èó”¾nÎwY®U‘g—9'jðĈä>ð¹,»diQ©#ða‚-¦†‘ÓÚÐ[‚Û8^Œ‹RÉ/⽎ÏÕƒÔÙá÷>%k'û÷ ý2Ë}[w}½G;—žeÞ£‡í%—¦6oRRWVPÿ‰b»I*–žGû‚’°`MU®À¡>0¶mkÛ^aÙMd3#úì„Ãl(Q(–DQks´öŽ1b’-a¢9vö,‰9`¹ÈE&µ²þòÓÏbv¨ÅˆÁ¶ §ø¸®'ØöÍ:JdAõÀñÁÕYBþ„):âˆ'¯ˆœ뀹‰GA(º|'¨›ý†ÃXÎ…gÂÐ6 7yJ“¤=Ô§—q˜µFæÜÛfš)Y_tÎÈø>5›fO¥M¦1dòLƒRþ‹hä¬Ò—‘}$Na´ûèò{i`Â7Ô<¡5Œ,þ‹“ÿãçÕ­ˆ Y´DµèÔ@«xÛ22è°!Ñ>êð]¤ï0=7P@*û€YIhžá81ªù¼Ù÷¸±gn³;»þñÒÛ¶xÚ:¦Ýí¨¸ó‰1¤¸ÏPØoŒ¸àÿ,áö1*Ú:IÚ:ÛÿYÂ-NN©O#hz¤ œFd[RGÜhß(¤'hÂ)ÏÞHÁ$0}-]0¶û0| H¨‡Ø¤ã;Ç Eóh«ëšcß¼Oç7ž8†z†:††Js­ÅZªX~Vëyfø8>W°[Ç’2¶ßãQ³×Q¬õ{=p6¡õ÷xL¬Ñ¡ƒ!Ø )ºTŸ*·â^ù×»S )£œùƒNeæj¶Âšt s³4Ó4“Q8«_×0Vˆ8ô„ñÛ冀aï\]{(üÑNþRÈEñ:è[ÉIÕBÚòÒ´V½6Û|^‰$ÐyÔ\yÅGªˆvHD4EZG,´;oMñ¦€4;ž,7z®‘rôsK¤{Tzü:&Ôü™ðvOhà† ß{Y>‚kˆÐÈ]®•%k ¿ëZBÞ#Ž¿‘ÿFÊôol±ƒ­ÝoÎý?B]•íWF þe”b¾Ø¦q®±P±Þ{¨¨"®ƒrÆØ‰Ê¬8oU(3ºw§¥ÙqêEcO…HÖ‰þl65*´=1ú_F6BNÆX;Y+Y[ƒ£ò«º4QZó)1üÀ޳ßó_FV ó7T‘ö¼t+­Fv{‹Å"Ë;޵ȟÈÅÔÊ¥ücÔ/ùÛrbîmõøË§4Ëß:ÞêÑW&ç"òx»NWBÀÒ¼N–-¾?”_§»œÇòYZº×c6¿¡Œ|0U´L±Ç hP!àºRpOro¡œàäÔ³z8«÷‡ÁDÆ!ç£ÞÕ¼ÿŠ>Ã2ošLÃùõ4 cõ¨-§4Gñí'+¶ßge#Ö)Rã'ä xü­ä(Ìo¬á=DiÈ,Š«âÓâöñdàs¨;©™ Xáz‘芥G º¨~ ´ò!“§Zu>K”uÕ!µ¦¬ØuGäK†`ŸóZ6%:ˆ]ä$\I­:Íþ2¸_2Y“¥Æᵌû¹ÿŽ•=íkyÜo¬¿±Rþg¬ª&޶V.ÿÇ[OŠWü=DƒõŠÖåï¼3í‰ÎEÙ,|Ù ¡¢‚@@ú fû*c-£ÊŸLŽ-è‹lÂ_%KFàb¿öòú‹ý˜Íö𹩶ˆpNÇ0ÆE+)¶~5C0zÙ„ PuúìOªÇe­r*Ȥs¬1"¿ÊÚ²¸S[Ù»·A$V½q$ðQºí æÖVû@¿| ³|½x¬%°‹…ïÚgkW!W½ïUºÌh³}ºhªƒãC*ëR*B/€—¿Ÿ}Y¶ˆ3Z‰»p¡å¤î£þ&+ÑDÃ̴̧(_CåVñUÇÛ=m±ß¿‘â5Oýü Óîáš‹ñÊ}!èRåýëwL»Ì9„+ïáãVøÓÏOü8.àg~’¿?˜Ë€Þ—„œéZNcºæŠü©÷_vž \ªy>‚æ›tÀËâÅ"¯Ün" -TägdK¸ \½®q/ •i©DÝB)J|#ñrYäÙƒ,AN#l¨\Q¸°QµŸ&äVD eú’¿±…Ó1+´àËßÿØvúºñÒú›)ø?ùÍTÕÄÔÄÁÄÆÈDÍÝÆ èö‘:.ÛÿÛ:‹‚[‹*Í…(k:(û2Œ^x˜öh~ôD/Ðnpz ,/bõÑè¤qtgƒŽ1S9Ž—ÃBOÈ u`^0µ²4^jŸW¯Ãæ4²vRæµÐŽ¾ÊŽ<šˆ™–äDZÔkÉ‘Ç-Hol@{{V#›\H«Å©ùÑã8òäûÚ¤×îBæêæ&Áûjkd^´»’eÍõFýåc»_èKÃf&oZìIÉÇñe©ã+T­Á¼nÂL&…ÏÙ‡ÕõvòÙº Ccœç(­‡7mE{üÛ}nM¨)²˜…aÒeiPEíJSsí+ &ËõoÕç^2Ä«ºt±tlè ›öå—IkáN÷ S‰ Y„Úàú†F‚Æ0·Ql¶ÑeÉ s´×âÓ.‰ŠšÓ›ùs_Ïož™•@ìo0¨¯Ö]suÝ`^)¾ «éšyBÈÀ<¦¸Ç5ðw ÝkáôcÕq3î/ªE–,»Ís7ÌsïÏN†&œ“RëOÃ>}w÷ybZ6ø;elDaQªß”@ÿ­1Ö:X ­LþnŒƒ”{ÁXQ¼ƒ‚ÔÅE0j ”¾äG™Ebº‘¤‡îê…Rž3bõÙº³Ýî@?« ’I¶®ôËog<™¿?{yBÛù Ý•ñÀØÓ(wpÔÙk‚½˜ZÒ 8ųÂ^©Š×_îC/ð$&^Ã4f•µ÷o¹q[¨à8^Õš”å^J9ŠâÉZ“7ÕÒÅáë­¯Ì5ŸœevŠ_†‹VfçF³¥²0ÍÍàpËÜÈ §ÒÝælÞó¯$Õæ¢3RÚäØÍâyUÌø¥4Ô¦Ÿ?ý˜´žò†ÆÒ›Ÿˆ×ˆ2 !øuàwvdç—€¨æš—ßz×þƀɻ/ôD ½kfÏÀŸ yÜwJ? §ô ‹ýA‡`œ´Y Ì/+rÕ„i§c8Zö¨ÂpûéØ,Ñþlh›?Ï‚*ûÖ9ÿ†ý{ø±üÛçE mœ~Ï–¿ï8þ„ÿ0ª¶r}ÊC9çÝIÚÉei” |sñút¢¢$*´]ÝÕEð›†GËgI3‚ÂÄt¼fH¨jæÇ™ž×Ž>ÇÙ—?ïá…!ƒx y Gë03ix0CåÇÎÀv÷$4I,…ðÁF“-pŸöU¦íxë¹ ³ãK‡µô„ ˽¦ø©Õ­?è¨Ê;¥7í8 µ²]æ¯{ë,†9«|ŒÊñm³-tÔýägŸ,Å,~45ÏØ'yÒ“ßum_Ĉ|×]Âåyä3è«‰Ž¹ŒNòáPÒlÐlÕoG¼H\¿-õ“£Çǵ®é–P¶ˆ4¦˜Cþ\™¥¨ÑOð#ùFÁò|Ñr©eÜÊõ¾xÓjë{ÇÛªH‘%v=g°Ý`×B:ð¶ Ã4‹¯D²S$û¶Ü/*}Æý1 x-Û‚a°ó¦á?^Lme©´lû¦aêCúAÈðxñ¹}ÆwÓèü8}‚)†cýønˆ¢ìŸß„y5«x|*†–å¿ì†ÜA—X!!#ðl€ÊT}ÖÀ‘·y¾`ZÖ`½e¹äÁó`u«Åw(ÍšÛb3Þæ%Ëß¼+Ã0à^¡'uEÑuZ2ŸÒww…ðª^ ˆZx»Óâ =@wÛ«é¶EK»(ÓæÓ£ã€ˆíNfK£EêHË6›C3Ê„DPÔ—”Ì«@>Ï ¦cZU=ß'ðú>¼öZ¼‹ä55³€'fú!ªý U²”—$¶†¤õŒõ5Îô2¿Òý¥&ô]ôM,ƒ•ô§EÖD ü:Sˆ›ÀÀð}ê%t÷ Øðú޽|àŽl)í Ü5ë aØ$8Ð}‘ y¨Ê˜"ÜàÚ©L®i±¨ÐÚ0C¦°<Ù\’ ›ÂYX/V!û¬ƒö£ÚrÜXۨſâN(€¶õG£øÔäß»­ïÃè™×ï«LãØüO·ýû¨åûa»,%¥èÅååâ…$ U½ó6—ø>‘ „"ý>p°`˜3±¿Ð±@ÖY9P/. 厢ž—?§Ä(7I?+¥24B¢š—“šR}“˜”®Û7B‚„EÇ8:1ë iáGkjdüÅø ˜¡)ÊïOÐxy„Ê?ªr U›:È<"׿ýûÿ•Ñ’p³søkþ·µùwV(Iãå_…8ŠØ/rñM¤rŠOÑ„!LÐ+AíETáhiŠO•¡æä³ÒÕQ!10í¹ wÃä4´ÃDAÛ<ÃÄBwÏi£s\´nŠlãžÛïWÞO>ŽÛ?n }€Õb-cŒ„¾p¶™(+‡‡ú`¤ˆ±åÃ%h!1yȾLkì|"P¿á7<g`ÚŠÐÔ¡ ÄÈüjá’ åí§ÔJX¬/¨§8ÔÙƒUÊ”N³·.a|74µn‚[¦Õ*ȇ|fJ®ÕMÏ´B°gˆãÖ”ñ4ÐMí:û¨©‘kÞBM©•—ì)t壊àÚV´øºën™¶f ëÜŠ—ÎkÕÇS ú‡dÎŽKKl¿¿Òm C³ýµ.ÇTöŒ“bì•¿§æEµïˆ™2¸ƒý<aT7èЯœ’¶>LËÇý£)ÜÖNbè;]ºøö~yàЬ¸ÅÓˆîão"©A7äÞL€uH‰nLFs?BáŠýIØîÐ7V.NW‰äð*àä/k:´dÌŸN±‡ I<Æ*6ä³BQű¯´7 “6riTÖë ÞlŠÀjAéy‹ŒK– Ñ¥¯_íE·&ýD}ÁœižíS"”7?8˜g´ Å&ékÇYü`%QaŸŸB´÷Dùâzf¼|êÂsªm¤\ûµhdÉ<п’™ÖÕ,*À-âæ”ÓŠYuqœ†#Æ{NQÀkÊq”¡¯NÑ &×Q/•2 ÁV«s‘g‚_j¯åŸ×IÅ·uæ\Æž§Ô¸I×+šcov ¹{¤býÌIáúƒPhŠÞ˜W(dü©¥Ú—W k}ä`òš‹ÓÆÙït*¨âCÏÚ7÷ ¨²(Ü8ÜgSñoÓþÈî=3r¢9û ÿÔmÛ<óY~èäPÂÞÖÚ[}$+ŒŽêÃu¬h¹ú^{i‘S*Ùj¾çŽ)*øZLA«=Zz¢ÝŒ³ü:¢˜;¦T.7yO õ>OõdÚްêdñ5"½Ô‡v‚±Öê4)Úlñþr 9Ñ>Áh»®îñç¦Ä!„lÁþÍfWPýÔÇ›^ï¶ÊÜÞOt‡ÆFÚxÉ—^V]tvÙeDÀ–oúPå8ŽKŽ¥ÙOÂ/ãzd…tQg¬4ŒWjgèº âù&  Å*R}ŸÐKc–žY¢[3¼8*-³{:NÀ¶yŽJê¾ ,2º_ßšù1GIX0P5»€Éå;=(ßó$GçÑݯõ-¯/·J'©[‹nP\Ó}ßåUÙJ‡DˆJQHèÆÂÙŽCêp¥X"y¦î¼|ˆð˜vq¸§@uAß±3„pœâÛ3Â*LÃ‰ÍæäFb㌕çÚÅnôͳJ0š7ÍŽ #Œ¶ÐÙNcöÌ:ÑžæF³Xâ Q7Ý EŽ]YF`5m§Ø«o錭Û*rt5_“5 ÑL¶¢\bûh¾úOºÖFvÏ9»ÖzŇc„a`;¯åéá[Xò¾m„V⻳ 9&9àÃ1ïŸVÛãO)¹©¯ìã›=ĵ½Ç¸Bfj .#ÕËìHzm }y±nŒ/ øY¿½  Xª.Õs‡¯ð;tÖcÊüÑ!¸Ï³ú§ü‚F¼¨èôw€ÓÂ÷ÿk¢úWæHÌhcfò÷Ù*KCOm]Càœ2jß×B6#6E;¶¥ˆ²‘“T†0y=vÅ>¤‘¹ÏJdAOø¡bð:3‘8cQ¬°Å6O¼xº™DfµO%oz#ûÛ»m=ÞòtúõñÂí;=«œ÷ŦàY¶w™nO p‹g¨¥j§7“Œ¹¡l§6ˆb¶«ƒIgCO; 銱¡nCÚ9þnmÖÐØ}ì0Ý@¬ï0r™xç·=¤÷΀ ŽW´_jo<â® /Ä›è|°‰éNsâ I˜%°G&2fh®·ãoTeà3~MÌ*^ýšZMy´kØ·ÝÌ<Èrcšàé¾EzcÔ‹oZ1±^Ü98ž|ì˜Ñ>pœùÕæ¯d:í ³pî`ÖR‰ ³b¢‚?§gÁÛ<ýD»!À´ëà#1Þx‚p«qÕ¿‚Ú ú2B1&ÜìYÓ¸}à飼íTÙÿ ÓÂVŠŠ€é4ÂÎ×q”!8ØVÜᮘ~ ‘j°¹²«àWªBè=ìÐà–¹Ï’*Ã,<‚.ZOŠiAôÔ˜4“3¬’!¥a2•h6iÑ®Ðeû~B­<ªŽ èá©"즑c-ºT4i‰oE•ìtCÓX–æÊžW1-¶DY¢¹Ï—‚÷_-ý=éÙ–nPb8”±/ˆØ3_|”ý¦>jz8Y{koôCBvçtœ]ó¾_¶{F3Z1\ñV)Ù0Y(?}o1°jgzÙjAuIÀã©:Vt¨æ¸‹BB%Ì©¸¶+bhßoôŽíõ}EtÉîÒ>©éby|W˜t- 1v”-4j¨O=©+µmŸR³ïŒ‹Ë#v%4O·ÜÛœ„3ÙAˆbÍSo»7Ê~ôZ¼…šÊ5N”á…|â¾HkÌ*¼åðÆô…¤`Qúþ L°8 Kk=³ D˜—˜¬jL«G:Ðxâ±ÇFaç·ŸŒ›†¸!*}K3Ï ª–(+ïOLBÙ ßPÃúvûCŒBÿÃÏØäꓪú¾ë@5Ň=QN•ÀpÙµO¯Ö!ä‚óaqŽK(²¾ ¹0"ûˆÊï B'èì3è% ®˜`¨Nòœ³Þ<æÄR+…¢[<þ±¡%TiÔ3“Ž?J@ af§]¬ªJ#L q†×I}R6g‹å,²™K¯]ó÷¾ü^*O«½KÜ&[ Ñ’É,ë©)ÖˆW‡âÇy¤¿Ëñ>xl,,¹+´@Sg–€…À¸pbÚº{QQÆ}CóqÇE‘F›}¨ñæwmÄEXc˜E•1iî@N}d…b–“,èòóÕFzàçŽ×þ8§”¾¼û;¸îÿO¦²9ÐÑä˜QªzJè"ó6íNíZ ½1`k}bíÊTüF‘ჩVµ°Å³Ã§l=±&):ª¿‚»ÅÑaa©^ƒÃ„ÆÜÌšs9`Œøž²?=m°7ÜŸ?º‚Th9})Ð&jàXMuý²[EÍE‡à‚"F@ þÍ€ tÕïâ–t‚Û©)ËR\h]àÅ4#Ï+Œ)Æ8ñF£M¦ãM ³ì7 t“Á3j®¨JùrdÇEö*ÇÌòW@‘­\p| YëªÐÉÈß,,lÚþp õ¬z‘¿F}‰Âý¯ŒµZÂ<;Öè<‡d¼nú„o1ƒµZÛGŠ„_­² Î7¤§Oyuì»ñG‹¬“>ðôg˜tz‘y;}"qHe*Dáæ)¶ýµ˜ôxkÖH`î©¥í@Þ%5(š¤xgÖH¹ Kªãzc–túú` …¯à¾,2yz¨ÉÓ†³ 5C¡½ÕK²½]ÚM_!ÖEÌSç…¡˜½,µøaà8þpÇSP†5olùò²™ìÖ%¡ŸèçÆ–ÑVpØúŸj¬å¶·(½€ò¸±¼¤l÷v«-ý ¬õzGoyàlQÊUÕ¥[lϬã"A†Œ–zˆwC²õ§eʇ ©®C- n ¦9zgJ†uù%.͉1ÿ:U4[&œ¢J•ºç }³Í|?ÀºW¬`‘Œg^G« `"ÈA-ga,XÛ®: µÊËÄl³’_‰v™±·Û4›m }Ïm–XA>ªi/M‡¦5¥£-Ü€y™ò¾x0¡üʧڮ8\›ÐÄ­ÞÑ»‡Æ„ž¦ßÀÍ ³šq†JÇß.Õ.Ê×>%‡×¨ULvKC÷Õð‚a¦…TQ‡ZÂa±P±еäR·‚‚±*juQÐl.þn:AˆM晚µZ tz!$áû؇,¬ ™ª»€êk‡Š¯˜+¦VÖi.*}âôpY~*{æ4®½Š›~jLRô˜ûÀ$ê2¶*J]8ÆN»gÉǧ,²:‡2q¬w•ËôNm¦ÏþkR”Èœ%9eRB[‚¯%Z$#âù?'(ç|L±O' @ùg^Ö ”çuD7î]t&Ÿ"ÐkRþ½½kŽï@¥¶çvÄg]5¦}pAñ ìî5ßÁý½þ91y®9Á;43Ú;Þ¬äÝ"v¼­Œê}Ý©öŽÇéX¹éĘ72:ùúœz‘÷N§³!F^%µ’ŠgñgqBq Íf›PwŠ–c—U)çÀœ>öj¯ÂðîìDÛ’uåêýB]hŽ ŒC›Ýf&²)'J¦e]SíD•° 6´oö›` ¶ªùV×Ó<ÓH3Ï(6ÄpÐæÛBvö×#íÐÎÈ„1JxÎ}bsþþˆµ«3vsÖ¥;Hh6ýß,¬ßžFÄà™±/6¤–™Àú®°\”Wú®0]rj \ˆ‘a=µVÈûˆGºçGÕ¤„§ÝÏaÎ>vzTWEûP/³–'òÿÐõÍUñÆÆ>k±óÕDº9cbD…ßó ;èAšüI¸yí1Fv!4ÛÿKÔÕK–›wÀû-èúÙd"›âÏò‡§I' ó¿¯øÿÝ"Ûÿ°?2ȱ"–}Â(AÛâUŨyÔ´irØÓÙ:(½?©/Æâ{L“ærŽz‰gˆÕÛ´1”ØXîSŸqŽž® X…wdr©of¨ÔwWª»“ßG k¢Ït°èŽ?ßÅÉQ<ÍŽh·‘Ràb'ÂÏnÖÁ;tQFRŸ øte½Ü´ñ®d 5ݰ\`·¹èÖ{Ûòô¾á‘#¤r”oŒš4o ê÷í4ÆíNè¸aèrêTE~¨¤í¦ ‡z5Í<[4Á"‡‚ šæï~«½FÿcÞ¿zðñ%Y…ø7êɵÊÿŠþ–^þ/ù]½>)­ò˜Ôkï *$©Ÿ¥r"\Ù¼Ã\‘ýáZÜ%Å€ÐL/hoqPê&O1…–öîô”çý£ûûþqJ ÈUn±Èà°»ÒäðpB8 @e¹–Q*|Ç{ó>"Xû á¸ã¸e»ãH»}À£÷Ûêô¶£7w×ôM!Ÿ6s&SL¥Ý²×ÕðRÃð#­|‚‚æWk¨A¤Ç0¯®Ó×Nž³››²ùÛÂÌÜs7kj§AOUÀ^6>kå©/ò ]ÙܪÀ6$štke¦({€OÏþåBœj×8ú사5mûl€Â+Ç‘wxë´ØœV©ƒÜÁ~¶¤u £ªø¡8È‹xB)Úû6Áö:,0Ŷµoè®Pû;d(á9Ô‘2Kn^Oí£RÊ𗲉–àK ûÄ×úNŸô JE5y+.? Q2ºÚrþ’dÐD’O ‚€Óç4 ¶#ál¨*³kiç ½|í_¦õ1#¡”–[«Œc[rÚ³b™=b†æ¨ËŽý’°1v¸‰àG¡°ÇvD±Ú¨ØæÑ#Á‘á êr4Ôx áùôf>ÂGz¼LÌíñk8œ ð콫2v¶TÏdL”;íAåºï|‰ßÑw”ý±%Oóœ6$>ÝÃ%£áé¬!œü°Už˜1¹YçT°é,~>ÂÉËF;£ÝUk}„ÿ{£t±ú}%úÏó5ÿÑÅþS*XЊÉÊÆŠH*Ï?ÿí`ao¯v sp9Ðñ„rFÌ©¨€{oÏÍôùªýU?L0N3ַɇ<ÅRÂ᫈Œ©>+8s,q¦ÁçÄ̳ä4pI0™%S{™¯ú_ãˆF¾HB©wõc°³Áø.œƒ@þxO¨WMÃÁ=`mjó[QøœJGp! F¢?9!ÒžççšæGÚ?Ò7ÒÓ×wPêÎ œNúÉ׊ Jä?¯AcýÑV¦&FîFV&,bu½}¨ÿn>M°Ú®ÿùüÿùöß•¿•(Xp‹áwwaÐbù°nµ¬·Á·¢ ¥aÁ%&¸_d,ÚQÞ´³åùÿ’7múx6ݽٷ'.–Ÿ†©}åøFöz†ò¢Èƒßš Û€#\ézP„ay'£¾WÅ DJÇ–JƒðOíüñCú¼Œœñ¬b›ø÷¸9íàL4.ÞŸHné¼: ª•÷Þ?úC‡FµT„Qû-È“¤Øá3úåå¸&e䓊ùä¨CY”94m†µ.ƒâŒy¾;Š0Ë‹X )ÅË.F!ºß»3 ˆqæËð|Ë:&‡{•´'ê· (%ŸärѸ×OíƒÔaͬ\ÒiD¾ò¶•e]ø ¢¼¯’¬?9Aæ F6åyÈXN® œgsý@z,NB¸ „ié ö‡áÚÁêO~Äi"$¤=K-2‘ñ+¥ˆ;C«Ë–s†ùh# ´:4ÌÚ¼’>MGD¼€Ý_9 ù/ͧ]œÉ5æL”}«ÃŸˆFàPæ°ªÓ}EQä>T˜eƒ°€=Û+ØKæâ)å©’iQMôjfÐM„Ì(êÔºä}õe jÙÆ'ÿ÷B;Óÿ8d`gVLJþ óŸûÏÿü^ØÙÙÈKÌÈÕHþÿúÅjvŠ:fØ=¹=øë¹) ´HFQÃÕWFUhxYfYV Ì(©v#žTž©¢ÑvAo[Ci/[e„rLhéÂøßZC_¥_3_Ð>ÏŸ²]lá9Ú„rÓÞ½®/:n.zò~Ilí€Ýâ1ë)E-ûˉ4Çì´k€‡çMÁ¬ÄT\äœG·Á.Ä¡ °|Àb31á¬`eH,ˆïú²^ú9w“Ôž²R:~Á¬6¿É±”pOëc‹˜¨À18…,¯F_õ¾,)Ø <+Pè¡-ƒ“ó¸$v¿HÀn~Gìl9YŸíh›ýmÂ!“<(]þ»ôÖ¢‹5»$mJhÌ©ÙgÁfbÿ<¦4€Y6 ^6C|« OUÂYˆÏ&ÙŠîp²%¶ˆ—ŠÁ/Å!3ó4ÉC ”}â5 ¡„QÿDÿ¶²£J¨·”Ú–(WkÄIñðÔ:„ÌŒRÃtèÏDÑ6/·=Œ%äq6aLwz&I Aøc­œ—Çiž½KR¬´,¨ê¼s¹×)M°ä¨M7fHð’âhÖ¤˸Ë¢üÊ,ų¢JoÙÐjò-è'Ó—ªåœÜâ"ãÔG|×èÕºBÓÔ†æHç>î¥*ª‚™1j u‡ð¬N›X¿Íð;Rƒ™½ýð]äN¨Yìf@2íÜ|ÀÞµåù=€1XÔ/ÁÕE™ôKtœšors@1(<€.¼Û8ˆ 𨴛‹àðÚkò$‚ƒ¸§þÆÍÁ J¡ï/}ŸH»Ô¦àê” ®*Ë=We7Pèµ¼·ä͹[)Ü<0zÇ7ª!-#a7æ>:–L  z7h‰ƒ÷ßB¬Õé„þâøØVcèÊ+WXhiFèuXêÔ6³±ëÃýè83Í¢pó”ÐCÝZ"ë NLª÷2CEúa±UÛ/±{¤Iq f”v¾›Yéhk„uÍÎy™O¹Ü„! üšl“eéMuÅö§Y/¨WøÞ+‘„Ðâ2@ÃgìÚ`ƒü}Øð0yÊÃØÎH±Ýû™©Iež€·è Äúe—D˜ö;S†¹SûGú¨¢mBÞZrïm—LðÎê·ÞÆš€Åî*OöJ®<¯…¸—ÐXö—¿uÇÚOQæ †úςςæ?£óe¸?%è-M6Â5`$DX²ÊQQÁÁ–aìG¨D߃订dSõ:Å™þ |AF‰î Ø| â0" àÌ^Ö@Â' ¸Îd°º¿÷¸˜—Þø ú!íÒÙ¿*Ç̈ ïFûæ«¥¾ž"üÄM{™0»~‚9=úˆjÿþâ¨ÖǪ ¬X;z¼r%ááecù&;E±€V¿·Š-:)g,¬ªNâQTd+ù”\%E&‹³¯/ÂL¯•KYz’óR&¶ ³´Þ9™é'U5³ºšÑ?CÌK–¢?Òd?1†iSº>›Bò©ò-ï½8(ЏSHÈaù©Ë“óoÛqµ=0H4|°qŒ 0\äz±ôRÑ—ÆI«6‚¼Ö <{s—éx1-ny™s§•0­Ý\Ë9:ñIºmYX+ßïᦧºY¨fÌ ¬&“‰ééÇ©OÊ~f`P!_ fZ¤J—/öÈ0‡Šp«%çíª°jMs»wdŸ^Ggá5³¯L~·‹~kðq3pøîæsI¸òKâ;ª'ZpF÷žˆy\$•8`0rk¡TÍMUƒM–ØVÚkü»kl¾ës‡8¢¨ö‘%XMôéh`D! Š(¸¨ Ò¡8Â>0"‹5Ž˜)šx*;fKýú|ÿK¯€âOé°ëMW‰sÞ#|ª½Ë‰Y.·á (ó›n6‹J‹ñfZ•šx7Ì𣻧ÒtØJ¨Ã;Æ·ñÒõMñû(æ†?·šéüA[Ó%ØZJˆÝ«Bˆ^h£ÊðžåŒevü8¶>¨±-vÎ'Ó–õWÔœ"´G¬¡óǸN1ŽH`cYÛ¡Ïâ/Ì|¼0ÀÖŰ‚!R;o|éëf±`8(+C¶áª=ä7°!Ó-ÜkF6>¥N@GÀ:ŠÓ¥Þ“dç4ï[ß ³•ó<6 ¡¦ÅBBõâ¹®‘¤T:8ÀÔÆ@PáêmX²?y¶CÑ#ï°|A^Ñá A3> ¿F›ð3úãÊ­{åö(¡ ñeÙ®/¿OPt—ëý÷[ð>f)úÿs àÿ·ÿ_¡÷á°ï BßøÑ6˜™¡&ªüiÁЭ‚øí’€¦Àí£X%ÑšâQsýØ%³$'PÊ{WV³XQWƒk`ãuqŸÉ8¨ÿúð󆪋‡æ p3– ³ Œ‰ÕÂuá@›ªˆ€42¼a #Œ:úÒï‰Oi“ª .£q€Q%1] ¦Šà„1xèxÄÀð:2X®`ylÕ450^°É`þ±v¨#²£ÿmå[H )è]¬W~Ó鄽t&ˆòŠ%Q}Õ¡â®#f›v5 |œæJnÖ¬£ÈÝ0/5±.E64 A")™AVåH(ÓûÁR~¨“¨tuC%_®ŠN(“bŠt“-+¯§—»÷odgX†·Ø>{èý¿óV+…¿D­ÌºÊŽõCü{¾Q·QÄSÃöŸÙ†r/…cˆú‰¾ºßloG»\\],äæÔ#¥"3x^ pwbt=°ôŒÜéöµ Ʋ+®¢‘¾¢”îÊzAþKÓº˜¬Ñ“7s»Ìðžð;wݸ˜¿žåÝÜ€xÂ1BχZ„XJ4ä6 ·ó‘ZXˆrE¸8¿f?/S“в8 # ÂIsÎcØ÷x Ëô§cA~H0Tj@ˆÉôYà ' ™¼U´T‘OÊè0ÙÌÎgٜ˼£±ƒ¯U sñÎob^NúŒSÖ¤òg¾¬'MÁÄ+ sÞƒTp®Úu)Cô…XhÑbu{’M‰ ‡VqWÇ©®F…\9½MU€’Ø1:}úSò‘ð‡#Ýñ(e‘¹8i¹ Ñz}Ü™EgøÈñ×Jo‰(§™bÛ½|ã« ,Yi #ª°/§Ìß"w“‡W뢩´Vª×{æ he´mtÛ]eiGË.ÞAÃg^n‚éM RFå?ééÏ´xÛ4ˆP;õ*­´.Ü) L£[µëPxI'ª|QHÜM\¡Q*žÚâðÊ ­Qƒ§E§4¢lOÓx4tÉXÔîM‰ói2¥Æxh4ÌÅ$Q¤`ᄪ”Òo‰ÁV¬éjwdƪµø<†$A-~žšaw©®ß&©dSÖ£ôt×¾\~§[~¯óãl8Z߸ BpÑËRNŸR Ÿ5Í'øeØBÿžÉOÂêÍÈCEþZÕ°©¹×B&Þ˜¾c®Q`fxAÆ’·1À%ÊëùàŠuŸQõÁ"Eó• E‚6ZØÁÙ×¹âǽyçØ«aïuJ?à—üv.-Ò²:Š'Å{ÿ[ê÷n-÷™øAëîNÐNçHä3šØ¡èˆ=)QX¯Ãtç1K “PH°‹yDš8VÍ"Ld‡HÇÜ•c¬ö¦Pãà‘– lÅœ‘'w*l·Ü© ¢i#¼ôo|-ïÙ3W¼1ì‘Ih‹²‡ü“àX[²3®0ò²¬g8ÝMâ?Û¾ŸúGN AZõ(F¼#„fÄR2¸úí`æ ÿ3“CŽŸ&žYS\½L–ÅQîG—Å®{½Çª:Œ|Óä‹›ÜãWs£´2a~.2ûÙÆHФÓkÏRk˜ãÂN€Ñ.¾‰ Y]°û<¡²‚o\oSC"AWuÄRÀWÍ›YL¨€™@ÞÇ%|úY4cÆbæ5mªâè»Â>.ÙýÌEÉ-¾¹S´ÿšaçÅÉJUnIì£cmЀ iDáûì‚·ÂSÊY:YÏðï½£pð8Fn™žÙ¬È¯¾Á˜»±Yº:î_o5 ;[—c<á²3W‘¿¯~23pD쯉Ðào{`AW7Wõ¤õ[GvT©Ê¡ôÎö.¤ôÞåîxU~ æ%?hLcDw$tÍû©wÌjj–~ÿ;n’õè£ÿÒÌÞPôO }7sq³ý$©m¨àªáýQhi@¤'ׄ£ÁŠ&N–°‡ÔŽÖµÏ \l‰c…_ÛßOœ“óZp±ÈkƘg¿õãÃGP-)oüî¶:sîf•zµ¥¢3Gþ'ï=;G¶þ/'Ñv Š&42®Žè[Gº9)ƒÜÜ]DÈ3“ù’ÃÑ Éù:öÞGs¥‚ ˆàÂ]¡ð ¨ÌØCF]UÆRÃu³r1Ùð/v¤9Í,`ò¢.o¹Ñň>ó,,õí`ÚÔóáüRÐaúbÈŠZ®ízÛ‘&c4j^2àdî{çtQ7ånl“Ü|7g  pªˆ91'ãRÚo½ Ø™Š½PG¥Ãn¢ÛF•Å!ó¬ ±ò-&!nÍHR(/w>ü(Wn:&GÄÜ›¯y±±,K=¸Àa‹pÕ]nËr°š#´MaQABÿJDÏÏ‹›“Ëjn µésç r¶ƒ)+aWöIáHŸJÀd>¾+ÖgH;¢ÁàmN‹ râ,šÓŒb‚ž5‡98Ãn°†l>æFö=bŸqým 8a,¾Ø0}Ä“"Ç5©ºœË %—1V¡§ÆMî`ÍŽh]&¢)ÊN0ïˆÀŽÃs[”`c¾$‘ÜlˆÑÚ:¯·h|@hä4¡3Rý>#ÁÎv ôN.}[î)>ÈEÁÖDD3w;÷{Ž)R>î½)KèJ.­ä)ȵ‘!AjR˜Ö…§!ÏDÃ÷¦‚ $[~b;ƒ‰NŸe•‹ò·ÙÄsöúCì SÜUhý{waP^Zᇺ×^ÂðñéÅÕ÷‰3Ì<ÞE¯hçîå(ĸB<ðì “]QJ‚™IŸ=§E—TD†`Å3´­@Ês­NšåŸcýXvzá½0ÞÙ B‚è1ßG D¬0%ÏSžµÃàñÀ½ ›-HêhÕ,g¼Cï°²m¿ÙåëéÇî9‚>äí ºqÂðpн ÿ8â›ic`ÙV€Ki}sDµ»bN=EO:>˜¦ æLcx3ö~25ªH¹×ð™æ~²Òõö±†¥•èim¥üÎû-ÇÛÛs}ô¼Å¹8ï¼—xr %9,ÿ[îb…‹.ÕM"[T ™‘?J:ú~ LµÊ`•¹·A2àü='çãc|÷Ë8â™úý&zE¦%„±göÐ ºñAðßy¶gÎÁfûÏ6áþ³,ïÿ䙊ÙÿFÙ½·wu¶2sù'ãŠÕþy×ö …i’™, ä¢5m ÄzÉ\ª58Õ½h=è:°`wV^Ó颗êCåÚwOØ]"£þm(†5î­¹çågáAíüÝ04þìÖV(fþ#ñs®Ïu÷ÎëŒÇÌ´ÿïIBðÓáà`óйPfÀ vÊ]S0³â¢èH£q[Qd6†œ‘¶æŠé¦Ò\  ¾­œi¨*æÄ”O1‚ÎJàñԧɲWð l&a¤¤“õ«V] …_ÓYohIô—§=-~Lìþ™uv¦<½DVÙˆI*ˆº‡„òÖ‰ä$È.W—çÈf£ù¦êE]Ë˪½mª¨²Ì`y\uŒmŒÏUx}•dW5£Ucó'í†Åß1Á%Â>”gO“¼é5²h²Æ¨$ôôd¶èÖ-1¿3tùÊV#c$£¼ç×bÕ°kœ—ftάëŸT}GVQ„¬1@têq*¾œ™»U¿àH$RE~7¦Õ‡¼€Éjjž©0ZÇ4 †œž‹fƒr‡g‹îtæ§éÊõO°j«Ö,QG–G¨¯TØešŽJ ƒÜškËšiaíÎïì|`‚;³aö›!<"çé…Œk“rô{¸¹ßm£øyµY¶øsÑ ¬ŽøŒJ({y´…›–»Y”ÝרO€§y&Y/Ùm¥øVô–¤Ù=ிhR¢Å7œžÂÎ ¾á9[¾ÏEáõº8WØf®Ø¿V@›:ÂfŠ®Vz‚2VxJ#0j ÓzªA%E‹ 2LîöøѲËÔ»ìjélãˆùò÷!ˆuyTɮͣxß¼ÍF;šf)l Ewø¨(Ø—?žünùñð§Ê<µ½ì)%í ç\é@®¶ÂaøòÍ_"Ã+žï–)€0ó5iÐŽ'‚>Å.5}ôÝ‹}Æ?Ò¢Ø|që´èÙ“|”÷¥â Lù ö ¹¡vI0ö aµì£O¼ÞSÑP2ýN^ì˜ã[÷´ûhÌ÷Ü »ÔÍw¼ÏägEH<¿Y«–> ê–Žy´[˜H⥡÷ØŽË&>Hg å?f羈üNˆÕ°_¥B>PžoÛ—îøvÃÞä™%.ÝgKãw$ôL«OÐÆ’,IJ™†U‚É×?Š/”ºÀ¯æé› rßèÇæ=¾alGÙàŸk§(>€øÍb¼‚Ò|F˜¿ÁJ¿ðáæj¥æÚ¤z óþÿˆ¥þ¹_5x¨»¥[˜½§@çAªëíŸóÏ”¾q¥¡[¸GVSÝ<ØÔVˆõ€¯ðÄU])Ý(¥˜¨öR¾´.˳,ÓѰq¹Þ®‘b¬™Ak?1~›UDݨøH¯7ö~ÐA!­‹'v)b!`KoAG~Ý ¤Øoæ7-¶éœÕˆçôJèÆürT%µ÷ý—‹éqÎ<âV¦I:ÂN°ªi–%=êÌ\ò"b2×úÑ1®§¨” KÖ2ËFfyt7xG5xNð)M»G¬Á/Óô^â4ÐèI¾?8_"ÅŸ`$·çs ìLéX=Cï©E-¸¾§’D‘™ÆWG'Ò•­Eµô(ç ¥gu†óÙa¨ØÝ^2·j)o¯×n¥\0Ùô÷j<¨ËA`‘§Ð§[õDgº.—x¨®–ÃkŠÃ_— •Fat%×W#Öª"*‰Ã"L/­LxÊËû?°|?Æ¥&gz<¶JôÄOšÉGߨ‹±íäx ãüð¯#ÿ å^“S÷ˆú‰°BÞ…@(û§{_ §É¯\œ~ mZB{`só7tÆ´ï8í‹L¼1–ÒŒ F>5"1QØ$6~-(Ž‘˜ uT"ú`Ý kÌ·þ~0`|ÙN¥g\òÝ#?c„ÆùêhŽÿ¼ ÄLELçD ?~š¨I²ÜðÌU’R[uº.qlÓo%äºÐp}ÁO~#¨‰¿µÄšÈ5Ëø+î¦ÿŠ;îÿQÜýk£9GMGMýO¥©ê"‘õ¢ÙÊØ1P‹‘®@JlnH§¥n9¼úª["6kJé¢RpPpY»¸þ±!­ybgßauýÿ¶Á¢ŒšBÞC΃Ÿ_ÉÃYoë H¶{…‰”¡ Ò‰köN ÃsÈ×ïý‚ÍéZ-«N2´Ãþ#®×Ù Í9eó9Ž¡’¸J„½Æ«5ûi×J㤖É8“LÛyû,; kJ¸±ì‡Š7‘ú´»Ua»ùz1ÓO:]å”9΄ ABÖK•zr®ØïÓvZ !q©&í.²k„×âSÕLb˜cIÄZõx%­Êœ:½Ñ"¸ÌÊ}zÙkp“!½Ö-ˆžó6z{Þ e£Ä„×VJ[¼q÷Ê?sºnÎÏM—RÌ~|%vpáß(;ý.ôbr¬sk˜f–é׈å–4Y¥gD9µ0¬>¡P+â>[Ò“Ç©ÔW©7‚«H¢£ï);X¶föZò?¨F­ÕQjV ^¬k»¼ÁO¨ä»–µ+ Èíšž)&¨À 5Ù˜b’ƒPðæœbòª üÅõGƒò˜Ì äà܇ˆèJlŽøœE¢ê’aÚ ×<9¡*;[;çîeùáîL« ×²q®'löÞl ½â¿z<2^Sq˜%%QÏý*)í¶Zˆ a#(Ø"4]±T869‚¯í{Ö˜Ó/ d»&ývëqk5ôâEöY4.p¾jMþ‹©91’«úì<˜-ÏJ‘K“Öw(°Eï%pL¥Ùó‡ûêº$Y”Sß-£D³Õ]+¾X ©V[“ûÏìÛèb™ÜÛü¡d SÞ*¿}åÛIÕw¾_PÑ®2±(ÑLFâÁ4æÚô}5¹‡ ª^Í}§ð¥Ú—èÑœ ßÿOâöƒ=¸V':zšØEH»$P¶$?EjÀxaôûo, ŠñœªaU9H”6†³ž°Í! ë£ZÿÔp6©uÄŒ.$„S5\@=~”hM ˜U1E%¶†wV³Äh3ÀyÑ›(%¥a¯Œˆ·¯ áP,ZýK5Äû‚SûnÏë•ï‘j³ÎÞâªj~§á‘'–ÕZ ú“â]_7x¢ºˆG~"GŠûù·í‡†ö‰t†ôMƒáúoÇ»¬™×¿œBNʤ"ºð·‘Þm½ô-#ϰ`q‚Ή{Ôä´x*2ò~Ö&.SwsVVÙÀ$,F>ÏÛýáhh4äL*²Ä2‹/*“§Ë6ûßÄ»f%ç+jn³OO¸ ›jÊ?æ±Ùt5Eű ip˜)à(Ô¨Ú¨±ZÑ‹T;«‰ª 3‰³÷´ YÖÁ÷Žå¤=áùd'¹'QÖkhuù¯ˆ=ã­‰Šm ›¦#úhæ ߘ¦ù{ˆäs†cœ€ë°ƒ,]ÔÀ„ܯˆ=óˆ¢ñ™9.Í}†Fšìpß%2Ù‡®j— ^ .ôHÄó"Qýä½üÅ©=C¡”_zm5sÓa1¥¼}5eßhÝò¨!+“N•¸´Šæ`=d,Û"}¼É.SäacBò¡:Å€uñ´d ö4<â¼åÈiÐY¶‰®Æ^)Tц“• È›4î½!ž]¤Ä»^ƒ°¿:£_÷a¨S‘³×lmKs)K¿‹R@;¢V/ÂO¨ç¤¦IÍ{üÙŽ~=KZSOêKí‚_íCáo>÷FZ1»«´ýɰÆ-‰Õ¼tÑñz~3Mœ.Κ¯{Ó%S³&ÍíFÑl¢µ2 R¼Ìe±´¸ç™¢ùOÕÃ.O%Íj”VR£ÜËÏC%Z]ãóËÙ¸K3nO7Ü1àǘ;G”žO’Q2ó˜ ²K‘¥ùýÊòŽÙ~Y*Œ/4†©7š"Ï—<÷íG2Âø¨ÁT?Úþt@ÏÙˆsŸ“hYîâT(¿µH”I_¦2T€˜: õ‰ðeüf3žo!^d„> È~’>‘zÚ“š­ŒgØ-Pì d“¸$,ž|‡ NžÂíS‚“׿X„¢v–½*yj‘‘«Ç£uøQ»zÂ×ôÇ\·£>S§v"“ù¡¤sÈkG8ezIüVzבCÛ3«Öð„±ÀSÖçPÑB“§v?Wíí#Tù†,ïíbÕWë&3*CûÙÓµ OÍ3v$¯øØÝñ½Ï<¥ùõšœp„=¯Ÿ‡wl[Jš#A¼°ÿ~V0ˆº¬÷o‡PO„»ìÀ@@Œ!A@„þG1øïB7Gå_B×jÍ] ‚ë†Si½ J‚4tè'E¨ŽHsd¢Yèð•}#/ù“à+Šå„¼ïƒ$`ö’¡¹E¹Óâx굇{‡ÛÅÿS@”)¨ª#^~PhFê•![¥7œ‡à ›ó'©Í\}±‰ÈhQ5púŽÙðÔ`íÈg³Bf£>µè¶ýñƒèÚ¿íÞ^õLüžÿ:vâè±A#µãÞz‚ ³ÌíÐÙ¢;Çdš¯Z»D¦ô±³ø„OÂ?m írÅ‘ü^ïq’ ­~$¯øõ†5!/šóhÉÛdÑ›*Äàw’¥DÒf\Ãw7Pr„7$äe1yTYŽç8·AùŽ}mš*Ɖí\˜èj勬Î2ês­Î‡ËnV8ý%ÆH–Š ¥Î@§0–ùp#´­6Ó}Xs¹Í;4¦¹‰ ¦·•§ÄŠ”¨Ùúf}e¯ÕÜ÷uTŒf%·©Äàèçƒ<’§Gªõ#V¹ìNjG n¼Œþ_û­HÓcZžÒ880oljÒ ül£8Þ En„P§‚R¹ˆ÷V¦¬¯<š¹ø"“?ðóC.ý±‹fâa‘5ñ,¬ƒ¾5‰ê†©éB,!n’é—ð`>(†ûô ½GA –B9”òÌlj2°FEµ§[«O1ᲺJ"H O?6EœÄ¶ˆÚÃ÷ÒM –´Îq[ÝŠzZw8öTPzžÛ½]˜·£’¤ŽÄÛwûöÂfÇ0ÞD\ø"‹ðFý©Áñûá”Q%ü'æokOüq…޼¥’d4ÎÿöT–7rü—UÓ|×ÀÅøUÝdÙ QjR:T]?7hX×ÏW+ öîö&…YIâ­¥m”ÍyU$«My6Xžs|VÄk%m,ŠžÉeûë—÷›ÉìÙÎ÷ç™ë)cnɦps‹ëÍöçNžvÖý›¯×YÎ;NÎ)Y"RaÑTdJ¯›lh®YEï[ÑNE§îRq>ÒþxÔrýÇ]Ôܧ]îtÎÙè—H襗òP,fú} TkÇ Úž¡¬4ñ®é?"CŒâ2Ý/Í´¨8ŽZCd¶Ã)ÝÇýð©ŸÖ]#ˆêC¨îÎI ]ãY­b]ôûøPlÌ% ÌuPiÓl-,lOŠTIª“ò*síýqföeçïÓ¦&ëñøêlfÑ–âT™Ö[Èž²:6͖ͦUÅ”Ej+qÙ’ÎÌp@(ÁwòË‹ý¶¾ªòyß%LÈÖæòhëÈñLTÆ š‚Íâé9Áe¢€~‘¡™×‘Ô12Wä{ÖS­ÂNÒFðx¢9ü–` »I§3¥©(o¶aVrÒbÚÀ&W6”³óã?qraKɘò0 >T8ÒTÚòêÁÛ Ó·t<ƒÌjÄSHŒ„j¡I°ò‘,ƒ2t²ËÖÝ^q± eFÕ•¯ÊÚÅM^oÌ=Í^ Ôıé†ò>çØ;©j%ØÖ÷˜¿­Î ²“€_Î[ÈfùëÙ¥²$ßqéRÃ.W‡zpdZsÕ%C;­¢×‘øI#²b"§´À vÖ1í/aS¾¨#ŽâF·.'L$þp .³SN)]87e˘F?Þd‰ëÏ׌1ï;[€UÆ´#Cpòg¡‰.\·N×4cõê<ð+µ&G 7_mÉ£‡2•w‡dv©²'ä%=†¬Þ‰õØV¸˜š&4¦Èrr•2—F=¿ŽÌL­`¬Ž‘¶Ìº#R\6îEâQeYMÛ?½þ(«¥œÔ4 «™Seȇ/mSÕ*f©kôëù¦Ä`6M¸ëaÝÕÄ<ßò„/™Cv¢= F _”FèPï CÙ1?î"cn©Ú\†oH#å8RdJØÝ.5£Nœíñ)í¿êb„ñÐîÊcpÓ¿9©Œðašú³#fëŽ*#$yŸI1Œs“u~Í9YΪÑ\¹Œf›"µ1NÙd±ûÉ/p­å,ëêÐ@úW)o/oy€õåð%"}ñyÏw¸*g±H|É'šJ¯ë?Á½/8¦tÄ£œÇlƒ¹O^„³jf b#°ÙÉÌ1&+~õß— ÄõÓ¿5²ýpeÔŠ„ÓÔy(¦ÉÄ3ßÕ1¯áE‹tÛIª´xôpÕeË#¨ 3Lé*çƒÐºü>jôÜ×Fôþê"•e°wÈý^›eÙM#Jé¶å›Oš¢`û´Ê×ÐÜ&¯éE|˼ªI‹ –#‰ÊT³çÞ^„tÕG¨PFiH†àÔÚURqšò¯Þ…Á9W½YjÔ"—躤¢w›åQ š½–b¼³¿o±í?¶„éæÕzZóåðúv¸qgᨰ¹­Î,0|îa|oªîû ‰9-Ý8M!üi@aö(¹„SV±ï–M†ñ³0ŠƒkN¡0@$0©‡TàKžÉÀÔLàËÂq3Tˆ°ô bïO× ;¿>]”[´uŽxqe~LmX›Úpß/‘‹¶:µ W‚¿*j‡¶ ¢²kZ¯‰»ŠÝŠêå£1zÆ;EQ—æêQæŸëúÍ1(D” Ä»žŽZhoK±É5Iµ$>¦Úòšè 2ѶŸ˜t§ÄIeÜžv…Á ôäìP§IòtßÙ]]ÒP“Žó“O¸¶Ý?·ÉkéíX9a<PcŒåV½¿Ò»`n«6PÐÈô#Vcý/Àþd¶y}&ÁÒ²5M²4<© ‘ÏÏÈeøM¦½¦²:›+Õaï.=ÚþÁ¹+€'N8Ü îæ ƒ¬2„:íú3¯ •‡ÖšY¨ñ1õ(vú{Ý ÿÇlwDæ¯ÈÅ ò½×.²6y –I12=1´¦cÂ;ñ³‚?:lšÚ]†°ÕŲÍPÎlßàž¸m7ûH®ùå]ßGèÈÏb6WE¨úôÉ*äÑÔT¾ë‹àú®.1ðW8r:íö’ lÇà8B%§ ï‚ívû·5ð.SØCð‰[©utR@.ÜÒiCþèU„u÷ÉÜ'¯ATV&lÝ`Þ: GOè¥ Þ2( ÄIæ·úž³@âM‚lÜÃvøóv—9‡Ïƒ6)nÞ åOÜÈO›ÐÕX™`ÿXçW§7[cCZŸ¬ûW¤¸† W‡Þh´K~*[(£ß%«Ðž@¿ˆh[Ì´UI̽¸ïÚÅ›<ŽãS|;ÏV´¿’_oΩ³—aG‘מoý\ͧÝÞ\^0E‘b½FKœŽV_N7/w·¼@¦ ­L¯{Õ+Æ ì~"ľ2®mAHî¿*°u”Mra3F™EJ!ëÑ~ì9ÓJàOÞ¢`òp‹¹Mvq¥¢O×1HKIËX]éŽ01Ô²µä‡s²£¶iüë)0Hãtâ‘Òãu¾À2£«7gÀ@Úå„„ÐÑ(~òó ‘0 t§cl¼ñ '¨žFVˆ~Ä:xÏUA$ÎξÊàjØž1_\Öhîw·EʈˆœÄ6å‰É|åûû…ä¨Þ³_’J³ë÷…0pÚåóB¾Vd+w¿fn¡ŠþwëÅê‘Ofè­Ý¿¤µ4Ï[üÿ'„þËàÎ*¢)íuÐY¿îˆ(@WVUJn¡:J{ ‘QBEk‚ÝÖoUÔmزso }áôš#N»¡8Fþ‡ÛÝíotÚv×ÃñÇdØòz0¸áeuh%üÓãmˆ„ÆP®Äœ=IJbËïöÃÕdö”NáÄê{KdØá•Z nO¼RR[è7­¢}ro±%NÔ_h &€·÷¥tU¾ÉŽ?Þ}õ;ÞpCrèr”€VɱYLÀþ¯C Ë,V»»ŸêÔ°Ï(ŒZ‡Vy.öí6n§1ï³r¨˜FQ›Ò¯á|=¹’CžíSsÊiy­mÝÙTÕ0ƒycF†qè &Ñp¥MԓƧp¬6=VG¥ø“~¿ê/Ö D½Ÿí€˜ƒ¨›ä €5`òÞª§M±™š5iÚ|Ú;ÒpëÔ”í)eD‡%ÃÆfm;zÞ{YÊgÑâMTT£Œ–õŒ5±Ž5Ìe›…VP‡0êVuüAÏþEgøÒ)´åtQWt*ÝÙ1‡7œ™ªÑ5[¨6ÎÄÒätg€¯¥[»ù¼­‡ŠQÕŒØuê“]Tµ8¿0°†ìš=Žåq­¬:ÇçRJ™Ò agpU9Îðt»Öa0Ü_ [ûË ÁøÓÿ‘}PÙœíÍš‰ªaÒÔÊTÅïqC¡pO»µ2‰Øt¥§0ãôÖ ôÑv[q(O«‘,Ï2”¦ÙrËÖ£ Z¤0–Åèýx_”%E=ܸû ŸØs-Ü ZÝMlj¼*Pä*];J”U–÷%·¾fOrkêZ…zÙ&-*kÃÃ\ §m¢T>XT÷Šé‰J²#zuƽ’ Áã/ÒC4~O³êXD¶tk9Sÿâù¹Ô^"Ý‹L4»MÒÙ·ø;÷kÍ̲¾Nq…›ïÁ5Vøi„Ê¡úPù,øQŠW¨eù÷‚ÄPŸ~Ÿð¿â&ø/K*ò?Œ›¿í¾¨þË”¶Ö]¹'D¯zc5´PÑb)[ C/† c:ˆ&÷Ý7.Ãvî…Ñ‚~Fö¼αncÊXrdpŸüåI]²r¡ z@Ó‡Lð¡¦ÐÆ.N%‰c6SÏsØÞ˜ˆ±d 6—˜ÊI!U›€ÄgìEët3¦\xA×à(˜TϤEñŒíàA?ƒ„_Gò=íխ]4¾•ÛšXqKP|{ ‰%º”’ Äw ]”·Ž-}îUÃBž|–ž®™«ìiÐù”ØShº2ôYƒ[™j°|Õ'°Ë: z¼ééì_Äå4ÅÍBîÀ? WQGu=]X¾ÓÄ“JíÊG34϶å£#buF*(kÓ4"{„æãLlqûå$v!ï“Æ¼?­Ò_9Ñçc“XwæƒRšå•M?sË8[Ä冧ÜÞ?òÓêÓ.‹õ­BõÕøÍò×®‹(É&„0¹Á-˜Lw,=- ‘ÄÁ-˜mwq$tGÁÉùŒ±ßñOŠ/§Íá‡ÞdTJŒ87K7Ôæ“ƒ¡2 ÏpF™»(2 =Î’J{(Í::ÈXˆIÈÑš«o"‚ˆ­ZMÌâÚ<´ª¥g•}¾Q*p?sr›„ú;ƒ'C³y$ rf0åÅIÍìóUcÝÓÜC4„ñ× ¼ %¼0,ú‘a»Ï=Pƒé¹E*!Å+ù“ƒRöP×Xé¹h¾I³Ðþ°Á3¥Xí¾𿟚½Ì_¥PV`:èkÓ£ÇmÐYÑÇurQCŒç±Ý>@–jr^D¯»¥#–ŠG7¾@!Ÿ/ÿ‹Ãó»”ORËŠÙˆâL%ýÌ%-ƒAÑïÌç}ΪTº÷K¦§c.áWZ÷÷É×Ì›ÁYkžß#s ~×ä·R?<óE¦J`QAÎÝ_q usN¥(î ÎñgÙ௨ô¥øÒÀÒEŠÚüÝA°Ü;4LŒw-v¾Ê™\•ÁýÛBÀNù Ç]AAWÑžOTx£ÍKÐ%¸D™UCêÍÜS cJ—ÎÁ<Ö—‚vÎä¬)_ОñËQ¿Î £Hƒc·Oz¬¥£;ˆ ‰kÏ»pEd˜Tpæû» H›éPH.ž¨ùT©9EÏz ¹mê½®‹.%§ÄkqkEê³¾oYÈûìZÑ95ûË(W€èÖL#"˜Cs¼ã¸|"»äœ‚:ñÌôp/:–'å…ªbÉtÂÀfQ>+…JÛ«Š„õæÅRØã¡E’ض½^Óªßz:‹Ë–Ëân›2(o‰TWµ*lbgüT¬y.@—)±¼Àz€˜g¯¢œ.É“Ž@/›åäa\.óüÜ|НÈæºø³òC|½î¨Š>ßQ™Ë¬È¢ã‡b.sé½Y»æ|¿÷É Z5_bQa­7Õ]&|IÇó6Üò†„$rù4•ù•Îfúç,¹‹WÒY™ïËaÎâlÌ":Ñ š–‰ÿv6C0ü¡: Ž¨Ížv=½y|ƒ?¹ D?–Ÿ²Äk,5ØÄÕåÙJ¨èR˜¶ø@óªJêµÚtEJMvmÇ[rÍÞ—¨äÅÛŠ~Ι¢)ÜõƒÔwr›_Ú% ÅÒ£ú—+óáþøõ’’ÈÞn—ƒÄì—¥¿˜ãÐxücò˜1Ðôê¦#Ï#p®D‹OKyzâ„)Œ¹ÏëU'²™¿‡¬e à¡Íõ €¦ª9°›_»þ&E¬={ø×\ûèâb/Þ•°ìÑëÎ9AHBzh¨ÖZÙ?DFÅuP«ªšçQ.« r>!a±¬-[œ{?k `!T)N½¶Á¼-3ÒäÅ? Á"ÕМ¹ÎæÖ’ÍXʳ”‹lÓ¹k76êÄN7HV@÷UÔ¿Ý ߟú—óûÅMmÉPð¥‡FŒæ“F%à ù¨¬©“ʯó§6»Œ@ÍÂ+Êh'uŠk¶AYÍ´Jj_¼ïû »g¸Ð‡&»ùÐá46¦ßióiC¢Ô®y+”f$7a÷sw?˜ù ÷M‡iqÛ+1>ÙÐY§'¾ó;0nƒ!…®¡Æ´q/$£ìVfึhªÃ›íÂ/ñ˜Nº©¦ÍfÓ e®®óòµxÙÄZíˆ7Ùåñ”17Û¶ÐŽ,9:“ÊG÷ÏȬU6”WÄÉUßa#‚Ê$¥Á­ç‚ÔƒËåØd¶‹‡/h[ŸΟ(KÔûLå;P¿ãí¾{Œ“Õ:ßZWþ¹®›°¦‚›´)¢¡ºiíØvK¿'nŠ>UKõŠÈ´7ŒÞE}ÜïP6$_0³å*‰Ù,ŽQ]!Œiªpmä;l—¶Ã·Ry40*zPP'8jоu²Æ¹Ý{ý~cuGWhÖ·ñz·ó¬_­lSå…e·°Vöô‰ÊÞìé`˜-(sxÐ)s[-×ë×"¨Xv h9%XúµÖ›!ñe´÷‰åcù.à;öŽ><µÒæ™#MO1­ò‘žÂc*&) öq¤2›Gšu dÛÅ_‹ynÓOĜ̨úf¼¿ÿ<²åzT]oDe.çÞæ>{€sßUÎ]¦ÂÚ~ •O×.Õrï^d bÆÜÀ†—Òt”¤[ö;ú=&SglúЍŠ*`p¦‡ß:wj RsaÙc'.3ê0gŽ¢¶¸ÉGí“ÛOZEID„¿J×Y§Æ3O£·J¼#ÌS<;OÜaKÚy‹È#JwKe¤MåáŽsØvU¼¸Î@„M¡ÒnŒ>ˆ!cµLÁ;µ‘LzÄÄ0 O›§“tü1d‹0çlŘ¯œãnðÄ¢ñ¤01úQ{UûÔì™T[°û{3Õ!%´76Imè>T±¿Œè²BÁUÅ&4X£W7ýäײeƒ^@µYôkÍkÆ¢°»¡ ¯{¼ÀoÖ­õY$u¯_ý^X' 3zJ_B^Ýë2,¹õ² ý+¿V11²5rþÏSÎÿ(Mô·oÈ"çP…@µëkÿž©­]¡´þ]Ÿ ¡@;ý<¦ƒLgs&qNþçG`ÅGï*£ÛRÏ.:¦ÄÅ¢ƒx%똯ð·Í-·Èäüœ©Í4—¯—\—ëãùA~[¸Ô²Ñr¤ý&ݧîì„ÁJç÷L`ÛW•’;YüP;ÙÌAp‚u[™‘”P³¬¸–Ð!¤qJðYzÐà‹šËø·¹Ãóò¥Z¥ÒÕÉ™V§©Æ,¬ëš¨Y™nÄùèU"{=— M»Êq•‰ô ‹Q‰üJê{_™ª`-XÁ­óu”VM» W»4ãiûN²„õPn-Eöè"D¶äê¥Ìô>NÈy¦bA@UŸNWEú…#’f.}ü:Ei7íRJÝÚC†‚‘NGÈåkP¹š\xºJÿÑ%ꪌZæ"Úg¹F 7„ßù½Y&U–>®«“pÊÓ1AŠú>Ûi: ²òôAJÍ\ÀIN1mßÓ\ÌÛéÊÏrf)’…—é–_i1_v`;µž²•,é:Ðt)a=¡Ÿa-L8 nVjž$ÇÄžOï˧<#µöü+³Œ]xÂ!mAƒ–ý×Ñ™óË,)’ü´å}XÞõ.go¶sAgŒ—(éÃ0eý=w¤ü[MKË-øóX¿íýxºU§C:á ¥Ã=iãïÜÅcÂzÜxÅÁÎôY•q…`Ö¸~aê ÑZDÎaÅx3ŸÙ»Ú‘t„$Š$ˆSao¢ —¯õâ§C¥Ñ£*xúüœàX<ÅÁ:—/›Ðv¥s àÝõóÏ ê÷µÈ°ª:˜Œ=“ãÁÕAƒ]šâk©,»£¸Ãj#ª²„WB)±y^&krr tFúY¦µ*=G7ÕÞìû„ì¢|˜Ü†þV´ n æíi¬¥!_5ÂyˆÉ[âªÌgÝ »¡‹›×–Üp¶1= hZ-|Ê —ÞŸ€ò¥\/úĤè 4–{¤fI›E9I>U¹&õZ‹?¡ŸÀ|h~v [¯d·’¯Çhм¦¸:´+:\,ø޲97t.pÕ4¾Ú:v×ça¸§A÷j‡i‘’Ý{Lyˆû¸«ó¸Ç«Û÷ì‰ëÁæÖŽ¨Û¯§{ðÆÓÒ•ÍÈ\ ˆr •Âé:%©Ÿº LQ$8|±ãƒî:Xv:ÄûÌq(¹"œq÷ÁÆ—Ä>òˆ~kÛ*¿Ñö²Ú0»"]W8pö ÐI"ipbH‹,4*†k”†OfMßÑòÞq lJÚfîÀ~A³~6¿ ú.||ýΛ•F®<ùÛ=&jlZKÄ ö?›þ f¶f&®ùQ»­å¨Ê;üÅ~ÆÜz|ŸÄäï­òëÉTn#Òråg’¨ß‰¬ˆ 'H ‹¾¡YH•:_ޱ–ÓrØU¡£¡"a0 Õ$"¾ƒWJ£Ó$Ñ$jw(I2e©QÂrÙÉá}ÎuÙî|žfüòÿl,Ãb ~F0žb5ÆÖMEžÅ<å§<öb–5NÖEqQ»×ÛÆSwö”Þ‹¿qç/]rììY±êíi¨ú‰M }ÞôÙgXÚ|•™úù¼%ȰÉU¢¤ëñi¾²—^íØæÿ«ýHUGÁ§°ǵû÷H—ˆÿÖCNsj§BÙœù¤–‹Ž®ìâŸLûŽé@v­L½Ûuýº²xjEvô˜âžBR·Ú+ým]—ÎZئŸ®™ÉWJ|;…?Q6o}ÃT2÷rÎ7~=Uf‰Yªilaf¨ƒy$Ùß #¸Sû;†'z˜•¬Ìð^¹QçÌëñwíAMúàzñ¥, &´Þ ý¾,Þ}tj]cùÝIÕì4Ee³Ïy±‡wø©—6/Á…ñ6äB<®,±ýP+&Ê2vÊß[·¾vͱU™‹Ð7fŸe9=@Íg¼G§Å§ o²ŸÓ' ÏXHbPJ—=jÂdb¤=•Äe³WîC“ݵCw÷‡LÜ…–çÐ-RcÒ‡oÆw)©+„Ô¾ýñÒ¯€t É¥ªßåµ&ó¼jnº£Èõ@ŸÂœÝ ÜÚšÂßøT:W†}3—D¤¹Ä#i q èé!A³ÌÉ÷ã½d[`GX´&žÙ•ñÙqRúFG +‰zå1Ù±ºÅáUØñÿcï$Ú²e Wí²mÛ¶mÛ¶mÛ¶m۵˶mÛU»øÛ߽ݯÏ}Ýñ"2bEäZù'såÌ1gÎ9Æ& ùY1ç«£ .L!ÿ½1™¤‚À*DN‚fcNì+époÉ=éÀzü~™K~¬ð !ƒ4åjBæ:,ÓmuîYÇB˜l’•»¤(渗öî*q = )Åñpz1zB8™‘¾ygEø ׉8œÕW¦M‡Wg˜€WéhNZ4nKÊnµŽNÓ(¯xF‡!žÂå(÷}œïâšÐŽºÍŠnT˪áu‹x—;c3)“r¡Žò3¸¿åïá¾Õ†êjØ›+ &\ÝÙr÷„uÁÔª-߇z?ãi9/S:,¨KAî*âã^Ið?,*à~`ÁÙúP‰‚¾FÓÛ¼‚GÖÁoKH ‰d^•ñNçd†Ä!Ÿã™¿ßÁ1¢d‹CË”‚Ó%~Š!9ð~H^ •KßÁ;^µÚã72 „­–î• Ðµ˜’‘’|‚£Åj:Š­Nþž?Œ!]Ïó  øDÿiÄí\þyñ£4i»ÈÌ“ÄÇX ˆ×’ÉŽ‚ŠH¥ÙP!©BA®ŒœrÝŸb¤æ›Oûþ@ˆÿa°1/¤ƒ™aIAL¦íÍÔVÇk¶Sܨ߷ïÄïŠJ9½)}P ¡êð~+¸›òľŒ (`˯ è’p¯­7£8ôT=V¸k¶—†ç Wwãç Ú×ê•rà ‚ßçï¶ŸáZUmÉ4”é6¼»Rï8¸7›8qŒšLöÖu6aµìe$¾×ˆ“Ä\ñØIºI&©f‰|d©‹ƒ¨+Âÿ1õ8Y §§K²•‘.`Kfå+²(`ñ-z ABöˈùÉÆô»ç!ðÁŠ3º1':ÏD&¢žÜÑúù_·þö:šØ›8þíçÛo Á蟒Â?Çþ9@ñ?Rÿ"ÃM Gý „$'·ŒŽ`›f‚‰"@—îN©™A<_ÅèM%C‚óàKnØ.Â?ƒýºíùÞ­«óðùq÷²ìá^(?®O¤hQ3>÷,’ÓoñICHæÔ®¿´çÖH…åT:ƒÅy®8"•MLõ<ì0Ï;[ò͇…²ž,öA'Q“ üå²Ínš¸×ûç%w[)ª®ÿ‘*i¼Ô¢e%¨õĆºq‰Ð”þ^¤Ï3’ÒUäú§½7ßu§šCEŒ1çm£'IcÌgøõš½ålG*ÓÕ»`MyoýÑìÂPt¸f=c[^FÅîS@FøO.žd˜Ž=ÓíómAnú!µ1øKšL^>w—¼½ql#l‚ܜ·üàœ•ªX«j!‹ÓÓ¯‡j?Å1Òü”T# Õ0ê/pç‘3Ì"šìsPÊÛÂÊ/`-›¤¿±9ÖöÆùÿµDƒ¿þ½NÿïKô7Ú­II øj«B¬]\á`b0°û=BsfôhH‰1i×QöÆ™cÕ§ÿ`Ýà“¼Ú¯ w?Ï´ììêŒòðøSCL µ¢ú„>GJè–Äcõ /·¹òäõûýŸy‡MÆ©¥Úáš½€9zÑsÛƒnì‹\”Vaøq„jÆâ×dU×<‚ºfôlÇ3©ÐñÌ…îÎsñEäþ‘GA9`å©Ý¤ØEžÐiáËX=H¹—ö„´ÐU$v•VBn¬L¯D·[¿b ׇ ®oŽ d»3×’/ÆâŒŸ•ƒ ®I*ªW ùÒ»6XŒ;•’‹Å„Ç?¾HqÕîË’DgÔ”86嵨¬ŒÆâ÷«…=ý / ›àD‡ã‘‘5S_OVT7 ¡1~o“ôÏŽó©¸I_Ÿ83œ¡g‡ÐRöôÒ餬ÁÐ ¨—òSŠ¡HŒûDkBŠŒ¢ 9ÄnûŠÎ è£À{ñZé’ö˜L3†±”Ž·Ü=¨‰«Xÿ}Uûs÷ÿÚeàÿNwóß–ñ_4 5*:vX"Èué¸ýc køEì\hùÚ›¹öhp¡ÊPQ_oet¹Ýp8ÝàÜâùý¼1ùstgpàÈ™Æhƒ¹KÂ’5±‡”5¹ƒÎNì7Ç2-è,0ÔRÞuÛ‹Ô÷ÅÏ_Bk[9„FdÚÿq4ëéÿ’r$ˆÓxÌlUjó!XMP‚ZÎ2¨tî5µÓ´ÛÙiõ¾im·ë©„~• ž?Iy¬%k<ïÜ…®&é¨ ŽRÔz=ud«×­Rí|L$®ˈÝâ!4ÏŽØ?£ÅGoÜJ)ž}TÙg4FeËò&‚ÏÝ\°Œ ³£²°˜è­* œ¼RW%ƒUi·Ë]2ð« µ³qváæÁ÷õE£F;$¢í—›;¯sà+gÔUÓzÍo?^»©lA|С9vëDÍtPušórJ3˜ß„ÐpüÆþ²P%)ÓvѺXÀ¤÷åçIÐdxiÊsD„¶\µmQ¥µ³…QR$¢{Ïé›D¡‘Ö`‹”ß:B?cïîuè8ê {œð|øM‡=ƒÁ{ Cm(1 J‹o—‰†QzëIDW0bÆg‹2˜ëû 4AÂ]åÉP:hß-gªR¥ÇÀNZEL¥vÏù+]é ש«"Ç”&÷d)ÓœÒÞƒk‰‚ÀÂðì=:dBïæy®Z·~mâRÅ¢–áÓpù}H½)Bt|¹ÁÜøFáG¤ß˜È,;7A89‹ÒÚ×[$éeŽ­:Ó´&U„Ú7D¬AV8FÁ)ãš8í ú ¹žßÙò4}­|Hi ò×™‰ì’ò0o¯•¬8órè˜1Ä.Î…K˜¾Ô3ÀÜ$kÑ£3€]Ø!švž èGÂ%ÜÊýˆõtp»i?|9Ç+05ÍD=»ã?s;g¼*:kÖ’q9æý5‹#A[3†Sf{Çjñ[³K‚xk€y[äwöñD ùõ¦žÀ+1WV‘/ª äNÌ)ÎÁûsÌY¹œþ|˜,ÎõÉ·ù3ºù3ÿw; Þ`C¹˜nÀ4ަïfØ+Ïø#PM¢»i´Ùˆ;éøŸvËìIËCå÷¬^Üo’ùÁŠö0¨ô`‹øeÐû¬ëÓW²û¨•6•Áv+üßòpT†¬ ‘HOê”—HOØþÖUÎè‡þwÚÿÜðNöv¶N&JÎÎ&2¶fÿ¥Mq鄤‚ü³m¼(Ó¦E>ÌHY\')oƒPmCYg‰Ic¾^šÖH² “%CñÆÏ[tH[Ž÷9‚Æ0‚ð\õ㸻—·}ØÑ%‘ÙZlæzs˜íäwê1»½ûÓñ ÐçÛ]’(Äjr¥vGK¾ßŽK~§ßŒZƒ^5Ì.KžÞ'å;4œŸ ,—Ù@f’ø8i˜Žˆ¿){(£Û_å;dfb½ÓÌ1[oã, µ@È¡%'N_‡õ˜ Ù±<[Ï‚‹ƒ9b&j8ž±675Äï­]0Ï“¸"Îl å(| &CdeÊSQâ´§:®þ´$MÈÝ)ö%ΰ„½ó„ºN‚^ÈçÅ`»Å›¥™q¤ª˜.í˜3,m~*6=7Ô×|ñà™œ»Q¯Çæ(+qg5t0ŠÕJ`Ÿ5Í­gÉŠ³=yÏ×ntÞ$a| UÍ‘ÎN»«_ƒéÌúf¼•¢½KÞ¾]ë(~”‚ÎB̆–¼T{Û*’7 í¯éoNvl¼Ú£ô¦I’¸¤˜^‘!R´UÝ´DnTœNmÀxQ!êvšQOuÍXpñ칆vì— ÕsËíOsZV‡Š -sEì•UÚƒ ocbB%3àÝË;u%Å¥ y·®;’Ž·ˆÞÎkfG‰H‘Zçˆ"“¡$Ýlße=€ÉŒRÖØ²·!7­H¬Dáá20½Ö q 0c!_D¬pÞ¿!‡`2+y«§¥ÉW<)ŽÌY# Òæ¾ã{ÀªbóÀ8U9S—w´ì('ô·a„F!ed¤­¬ç™?÷y¶ž£¿Î7þãúyì$ ƒl>Ç&íd´Ã‹wN9^#kï̄ȥ@IS@XF¬{A`Tv@ÿ®ÌFD™ÊÏJ[ÕMŨ«tϹ“ßé Õº½’ £m²¦f²¨oN1ΕHÔI#YR‘M¨L>Ùjy0 ï­^X1(ßS ¿^ðc§¯²|C9T¾ŒJ§4^9çg®¾h7$㜉SB«¬»›<"¸,Pó%åÃV*ä4‚îžYgWØ™3NñKÍs :c±sþòdK Á/õºF`hÊnªvÎzìªTÞÄ“h˜®ÓÚirn¡$¹nÚ¾~¼vúÔzº˜x†î¤\FÆ<µu,‚¯Ô½YéäM€øÞ¾ŽpΩÀ¬( ã£ñ‘?é²XZ£=Q ë‡_œë¯8àÛº[^x4_ Έ =7¿LnÁWlœ¯¦Âl¾=‹!cº7¶K¿ 'Ó û@àª@Á¤íüTS”KbÞ ¿³Pçö&«üò%÷>«]TëFzqEJ/ïJ®wpg†»˜ÛÛ§÷ãNÄ[Éc)R|'ןøy+Dšló¦Ï¬Åƒœ­~\‡må¸`GìKÙh[Çú½3#v憛µŽÝ ;†¹cu,íã¶ãVI›¿Œ·Ý;ØÀ[š/0o˜wXÃ;Ä;VD»lä•dgXmè¨Þž¾™¼»®s~Ö¸&|鼺ÈlôÅûf2x™x=Š ¹*û^ð3gn)½¸ía¥p·'ÙR0‚çÅú¥“ó,Å£¤º ȶ³!ÈKFàPÓr?¶sÛ»¯è`r[QUMEEãJ:úm¯ÊÅwB¹·§'×–IOÍ_í¬¬ñ1¾x"$­ü©¶=%èÔ‚Œú¥^ËêóOÕžĪÒÀ3²}”î“J·0—œÈÔoœ)Ó´.ئpç¥IüaHq™£ŸnÜh=¡T[Áßߘ٠}Y’{2 ö| ’n6eFÐåºY~“pw»®OµkëRøtìwAgŽ…4Wá…HWzÿï4Ç®ÖÆÿHHù›ßåœF¾8ô|Cþw¹Ýÿ#lçò1ä°E«þ«óŸàPÍJkå›¶ºÙ³šÔ:Úæ³¯A0?™]Ö(Z ~D!°O„?h“®t]p!Ða‘Tf±ì’w¡SÂ~aHb±®Íw •9‚iQÂì½êZú£‹ï½)./Ç•Sb¶§K³FÂ}„¾“ótËéöÏÇvÕ®ßÝ o¬›wy_õG†Ÿùwwù°¯÷ ÌaœÃ ¯w.œÞÝü3^n½ÞŠA*ÓìÄ["Øìø[ctÝ›|Dãùª÷go˜oòanöëžcïu¿›±wÚ%Ï­RïhØ©‰÷n˜N{—ÿlÏÞ`”ûxí Ÿn?\Oñ%žnRÂ'š±öA•^Ú}h4yÐõöüÌË÷Nï¾9™È+…‹( Ùò’;{­bŽj¨K‚3eU…¼Œ¬n·„gÃËhQCÀšý•=÷ŽïQ};êµiõÍù5^ì ôkËküoS¯ß™yƒp®²RÒbt4{Þø0Kðè›3¡‰ô‡´¤tÊ9KŠŒ9)/è«@æ2C2(&(F±¸gtñeE™§£ðäS‘D +O%)زtàc©ü¢Fh¼ýõ[1g¥É “%#CéŹt;Œ¥Ïž =1šD€¬íÊòn¯ƒLÜñ¬ ù›E#kBzlR î"2*ù}¦ìùF5îÍö¾fš¹´l‰ÒQØ?sb™– Â5GIÌE vAZkÖ˜âj[EÒMê©­¬õ罜Nê ¥ÖÉ ¬+»{r2Uº¸§¬²/;0µï%™«ÝÁÃ’› €ØdsU„ý¹C%ßtõ&N[„ø•ÝШ‰êï„×­ù~S°A­œE³l*VþR;!ß»$&BhäKÈ *3‡ò œ†ò‰ÌwxÇÔ¼bÓôº{Lxh›­]2O|k¨åF¼ºS‚=Z¨·'™MÎmGùFâ[²GY;Þ^»ê+ãbf|6Ñ^±‡êÈx‚B½×ØV_¾Ç¦n¼&¿ÖN”#kIi2¸9–ön/zµ%!ÜÏ({_XÛZÔ€“h÷øÍ@“¥2ÊRIu0£HUüQ¦…3Ÿ-ôz’ê` zÉ$ÍT|[»2íz:'‚ù¢PVš¡bÛf?żR:ÞDý®z+*³DÛ™6×úxf„,¤Ò×ÀôQ¶$­Êô«ñˆ‘Áåͤщ…mÎG(ÖŠ®Ï¤®ÚÛ2‹Ð`­”Å:Æ”Y²\|¿°}âº2MìZŒ2^ìM Ñ£¦‹ìv=j„SÑoà9TrT¿³s£ë¹*Ð!iÑ©3Uw‘ü÷M^î5ÞêLG/ÐgˆOÿÐêÌïwÌ®àg«/Ð}^ýýæ™P[dþ¹!® ©ßØêîqs(-&W8–…¿Ž=.µzH¢V|`IÛᆮ¬×Ÿ½.Ú—ð¹vÆ4ü}ÖÏ¥´‰{3åCºµ‘ÜR¦^ÙL•htO7¨ß8ÒQfc†>«u– êyA¿õ[aq1õôú¯°Ö¢ØBÎeŠå6³J9†qÃŤáOÁ£z…¬€¬Ç(ðסèbVUùsNìòØ@2sê  dÆ„)pño¾ÉqYBÆå9Ø vZb8CíÛÙäºhäúL=\!,6}ëóðÅ RèÓ")ù凸}$M+ùBeí>(·Î* û¹#;‰í‡wK!|å ~Á9Ûâ>-`ÛL|‹‚žƒ1\Z{ã9ž¹ÝÑnÏqOìØxæµ0Óè !¸Lï¯OgÇëz£˜mr…N„aR±¶ïŠË[˜#¤}*?–[j÷¼Å'£I¤Ž-£kö•¾ýªxrE¡\Cα"&căU¯bÇ"zn_¿Õ›=g´Ã­jÜ­c {|×ÙñôÊÓ†oÏ_™PKÓ`ÍËs\_?«N%-3Ô^ß©A̱N9ŒØìJä#;ß3Â-ºÐüÃH‚'ª\Š"i£6eùºÃ?hÒn‡×a-¶%J²éß®›è•#HÂÓC-Ñ›Wœ§O¡…*\CžÉqY¸.Éùê©D:DZPj-¨uK΄å(SBã&Ÿ!ÞvD‘^ŠùGfñ¨Ñ”»Ÿ´ÅÈ*´ÝÂ} ÚãúbzàŠ¶± ¸=ß`ê×j*yan±{ª<¾þƒiPõòRÆò’OÈ’LÏéÚ’‹tV\묄›½Õ|Sߨ–ÓÑøc딋ÖÞÖàÌl8‹Ùß9i[1´?nÁšÿ];ã¿‘´‰­™³ùßÀP‹Ú¥–ÊŽUIÊÊ¥ØWt©C¶˜‰F#"™ A«Wd8uW,¶Rc*[«¢†cIŠC@êÃETk² œä>B:3P$ÿ"M(z/ƒ÷1´·ûëgKêjKFÆåMÏë–×Ìmö#—Ùêï?¯³¾{äµTåBœþªÚûƒDÞcwp!¡Øx¨&Ü•øþÌzG(ÍEøƒwEäF#aÈKFQ¸JwÞÁpx*òA£_î‚#£ÈØCIÞoíÑröQyÊwÞqeÈÜ1f•÷Ô¹PñoLÞîº#"µ· t\y)÷‰Ñ³ åIBD÷‹BHF§t#rLÌÑÚó©Í梓3"I¢¼99—FåÇ B“˜Iš¥å÷œièžä¹íñíé貤a3°YiH÷ó2Y­Ùºä´ôõìA†5‰X‹ÚÙ3™†Ã™ 5 «!ͶëÆwÏIKìã{®2Œâ [Ô×+1ÅMïæ¢³ræL9\ñR4y'VVJŒ'‹ ¡^ÁN“ó“š’tÂiÍÒžªLŽÎÂss˜NÈVW£¨vôµ¹S8¶Å«»Ú‰@FSã7}‘±¡~›„ðKƒ±¥Ë7†öZ ÏÞ©Li?©d««O™PÏCݯ½wÏ&ä7dPyNœ‚ÛJÌb½S‡,)NÏuôˆ8,/LÛëƒSK™Êb²¼†¥)½&Nȯ<‰Ei†’N  m%ûúͤ¯>6 h'·ž´ tgì\æç‹ Úrn½iVa0çP`vº4ÑÊÌÌ ˆ9ž`„J›0¶B¸l)Ëgà§ùwB¢w¤gà‡Š¢µÄ+¿¨hîš[ä¼? 2Mü±‘à Ô½ö××±¥xŒðVLÅÄsEª2Žž0Üžúâ:¾'Mô„* ½p60ìéáA@P®Ä-EÎF I›By¤ø’ÎTsPÉy±'¢¼ö¡ô„WqSyzXgàåš xªbñ í1‘.–>éÇ&Ù1­Š|¯|û…«Þù ±ÙèA@û^Äó2Ÿ+Y®Úe\^ =¨“õÖ—C¸†FOqEÙœ¦â¡·¿©æf»`=æºô¬Üˆ‚r¸õó. YõFÙKzxIÙ BéMö«ékâ­4R힣®âµ·è³·êÀËûwõüîA™6mž%ò ŽÿÚr—µßtíV·20îÔ1CC— ?£¡iå(¿+&X—Ü܉S!M5Ná²€—·pú #´âG¦Íµ†í¾“^†éè»Ë±Q3RªÀÕf®ˆ†Öt"&iiɃøQ§?'ç„‹•È0¸Os!x}ðy4”N ×j+ ‡j­31õ© ¨(³º^Óš¸(3ží‚X™Ã¯æNáè\/¡¶>ÁܼüH8\^qﻇþ×ÎöZ_XƘ¨ør2Ð;Æ}wœ˜öêPž±Ãmb™ö^OG«¯Ô–_…§nͨ:Ú¬ëý¸»GHÄ~Šé6 *Z¦¢Á‚!€PýË΢Ãrû¯ƒohûõDÒ­fí@ï K®IŠ› ˆ 4ÅߢÉBÂ>‰qëé3ÐZý¢+/[òÖ´]„—¬ÄœçbÏ4¨ — ¶·0"²)ŒjQØk‡ñûã°*[T60EˆUß;¨ •n‰cÇ´"ÎÔœïWƒÏÚ´ð/Zà‡ì3‹“—çjÓŒ©¶í`Ç\l‚Ko>ˆÑpci=CDÔ{Öþ–¡8Nð†³-2­ì*Xù€Z’ñhSài³W{ÅÄLTRts‡‰gaÞ|Ä"~༑ª«Ýµ[w×Û8ð%QñkþâQÙÄ› æ[ðKõ+ôüb*½G£Þ«{ªüɲÿfïX–Æ-ÕLmrEWµ5ºÂ> §r‡Û‘"À.ènÄ|'¡·ùæˆÚ Ú¶+|FqçYíºÍgé÷]´KQ—»³ ¬1„ƒC“á©2ßË]\ê‚ÔèWšqê{r«üã/÷Süô5)p'€u‰?ŽÖ#Lî·€KöÖ.Sf…³Å-æ¡¥=X‹¸ñ¶d$óá–FCõ Z%öÈ)¾`¡q•¿ÜŽ1À‡IÃuˆj£%d78i¼#ü¡ò&ä6çK¤‡ƒÙ÷ߪÿ'³O ÀúhÿgÜ`gkö‹£´¨ÛÈk«aøÂz¹ÝÞ8QÇ#>˜¨§†Ø(%2D ÎÅP §Îñ«8`­9¯K¹Ò%oÌš×ØØ°¬¨“Ô°Ô,¿%˜#f…É|)˜}F?åù9Öžf{½Þ€ÐÌ,AdôžvŸvÏ~xÀþÙkó…ÙãÝ‚,„Àb˜ÃàåžÓàåF-Þòv×AÖ·?‘Àûsßmfœ Uˆ­wФ{ á7 R°WåË}; ŨûthŨ{àH6^÷¸o‚± ^{Úñm÷Тø†Jûv¯;ì&y¯3"~Gˆ§›ä:™vϹûŃa7öÆÄ8·ƒÃ·°³»É†Í7 ?ï#š£PdÁ„+ƒ¹®lÚc #={Íb]~n1'Eœf·!—-MKšt­#6=á>Û8ž™»ó½ï>k¯ç7Í®6ñG—›@¶¼¾tôD Ä5ßÜ^l:7¯'k2uœ/QÂHTeêH1=0ºÇ%^5b*Wîà/ynĬµ“3aγ˜D¤Ùª‡#aµ¥î£,W¾Ž|Z#1ž.~Œ>0€Ð4¿xQž5S~¾”ny¶nÞ–‹qKtkBáÌ9‚â!4:ÄÆ^‹H°™è$á²™œt¯ >*oލÀcdÞ$ÚœäÄd¡EÈÀQb65t¯`ë4ÔävÍjÙì Èi+:‰¹î‘šlãžA{±Ô”Téà쪜ŨèL½©&Fª¬ŽŽîZý±h½ÿˆ`A‚Œ–åä¨. +‡h_Iß_ާ–@pªÄ3³œNIçÇÛ¾ÃSd«®´çŠP)ÁP'X5K9ÒSÓ¶0ËV Í-ôu°×Ï×À…â2ÖûžgÄ–'v¤«Õû{„zE‚¹yj*Qí„Øbø¦Aç—^î° Gp——ºc¨q̯‘2^9óñ;^´‹ºo-=•ž«Š53î:åµ£þnŸ“^†~«²©êèpŽ9-WR:_*ŸpážT¿À²J:ÚæGõ©|ebi »1™/:ü µ 4\ûk•,YËîí©;X©!|m¬u¦!”kZ_ÕCCç&X¹€!úcYÂç“̘«‡#W¾lÍÕz(/n(ù§Ó±©Ø¯~6'‡iPýv!. Sj ž\[ÝÈ,T0ʆrblžVh… 2áýÜØŠ@ ˜-7™]À©;Xl®L'+ÄÁy:Þ0LmŶxœsÕi ¹|ŒúË¥–;Ì¢*÷ŽZÙEµ¬’Èm]rŒäú šˆQÌ&xÒùUÛMê 7D9­ªò;äÈoñ¹XÄWÑ3Ahˆ³ èø"ç –’[ìYíÜq‘wXR=EŒï²s_´ðl˜x5O>˜[´çb%0ˆL™ž¿6ßÃ%Ûû9»W,¨Zz ¨ /( û9ˆ »‰;‹býȆ7ü*üB-4zƒ®™/¸ª+žÛ%’ÁãýD-iC@Ï»ë9[»9I¾I¯2ƒ=­äPp܇á–Ô»Å6l+€fU©~ü‚4 ʳI†s¬:ièµ|%+PŽà9¶‰¤Î'ìðŸð°vŸÝÒ;ÖiþMNMƒÈê’‰_ UŸ#ÜâVòLWôío|Sž2+2¹:Þ„µ&»âIE‰³„ìï§ó•Uþ£ô%ó/ƒ|¸M0)yn÷"©m¤òôR>·®ºgC=„y®-"B §ÍÚ€ßIá‹hUÌ„xVYÐŽR(¥LûxDpÑtvØ@Fá;DŒ?)W ÈmL²$Å<ÚTZtîcÝ ^w*¹ˆc-mo'â^NW˜ÀE4Àã‹à²u(ìE[($~K2¶`"žK劫 ®\¿Ž ¼Æ›Ü†²ipj&‹ÈØÉX±‹8z¨ë†Ú}Ì0»ÝëÔ0Ž u ë€ µ–=JÆ~Þ0”e8…cn’¹fU`Nb žG”#ð=ÆF9S=Ÿy÷QžUdÙÔÉݪ sªðÛ¿f¸…d—PI®0†£² tÐÛºm5þ—g³Öˆ‰ElÛĆ8î&eëiCQ¢­' v<«äjª9ºH¼E¹aYH¨ªS80K BA‹*1?ÄÛ^Œ@QÊ“Wæ c¬6Rê÷*y†;ýc‰=áƒ; FC%=P^7ô.Ì•¤hw,>1obÎ/‘¾,aºù}¥rc³†(“ñWg†Á.¨ÕÏs\‰ýè»O"q-þSñÌFˆ0B·9~>ž}ÓÙ.òY¢!-Ç&ai#\ßYf¯kŠ­«&5lšàWöÏ+ˆ‡“¤µ™\Ádž˜ «l4Ö”õ=XÈÈr‰H3ˆ”{\À$=&Œ3W%3W¥W'9f——@+¥¼ «GƒÄŽs(;Ý'lz¦Wn±“wk{Þû³½È&C¹›ÿ£ŽåWOzÏ0m³ÀðuñþàGÆÄÉÉÀì_šŒÄ‚¶Æ¶f¢ÿøêŸ¯þ•tðuô‚ñÆæ- HÅ|dAZá|ÕÕ_ä,Á©Vê:‰!´¤X[ÖèMLß0>ÏÃi¼KP±8>ñ3ouo|å»ëÔñ6ÙÒ3fÜz'o»rŽfûq€Ò(¸ UÁ÷5«›OE~!õ+›ZÊR¿Ý3A@`<ŠOÄ7àï÷²sÇ+ KRK¨§*„¡@T1bÖ“¦†j ]‰®Çßuû‘¦)2að6TÝT5–˜Bd±‰Æ¿*+M[¦šž@À`‰$D[^ ¡¶º¶$>—¦Îš¼´<}1*ü´Ûž­ pÛµNM$š\ŒÄB«ìRöcÍ–`\.Ûš ºJ1¥-×zx©°¸8¸¦ë^FÐÚË‹fÆÌTRÐðÕ?^ÀêQ:…dÜGgÎZQ3[rq‡Û@¬õfÎ/V¦0År_>œ[´EQÌȬ$Ldh,S7rã‡&¬P«ÌN塤¸1[UÄOWž( ÕÏÊ(m(ÑÌT ”ž[lB“õKtE•ƒGb+ÜPû+–ˆŸÞbgICKqéŸê˜º®1pµ»ßãCNñF™ÓÐè £CèÖšÖî?r‰üøvõ wº|Ç\û+Ø"Ôæ(åPZÛY‘bÝ·AôļIËŠlÒCšJf-‹ 1gÓü–Wš  Cn.”é÷2'[úFë Ä2WƒPîÿ@—§Fa†¨9–XdlPaQb¯ ¦C)_SŒÌ "Ì…œÆ¾r˜ðœ‘Ï7Ðw 0wSéó4÷*>ÐT«ªC6ŽWÑÇ/Ó‡S€ÐC ý±BêœTYîé‰ÎU¤Åá¢Z¹\>å($㢽h2̆*­ÀXÉNhS&"ñgrˆRm¬ÍÑÈÙ†ô±],¨É†ugB«2ëП‹¹µ\ÀÊFêgë(–¸«zÈL±×Ý%MsS{kËq+$s?pêaò¢;8y¹R±8– ëú`ÌìAÛÓ#Ìÿ…Ë .í1D½þãõzß”³µ«#í3š¸ˆ)Ç_p'å.x+¥ ÜMVnðð¦v7ÿZds@Z·ºzÞÁçR”i[ë9'Ýs–Ïëüøu](°%_Ol] GÐJXN¯„ÂJ²çñ'·l°E SPìŽÌ=ApNî§àAb¥@á<’ò¢M‡ m{•7õÜŒíÓ9‚m`Ø}¹+®ñž€Õ÷#g„ç€Â1úgØSwG)Y? …l­:ÝiéþÕÿ¥µßøÉmlvÝæÜL™¬ð·,ž Âg¦™9Åá*ýÏA-iQÝ~] dºÍ|‰ÏÓ ßì.²qê§è~(W¤(¦ULQéœPø¼ô<²(E¬Dæò4¡„“z±—z0«†Yê¾ôo<#x!lI–•öl¼µ€²ì>žÏÄþ0×½ÏO΀Ÿþ…-Ôôã#`D°}¨ßî!ÏOb=usõ¸¼‚‡åqAwÙù<úHaæî@½c™pó¨w¸šŒï¥°ßd šGs©‹ÈšBP<Âd5DâqôüXéù2Cç 0~à…K^Lè-VÄå 7Lp~èm^u!—lý˜º7ý¶ÞÁ]ÚJpa´Þrin,@kÂp”? ÿÝTvÅéLÿå'¢þ{Ùýÿd*ÿ³8¬öå¥d†Ñ+—uR\†ª¨lªP “iŠÇnÆUÖ ´:¬‘¯>Zv^,›DËAa"{zš5#š½È˜R`b9 {"¦p²ºuR²Z¢ûNV¾z< '{ûÊS&‰‰uööè{ä‘ûñÇwG×ýºãP;h×ü“˜E;¦ó¥±Ëá^ÂBÜHÐûf!^@5(&ûÍ@qÐW:bÆíðëÀ).Îü/÷FóNïå2LÙ{-,®ü­<ôX¼ò-=åÍÈàæq)ðÈ—Â×»/ ŒÅ2ïe¿€Ô®Ê]x9-%oB†Ô‡½xÿ‘½ú@† `ˆWÞ”»v?Ê]p8MÙ[CÀÊŽ‘%S:ƆÑ”ÕÔ´i$½‚ÿV®dJ:ÏĸÉT5àuĘÒb·8¿·ÇH< ŒŽG²05Àx"útDljŠÕhè Æ?‡¾š€( ÙìuÁèVBqd# g¤˜e›Æ¿0)4›åÊ™ôÂ1¯ ˆ²™aÑ•N…»¢¯m9›™IâÃ?Ðk£$¾Ü¤x¤Pëúù&ƒh%=½>bP¶TiÞ1jÃÔäiK—Ô`rL—ÉàÕy‰80“%–kó[ÁàB$S~ÙZaùŒäB„LÃ(;×2GL äâÍÚ~e¥òV¨¶ËÑu!rb.§® ¨'U¹ð¬Çq™{žWL–0§qšb3aþ[WïYED¦º"p{Ý“ã®ËòôŸZF Cœ:cZñ$?Cæ”ÂéPy Þ›0™¨c©üx‚ñ]c@÷OÖ:+¯­±:ÜŽÂ"k"êä¦A4Ö¡qílú“éûäç1ú…Q½¨ô“6•{„¡7a£’«³—ßîÕNHmùúaM ¸ð‚“–”‚2ËŽ<£xçËÅJ*¤Q̶¬“Êœ”T ©¹mR-…ÑÒ9x›šS—‰Y¨4`”+V*‹!ñ˸Õ:6ƒš²É|ëòF2òø2§§3)Îå=*OxÅ[dlÙŠCxÔ,,Š˜ ö ŽÞઊ·Ð(wÍAq¬ÝŽ›aZ¤Ýyú‘x¹»èhÛ=ήH®¤Ê‰º­…N™‚>ã­££úhû0n½}¹:å×6É×ö1¦Ÿ¶†`ä)õe«sbD*ÅaWAªÁ:ëìꎇì(ÆãW -+XÈ®Ò2µl}>þ'¯¶³§#}Li¹¤üð#çÌAv ¨”rx$šó'±E‰—ó'8ß CÐ#ç?œGð-­T4³´H(NÝ¡YÓ KI ¾Õ{¨OÅѺ»ÄX½C”º3wº»åƒQöõ*|G ¤â_˜<99,׈‹-×iìåCBTíòf†Mä)æ~”VXÁgû(=þ–„·ò [|é²› )šKì"œ:ÒƒÝHÛË9OR:(M¾Ç97]ë[6GÔó4Vâe|±—.£ v7“Ö"-Çæ\]» ×6g©¯µ±?, ‘Dñpíò'ËR“ÓÈzY ™ì[®$š½9¹ Xå_í{î&’¬vÛìÍõ~›wµ1AAZ TÊYføÊ•­Ö¼Jäîχ ‡ÂÐYÜDZÍó$N‰T¦Òá L§rÑ ÷Cê]þ©Ã—-SKé=bßU‹·É«ñÇk‹dŒSÌ®:*E (,5æ =Zæ>ªŠKäA>0t±‹ò3'®Í2Ø€†ù‘¬!ˆÕæ6l[­dF˜K¶ ç¤M§ Ç[‘ôIØ&“–þœ­j~0oÅXGBùφŒˆÍÊÚ³¹ŒàxVøßÌKagr¹µ‡•ö6à9¡Ž‘YœÝË$¿ ¸¹·ûrnà÷mÎN<ùò Ù:~Ýà—„]Ê›ºÜ‹³Ç½9+È3]üñ!ë^ó'}’4 ¼Ýã9²òS8ª…cKZ„BÁjˆèþu¡C»Ä›‹ÕN BâÞÉ(G6ÿ+W²Ý{màËѶg0XkŽn?U\_äØ>g bÏóER?¸×Ew/ô¢‹böæ6¨( Û)îm¿ª‘ª+nJ_…Îtr81ŒnÅw„y$VEÊŒ\z6yISª?²Œ9ÇmŸ?J¥¾“£Ù€oÃÁMC½p¸^¸ÄÒƒhÁgŒÚALâýÖ§8Oõ@²MŒ‚²È¢}Ó ™G² ÒjJykÛ'”T܉{Δf°¬!½ŒÄ—Ï£ù!ÌvÖá]M…p´~ýwõØæv>0flÁ9tjÒydS-²ÀJ¾4þ´*t!ôºpç²ÿ;´jä^ÅbsQŒìo©†4_ö!H°ã w;ðÉ7ÿ20Œ‰°ýQ¢#öhz\’ÝÃ#îlÄŽd!¿hºÃÃdç@_Þ‰Þì²7}Þ1·‚lB5\±?™ÜO/À“ûªµZé%”FónFñäaQn\çF§±½4¦·Î ¥Û†D ª;Ø<6[s‚5­“\’Ù¤©”F­ƒ2Õ~‰¢c-‚Lòƒ§ ²î+Ï…?0OúäqlïjH®[˜j¹0ãKV°hnв  ú¯¿%àErlmfú&!ˆgt(¨êÌ €ÐÒYè “êæ/ï]¼BxŽUR‡í4î~ÿ¥ÿîS|'‚þ„ ý¦þrE²¹(¨À+<ª6ôЙU¯5óÌX„ݦ×Ü~xØçáæÐmcñÄÄxªóEU[&Xá*ɡӟ6Òž1ÁµËùªzto*o¡¿Öú¤ÖhJÄô3ˆû¤:|c[YܵXæ³§ù&aåDáY=ìiÏÁ<+Þ¢ø(û›\G«6ì·3uf®õ¨ÎziC›s€-¼À¤  K3ødƒñŠ)ý£Üµ–ìÖ¥Õrêјx•¸ÐcG³í‚j«hmp*ˆu=FÀ!ºÚÉ/—Oe¦ÀÔDé0^€¥ÍÄ(ÛVò!{È"ÃÓ¾1ô-¡ÀøËÇÍ%ˆ™‡¦²|ôA­Cä[,!ˆ¡¥ÍÚo†­Q ˆñ—Ã!ËÄP8hÜ’GCuQ¡JÔÐlv{^’â]Ç=’là¦à€—ísUßêjËäs¾êwê“Ì“·ÁIIØ7Ç|Û‡ÜKä3– Ì“ÅÚmÞàßc·Àz»ŽÖî¯N›{bÁ=– 'v9ÜñÁøy]—7˜ä„ßó1òPû«Evò¸¾ H’_¡ü„Ä?€%ÈØ3i‚DÝ™ qÜüF„I“Á{™‘dƒO剸μi¢»cŒJôäÆ < F™&X9¥ †—×W/Ñ‚¢âbæzì¡Æ¸;íö¸•ó§KP€D@ÝÑ¥å`¥Š·ÂBÃìëB?ýSeïíàñèI–ºüá2 EH "@«Ö) ›|ÙèC¢;C*Þ%*l*ßÂõT_ÏkñÅ­ò™g]¿ý =C(㑎páDœˆê>Çœ~ ;¤U! #¥~TD5í.ÞõŒ\êùÅÔtžƒ6í{+iæ_a¬÷s}+õOrÙžÏÆ /­_±Žº$=,y³ñøÚó@C²p¡GÛ£?“òÖpIwéü ƺCÛ ¹Bümg¹U¿Û~h-(çѽÓîxá< .¬s·ô§¡‚Ç/ûJõ·”:[Á#‡e3±÷dœJÂß¹ d(IVÿ]@ø¿ åß cˆB¿ì?¼O8‚L4’œûùˆ“p$A¢úñ^Hµ ‰Ëfóf¨ÝãØ›ÂH°`{û¸ñÉu·ëëéë%VP-u¶–¹V;¾¶WRÚúXÏk·˜ÛËÑ»oÜ£9ÿYtZc|æ—º™¨%SŠBíÅ<&PJ1e¼è4ij è~¶Õ€V²zF¹4p«¥É}Ì;Ö6=o’:•ÍÐeùïšœ Ò[)ôS߉ÒJùL¨´è/v9 h"W[6¡¡Š^éöí6ŠV™†"„0ÚOÆcUÛñv9FX¦¢fà ³4ÇÙ™? ÁW¼ÙmK`ÁÃðCPl¦Ê{1ý‚ØçBÊ}`˜›<ÆJGÞCóÔì¼ÿ>Ï€rÔÏÍq;Ðÿv›ûŸó,ândbïüבô¯ŠW)¹M~ôìéIâtPs\›³ Áˆ Ëgìòv~Çü‚4þ›(‡$‘XœuX™ª–˜% ><•çÍ DâÉF®ÜŒ[‚ÝŸ/'°= V¨ò@Žî)¢¨La,L] ÷é|˜kü=Ÿ,ƒ6§A»?CŸ4\ôÌÀ£Âœ¦[gˆ¶„nŠìEܧ欉›˜½ 3n3#‘¹ZøâÂÔZýúë° W¸r‡sp_C¸GI±Ãýûßè~R¹2Ãrí^på­ ×‰4â78e×b3`Ý>N†û^{'"+‡«‡GQèè”åo}¸²e Í™3%ÒTÏ@zBâÓæÜ`H¿²»–[ì5eæ’^_Ï¡)¸Ôw+¥z6³ÑJ…¯&µ¹‘ãNEãR÷\©á^¡#½Qeg& ¢fª‰Úž¦U»acw‹xà »=æҿǾ¢ÓÏ´ñ‰ª»×í~‡>¶UeË‹¥^q7Øõ⌦þBñÉ0å }äÀJsJÇw¯sÊ!9Uì³§dºuì†Ka À ½I.8FAª6Uÿ”Zoet­«ÅãŸÿ=–y£@M¸’«¾u#µÕR·ãÄÏØ™'ù- kéÒâÄÀn:òþ¿Ãe›gèâ_á2 ê_ëÔü#\ ÛÛ¹™:¹˜:‰Êü€¹#£Šò3ÃtE3E QÑNå’߬Ûëö§ºó) Uë­^¡¹¥®)ÍÔ =cvšnþ-¿±ÑÒ‡‰ïIÿÃÈ(_£ˆ¥¡‚ð[vÔÙœ]·U€}ƒÛy޳ÏÙï5Û{.§æÇï¹»U  ÖVØ0»_²Œ$®/aöîtƒ!4æ8úî܃hÖqëÑú 0^X"dblat(½ß„XëŸN2=‘a'|*ýà1ŽÔ‡è 2¸ (ÜEùU²<êe!I-ÒBîœ {Žn†É\+‡Ub1³‘e%]7gZh!kM0LÚJN7b®ËùhÊF­åÚc‘Éyú>91SYhÐÒzR7Î̯™0&[„z^ O L!ýú•HÓ ÃŠñ„íƒîÂ.ïyXYuuQƒbNÚ“€éŽMr˜‰O¤5RíT{ÀˆËIOçôæt}»ÛW uÚ8„Å÷1ggæì$Ðl´v®Óš±¥(;ª*åoˆŠΘS2ç‡rGŠéN–ú‰*³-ƒø‚‡%2_•¡Zhh3™1&æ£ÏY01` ¤Bb¥ç´òƒ§¢”a2ç˜Öáqr!ï%™Aq&“¹Ù e«ñ†È”v‹¦ wÜ‘.`”\oäç¡R¤<ÙIRj$*uЉ嵴¨;*³5’ &š &ûÁ¸ƒ vU ×óœŽ‰æ ©‰éïzcÐ* Ø›[5ÏZÏ—s›«mšd¢Þ=IÞ”Û)ÂͶ‰Ä‘GE·ãü [àÍ6à¹%°³~Ótö ®â ¢NñõÝS[>A&3­~UÝ´À6¬2“òÂÈ÷%:é;àyΘTc_BÃÌ*‘e¦Zº…ÅÍBî"D’ßš#²NõhÂ(ƒ<Õ}ÚK~§¥ÖE1Q‘Öx̺ò¬žôüE;Ë7u“z=q¸qñ®ÙP?¼Ü[š5­”]Ùºn·Ž#oQ6…vÚµJ}×ë+ȶFNΫ´h6Žâ¿s\^êwØå"´ÃSu ô'o£×E÷Àq÷û¸ º«–ÊçiäärŸ}/üJÒ:-`>ÏJg±÷¼Î$KF‰êï}£ƒ%^ì÷ì!xDt+(½ð» žÕWmRV.´…‡°ŸZCG]ÇýŸë Îñ..ñæ§ ÑÁs #„µ²:ìöµnT?<RᑚcáÑ À}ÎÈ´…›I/ˆ÷ÁàÀÙï‰0 ùD¿à;š0uÊvã@Úú=é‹b{þÊSÌ‹¿À›‡ò@þ R‡îhpê[”ªS¤«5FhòÈ¢Ë?ry‡! Zšg •1ŠÐº—µ*¡³²½(s¯ìzâß—ÞSÿýný%˜Iþ–JäDëszú†ä¹WxÊ(BxÖˆ;¸w&Šïˆ5øz6à8iÊ1\ï~¶Å»Våî˜ÈG¾WLµCžÕ®p‹ GRLùõQЖü}ûÞâ÷óOEA‹I…!ÿmù_añ¿ƒ¢ºµòêw-µ©gCL¤dø¯›)7îx>‘ °`K™ÂtqÉ¥bkËQ“šIhÙLÛ%õÄE’ùbØ™ T ÊqŽâiý¥ŒÙ'qÆœ‰'uÿæC.Ë©â?7µ4—¦YÑbÞ7î½Þ³§Û®Áíû ÷Ó €áUƒÁMIñY`¨Â©Âß÷€õÎ8I²þð©iDŽørü ë–x«#æ#1OH¶ó2¤’ð6|§à¼IGóÁ;°bÙ7ÜðÑPGÁ©ƒŽüVGå!"Å{>°öéå­Ý¿äã °»“õ‘H‚ê¥mñ—òQ‡ó“xEå!UH[iO]/Ê:oOØÞéÒ°AÕ@aL´”–Öòn.×ó|9árŸZ8­,s’a§Ý¹Š\~Åm® NÝÞc5ȸÿý 4iÀƒyTõë´ÖƒÉÎZDû¢XL½ü:Šüù{!Apg»–ÌÒXdBù¥)ÈΚ#Mô ãk±Ð«ó2ž¯¼DI7©‹¥¢¬F;ÁG/f@É(1 .0ËlýÝk´Èkò°µbŒf¦ÂbéšÔÊ®Š·Ô2¨–ÂúÍDÔ ò˜A²j0Ñ ç˜­¾‹Ý(º8º8·™’6'V¼Â#)uµ£šŠ‹™´¾SBÛÈ¿§‰¨JÏàøë‹â ;{ýå•WŒÈ,ŠJÇþüˆÄIœ±çf“ȱLØQðž˜ÊØøs—ŠEYþl›¬ˆÀê"³DÜ,£ª•n\×ÁÔÏ¡·£ê°!Û>«QÂkpCqÎcryÉR¼žŒ>”“š–Iâx´s¥mØôŽv6®^.B4`†K°WùÞÑGh„«ZÝ‘|•ÚCk„ù- Jœ~EC¨­®XYW{©G:`+òÈiÉBKÛ@ÒÞIFzØ8@³ÖuìNuî³¢A{ä‘£v?8ÿ4 ë–:~y‰%œX‹€žJ‚Û ÌÖ ÜÌh_a ÆzBCˆXÓ%Ø‘_í•^–ü^•þ5@@DºUpL4ÇÂ`œEŒDƒ¼§Åà â 9™'º@`’E‰ÄWî<§mÐ  +ñÍU[HHªº^¶b©t9ãÙÑ|6AITc ŠJoˆ•hN5{ôR&`„.ÃÙÙóEÕÌ\µ;€tuWKLÁîµ»ä½=ÿˆ ´3‡¹Ð@h„T†ÊC{Ä´›Øá³û,:‹©LPlоdg7¥Žš&^$AŠ8í;>,{ ¸¨"ÙPK4”rÆ”MI—ÇV|@ÎW‚ý¹X&ÓôñÞ—A§Ž<£ž{2Æt*®~ÉÌgµXÄ5òŠ˜ùÜšŒúÄÞ~¬àXŸLšÿf­«Í|†¸™·ý׿*¼6v·Š5üâ-èg+8¥‚6ËpòéŸMˆó·ßFŸÛÃWXâà,㘶=nißVt’#ÇÐò…ýL¬Ñ™f€ß™‹*úµ¹åï®9lúù/›¤~ˆÏÏÇ)ƒw㨅V‘¶2ܺaRñÒçÛ‚'qÙvôm)¦ê @N謉zT)áMÛë®E%ãF›W&ê¹û¡Û‚¹êÓŽ_6b´C<Ó)ÊC“šLôºDkÏÇÝ]ͽö«®²ÎEkr/t•Ó@ÀN%j´Ÿ«ï“;N²’ŸEê«o¿µSo›u‡J%v5lûj²˜ãfÜ«,u-ö:Æû©üP]î¶Š€dÏDÐAø&s£öˆèà…Í­c Q æ(Q-óÅœ¼H;äõGN•o»cæú"+\ô`ª´<æØ­¨òì>ëÀ∲â hùí65ðÌdŸÄÛ¢ée¾Ýœ4%þĬÿvp`uœž¢Û¤è õ½^«'Ë…l6UÈÜ¡AmÔòJA5Sê£uúøAêDç‚ Kň5eè``é?ÆjAtUúi9yg讳töÔUÖÀµïî¬ûÇS{øØ x§,Ûn=§ÎÓÜö¾:skðFú.ŒúÏM¬$KǾ»ü!1aÜž3êT\QÇÐ\åöÍ«Œá;‰ZûqöÖmưº\SµJvÁŠTŸF¬Àê·xCâ5£Ö­æè”3Ì,ºÅ):¦ý ùùiÚB”zCø=רü‘,Îí™cöXR7,o ´Žo‚=æ7Ùœ¿ÿ(JíÕîPÝûûööð­®ý×1æ—`užþÞ\8o =ÐŒ],PÖ°èó¥F(í͆}¿¾#c˜î1ŒÛ17±1X±i¸\pyÁá«iÜòç àãxå{Èv¹ó¾ß9Èû©îšä'ÃÌWž/h=‹ä­~cv`JU1·Ƭ8A¬™,nnÓÅŒÃp¦ ®Q´ZCJ1¹Ü¡Zb÷þÜ@6ë9™ÍC‚o<°àŠ×#,0!P9{L ÙQ’—Ê ­)æXUA›Î듺Är—ßt"‡È¢òåìÀ̽Ünoð··ù3QÙ)<è[Œ~ZŒôy‚ýwüJÆUñçÛþ„Õ y‡ {‹¢ÊÀ ‚ÉGháõå¡G9*Ñ»Kë!ÇpˆëKMÝ|ì4¿Ú]ô:šÕ÷¼ñ\÷¦éí ÿÉÐÔâ< `·|˜ î~ê‹â(sÄ_Sûý¾9â‘È׃¯Ÿ|~ô󿳊ë[÷;0hø›…ü}妲©“›éeT×vÇ^AýŽ¥µ$ñDÚr’)D–T°™¢R°c&BDÔ„k8ZŽG}XWS 1eqáxMý,€èp°',Ö‘ê@èDc„§÷_˜V×÷(EKq;j 1©‚çZëyÝøü|Ù0j»åÿ‚èñØŠ›y 'Œž<ÛØ&Ysû¼—Þ¾Áã· (5Ü„çE=kÌ»)FW†bÒ»²¬Ÿ4ÓGv÷Jx-ýÌªÇ ÅMד™ònÌ{>ÌGo£lïÄ}KÁçÛ>Ëi—fsÿt„¿QuÈÃï Ü£hתYPáqÜÉõ ÂÄÞ\âçé&ˆß®š±H¨NÍŠ†É#cß ¯'ÊœC•¥5µØ°Ü‰¯È’6^X°`j%oYµÍš_ôJh,å³miÎ`‡ƒ²i¥™«ž‘èìÆŽøÑHoÌ€äõeÈYe£Ytf#šxOp©.ÇfÖÜ).ˆ˜.îçlíÁÁ¬Ü.í>”¡3Ö#ÇØä!Ú<óTrfJZR^úu1ÖÀN2O|oNÅ]ˆŽÎÞŠ¢s¦R®~¹üÅWŠ uìpµäËT‹.KER÷…ÎâD%edÖ4àñ¢”ƒõð»%qÍ3Sš5r©¸UU;JZÅ%Š#"Ú=³Ná!!Oõ>"j\¡þ>Ðe2Þ_Çgr.ºä€1Þò#Ös]nÿf‰§ú½6$޵2á3ʇ)‚<´M¥Ë2aOé èåIl¦TTJ‰ø!êÜ~}¤¹£È€âb#)Úí^Žš#Ì(›÷$ tB ZY@äé|ݾ'*½D±o‚nƒõP„ Oá¡h·Èæ)ºJw´º„™ Û¶½¤Äù{òÂâX ³äÈí7jÝ!+(¹JwlÕ÷¯$¨]…{2:cÚ– 2|I.j(J­²»D:Û†¯LékÖŽªÀ–VƒájÁ…jµßÇ6Ú*¾Õ¢'ÎÎ+H eRR[cOpj¦I$Œ¹1—`EËB@Á~:kTðÔàóæ]ʵúUèÊšÅç€=Ëd”«šC.²¼šL³z¥¿R£<KܺÌx”ÅçËÄÚè¼&Ÿ 3ÐûkÑ.S·Ð,Y;îÔô‹Ù§úòdYšv(-hWØ( NÜÑ :WHüü@0ÌÕG³äV¸ÅzºµZ5H )A}DyÙñ˜£y ]B¾Oœä8L%÷_°&^'×~pΫ:MX«Öž5yymšUö £ŒÏŽ¡çå·½z;A=µc¢ÛÌÂóRdÛEÐ;9á±›y³Å©Nj¾î%F}T«s᡽áMßë{²›.;èÖë.|ð •»ÃÀ6X&G]';mèZÓšvfé§«‡ížœDi/ áÕÑß:ŒÙí¶l+Œ³Î”1fÒ+ë7×»¡Ô·Øˆ¯Žs»uÛwa<«G„B·{Áþ´>ˆ¶6¶5¸CæZýÙ¢zê‰ýn WŠü0Š¿‘ »½¸2ÂÈ<ö8Ý7v ¯·Ëï .UyCnïšû¼ (£¼5>Îh"]e"èª)C´è·¸`mvËÃægëh¬TšC¶wu “戠5¿CÙqLÚQ¦‰f„îr ¶0ÿdpÇ?ýF”â™H)«G“7æ…»¿0´â¿ÑEëâväª3N¾Ãø‘¶a=¢ý}Ïör„ûæ±h N¨Åv12/Qe=~ëÊóªd¶­FÂq1v¢Äînïú› ‡sÐL˜Jœ ´ÕñʈžPÞ¨?ô]ôãöxÖ\×YÃËäຖ€i@…£¾5¸)ÎЗ£¾6Ø9¶€Gþ¦ü ¿C‡32õ†Ó¥9R¸¬¡°,–I¦¹«“Ó†æ [/ D—ôËÄϡ׆-·VÏ=~baùÒ‹OP€ˆþ”:Ð.Âwþ‘q¹è”×Y¡fƒÌ»u‚ˆòŒò 0_<ò…*u$_hËSÓ)P±1ÍÓœÁüÙôÐî${ÿvûœ~•r¯Ï#æ{fú>à+[K?>û‡ˆœ‡*dógˆ¦—$^ÿÞg­øg¬­ø™;{øõXùxò;¤1*Ot_"¹‹é¨Àm›h”6À-ü&¨{wkG`ûlF³øf”ƘrËl'̦1»¡pýùŸên§Ž?·`ÿkiÕÿÑeºü× ÝWQW[…·ic&³=“-BíR\Û'¢ÁåNVÅÇ¢"?X!ü͈RæÐe§þ†®+)ÿ8(èmþNÂâóÜañ»"œ7Ç\TY×rHKŠgß_TœìKªUå^Xj9bžÛF½ÒŒª@k+›lPNºe¢wÕtl1ˆPäžÇ†ÑúBå 1ÅŽ‹IIƒ„OqÊÛQÏKëh;*Þ>s} î¡WEÁ@ÃS˜kh´>k¼ýVz¤Kr8ÅáXÀѪÍKe4ÒÐÉ5[„XñMˆßhžËYm„$ø†È”[Åü íÞÀÕ þ(• ¸©SŒ¾?ÂNt!‚sº,š´{Jƒ£§Ó|åÖ`;âÁòþs½žË/ΉÍGÀ¢‡B/³±W’¹O)t„Êx>­]]Ìíeìê·ÞF†xì sãcÖ©V¥QÀ|æ¹µÙCþ»ãYŒSB¬d ¼KêâÇÃ?ٗߊǢ³ à]âþÿëÿ÷ðEWÛÅON¢±ž†v”RŠP$_ßG 2A‹Ozà‚lc~Ä$(K¶DûÈþ¬†}×CÑœ†ÃÍäIˆëHÿž¿üt‡†2Áöœ#£ûv£é”ç”ÿ6ëëý•^ Ôp²=Z(u*;سÁŸdІ6ü¸ÖãKDHg”‰É„F²ïfª|ȉU¤zÒ¢?3ØSva ¸ÁêY¸ÁFòMe8?K¾B3fcO5¯|¡°Ä¼ÈQ›]ðïôÅ2Õ BV›4©ÚêJ$-±KkÒ(IL™úw“|óSré·äÎ|¥Ú ÊdäßèKÔ(ér?×öTYÆåH»E„]EF•Uã°žA]U)].nÉšW5ô.sg‚Ù¼'k *Z‹àÎAÚd ¡…MöN#ð8ó ÅGJªÊëKa,#·–ç£e4z>Ý©ÆñL¶U ´'öIüßä Zæ$wf‹Òô±Ê#e'Çþ åuú Árýs5ìªCåÂ!He`¡@r‰‚òù—®A»Ên}³/Ü®rBCQìæÄˆ|aNÓðêâ"©\pÃ~ë4kŽŽaÊžý³úâr_+0ÃÉÁ"æZ†YQÌþ„)DÀ¢w–£¨ìÈtíï(3©¬µÕV‰vʳAs¨Í…‚}^¤‹iÝT* ‘O 5lc¨Âp„MytÙ)±µ›ûbh$>õ|¢ ‚rE&^ÆÌ­½£RÔ§îa1 GZA ×9Õy oáÒÖZt}Šq¢²~½<"¤^’í7ý%™3Þë19MÞ-N-ËÕ[&@sV#‚®YìÆÅè‘È¿¹—@ÅzbÒp޲ƒì÷j3ý®Îà¬G\°íØÐA ç{¦œU'“Í9·ü¬]ÔEl„‰¶ödÉ3k¨LT÷›´4l¥õ7æYÒtŸ±¢ãS?K0øÝ|íuö¼r+j§Æ®9\ìÜN€@Õ»pâáDñl"ï>£[¾o·‚,ò®°û %‹Ná aŠ/ \…þO UÀ[Æ žÔ¯³Ï…ÐöÉKÓ·w,°;ƒ38Fd›Ò I,'䘆Ÿ¶î Å&+–‚¶<‡äxŽIn¸ŸÈì6"G.I¾Áµ5 b‘‚Æâ9 õßÞ¥YlVËà8n|#Jgî3Ç|³ƒOÿÊP´9¤û±ï`ñòŸl±oéH‰ê>ùòMålQ™j `›€]–ÈŸ†šC(7Å¢ñ6žÊ¤I&›ØÃ»Ä…2÷9ïÈC%½_6Ûý•¯Ž1¯FÀÛ‡xŸ.ˆ^`><Ó6˜Ù>|èÿï0yd@3; €‰öoöý¿¡+nÅÍ€K‹A…jã¡¥' 2É´lŒ¥Š,g;.v” ¹S•ÐÔ Bl®t|Ñ }ç¬4½4¯ó¼|½4|~Žž½×l2K ÛxüTüÙÏÜWž9gþ½¹,è:þ _ÖwØ1qÅ¡U âCzFìtx”°–2ác9XLãVõ Èø/–ëq’ Üùt> <7j÷„°´B Ð|WC¼FÂ#ã>îQ_­4"‹#?Yh†Æ°!ûàóHàßî$ïïññÿVb),,ëó¯Qƒ"l•ƒŽŸ9ËÆé!lÞ˜!jœ%¤*Þâý[ Ã$¬þpUoñá”–wRÅ‚‰•MQC#së¨ ¨—?•©Ù qkT7;™²¤wNàÇK,!hnïE„X"%s.6>#³v bùw€Ë`}h´ŒRwWž·{"“ìã fÒ‚.Eç#Y!ÁÀµË‰@ítóŽ0ª<å-ãkFF±¯ÀÀε’Ð2“’ñ­[¨Ôët¢d€“áú„ •–ÜVttîÖ$‰ Þ†1ÙUnl¦ˆBÓ¨£ù?ÕU·re&m%VHÏÙ$±qô’lª‹J~윈™kÍßU'µ9yMytÔÆc(×¼µ$iä.µºÌ@ÒuÓo’EÊ­ìf\LßÙ)ìªÞ‹ÊâýÊwVU„ªÄš4ྦR=¸ÀÁù攀áÄ S¸Ì º$v²iÈr!ÎDé˜H:ú¢<«”½à±ÆŽ{Gâ!¯»ØÌÖ„f]8ãm rgßÑbö¥õ}ú1|ïé_ŒFJyZÒ(GÈçÉE[Ÿf/t.¢3lh–ÔYú®„Ñ^nÖ”‘V¥£—Ò`”K|m-¦ÁƒÆiK:¨.«ƒJV#ЛiS&å[›¬ÌPƒ×Î;œ‰ÀC„¥¿@»`¦°‘¼lbÓ©OLZÇQ6Óÿ†^¼ÿŽ^¬{bñ†U|DÇ–Þ*="¢ÆÜþ½ý½`⺔ý ½ þzQû7èÅÅIcÌ™cÁ?‡BƒæŸÑËê?Ћ߮䆚©ôOÝŒW†· {JП[J (´1u¿¼{X.XÎôi0åeâòCP\sG9Á ÒIá‘(.¿_ø‰Í‹ì\~Áø—飞¸üò¨Á“²´Ò5µQÊÒ# ¸ôæÌ2¬ÇE‘y—o ~Gêšcu÷‘‘ê®Ý¡i¨ÕÙkºM4j‚¿ÍÀ½iŸž\V›¥eÖZõÑ^«ö}x#l U²ÿTTÛ#z«»„pŠ)#{†%ž|¸lÖŽªXÉ1«ð¢Ÿ»0Â&É=©ºÒ»•¨É¼‡¤˜ÏÆÜ’9§%4‰äUgÏþæª]ÃíÞpo4uŽ!ßÊøóÒQ›ê³õP»rßg–/àòp¡ZR¹ª§eWê1½<|ÀFµpuý³.p½Öç N­Üè9ZôG;ÌÝg›G£@+EQ¡b3ѪFÅ~e`\h4O67!›ë¬Ps•™l¸>õj$½]§:W|ê0øYËÌjz—öçà‰û˜ÕDƒÓí1†Y¶Tw-{!=:S­9p—¶™šÒ*y » ´KlÅ"¹©×–ø³£¤Ð+RÖ®„ZK{¶íf6¬E;Þ¡sbúó*ÐIN#D2¶Ñ”Uwë´üoêõê‡ýïêÅÿ‰Öõ à#É~ÍQµ-XN˜sDw÷)¯·'‡{‡p{~æPmµÈ޼$ì2ð¿Õ‹ÊßÕ‹{·Fܪ—CÎßv¼}NkaYãç!‘°ëz€ÏxèVô{ØítPÿ¢^¦ÿÔ ÙÕ g-РIþ‹z)¡rÚîç¦Øw»¹Mí†üOõu§ªº#^Ú@”ÆSb41„~Éw„eñöðŒÉqýq⎆=Ìs«¾؇9Dêxâ«>@-n!Ó„i·Û™¥VF‹‚ïF âÐå^çÇå0´¦÷(d:E•ÄJh{9=´: B·l’MÝP8†¦kTFo¸±7|Kb®AÉ ÿÕé`h®E}³/ðì^éÈ®;žZêx²‘(×qþ.ÖÛ–äÄ  ÜùADtïlá„¥§‰ç0/©îÓ1Xí–Ó­¢^¾V}I^Ó@ë3ø‰MýÁz–>c¸#OkzÚâÚ\Öá™ÐyhŒÌmЙ{b*Ãí4lî<>ú|;ñ8ð[„À´¶4™ï{àÔQ Ó8eAsï Wsæ SõlÆ @{©›>ª)ÜÄjöw­n2™q²ù á}¨‹>ÚÓ÷/SýéoyK[æ83@yÖ‰z=b³ÊOr »Ê{¨K©J"¤†ÓÜ>³ÐyÔ`>¶§Ï?Â^fÕÒ§z³Çzá’ý„×BÙÝHö‚ìVi=ùÝŒxœÇŽn—ÝVü«^tÿ®^fþ—záþ_êåo)Ñe÷¯.Pg¸ÝQç)‘Чƒ©‰°½Íß¶ë²´·sþÏP[îÈ¢?²Yn[.Ò„”´îA:2m´€Š ¥j–Z–ЋX´û¦Y03©&ÊMÚ÷…DžÍð½ƒÀœ´ãœƒI¹CøAþá3WnK&ì ròÌM{^uÍNúú~÷ü`ŒÁi-ƶh=À“OU0Êź_sß<ø£Å|æ£m燞˜Kаōe÷x©ýJ‡¡B1AOƒô @É"eÓQ/Ãd)(냓k b ;µÛhôc -qi|©æš`®P„û ±^„}»©g°¨Ì8…·Â :Qèe! CÇ%‹N—¼&öèMNa¢ çÆ£ýôòä³W˜·¥tö•?®lŒŒ SÍÃ"ßyæ$Ú$CcebÍgS,‹t8€µt´$¦7ÄøOÈq­ôØË…=…⯠ÃQsOAí6‰J™~Þ–a(’¸ŒÙ…?©¼‡ØèÏÝDxR u!P‡Àò” ”soƒØÀ±¬ÖÁ’ô`L†â8=¶3Ú^¼èD,¿‚¡ Ný9¹ ¬@‡"ïc(ÖvÓŒ:>*]È[Ó’ÔL»ï%3ñâò -NZS㲜èYÈ»xTŸB<»„ž dṡL„²^hi, (—: 7TÆÕ¹–‰_MNÎ>~ö“kŽüí"ÀÅ€¼Òk-\kX’@¥p”=ÈU¿I§¸JrFSl–‡WQÌá@†;–âË‚E¨<]Î7ÅоI¥˜[ßV@ ¡lË×éKÏ!»ë£77çhŽ_“|¹Frö‹‘#µz@BzôøÛÐRŠŸÊ•š.è(wU ÈAæ³çk7|ú©¦ß2ÂéúèÅ’W^}¾y®š#:Êt•F¿(*þ1h^ùJF«jº«ÔŒù[u}Á!³Oí!S/‚[¯Ê=ŠÕá™ÑºÊ*w·}‰T‰QDAÓ4V›t('/‡ùï¦lŽ02'5¾X ëÍNC­†@ç˜a: 7ºÒ±aF<êMN½È Î’<ýƒÈÈ*9ýª7°µ38.Õ³îªlÔ°;"akÑ0ª7µ×mƒ3TBEöã4-âøÛ;^áÁ2’®šR¬¡Ú±v=Õ¯_Q.ªîÈ+ÛôV³o«®Œb_*™aÙv1÷žÚ½°gE¾#Ç=[j+Ј¡¬6Z­vf"a#¤-–XÚtß-BRºÔ {ú«p¹wª¯”F”K‡e½NžÀ ß$ìò"¢à*Ä–3’FúØÃq“³W#Š×ËåŸwÞðûbçøå3F¬u§q7n3Iñ\ÆÌµËÚCA3zÁÞä«“k÷INc_£|”1‚µ ^#53ia7›Öë[(‡íKÅai^siuIjpx…+“s~R˜ŒïøyI1óPÛÖÜÁyuŸ†¿v?e/w2ò“l=7ç. wíMܽÎsHj›BÊNYôþPF-vÞæ›"rß æt‡­N˜VG5Óú²K.4ÃN…o£“ÂÏûm µ†<€Ã$–nâ’PÚŒYc”òПˆìrž!v¥Y¨“+¦”Ày)ùæª$ãøü ¾5…i›O­to¸‡ãÂ30æd*«-3E‘[UéT/ñ]ISྺÿ莆K#DÝoPöºª~±Pó9°£œLÚ;ºüíˆaߎ÷ãfÍq´¬€fÿ¼Oú+ÒöEuZy}pþH}]*‘J 3n©M"°*øËuÕõ÷ýš+Øã´ÁrÍ%ÌhåUq¬·9O{Og.ÉôÑn¾•P¸Hƒ-äzA°‘Êö ‘•æÈò"¶Œ–Ç?ïÿü'ò4÷ä¯3CÀ-6ü@URØÞÖÁÞÎÔÎEÈÞÄó¿æŽcâg¤†PBæl—DŒ›7c.éD®÷µÎ# ‚íªwöHÔq-™ eÿxÒ¨ ¡ó àKu#ï@Âàœd¿ß`¦?Ÿ^÷S¾57 çc¤íçe . }žyH݉±¡ ±3†D§=ªTB–1ËzEÌx°Orü {=i"À%‰û¦½Å2kÏ%:i޶­sÓÛŠú>®Aîå!bwU3u0Ùyý°;F¢t%7&F[O{œ!À}?ü°—E¯‰Kó÷Ó.Ö\Wöv¶ß ˜ÿõi- CTîÛ”‹í°!²½jLj­»Ùþ…o¥áÓ$`P`ú?6—ðßšÉÒø¯2tþÇ k‹7¤ÊÊó]Ç«mÒ„ô¯à`$ït›Âðx+@`MCh:zC† Hfd´öíÊvkŠ@ÑšÂÄ_͇P®­t¶;5Òè-®–+tjß§Û¯'3Y þ{§sÛ¯7n7æü§°sþ?ëG þG¡Þ “ëÂËW%'†Vx'ŠV/ŠKÒ²ø¬Ÿœ3ÆË8Å'ævã¦üe'ŽVpŽWV¹$wò ëKËu½Ês‰òW|´GÿŒÍýql¸=÷D‰;ÝEÍ>še¥ë0$ü„9m—‰БРEÞ•E²u"žåÙqe—?¨ÀÂ3z:NôÀ’wêñ¡ˆù‚c<Ä Gœ+n3|JhÔõiÇ~x‡ˆ9m˜Ãs¹×‰‰[~£èƘ+"-bå{pÄ¿=A~‰9]J•d9/(ý•)¤Ìr0‚Eï8DÖ)ŒÉa¤@Þõ6aç•wxRöPAç‡U»/‰•wZõ¡Å™“©d5YNYfÆÊÌú ì•+' ªh‰–£*¹³A§WrÏiwV*|²8¹¬bí“‹ÝŠ ·õîS¨ »Ö鑵Öõ„ο4‚Ͳ[~B×+qµã€? !䮉»+â¦øJƒÎŸe-Ì0[’pL×K”áý.ÃŽ\¢Åb×~À˜ ƒÃCùÒT§çidTµ½=¦ÞõæI·+W‡Ëòý™@ÌÍÊ'& |ççžèw(z„”!úm!óZçW¡Ò‚»/ÓÞ_~qxxÚõú¼"²ƒõ“0ÊÎ8^Y]§« ¯®Úæð>Ù1…®¦2«¯×à`Ôœ¹²Û²›èV×WS̈óô¾5‰Q¬öUP¿†¯we{Ë„a2g­SßÝXPid¸ru¬¨±Ò„ ã<;SQ^­ÕÞ][Ø e®tºº`:…®®Nk¯ØQ^À¶Ø(¢ÒVou.&LtÔlã)ìË «§¢î{RHµÙ_`%÷¬vþÖØÞé§xäÄ…DŽUåp0î‰EªE€®2]ÓØOWWc‘®ÂŽÃ:8ù!úH¨¦Å¶Ÿ2Ê?m˜?þ‘¨³e,­Æ%=¸ËfìÛn¢æ‚«DYÁ9¿€y%k\#[³kF¬b$ŸLSYÝ}W“ÁV7öl|¸uȹ\ÅÂmä9ƒfƒ©4q± ,Ašä­k¨ï-CORoõÔòÞsPKð`«³íâéo6Gâ¦î˜¹±VÏEÈ‹&‚¾ïײ„¢‚ÁÉpŽæ%Y‚S1úÙ>Òsš{3D60…2†`žÓ°¸µq^lbÚÅŽòÀz´©¹`°äSÀEÌ^þ¢“ÏŽQØ=¤*Æp%¬™{ í©ÞŠLºâ”·‡ž;!0™×œ ƒi!([yÿÓY›"æ@HKÒÁâ½…îÄw¡ää‘Î\>1ÇÚ3HPoŒË"¤{-Šë¾òaV¤œ‹‚Æ]ùE»úa2´ >Ç´éã§Ãµuƒ5CV¥ºRbŒš6Ès+6ÐI[PÓ•’é4ú&·5/âÝÍh,\[÷ñ¶çô+À[ó6à¦TZЏÁŽmé ±õ¨CIDJ‰ô¿ÊÌÒË>€HWžå”)@;üí€C ò0)ö©V%Rà]sPyM6dïÑ¥q ú1U¢PJ6Âg i Ll^5¿ýv#2âÀAD(Õ¡GÑ0á ÕA/ÇÓR Ýš±Ç‹£Úå’QV"¿)"£¶$dz9Á!¥©:’óVÑÏ V=ÅI£Ï²AJiOñ©!¢eâßW0–{H½Ð»É:P ±Qºµ,™ó„ißî-IåæA¾){ç¯è”ùa/È]Òßa°¦½™6aø1‹6㨂ŠIZ?¥z† éF ®1ˆ“p +•²6 ²>Ìu,ª8k!ÿ€×_Ó)@®Tã” Ô.)ÑŸP _! Ãé(b2{+}ûãò´Çg 5§”2#TÌ`ä›Ú³J*õ†Ë;«Ç3P¶­XÓU ÄQÐÏš±×V5Úã'è9J„ô‘Â/ŒwQT\»ÐYÏb¢í h’´Šƒºgù¦¡LZÈMBÀJV‘XfʱÄÿà¿RÙ[ a9P2jë˜Aj,§ŠGgpS¹›•r’“¥b¯Íq“Ñàž­ŠQÃÕ|Ý Mþ"s=Œ‚ªþÞS‚ܪÖ­Ðzë£Ë ‚Ýf‡#%ÀžØç¸ÚÛ)VМΪÏÌ÷"ŽCsó_FI{Ç™óñ(0“ Q\Ö=>ãœÆ èbœGµa;y£ÅäÌ_DAÖÁdÄýñ_=@~S ›Û§çúBå[;€~S ëS~dõ)j»ƒÇý†¼=»£·ú–q¿ÃÇí‘9E?§IÉ\Þž¶[ÐD¤^Ý0)=ÿ2²¢3D¿üRò˘eœrõíS:U¿¯bý6ÎѲ[zoñ.½;Ž›]mxæê‹Õ¯k²cÓ>e¿ÃvõCîѱ¡CËŠ’-RÜ®“*{Ìâ4rGæ® p&ÊÙ›´þ uQZPµ¡ÍªR, Ýtª"R¯€ÌÙ‰L3Ikœrq×ûu\¯“sܰÀ…=ÚèÒc»æÉ¾WyoËÕ—cÇL¸`û‘&² <ªå˜³'øÔ›ao®ð¶—®èB¥(:ïæô‚|¸ý×ý%Ù— Åì•<âúƒÍŒ‰(-kA×ÏÞ’ùÝÁÉýî‚<|F”rR1sݶé ËôÎTãë,—8õ^-evõÃï0o©–;}}wùVe0Â'Pžú"´z¹ø2ü†`»ðÁ¿]ñÄw4ÇîÒ=ý|ÖðÈA¼±`z±ÐeùƘäÚ³šhè›…È+àgšÙ•>â_{?úŠŸÍË/Z”Çÿ-ñEI4µô…™“#³ÈY½x™‡1[$$˜»Tž°(7²M6YÍÜ] :¸#'0üè&%£á9’À埊Of²´ó¬¹RÀ𾜯¨„ árˆƒ¿ðNO!…çN$˜5š·ôþ8Üð¢È9±ÍU%"ÕA£onÞ–ÓÞ9ì/ÙÈÌ¢¸]Ó”WÏÍ(Y_Ô“ÅèÙ›ºØ!q"±k@‘½†Ê¤õàóÍ3 cÎò8«Ò·øVçú uΚw6š¿‚èÔÒ†m»ëöð <£¼€UÏÄR!#ŠkR¶°ce&Z‡†íyyÅ“)O–â›âzñÅÊ„|-4¨N_v¸œîW¦²ÕIáÓ _ŠÅZ«[Ûô( Ng‚M|x ïúÍ•Ó÷#fžÖD=ï°.3[•k»H ¯ë—Û†«ë9Úz€žaÏK‚q„l-«#ÁÈÙl͘»NàcGdœq×4QŒ Hü ³ü¥Qô¸÷°wþ[xõE›Ó7³'pnC¦ÔWÕDKüÅûý ñòÃS|¿‡< o¤‚:$šã?ÎQöjthü ó£xêè¿úFÎõ“ìªÖÐI ŸÂ:‡>ùëyés :.^Ç?G>¨NÂ,éÃøm¦1v—ç¨ßw¨±Èÿ°ø®¿qúÌRR_0çÙy€°IÃâð-)TD"$œ@@ZÜŸ¾öû8e.ü¼9ïž Ðà 6WÌ"OŽÿlßü[Úx|7OŒÉc"÷Ë}ßå—µ›v0yDuÄÀyÑ…– 8ƒ1PÍ=y".-›ò¤3÷Uá>#ç"{”ã.šJûô×Å7hà¸{‚DŒ­„ ”y*^‰Üd]Ùñë^€Þ VðÜ7V &ðž"’ü%$‹ø–¢ùªÝŸCÄ,Å-ðòÑL:{o :רüæébq•–Orø?°¿RÊÔƒ¾ë® ”+IZáØ!íeyîÜQXhÀlÍcH`ÑUkÆ ?{®[Ëåp:"´5Ì>gŒé˜é÷Ëé¦÷ÞUj'ëäÂÛ³éWhúGq,á|› …ol|·¤í7öÅ™·®lí÷ÎaCfo)g#ë(9äPŒ4…O U]]BÙŒŒ±lyö›£°Æ¦¸$û‰53¬Z<:܆öÄιEX{æ‘ð]uBûH"=Uˤ(TŠÙg®CÙ•@+Uì+%uWT‚ε0료#t¯vdy ˆ˜a>H´\„Hó,T·PáD$„\ Ìq9õ¾ÁjIâxLÓCˆiÑÁz¾ãåMZ¾™ˆòˆ³ÓQ!()ÏÒ•—4Pµ£É*~™¯R¡½ûRLý¡2Eœ%Lò%óTGJÿ"MüiæDãb¦æŸ¥{I:2†jµ”tŽÓô°#"atf¤Ê(Y}©E˜´Póª"²‚4ñ¹š´w‰:ÁÆ6Z$œM­!*Nxblì† t¦¸·M¨Œ¬7ü>yMžK–!ƈä"J›û¦••#’Œ‹,»iîî™L ÷ òIP²é3¥cÔÓ–&O´2ÍŤNø…wÚ¤Ï[î•õŸž¢½ˆ?ð8Ì~ ŠøÑœö‰Åý±gý¯Î^~àc¿×ŠŠúÀM*"_å÷•ï¿`¾‰rýCæF¡ßÖüIwBýýãΧTˆQn÷ù‡ó òrsZs÷ü‡½¹9¢¨Ì×óà¢3~œ¯vbaòœy|ûylð¬H¬LâšáQ¼”+Ê“Db²2M¬\¬”,/ô¸â$×S…¨Zµ¶à !o³"ۤģ!£tJ1J‡DRÁBh ÉšîR<ó£s@Êš*dFs:#P•‡qM¤î™ ub™Ÿ’S_·N;,£sz<üK;F7ç·Gïfí°D!Þ9Òl†h¹ä±ªÅ+Y†S9æd\HJH~%k/óÆâƒv ƒ]Ç;°’4¹‹ð‚¥ Èó¢mÜ;°mË’ƒ¸Ï7ìÃE„yöœƒì3±¥Ã6ˆX‘%dR D„y SØ”‰V޲C²AšaI·¤hD+"ô‡j8ç3Ž ­+¤&@${ˆ|8Ì"Î ZD›nz) ÔŸÛÛã õ¹ Š™šI7ãC² iË þXUK×€¥»Kº¥¥[º»A”:„t§Hƒ ) "!!-e€´H# RÒ݈  ÿÆ{ÿï^Žàûžû(gã=ïšY³fÍš5kï­Êú2¾Ã{ÄG†U³<þ>¿f· ²Åœ­LÖ'US³ü±]hZ?i)Ô®„l|²,‚‹6ö¯Ý ¼ðËG½ØR>DìC+‘59Ä4,¡ì)Ë-4µ±í0§dÊ0£bä!¨S7cÔ.ºYóÒççÎ"h Q¬¥u,sÏ ã¾ ‚»c /Z[V#š¹ ÛŽ&̨ êÀMÆø8í1œT™l:‡"=w:• ô÷HS*Øô}n¤iSNzB“~ÏSWñ*6›ÝüÐÐ"ÕL8ˆGÚÀ‘Iì¸CÒˆ­/}B0†œý^”Á3iùx"sv–œ’,±±Wféö¼#êî;dÁ TIAÝŒÍF*GŠ Q jŠ‚\¡O<¢:Îlé ¹è›s̘ìÒ´žú\OÚ{¥(É uØf*_º·a=ûÒÔý´²»pÍïì¶÷‘_Lú[I}n¹6{®Gnù¥©%°ïȶmÁÔ C…”/ˆ£P¬ÔW…¦`{/%‚’^ÝÍ[CqDŽÃýM´/“ru[ø¹aE9<’}ù[âV’ï¼Ê}ÂFŠÛp°Tüw§ébÊȤ\¿.2ÅbJð2 ˆ æß£_~Ä66eǼòlƒ+ …螃œ)¬š’g…c”À é[ô¹e¢SP¥7#záž¿€?òn›åjû¨×6‡Ê–ÎêÏ óm¥–°ãèÛ3Ö‡u0D‡r:-¨¼!oüÇ q¿7JÕqï¹¾}rœ™ ÿÕu QÀcs†ø«0i0¼;þú’ÕŒliúŒˆÿÒ!­û“H¥{3Ì>°µ½¥¥‡šÛÊ>\‡U KT <¯eOð(dͳï.eÍ+bÅrbgR±Ü]ñlð ÍG`¬Ö0¥¿}ÛÃ=òN¼éÆ#’&\d"]Š:>Mê'ÂØz·)JðÔÖÆÐÕFoä4 V0 +P½î¤—0HŽ4+[€Šë·g*èK¶ ñÝ‚ úÞÀV/µ}¬ÂEŠßQ3Ë™OÿÕˆfÁÈ¢T©É0¸åñþØñ·;[ó¨´‡š d¿Šßò®Çqi}u3vK:Ô—â$£y9wœ½©}Ù”c*)Ýq“`aA1`ï‡!,o0>©!º|ÖÁ½QúŸ8¤;œa]lÁd®oC^WGuæ’¿nJëÈÕƒO_FÔj¨¢Š¾¶@¦2Hû¤×“´×³ÿPž>¥Þ1m¡,¤éÀ¨AüOQ…«~Qªåkã{Š¢Lk­:nü¤Öß\}Yð´tÞòFLÚQ$×û¥ycóá½£*9åGxò-²§r[.X}”“ÛÀÞ9«]u¼%Ù)féñÒ =ÞDºV>’Žƒæ¢/MTÑF˜%xæÈŠÈËOÔzŸìÐ…î˜Ë¼«o²ø «0û ‰áÄN¥µÞÕðž­‰àX/¾­gªSN ŸKÓGB̉±TD‰0e¡xõë;aÖ5¹_Ùœ©B ¬ƒÖ(JC]@˜o8j"ñpH|ùniGÑF[à,Åò ¡X."&ÏŸö6¿õ¨Þ¬Õïv$´K×$kj›éxhj¤ÄÆ&ü ? ?Ÿ¸ÖâèˆÒ;¦²·Ÿ&ÞS¡§0§!éÈÁI¢ÊËæD艹c˜‡hõÒAžÊð9'·\öWGô’D©fnK” †ˆ øœí2 ž{Ié®zÛ/1çÙWƒÓC•J÷!_ö6>‹Ï¹¡ô¦h8eÉMs/`p×áçïÎxÞt²Ný`K%%¸È´Û:ë„WÛ¦”ç,kÏÓ¬êWØõm߬äGjtŸ.÷‹ÒÆ¡ÀîF£‚ã½wÏ*ìEÒqZ¶%ÂËÜB Û^Ú÷öi{fðÚ®µé¸òk×›“šU”¦ü8Õ&½ÀM£ÄÜ-8ÐäÄo•Ûk ê–Æn@y…·(ëR¦¡e.‹j_R‰€bÉ~˜CSv_)5‡ö­šôˆìýQ®fÛW°²ÅÛI•h_ÌÈh— LK<,^ÀefxH`Ô-šÊ%0§c²Iœ´¦8¼^©C5@gÎÍNpØô©(¸‰°y ¯÷~ÒˆF òBûê~ÓIîûûùcÐ"Œr…Aü(Jaý«^FZÁ~mÉ\°ò\I…Ä^_ÊʹòsÑñâ;Œ;g_!m¶5Œz#¶.vp'=Ï´ 3¥×7RQ .(YÊ!™wJb?\ ɯ?ùIîùóVb?eXlÏí¡r®¬¨‰ÈY 6¬9Õ"¤,aW.iÚ’,Ï£ºj0\¶¤U(lÄNkæ„ù9#®~Íi«í$'· Fí_ȬñÓQ[V»±¸(ÿñHƒPUþcýè'#½/×f,WàÜeßcÞ·õ“£¯‚^Câù6Yó5ŸŒý îòwI7è1|Ùʡ݉v“u‹UÜ“5çˆCìC»+(÷£6Ź_ !p—ów"¯—ÕÞUä„ÇôU{ƒßóŠYAà ~‚4ãC¤hÎûûCŒ)dÁxêûÈ] l¯Æå -øª@íhR_…Q‚'3Fuûl8²QäC¤’ÓKÛH\x Gô®´ T™IC°”wøžqé¿ÖV?¬Ä>Ѻ]aíÁÓæõäA2A_{]†F·–Š“¶CRÈbœ‚‡˜ÙN«š°]¥+<‡'CÓ{Xή‘¦<g+£ºžGn«™¤¾Lü‡Jt!nétØŒ>Ñ5e IÒ:Îk:l“½b ›¼6_zöZqj»;HíxÕ.÷ývè·?–±uáe³YÚÓr–ÑlóÑVÄ|-2—wøÐ•Bi}7ß IH¹LÔh,Ì0@ÌZ¥B3|µ\Òêx6¨0Èlô³øay-%EUXßiÀ>¬ÚñËá72Å)«~ÁìÛ9{L7¾êl˜âŒcÖ‰RÚ”)Y«L20NW ÷Àc–Ë|[ü”çs~ÖWæ<¤‚üH/eÜïZ;­”š –\%9οº-P#‡ÜeN¾S<¢ý‚ÊOQÏPüÍ£(ÎáBf1}!ÞõȻâÛÙ‘°«Hüá”,ÔÈ ‡%¢ø‰h§TÅ‚–<â©åÈf&÷÷¦NXæFñÒ–¼²¯Îì5Õ«‡áµR?u$옅°oÜÅ"ÅÜùX»è!”„­‚Nç9ó)]ø-܃Òdõ7ª<Ð­ËæwØZ5hÉp<°Þ‚З)PâÃÉ¥YüwÛÙt…a;Ô3ÕÒáöVÊdX‚r Û*¾Šypߣì Z[à0,¼‡*0ô™j¤™ôÞfâZ†¶­ï§šíÚZ”û ½þo¶Óka„£?l›{ÐxSñpÈ¢•1y SØzì1=˜j ›å<ÂâÖ¯‹ãêH|ͼ;´®tDT-]÷d#ÞÎìxAt`·x½Ì›ø¸ÊßË`Šb^MÆï(º©§©Aßÿ¸±»Çl)ã©ÝGߥ{Õ·rޱèM¿’ÑwcåߤÄ}ôs̚ƪõ 3[`‚y¿¡ejÏ},þV¶Êi1O4’¢fþ9¡CƇãðÛèô»Ó2•FÆåHÓ]Ïs”n9™¶?=¢$jƒÓ§˜¹m:ŠwRƒö«$JÃLF•Å¢` –ª¨a¼cWg†Å7+4Ÿ9ç{Ã6V* Vâûe^~!UÓ­ â­ÜãA’\1š òô*wWšÁ'y+ó«ä$˜`M4íÛK3½kŸìî =›;Š‹úÞ‡ãÚͳBØÑNÖçzŠøÐ¡óSÂìè#'–Ljݻڮ4V7[h Bš K؈c“BŠñl4ëûy²Étñ<«4åHÍ“~&™F |é>Á£ÚW/®û‹tJÒÄd•/6Û,#éÿ:l½mïÓ˜‡OÁÖJ9ø{aŒãŒ·<`&’DTã“>i>‰ïË 7ÏÇp»•u××E¯L©zÛ!ùõD·®UNƒ_|g‰N©QãÍ[ÒzÇ&G·Pöp‚ñùñ?iV ôm<Èæ¼‘2(O“‚y$7r‘¾5«N…•Ê!¿êPkSíñCìð`S\ñuüˆ®)…Gÿ¼LM÷F0V`4Vp•þ½‚¢Æx䛨¹_7 Ø×°H=ˆÒŒ±â8-ª^’mÙÆ æ* …féÕÌ;UÓððÍ㽜¤íGE1«é{m-$Ñÿò®wstÁ=øäŽ6±wcš|Õ ¡¥n8Ü¥&kØ2A¤¬¸o袑’}Èìlên”J;É·ÉÒnëy¾wk´LEžö‰hUø.…$ÏxüõÀ¶mOgËí+{Ûn×ZØ1gæDxíØ€øã†ìõ õøL1›fŒ>g.ÞuyrújÞÛÕoNŸº8‰¶›ítYvßG­¦Ob®®ÚXW–²9=f€¹î~Žm,Ÿ*ߎÊhÉ ÌÛÝ[Ô ¬wßïRšÒ³Š–ìZ×Â<‹Ó6 Û%RМ²Ü­Câ$‡ãÉÕ­òFacß9ºÌbJÌüôÁ§G•¿˜8è0¡µürPÇ×túl œ1ªyÚmc+…|€{íÖÁh‘QÖ€ô‘I G¥Rt"ƒæƒ=¾cv.ùUc˜ ¯!ÑEÞ”ûìaŸÉ Óv¥“òOO»4„ƒh8ŽÅBETYQ7ÃtZš‰ácŽ–eÇ×À&èÇI®wð)Gàוb#¼8Têfi¬—%0H9·•Lˆcyßì¦ ¶Ga[ëªv¿ùl@pC.uêñç±Í|fš"gÏÏ/5u5C[Ý\ö-[ÃÒ'•ÔË]²Ö&׳Ìx¸„h“©ØŸ35iéö±Ë™é¥m‰ªGú—°) ¾\…‰J¹)ù)­(W¬ŠŸ`uÐÙB-D¬0zò!Úº†ôÞ’©N37rÔ—@B˜ÜXRy¶˜ãŸS¼¬¹'M†L„ßô””½Ü ZëüîÌ‘«-¸CÔ¡vkÁ÷"Ы:‹Ë) ËÏKÕ ‰4+3%=ÛŽ¿à»X‚ºÅChêW’Ñxâ)zþÚ)(4« l’Ïaò^åñ+ :#·kìsL‡9‡¼f¤j ¿ _¡ŽÙ “bÿÀ &}*äÞ;2õh!I×Êu9/(ÔeUý.‚; §ÛÑGÏ97 ;Ê%[åyóÄa˜Ä p­"Ý5< ÐX4BúìÐN%/ˆÓ‘èô=#gA÷°;gÊ·nq/”‡ÌÔ…ßÚú`ÙÄ„°[ PÝO%UJX‚pùrX$WÇìK<ќ󗚤\øî•”øj°Z«ê¥òÒª¡†nÓ´ŽŒÞ°Žœ2Û3}ëgÀŒcG`m&‚÷±Õq»ÜJ‚Ô_ fªM_´¢f1z„ɱWòÈò|FBÍ ZtΡÍà™ƒ Qw”ï²WP' 0w¤Eò¬-¾4o6Ûçã§/;,zI(§KÀ É ƒ ÄY_œªy±igGG b«ûáÃiM"¼[•¤gL5ÊõäÃZGâUþ@Ä?D&.óo¸Pßð™ç‡ìMÇÅ„p¦r”nW’š©Ó†[ïü`ä\MÄð—#+ÄV»O‹£™Dø±{Sǘ•"šbôÇl(±V#ñMäw¾þJcÛüv÷‡Öì¬Ê·ñÀMâšÉ/ÞA a>Ò¿!tR†+{U㣉@K'ldß™® ó­ÿ„)Ï6÷¸„aãHØ}&úÝà~»× ¦6ŠzŸí+i i6­g Ùíl’òþHÌ43vÖ›eíFË9“ãNFpYMÕ·oÖŽ"×;ûÜÄQH@ ã¾ålseÈ‘„–jÀ¿¨c ×öGžÛ0¡Á0]…lz›Rä]´ûñé=ú¹BáMïxêúó"àßpcªUyË ÐŠæ.ú cÐ>¤ãSI2=Õé@Í.ê͵ý‘(—0„¤«µ»˜†¥‰×MvSþi~«ü¼XËvye¢âFÛ$zýª_Ì“ŠƒÁÒîWÚYê‰r8Âæ$¾Ú„·|G¢Ç*„aQòxö>!6Uã·{Eúþ ›ù†­GÁkÞDNÝÏ9ßí¬RåHÕíÛþ]F)ijKËJósfwq‡aªêxÕ‘½L¡•³`éÐ8ì 1»ú;ùÁb–À>kxâ Ó¨I«(LB7½z_w¿IæÁÔ©PÍMÆû†5ì« ÑÐBë¤Ç!Df>”Ý]ÝcЂ–õ+AÓ”ž‘> ’ì¼§ÏÙê7 ßÙ–BmøQŽbPa†ßÀG¨Ê¡ß4¾ùñËX5ã"[à$ãgz©Ÿ[FKI `cɧ6+0X1—k—O]SÖ09èVT†‘í¬«:ÞEùš—–!ViÆ["×Ùøv'ø«AX(([dˆ•Ýÿ*Tû׳-«´ô°A>uÜÕFãý0 Ÿ8eŸ „ª½ü¬W™„¨‹;Aû`œÙ’{ÓÝýî¯`ß™VUBr^¶·{îy‘üÙs¼§G9ƒ¦x“”¶V<¢Æ^üz´³Áh"ÌX`êáGî§mŽÜ ôSù=’;,ýåO%Ù#÷Êï…Î Ýã´ooÀ±y;áOê‘‚Ó÷}a߯íAÌÚ½p‹4ó(Ãñ'±ÚÞToã†;l9† cGEÏ_¨Ž&¤Wà/ÄõäÐ_ÔeyûeÏšN$ãó쪷V ágïþžñŸ A­:Ó/ÅLGÛEV>™CÞSÿò¼,×Ñ{EN€‘Çò]õDgæãᜃDE}œ„ý8Mú—,Qh{°t¥{?e<›R2ÇòóN3Í¡ÜZµ¤ée²¨: ¶=¾¡˜º¿¨ªUI2,½]”]žI·ø47Ljnk ô S`X›£[²™³jÃÍ1WBáy¼~PE²;žã`Õë:Úæ!> â˜{öÏý]ésPÂsýèŒÉ”ûš“eïVuðÙjÕuç D”b/Á¡jam&l"^ÚE•WQäÙûù”í»Ó)E„Éæ¶k9}EíHš ØææL;Õ:2¯8â+p:iÌ»—+ªq¾ä~yÈO-§°.Uúäù((K:©ÒÏ;$úŽÎ83….J˦Ö4?bZÇ$žé~_“,2ØÅêûÛc"CôAìǯñÓÉœhñÊ,Œ;imÃ’{P¾:éÖ±íä|Žœá2³GUÌŠöf±ï17mãÇÁ™ŠÄªÉ›ü˜v îtŸbAŸ#væîxIü¼ÓýÌŽn4nEfúõð!Úz[»u¨¦„¡©§Æ^–ã#%ñ©:<2[Áûj l\ z®oƒºÄŽ·\Éq‰ÂgO*›G.œ¤!|KRÏ1ñUÊüžCÓë‡_sÛ &çKkKÑS» Ñûðg†A5¯ø“î žR³.ô-*M0µÉ<|À=´W¾'¤>éo¥öÞs 8ÏbÙ¶½cŠKæ¶;kÒâ¯i(þº‡%hÇZ,"ͨ>œüš@«Æ$:œ#Ÿ™vèÂÚdö^òžyò†Ã[{B`=svšÈÔ²–a}áK¤TÉ'ŒFr=ÂcwyÊѨÉ-mÌ«J°p~‹îþ·õ²×ø8wE9ßvÍS“ãþp´rR$×…;ò$4­ ›–n¶!ˆåô!~h‡–?§9úEÜú´%WËØªè£kÄhI©1]^Ì‘þ0(Fz¶œâ¾uq«Æ,·–$gÍc\7u¶OßàP"-°÷–± Æ °X‰-)¿jf~ ¦)äÅâõæìê—IÊaïÒvúÂ’u#ÄÛ¶ïEiþærX[ Ka­4ŒQ…w˜I9®‘wÀ”ÄÊè.•^x(ÞëM4î(!©ñøyñÊ_qË«ô}#ßzòt£?„–ÔhLÈ[VÞ¼­Dß඿⥶{à;èèøÂÏ;”g!o'iÚO¹)é–a :–’…’T»¥L#”R‚ü»Ö´hð£æ'¡­êûÖ¨hþ–&˜©­Ç5ï”*Ý>Kém×zÔŠè¶$¸?ÆÔ?f\Áh`íú^zb|ѽ'0ýÓPñg{à‰¤Êã9Åì»B’%$óX:X1VÉ=ÐàUɨGÈ]ÈŒîÊywO(W,Pjº”°áüD?ïR¿ÃÅÃ@AiÃAA ]éR‡J}þRÔÔÈÞô÷ž«Û(c‹bøTÇÕ¥ÑIÒ‡…©àT2·éz‹R²«¾ &0‰‘¨gv³rœ0ØÄkù5¯¨¥¸_ó« ¢b${ÐS}äùz—p/‡@Å«ˆ°7ŒJsV°IR»xsQpg’zkÛlX°O}^nWí튷 ]‚ýW¶Ù*»½š0Y`›'¾àM/xµr؆}v§à~·EµÖ9U½õ®)¾“¹‰ßnj!óíÇhÝrý)³üø(©bk¶—‰Bá±xÃÖÚ‚£cS8üÓÎôw*“'ƾúŸð&%ônD½Ö²©3‘Hiøy­„ÑŸ>œ|Ô8j Ãå¶ê“0"k$÷Ýþ¼ùŽ4Xœ·6¹#‚Q¬ßȶÁP!Ž`AO Á¡•Ø‘ÞågÌØOÉ‚÷Oï ‹µ©/S /§e& J–­!XZÕQx¨¯Ëì> TNø©¥œ°c²íÎ *žÙ¸™«S54ŽúëË*ßÇ!v_XþHsõO OWy#TƒŸ4Kp%£¹h„¹â»(d¼4ÁZr¹×€ÓÜôX˜+~â™lüÏû˧Ÿí¦i º˜ÐÏEa þÂ5¬Ì¿aºWIv×oÜ£P¦ÞbèQÙj—ÀË©èÄ&ÄòËTǸ–ÞTÃn(1nåA­lq·³£~YõH GÖI® ý¸ÿ—ã¶R}æ27&­–ñªlìÑŠ­Ìc8sÄ¡Ù<=s²¾_¦dɽ'÷`?ÕJ¡\²ˆøU;%þd‘î]®µ›bÀ®¾eš=§Ò÷‡%„mîˆL?Ì#Îþ˜!ý™ˆ‹q‘ ¿ãÆJÛ V‡sºM“6;V7Jxn9ÂÝy{¯;2½# غ=ÄûåÏøß„ö‘Ý3Э_µk;¶“5Øp(~$ ÃUO;2›ý–ÑZƒMP\—s³¶Þ›ë› ¿Ù  œ‚ u£$¥¦•Ë’`“¦Æ<…Ä~úدïì°pg¯vãKÉ}+Bû÷wuŸ–¼ê&Ñ?þÆå«è>î§·›t‹"sg™üöÇGh£}yÆm~Þû &£~Ç;¾Ôèr¯b7(àIƒ7jìùÙfZi’£¥_̧ÄÕHÏ÷°êæíªÒøÖ¢u¬ESG°i’äKIHj|¬ôó+©þªAO€á'S/Ïé-^8±3=µ¬u§m¦P.fYTà™Ð¨Ò\øÜÔaÞ-qêìf‚d–zT;8Þq'&~ÿ)Ñý¾™gBe¦u+jøº_`­b7ÃTQm­?«„x¢*É}íÿŒr»@1§ s î}ýG‚(%UõrTœ"Yöo§?§2¢H ,Q<¬¢ò“úì ¢d%šŸ÷ã-˜EDUžeÀU¶r‡ë-pWjÞsýN9ó68ñóK#b% wB:®Zf"¥vûñó\¨¥5ÏßÊ7»«‹*ö,3Zt´W°¬>Ëô”o ~ü ¶ÏŒ¿I¡ÂT‘Í Ox 1¤V;eŒmÖµ8iŒ§ºmyvÙɵ='Ð%mŠi˜cœÙêXciVUEa’y¥[óE¦çΞ¶uÚÊÎQ¬pŽuÇ¢}dŸÖ3§:6µ[%{Ì6=Æ+ÁÁóùÌòO*ánMì‹sѽëÒ:Íúºô£œk­UFk©le ù°šà4DÜ[gÕºí@–ÑüN‚§fÿâPå^ðæÉãìZs4üg•}¬|CVÝK]­ãßHóoß~´EMWÌu²¢œ ÈÔöL=Ad}w>ƒK»G¯­Î á÷î`³WКÚN¢#¦G¬Î½„ð2#9j8â’²,XXÞPãÀ²››õ™Y¢ô°±&ìZñäd'oÜÛ{«õ–µÑ•((ш,%ÈóãBnrÜ®cìMÖz^ÁÜYÃL ñ»gh £â×l^¾Éf˜i«¤ú¶³+ìÿP¹pá^ؤ7‰LÀ½´ÀÚˆè9=WZòq)y¤ìæÚ熴ecÏF×Í¢ÇøQúoQ¢k[~’º;¬@ÞÇI^˜sD¡€à•,z4üõ=íÄÞÜ{ñÆô]ÍÖÉÚ+}•èFéò{œéE&-ŽipJ†BJXã¯8PG)E"‘‘Ds…‹±ÌTãt¶bë>%Õöz?jã}–ƒQ´Ë‘üù”ýùkû Sj&íך,LOÜÊ:pÅPhv)ƒû?lî–£²Ç½Lè© Îa׈¶ÓÄy¿@Ô¼‹“·zXµÇÐaù˜Å[ªWØ<ó…¹V=µ?òh„.ö.vg{¶x¯»î›ßñzn!™šüÁu]ΰ®çÙs«ÔÔâòü’¬’þ Œ‡Åýz–Ï|µZTÆtêÊûÍ(Y)Ã=<ä•©é.<|jä2wDmŒ?w/gÓŠ¾ÉMÇo+9“Ìrnö(™ÆþyþcŠØŠƒÏ%jý«XUÇÛt-ŒãûÖef·¾þš4Ûh{ ,ßÝ%•Ö«ÔβžÉû~q+¸ºÈÙ )Åöû›|~Ô ÀWNTäómý„ÓdhÙùy1ü8oX$t¡·’TG6Õ«›²Äu#ÛÙSqìtÝäÈî‘ñ²†oqÀØK^Ôú¦!=ìuîN;wŸU„º`á©Ë½aÆ-üoG^ãk'jb-Q‹%*|hSCÒ _·Å|=ÍEkqröX3ÂÞž’™'œ+É5ß'–&ê}~"*÷Ë̸ÉÎ|~×âˆÅh9Ñ8‰óü;çÄÈöÝfq?´-\éà©mfý¼ì‡|š$'5ýZRt~ª·..ºÂÎéI"íÇ1IÛr£uöO²wp ©us®4Wù;Í?=>N c+DºµæÌ tÀDüíýÏ|’a«Hç’ìÛÔ…ß4rêI%pF²F=ò{51AXIèóY?¡ ã0kP•[µ8Õ§õã‚ß“NS…·ýV£]CÓÂêýùHÇ ˜Ií§ÏØf‡:¸TXn‚’\È[–«E«ÞpX èµWæzw°ýréKÏ‘ƃ·O2­Äøí¹`Ø t÷¡wÜ?æωâgQé’T>Ú£ o Ö9 œoBäçÆáQG»[Öó†³Öø å@½*M«˜»Ž?æ$A+í—ÿZèëuÔ ;£¸~i×[ØJR®H=†Z—Ø>¥Évñð)ïJ5–2÷ºúHÏ2Vú¾³0ªkr5x´¶­ˆ)~s *b˜õÏ[¾þõÍIubMœ_ÖúØ+ð>n ƒ´ÐåZVšù•Xê©)pœúæÎ‹fßát]G&S}…¿>›sú\Ç;øÐüÄ}õé㸹wÄÐY•Éí§¼K'=G“N½BÇßEêOѾÞÞ̳‡®0áz‡³¨úÙð¡;cf­ƒf·]Þ6ZIÎ6KIá†õv]ùé]TdY¦‡ocZBvÉÑí`j/ß,M”@(eÇ›N•H\ñŽ_͆ÒŸïl(¤vS •½°dÔ¶¸Ôé/õÁÊwd›¿{PÉ>¦¡ëξ¦LôzÞ +çÓ™Žuõ.AÑÙFì§‚£ÍËâw¦uàô\ØêàO£ÆÐz[Ú¶©ôjíí6zèÛ$ôVŠ-Ψ’±¢íŠú?Y=Þ·F9ÅN>zà`‹Ð幤#–ÒÊE½òaå­òtI©=êƒ9~^¼¾ÅQúlÙS ìéIbÒ:qß­¾¦¨Ñ'½/¶Ò~Èž@ÝP ‘,šÃÊePK5îþz'ç@±\&š%F&¿U´0=ðç»$íŸ`·ëvı?æý äG\ÿgîÿëE6Î8Ú„>›f<5 ÁÁP¨·Q`;lËÛÕr´Äsâ0¬—iÉ_Uê=_WjûÜÝåêŠ%¶‘XýmÜGwÜÿ´‰RFžQÒàsÁ ÈL~Þ/¡/N‚·=#É ®ò‘ÖGö>ëò1}V)rÐ3á5ýÝãÅ÷¹:·ó_ÇQÐ÷´q©Ùjo:¬'6‡úëo÷Ñ£I8úK¡|²OõöQ@#ÓÆhÜP[ÇFF V…µŠQ¢Ðn·g Þ¡ï"@cˆ«¥ ¾‡‚­h@Ãeë1Á/- ]âúÔX®ÑH‘׿&ëPÇM^ý»„C)Î{å’i²yÙ‡OÊýg’LLûö{5$W*9„«¿ FAF[cñ¾˜Šažh*¡g²æÎýZeI¤TÍôݪ‚³¢‚Ôe­oZûÓ;mWU(^|1hƒWB,*(Ž$yfÆbÅv¿ó˜¹µx]/*¬wÖé¶p«Lxš惰ÙÎÛuþ!°Õè_JÌa±úäªÂLc«5£¸[ÉÖ¤¬ßÏ}yk r Ιcla }4¹MšˆWF§áªŒdñá}UûÐIÚCè|îÅQl¬"}rÕúô幌Ê1‰/S­§«êô²b£„rH”ïlÆÔöºŽúðì8?ÄÉÜÓÄBDdxí)øp’´j3ƒó}@œ§-Æ&ƒ`ñl¾Â4;îƒO·Ó?:© –ÎÂÞÒÞA­mcÑìIï—j˜ ³›5ÅÉÓðF΃fQ[P°yþ#ñÑ+¤éRø•…ÎÛ=_ã‰æùQCC¬m?°{–·¼âLîGCo|DRÙÅäÎ7nþ”0ÒôÔÃs¬Øºd‡‰»¦ÄÆ)A·Ç ÏÉæ±l³°v4–¢GùÖs¡Z«§Éq}¼ ïÝç•®Á5Úy^›0b^³áIеR·²uíbrTÞ¼‘ñKH¡qe+@YÅ~™-*í¨˜:m¸YÙž£ku:å°Wõ:w®gdAS(µ8¿uGò¸²¶QŒvÃ*ÜEýþ«Ø‰—sªãl!z“R “Ä{Gií,kUŠ\žžšo¹x‘ÃŽb¿këå¹IVßà¨}°¸Þ-ûÁùë\Çí#ç1¿¡½ìmAX7Ó…S6œRxîïî] i-b‰³ñ{Gß–™‘ZÖ¾”©ÖoÈ6t  nކ€²¿?œûâAÜØôæq†,^ VT ÂðÎ1Gcé\‘<#wƒ.‚ÁÉŽÜÁTéNzÄÄœb·²9£ÁöX¿i–¸7:gí"ýÎ×ÉÑ PMoQå3æNÓ^Õ!•4Ãâ’{ÊÙçãÆJñó#jJ©Ö ÎÌPíçÈ!ì*ÆÎç¡Wc1Î-X¨Ëј—½ÞƒiúT¶è"VÙzc Ó&÷õËgõ”q{ï陵¶ms¸íñSìyJZ? ´?ÂMxæ·ðÏoíˆt‘£i:DP¤MT°« ÁÅÍ–IÑí~S°V7õgU yÌζÕ0“Pδùµ»»X rñÃ Ž¬GØ•$…­:ªèÈŒð5,¢øBFDvI™(dSÔœ›Û(É_š­ 4÷%Ä„¥”ãD6µ¿¼­IwoWØE­tyD¶AÁ™†hì& åà}“]îq0(0"ûé4GWoÅ[èÞl²O¯ñYg•Òšp”8úYçHï÷¡ÏâúÄ€ü»½gÒˆš~ÌÿO°Y!?×^/°oþ~®4؉Áixž^n/€°ç€";GK»ñíìi¬R–¶¦ÿzòoØY§Ð5÷E"€¯M"þõÜó`îØça væêÎŽ–¶æN,öŽvö GgKøÈ0áÄÜ­„…‚¡AAQžÃIàŸÇ]üt´ËtNpNç¼$çy@ÄgmibtÆbo•T «KÐAI¢¿Žôÿi•í%Ñ>ÿ©»3¬ŒùØÐOàªD¶sXºkaÏ=-œî6ps-¸Zþ0£7ÒC¦ÿûÁäÔì“¡´ò•Q€1·,Ÿã¹œášdu+ÈÑÒBÓ·ŸÊb.Á¹&ÔísЙ¯'àb®——Ù+8@Ù…ÀÖs\A.È\%#WKóßeŒlM­/š gð ÉÔ/8Ð ß9x7d¸º³‘3HÑÈh³# GK`Óá 2Õ²¹],æá:Z 0C¢QÁuÓÀ{=1s™%¡ù¦WvÎ~Ž›%|=®¶#ð/ðE d0gG¸Ë°=¾é<£dü™$Ýí-A¦—8µ3¾ÓH¬`v¨àSCòrþ¥ƒzó>Ò>Ðl-ð)Ú$-,¥üéðþóéÌ;ÝT>O7ùÿLë¾ ^^Ö0;æ³dí¹òBdˆþv™êv.Ž&fŠ„0Áp9pE ®Î8•ëPï\Œõ?˜ \mCý•Uþ¡ +ngë rw7²¶662±º|ÂhÀðh+ÆMð™í  ,ijéldl öù. ;ë ׸3x¨É€ÿÙ»Š1€_ Ÿƒ»k@‚_÷µà²Ò¾2 ·ÆF‰>½su¯'ëbî¦Ý8  `Šsžã¾1†Ìu¶°3ý»é×Pü“æ—Ǻï̾˜[PPwÏI˜7½–„¿.€éîô°¤sUàÒhÓŸöRK„:¸?ip¼–´ÿdw.æ+ëõß’ø¾à9>‡çuù. q #[s‚¥“3ÈRO°ˆÐù½Uý¡·a¿Ë%ý£ª‹Fêbi:ooeWõÌÀÎ(HÒ”ŒlìÙ<4²„ؘÀ¸øEÀ…N˜ö¸*XÝÈdú{ ¹˜Éø«Jg4ðY=ý "tÊ:ƒlœ€¿!°ÂÂb?p¥ ýWöÿ8W*DøY[/s1ý Y€«xˆt)¤]z¦äÇ £šµÀâéNæÍ„D¾*Fþ‹¼H€9  Œ@§>G΃D>;û³v±°G†Ë—Kø%Wÿ!ö¾ºŒhc,š#÷¾¤3j—_ðÁGK¯òRä_Ÿ/†6XhÄ#=ÇFŒùô îÐ3_)Fþèß:Š øŽ7”àÑ BãuÑ¢ÎÀ~ÉØÅX2Œì!l!\¬¾cË…°Ùâ='æíç늷°´6uÙž¹©‹¥À`å³òÖá‹î¢ÈÇþ)—OL=y‘GÅÀ2õ ˜ù’ç¤UO]WÚïwm9‰Úšþ¿ØËE:­9ºãŽ 1®s"[gÿ;‘GêØÁ‹nÐáM´¿jÿÁ¶ò_‹´uvôPA®Û<㈀I{NH율û[ÿ³¨ß?/–§f"ݪ Ø]ðû´÷?Ë»|À>[mFM]AþëÅ[ÿˆôþþ_‹”AÖ%nëà"¸ë?'¨âätyϰW~©.ïÀƒ÷l÷×-ðwÁí¿òG:åÿÑ3ŽÐÿ› Ë{)ú#‘ØL`Ýû#ø‡»¦À‹ÁµŽŸp™I   …Á“F‡¬ÁFÎFó¬Žw¡­x£€ó@ŠyRvŽ6ó„Ô%8ˆ€©ÿ|9ÌU‡Ì“vŽ–&#›%Û7Љ€ÈH Šêò†.d¤¬­½ ;×[>ÒnÚˆŽÞÆ'ÈÀK·2½=Ò<"<ð¸ ÁhŸ~ô3ñ=ËàÀ€¯Ø!3¯À†Ø®š}\Ê{$ð0è­d´²‹3Dbâ)¼¶«>HõÁ‰*F¶ ë‹J…¨â@ÉÁƒ »ÐË€ŽF6 ˆ;õŸ4ïrï½>-¿?… ý+̳³³Aˆk{0:wÎ*ö1À3‹ÑWÏâ÷‹© wi>Íí‚ÏL$]‡ Á°ÞšÝ²QƉP/÷9,EÚUXE#[jQGG#Ë`Y’?+àÞàƒ+äcúud\L-´S”WZN~š¼|×£k€Ü!°±'nZ¡ìÅ?ì\Ræúl#G„0™˜*Î6Øòíâg¤2µ®ä_9†.Ý’b#ð(/öÁuÉÖùùÝÎMÀᥡ‚Û"å•è¿‚½3C7‚ óÝà|2ÀÔÑÈÀ­ÅÔîšx#cHñßH·®Ðð-Zð|hŸçuéKê«”[g‹<*8Ü+ôšpȶˆøÊ£ °ÅÀÛàvþ&òJøïˆXÚÑBjp‡À ˜û”ˆà ¯x~]¶ „´M]FÈŠöÜxþsp¤¬+áç‚dq ‰•±ûÅu*=º¸Ín眜¹’kÊ9 /¢«ç‡)§rß|ø/„œ¥ð Êxg”µM ˜ÐKðââ®ÿB†"ÈÖåb}k“X@'ŠéÀãÝØ±k bÒKû è^ÿ‚èà pÏù}éú" wA€æÉ èB7=¸Ž¬¿]Ÿ¯fdjiwuöOÓï²—›7Àü>]ýóX™÷qF9à 0ÐÁC‡’î@øjkdý÷yíÅÓi8F0óľÿã´Úébìï#Ó¿™’í)ó]b€x†¾•€E¹šz13_ö81ÐRÌ?2 áW3/=‹5Zt+®x Á•°ƒy1Z ä˜HÝX!DY‰T[9b@cùÿç±°/§j;ZBÜy„t‰FíQ862¸sMÁ½õÚõçÍtŒð¸+ÈñO3%–ŠM=š>JÈDÄ,Í%@&–6¿ õì7z¾ÀÖQø@ÃþV"…ˆ–t`r¼]¸Åà qÀù£)! ÿ^C.çjŠ»…Âó€êü.-®‡3è ( :æ×@céÀüìÛCÅ-Œû¿R MXê5U“9s,°7À›Tóç—%]¬]~×î]áŠõy­Cj øÑ¯×ÔsU9ó`%|ZŸ<`¹óXÒ ð”쀨‹íU‘"ÚœÂ2Ù ðÑã?•÷WA¶Ç5ÙÉ böü?‹|!²¸ÀÎbyˉ£†PyëøjûÑÿ¤È ä²5©{Ø:¹_ÑÚØ÷³=y˜õ`%êI ÿ’½‡zWŒÀ-BƒwÞ'øœ£åY¾ Rçÿ4t¬s†¾†t½¨ÔHÅ÷µ ÐøàYüЋ¾/j L>`\LÎÒжæWèOšâ^@?«>¿Lyr!ýw±Ñ…)â¿€/^GÕW·¡ÁÃõŒpÈÀË«èPMqIÜ€IÉ >13ž^Äüí€/i£ï~ûª7p•>ÊÚQy—7±Àˆö½&Ô*øî/ú"äõ×P½DNÎ 0NïÀ«ê®#ãÚU‹ŒEÁ3Àø5Ü×7tê…&kaäºD߇‡Ø$À rŠ~S åsˆký_BØO”¿ëHb9‹]ÀëO:þ[1ò ÚÃZ­µ\†1,xý)|Ïÿ"årÕ EfÛ ý‰ÃOÅ÷þo¥A,=e‡ŸüzöHKxðsã±ÿVÈeU~^^!€XðZД‰ÿMÎåÊCÖ/ôi |7ï7}=ys»Ñ¥'OC†Ÿþ°KqÕMŒ¬¯€âjrêÝø«Pö|#µv!ôŠÚ¤[„ eB€²?Üo¤þÖå¼ O þ\Ù°ÿóéle›Ü9¶D¦ Ç?–¶Ÿ›^›ü½>ßK´Ý j¿È[BX3VJê¢ÎjðšaÀ׌×{—ó.MMh5¦ÏëÔ;„?î$þv Ò4ùó¾F:`ô(àJË#¸ÿϱC¾UòªàJí×y´ëÿßdôÇ 8'Ò´==Äß²Cdü•ùS;‹þ®¸{©šðÞñY=_%x\™„p]dkîlq¸3mé5Ðìð¬Âg ˆ`;[ó«}¦ÖßPßô^x›]7!$öÿš]ó¯‰2è¾ð6»CÒëÉ‚PF ò~èÃ*øá$*=dî{°Ë†€]iþ6 0ýFþØÜp3CqZ™éÛ;÷ö\Q:Ë•HˆÙƒ«ÜW6Ûyöß]o’íDæ: Ò$ðþ^ øÏm3ÿynÓá©GìÙ áHà~ú÷…ÈŽ  B^RÏŠ&µ‡ ÞN"Ë¡‘¯6¶Ü¶Í2:8ò¬ øäoÃW9ºZC*8Jšmûöjâ?’ar‘ζðltçU$ÏòáðÐí âþ× ;gÈÔÓh—|ȶU¯!èbèZ¢€o °F8¡¯d7ô/„^Ӱ¥ôE¨¿ª5Ï{_X£ ±ÿ¾ËÁÎÔ¢= W3 ëžUªƒ×%p_?Zšœ{RçööêŠø“¡Wñ/™àoÿËyöЇ¹ÿQ®öäìD‘Ç\CÔÅPðg¡þÍN¼²¾Á@ù8$åBðE£‡‚?Ùîh@úåÐ!a?Ô¦øÏJرæž=^çÿPK ;G8Š’:Bc}WEB-INF/lib/servlet-api-2.4.jarŒ»påͺ=œ‰mÛ¶mÛ¶mÛ¶=±=±mÛ¶3I&™ð˹÷Üû¿ï}»öÞUÏ®î]ÕëYý`uÿ䥀€!þöóTbø?/ˆ¯Œˆ²„¬(ü߇€~ û\­»[ù²<¿ ÿßa2²¢"JÊ´2¢6ñ VýôÈ!;@¿áž€²\U¼OµØà)ÙƒÇu2·õE³’‰]^nbTBºrïû~³S1k&À¡qÔVSìÊg§ÓRx%{¦9Ò:Nóbä‘zðé°Ã‚*á€ÝH­©ËéËË›™o½ðn8!´ôËîý».8W]Óì[$—?$¸KÌÒLY<=‰˜I_ÓÙ¶Ù³(ÀC¨ÌÀoNö=4ÌÞšŽ&ãj\~Ĥßy¼¶þfbTE¥ÚD\´V|’)ƒ¤vj‘1J• e–ê£w#àÖf$zpÔ$KÐ9;É4âhócX:“ì÷Égí‘–³ÇWŽï±Äw€¯·"| ftS²‡aAÒü©6ûöWtö:VÚ¾,‚/tðþ:B涇(–²_>جðxH˜ ËÊÆ¬AXè-&D©ÜØ5·"¤€@‹Fw†ÙMÜL/6ža…ñ¾Lù,S^<ü@A¡|ŠD¬ïHß‹ƒ!®ÜVŒo@æèùÄN}õÞÁŹŸœOE¸º6±WÙ‚§¥ yôPu‚·gV"ýeðÕGÃÆƒÇûQ´”±$Gä}ÿºêväo›_–ÉתñÿÕªílM-Ìþ{Ù6q}²_Ìýì“D±(ãñ`t?ã#Š€Hâí[žJlIµøáqûÍ|™3,Cæ×§Y·_ÓÇ3pü>£(ß0H¾^]´v‰ëtpåÞ€±)–•äT’„}7:bŠ vfâQýÏ~)‚M©4Óúw†WÈ&˜Å_—9ëyà{¾ÏnŸ=dµp]4»ö÷BêQTSIµ'ØU­ã•¥i*.£@ÉÆYRÛ: ͨýW¼·5‚~ºÛ¦ÙRiü§yÕ䄨ó`{è[SÑ ¥§åö%]A÷ì–cˆŽ÷d €(pÂ@FÌÄÖÄÑÂHé¿ÍÿÆ&FyCqAY§”&8™¼•†Fþ¦¥ <’?ò@Š< ³”8½$œ÷åTîŠ3ˆ} ƒ¯Wì‘í ç‰#âŒÆÙ{´íºieÛë*ÉÎׄ>šŒ’“¡¢ˆMs.„aÓ:ÿªU}Ër8¸5 y€¤E¥¬æ§>ÓrX‡aÇjˆù:Ê@4ïš<]…¾t7 Ð z®Ê¤ƒ#4÷ì䥤;…ÖÞ‹i&ç!+nâ#½dOÛ œ 4ð`™Òl•Ë&Ý»¤µ»ÿJćDŽìjAUu†î¬™à×¶Á ‡)2º§»­SÒ†èr!!¢I ö†çPÝHaö‚Oצ){Fü­³.›ÓÈ뤶iÞGøªt`¸8àµa“¯™yÁ,, ·šÈÈh)Ùä>g‹ËHÝd4–” z¬çqÇŠ•Ê螬Pr¾º«ItNÄ.vf¿Ñ}°âù jª]¸2$$ªDO§Ä``¤ÄòÞ#à)-•,ê÷µe©üª`råÞÀÜÂH¦HrTs1UBA")U6×ÜòÄ·Œ-[(¬äÀ<åÛº y&E[—>Êu ^‹ðЋ2Ûjƒ=Åg+q}þ‡ìY{ÄRfìA‰"ô¼¹Ê ÓÓ ™wS›˜ LQú"ˆ8tAµWfîáø@3Yh4ôXfK»ó†ƒµ”nª ”t*!7 •r²"¢Ä“Ð\6ÝŽÚ*6øÃ 9•ßaY™Õì1çXX›Ú&èoµ`ǪAÈ6®ÔOE´wç5±Ø…=Šdýásx§èÛá |¶pÕˆ˜q³´2Lþ%‡dupàùaÃeÜØBtÁüóbsbL xÙ‰^‹@7jpÄ¿yvÉ5ÂÌme®ñ“) °û_1Ñ4Î &XîµÃU°ß-‰fÖ<è@TØ©úϽ»jÀÅòS«¨úY3-û쀢ø»°¤ñªKýÐÄù fâO6k[¨ò ð8¥ˆ穊2¥}ŠnÝfµS bà{Ý _À4oäVèÉ©°‚ XhŠ™óu¹ym»-=©ù±îÔÁ³§Ø$ÛÐê7 Ëï$d¾Ü_¬˜ŠWúv¯‚ä?Êï³^ŽäDVø.ÙU¶l€^€Ü¥9 !žØL1© üZS#]§ +f\ö• Š+¥Z£áWP´-QI0ŒÍÙö'4lÁÏK×/0c@XY,\ÞÿØÓ¡ý*k_‘îÛ×¾&ù‡=-mgd`­äìhakæDkïhgoâèlaâd¢¨`µAï wȇ}6Zž” ³Ëí.1>äÐ0_šGnöÊŸÊ-Q“óþ”£mf“ÁÀXÚñzýÊ»2)ãÓ œŒ[Sº WGƒ°¯)þaLúT]þT2'¶7vº·¨§ž |u î‡úf%÷c®1k—3³?Lžþ\©0NppŒY>Éü ßaýŸ,ÄÑ ®H ³B•¸QØ|,m+—=Ž'”ýï(Ë2ögK¾·'wñÓã–ñ|³ 1gBýpWrûeÝ‚µÇXÑkIŽê)¶úÛZ¼I_Rx¦„„ƒ~…d£>ux?áI'D‘–T®3èÊš~ìag±ÐÁއkÉèøj•àù4þ˜è-Ët¢56?nâUË£-Ü)Ré†qFŸ'нK»xóçÑ)îþB7Ù™!ôhì¶w|/3EkÄÈt;ôNÈf§¼#‹ä¸D³s?ù$’æTdž¨V”ßCŸ‘¿‚r ëÀ{mXH&Èqnr‚à*z#®E®fΤêçÏi´;ÆÓwZ(vs›ÁŽ23[[ÞëZS ;Ø×dc+p¶45|)ƒó›Ý§‡û[bå „˜é~‡îÑGö‹é½Ý?¸¡È…µÿÅ è/nÿ[nè™:þ…–üð>lÏx '4ì HšâZoy/‚"1Щ ñd?tã¯]ÝP†hÞw|EÍPÚdÊà©LO&3œD¾)ÉÅVùgÝ=ãX—£$ò…Pa÷÷/zÒblÝèÜBI%–ñ\ÜÌ <«-˜„ÞÂ䜶J ß’‚êXÞþR*bÏÀŒÝ^.ãaó — ØMÆògwjŒ N‡ Ú(5’ 1p ×¶8*ó†Fàœ»ãÖç‹•Y .@ÉFW‹YdZŒK]sÎE»§BÝBٲٸaá`íä ¨£–ŒÄ‘R)øvÀ¯ Ë&¼ÅYTIðlë`*Ç˾¾´·49¸ö[ @NƽÄx€·TDšḩùwCûF¯O»néoÒ,´:Íç”™™æqMþL¾Þêï0ß< 7Á¾WEÁª“YìwãèL“ŸÝe 3†ÓÙuøÊÃÀŸ ]*û‰í×rOÇ~ºÒ]‚ÏÓ¬ß{8yˆÃAän(¯¿TD„B"‡€P¤DR>™…%¸™ÓÞ7îäzP$eO…%‰wµ÷—÷ƒG˜^à.ôtA6 öKÆT³ƒ~}ï§Æf.+Æ ¥$q{Þ.2m•6‹ë'ÁÖ÷Øë©_V†±H‘:”¬÷²Ç¬§®{üè1Ÿ×ŸOc;Ö­$Ð~ÐP·C¡A(i^&šºÁ$|íÒ=óµÎª´9ÉÐ{ÇÉõ¢‹-?Ý5ª<(`óC #äÇŠÓ31ÃòˆÞÏÎÌÍçW7…FÉýådKF@oÖ´ý?TœMÜÿ§iSRPR@þP•dV.jœ””€ÏÈuwœ7MŸsôÖ»OkÛ”òzB|oÂ}ùö^VòcB  ÷ùØûÉ{'—çäò†Ïïù~Œ"¦IÀoÒ³8ƒ¼òZXH2›µ$=Ð)G*:sÕÈÔó4"EžïÎm¬ü¥åàÆk{ÊÍB.”?ûùõ›å«8·¡½‡qÚŸçHr"Âb¥¨¹JÉ£U‚¦‹lE7’šêyÓÎ+§J€ƒ4“Zv¯¬Ü#¥Nâ=a-.iÛ&sh÷ïÓ¢ŒÅò;4¤ ¥V °-)»j7ÁîF>$ ¹Û6ŠCx§,µ[·ô»~7 «I45 ·¥|]€«OöRÅSPS²lÇ|˜ô9â­EKÔá݇¥°h?8¾f”Èæ¹“ xûœîA^•úYȪV"îêØf^~ÛQõjœæ”Ú­ ¢†Vnió©¥ÓýEš²F7‹õØNñZjÏuÙˆghß·¼¥Üà—G9–§ˆ‘n‡Û΂F†”)ŠK?.Ião? ûÚ¹ì¾ûª5—÷Ãߨ‡ÃL’ÃZú5lS]m½Ç§ùÙ’ŸœÊo†¢FÎ-ÔbN€€Lô=MȵŠ<“Ò\q`¨' õ­þ"Ë<Æ*‘ “ˆ©Wi(‡Ô5œ“¯pLxFSØCoœ¹öÜѹ±"XîÇöNÑ>¶w!•G$ÍÔ¶Ï(^èÞ18Q´´yæ3m×X8¯Ý{ŸïPeœ~PF¤ï×ø*èÿ㜿 CgWÛÿ២Ž <ÏJ­ÊÆüd÷DÜìÔæJ/¸à¥Äeß­ÏRTuUGݶΛˆÄ¬_Ê”®Œø¡éõ$‡ÓñôöLí€I61Â/ 6ð±|_B Qh¸ 4»PÉ6›·P tG)[ˆÕz¤Ð"µ]Íóìõ}lžáåp£ŒÃ„<ÕèOq<Ç•–ÖÙ,$=ë>±‚†Uzz‘$åÚˆâó’)¬í¼©-±B R#uš– {f ¹ãøüFÅWÙxý ¤Îc'-XgÍó Œd\4˜¶LëüVkÀFÒ×ß1é6äkɆO¦ôv¾KÆGþÕ„Ù‘èÈ(ÄèŸz1/µ€ŸúÏJC¨?X ôæˆ FÃØú15RduÆÅFK›&Øè«™EÅ;0‰Þ1.Œ™|%·¦ÃÝb‘ië0lú 0ãçH 2¢‡â£§ø ÖÊ dyùEšÔ‚sÍ2¨Ç–Ïém¦êbrHo¹{Rx¨üêþöW_¾Y Y¼_þdúÿëKi '翉Awg¼@äWšñ³`>?Í£¢ÛD+Û•4Ö†‚¼Þ(ŠÏ¯ža…‚ÛÍ7n_ ÇêY ÓëáëÖþœtönôöþmŽÔÝ$Žjç¸gì ,?0$‹öR›*R}Í)…´—$=ñ,×!-j%ø¤Qè£Ùš¸åBÏé¬k•r¬1z¿Jop[â‚€‚4 8Â«œ¦&J¦õرæ@ü15NÂzªz,8Ô]ñžT!v+TµŒwÎÕôšƒÂüù,TiÐs<_ØV²ÿËÿavˆ‚ŒÜß2vÔ*à2ð`úÔb0©.ƒvx.&~k‹K”dV2ÍžÙYÄ`ÐÝeã´-"WúU§Ï=çýñëÉ?šŠõxHfD{Dh„謰à/ M·ý©®¦ƒ1îÃy Ó'üXb½Q]³AyìAºlƒ?éR^¹\>â¢óá´ØNá2n°¨Ÿ*“è5+çÛ3Ä^‹#Ô²Iþ´Ë-}öìÇŽ(Æ­Ön¬)*¡/`p‚MËo¥5ˆuúy{À¥Ð'Ècu1F ‹(#Åà81Ü¿‘pɹ™6 ºÌ/óX[«L'bÊŽ˜ªãgXËd¿bJG’Œ¿$£²^f‘¬vøÒ)U™7а¨=À03¢ºê[ u¬Á¬SÂ:Vkå‘xEô£5o,BÇlh޳·!^‰ü¨èù«XJåS[¾,¨//Pþü•>qm_Y_¸²k™  H A&Žþ@€~r¥)!ÁÕÕ+mIŽéèÜa˜ˆžÁ2RMgëiäT?ÐÕ_ÔßÔ5kHµ5>e©@¨ÎZìB)=,D’c &j½Ûå—)‡VF¬[ð4ωrâóå)›lº&ÁO¶Öåòº#ãý$ÐOÉî*ª»tÆ|žŠ©ÁxO:*$›Å‹t:m"xIÛñë9Åy{Íûó·Þ×2¾?H5ùµôª¯Kü¯–/ândbïla÷w}Þ'qFö«-î™âCaÏç·€LxîE@†-Ã–ç· 2çà4@AÁZ“åç˜B¤AÃõ«H×é€0qã~ºÉÂø}wóä¯B}A¾›Ä}9j¤;Èk¥¾x’ê¥Ûz 8-o‘Ã.4rÍe;³Í÷«Ë©táä:f/²n,¾z ÝQk¡|D«ÿÈ+höé©8>óg»ìgï]È[lRÛ­:0´ÊPwÐ5Ü+wãÆÜûUÁÄŒà^›±R9Ͻ]X·½×żבÀîCrÕ· ÅTÎpã©åmoFOî7Íaéêa·f¶Ûo­Ñ;J:0ÐÈÙ#þôЊ€ZuCuo?(h%¢™ëy“r£&G‡±8×O‹—žáƒx¯\_"®r9 ³ˆîåSSF«­€-ùøRY¶Y~Xªgþ„}Cí>ó~ôYââEÔªaF:™Š5åà¸JÒQsDÝAåÉÙLê-’¡U_".ÀÌó3²o~oò• Ü©†eч!ßcï¸*K–žƒ²Í‹Øƒ•Ùð_n56L÷õ)k¬;íVd]Ý£.]©ÊUÎ?L“-Aü• )x,×õ_lðù G¤ÿŠ ¶ö.Î_}¸‰Íߣ‘¼ŒÜ¢<2O‹Oƹž*<†<1)é‡~@"‰¤ÚPø±Á8ÙËÐTgÎ`¼^¼]0üëÕ:‡ÂP>¾=>…™ xÖáÕ¢›M§Ÿ§ìWZ¿=u­~4VÓ‰V½áì¼Åè$v=”Õ(©,ÀGÆ+‹>u*Ù‡‹=[53,ƒ–™Icª˜þÓô¡P=•n$8à8Íïýï·½x§Ö=µN=<ýøkXÇWÜ {×P!«LF GCÓšðÔ €gUÓ˜K W6Š%—ݲÀ²É°IÙâ»Ýœáº¸¥cyј\8¦ ºq1!g=CªÑY”ØÉîþï~¿€•J†â”>ñÖØVp[›ÖŠÜëøyµ(Ógµã&É ç4>`k&SqK‰4`qW‚¶¶J ÿÔºdLó³7X­Â¨Ÿ¹ ÕüµªÜS'K÷ãv38Á¶Á¦ìoõ ¬(µÔóýä¹*Ÿ)s?GçìXÖ&_ÜžßF-uÝÞƒÝ. …+; Ê%dzˆ¬YJ¸N!CÚVßûá m_AбvéK!™B–ÍާýŒòzóó;-öäÛ! ¦‘í—íWQ¯ýorœ‹óŸ^OÑRCRCù Ó&Å£XôG¥°X²Dé#gögGÑ:ƒ¥w·gðüÁvuÕØýk(ìW±KõhEåËjÓË¢oÐ/¢FŸê-/F`ASU¼i^§éËßWo3“tŸÏèüØzã§ýÅðº)¬I¼»ýî¨j‚é‰w˜5’­¤š¡ÑŒº#Xˆ¶£æÃÑÒ²v¡y¡ôi¾Þ±1æ¹2¹S‚àœ\Ô Q1}¦22 SŽàlÙùÄ}ˆòŒkcDh¦óD÷€ “í¤ÐMñrÆ4Jt‡rPÌ¥‘!‰Å¨UKäV€…ž•ijªtZí ­U)‘&L¥0)PN¡¢3 3§ [˜È·.x¹ˆ·¥‘N±Ñº³ÃR?29ʧ11ÁhŽ•$Y\t¹²|­Jt\ý—„%˜Ô §$+ï…×4iµ’CKhŠz„–]ÙŽgòƒ2-bS~"êËLw½®D¬‰Ð˜!ˆš™Ÿ2‹šÇ—ÎÌBþü½”Ýl}¶ a2^ë•9ÖM2©¹Ð™Ñ@u…[.[È 4LN·ðË1W43mà—cì0½‰iš¾|ÑlFö³ìô:ŽÌÅf‚mÓH(H‘~¾5:¢*òfE`Ë]l Ð)ꪈÈ”ˆ•(Š\.·¯åqx°Jg؈«­  ‹©US^¦åô¼4lB²½Vس|Þ€ë\T3P¹‘“Ôb†fÔê{x`½0KUå~êØüšªÎd¥¨„Ò-!—O´Üê¦SÚT©5/’¹e*Š1¼QÏ7V V!kEëyëSœ¦5È.Ȉ CGàŠ]'o‚Ùß=˜ˆ«]ºŠï®/¿F…«ÛÛkTˆÅI<¬úP¹HP&ÌUU ˆË|tO„ñ³Wª\Æ¡l]¹’¼®x¤´š4Ë‹Ž›œç´)ôí·ÛØúº¨xí'iÆevV¹ñª“+ͨ–NºùÎë¿ÿZÅsÝ:¹®r£¼ÞÂi¡‹ïIêv×y€°ÄʸÏûX¯ zH)NXéØ=ró4OÉÓ˜Åç ~Þv½"Ájd“+ˆ«RtÉ«õ 4íC$¥ó}Æ[O1Ï=ûÑ'®TR ¸ãowÛûaG¿í”ø áWɇØê7â‹V(ï×û‰ÔÿÞg>ûþ³IõSÈzBhn3ù£—ˆY/ ×ð5I½²'ÇÍ{ÿc Ë"'oÈ>!0V^³Ð¼JÙ,Õ2·èUÍY‰]jç%ªUò3Ì¢¡°U '•÷¤\÷|Xá\ÒÿR{@JÙ Ô!{Ô×z„¤SZ䵕¸T»›ÓäI!Ÿýݹ¢ÔbEŽËìÒš}ªU„‰omÎŽ«u3GùzՇܻ+ªÖ¨ E˜5rMÈD¥‰ Ab¦·!)fΖi”ÂIÈêÌY>à„Ü>Y±v»ZŽì¬h€‰#¶©6¿˜¶Îz§5þz½ï—2ŽA¿+ß êm<–{ Ô3 ßÕ·ã¯xTj©ÿ}«×¾Ê¦šv×â-Ìý«÷,4ºc¹nä-½WŽ»Mœ]«Os@í¶øc ˆ[r½l!lç^i\rÔ¥S߇ìÍGœŒ™’cÝcÝ£R¦ëxš‘3/Q=dVç•ë‡_"âgAòÇvr…¶”Š+,?O^À¶®@”Ž8x8|?á¥@íy[n®saKÇ\¡°‘gX—ÂxFfòÅéëÖi—ð ‘çfÐvÙ‰´ÌŒ…ŽcUa íÃa>±‡¢¯‹™elŽ7»l/Äsµð>ã_c/¥eÖ°Úð*òbºùsN£pªÂTýZ8kT‘ Ãw´‡Éƒ7n]}88#â²Ë~†û#d³˜]›}åh“§Åü]ôü{´VÚPD€¿êÇl-Ãwï4îÊW=‚™P‘ â…éiXÜÎΑ٫ý½ ö¬ÊÕdBPtƱåó"}ó_b ?Ð6òž ‚+Fò+ùSòµaBŸkµÏxØæO÷ÙOdØ—)OZgwïÈfkƲã{^<#P+!™¢ 0ýÂÝy ýZøÏ-([)d°NåÌþ¦w!ȤµÊ¤Erœì5ôrY]uå©~~Cü ô‡#ÿ¾Í®!ý½·ýû8p—<áˆ"ËQP-ÑÙ ”BtOòêÜaìJà•õ6X‰‡æ6ëfKÞö–ä8:…¾ ”J±R¿C–¶[ddÂålÃùP×S†ôb¥Ü<9ÚÉÊæ’å$>7A––¨M§š8ÊŽüGV€Øn«óAÚ—üAž„ß÷aô%‚GÏýÍ2™öÞk‹PjÀ*†´j–a¬Oô-"gœ’–’!›Ù¸ë½ÎhÝç1—ûn š×ƒ$‰nŸ¿cO¨RM7Ið:aÕ.T×GÄó¦H8=ÐsŽh¯\]sMÄdhû…WŸ·U‚h³L˜1%Qƒb" ¬ØX´]“›½õÙ#-ƒ§O™&ºI,Ù š`œ2*å}°B’ €×ö;GФK8 Jf©ÔI'x¨‹ÛQ†Öƒ/aENÔ%nWej®ìzF²éÓ ¹$y,ì†öÉ(ýFÝìV¾‹5Ødq‡».m9Gæõ¿Bv“Á\TòSô–ŽDçV˜/7xQ/YW šQÎvŸ9ûDî|þCÀY¤”Nÿ*'ëþ€ówšþ3§XqB¶Ÿ™øhð) G¹jËÀ{ðtÜœ0Ô§©ŠBd"ùV#S\ZûoÒôÝtcbž¸´ôB—Ót†ÓMŽÇ§»¼A°êÂliØ#2«âªñ,wå†ã‰›ê £Î„U&Ë—îñøSMÛ[˜NëM-øôM7n1lúU§IاZ4Sšl¹õÜ]œÝ»07BçѧRrYÜF;ò” §‘4ʾ÷¯"®âp½ùh™f'áÂ\ ©E6,Ÿ{ùU=Þ€þ­q‚GC±ÊˆÉ:º6”à(ì§^¹^1BÓØPȹ]·:æÒáâ)¨Íôâz€Ý=“Xª º¿H…‹q]1QDr,DFt›ÿ4žX,{Øgûµ"ˆ§/„gà ¹ŠBóˆÀ£a¢hŽêScjgv½Žï7&×—pŒ M¼;²âŒDôä³lÄ3hãú‹õ5¨”ô>ê¼êwi§Ñ$MÑyž³Z޸ѭ"ŸHÃL†q@Eë›*¤žâáÒè¨õ̂؟´¼˜ºªU)Ã]»4#ÿIÚùÓËm¥ÿßAŒ®+(íÿœÅt&&LÍ'*$'/"‹‚úüË#™}p¥kÍÔL5ÃjŒáQ|6Br¶hãpüDyYCFñh*öžFrŽ%&²”°rÞŒ!’rrO|6zÆSÄ#ätÒ<%þóG'ÄûùÇ÷¤Å$)tŒÁ>Áb’ Ž}²ä ŒôŒôߘè¥Ó5Ð1ÔÑÕ1Ðý™±’MÁæø=`ñÇ{!þ8A®ù¥ö…‰,п©«ÿŽËÿÕvÿ[ÛÑâCPPÄÌLwï? 80GèZ„I]D”"x£–a&Æ6óKvh®Ýk`º7ÝÞÈX{öþ/Ò‡Ò3*×ÑvÂ`d1606£gñ=xÌŒ.q­ócUðØÂI_—ÁÌèzý¦z^­ƒ> Þk|v³¨¶âð>U6ƒJÉ„îÓ|Je">¢{y¢±Ý1§IŠW2Uúƒðª?ÛÆä ÍÅä2º‰¨#Éó¾£Ñe,ÞÜÆ4e6Š&u¯J/pßd:ëkÅÒî£uršNz/¶ƒB‡™ ˆ²1Êdl6ƈ|\D@c¹Øm”^¥ÝÌ©Öú\Q®a³´ùmËCõ­¯$R>O¹DO$ µ: Ÿ/=Ç!².>&íILÿ(M\YRþTÛY©ƒ¸^,˜•|Üë(Y  ¦%˜8BN?á{]m"J›üoŒùuöË@5ù;HoL ‹ïÞ§IDG€7àÇx2·DFZM¿@þêË­"·ïÍÿI%ú»/ÿT‰ê!¿Ü)lÆ‚ƒjhd@U s d­è³(" L—–盂·+áf ‰e¢ïþƒëÕ}û@°Ñ‡Ù˜W38öXi:#c}î,ä)xœsXÄãB°á"®†÷°jwPzKð)K‡x~T}¬R ì‚y…+Wj(øÃŽ91c/ØåôèçtrUõ)}þþ!~êÑ tþS³#QŠû Åg€|½RSœ*w`¦~ÓõâK÷ýœû"ÖRn¥åW©¡ @ñV¯æh`oÿ¿’­ª†²zWJDR(?8×~™€(Âf ?¸@àÚh0~””œÆå®§gÿ~`Yëþ/ ï‡)018²ó91žî×k¸Û-¶¸•-& Å% ¼Yµ%µ–ë÷óÊóß;x~ßìôJ걜(’9íYbP;»;ôÝ áÆ¡aƒ&ä Z‡w”1¼C1¸\B± Ù0l:ûnI´ í˜6MÝÃö`: o:gìÓö€Bá0x ŸÙC䟙C¼)ät+Ç*èê|.+8ì¶GU‹Ùì¤ø² üJîPÄ$eÇø(ë Ý~Ïvk4´àƒ´KÆf—¥ÜÏg1ܳ>:ǵ¥ZÌdêFl(˜eñ©U@^j¤>uš©RΑœ*á/l¬H{´cF±™ÿŒ¿ñ*öž*-~ 5mh>CþÁqîäS_3ö¦bÁ ‘e” ô.ÙÚ»Î~<”1•Pc=E·¶†Pªšš{–¦¶ïEîë>ý =‘¶nÔ²Ÿ½Í‹ã%§‚Õ¥[š­¸C‰Å·Yg²RYr›Ñ‹©;ïâ}öl4OñℼºÁFYçé l*ŠS([|ŒTÊ<ؑĈ…)½wOߢDÜH-aq¿ÉŠí:t“…2~*´VXC>SF>±u×­±Pãp»՞æ åöÓyæQg¢ DU‘ÊlJbûDåM–u eÿŠbå~`ÕÂuõ$µ}51‹G¡ÃQij>&©ÔdíñH>wh£t+·n©P¶C3¶s¦ß§+eýá½3:¡auwsL=$Æ« …•<§ØRV“ETÄ‘zõ8‡Z…ªDNƒ. ‰Í½^5ÙÂ;õÔ…v’÷h,R3*‚Éz%kÖ<Ôšy`×yºÚ#•[Å0J«mäÛ²Išø¥v2åFƒx•n‚lÙ[lLo¨¹ï0#ÎÈ#“G†ƒeórè/ÃïAîó½Jîë½Lî˽NÜöÐ#0Ð÷À¡0Ñ»Éhöë½ä#9}Q ÃîÎÙ‰fÒ{U¶Çè¦öÓ½R“nßÐ`´÷ÛÒîÔn+¾%IÜsOíï :è|€Oè[,[kÙn}{|á=Q¶J<ÒF=WS 6¹87(Lª×­È׸̓۳%‘“ƒ2‹ëNÇð¼Á3àk¢-Lõ—y‡Ãõ¨ø>ë˜ßñømÝ÷ ïùÛÕ“EP0Ö¬ì3ûú-0§9R»8–úkP½?PÜÜzV­ÈˆF&BM2Ì:¿×ç“ùg@á)6´y4=~B£¼Î±4ñ3ˆ-bXv öÀ¥ÆÏ {NÒÚR‚¯wœ%…æú½2Ù–zo$*5Š«èòþE76ìh)QƒP s > rÍÃÀY¨¥9Pظü"ã¬E¹)º®¡¹ *S l(åƒMßbBïâýöhØY>S Zê³kD«–¦ƒÄ/N/·&h2@-LP!“gÉù'§DÜvbÄ_¾)íOzlk^íÖ˪•ýÝsšX2¹´){Ý©5mÀBVÊB|l Ì©jV*=VGÑd ΕÐ~–¤‰èËåÐ~¤I–ÍbÕk=Mгj›ž*|2”¶œc3 !R–K‡‰è¬Ð:š /Ã"ÐHΥ͎Âòįhuå.g0Íós›¨·Æý«¢Åè Å·ÔÓJ»rfƒ]?ת´y é¶°^3‘ |B][Ê\á,¯t%9U´TB ¿þ(Ïlµ$9ž½Ð$Ïâä'‘väZpr'jñ tgSs¥ñoRãßEweçSËž?! ŸÚSóãë„LZ Mâ%h]+h¯-0j€†>ÿ(=ˆžóƒ¿RÕÖWHô¯¶“½­“ÉßoŸ+lü­ÖÎV©ƒ„$'ß¾ÅDrÏÇÛÍEBDŒF—ñ®<’OMNmÔ*ôÍ„óõÇ3áÖ1Æsu<ž\ËÉyÿøý(?Ò€T H¶è2I­¥`°æ+æ »°¤ùîK³ÄÊ#vMõÛ4À6õ+¯HîÇ[^ân¤jq¢!ÌP@´±Ã, ÅÛóDÆ ¢ì”;…Œ,¶¬PÉ]ó]iý9OHâxò8»´n52˜\ʨ+[µÏŽjHäþˆRØsˆ¢Š˜Ö$¨݆¾A•Å+ÅÙT<‡«·ê´Ê¦Pþæ Q»A«Ø¸qPæŒ#ÉЕ}ü”‚XUn¨¢¦ÀQ¯…š´’T"'aË X£©C4Sl8À,Ûâeâ»m%öCêr\8peÔ>õÁ1é{Ë®‡1S·!‡Ã˜åC;U`àTøZïÈïAȽé²ö  OjmY†ÚF¤A—Ø?baª§jëã³$ºB †›OHÝÒ#¸L.-7¥Î}°Í¹…C–Å:éöžÑþêļ™º¢Ó¯Ú‘òßÖÿíÄ¿¦]e-§ aäåúƒUÅÄýV r):Y@–äÙTÒÓùeýLVXˆ.{…䘂Xjãò¤Ÿ 3ÜýXµ·Âfú £À¦ävÚ¹Ï"Ðf+ —êŠýAÓk<^¿6n´?>žÒv²CRGØ+4:™‚ÝîÅóS:Kwám¡êÉq®!뉅uÂM¶Ñ EÂUxá÷sáŸBÜñ¨y'÷ ©yMÑ=*ÏVi¦í«~‰{UÙ¤hmúX;ÔjÛ]÷ÄØo7ÊÜ0DÌóv+QAŸEþ­+dY8nyÆtKkb‰¢É,´ZŽ<Î4ÄC_Ø.Y3dïb»­¨dÉÚ$¡œkbĦ“¹šÐµxÜ&Ÿ¯i(o˼vpë[ÎqY`E‡m&¢ÒÊ´I¾È•ÅV%Ók'\ß ¡m|éóš{Êì#­aA—%¹»q)ÌúB“ÃÆ“d8ºŠMPÝNÊ3n_vŸ~–|3+Õ÷m‹ßÐÅ:nC7f#´EâŒVEDµC=Å èâÇ[áRøœéÈÅÇ0¨ÛÅqi-ÉR]ý·|&¡²ÉÀO­,›ŽÆ¹¬Èµ ö˜Ð3oõk&ã2G”r®Í ݽ­þç\‹”á6WàX\Ô⧺œìéÇ:ÄŸ.#n.¾ȼHwS®ª›JÀ÷‹Ï[–ª4QX™.S,o $dÔÐ(@ôåVÍWîIVÞó¿h¤ô³Ðg*Ù)TI¤ËÓ‡£%ù|4†*Ýe†ªØÙé`iï²Z‹ aï)·ûMPÔÏ+àWìu†mé³ßøü YÒ^ö׉j”šã®=’ ªd—†è¹±K ˜a#»“ÁCMU–Åè~‚¬ó ä„•¶ô™~ôÞÖŠoQA[½[{“ûæý@ŽMÄ•ídG/x†bk­=ñ e°‡Nò׎h)Óˆè‹Ø-nØÊ8ÃKøÍŒ“<,…(jÃLMœ”9ÄCŽ}Ë:½K:l_¦ËP¤}¦`„FyHÔ‰,`g DápÿÓ<¹ LâJö0„¸ "À4èÝ1È.lô»ß)'¨ ¨.¸0nÐ-£EC§ ^“%·*mäÑe^ZEÎaaù:á;1ÊI™pÆÚà&•B_.À³hüë½D›Záœ/BÖ+T¬…ÄK%°$Zºñ ¦ÁsMÜüJ}²y.0Ig+–A²ºOv÷Vi4sæ>N8£'æDø±¦ÿìÈiyá÷ˆ9Wêñ%âdAä#Œü7Ü(Á$–ü°áפ=ÊÙUxfsÉ‘ÒRô«|?CŠ­dÝ–?®­q DfºYÉÿì ¤’…­™µ‰²¹£‰±Œ±‰õŸ7¬+(«+¨«(hÍîÛ|Á¡rËd¶²(hýîdçCöb|tÁâ òÎ[ò"v×W .œG™¶X°x8˜ø·¾Ü#^=Ä×ÁRACÖ2‚7÷î4²Š‚Š‚’‚‚ëêƒ&QCWáÓþ‘¯Ð©Ç]œ¾rÈ?»ø«bûeZXZ›üq¢(c‡¨€ÌcšþÓ ji^ªrî×rë’P4ĺÚ9²®=4N¦dû#zÌ\«½-s}fë-Ø©cîz¼"æÁñÖëõ¦×tÛÉÔÌÎŽ€ºCzê~ø~ gê’Ã\? THUìC ø¤êw³lÔñ&ÝMøðI¿‘»¢Úúb³s›Ú¹½jBøŽsO[{ý&wÀ@Ú4­ØêÀÇL¬b™€ÑGW!Hi¹íµÔ ³Ž¡qç&7ͬ؛ /õh`9DÚ8yîw­Š“c_kPÛBC§Òeþ‘pD¶Ãº Y|,@«¡q?‹\ŠØZ³áEªs¡ù«ÍO«\ ê¹na%Цî‹û¡ùˆî™:ó>Í—þÙ'áꮓ•#µ5&¾épì~ŠÉb}ÂvD âDõ—–Àßõý 0ä·b‘whLäÞ¦¡³ ÔѨÀgdß÷m¢æŒ¥7*wð/S„Ð]áÍxŽ9bÀg6»„²!K¯÷™©¢º8|ù€N¥ï rr† K™ÚkVM…šO¢!«õk)šULvˆ,°Â±õû§×^¸ ÄŠü¤_ȯá[c©1“ñ›;À8ãg+!s(B§“Éıg(º2ó¹E"º8¿Jt™„=xÝX¶K×úð§-Î M‡åéžZɇ¦Mâè9 ô¬A5tZuNX5tî%Ú…uNà;Ž/V€Þƒ¸>µNhBÁ7õô¾±ãGœíƒÁ¬:‘aBögC}7w_}ff|s™´ß™åž{S oÜ÷›`÷bf¤–NŸœ¸¼ëT$µÚx…žš7ÑmFôr7†•§MÉI¼J¼76H}éœF1›ç'e!ÌÁžV00M³²†Xq9n΢ƘöéÖ=¢^o lM“xUðk¼Do¤U^Þœ–¿%¬ŸÎ œØ*ѽ­V–—ý\Îsw ±Ui2|¥2ÌoŸÂ.ï¤!+k'߃ÝxMW £u$9:K*† ˆÉÔfÊe³‰ZbTõ¡ˆˆMáu¼ØÀ¢L“l>¨¿ëã¦òHNyô`gˆŒ”…X¼fsw¼ÓkÎÂRª‡-‰diÕÒä=E'zë{sWÒ24KÚ;v1ËÖͱõyã@/ޓޫŸ÷£øþ ¢æšjB¹=œ.)CJ”ò³‹N?ú'%˦BéÊÈ]Mð°&¢qgé>ðvZó1¹YfU^Vò l«$`\¥Þ¥syk"\åïÛoŽ”5ûŠpx5}M”¼ƒ¬(d‘eçš-êCbÏê"߇>Xã1š®L&˜"­Q#åø×<2Êj®óÚÛ=\\¢`^â#å4­¶‹~V÷í¯xÙØÎ¡v´H˪ÕY‡™¸(Ä/¾aÏtmíÊ-(Öî€ ¤kশ¤pë]zXÏOXÔT¢©÷\!»l“¸õ¯Ãkl‘ÿmnÝÓH±@Š"oz%Ÿˆ62u¥ãêU»——´¨Ë<1+@óÜÂ¥IjJfÅ„JáEJá%óf\¡{¨ßE÷a6— ¬¥­"á—Kš@ ª$­$œ‹š8Õ“—• ˜K›¢‚óJšÚZŸÑ9»ù ]ǘûV[ÌÛi—1£JÂT›‡§ ¶wÙÌ·ëRÓ¾ó¦äö¿)¯ kò¢¥³Í¶bRÆÀ†"0ëƒïTš)ô“ÞÅÇí%àŽ`ÆíSxñ¡Ûm¯- ÊÇaCS˜·¥cMD‰D×° n”¤$™v>ä}x…Nxÿ[骠x™KüZ\*åS]±Ì U‰h+H[—‚`…ŸûYmVQ‚hxŸM_ø€Á¦ðÊ©xfÑ(“ß…:!'{OM £B ÓJÒËYüõÛM¾z³þ- â:…‰¥¿8Ã`±;Žb³¢¢ãH‹¡xüèÙ'`º`€5œ_H¿'ø(‹‹?4H4tcC^(ÂÙ±<~‹g(}Cê(-`ÁÊ7G®*7o°âÇ~ÔeÆýPÀ5 Ì¡·uò\ð.o3öš&…N!ìZ¤!o9na€å Ž¤È£<ùÕÅ»a³…{kÕ1ûj‘û-œ —ˆk{|Ê€Z7ó‘l£¸”í"+blÔÚö€gýÚËHV±,´¾pSÌ<Ž€NMCSõÔØbÜž/ceÎçßõ ™FÑHwüâoøò%ýò%^°tæ=œ«ÔÁ™îE°ç—¸d ¤™¿iÏò-p¿˜SGöVûý!úV eãÀtáý³›ÿ•ÚÄ¿¾þò$Iµ:„»ö’ËÇLÎÏ7 ®TIgt§eFB'8Æ!ÈDªõĪÄê*û(Ñ™&S&Æ wÀP&+³ÄF2"=…«ùz(«å€bŽVÿë ÷ýTÞ¾Gº©¼õDêUºÇ *¦Õ¦l;Z8 ££p”GW##{¯JeNùyTÈ<ž?*æDŽÖ¦X‘^¯!Yœ˜qðûÄSjz:mß$‘2m@ÅQ?,ÄQ8lˆ¥âvQ³bž±M¿ [•¼Q1_2¤¹Bµ|8Ì÷,²ÙtA©ZвZÑœ… §«ØMÌÌIÏIJKÊŠ`ÖßQªˆ5nå½ÜÜÛÊFfpA”Øö2rpØ9pG·±°¸´néPZûFÞó¿©Í”…×âÎ$ÅW¦ZqÈsŒD'weGÉ'(º(PFÚìW“a¦1 Ö ц ÕæJ6MÄ«¤›K޵3²m弃­î3&R#!Eм{ÎLúÃê8t_&K´y”<#q«éRQH¥ÎüŒ½steÛÒðÛv:ÖŽm'Û¶Ý1º£ŽmcǶmÛ¶ítÐoŸ;Æ÷½÷œ÷>ã>cì±Çšký5kVÕª5gÕ¯-tØX-›Yø¨—- Êf*Ð}~ ¦ÌN$×HÓy^´i%…1C^¶´XîÅ%ûV’wœ³¢”´iÚŒ¾˜kèÄh-6‹›qÓ±˜WnÈæ5â-îk1Ô¦¬gÄÒÏÅ1§?’ÈP'I°µ¥ã±mŸ{ôdáé‘­ê8…Ö(zÕ-9'^Žìòè;‘‰¡HKÌC¦ýV)E~ÙÜæÖ(o ”È8á4ƒO\hÖêvŒ‘kI6/—vÞmS\F<±nC×o#§_‰ "î·L6 åiãëT¶ÒŽwàuý´`_Ña·.ÂBDÞcų^½bÓIÂ]δ`].œˆv¬•øË/‘4«ùJ[@'׿‘dÑo˨ååbÌ—¨0|Óa§¢ï3K¦A®¿;Ä eǘˆ%jצÉ3üéL«®OÍ¥×™nú8W!0q›|½¿)ûš+±©ÌÊ<+Ú §W=˰V9‹Øbâ@馿>ïmÕ)Á9'PEôâ!Ä]’´y@E"·ÎÏ`;~À‰³¥°‚³4@™Y~€^>]©3iHŒê¿ZeŽ‹â}BM[²MŒß†´ !ìÖ%÷[B2l¿ËHJJ&0û&Vcã"гž§ŠámãB·¼Œž,˜ã61{îºó½ÓjöÆÆz áT(1,–2þ·b|Àæf:KìCRLYnšo"kFNÑ:,í: ÔòaZmæÆMµòð¶Ëû^´<; 1hr_g¿¼2O&'e›ÝÌw2ì£Gò‚|¥~µD7è€ö·««Z÷É8'iT½ù鯲éÞ3.A¸¬ÔRjkè©ój«ñ ¤n&a»Ëƒl¨º¶[;+k4Ih¹ >ç%2HŸC}wÁ!hIkꟊ˜c5\y® ŠcŒáL^POv=V?jó°—êhzžF3ðnÏÿœ²ŠÃ–*$Ý;h™ïÐÿQÂ>¬ZΗ>Âòi1w×Í/[‡šÕ´ËâWK[ø7â‘Øi¨y‰ÎùÌí6z‰eÅÆ\}}4UkÈU1„3΢>1’tàÓ'€&ÕL¥ì¡æ5wtŒæ=B¼ŒŒût0ÁäŽWÞ±{êâaÒtïÙ ÁIˆÙ¹/õ*®f•®ê'oÚì[‡YÚ–U³W'â#J¾ª}—`ô%ùëºÕ‚=ç÷9ŸITÑi©4R^úãT“H;æéD¦ W·1™ ²Š^^Sôå£JIìtV#x¨‘8K¾¬ÞÄœ.«èÉI"U"€ 5#QH«@Í&&Ž0FøŒbtª‰Æ¼£}-Šû0€Åý( Ëÿ5Pˇþ¾à‡y èÊö$‹p°ðDl¿Ók½£øÔŘh'u"OoÛ^(`¸{ñm ê †ådŸ©Ü˜1tdHVsãöKz.@ß±ü2rìW›ju}0Fˆ]ÎlŠrQx¢…²‚ªg ‘^Dx¸ó¸ Ó¼á^ds´¾ÙÚkkpÛ€Sæ¹ܰݯzLÒO¥ÿ:§'lò“ú@°7.¦º‘ÚÆé·Ôëð£ñ‹¡áôÛæ $p'|ò¯Þå&™VŠ ¶È|)êR>ïNÛ»Œg¼Âœ;ß׿°…?ÉÉKºÊ½ƒ½ ºÿ2¥Å»+ V mU5µ.iZâÁ ÏBÇ\§ $~Þ¯8ìsÙø.µŽÝ-¸>o¿µ 5‘ÇO]ÜYRà«)ÃékØô}'>Uf‹êÚ#¤?òUxèwèÅDà—¿‘€ÔDá5ú½KGÿ}ä+~ä+äÐ;ýÐûtÐ*U·ÚŽàpû(Ìy¥ÀOÏc%œTÁ°:þaf0ýlî°;²›™„E*§Er¬†[#ïÉzM%—#—’ntžú߸€³§`=v ÊZ®¸q©¢¾Ë<ª,Vµzù÷Ú]!âpê3å%yĹÙúý^„ë'’'ùÄÀŒ-ç|?2éIP…ÞÇ q´š™m¥ìý-Xµ€Jñ”‡PÇÈÜkÅ)Ò®iaTsyï¾õM†Fà™ýˆ ç‹.â'Ú÷—‰ãYB†Ûj«…±†„wX¡dÏõæT {ãDæ]~V7_?V7iùó‹Õ^çpé¬ÁžXåÄw"iC —l2MnƒÜºYAÿºù’5¸E3$vd*Tsæj2u^Š)T‚ZµúAu^ã2²&ó¦mIÀ4jy½[#Ù‘ËžyDåxh0Ørâk±£¹`¯~ŒæàMF¨òê½"àÈ$›Z´•zX¤„nP$hИ-ü G8œ-–Ì,Crž `Xr™–6ÎtUG fŸ4²]Œ^€ä솦9lÑC¤¢×©÷ùGɰûÀ¢‡8ÛŽ\-Òu¸Mè@c"#žU©¦B’1øbDTƒŠm¾¼á&5Ǽpm°=¶ÎäH;6d&¿Îíð Á¶¹ðE_ÎŽBkŸ³¬K4 ï~j‹<øw󡲤½{ `ݽ—"¾ÌAÎ}ÆÔ»üT‰È"Œ ²,º2ŸÝdÁÏøR>@À;¦Š@d¼ÁAÇãt {Œ9iÖOÍÚë>!ປ”!¿w Í4TÀäD„Ь<Ïhÿ¥°y‚7ø<ÔÅXÀ®á_$A±¯‰‘Òz˜;b×4b7–Hc‹9%~•Ea×k{_¤˜k·!_\“E¬²ÒkÄ"ÞeŸ´~•/ÑÄ50é#Bêïå„’!Ç+Ž2PÙ¢¹_ÓBˆÁ{Ú‚Þî(»¥²,~ª=ts.àzRž¸ú¢‚K•5ÆeõvÊ”¼ëôTܧàè36†c<þÉ®BT•ó¼#mÀ¸ÎM<ì˜ùÜ>óIEðÖÝ_oûݹVNp Q€@Ó +ðÊšClǽÔ‰8X]¯ßŠ(UHT.׎켣PÿµÉ%ñ70„xhãL±ô C 3náE[“=ؾô.Ø1wn£yc‹S§ÉŒÚzò99{ g·§¬"íœj†©b4}•Ý¿Ê1—ÄÆü‚#üQ‹•Sö ¹C5ÿÑå¡”w¡Þn6‹{š'Gî>£…ž^³j‚A)‘hœGfÂ;,Ä J Úp­zæLºi³|žd¦DWªì­™üYõŽý­š²bÖ±“ªO–Þúô¾Ìd&êö€'ÃcxÊM®C¨ÆM“¦ êöpõ€ ùÀ¹` ‘ tÿõóúo¹ÜQª:óB(ÙÁsÉŠ±áp¥–ûW¢§ƒC* •È/=a—sPó”øH6/àïJDTí:3'ܧ)iæî]i«ï¿>ö©@v}ÁôÉwÌÀôQ›àêóØðÕÀàMîlçO-¡îÅ÷É=¶³®>æ<õVÐl°Õ°²Og¼|”°0˜6^žÍNš€eü¹'VŠÑUž­< ¨‰áæP®, ¬Õ©˜æ+mÛgÄ/ˆ:ë+xª,kGyÛ±_9”¾X=ÜJåz9~0«Ç½ìÖ˜T¦»Ÿ™“N™%ªb(Eu˜„˜LãKcò3ÀìQÀrï E^»9£j¼p”†üé­JÏr%¯â¼IœæYni1‹,¥§£/ûô…#HÏÒ3Äì5–´¯"Ôé¿¢¼P%ïÍ”äã4{ݸZÐË(pú19TÛ“¼ÈiF'ê$`™=µ¶J:&sïÒ½0<€pöV¢í€<}üi®'h± ˆÁ½Ü9 õªëù‰K¢°‹ÔÅíïúø…ÓÞ¾ì…Jªe8Ý Vy莑2†³W2ÁZ3ö‚KbÐÅÛXº–O ‚Õk±Ž–bíÙRæA•y£Çf6óÉBê`=ÿ@”‚ƒT<*¾6á{yûócjÓLã/‡“×PšÏÚ/(ðׂò»#T(ØÏüò?z PT^ˆ†¯§ Ègä£Wæ-éÈžÖJQ½±X˜mÙu!…2=£á£öI ¸õC(¢9™xÌ4w[h÷í¥'¤;(n›xÑ– ³öõVvZh>žÉËb÷= Ötn„öD£=g¸â_4÷ÐÅÀHÞQ=†’øÿãÈ&P$@ä „å«ÄKUHJ’SÅWÃþͨh™pZ YH]¸Ô«šß¤ ggåÿ¥¥+±ì2–/Þ*!)í‹­^Û·Ó¥J~IΧüá(|l{½6×ó¹¨ao‹ŸÞÈ7™ßÍ·6Þ2ÞØ¯?~M+0‚ ñ†Ýk½¶ çφ,b¬ÝĪ$Ok XxÜ¥šk™ÐÔ`h‘óÈ„NìÕðyŽ)•Öµˆd¢Ì-JÝIOÄDsMœ² U ¿ðßl54×¹ž:¨›ÆÒC ÓóŠ×¡ÐJˆ.îNÔ ½µh$‚QYhLq”ÙÌ4,Ó68›Ñ­$™­»¿èÛ"Éëž82jÞ^jËýêËòk u<Œ­…ý&H;*äK+e„(…ºïFFÍh¿Lý^_kÑdÜ^x!²ÃkoÊvå©@(ÕúXÈŠìú2ò£"&áQ7VeŽAÚ —®’…u^•n¹ê§ëBÇ-N1Ö›ÁÒkF_d&õ„p½™#íª·=֗ב/EWMÏ‚†ÚùZ*#Šžeªµ·ëõ0Ÿàj<÷È2½*Ì}\å V¼ß.¾ívŽI«Æn¸áÞŠ)Žu„?·«¤w_wé\:uݘÉcp°Ñ1 ,F4I»‰Qˆã̘ž P©§ëlç^2ËÛåíukz­» e?ÃÂ6í”=o7 :—yÕÿˆìážDØ´ª¨q™’dÅ1KCÀié|8HÀÇCwdÊÒ~ä^èo;,¹ó{e¶¥Öé9Qg5±a—*X0ïz/Z–•ªS2YÜ«äœeêÞàù Ësm„ìs0 xjž 3ÖP8ž*×#@öÊ‚9™MI"šºý®ð×{üðœ7]ÁÈ7yÁF¸F­£,c,C·Wš-ÞX”/nñfpÜðó>¨æšDš©ýÁ|ã`ã¤GUŸ9—Ñ¿Þ \ƒ—ì´ëy©d¼Ÿ:ý̰´ùý‘€÷¹Eó‹2¿?DXÅÜ_gOpp|nÁõ(ãØp«v`0_Û΢+aSüoÎàæ¾:b/ñ>0žü>éq!÷“X–Ó–lÀˆ¯¡¤„µ7¼øÎÿ¤ÿý )¦Íþ‚„<â¬+{&m¨/+• k™l0¨—ðåM$skñ—Rsae^†žF& K‘°ã^P&<3ð‹T8n‰œ .E©FŘÆàüëQyZÿkm”)Ð]„ ‡Ò][Ë~\fÔèò ;úÝ¢0G ŸRŠÈt*µ> í¾Ô0Gi ŸJŠ Tùò ‡ˆ5HÄ(~ Ç“Ž¨ÉðþМ}ò1{¦Åš#¥,l–¬ 5l¥HŠ´GÅ I.Õ·ò ƒ† +Æò í¿ov§›½tgÇ¿Ûó蟙ñ»²£™}¹ø­¹¾[öç±**pQ%’¼ªÈŒdÀtÒî2ÒõŠy¨Q¼WRÒaªi H‚ g¬_ þî™Üig“ÿx&Ö?·ÿ Ïôï©p¾IZîóÃ×5Á }h_iç°â±Œ©7çå↞~T Æ_ôTÑË{IUt¤î™Ûæ|ßð|O\dRæ ‹§Õ¡mdgfÎ^Û»pŽ6ÿ~½ò&MÏ" ±´ ]½ŒØ\H&  µ€¢6ož=ªë—WW˜­ïβAÕ{¨“ÛkA²Eš’êKg0¯ÁVv”í@Kx« „òÂ>'Hº„ì·ñ]„Ù³ò *} \(¥4à ‹*&¥+ °À¥nωlšÇ½û¢Ô—ƒKĴǬ`ûʉ$LÄ£DJ°½ô>vÂÄ–T–:s\ª“ÜwHëî–=‹ZÏ~UH2¼ šùîYØnxަkv ÖwR„sù³ŠºÜØR“=ä^•ÒŒˆÆÕ4ËÌ]#¸*C­h1µiêôk apñw¢`OÒ½ª±L=óâ1ÜáÀí¤aí_Uaúˆ^“:L³Û¬f?§| Ù-¡!æÊž'-¯"oøªÒǘX’€ ¢£l£ª\{^Ú‡/]™ìÂÆlk.LýßÌ}ª0š'¸\¥¼r[ô[¼Â3ê^VdK4¤ÒCáRÔôf©ÜŸjNàU~GþüòÇ•nߦÝ>z*JeäûÙ'³ŠM›îÀúÚÌ¢vÍúõž¹ÒÐiT¶Ã¤yR"£µ(¿ât"HK`6/[ðŒÅ4†ÑåÓ'BÖ~ÛHX\ý%ä;´ÑÅøð5Y?™X^?mŽŒ¥©iRúí©º¯4üz–õkò›P0&fE-^ÝíûÇUrâÍÒ$WíçIgL Æºr¿Þ‡ê'Û¬×ÓàÓøZºs| Z¨Zr[²ßëØ‰ƒ„÷YÔÏuûmÛ½Aö]Æååsü`û%-ƒÑ»¾(>zœËSÄWú&ÏÎÕ³äz/²ó\ä!`²=æ^Ǽ-½œÃë%m[Î:ëVÞ‘#}Ô¥9.q-àê(–Ëåò‚V/öè¸z^ɱ־¾‰YMqF#^ǼY}-,óŽöBMŠÀ¼ÜÝ`˜Ä+d66o ¬™øR.põ+ç8¿éŒCÏ H;ÝŠo#bœÎÖwΫWk_FÓÔõÏïœÒ;&«¥ûÙÕ®‹œKZᓘ²o¸óQ“ÀŠöðŸ¦*´ä†ˆPšûè~œž¾ZîWæÛÞºH6)æí_²¤.ú°ìú»¥8­ óÞvÀo¿Û±AlÙÝÝèG<û‡Ð^7¿€¼äwD±ˆ¡ˆk_¨=&öLvö±bö¯"~üyLþ²€å׳7¿M/î7²Ò£éƒå3µ{S0@\ÿÂ÷0¨²0ˆÝ›ð#ðYÝ£êQÐ~Çx±ŠÈ´¹uÙùsÝmx±óç9î…&¸ýSÏÆi‹©.ÐÖe]‹\¥Ið£pä%}•«‰ Tƒ¾jöI¢žM2È%ë᮳lzÙëøœ ·ðFñaˆ²lÞu&,‘~´éëVA!}<þÂÂÖxç=eåÉ}åÖj~“€†÷ñz¨ÕÔùG»“Û7Ä͞ιV*®Ýƒƒ€,Àÿ§¢«ÿÉ¿ý#ôÚvGÇî®—KàÐ*h€DûÉ¡¨äoü '&ŽO GkÏi¢)åîâÆÉßq’Ñuú×O T2ÇÚG1ûÈ·ÅÛ> »ºI™}Ÿ5:Ñ™Óê}¼×™ÁÇ·è—Í×Uœß/_†Ü#Íu Ìf‹^>Â/¯1eo²æ-†A|ú¼3Kì¤&­Ú‹:ìoϹâÞ!°pª÷©ÏxÈ ω*½\3h÷¢ë©O¨÷2å7ƒ œ³Á°´N["éxªö\ ê:‚›]uM´z] 95ÕWí1#ÀÂgú­ ŒÚJ›Í9K'ét®¡r±¿\í¥+UÍþRØzÉE¦ R@L¶NҾˆ’¼%8½°ÁÅû=mÝc¸f›g’KW+¿Ç)&'j ÔôÁs!•¬ÂN ˆî„TˆãAF¡»´Ïd^4ÑW.1RÇ­‘÷ºcýJé×t>È¡ucª2bÊgÓ?…§^†§Iq”€z&ÛÆ)bçCQáåˆà†òHÿ0cCðÛ™„XñÑù$'fÔHR£LjË×.á&€šÕ7AÂäeÑ0\ãZÆUÅe4Ì3%^õ€êÉéDYs‰êÚq&FX¢Ó_Φ0;fs–(³K£°8ù Ú«Á~íŠ<ˆ`.¦è %¤Èö""_°ø6â!~ì«`zº|ꉫ¶Œ«‹Jæ©áwÚ¾ÏxŠÊÅlúrôñøèü‹ê°É[ë8~·í,¬Sùœ°­ÓæO{êöŠ+UÇc9câȺnª'd²úÒ¼áºWGê±Ï¸Á¨ž®’ÎøU¥'ÆOWSŽ·°ópÕÍi Ç”!Á§ {(†!Èñ˜;G¶•îÑûÑI-Ø„Ž¢‡bù›“pbÊAA@,ÿ#ûçß|ˆ‹Ëÿeÿ(+¯ ¡\@âó à0ùóyÀÿ‘LjÁ .æ"/Ïf‘­“iGûl"¸õÁHšÕr»È lkro³(*R*šƒ7[xJ§TWzS5Lªv(à°ÒV±ùRɺ^À…¸Z{†ïŸµ‘{}ÚÅ©Õk~ž>Á¹úL†‹“?í“9¦˜»órE¸ÝüÛeø«¿JûªZo³´ y衃ÎO.Ùùm òÑ®€d«yÌÜâçr‡‚÷YA¢‘ç7I8––ó+ÓÔší1$+ÿI£È0¥“†ÓѺ÷±NS.ú"yÎB挡 D­®’ WLL§½2ŠÉäÝ€ü¹æSÁÖÜU¹½]e±ðÉÃΣM[Ÿx¯î þܦ =vŠ 8š5šcÓfõš½ùƒ´É€.ɨÇñ´L× M]3‚ZKMÝáf7ð ,A–è…Û[øýÐ;¦A ’šákî‹ßÿ¨`äBß"èþ3"ÿ³àÿu±…M¾Y¹ý•hûjFÅö20aþÛÆ.8Ôݧfmüá-iÅZ ˆÊã+D–Š:tìîÉ>äà€–ž0 >“`JJ¤ªùRy¤äQd¸ÖÅœ¸:ªþÒ¨,ÖˆkýT5'qŸ¼`M笨’“¬ðÁu¨ µ‰™—¥€“öÛˆ¼µ»kƒ8!”jè×ÑódŠ _:.ËÜ8ê¯ígß_0•ùќ֟Íû_a‘Ϩ‡Ê†ƒ‚…¨_¨!cH¡ý¨NªðñP½þíhƒ eæÏè/ûÉ.]ö¶îû †•®ù;Ñë³y&!`O˜šÚc›”¿€–-þ…ì—"ïZ^¤·†|oÀH‡æ¨0¢ "}ÞyÏúëI?¿ÎNpK zÏÓ7šUêõ’•‹³/j)» ³-.Ïiäéo"·µÊ ïÉÒµò.=±pÄýn P{öb;^̃ú\ß>üñ¥¢TXʇX̹tö|ø±ýÏfN\?Ül1~ö}-Á`ÎdK§ûöõµô›h{é @ÀÅ%–”÷ÙMÙÔ§ü-Vý6-^€s¢“Ut’ÊÉeQ‚D®Ç³SO”Fï<fxdŽðŒ | c‘ a¡³réìbñ}Z…§IšŸým¾cdD°œmô&­›r5| ¿®ÿô’¾ß 9*!ÁR™ê§ÖïÛò*e¬TÑ `@ÿËæ×¿Ö៼þ¿Œ2x{ Ç£v=”ã ðÑ+R³2ÌeIN^Ç ëÅþcu@ï{Ϙ±ùÎm§'ë¿ –‘M1E1=’3̶²ñ*“q7ÑLUÑJ¸YIFzE€³/ÎÊ2ë}œÜŒÜ £–¢'~¬ù÷.ÐFú'©ØRcAŸ16I8»‘+ôTŸ>V»BI«ú•Í’ÑÁ3ÞRÁä¥^›wÁçåÆÝeA´Ö?²\9+¯x £¨þ>ÿl"X*Ôÿ„Gúÿç¯öÍÊÖåÿ+Ìðü¦ªû{3S†Æ”’ƒ:ˆ…^ÎH©‡–„¤ ¶éÀì.Aöñº³wf©I[¬S£L³Àº"7xN>ר¾«¶Rý¼‹ˆx¼ÐFóý%ä¥Ý’¤§Àt*­ÝïüúíÊýºý½{ ¼¤×¬ýú>O$åâ*wäó¤£î{O 4øÍþGçWdh&̘‘#pP@/ôá‰Òh£ñÉY¿÷»#q¯$ü×ûTbbøý— Õ;)b$&ô˜·[šQoEé×äXC¢kAºA*Éäx®ƒ~t%?)¢äÉø[òè‘#º:î³a•ºßeÄ AÏ&Bñ¾ý1Å…G¿'BöÁ¬}Ç“,÷žÏ!ÂÏÝ­½¾ŠÈ<‰iÛ²f_h10EÅ5ØÒ[9,¢YéõäŒØkQhýj TKwÿšÁÜÉu!}rp_JµÿD ê.~¨j5+~%õx[°•zu¾0I¯m!’"•š¼R–æÄ=MOëæ gÎ ÷‹,ÙþJêÄ­`¹I%.ÊV»t.?>?Ñ\û×QƒýÕ¤6…¢–; ˆ°Y¢ÕÙ´ â†z,H»ÃЦ÷-¯¸á¸_HÊÊ)!»!¾ÅýÔ{õjÍôhczÖz~¡åä¬2À„ÚE+ ŒÕÅ åêjIÎ"g‚U’Ùâ¹§ýÁôÝ/Ä4`ß>ÁhÕ†]½¤2T?DQ¦)†RÅ*ã½m‰³èþJ Âñu?¾A_ÅX½¹p&/Æ•“tVîü—‰×X4¾”3d¨¥û"®ÞC³OP »U¡ MÿÁR›éÄIþ.°u¶´Ó‚õù ã¨á¢Ñ•ôºÚÑÇaá—åF3üʘh«5sFÔ9b½B½äzEj[äרOË:™ëíÄ&N×eÜ 7¶„ÐÛîŸqg³—æ¾îé¤Úçê‘IcÜ¿]<'¥PšK¯±4™ä… 2d•ª1Ï),Ã]²ÊåÒ7ÇgªC)œ-Øfö¶<_(£3kðJÃÛmK‡Ù$Ä¥cý®ÔÈ€aA[d B m úâ±4 [°²ã×9B–T‡Ê·Íª>øÓ%\þ ´Ùƒ4˜Ó»ž˜z3j¦L%{lS% ¢„e%'¬c®ê=0†2ÍhL°×ùŠ0|vuƸÕÞ…ó»]^Zýåõñ~"]o(Ul*Øó¹BwÀºS;ù{vx£ák&gvò­¯®ú-xÇY¿ ­þ02¤}«”D]]/*“`üݶâ­IæÃ.íVbî‡jþ«Uw;šÒ­ ·ª)\é äŒÇÁJ|E÷DÚ‚AÂx^«Ú¾êùbîžÆK£Ð)/æ©Hm©K1‘ Îô«Culgú¢aj[|²Kš­ý׳¦zr¦FÒkØçABǶS}ñ†xö®iwíV^cmq¶ô”ñqžE²i¨ÇØb&sr;ú솫x A®µ³ ºñBö+"-¶ñûË­r‡8¶Ñ”#â⫝̸t¹ò—sm0"âÞz ·~Cšœìþy¯ý)¯+)ÇB÷¨,ú p63ô2çy±@A#P‡ô_+,"ºwC^ì.YYõ?½U¥æ¢Ò0m¶òòDjñM[dçÁÛ­®¤Ú®YèxCñO‚"l(²?s`ŽÜzwR;"Øk-0µVgÈÉ{ví…FoMëûê_q3&¥½N×J—á 9NÊé‹-óo2…(Ìð¾¹åAÈÔ"øXpÕÂŒ´Ö¦Øt@¯teÔÃx÷n©°Ã8Í‘ø*Dô –¯–i-!¾i1ÖOìqwEÁ·ºi-htô‘´4!öùÁÀy+ô£t\øF‰Þ8”Ó2àˆåªÃÒàbõ‘¬–7fÇ[šA¡'{ê/Ç•£‰¹Ïdô3—.aßAtJKŽ$ÏÞ¤wóŒÞ‘Ü¡±™ ›¾¨:êŸr…”>^Qøþ¨R# 3Õ”˜!èzÒM,Æv› cHḹˆÀî"Øk<œ¡“Á|3†Zoç^—g[cF}6Æ»ê\aòÔÀàí^’Ó2ÛŠq¦ÏŒorÉ^ €¯|Ýùuïþ1Ïä×î9™ÆŸR3,Ì)l̳d.ÚSÇI*˜r[ù[¿ íYÒ Û½3q;ЫꕉHðJñËòàëš/lÆÈ¸I?]lF+ üð¬¬6ç!Q/V‹1äJx“.>̴͢ ’ÌCVKLL¸Ù¨Ö÷@oµ–¶Š‚ º@+™Ä\gœùœÁ‡=\Ü kþx†\±ÑàºÜ¹ÚpÕêîù­µLÊ­ìA¥ëe›ƒf©‹#/›ÎÆÞÑEY…Ea9ÊÏhô «8lÆpë& ¯\÷y0ÓL´Ó é/ê%(‚ïS,³Ó¨…ð'¤‡²RŒso)Ô—jûìÒ>Y\Ý»;¾ÈÒ×n5•™v*+’8§ˆbÖ¬® SrúÈf€}êÊÍaÔZc([L%èú)ÔoòGþί¹£FíihëàFîP.›t2å©=’·ŠjVPÍU´¼”-‚bO½!üµE2(©JFƒÅã˜Z›Ì5½¦û¹¿INŸ?Ì@´s ÀdÁµ˜uI°;­ˆ+㦠F(ìG«¤2Ð5㨵ŽÓ ¸!ÈÕOÝ<ÿ{tE¬¡–ñ¯þ â?q)þ]ýíÞ’ìþj÷6¼üDý0 •†>†cBÆØ1 7ÉR<0%gˆñf±O9êT_{Ý•°ÿÍn˜lVʽûm[TÞaQÿ¾®Î‘'«+¸@äsü„*9ø2U‚+¡r$íP¹ÃÇIÄ@ó!¸—à„ˆ}E¹§+¤x CŸ;dö†Íëc–ä©.øç¥ðWøJacGpÈjÔQ3øS õ”ØÏ'GO¨ðc pQ{z2w Ððн.2&ÞP·œ1íG#–Ó¶)“NC…3gebÝISÜ©@j¤­ØK2k6(6?‡Ö¢€foÃp13[e›%ÿ…é¨óBôM+ûVêaßOܲSQ‹>ëkÐü¼Òc×¼ŠË©?âˆEqbvˆCnW„ú|¥væ ª?¨aqÔmR«óÅSƒÊC+Xo€t/hÌ_\#ïv*çªÀâGõ8™¯u°ÉbGÉLûÓ%lJMbÔ‡H¹áByö-N*ìäLî©éœOFŸUhÜ9X•ô ,&ì¿…!۔Æ!Í좽!ÇÛÝ©Šš-qÅÚ¡ŸXh¸ŠØS´=9®{õúOŽ–GØg'Îô±ïxQZ ’CØÃçÔë-™ŒV×ç´ŽCgr+Mý°miKíÊâëWä$©¦é“ÝåÿBË6¶Š3|o6_¬äSu^à¾âjåLžÆ<_užŸÜ®6H£¾×ØWå1c*!“ ¯J7øµç®zÆë"ôíºÄ¾J7g<Þ‘ÈHÝc\c F, À®ó…$Íw†âúQ›a’…ÑÞC^þ‘qç¬{YÛóGo­ A@èÿ»Þ˜ý]uæ™P†¶Én å7õ¨Î]!Ï«6`NjŠISš­•È1”jã¯[i lg¹Ä÷Â…Z©Ž<ñw{_ùüSåŒh Þß½ÁØcïÓ¬Mˆ›¸L¶ ’ÑŠˆÔbdž~ÁUP™øñ¤øQy*ÿë·‘”À[ÔãÌkSéú‘7de¶ œ„~*¬ñ C¬ç # ’áKR-7:M_òºkB1Ð#Úiù`Œ΂\±aŒ¬>ËêYG§\"°×­ýQÓd%¡ 'Ñ®w" ŒXâŸe3,9_ÌDh9݆֣¼hDuLÝ´ÑT'O3/nªâ[QsºC¸@j•/R‚“ »Á¢[µ2VéÝ0è;e.gô—P¯?H¥maû€ë®È]óÍÈ~®²TFCäba‚ Qm½>®Žàa®Kpåajä-ºKÚ/®èõE®¨{ÙÁºMÉ‘}‰Ç|…sbJõ`y±ø ´`Ám{C›e$iý‰{Mi÷îz‰#ƒP«0æ,ffbá}ä–|…»Éùíž8÷ „mC.ž`ýì©ã·;¬®ÙâDØwoÈÍ(Yf W«¼obŸQ¿ÌðÙá%DC “+™tEZí»,aÄÜ%)ÒžĄ̃}Ac¼Ø~°yêlO¸sûލ7¾/‰ª$dš£êÀ¢ü­šÈFj~HŠmðüšóˆ4 ÈfW(£öiHCXLí´QsÙ›”¥ŠÂ¦0‰d½ ¦FvŠÔ$ùÍ ¯íq@Þr|‹ÍdT8ë[é!w„H¼ÌøˆÇd±Ü˜¦òVˆŒY©w\Ä8¬ëÛ[å(µV] *h¶/^*ùÁ‚„–øØEêòÇ»´ÑջĿÖ¹tÌ߸(&Ñ;Î=†¯ºËV·¿JïM~ÞüÙIá.‹÷ÇDþ—¦ð·®ŒY ÿêÊøóÜ3¤·Õ¾ÊN¶» 9ª¤6‚̘>êbîÊÍÝt˜Þ×°SÜÂìpAyn gÀÚ¢ëwN ¼aÉäÖ˜­¨ãÚuw°e é®dÉr:–Q¾L\¼6!qÖ q‹ð!¤_ Ö sqëivC4úNÃzˆ†@î¢n£þ÷›ÐN†<oÅôÜo#§†ô.23(_!Ãd‚¥QÜâ9åEO½†\ûgèиzo¬>ØP Ø‹>DM·ž½Ú7«è¬ûõìêõý`\;­˜¦ûnñ96ÉéÕ¢§ü« to¬‘ûjJÅ*V¬ÜréC'H·ãžŠÜÕãUµ uçb¤ Éè4(øÏW;ūޭ@Üå¨-E`ú°|‚„WncË¿´¥2’µà°µ0"EÿWNTuêô ›ïžt½t,ï‡EEõ;ém9Ùó¥àÐi@ÅcoW—¹˜[Å Úé„ ´˜²ÏS1ÒNÝš¾M~cÿÇÙ[H±…uý¸½ •ÎÌf0âóFvÈ_Dýªœí¤HkAÚq2»TF ~1 , “õœR©£ OÇ„ ~”Ž%+Q´kmj/ƒeªg¡ØvÞ—ÿù9YÇŒZ߯¦8–˜ôN‡Û ._Öv9…)û½Jç9èÆ¿Rß@‡Pµ,Gú5n_º†¾ªE÷upµNàQÓ~øaaÓÂmbÞì¹!¹ÓaëÙ ùÂTȡߌ¢£·i~“¯í¡FæÂ… áò$æâ$‹\÷ +èW#x5sÕÎåe"úÜV!±mÁ°³¢?ÑS¯7NÐ6È—©ÄÖñl6²›¨öÃçÄñ§üªÃÞý¶Ðƒm½òË™øÞoÑp¸{×µMNLü®eTÄúÞ°ò}c·–µ~è§ÃS‡Y[Ó¦üe7³it{¥™4~Þ‚’7»kì”ã‡0ؾªoõÄQ›FSÝH`!—±}æ‹›Þr¸ß»uÒ"äw}/9Gži´šl›Þ³Ü<€óÝÞŒ3\¿Ûªh­ù[»¥ãÏÍ äâ¿ø\÷8ÈcoŠ~‹®5Y8¦þbp¡x4:9÷ôQ(=ÿ.´½¡pÙ…ll [”`êì0òýˆ›ç‘AÉ?ïŠgˆÿñ€CÞAÄÁÔóÿm¥"£ "ŒÃ?¿~|P8"Šš¤\öô«[ÛN(ƒ-Vq.¨ff%цá9Þ-üùù„Óþ&xVìù ›á? Ÿs^Ù6h€2ËáŠÓbʽ‹•õú{·ü—`|r²“\îLÄýLy+Ö {#ÝÔA&†ÑU˜Ñ–>Ãx™ˆÖW÷#çW­ŸšŸÙfiчê%köf?óXÏ[ÙZó-¹]§PÜðdØöBu1Øë°WëÓßËnê¹¶lh<éöêÅÛ‹W°Öˆ2Ùµ7µŒæRPF |V4KGJÞ5ŸãSèëÕI#¥ˆtÔbT–ÑwgHuk6—žѶÙ-y¸ŽïöébÏg>³l·­TÀÇW"*£T:ÆÙa »JIìø-bÅ3Ç%°h†‘$jŽ,¤4)•Ïh–U3¿¨³¯ý ßœ„¹CÚ~]¸¥9Àe蒰Ι¯Æë+~L¯*ÛÃ*ÿÍÿÈHL:sHRÂ3òqúfV²žíWœ¿>yA¿§XóÁ憊ߠpcCŒšÇ%Ä ôb.#û.ʵeÊB3Ö(tÇí£ M.œ¶ ð»‘{fc‚)}rR‹ö¸§[´ùÙnÇó­µÀ׿ÊWÍÑRFZ¢„µFÒJM€\dÕÊç5?ü›f¼€ÄoKæß2Þö(ºÑÁn¨~Íå Ws]JÓÛ³•=±OèûkŒjîáK?¿Nâpï§lÐC:eÐ,êKE(LY)AäÚ‘D†%_›À!ŠÇiÌä¯+E_ð>ùų¿þ#•&Ç®’l dý?±¾ÿÍHþži¥þê¾ ŠñÉ’æv–("#,´š×ÐÓ’[¡œ °+µ-¬QÊ‚Ï›Ž˜Žò©Ã¨CÿüƒÁÁ%öqžÍ Žíw2¦Y¥’7tt¾u½m^v¾¿m»A&†\G»²G{@hQ7©º— AÁJòJ€€É-wÄ=€¡f ›Y7rÞƒ$šÖ·_Ã)rˆB¿kbÏKCÓ§OKCËgxÏkYó½gOkYë}`Ï‹Só½oO‹SkÃØ)cÐàgá"õçš÷g;ó;jZ~rò¸t‰ÃvñSi÷äÙ¸¥[þpS}áÔÖKTf“ªH«Q‹JÅÒZ½0À~b}µcÓH'}m\I»­R m(œvSÖ¶î[ÿÖ|bœ aú¦-^“ùÊez\“7ù×u«s–Í™ËC4¼9'yìÖEÛ"6Xàš«èzìõ&PKg‘7wÞžrQ6ÅúôýR^â’ˆŸÊÈ«E”è7Å瘌n¾ý±’owòˤ:lcÅ*PÛ:žOÏ„|2Ѿ€%š3,Òºƒ*£ÃDj®^v¡øKžõÌÕR¿V¯.‚ÚiüëÚ/ná7ɸlNN4ó¶ð@ýö]€”‘Ïd^Ar£+œÂóˆÏL5\ú•[UOoŠýinÔ {5…ÅÏ74‰øúò;ïgkõ¿ ßÉY”~pm)ÁV‘ÚbÅ%—ÚÁ“Šù”loo×õ%e‘„ð2gÊœsKÕØ¦8;&FOiòÌÑBy‘ISfª-ñáþ'ãÕÕ²U¶çó‚;]CBÞò>UϹÅÌ qiÏø»Ê3‰*q•üæéðÌ(<ëê#U£r·l¸Îª.ö–wÒVrø²ˆkz+)5±¨g¬‰ $&tõ¥bó;S­¼ÍJ Ô\!6Äcov\Ÿtã Ë: +%ÌFXs ë(³´Æç£¹¾ô¸µüÂoÆ ƒLhÅΫñUCfe®öV)LtԚ„dÇ•‘A³SK`?v °J¢ Ü]ƒ»ø°зºý:Rv•S쪗ÜóG¬dðµ"Â`Ó*íHç#j7`úª7,úJ31—pé5ʽÖJ3}ùˆç˜¶Æ·hX_SQ¶ÂlßH²¦A}'dÀáÚp¼ðñW{îuàíGÍœÂ*3âÚ½3ðvõ±*±’9\;ÔŒ‡ÁÍi‡í\E;\èîñjòy } $1Vá{† œW«TÒFK7WÈ1Í•øÅÙA¸Á«òd)ÓærÚ@ÇÏJd<ûIÓ††ôݪy>¼E«íÃ]}ûBn«Šta»çŽÌù`šoµÓbؾ¨ X¿Üà Cãî´°xųõ(_½™;]çeƒ†j?bñð®ÉænpîšüÄ®U+MA8`?;P”×׿ôý„­JŒmòÊé $9],ø"¢¡Rcƒþ¾èC>ÃÞ¶,r"û0Ï%R ÝÆ¤ðl³Rʸ@%ÒÃr'ü\ÿÀÁavÄpæs’ä» ß@­*çO—µ]„ß Ê<}BX¢ŒÍüü& £6Ïïþû¦ ]ɱmglÛæÛ¶mÛ¶mÛ¶mÛúfæìý÷e«nmí¾&/ÉSºÒÎ¥DÇ_ v”ÕI¿*s‘ î¸çlº éo{äK ¿ßçaÛ´—§Å£¹Ì•J„wŸÄŽˆÇ|8yM–~}˜á²›Ú${w\8^rïå·K—ÏBK Ûˆ4¨w°ý6hˆî#<< /1KÍÄ}~<ÙÀÞøÚ ãƒfŸ‚uqAnD=FçÞ̯¾hÞLöݨ{åÜ‘úG­=…À8ÒÇŸ ¨óO$F¸óC…NÜXµh·ù†…¾Dn¾ÿ%’ÑnãüEúÏxþ¿Y“:™:Û»:›:3hÈÉþ5¶0µ5¤7q1YÕ¹µßfGý÷ ·ño ”ÏÞ-§e8xVOÝCj [!Û-²»ŽÐ2Ó­e*©,}âi\À]B¹äÏ”ç%»Á]À‰gÏÞ‡{ÉÛ±zð`º>£[VI7­Ž.æÍå㣻ÝÙ)ðw§tÚh˜yP¯ì”Ç`4cdÿ7Hx(ò¹ÑàAㄆaXE?@΄ëÅ\!>n“ØSQ²—)iƒœ\û?:9(µÇp.Í,c‚„N«™H³\iâX°ANCg™7j yé£Â‚ì9HÄTù£µ…‡YO2ïÑYíÒ‚sdž]"çƒOºi•1‰ïùðúòòstõÈ#Íxoôæ i›e P6ñ•2­¤£ºðІER)/ºP(^ªùu'²&J£ŠÉ5ã8Ûlà xRä«F‚æ‰\§AÑàA9CÿòLLîìœEÒþ~™zÁ;Û¼Ä þ<Œ³‘º˜„tL•«—úœÐ¸M’#ðM„ÍÄða¸yù0±2µzyNfÁhž>Â<ÂÊF»ÌÀ ²w.ØÈÖ„Þë,‹–#»(õÈÔb‘ãðõúòhÄ*€ãæä‚ªsüácóáÄÛíiÑ}¼Ø|¿Q VÿÆ'»©žŽSª0‡+LÓÞÜàf'£ øi.rs¨F˜cÄ|œ+ !Y3#Ø2m`* ,$OñjÕËý¼‚#‚TîipTȃƒ3>Ä:m¿ü”²;lÃÐ)ÊšC&¹õ¤'ŠúÞ:°¼M^n°AÝõ# |8õºÂŸÇ ›²ùžMBSz¾ìó¢ó‰m²!ž^1àó±ÆN°WltC˜:¬çÖ‰ÁâÐ&†/ÓŽP»­¦ØÃÌ>ß ºh²?‘®•IЏ$AËðñCàZýš³ª4*±oˆÂ¡à¿TúßONyщ$ërÝ%9v{¦Tóñ ¾hªè õÎÈä¸`´RÍ Å?d¢+©vÄAPaÖ¡-“áƒÅ® Ôˆ¢aHØÈ{ÔÔ:‘i2<émÕ¬ñÙ‚qÄfÝh/„‘V¦‰…@de2>AhZúê Ê@ã‚ÄaT§7 71 F@³:€).ƒÍÒë[~ •Øû½p3]«Éu¯ø¾MÓhí«)®íŸÔä1("nL¸CX`É–eŒˆëÛÁçÄ)&’'™z¡à%ÓCDèf‚%jÜ óž­³¬G‡In*[éÄð# ×Î-'æ«B¤Æ¾Áô7Ùéb^%V ÊñÇìSÍ;Cìí^²:…'6:/øÄ#p¨V] ǽÉq]cuó$B±¥úTÝE0ßËeh.nZÅì¶“(<—¥Æo/Eûò!›I»Æä×íýgVàd Šš¹«Äe}îÝÞ·‘Kº¶‡„Loµþ=iÐ ?w¯Çs*±DýÜ7#‰Ø‡öMê•Ø‡ÕTH 8˜0±‡¯;\º P_g-uMå²éý5S›àþº³zT(”’±Kë`–5¾Ät/ÚÓ°þÙ4©Â#ªÝR¯ƒ·Z÷žêõjéƒ/Òr,H¥ÎÖU÷öqn9æÎ›§êå:vL)á_@)2 #ü_ãŽìê|)–lBëW¤l¦Ë€RK,ÔM©ÿ”iÁ:b¥@Û'ÜAŽníXÎ`ÍœÕS¨7‹˜1z™CúŠG“¦Â³ À’`@Æ`Gÿ&úy I£´ií±çûD6hÑ© ®–ÂLÖfæìâU ´âªÍdaŠ÷ËÏæðè^©XZªi5·/Ipmnk˜Óª{ZFGV:¤kA®åµÓü©Ú-ˆÂùc [ i;$ÝòÒŽ¢ò•†ÓŠ‚ò±Í ñ¡ÝºÞvùçv¹ð;–…©­ëóæCÑôÆ­'dáêàÅž)·ð(ç2ŸwPú8B„‰i¼ ŒnB„½? ¬©R"jvH²Î+¤Ï#§½°œñ£ µEl0R€™ïÆРhÆÍxŸ±Ûç‚þUÅg|ã…úÖ/!0PøjÏK <×ÔHg7Ýñµ— »ô͵î”Rîí±Q‰g ç¼Úk¶(CħUÇ{×{Á©Ž)ôÃ5B±¾†h"bwìO Ñ{!wÌúO¯FýØe ú™Ó7@•|¶´4&ÍÂÒüKêdÄXm¦hš#¡ó«üv8$ÕVÝà2„Aã³ í c,ÖÙK×vBÝp·úF•ª/,¾0<Ð(‚V1^"ÊÙ/´Üil¹M×köÖk'¯h«}±syRÔÎȈÙá§"Sô¾*ä–Ž3$~ðàn~< 8)±¸Ò A„’RA•‘íq8¢#ÛÃ"µ@¸ +¶Ìøx±¹·oŸ‘OÜrߎ«V²z–ºyÑy!fZL°Îõ zS 7h0 ùsCevôtëoV”"\ª*Hxu+¥y®e³|¶è‹ÃfÿË»y[…s8ÿ·ŠËð1žÌä3öáŠÕÄÜŒòG’ý¶±¨ù™ê`DÚäøíÑç:®_!KÑ÷ˆ1ê"(œ­_Àâ1¾VìiàÀð)[ãÒñ9Ûb2æ’ÿ÷‘B¯éì½,ù÷–Óqå_RÛéÖ¹á1q¡ wYæï#~·y Êæä31­V:8Y²ž‰d€]Õr$Œðv÷›å_˜Ún1á2æG0–‚RÊo'Ç00ÀSº23zÛ…P“J3ÇL}|x ်m®)û€Ð‚Yœör ß˜e8kÌEh c*Æ(C ä€ékô~SÞº÷áMLU·€¶'Ò÷æÁ+P}3Ó9°±È,¨ÍŠø¤ óxÎfŒnèßÝÍví+>ñ{§Ô9GÑl¯wÓ)µAÐ0>5ð/›ªB ]ÉýòચÈÒUCw¹Õ?ZÿøA.p`ªâ0QÐUW~}¥«rUÖŽdï×<¨¥RéÓ”IV9TÿÄ í B¸6í‘Õ gàþPƒ¤52¹Ä%˜QTAA3‘¹$ÂKo tïöAõß:0‡Lø)Ù²þuGËþaîU&}ôCÒ õ髽[ÈËħߛ.*æ§)z†–ÙNŽTGO~SˆèŠhyòmçHì_%§9Ïy|ÿìÜ¿?tþüšÑw«LŽûµO…ú—úx7^cû 3?9t¾¬±ÍLiNŸE²Y¡ãrP¿Òo/ŽŠ P¿™Ã¾ê ®¯§°ÝÝE“Krñt!œÓ®ÕömyU'óû÷nžÌ»j¿æÇ\è|øV÷tä!Žmú‰5Ö„]‰2³«q{@é`“4nbÑGì‡tx¹}[G@#-Nù¸±ºh€Õ M~ú,n5˜£f"#hÃϘÍT®šI$xKCW§õZɶkµó|±'œŠ_…£ð®tP辫nA"S7y"{ 1/ «@+¼!4GÊ1ÌH…ž¤€ 8q.X8?â„ñ™ª[ã­¾uÐ>ÖÂ5÷Z¡ˆn ž]÷4 u›í‚,$öñH –B‡ïµ!eVº²8(þ5¦ìVY]¬4Ú©²'ÉQ7²¼iÌ9~ì¶õ=\gÒÿòæ™ãý:´M¢ù°q¾”ª* B/&4$nWǵÑn§ˆœ¬}þàsí— žæ•«Ðqu¸ºé´{Uîwg¤ôþò#Ì’ëM®šiÎkèÝ:î_ìm¨¾7™§s¾ÐÄœÉoV)gªÓ@œ†…_LG¾§äërô·Ÿœè·q0ó»I™ÛËðƒ3«ÓY5~>{ &µêŽ[ ²o}•ÖÕYŸùš{[la81ÞêVD²–4#í¨ÖÏt)S˜Þ—Æãծʟ <ø•ZíL×’êÝKv#;k¡2øzÕím§ËTúãX´Î{ÚL…ó<=¨™•>½!uSƒëø£ßaáO HÇŸ÷HNŒq‘/­Gxëõ\›õÖjûcŽKzZɓޟ&»¬lØkfÖëÚ]žùÁôô{ôO½$!öMÜ RWíþ®Œ†Ùd€8I¶þäèø³z¸Êä#ÆÁ6C]øªO e3Ù«uÇ{ èé‡o©Ø×¢àæË•Wô•È}ÚñsHCÝ ý zûçUX[ht{3ô¯>èŒ÷ݹÏë-üWטO·û~ ÿÖÙÓÏΗ¨ÞPúy9(’¥ÃÓ0â>b\~ž÷å<}ø†¡Å{Z®aÚ-•"ãD‘BÁáý¿(&†.†.ž¦Îÿ³@©Õ°u&á@ùíS~9üÙ¦x3»¾š:¹‹ªTôXoH¿‘„R´K `9ª¥øí*Å_‚{ åù,^,V»¾TŸ}÷·lßィ>ɈZÕâµ/Èmÿ•YU¾Óž>oMEXžÜ[Lh1tÌxA|fÿ.œ&ù”ÿ;² óøXè Ça}ª³MÅ[Å`¿R¶Ü0Ã3€K#9@„ͳ@BÁ°J šï]°nV /aî;c^Ña aÑI8°¸ ´¬fùYÓ¢Œwwüô Çôá§ÖÝEÏÜÿ:0ã·)™wŸEÇx¦ MùïG¡Åó€È(–‚g1mKÖ*Ç9k%NT,ˆÕé&œî$eɘs£>Õ¼cÐaŽ:uœÆÈX½þbÉá>ˆØsgµIN0o*Ìë›=ÈÜŸ–rdƆýõð ü}6aÌŠÍ£äüBöJ®x¶`¶–ès ô“T殢Š!À>*Ëñ¦¦MU¥’ù¦‰§P×n;jPæÉ“æE&ã݈±É* BŽŒ·8ÆÐ|ÕéPêþ‰¿ï›ßù…hܼ]/g’]ÂMã¢L+zæ (l1jFù7ûÇ+¤Âc?ÒeekPä<øqµpGð èïûíñïcWâÃvr ü bXd?E˜BúA|û¸òŸa·àŽçEu%ü¾#$‚!í¥Ôö{x9E8I…øïØðœËB²ÖóM²Æó¨;˜42 U£†X»ÚoÒ:ÖMŸ>±Õ´Š]M€\á×Þ6螆]çJ.IÊ— Àli³âBøa›½9aˆÝ_Š>VˆlŽ.‰1ºŸó g'ucƒ!2d7Õ:5&^œƒ“ZNÅêFÁ»HªV,6õà}®Õ”R„9^÷Ì…9ÁføˆbLUøI#Ƈô¨~ñØ\¿û“)ŸøvÁ‚b×iãÁñâ K¶8×1 †é.„ ¨³–v-»ÜÀmax˜dÏÌĤ“A¸&xÍS)•')pg9ºj躪AËq$*FVÑ(ŠE…ËàŸêq: kžá"¯Z+^zÂr…—¦j Zú6üünœÃ§ Q‡%ÿ¨¨}&U80½¡–qKÁw§*»/}(ׂ-‰¢Áæd3Gv¬Ä2ö*a\kéÃßi”<2(Úe›²´†2Ÿ,1Ë#hÖîi“ÅxÉÙ X>­,77–_—rÊu}tK ,qëñY¨¡Y"#ëÓ'T¤bÏÊ|†Ae¾“È ÜtL3³<½ŸÚ.Ôøû5p_¾áÀǹ&úX½æž®À-§+_ËÙ×çN|®”¤¹Õ°/!†“fŠèr"“Ëàд嵿çô4Ô2ëWð^ ¦ÅÓ5eÙºFâò×å<êÌïBïlž?üEóò kFÞ‹¾6mjÎC*×Ôõ Í-ö‰NeÆßu×âeºÆ“F´ùÀcaÓåFæ3̧[< ÙTuCJ߉¾[Ø XY(°5TlJSoKkßdµýjì¹µžÃ-‘MeA×äÒëë}Æ­åV¹Õžw:Õµ.AJÍÇ•5Ê ƒítЦH)–8 •S«¸©N4$óZý‡þ3Zzm9«ò-m=öJ0$s‰Ã5ªc²ÓTVØ öÄXÖždE°¶,¯¶hõh+g´…59mÖ3qP¼fÕíalz3î›eZÉÀ‘ƒ~ç*bOg¿;Fbê©)”9—MLO¨cˆ.ó 6]#n‡ˆ];n"ë#Ω4øm·ÒáSS\tÅ_z6z´ÁŒ´<¬øÝ™è}—C®Ôbïö¬·~fRô´#v¦qìxFbm5Yä™f:g‚,-vAñf–Ï'tàŸfžÑD;”újóS*Àÿʇ.ÄâG·ãÉRT§ž3§ä`"Ç@8°y}±ÀC :$"o0Æ/Ì8+½ßÀ(J‰ñR8gCì1;æñ¸ø‰q²Lï¹Ý ä`í²äKÛE²¦< ´IÛ/쫜*ýÛ—²ÙIÓ§´Ôðn.à (bÃ,ÈhÿÛ{ ¿Í¸^žAoP“äÀò˦€lëŠ  {Œ×=(+«}zÆð¡!¸#ø£„Ùg…ìnÛÛÛëï‡NÝ0Õ¨»ÒÅqôí@ä×BS÷ L;m¹Ñ¸ÎÙHW.w¦Ò­ÐHùþˤŽ4ª”K‚îíÂ3mfeÆ3èÜsí-åöö¨Xï¿£¯²Û¶0ïÇz¸ë*#jºlWî>²Óu}mœ:–Ñ\eÉ8Ó¸mSu:™ò gêÊ•¯ÑKoˆOi,M‡’nyT{pÂfˆuR±ícñÏmý›Ïú]ÙR·õÛºùgôÎÍm³æoÊSõPç4Ìáœ7'+ ÝæÙ^’ÒžEMÃ+fèn>ަÄpzp'ú÷zª5­“[™W«Ga¶ ÁÅ—„W§SæY¥»']ìÇQ_íÎBw_På)‹‚þŽYn¨Û = ½|ß35ÅŠæ7·ijÊ¿<2º;%µŠ"^ÏßMÓ-‘⎻€ÌV‘LP¯Dv6¶WXv‘4oLB§$ð™¯à ^(½kô£Ä”ãÛ*á[ÆcŸ殑!}¿ Ó#|dº´ÜPñoÿúaþúrho©åyéÊÝÑw‰]Ð=[z‚sLîzS@OiÀ5Bôû¿T 1Pãß5@@ÏÝÿ7Cÿƒ2¬˜MMõ™ôYé=œMnù¬q9’òS© i›UÛ& MÊ•q%Öòh§5MñÉ­'Ó·§oKÃðp¼9‡ñáÈ>ï×@g‚‹D¥Ón>DH .ì\8pb{ûuäP‰ÑÍ/Ÿçì–‘™ñÍ”râòÝ÷òz¯~:ŸÓfçß~®mý(F ÙsÏ?zÜÜúÐÌÏ•ñd‡‰¿ïYqÑÓ éG«mÒÄ Ø†)ê eScÀ|Ò:ÿLQt•Ðü&0‚ðCѹ»*šàƒ2ÌY˜ ÏIfa˜þ¢ŒHljÂx²¥, Tb™%[¢„_*FMwp–û±¦~‹ O@ˆA­ŠX0†ê“¶AÁ°üò0D]6ûý{zb†²ìJ‹@¯«ü¬‡KP–Kða±´{fS(S%NûÏá•ñdD;Àˆà„bY èEÑbr¦+ª™pžLóÒÍë²Þ!É¢U“ÄC6 g`Íl×qÂþ]äâD/Ç<:xùh‰ôãæ\#ÚÏ(@ÚïáåäàæFîE Êëäãÿsé׋ NöèÇÏï¹þò;YeÇ`4)r,WöÁ2å%cKö@C4´ºôÀˆ+Å2”¤š‘”5åD¯« ‡¢ˆ¤t2)¼zŠóâ#k¦Açûp-U‘^õÜH+?©Òõä)Á0Ýý@·B o° þQyÝçKl*Þ,Wáfà°!m s¸eÈ_êí¼ûw X/gå\¥p"Y>RMSЛR┉:ÏõŸ{ !ýKEûâå¹jfY[4¦ïööHzH*xí ÐIìßtóíþ_;ßæ,×wóÿd°²5àCçQðè¿»÷/Ýf>º×wá! Ã##)\Ò¢î ó*;©OD]G¹áºŽ®suaÀ|04qÌË^³icºŽÆ'G„”Mt#"¦Z„_ÓÜóÜF·X9¡ 8‘Wâ™mƒLý„J¬ùÙÞéçDÀe5&ȇAÒ„eŸá.Ú2Ö‰(ˆ›¨˜m‰ÃÏ-ÓLŽ;#Jp†š@PA(“™' €ú,yáŸIæ’ïIH,¦ÌB‡áuO@OlÌÿ´µ $é;rËš%‚­¥OT&É֥E ]40m,RÑÄN± ƒuÑÇΚo…)¡#!stQ¬dL±’”+ˆ1£RÛxã R|2‡Äs Q›ÛÎéŒ(éæDŸM?{xÐ áŠkÇ5ÐÓÆúˆ ×ïtÆ8ïpu‘½*­-(‘DjKå,¤€8&-’0ÇåâuP€Bï‰5/‹dÌ)ÉË[ ôS2ƒÝdŒæŸ9¦e¿u@‘ˆqñþr¸F÷oy òÌSOº# ¿(eHðáïØ‘éÊQp~*AdÐ1Áˆ¥q†…É% Tجóf/­À¥cž$Í+ìB” …×/@7ÜXB°Ÿß ^ ùçãákæ—ÿ=YÂËð¡-\BFòG°æ ¡ÿ'›² »í"œ+[A\ úóÄ’™ÓOù4sŠ%EànÐð`™Å! Z¶c*ù– Æ šÆ‰5$^!´Â‚µoBòl®†zio)A¶åë$•ú¯TM"ÑIKÐÝ`óçîM>ïÛ04mw_Ðe}Ô-zBœÜ.…\Ê-òeR)Ç©> 1K'¬Séa ŒÇ…l6¬ýš®5VrÌi™,{¹&Óº<¡NQðúB¬!Š©¾]tˆÔ¾Ãµ y¨W0´ä_Þ2Žu%&ß0p?í!èV9QçCZ,r žæŸ­L>c¸£» ˜Zûæg1¸À£eaL)!WM” UÿPM“f<ÖF˜rÅÃì) ý©®AäËŠã,ÇýOç'ÊgÒDÚ­]¡ýiÁ±R6¶éÅÁÏË{¿Ÿ×|@Æ®ì¼,h=˘Rõ/5ynßzûÞ5#P,¬ÅtÐé<‡Ø¡d œÿרïw¨f¡nS›ñH¡ýƒR’¥uÿŠpdð9®Ðë¾ý£óøJœ-¶RÕ|«@7¸?Ý©*‚À ÆÕJoÉ mB’Ó·ÉŠD¨wo!ªb( æ”ð®ìÏÉ IYcS tŠ­Å’'¨ÐÊŠ ˜öHÃÞL™œ2§ÄñKu¢UŽkÇbAiƒsÌæ8/%*‘íb¢æŒ¿ZŽÔ¾>W…ëé`“¨—Í …@Ч™½ ôåb¥r~œÕæyxÞ´=Lûf—€·Z’"+{¯5ä’ö†õå|yF¯ïy Øå±êW°ëÃÃ=EOºúåçH`õô®£¥’;ؼ¥âm‘,¤æSØ—{•ƒ×Aná¯è Ø–hªƒ¬bQV…kʯ!ƒzˆÃhÞ[î`®TìÅO ­°Ê+þ0÷+Â*pd½u0¤TØQœ€-f™#x‡Üq¡º¸‰¨¤í4˜°xôë_Ð iXáÀ¥Oùð 55„’OöTKè˜h*©Ì Ú"Z·wÄ]Y¤é|ʸx"P3̓uYqÃjYMN0/#o”J(©âÖHÖÙëb"œítYŠQEÒz8"S°ÇÉò]ÿÁ®uíëíJ9æ5ÉÔ4ü¤ùÏkª€‹¤š¡ÃÇÅØ4øm@;½ð„lÛ3çÔVzáËà^‡ÜÇ'Ð¥¹wö'¸ÖŸòTðU3öö1;LÜæÄñz{qµ5b¾e~Ç2^î0™`XµMßÈ h•¿ÕBÁ#PÏG‹©O(¯p`šå»‡R…+—V+i]9h»'}¯;uuîžÍ²½ù9<N‡4‡XþjÔp%~¶ÒêCTª²:Mýä4G¸3Âp1jð 1D8Ú…Ü‘¯(D> 䀺£ ç.~¡5ô‡{ñˆ¯aùa)¦¼÷\f¤ýÄŸø] ¥ÙX`6NmÝìíÛ6Ú‚’!¤›…'“˜Z=A‘KKǾø×éß_$˜ãUÃ\%ÿ´[>r x]ê‚]%WxÞ%•3N7&&Bæ#RA\uø2 )J’§p±€o¾Ur~ݶ~»†ë> ‹NÀoMÌÃÍØÍ&g’ô1†ŠÞas×yÜðë°€‡¶6t5Ú^’äÜÄ,ŠEíº™œvˆó>”¿ƒqËBW¾`ž‚yü¿O–‹Ë:.°é}óÎwTŠ—.(Ì6´¨/çÁI8ªävT:%I ÿäz):WEðc¡™Ÿ`(£°·6䯫±1¤ÎŸ`i­ô1F¥M %õóžW™ü­¶.-XÈÖg¦J”æãøöyðªZ)è¼(ÈSQzÁÈ{´†¨Šé¤²åèŽÕ1=äf,2V£W¸\3Oõö°8ÖBù©—™ kóþ'ýêWHwÊQk«`êqo„Eœ¬AæªÁµ50×$v!v®¶2p¨&(·¡PøÈ`àxªÄBŒµP¬óK_äH·êBb d-ÂSe_1#Lx6\q£é ¢+¬ˆ×J±&»´Í#—,{˜ÑqfG®tõ ÕQKxÈ<–˜’³¶ÐL ‹Cá`/ɼ¤ R©Ö=`ÑÌ4žø4ÓTíÕ¥…õU)ÿ’ö޶¿eì˜\ûІ°Í@¿]øÍÄJ M“¶ h9¨ÈÊÓ 5Uk-518{b€š·ªÜ:ÅðwAÓúWˆøCV^×|k£*m\Iç÷•©Ýþœú¸†›ZÈõšlfÏßj:Fç'É—a:敾YtÔ (ZÇ\õ¼rq/QàÂ/T׈&49Ê‹·s®e!äy5‚ˆoÅ+•—16LåJ¿ðЩäEÏøÖ|sÎÆ™‡¥ùp–é⌺>&¸À*ÕVhu4ødÙm±ÆPYAÄ]‰‚…(›Òc6Œ§ó÷®ãçéξÆ+K,ªx^èèÕØj'éÿºì7É—ô*ñ*e¬q{}³Mï¹kò i£Ö²Q5¨®®~åÛ×ti¥¶.}Ï¥ªU§µæRéÔ·h!¹÷hµ²¥'×$¸ö®Z„?uï})]Ö´^ÔL[VË*ÃÏv¸û¶j6È—úðQr‹’“ ¶òËZ¾¿ Ehq@®f‰0Ãw³©hëTsH£v, "xöu©ñn»ÆD}e¤š˜tß¡û|Œb?xÖÜê#ÆÆ¥Ëþîi 3ñåWã€ÑaÎ4ƒ ùŽè½Võö÷àߢ,G¬O±65´j厉^Óï§?©Æ8(5-a׳¨9TT6•VX7ÛT\á£;'ØÉšß Ú ™‚µ§î7èunuZlùá©mè6?qh;Ì®gµ¨UfÆç`¿Síz’íñ™4±i¹ì\0ã6²Žu‡¾È„.½ötçO{˜£PB$°Å.Å Ó-ÿ”öêï˜×)TŽÀżó¡|8ybÞàÔD£×å~8¥¿«‹¡ªBXa>¯ÇIPÿئ¢Ç”Ò']GãíÝ"s,+-‚¦’G|•Áød`„ôò;_dŒ´Ž[–ò8—ÆÍÃÍ6¢ë{=›dËst—#à>´í¥pÏP@Û\ÇBŠ7ÛÒ5sIæU3Ì7å¢Áã.`VùL#úÎîT¬qF•ý¢ª–9ˆ{µwK­(Ðuá«(‚[Ìaþ,X„bgAŽ\ˆ9ûþAÉP'œt%ñ¢ÈÆ{3ºƒ±BjyßÎX?ìáuy7AÑŒ&Œ÷Ðfí¹,±ÔÉ&.YŽaš(ûÀtŽ˜¨{¶‚’e³¼,šžÑI¯cÑ7KÒóX¤fD4ØÀ uéÝß5˜FЏ:ìž©†qÀŒ+nã /Š¥$ÉÆj`( 4ÍÑk¨,ÚÈÛknZÈÁRBKq•¦ÕýçvÒëï 'B6‚r‚FÎ Ÿ´XLüXéì[‹iפTmª>5Ú<–•Ú?6¢µicÊ,¶¯\sÆuWuÌd-™¦,2•GA>ñ©ÌyÔ» <²$îCCêGA½¬0jó¹zÃôéjS!õTâá8³á^X“Žrm|£¨‘û–“³‚j›|îD†/˜aöúãs¿0{gª#ê®É,ßTzÊjÿóË®zš.óhyº)±}¢og3õáÖ–]S!ÄÔ]g°¬Q ¯yg‘7’¥S}¯B¡á´Ç h£O5ÛRn”1à5(ÎÎøŠÙ«Ûïá÷¨ü)û2£ ¨D\9³g‹Ÿå¶¯í†ôÛHšŒ´Dˆò8{ÓxÆŠ™ »¹„¥û]¹òºë–ÎÖ_AQ3é(êüq€“Ä=ÌL(*RU?–¶}Þ½bu[?8c‹£ØU@hŒˆ ’·ÃÎ6M™WVâ¶ýÞ&¨<þ*´Ç¨,Ö^K¡÷É?G赊­qÀ,Äé¶+„Ä÷ê$ã;“*~YeK¿±í#INRä¨Î,É·8›Ø’[|µÕXÖ‹‹¿<ë¨ÍB`ôÊ¢íþÇž=´˜-¦k}v‹µíåíèËQo}ˆ±5ËqR‡;G¶2ä=ιãTÃð’¬…k½}…€ë§Ñ\,aÎ.´$ÏYÞOÇÄrú[›ÓËÓõðÖÚ%*ï°nÁxƒÛ8óp »5£¡.¡øO:(Ý9O™p§JÚvä¤o]½ØÞm^q»ýïé—Ÿ¡êéÇÊJ,`‘9M‰~‡4Ç´£iG;§çÈ7ÿÎÚ»§¦Š<ðC7—G¿Yí½ Z§ýw]̦Z§±Q¥¹éþºlÖۼĹ²@+{⧦à̦ñ=Kå‚­s¤þnÉ* 2þ-´ŒWæDëéÛ# *sGF쯔 ¶]žFÿËwZ¢Q ³®µ ˆ¸L¢Þ'm£%FÔM¯Ž shü™ƒuÚÛPªsFº"uQ8ìKê¨Ñ\N¦µŽ©Þà”yj}Á•1è:Û)ŸÖUvE°® a»•g…Š§Í—Ei¬æ"Á¬9¼‚;È‹‚î e|Ãeôßt§~Å33ÅèÖѺÄfiÂ>ÓUé»P/‚ðëT&Í÷ɆJ-ʳ'ãT‘‡GBü¼Cà:°ˆ)«FïâJ–.¦žßöG`.©ƒç‡ŠÔ¾rë˜Üöúä€(¾Â*8Aÿ6^»d©û×i{ùç«~ôø%Êö-¤íËH >&KÁ‹½ÓX¸ Ó_éAóýÂ9f ÍΠ1gVB3)y%}cj$Ããa+zÊVH´ñ;[‚±È@$©4r1Qíq¤\è Ùã"Œ˜¡Pb…þh¨ÚüqP±\7†N\ Ë?‹âúbÑI`“´ÖèG\ì“9µn(4èÇžÀ ¢^ bþ wPQz÷Jlå’ãŽ¿ÒÆ;~¢‹üͼ——™5VÙj‚ŸU h0ÁLΩ˜mbN;Èñ­YÆ[ÐÁÜ—[àt*ÝçîîÁ”¥i!þÑßñd¶M½Ä"+>è[ÞnЏ¿Þf¯ 4š5Gêr¥2õ†g—ý?Ì®Ÿ«ÓS¸Ž_i>ž ²ÅùP1!b1J}']{[æ¶îNåHcOBeË«"›pÏÁ%yþNe®CR/”}Ý)ÿÊký:Š^à‘CÛ'#'¬xFê#(yn·[w¦‹!qy†Nú:•"#j,Œñ¾!Û)ºjú¤G—·WôøvoÇ;}¾ß}Ý]÷§Ë»~9ÓîO?›ˆþ<Üñ§Ëº»ïO—vK§ÓK¨\eŠ¡Þ&#-k×¾ V¾`„ç_¿•y˜îWîžû4Ú—¿Ç:kýù5x ;FÊï½!+—ã~nAÝ:\ìmü ‘ïƒkqÖÉÿù¿ÿë(à?œÈˆTÃÄôÿc»ÝMôÿ'eùŸˆ>“>Óÿ¦¾µw·ÙQüÕÌž ºÂÉ8PL)};¾PÞU¶-SerXèo]¸±#BÈÈÐQLLvõý»£ƒPÈyšr-Íé#倢Gý¾ß@'–ï0©´0tªo5ÞXø.™F©6o5€»#Ï„»÷ñ÷ûÞ_rýþÿŒ)©õÑØ6ƒƒí7Gu çŒ?ÌkÊN“0ƒøÔUÓP.vûÃeô¦4L´Èàø£ƒR_Qx–Œÿ1šÇ½#P»Ü*ù’F¥Ôm4i•IªZ@ð•›*eA‘Ó'äÉØÑ«$ äóFƒiM9ËüiÒ!¬~­¬+%'Œ¹ÃAx~Ùa¨Ø ðóæziŸ‹ :ô¤òßâUðÊ,õâäçæÆÍ}6k<ÓK…­Õ"¨5)iÆœ ¨ÎP XOeÊ`ÆÌC•‰§§…ӈΠ–ÕÜ$)»hOJ¨qQœá†:‡¡‰XòïfÄ醜±Þ’'?Gåë÷ô€ÃíöáçèÅÍŒ^¿iy½üü8zñúùÃös_ÀûÅwË8Øìrºg %;ù”2YG#‚Ÿç«“ìs×û½«¢.9ƒYï9l¡öÃ÷„À³¤º&3PV°,"??ÆPm±mÜÃ4&=°Zý|®ä¨°É©³*­ühŠºåg @bô/R䙞Ö({™êæØÈ€>b÷ø]¼ù!É‘ñ±ˆKë¢#˜wH,Àúp?ß‹¯FÔ$$]Ô|ÔÏáð!˜µ $aSðxðððà ªŒÍ‚ü¬ýÍO(WÎÁSFluLo’cá‹tºQ¡·MʨR¼¯»ÃĘÁÛpJ¦ŠÝ«öh2÷ðßÑ0ËJ¯°Ò²".ÀÝ6%¤‚×.k\2\yÌÛ¢Ý_DÜž¯Õ~îl'Ä:XVTXoC¢Áí©U°ÑÔbç⪠òDÏ4#°³xÇnN.ÓÚ w®3nœÝ è™bˆùNˆ¾ >´iE‘e°>ÿæÿH:¦Øð’êÄ8?¡êâ˜é yôÈø©õGØÂ”2¼ w½€ÃÉb ‰Š´m¸Â%æá–#ôÅÔZ'U¬h±‚ýàé^á½e{?.|=8ÿáW|Y]â·Î…sV3Š%a¡ºË¾ÎÈ3–v I2…Õ(3¬œIUјXétœDÈOH)ø“4\µñÅ[‚¸j/öIŠ»c Ñ/~DFÐûç sz1Îèïî!BŸp} ˆ9Ïc“Ý^¾®Z­“á ?t¯~ߪݙ2NnëòêÏ…$3eXL¤÷¼ usµdmË*FÍó¿ÈUp9/A‡¯ŽõM²5¬g®­” Kð°s ˆKÖ$j*¥Y" „tŸ,Bp²ÇÍ+ÐT@ÁR´3;qòúØ[Âý=˜? ?O@…tsAbEÆ€ ¯uÕLâ¨@'ܲÙvé6i[ÒÑ=°ëç¤EÎáÈ¡†ùphÀŠÇYW0¿áË©û.)GÛ€!S¹­H¢¤]œ¬ùdy·—>³–4r°µŽ­ËܳÏ` Î×)KÓ â¾>b`I¤RÐ+óªK+DPàUxxK´«ÀþIå”my(ßi†MbR¢[Œ%°þòç-f6ìãA¿ª÷õR"ÝCúÁžEc“j̈³ÑöjÚX•E|´yÁ4_!ˆI~º™Õ¶SjòŸªëuî¯ÒúÙ2“ÈïÐv ¶5àUV˜â|ùàe½t_+¬ÑNšéÆ•ËÆo0æLöÈ©i¿<ϨŒ ÚMÍÍzçó"é ­«ÙüçÄONmÃ}L ýQ”D|>ƒŽNâX^d0\Ys[DŠôÔ˜ñB6„ýçpÓ ~âS`S²À#{H³áå{àVò´fƒ6ðˆÔFÙo0²þg´ W“µY«Ø×§5ßEp þÊ a£GAwqýd!ç:Áî¹ ûX‰Ü’ ÂQ4]¶üÈÿ vÏOW–W¢FaLKù±Áî7ÒUÀ墽é±Ë‚ŠfçÅwÌi¬YjQuw—ñùuËáüÊeõ׳®ª¨U4N³kdËŒFÇ›dʃŠokk ºA¡„#t}^‰–¬;T&bÅgÿ¼oæ3SìV$Z`IüÍrpÿ™³øTpÒ‚ˆbRNt^¨–²Áí e@*Eö.Ç_b…©»ÅÁvj–ÝØFBZÇ6´¨HYz¹½.“MîŸy Uß;4 m*þr€Ï´ÉKÖ2M(Çà!¦7툣 ™t÷Ú>Ìó]FÚ@Bð¸ëìd-©ò°É"¯‡˜EâªÌð—ç&JƒfA%®ÔйYã3 üõ _u´ëõZèºëUêf‘k‘xHr&ãÛÌ×îxàÝ'¼£Ÿ,ß–Kc&$Î|;~hÓq‹Ñq­¨R—ŽÇþ+Ÿç(~x L8Úì§s’Ú”ÍÁêîã›LV!’3›¯Ï lP)Ds²e$:lp„¼?-–ùƒ{nkþtÊÃ17:f UlÔôÔPd¬òiЂm§«Põ±iÃrxŠ”yuÖB·,ÖÏ1°™÷‹cÙ¸`]c=²‹<P9ó–Z¿¡AŽÖìŒÞ—ÁgM¾÷jÈ‚!õŸlE+«ÇÃB2ÑEEŒ´!’$ 67—eŸì'å ßÎEÜÙ”­mtG›æö"œ‡÷Ùf´c6¡}‡ tÖ™øqþ.[ö™†8M÷•Iró£X'C…óü•ÝH‘’jû ™É]u)ZZv/#+n¨VÕ±îž:u ž²qæíœE:Ehòµ¥Èò»šO/ìÛk×ôÍ­ÏÑPÔ«`3¼W–£kÊ·ÅY4Të^7ëhmä*·Û«´ú=Pâq1Ä'û™zÛ¡g­!mê8¶1[a{û•Ý W[û-þoafH»¢«”Õ,1cƒG³’ùDFw«˜Mcgwè>Û¼+ÚÊædÏ §û­*N§Vä½h@^û÷P€#l'Ç ù9¦Hí•óøÊe`æñu›Åïmöï8÷i—]][rϽêñNZJ-0|-½ƒ®ç*žñQo‹Íéçê8©xOËúù&Lâ&äK<ü'NÔÇ1D#ôu ßÃ$qܧڰ;ù`ªom"ÙtôhbAPVO̧Kýˆ¥ˆ?~i+æ¨;L e-V6b·þ+ƒìdaš7Üy³=ªEÅ×øÒšËµw6àî®Ò¨Û/e~‡×¶{â¬ù9G·"˜s§·†[Þ ê­*Ÿ5Õ͇ÐÖ“f¿ó"Èààd1\,ÈY¡jƒ7x­ô🎽Á*HU×®½gU£å+÷övóoÖZOW–ÕR,mœ¬›~âaæÓõÇëa»ÓwäW¦úa{ó±ÛWÛA»Ëæð+ý»«WN½Õ•Î+xwÓáC×a-ÀItÅÀ›=½¹g¹ªôJí󬳅L#Ru76ÌŽ%%˜Ñ¾ÿ: ÚÚðõ×ÒþNfö7Mg±Ð! ùÆ“ͦó5Šãsjï¥~%l\ØMIÊnN>\89¸‡mm6_Ÿ¶.>k¦À/œ\Ógà ʉ´¢6pìè…"Ü)2TÄœ Hµ¥¥`yÐlË€Ä ªÆ–#e0c䤱Ž)Zš©…:q†.¶ûÜ€šÓl ô‰+w+;îF:Àƒø¿¿ü­—\³y¶ ]N¹²¢~S§}Ú…[ãu»¨•þ°„ÎùS{Nêáõ³øMâ$m[Àªöµ9C:å_53'aFQ¤»·>´À ‘4î6Æš+è+®e™ÕÖp£hÀC™o- x1®*sëÏP#?ïuôçryMHëh¸†|âwü·>;çÆUë_¶­=ÜkëX6ÿ˜ ®…¶=„C´©ÐU¬ÒuÙèP? ‹d²JƇ·\Ö%D¿é>½Ãb~ &Z¹®ø–ynãxæmÒ:'áÇ<°Û®F ôlÿ]4>þ´ó_s¾à¢¼ÿÔûbZñçL· ‚žKŠ$òÒL³äѯ’’eeóaÌËœ‹È§Ñ “V!õK€°e?ñÛÈy¦N–Kx¬”P4zÊbxÒ&w¢Š$£[U&wea¯‘«&£6ì ¢ž8Çø\+b‘ŸÌ,ñ VÄòÔ‘"búÕ,W“Ñ_;ÒHŠ6ÆèG U(4È"ºQJ¤¡USN|«Po’•Aª‚ÍÉL³›»®·¸$df`0cM§OI{ oJ >Ëà$r)'%Ž"%“Â^6þ·ædÕàÛmB…¢§C¼DYíŒ;ÚÔN3cNÑ}ó¡Õ¨Žý'zÑ«|àçxטÚ-~„>ì Y®ëH)Ì«g’v=A”Žø×Zà’Yß½¹ ÓQÔ[~wôm•S6@úijH{µÀ\—=î‘‘±hTnÊôeÓ²ˆ*耥p<&ç§S`˜@1õÙ]#¢áöëÕFˆVÍ£…Pš« Á:V*Âg¿“­Á;¼Xú¼íXù#E's’Ž1ŽXÐî³Áª“þ¥œT´Ö«’¡v¿è*ŽþÛha"ÿ–´ÑõZ:çsÏ–€èxXXUx—(c˜&Щel4*fj°kÀ?n0¼ð<ßÀíÔrö¯×€~ù`H„#ÒñÄþû7 ºT©èÕÆ¾¿ÊÜuì ”÷Sl¥É¬/]Þa3.Ñê%}ÆÇ"Û‰Cì¾÷q}ú¸üZsQu^¯¿BÚ6¶$jNÔÑ5¢‡h/szS®%ÁTKèáµ+)©¥ FE—#º`-ãñÝÔ¤iÒ5ë<Ý â]ã3üR]{üX°mÙ² L<ÃVhÅT5ÎÅÍ“’ÏÏL™ê¥J;0e~–ÍAM5ñÖá*cX 5GbäG”ÝU´ÝŽ¡9Ÿâ›ól%/-‹M¥; Ȉ^î}f á;Td‹¹on<92ŸÍã—ãû¹ÿ:ëFéõcgéÉÊ”ï¿J8<ý~\œ=ýbÿåFÜ¿ÇÜ&=–ùÐß)ª[‹c ÈȶªüÁ±«\Š…tÆy°V=ë ËÏÔdq* އeA¶>VÛH’祱̒ªs™6Ü·¿  YO¡'ð\óú¼ø6ڋưÞ]4Ïÿ—#ë¡sg›â¨V«3¤röXÊÓCÚt€ýA Þ×82é‹ß˹Z¥Ð˜-îlœ;Q`i—.§rI*ã#õªÌŠ.«Òoë³$ ¶|¢Ybe¾{ÛÙØpFTÿJ3 Ž9Xö‹”‘ŸÖvñö†èÇë6îu÷íY~”¾a‚. :¶/ü¨èûiÿ¾Í=™H²„|Ôhó>ˆ.ûY[¿*å6*‚2Ô÷~y?!xn´´UlSä{a¢‘^ol"ÒQu³—ƒˆ[38UŸ×Çá-Ÿ^®l𱎺ßǧP´˜Ú}œ(ÿú”.uDÓZUµ²|ªÁ ý^×ÞþJCRÊ\êF MÚ˜ºk-RéXO´‘ø«=‘1t©®¤Êu^eá™ÒsÀFÙ½±Tþ]réò­ÔG™¬"k °ÅÄY ‹x3I‘¿1VãšÓDg”7%ÄVju“~aŠi…¤H£¬Nšµ©Ô°_r=E¼ØÄÓÍ~¨(¢Ð{˜U»ïAK¹ÀøhVU2çÚÊ^lû§ªj”ñ®2W›êº|੃ ‘mw-@W89R*¶V£¤€£íjÈà0¶Þäa\&/[•M4²5¸Œšý­[ yErFŸÛV·°ÌHz}¯dñ׬u(f õhžÁ{n‚k¨6w1¶‹ÌåØßdë$p1ÎPhb––fS µÎÉ•R–R¨¯RêïÍU$Ø\F}s–ü7¯ä˜ºÌ 09Gk¨{äð¨óÍ×Ç+ÓV.®4¹^²WAÃ%rÏæÁ_ÏoòDj^@ÞŸâ±cÂßre*ÌHpI.Õßä•9¬LÚ³riÃfV¤Nèè'5Þ·Ñ\"Â1 ´Ï9ðM<Þ¾E©vÎ#»4à-–š|ô…z/Ñ^–Ã;H…\"cÅ€\7ãòÌÊFág(3ÞŸöSa;;áM|E ¥`çøfïóÆîTª¥ö*•&££v3½¶Í:]Æ'Òè™1æl1Ÿ0Ÿ» ‡öˆÇ _¹Ô‚ãÏmhKCc¥"X'Öy« ïvkÌz'n’ÍRu”7e‘F<À’±¡Èÿmémî$ÁcÍÄ_VAž@‰wš¦\ìWiºŠø¨—òæKÓWìZ[uîÏ›¾‘¢ÅB>?N䔬dº£}Þ¯·p.{6äeE:Î4­î†±ÿ’¥äš`?$€— A:¨6&Âé§Úqï|ûõ0í«’ êªä€?b&ÊÛ«<4˜].”3¼¼Ô ïbçùÆYBÀ¸Nzæ½AÕ:}XSz N+vgì†^æ‚©ì0£ -rŒvÊÞPÇ3ëNI„x¶üŒ–ǰ3„)˜ïxMg~®y6%HŽ1a !<DÈÒJ0j8$šÊŸÁžø=»×æA.eëµb¤C»R æ¿t…¾ÒVR“ù 8Î×vñïgyq"O/’RÈ2¹û²×7$ŸÌ1™w›òZ:¢ Wýã%ÐSö%ï•kÒ©˜Ôv¦ „ÉÍv aµÂ=’­‘â:Ö•6…p ò=¸ý=Ò3S„¤ì5Ø98ãò”’à¸pyD(‘Â58(¤iº3)ªíýJ­Nôš7¶%²Å:iŒ›uL ,9ò¦¿.n¦ÕŧcáÄS‘¢{ðKF¯Ä<&cU0D¡=e_Vö•á_ÇY(”Y§Y,"ÇùzÉ¢)ý„ =¹ü!ºaœßûSã3#0ï”N!‚SDéX;šûï¤ÿ!e¼àfáû³‡÷܈I{ò~=ŸXõ›PNðCg•öÍKD×¥˜„Cë,+ýîÚÙ«ÃNîÞ·ûÎVC”öâ ôUèNj”àÏl‹5´d/ L2qÒmž w;¸>þÜ<·r[˜!w‰!ã¤&ćIn‡ò9>Nó†dd÷)É # î³95•×V~^nB¨—¡ƒ ­½.ÚÎAzZ¢r–´æyª rÞЧPΈå¹kO-œ-e›í!t«ûX¢OyO݇™O€–¼+ÓÓkI±s^Év”Kãkì²0 Ÿ<|=›?þï(á§š‚Nˆ2ÙLåÌ•àáÌ&¦Ÿù•ú2a§³~¿c öÔ¼g…v¾7ÁÖT^ÐfRØQ“¨dÝ<›÷“(¨ýF^®¬› 9X' Áø-*7êåîBx¸¸ï÷$2Ñ*Ñv6gsV›EPÑá GÉ=d‹ÈTÍÆýž †/àöÎJux?ä¥[ŸtãzÁ¦<ˆw~ ®ï¬ ­#f ¿'”7—ÄÃNß§}òÃûÜ½è ³Dîn¨íàªÓÎn‘ >cP7]\×s+ÛlV›\0Hë°;Ð,“‹kR*È!ö%Ó&>ýCóò¾®5&ü°S÷dÜø1œà+õ”ŸŒoÝ’%Q”‰P¢!ºˆŽÌÖµÀ8²»@*Sÿ7SHM|±ˆ”Tb -7Jª“§!‘ö, 2ÂfT7¤*Ð$½¢©J,·Ll#_¾CÒ(—p.ìêÅ+ÂF‡&I7Sjµ¼Ç¨$²„e£î‹\>DǼ¡ïëF]±@b!áH}¾J8倻p…œ½äD`Ó¼y´"¢æs_ÄòJD1u:YÊ·¬n¯e(Íœ](4ߎ~ïjʳyÝc¨¬nÜ VMÞˆ÷TŽ »µ±aÄp)sØ€ná“ìEÇPI´érkQ£ì$( hÚ±§LW³è!¯!uH òšæUÊ{+ïóÃ÷ºÇ½¦ƒLYŒææÕãÀ]a—< ¿QÁ#> ær¯¹…õŠl½P/7i¾… ÐñæU îî±CÇ÷â [Z›ãiÇ’éìÁÿšÚXù0­Hy3.—ˆké–d=ï‹ÔË;Ft—Bƒ\}œrÓk—!ëKt3ù[‰Hð# ¢ ¬ˆüï:âÿ›xØÚüÏq/Ûÿ÷úÙšyâÏŸÒ×LÌѱ×êŠmHál©ÍiH>r’«Iˆ&Ön®Yù¾m‹Â@Nþ#~ÜÉîüŸIZ¿æû5|ñù]å(C§AÖ!1¦W¿½ý¢ïó|üªÏŽ­ï+9V AŽE‹êÙÚòì¾€Ãè¿€ø³Šâ*É,¦ÁQø®ï¡ë9†øŠ±ˆˆ˜mÚ¿çíÖ484S=‰ó±ŒV(„3œ· }Jo"ôÊ'’(Àš—a7—èÐØÆîþì~7‘)œy&GØ‘fÂ¥ˆ“©f[³îÅ|K­Õº1ªñ7œ›³kAP‹ë· 1Óž«˜3¬/R/Òù-ÔiÐÇŽ•P(±æO^Ÿ+ÇŸ,ÃØeà¸G£sšÜ“3_ ¯‰|NÔŠ’Ï‚â»öHÔÁ°YI’¿lìxX™Î‡Pž¡€öËœP–ß ,ør,¼Ì0Ýœ«Û¦Ÿ¹‡*ï±8 ÛCgr1$ìF-s¯~ª‘ïÃL7¯ÅÔÀ¼nÀ>ÀVÜÀžèFyõPÒz¼ŸêG‹E/K^uj‰¸“&Ú²4A—aÁL< "ÐJ?ГÆhÎæ”F9 Œ$L:NûÎxŒµ¬hƒàATˆÂÍÄ S¦ÙöLׄÞãIÂ[Ð_ Ø|®s±Ê¨•upÁf ÆVsùnnøU()þÌÊÑ´P)®B$¢I¯K-žcŽ1QrYÁgJÂóÛIm6) þKžÂDcÈ>ÉPᘵ£^Cœí}ò5_a9Ì¿•¸KMT†Îµý’y!ŒÜ!ê`¨tÖÓ§¥FøRm:Ÿa")Ï«Œ¿U˜ÉtJ(TÅô]–>“ÕAÀ¸ck *I:FzˆVkÉY]ÁÔS«¼Dá¶yø^G¼û+æ  I¼?î½p¿wsƒŠ~À©ÑÙ¤KKõH¾G:¾¤!@‘ŒäDŸzðb2• ÐX\P… •-$¦“añYŸŽ¶ãJ¢‡Ÿ~©iïy“+¤«9S¶7Òœ'E?ì­NXsÍ;ü'Ö„4°! >¹Æú¬á $¤Ûz5¼FtI)¬Ê<]â }nb1Lt¦±Õm­{@†öì a@ü!:¯(›?ò‚|(DaˆoEÕ8u±¦¿0Þüfnƒôò³Hv¥=¦I=l6÷ïkyåA”v ¦›ó’FÎJŠr5{]€ŠCÍ3p+v½}–Éù§ú"Æ{]ËTQÙ ªÄ]»h¤‹ï/ù¸>ÁŠ"¬0õǸ­AK]½ÃLJÅ–ë{Ýs«¶:ˆÐ¿ ±ÕŠç_òK…»63fþÞ›À «¡ îÓ t>?¹§Ü—ìiþ³€Rr8¡ÇÝòi¯›á^{)Â,¬&;^¸LÆà¡Û'þÉò“u¿áùÙ–ô©Ü°˜hzÕMVFç¼ô–yåªò§DŒV#ÑòWèiX‡9p[a©YBÙ1MbôŽö‚A=\£“¡‰Ë:?[9#›u%µ!Ûš¾žúxþÓ'[òšÂÈŬ¹¤&Y¹}Éñ¸ÿy5O"7¬I½Jf‚‘`Eüí¤Õuö¹ãÏœ’Óø2c\¡'ÄLÉGE#Í)O§¼™hŽQA×5],8°4œò;õH÷‹‘® /VÊn¸a:qMØú‘{ÖmÜ ‚z£â0¯–„‡º ²†u±<òýl΀lÅØ½q…vœaô9àÛéНë„+X8¨(¶gÇeœ2oÏ>[L°²´c¸&ÐVid+-²‹¹dîãi[Ïþ™Wt½:vb´V,°—ñëíŸ4ËÛ•IçtDÖ;èö}BH»XèækÛ‚^¬™Ëi*¶è-õ£rwäy^¹Ú¬‘®“ÊóÞå(¡Ùê+ˆ,O7Óêgè©ÝÓomm{ƒ‚±z[f-ð¯Èsøpóéš>ÒØeÜâãºJšÏBªg3óí`ôàèo•ÅCKŒìÎùêÃhU¥3×=-~ÔÝÀÏ…cÙ?íøu€ÛqÝOð`Ñ)¢²gäq''EU}Ö'xB>fŒuì ÇîÿàÂâHۮߣ®q—NÉ󢣯:½häÛ|{±æøòq'¾öÌËÄÌiçW-1ƒžÚÒ“í¶—oO–ú˜ÏgÇ­bÁŽPÔ‰Tw¤3gå4ZZâˆÅR ˆZæ5¶ij„Ì+Úâ7Ó>²Q³4t.êIâÝLzs÷ ˆ M&³kÌþ+|5¹Q‡îí«N„¶þY+ͨ’'š›KAVɘyZ{Á%.hŽÒ#BÛéÀ«®÷ÒujC¶ØÉEÑ•f†io‹2w(ÌM‘$æSdý^eùÎðZ·XÖ'²½T'+)¯;âÜ%ÂGÐRš‡,…5ŠC­Oçªùvb©&ÁN Tq%*IûTgpu”õ|å`g‰à”£€cå,~†Y²v’Káɾ^OZiyÙ`¡µ³øåÖ6ƒ°Èù£s~QûZÖf†h$b½/å8'ÕI[$÷n}]«}ºﻇóH.ìK*?ÆÝYêÝ•kws*Q©a+^iãBÇ™•s¾ZN]ME¢]q ìÈ’(Á‡É‘;÷Š#W¼&©ðf½µEdïM›Üu{ Ïô cJL/§‰õÎh‡Š‰=&¬´püR¹ŒˆgyŒÜ—$£n,"„SšÇç"ö[Yö§d)7—‚2äbÊ$â ²ñë„®r n$b‘´Š’‡4sì?ªt`Ӥƥ8öo+¡OhŠ )Ë?‰g;’Õ1éº"¿2äË'nâÅa¢¸(6iíK¹·V`gÞý‹Ž×þYmõÚq¯À]u[†½¾U5#_–ß»Þ7éa½Ú™î¨®vÌyÙ—#š0oµnl s;\-fÜ:ÊÁwgkyßüBS±ˆì¦;»»·ë*`ö„€IBnÜa¶Öìa"-Ú6.Å™N-Áßf?ö ë§I:²ýò­9º²ˆ.õ?ÇOîoªbÔ“âÇ™Iv)Aêe^™¦ß5]Ûm-å;Gþˆ·]a_Öö‹ÍŠoÏ1ž¾)°TÚeä„¡¤ºéçåHŽ 0;uæ­ ®ÐE•¼Ð< ¥X¶ÌêjLg²ô*ÌÛïˆHw––ç ø‰³ƒ «–uTúøÉŠc߇ƒ MŽ®Ýf¹Òh‰cãjî&4œÃמõlt­vÉ1;¢Ø4QšØôÞÚâ¦ë QœóŸ[ªüzEºÜ7JãaÙT Ò¶¬YµÉ±Ä‰¤Ñvœ§áñ­J&H†Nf³–}âÙƒeš„¦cÈ%k²5š ˆðú÷Àë?nëHe'jæéy_vbr¨mÈÚçá-cçÊ4Ýôÿ]Êì©mç€}ÿ]æÿ'eî¦F´†ÿõAÃôÿ,ºÆÙtÚd{Ùfþ¨~-p¢¦´Ü8n]ŒF¦®hŒ½nHvû€”ŒJ&ÖÐóY?½íJæ³5y:ŠàãfÂíÍþ¦ËÌÌ{”-žÒl@ß_O _äѤà¼5-u(šIu¯š6¦ˆ'=2ë8áÙª$VÕøR¡ˆö ucEíª¤‚t{°úRŠA:êéêüÀ(ò\*á7I¸MèÅR`tQ¨ ñÚªh…S áøÊJáüÁ/:øÄ¤Qºë/X u€‚Qzkq ¡I7ûr§ˆ|zŽÂˆ‹‹S–|’smý‹Älòsàuoç×”-ïo¦÷È¡š%ó­*†Ußå‡Î–Èæ<ò x&3æ[º§[p4JCUhÂÞ‘€W¸.æ™ zÙh!1… éÓ dÎZW¢IÅ8¸¶éЈE¿Z®kËS?x]ÿþ¾2kI§¾îñp÷vnÑ µ³ß[õfìzþòvtfE‡>û,/c†÷Ÿ‚4­h%m/Q‚CvË”œPn‰p›×~)Ù¢nXE ’ö'I¨¼Â<._Ä…Ü"ÎäàËÝ9†aË”ñäü‘ u{._AAÌWhàª,Xq-퇌Þh¥ŠyfîÙ®ôIµ 85G^Õ«gT㞪;Í;a¯² SlžÏb”b‹9~$Mᇛë5i(âÚõO6”-È”¤böüBO.o Ó@{þ%€_È''†ª^õÖñŽòPaĬÏÌW”7ZƒvSÑ,eø§PóÅ­ù’’O¢k†Ã:¾«`/U_d>‡hKÕ°#þìÆªPj"¡òÀÔ`: ¨ê­†Z5•¢H‘ú£Ýwü¢8ô²l»#L]דչ{lnæÄÄñ$3ÎD¼ZѯÕÅK°Í€[³ƒdM'ÉTÏh:5¾Fx( Üý¹óŠçÊÔ$"•⎈=v”Apv¤qöè.˜»7¼Ï]{ó`ÿõÿ$0íÿôiá^Žõýx³½lÃj²µ|ôg v|¦.ÏßÍc–ɨ›ö¼q!h’ß6,¨„¡ˆø·¯½/u :vmÅÁ 3¦Ç ª2(§£úº4Ã/¼~ \Qd¬…®ßV!QÁ!Eó%ºKR€Éµ»qì?¬rÈ éô§Cš\Å äÓ¿ ²Ð ¬d?ö7àÌ’t˜ä¶Ž)Ç ©:2/$Ã0,-n³ kzH¾._$åuÿŽí×¥í£hØ—„ãÓÖ³ŠÍÀ v¼î=kKÉx¨?¾Á÷;, ÉMUàù`Q))é›èëq`<(ZzyŠÙ–v%êKf§°·pX<2¨tV7ñKû¾JùÕè¬wºZg0h×_Hi!÷ÔÜlZ…&>˜ÞSj9gR…ØÂqŒSnüôÁVo¬šb8&)qˆ3ÐWgÇ0ŸâV‹¼{T Ù™oH´D=›ÎæÛà‘ï’CE6;/††á.óô¯¶ݨ‰±ªâ¼QqÎDçæŸAúý`5|õyk¨×&l¶péŸwSXý:dŸpÔ‘üðç¯)TWr…þª±r™¢4àzÅ+D†—ü¨tflñ=5™Ç%ÛqÑ1}=¡Xýú¸b¦ÀBˆË£Gf}$ÙŽ·ÈD¯ªº(¦ž›ƒˆ×•3ê°âÐ,¤ÂEBF“6SIÞ"2®¾ 1²øø§X‘¼U­"b¸/¤˜’HðôÎ×9NÌÎúÚ>Z—Ö’°ÀH95Ã0™ËÑ-~d–àó4€àwÙЇ¶ 7z0±\¡,Àåp:Ý«$ÿRÔa­VhÏ*‰ßŒ ùŽÈ‹M32à Ö—"¤XÚ4Ms/G¬–“%=½³MY:A8× ;^êD»$qNà:«… ?e€¸ ‘Ÿîc2z 2Ñ¿®ÅÊžÁjDLƒ‡1j³˜³î þÊFG”®iZÅG¨hýœc%n‹6u.¹KK2?o;ÞÙ÷w!ólÁ‰­K;¼ÄÒÚ›w÷O½~¯Ý¿U${Å VPöÚÞ íè+ûf,Š?]==idoÿh §û©M ö·ò¬ˆk&Rè4ôÇg7])ÀW/+]ÓsŒpnþÕd‰íࣀgCpÓ‚¶n+æ¥2˜¶E¾á¹þ«\B²cȦhEž2½<ë=UëÑ/`õÊJƒn<•VÿðÁçL-òü"-¦å‡ô‘‹–vŠÜHAÖ|‰x& šÌšA—–ã÷u0µfúüÚäÝÖƒÞî xóË`Î+YzoðL&–d»P­:N¤¸-ñÝÈóÈ€\§ÍrË#Š‹9þ™YÎ|RjvPÿæâÜÒ°L„¹Uj¼Ü‡7lqc„‰d¤–9“÷ ÔàÖý.j´[ Km÷_kP×ìàW‘þ]úbeÆ´cxnør+ö»ŸóEFtíÊŽÝ`3vÊÂmæY€šÀ kÒtvÖÀíš×ôÐ,ÑyoáIA¦R°9&ÉB^Ù¾AÍx·¥MH‹4¤ŠA9$ÔÌ/Ä›ø‘½º\t›ðbÒ“óœ9ù³ÅÜio|( À,ÊÕÍläõ`^nPM9È<„øË™K®‚;æ â†ì§öõ@ƒÝý¬ÚÉx ®j9Gø±¿÷«! r`Žºƒì4véCeÑß/¡±e§lìßwÑ``iM_š3 ”…ÉBä†p=R $±5Í/¨ û—Ô}¸‚yp`‡øU²¼á¾œÓ,Ìýmm)â ¦dì7ÉÔñŽA±_]fÍ©ˆ“ÄñØÃ¯5)K(¨j—P¡ãÈÙê?WBÆÒí\Þx°6¡FèÍ´è2Ë LQîö8îÂÁûP9 ùÞÄJXˆ]O[SÏfùz6VgÖ„3¼½ x%s qêü(i›«æô¦:íAT©,YД`8E ͇)¼ó‰ÉäØ M‚Ûò©äçø¯íj³¨¬w^¥ÆìÝ_7^ýgÈ“ý6‰¹œVÌý͉.ÚmFÂîw˜‚C•[… Þ õ:zEŸkÒd;øÆÅ¾vRT;ýôÜM}‡à$šlê,½g‚FÇO<§jľšñâÿÂö ¸) ']ÐóJ¥Ìx€/p‚å„6a›«$EPbªØ…O­TýúÑv k–ô/VÓ}ãw“±v›Sç€k3$.%ði±WceRïç9ì8„EGUG–%±Šéø¼X;‡Y²(ZjªªgÓÁŠÁðX&â~ö›OÂY›•5D6І8,·ÎÑ[Ðä¼6L3!X¾´3Äq g¦#ÛDšAŸ+k„ÍhA…€éв p µ&‘ÑÉÕ‡›ã+ñN µ¿Op Ü}…Ì14*^Eé@HN‘-]Ùo°XJán–Ú­X²»AŠ£eµ!E¼VYbî¦ñôð`™PBãGxš~6´b–K>ÇHÐseZ᎘a}»˜BŽAŶ%)èpF#ý ³›3¹\C˜¯n‰ñH¥õšÛÔ]Ãñ:ñƒÂìh37?x/h;ÏÓ›yká'ŒyhP… ~ °IYG·Æk§ÖVbX´®M§Z¤ìÒ#/@ÌHO€oùz»0£¢ª†ÃÞ\JÞ‡?7?å1\ÄÜïo¼€òº³vëè¼Çd7%dÈw(+>Å´†š2£3ñ¦†liû7Ø\·nŠ¿N‰è<}#îª KøÇöZödoØî<Êk’"¸Jã©ßã¥ncÈ&?8âãyz…÷!³œgžÔö«Êøl—ñEÛ!žA²™Þ ·ÿ¬-æQ¥Ü‚Zcïmß‹vþ¹‡ZÒÛçšK~ª¡TÇ1åÌI ,.Ui<ÄÔ<6•ÒpØùù°æ©cÔFÐR^Ltû,«´±èõ0XÕýMýçXWõ1»ˆ éËG„8SŠ*ÄF‚>,üZІLúǧ¥’²rÑnι¿*B>ŒX¸w:삲Æèo™ìPñ'rÞ²ã8•›0§Í éëóû:F¾i¤úD™=«G`°V‹_sqûŸf:7Ú͵ní½N­ßßÊÂ&sñ2µJ/ñ5º°½²‹ÅBzHQ•t¤T++0ìI«üñ%Ò FÜB¦ø¡øØ¿3œ;äAѲp7GX‘W‘)þÞáŸàÀ§ßû«}ÌçžÐ“QBh«¯—È›.–£¾‘¥dá˜à[SHAy4ÿTݸmOíz m£pÃ(°š!T-o–ÛM 6G:U’Ò“;…Ùx) —~ÕQ RÃ$‰ˆ»9׊»[gýÓgdì‡ÔNÛá‚Í^fìIøze6ýÙ“ š½À|–ÔXwÅxꆇ\ÖÓ¡JœÉõèËTB E€¼É‡•ô»FW„nY,§nIøÎÐdÃ)å0/c3Õ÷Ⱦ•~4–æü™¢/åùÁˆï‡Ç–îÖMœP¾ÆÙO…yî{R{i…­F "5nÌ­ÁLEÕ\^kfÕ1˜øŒ©V^ý3ŽIºq:èés *êÞž‘ªíï)È:i´—°ç-¼DP¸«+^¡ƒÊD4}¢%+"»x›^è‹ÐÛ V-]úÔgw‘yô–÷Ùá2î3¶Z?GÁ7ᰟי6, ŠÓ p€Ê!wb¶³$QôL‡ ÀfÇÀÕ6Q0U2é$C† ޵ÕàÙÃÐÐçC°èîMÆY°¸8ZZßÄRx4B4>„Þ‡Š©Õ4;âÑÔw•p„Ä28K=ï®Ä3[ùØÁùŸƒ ÏK”„ ^t,¢®ê 1Ò‚0¸¥Õކ$°êêŽ Â.ªæo‚MW¹®·ü'¼®ãˆÚ7ýcܾa D(¸g }›âÄDXêƒyù Gù•^€Jî$>81Ú¤e" ¸ª Nyn4‡9ÑÊs¹1ï*ÅqJ &û8x9`¼yí„ ØÅÓV¢ßaÃïÌ;9¿ý_ŒÿžŠ°n»Ñï!ÿ§©ó¥"Û¼ÖΛb‰yETßašÇAG4’ï RËfºRóȶ‹ÒŠZ R+úv¤â¨6ˆ亗Q}þ(Xªñëåí]àdz›óóWØŸŠM^ÄmûGOýÈUz}?úÒW¥§ÕyÜŸ ÷cãdé{¾Íâ¨ò覧;@WôA‡ LâÆIa³îRVì›æ X3F7ý0‡R]¬ÞZØšNCd+ñ´T%i4Æ\q¼¼shv¤g«¹còL‰Gô¤w¦xÌ #_c£&–à#$WõþjΦ‚ÈŸÁèß.úÉ縲²¸¸¸žð½kÓ÷–ýÔás >Lyp]ÿŒÏ­Òè„I}vGø³™Vb-‰G p²ù¢1'$Zg¨Û XA¿©C&¹4ÑW0 ÌùÁÉ‹%wÆ’ÜMrþ¾—ÐZô»FŠ|ì¬x+úàLæyŒ#ÌþGüûdÿô‹ìë¼/.liŽàá77ÁQÎÑb_€x6✃ä7^ÁóÍÌËŠiÀ|LýèÎÁû7¼€0·ÈŸ khâo…P~À!öב¯£#EÔ½ ìÌþÜPÎ~Nh³ íòÓ‰¹ yþ}G8’àâñåâÏÞC\ôýÿA„ØÖ臿LFZ#Iì}k‡{$£ØŒPqÌ-‰ŸÌÉcŽ @&ŸºÂ>~­B›‡©QŒKÄ¥²5’,_¤†ô$ç©‚ <»‡bnxÉw‰N¡ÉʼnD“;¡42J÷ER|ŸTfaMš,=s=ÉÓJ§u°Œl‡²ÿ>¾ÂGÖOœ1ñ¢‡xM)P9öȉҬŸ`£ÄÇfA ‹ÆøïŒƒÿÔ4Õ†ÞÏñpÆÉ2‡+IRŒÄ °H"ùãPYK¿Æ±j@Œçµ‚*²Ž!_ø•уQâEb-Qf wͦ°… ¾9Á1’:Åz—Yg¥Šuÿü@&á`&ç‰O  ìðGº…©.äC™¸ƒÃ>A”d‚@øÀ£Ÿ]9¨¬V]a È}Ê#R$g–¤Ð]Ý{É´`}¼á¼°J`„¦øÚy“Å›íq‘™7ê&ЏáäÁ6C¿¬#ìhÅȬÝâ¾{·MCVˆo'6BÄáCz‰10OrÈ7@z±?ÄÌIÁ-Ø<4—LªÈ’ßMµ@DÝdmÆë\8÷ð±uLó¶.¢™Šh…‹D;nÒ/€fzð5VÆÍ¥97¼RþÁÓŠÒs½^ÞÛ^,$ÁqgOeÁFÙ·,>‚V€u!BŒjð&HŠÐP÷ꞃˆôàÒ” Õ"6bÑ[}ùÐÅÍ@ŽÝ‰0b‹†zfIÒfå–Rñͧt|V %…Q0û)øUÝKtó/ô_øèš£ä¡±·Qãö LÃÊÕ.žæ§[’t) yqÑÜK13º{¤Ú.J%órØÑµ4·ÆúåTÖM/Ý$Éyø´}Ü÷lMIxR÷SÛÑç…ÎÇÿ~ZáãkÞ·¤:¼Å6–˜”ûÍU^ü€â®Ö÷Š•@Ó :L µ³$ÞÉ­–üõô"´÷¼ÿ†‚R)J‡µè•&Ⱥöø£«óÜBF–)%Ýô¤?§Ö6AV'ôf©PÚöвIeпŒ,õÀŽJ3³ØHéb‘ïöUµ[26-âS_M኶Ço3`1”V³†aàï-â7&@û¢&ÿ @R:aÿ20ôŠÈˆQ4!#Â'õoìDGˆ~=­€K¤&*ú¢©³÷€©£†|üÁ°Î¦Ûµ·I¯b¹üî|”ÕØ¯7 ¨Ùê< ²"Ö\Á¹R-—•è¡ÁgôÚ)…=ùP4æf8á ´kø˜1øìÊ?σ±ML f«Ò’´¹5 úbPWCw³¡§Q$þÍ âswaÿl}A“/¡hÏJ¶TÇÍ"(vŸg_(ÏéHhü]Sdšh·=¦O¢]AR¸„.òº8Ê‘l±#4¤ê!?;¤¸«Ø$(ÓXºšNþ2¨,Á=R=#5j‡‡_¢røåªL{a‹@5˜V»—éKeü:ü­´“b„Œ›PÚÖ:xtˆng?Š7¢«‰iÙ-JÐOHÖt‡?Î:£‘k<_jGsë!24mµ^WÈa‚j–Fºˆ.ƒÊgeî#"A›,ÒJ2vIÀoÏSÿE»vÎXEön«ŒÂOOÄÛ÷Ñ…S V[ߪµH¢°ü]eä@1P/¿KM}x9¥5 1ä!Åéº@æÄlá12C¯î°¦¹{RW6s©mûÒ‹KÂuZjè/L£ t¿Ò"lmÆ­åg :µomYæ£ú5ŒµU‰©z‡+‰Ä›'E´š¾äÇæ¯v#@ó»*râÔDÉ.òÈÙN¼Â›;ÙR­—ÏÕd$Ñ®0“×”¯C<”Äk‘c΃9ýgâHchíÁÇH†ìåÜ€‘6àLׂ²zo’;6í·™Éy™qÜÑée$.ØÖ!ýpGÁêg •¾¶4‡á=_¹TÏaUAO׫tä‰7ýÐ${ÍòSÀ •¿ óø;#»\¶Ÿµ_œæV Í-g‚Z-R’Ó`;²: P+ƒÄ±Â) oÿÌ™ˆ£“uýM6¥» ]«—”YÜRlx”b¨o”²ûDV 5Ç”w±oÐQ˜D9 …vjBe]Þíù&qSâ•eãª/¹¦´JKÁ>5ôùvÅÛÖf¹Ä-³]fÒ3w9 #K&é×Q­)裡Â<¯áêömž‘'#½C®ŸÞüèÏi­¾tsµ¹'at{ù©x©^½GUÓaèO1ÔÔßÚIPµõŽÝ…dä{áz§¾6fʸK9P! ,%R,íí௚§¸BR@F‰Ù¤«Sµ©M×gÚ. ô`щ׿¶`-Lµ¸ÓôƒBKóD9‡N?vøâ$—ü/¡häœ+z1e¢¤x› ãÕÅÆÞQýfg‹· ŸÙ|&Ú¼XcG3§K)Úùë=ß¡oä7D²]–†µ%à?©ÙO®§œÃú†”Çœƒ6ݺŸÏþQû9 vs–Qw®xŽŒÐÒÕ¶q} ?y]p•žª¡Ì›G»_ó˜ôçÜs«A“1°TµUËeà¿ÅÄÃÖ¶"Ô?“‹ˆ1¶²° Z¶^y³?ÝV¸âG ­Wˆ T¶2@QyN.˜L^,°½`o•3 Ì9f\YÂ¥ùÿ©ï±Ò>v¯^Ö;¾7}…Am·*ÆÎ¦ån)kDxØÈ‰.nuëoÑœ¬É ÙÔRâw×rl¯#ˆ‘àE–}w}“¡ ö'ÙXb§…Y§Ô—È5ï¶85vTÃoð2z`5 9AÙhHdÚ)(G±œBŸ­+Iyéi·•ÜÒ^$/ýds«<˜ZXúaÂòuã31 o?ÇÓhW¢!›¶¾Aö¢IþÕŒÇ[À"ç~ÀžˆVélÿº¶Å(ÿÆXí¨íyÐÒî·Ñ"ÈÞ+vÏÈóÈ&ßp÷߃y€À°±T¨“Œ-‹*mY3—âîž ªÚGÈŽÊq:ýJkhܦç¤>ˆ~êõÐJkðv˳c‘<åçî?;ÌÚöá¥qUéŽgŽ84Ž5+=¢®võÉ7MÜ»!Ýšž_ó>½¥Šð„ ÕH0PEv¢š™O4œÌà]klÄuóõÒFÄ‘þ3ýç!ò¼ºdâwaY̘Š'BêØkö•…^$2·ÏË£Ù݉¬ÞÓØR±5‚dU¬éá‘«÷Ìݸ'DäÛsñûÏÉÛÏ5e¨fþ.â– Û+¢ø>ð5­Á7%ÉÚœ8m³4Õ#Gëbfö¯ß`ysn³…9/‡›û{jvö0ïëKï×Ô’HâqrÃ#̳…²&ƒ£§0èÔÝÞ–ÿ{ÖAåpN:Z„GqAébe™b õN)Tofàˆò_ ¡WA'Í9ÀÑ{YËTzÞýèÞÒd4É´ÎZy*a„Ù¹‰“õßÔÞAbœH³¡,üÙå–³Mº“Zµ ¦6Z)Óæ½¿ü-CDN~žBÖäT"SfU^ƒ¬yV$y”Û_Y6ï*§ ¸j³Å„Q]‰ß²I‡ˆT=TäBR’Õ€äÙäxð,Q‚îÑÍk •©µ_kúeÖuhvR³á{_¦Ô Žáîh« »ñÇašÊé1y+ˆð –¦¹¨X±‰zÃ}äI¾B°ÉÄ2ÚSÛ‹bÁÓuüè|“c„ŒÆ{5Ò3FiÊŒ’e^N7 f³A…²âJ&‚LêÏŸ!ù<×—4‘J26-¿%Q0Wd<óC¨#!ú g"¯æ:±1³þü„iÔR8¼Én•©dûp‹¦nþºa ›‘-V`E¤¡d™­D*«e“1¼³"vi× D€³pŒÛÍûQíÒ;|N¼ÖZÈÝ IÕIf¼x¶˜ç,'WFŽçç×°Þœ¿—ìOQWf%'¾&cƒ?ÄTëY!™siÿTš–­ÉÜ %¬Òò£‰ º¼T{®¾Q€¶¥Îð.û¯L”¸£µ¡P&Y}³“l£§—5ã;%?­ÙT´Ðôªi|X¨,˜,yVTA–J̃T ÁU²ž[ªª&¾8DC²SßP·ù]x´ZÍÚRO+DOÏØç\bŸæËˆØJ÷Ò¦“÷§»ãŽàz@„È~sžÿ6LÈ·.|P—Ó€FúÍžnTa‰ÿ=$™ì]ź®T:–´¼MÉZa.Á[ j­ƒ©òRèR?2„5~ý°ý÷ìÝ‹å†Ò§(̧†Æm¹²R©0“àzA@‘ÎÌ´å–YÕ4»¨Ú «1Bòo?òd8üÀ‡½BHIð¾ç!ê­sÜó&tRé/ìHªà6b¥eQ%n‘ö»R!ôŒ·qãgåѾ:Ü•N4Çñ qYyÍðšrŽ*† .çž|ˆ°&û>ÔèÃÖdCú#ћæl¸÷{§{ôúЋ9ŸŠ*%aä?~W¬0Y4¾UžZšU-Ù#F>¯'mþH®zn~s]Ásc°|‰”Ÿ™2ÈXד€È…Žä ¦05cGC×cYÛ—œ™ÓI+UÐce¤ìò¤ÒéL`ç·ýàïóóÌU9W½ÁêT{¹ÂÒ&,7¸½.˜šà®×Íz†¦ÙÃ0ÙÝ»·QÁÔ±´;nQÙTäOtn'%sjµÅKy$è=\+5#p^²y?tôFçȕȗJ›/«bƉl>Û¡á÷–T0&WšüåÂÌ"#ÁÖzM0\YtI ‘É4MMoóìMK}¿ñ‡þ*&zˆüÏÔ¥œ\V0@&ZJÉ8üwkv¥yµ8¬ãô $;Ä4}ëäiãy˱Fn͈õ‡.ظzãa\fH­1@úܽ;>ýM¡ß»Ä¸Ú+¹rŒÒÿß,¼.Mâ£f7\Ï NOo‹œ›NH[ü®ðy¥àÚx ÆJ¦q &ÝRå) &×#`ã[Ò‰­¦{Új¹cGnÍ“QÄsFG•C®ó“÷4¼4±®a˜ù‰G:fN•M_»èȼÀ¼¬ï–MA?¡–Ðч/JA¹Éy2š®Ž…`çã¶‘˜W1²9µjX­bûXÓÂö)åøìíßÈï–¶3x>(¢ûØ Z“a¨Fó†.š€,üÙûóÀ(Úr`$Úýn •9»1cJ:“h^ `¥Y!3Îd—L®0¿Íò3f:<·>ò©Æ¡aÊ™'4¯@*ûo­í‘ŒB?Åö©°±ao.-bÁMÇuú~ëú£çfsîì(TÃv®tùr‚íù"aOt”ç-‘ƒ·DÉÄm.æ~ö]ꊙÏÊW™¬á¨Ð Q5?9V£YfåwªËWžç-ߢn°Ý,(®Q½ÙvÝZ$㿦•©®_‚…60á*ìûm@¸™ÏÎ7…ݨì¤ÈîíÕ†¸ ÕÜX*^Xç8œ#ì•o‘M±µ-+ÌSû䌇¢F †õI½Ö'™ð÷|‘¯|¶n6 ÆæM'ïHËo0DÖïÑ)ýªðÑp¨×"-sÕžY™×éø“ÕR›g!øsƒi¹d†ÅO³„m ¢2„‰oõY‹W Šì2D>†Ú´åA?9_ZçJ[_Gîyqû,{Šè?ÆÈ~ëøÅõÞ÷»èF>Z ÖŠ©)l6è ¿e¶”9kie +À•¶ùš Ab#?ŠÜ)t¯A«c2-1©œ¤±tÃå¨ú¬×†n†3à@ƒ™ãPÆw K˜µ9L(îŒ9…V1ö½ânp$Ï‘$Ç1û){á”öÑpÓ·²ŸÈùàÿîú£`–c°g½Jhjò•7²7ÑYvÞ(êÂ/P€¬Vñ.kjìàËÒ¥*…!'sžtsüB¡ïvû·Uy*ÝÅ=Y«ÅiØæWÝv¸-¥ÊR/³Œƒ1µ¿nwMc¾[Ñ'L,Ùx¡é: ’ 5¸öïÕ´»DEJ„ûㄪÈZ‚Öÿs³ESÑÓ}»yê”þ6ž‹)dÇ\s-Œ¤ ô!š;õ£c(>®n;ìœA7†óvÃãiTh›•‰CÖúÝûº‹1g™Éw¤%Õ\—˜ ,€ :éÆ#¼%GA2).˜iw+óí…ìÔ€zæÎ:¹m\s7‰(ÇÅN+´„5o“û‹NØì‘ž4Ôã¡gÈQå§8–ºæ*6žx³Nõ—k.ÝL²ý‘Ç—Ÿ.‡à »³ž†"”;ÍT÷šëì²b³Üçñ|Á¥ù½d‡Øñ™C;‘©x¥`zr9®­Š†B(W†¬X·JËË)Ó]z¡^u»ÃþÐF´¶Žjü–³ä}w\"r£†ôüÍñ[¨€þ­¯]‘ÙSÉ6Zq‰æé™LãEÒ®–#®ø\YWn‹“51ÚMJõ‚LK@¢?äHÙ‰QF…@è³¼ÌBÀÃK)Xj,Ûší ß-\Žèª¦ìp(ÃTØŽ¥=¿ßg¤½•ç·,‡ª£§‘b!¬»·å$1s€|Jx™/¤cUÇé’V&Id]S¥-ãL©««í-¢Ø›­ºªc Ô„ كɎy?%ÿé)œ[/¼—Èãß¾»5š)8w–“‹Ícmò>DMšÏTy  ;´¡•¾ÿ¬TïÚzl÷Êm¯èŸæù5Ü]PbMIÈ€Ká-²˜Ü‚XÙÆËèË‚Ð!Þ¢Ú¬vاw­u‘4l5ŠXÒÙ[ UIq!3G´'MYŽÙ¥H„mÑu£(Ÿ9j–˜³öu¯nLá¿'õ2ÄvþÚ# º/SgÊ3¹ü‰æã­ßŸ„?’)t½Ë%¼dØï‡} {Œö¾ÝÖQ{tÏ õg"kc1Úxc/ìàÏ®Àú/ ýNËŽƒ1ÊNG é=cW>jp^©Y¼œ ­=‡bÿ]îfÒ†x£Uâk¸cF8 ¿uùñŒì»Õ\·qc£¿RÍíˆÿÑ…°ó$¹^ùh4WKi²ŒµI•HOŒ¶ÜûURP$èÚ—W LíŽ7wξoþY/ÚÚ餾x ªÓ¡gSKÉsV óé.n†\Õx¨R+eÛRF¡¢%²u.†0pÙå0è:‰ï87™@ Öp`É@-­p$£øF&?6n„óxšµš¦JúXº°ä®ô#Ñß×þ]-ˆé¥nS5ù®“åµ2a‡°£ûK‡í÷öÕ}–`…áf'‡o3O׃}»~B¼g vk3ïï«U‹ö?ç¦^íª¼´²WýŠÜÚó_º›e«iˆ¥iÎ%z @vW>‚œíç5`}ÞúÊ2_F“Á‘ÞÑãDeÚÛlçgš9>µ—ƒâïö–&˜SÎÙ½6õšKB;w&_·…Í”ÙÙËùqw ìïŽA>”–ê:†³Ï ëòeGÄ–¶Ã`|;à÷wç§Ô‰÷ÎSÜh7µzõ¥¯Ä–_ðìfÉ‹¼ŒÝB£8—ø²+u³4Ú/ËeÒs.¬y53GÞ}*Ú×&¾¬»BSzèzaÑ”Y;kSÓ]–Ãuw£¨;~ÞY4Ç®¥(íÔþ½¤V‹šraQßÿÈQ29Á¥×!]oê?&Ú§Íä_íê{ÿÿ˜Sö!¾yÆ0Sÿ¯%öÿ7ê ðí²Å™&ÔÍö—¨!ë‚ýâ‚Lš-ׯ=9Ά®Ö[ŸÊ‚/}ËÊG "ˆ¼ ½µÄήþßgïÛ½H8ÅHR®§G3Ÿ¼èÈÒ¾A_Ÿ>ùµÊ1ëì"V.Õ÷å"uöðŵøÙÍHõn¿Gßï¿ûÉý_•k>÷0&’ΩcÍ^ƒy‚¿¿bô¦!øt¡xçÊF0æ |RS/B°wƒTë'äqb´#!ƒ&‰ÍE—E{®þ4_×VÿX|"x?ÔÎòQ†ié6‚ê5³0jR@ ‡“äĘ"ÍSÄ7Œ3‡ùcÁ»£¢y”> p%8¹ÙÏæ`úËìÂq˜±1E< î_^VÍYõ|Óç# ®¨ *HH-=!Ö|ôÈ£‘PL8˜å ¹ŽÑ¦3—DÄÀôk;ÓcÝ×;Žkxér»å¬7I2¤é£ù ÓC%YØ„3Ú·–£ª«<üÅOˆŸ§÷¾®»âÄwX{½¿}w òr òôcÂή_pø¼ý¼ù»°{C ê×.öÖýcâ»å½€øýSn0ló˜t4ÒíNä]ä²LÜ$Ý(ê¼Q9†ÜT_Êuz0# [šGqúÄrTHnféž8T¸,â˥麓ãNpm&n°A¹“踡°j¦b/EÈßkÉ.Ök^÷ MÕûåÐË}IÈe×ãúïewÓÍ6¡@pÓ"´PýüžÉØç&|Ü í…x#B¥¢5´ú¸1Uõ)G¢g(ŒqDÙVmÔËbÃÔ ò_óÝôIÝ"ù! HPû¢rŠTZ@Rû7“ü¾Ï?Þ/`;^^Õáú›˜ùüÊõ¨WfSÿ¨rÞD*ý°¨ûuì‡ÞëÊÕ5>ù3Cû¬Ü]sŒb×5‚"«{ºV:‰kÇlŸ÷ëÈS׵ݿÿõð52þÅgˆDÌ¿M^裳§ºA꘤Òb@ÀÄëœpB´˜ñeåh8”™%ú s:NVÐ×@õ ëäPÖás0ß%¯‰'Ò¸É3½eø&5--îËña50cŸO2Ò`ÌreðuÐÀªîñH›æ01ˆ˜Á8A'“ãP›ý˜†«6vV¨¼‹)ªdìðˆ–†Â•4ooÓ˜¼EWÒÐÅ#’uSGÒ{tâQÞžNGI;'RÄÌúS'v '£ „âZ‰õ–¼QÃbâj)'{ÆC|=éômî$¸1¢!é|û0Œ|圛qQQ#›&À‹31ƒƒ†Œ‰_¯ð@7A#ÀŸ êû”é‰{JÞÿVXjTÖ3sÌŸª%as lc¥¦ ß”+T,?äoI¸‰®ÖÜâŠqPr¾¹ðFTÑý$¬¤é2:¸Ũ‡â“­XEÖu|½âN€ ÉÑ= 1HªÀœð©‰ç—€¦ÆûÝÒÁü">QnqÚiÁ1HlñOÄ3Àà÷¯cÖÅÅ"¹ò?ߺ¨„)êǾ m\ÿR‡Ù°ØÐ½\'náŠÊ/ eœÛQ64@á‡Ì sLÒ"Ç.Ø{Æ$ÔaXœì—âI¶ýÝät¨qþ j’ÉÎúÞ<Åš¡^€E¥J© Ýs»E×ÊÀÏc9Q\¢ÿÀTIî½ ü;wYNLBx$oÏR»Y® chuÙ4þ(8ˆ|n«< ªFA%h”ë1äà]¼¤LÇrbb›ðõšÕµ%Ë%ÞŠ—ïÝi \Fý†·›€ò>fj)¼Sµ¬q⨛5ZoÂfÊ.š†Ü"’ÐárBiAè÷ºÍªÛDX¥2Q”ŠºíGÜØÊóó¾j.Åý~\œèAèbíÎÓ÷†HÐB‘P[ïn>A¤ªD@Þ´ô±ðÏc>Ð–ï œ>Ôt¡»@³-ó‚lBB»”0“h\q‘7«ÙDÞõ ñkèXèÁ~Hç!õ[L 0‚ò4¨¢`L'r¯â¸&"àLyŠªïýôDO²ÐRžˆ„’v&ª×4‡‘–Dö‚;3wï«Jv'Ã-ϳ„S Þ‘+9—Í™ cF?Äø°¥uÎP5`Ѭý­œ5Hù‹n8R“”hS !b¬­O—¨–9Œ}à÷eÛœ˜Éh±'Pøý»h¹ˆÍ³³³WŒÁÛ6ûè3Ñ `ÿ ‘Ä•œEÊh i¤¾k˪»f£6,ÇòÙÇÿEGÕšÒ¸z*y¶ùt³HÅNN¤(‘$T¢ZÏm¡0¤[Sh©éˤÓ\á3×Cå –“+ޱ—` þ¤2i`Öóéa†ÎBÔ ƃ!.ÙlGÃjõÞýVØTÆÉy‘6´öÛ›pKÙC \±Â{¡Œ9‘$|k=‰e´É õ¼¨Irø%ƒáê;×+¤"“ûÙÅ´Xin=_ÅFîÜÂIFiz ñ‚ÇF*àß|íÂZ«ã膰G“4:žaŒ„x'©<˜ÿa«—¨…‡¶5îÊòÇõŽ.ò‰2‹ Jˆt¢|¬6ö`]qxVa帼%õ,óì",»˜ífÀº²©2ð4 Z0ݱx9èa>¿™ße«sôYR·(ñP9±&f?1±ÿ°#¡¤@+Ëp=8Z©ðHgÓV©cñC³ìÁ¡ô£‡*5ñê`)Ï:T’¯Ö‡i³EgAå׳‚˜²¶‚=ô”|sßd½Üyõ˜vçHØ*Ú¨» xäÁ´¬M€’^1×*¦B¼4žÉ–;n´©(‹~3ʬ»÷Ê~;± ýø«”„#Ú…Zu|Ô£µ”Ê.ɦüãoœ·ñŒgbØu²¿ÙŽ\ ¤fCwý…·èqfÁïP$ƒG—(›–°†Î6‚†´Ës?‘Ϭ³Í˧1ã2^ÊDn ¿y(] çE6þ\õKcWØT ¯«Sû¢Ô½/ÁœâÌ¿£{¢hø2Pò*€k#ð¶“Êbµ¡Ò\q·EËÝdýPH©Çݪ9“4³Æ3t’ú$AsžOSï¥aBn.¤ƒ1Ê„T^’¨JçIøÝ\¶hEÈ JÙ?AfàÑÄ\ŠNc””6ÞÊÇÈ^šûœ_Žã¼­7ÈŒ|šN»8MËnjC¨Æ‹²ePè)ò# Á_Ñߌmû¸Œ¬ÁúZå¬Ó ÷L‰ÚL* ì{2M«6Pl­’g¢ºLâ16Tå KAåÌ“{%Â<¦ß)dud-¢Â¹{’È5Š[”ê}&pO„«foûðh•»‚CxH§eS§Ü¡†/¿p ö‚78;åíPB±Yí°Â=Åv‚vú£Ôôú›Å¨9‡ºñß¼”0$ò©xOòô*[ò•U¥ h’Å/PPR½tk– R{J1úƒÍùÜXѪQ°Ê6 èá»S;V†Y <„…¾Å®ô¹“j$ÝéMcïÅ\­·‰»6 +4-$]³/ÒE’Ù¶ðºcC/êåoÐTjõ33}‹çÞr@_ª:ñ:œø¸ŒÏqDõÚu/B€Æ]ˆ8σô ! šÀœLº&3­$]EI”#Zô41C[ŠjલÄgŠ&Õ™­f(ã¤j’øòгrÚ¯;³°;(w‹‰g-ù¶¥26*I¡@ ½ª7cKaŽ­Í‘ç;Mà‹»¡0³¼uT~LîŸu¯Ô)(H2ñ ÇŸò㎿Ñ^!ñš4S,<ù î¡PÊ“ìáWo2«NtþúÒ¼JCšp5Z3'tÔ…}K”[‡@µqvíéÀ« šF¦´IQm µ=óÎÊ`ˆ>µ‡ÏR0KæœÚR ‘Í µbƒ{Ò¬dJÊÊHP(ôj^Fñ¢äU4åaKŽYÓÊÒyRÔ>Þ÷nUó%PÞä‡õYÁÔ§´eùö€À¾Ñë>߯í@+ýl3ÞQ=–Jl"+³÷lê›n£ž²ƒ L)cƒªÏˆebJ”­p-eíbã‘Lð„èìßR.k–XíëkC?+óE *ãQ´VhõÕÂà“iI‚m­+üø>‚<×®š§Ë— ƒ‡»âä…ûç"vþ¡±!ošEé´79=Ö¸õâœMôeƯZmq¡7÷‹×‚M†¸eÆl&ȶd VÈnã!~9 ·XË€N‘üagiL–=µY:) ‹IäÐõ¼çÇíýuÇÔlØ¿¿˜ïÛfÅKÅÉíc¿šIøùù|ü Ek]È÷Á\±ô$#U^dì@ôFö7L’8©‹YçÙZXš¸Û‚/‚ou|ïQ4ÿ’‹ü;X##1Ó‰IÏ4ÿK®àÄ'Þ²…Èœº˜ø¤„Pº|ýÓÙñlªs$vïÈqV$Käx+ÖÛâ<ù(žgbÄ”³¶m™?1–Ôt™`ÐùÕê³Ñ¡Üºè0+}«Î ˆ-¾{t ‚fÈ̬è7àÂßB·#§…Ž€`¬3JŠÁR»˜9E@1ñjkKOèàY±hîIM|H Û¯U"Yý+h“8p‘‹­´Y_™ïptµ¥Ù8¿F¾wŽƒ€•iŒ7¬¥eg£ƒ™5i<™Aú÷Tüu±g}Ú7‹›Îâax%½å“Á·› ©’:ÔpÐ͵Y¶ß͈¶6·Ñ<6ç«XÃKWìòf _¿kJ;K$R¯uòŽ(êûåôø‰åÏmÝaÖóñPi’ÍMLôJ†™D†:ÝÒH]R j›ê›°â…—×7’ßµåºgOÆb5"k‘noSŠ9Óœ‘G¾ª”ªŸ!žÔSES@ë ÿ‡…ýc6h*˜ƒ!Ùt¥YrÔ[ùOiKþtQ­IqV¡†­L‡ž9ªŒ¹2«¨Õ§z§-oûAs«CbH§²é¨ˆ@ú ë2«ñLÖjŠ3TZ 2Ú«Ò¸ïM=š-Ag‚&¤w¯ÃÞf”á5²%ÓØ‚þ˜)²6ä¡’mÎ…QÇNî/¹Ù Ïùˆ‚lºVÒ>Qli>íÃoÁ«zrûùq=…lQÝÍâ „#q*?–PK¤ö13…% tÊ¥mÅ^k¬;=ºÀÐvO‹öuöÞÈ«+ ×’Ê ÓÈÓç)ºKŸ;C` Çýrl7/v4b+É™aÃ*ÉðÛcD@Õü·åÔ‘]^Ýsw® ‚¶'òb›ÞLz[T| <Å#׉6ÈÀ®®ЭÉT3Çi^I˜M¯9³BM‹,‚½òö~4F/‘£oÞYùÊi‡ÑrŠ:a–”]¦ç\!󲿂î&¸ª¤‘Š xÂÝü3¢ Œ˜à¥C3zýŒêZpÌ"U)ŸîI;[]¼‘ÿ“wkɇ쎩ÚîÞdõ˜Û¾úÏþjƒ ¶Ëä¬7” è(u% ЉpYüü­O‡Q•êMísMåËy✿³‡oŸ»ÃÞ‘Á3”‰=¦ Ú²WEýéFfïø¶âeÑlçðØ_Фmå:Áj24©¢6ó‹bÊÆÄ¢`‹Ù«½cu â6ÿ=º–]6<Ú¬‘·£™j–hŠV*ÑR¤² ãk%ÈHvq+ÙÞ͇žÆ^‰¸¥¼ù &ÃÆaN!ãÁ×zɵú(QÄÀ£R¤±Yz@BÚì%Lp„ž6ü~ÅH±þZPæÔ¦^{ãˆöÞÑ#Í2¶=¡H¨¬ oG§ð²[wfî¥Î˜>³Óêð°ò!ßœ‹¯€ŒÎP%Ú°Z÷fßâ Sw–EioPÂá"yq™(a®0çC^{×ùíi2 <²b¼æŽõ*h±˜0I°m†>¥»ˆô –B{É÷>˜ Êë&jo~A©QÓ\´¡u/¥‡öMåé¶••’[©í>bº”E]:-#ëòp³[Þ¾6.¶Ð&ž6ä(©/ïlÕ›\ÅÉŠÒ– Ò™Š]¾B!¸MîN©.ÇÙ(‘”îÕ,²Íâ–¥)ªò²Gúª)º­ÑTõïñjNû!D'p2Š‰Ú BߣµU˜Ÿï<Â-< Q"=Õô_Ü3Ã%樓F*­Ù–t)Ž­‰÷©ô++ÔiV¡‰¡8ûÑð6Ÿ9,»`„»|x1kÚ¶jûM±ßnoÁÏ.üwì²GýÝ¥:¼-WUø3c"MáXz¯§iPó;$D' LðÎß»ô †¿¢Ûñpñ‘ðð^#ûñí×í‡Ùƒêî^ß[zÆ·Õ­æ¦ìùÕöŸªƒÒíìÖZA1øNJz¤¼[ãص´<“^ùW¨ô¹¡íögQ‹p+Èwb½ 7›« ÞËퟓú]Šî¶€Ÿ‘®g‘4Ƽý÷ k)+E<¹ý·~G4¨·çÇŸ“6«!Îíõ_g,/ØY*¶£j3åùþ=Étª^·×ÇÃ…ö|¡zËÁgG$pÇÔ¯€ä±­3…‰P¿‹Ü%Ü,¾VÒòñÿwñVîÏÿõ÷Ÿw|ßï÷¡ø©=ÅŸ÷F(ÿ\…Ÿ¬ø¾Ÿ‡×ÎM;z×½ò¢ ãÆ¬öêögÏ&¥Õq‡'œÏüî„‹PŒNoºô0"2öcW»P4Ä7óþrˆfq=Æ›À“ú­¥¯Šf3h¹è6¸ûAeÖHÿ=¡rjG΃þR£ÒÈ ÿoëÞg òzJŒRžŒ䓸•æC¢ÎK™Ÿæ0\cýx âTÖ»#OÚFûÂk®ª¹åYÝòcïìêæL™°·ºU*­Ø1p÷ÏëeöÈ©Ë*M]ôì,•ÎÕŠ®b÷d}+ΰpûýÔ…ÃÞN9u™øî »;†;ØøKÈ+¢²}qf–!R+ü€Ÿ'£wƒœpoß|÷䳑 ÊôU%—þÏoôo³1°»5í5¨×hR¼ËŸÃ?í~›ô‹¹“ºè²Ã¢Y)ˆhY°?±š½Xt[P¿oÄJší¹¿Ž X‘]4Ä@.ªøÓY£¸ ³Ng8rùÝïæ<‡ç §°/s¼tæÏûìBÚ&ŽÁän0ð1D?‘Òt¨’6‹¢ÌìP¼äkvùhÇØbza˜Þ½u Íÿy6–Wro©¾ãÚAݦðh¾èŸ†m¾ãnFJS¬½=ÕP\ˈ»6Ò›’¹ptºzDNÐX—f^©Ü/j ¹(uo eÝ­Âw}˜“V¢·‘õ7¥Î³#Ÿcvƒ_xÓM,Sξ!¡œžBlz÷×;“&Î@éQª^ú›…ÖÛ“Ç@°5&™ªLºçÒ‘ëÏ'.…2ÛÌ+‡aꀖ§!ªØª¸ø.S;É¡¶6™M×רõÛÓõ¤p^[fèö`µÏ“µÏŽËhw¾6ìÒd„U‚ÜiéI“ôVŽ_WiVWk“šjÀøüˆ°þ × ´%¬·+p¯S8âv>^~0Ï 15ŒÎÏiÅìA|z†*)‡ È’ëço GxЉ’„ÛÙÕ[VeþhãǦ¢q¯wZæ¾#‰Kn~o®‘` éøR?Å}¦ÒP¬½Ï«²A°!íó1$E‹7"§¥5»¤d¥hF¶rÆÝmðóx?Ê âÆ1G¥ ÒþräD„|"wØ*r›±l™ö‘S‡S˜'áD@¥Ù@Ó\³y¥"w Lg²Ÿ?¸¨¼iâ¹W¢±2„ÿ£Ë"…œf{ÖŸ%ëó`]¼£‘úfòJÁ„edÅ¢áŽ?o&w–ugF ¬u1Ä…Ý8ÏRfåçùZMäÊÔ_N#€¬YôQKõùÄzó äÔìíÔܪûDÚš ZÝÚY¸ÐŽÒùùµcÒÎË^¯ ÔïŽ%ÜßF7'x½©0†DfjfyâŸm_& é\Y/ߨ]mã­ÔHVQÃKœA^hŠò;õ“YΛ#æò „ºG“õ%[ãGw˜aóEW‹3‹z¤e ^o™‚ªŽŸèá•<@tG}è²|:”¥sÖ„Îs› ±J°Gt¯PuŽç(´1,@‚á숫¬byºöï:ŸxäÎ*1»IœÐ"Ùÿ²xâ'’ëá¥fnkŵ%àÙ½âå-ö^ÿ‹µ6 S®JÊ>d0H”Xš½´Vþ«GáÒøýfã&Œaþáüå¢zááþÙØÕs±œòÕžÜ ãèœó"‰ÑW]mcYÐû¬Z‘Q_zˆwüPœÈ/]ÒšÌßWÈcY^æò¬ªŒg¦ @bð°C•‘`g•x “¾Ùvù.ìYX·#„nUì†ò$f&0}1íWhf¢^ŽVWÆtL~åU]Ž"ôåDE¼~ãÓÆ]&’ç¾2õÙg"&I±˜C—L¢µ]zÈ›er%_p¦u0ζVž…Æ|lJI“–æð¢Ù¦…éWw`æ»õï·£–9²È –—o _h×a`©¹rzàvAGnÚr;ÚT4¦nL§PÛž®ûp0"J«†¹à·†4´Ó3è+P` fUopˆ¸ ­7¬.1üaFzog#¤Pxæ°ô¿ –‚ÿAýwpèZH ñˆÀ8,ÿ 8´vqt5²°µ2v6röúÿ÷P7Vx’Mù8ÿ Ó… ½Dâl©ˆP®KøÍÌxl&nuèƒNå’q}¸‡¦I¢Þ5$ \’¨yÜó" ×òúª®ê./_=ö Ñœ Igˇ$‡ •¬2ĺÂcëцâ Aê @éÌФ;.^WP;|ìF˜p–HÍ~ë˜EÍ8ÉŸ§f†`)¼Þ¾âH©Ê’#7òàJý;C.¾œ,çxæaã_¯宜~oVN‘ÂÈ”Æáß©¥à£æ£ôòûv2žïô÷χ‹A)꬚bF ž[À@ J:-é°|jU óv‰qéOÂð†VWå‰PÔhxlšP‚ÈÔÉt§@vÀt¹ô¡™.ªúß èKӆР`M¶rBiÒ·pRµ,"@`ÝÔ“ŠÅJ]ÅèºCº+ùÙ“Axá~OÁT¼Ÿâ€»ƒ/þþÆX Xÿ^ø2È‘ƒéM0[ä÷¾úxÝrxUëÅ)CmZy¥œLq¤«©ü¨O€ÏW’.I§eM·Ú«m^Z–bi:½Çd&"Ó¨"c‹þe»•1(¦¯qtë‰`Úó¥éûzÝqèï&ówó‰-6æ`xÔ”«öD ñÓqŠW¦Há—1£î ú’— ì%·L/r³˜±âFæ›%EJ«˜“=à£$œI?ܬ|Y“ëC-¢ »Zæþ‰€Ôø áÔöw¹·‹;bܲ2I,”¢@·æ~½k»Å\Ž\†eÒµòÏ»lÓˆ„Xt /q1ñyI=<+hƼþDOÌmâ_è“v õÔ¼†%9¥{¥ës^±’ÝCöÿ¨d ¹õø<{“ºsºf#86ý3 5Z€rZ_kÑ'ªé®¯yML¶ˆØöyÞ¼IébàÇJ›p’§d4†ÆÏÎU™| éØCË¿™ó7¢¸¯iæê‰›ËÉêažz«k¹ÂÁÜ6ÓùŒvv¡!fœº@Æ~F¸D@šF©`)È=c‚¤É²hZfÈC¬ FbÝ)ÀÕKŠ bJ¿Æ>¬äžšñlA "¡³œ>Ú³ÒÒEØÀ<ˆ¹é©¦‡Ú=ã6!õb—ÀæZaÏÞ?=Ã1\5BÏ¢w ‘KüeX9¬ùè•ÇP$úôS9µTñ«"Áñ$1×|à‰Å÷&…õëîhèW´Ë»8ÍŒÈ8,/èÓYf˜íWà¼YH€Dæ\jé瓵ø1Sk:JÅõA£Eæø£eÁUvàT¾ÿãÀÉÞ#"[vöÞ3+{ïÍÁ1޽·2+{Ë&[„lEÈ&"”™MV¿§ÿçûû}¾T§þ¹®rëº_÷ýÜçý¼ß÷ã\Ïy.»ŠoÏça¥ºUuÕÊ¡Ÿ`J[à‡Pª%¨Âµ­h¬˜cbM¨“DSö›á;·#·j  ͇”ä+¤%Wg¾¥±x×Q¿·šcÄ‘kxIòðLVg©¥ýüì[ç²Ãž3™8ÕZØw\n³MÄYÙ ªsž ýÌ~üw®iιâo¾”½Ý“Hpò¨èzLQŽž#‰9‹0Ø9/ÇDÔuB/¾[>AT‹|ŒÖùâLÕ7[+§¾(M;C'_r«‹£ƒÕQ\ÎÖ!ø<-„Ô¤ZË*ñšMÖƒ¤r) SzýÁÂ×”˜OõŒ#(G²D5G%*\ݪ‘’¸/°•%#Ä·ý‘ÏÓè…HhL^Ù [úŠ„T”Ý&NqCZÈ%éäóÚÎ{­TBVXêöõ³þ ÔÞûø¢ ó¦åÓ'Ž5wYßœŸžLFÂCDc/ßf0JùæhA6yq8Reúén·?I§dÒÉV@H&ÈY¿Û'ª øÞü”ZbFÒRaNâý|Wä…ˆ¶ÜÆžöIOšQ{ Y—±Ç΃nÙ Pn‹ŒEqM¶.&³ž\•#픘U6ÅVw@6\âCtjŸs¤èbPˆºTÒþúˆ:ž¡ 1SLCÂ'$n^ÉòŠg:#œgCeP½à[ÄâÄfÉrúRf´yå9 i„ÄQmšý¾–£,;ßÉNõ øGÐä…„«)¢zHÖE¯‰«”ˆ¿@-$: ©ß 4Þ1èDò‚ë&ÎŽFíØ/YA—J‹ó–7’Ô(Ep¥<u=¬äê©§~í‡.€Ì¨‹Öĺ^fÚ)¾ì@Ü<ƒfÊWÿ è$¾ )¡AÇ—ŠšNˆñ¹C÷ó·é ŠHx‚ŠÆ™Œ ƒVæJbJD÷ÊE´ÑW•ì–¹’Ã勎¿JÈ/Ì¿RïÖ…žÅ²ŽUÌóŒÔµhC:ðq=^ÕI?ò¹éŠœpƒnoÏŽAµLŒ[!Sië@Z^'Hv÷‘ 3÷ÃüŽ& ^ÂR„üu¯ý+…Ýzøø¾2·S>š‡Ê·+rê,r-:~>@ €N–V¹’æÓÚ¼á1c¬rö8Ü››Q*àbk  ´½<~i±yR)æñÞ~·Ä™ÌVm#Ubt:7ñ%ALò[ù¬ª|ën9´»ýŠ&"t""h§)}SÛF&A-lŒ‹-Ê›kÅ| ô1}‹«Ç®…ua_ôg4œD¸Ø$0œ_3ñÐ0Ë&›Ð;É-Ä Ó,𯩢¨ª ›±LçÕO‡SÏŸ¦¤HÌl ‘"ÈnâËÁÉFx¿ïì~Jã1Ä[§âœ*o`mPÛ-iùœ© ñ–§t í„Ù~Â6ÒC¯Gµ764M;(ÑÀ5õ³.{È–mùYÆnÛâÜõ,í¨y@¢Jë·œ}´ã`ªÑÅ1OÄ_Ü׌(Uοoº¦6leÖR³”˜vbšdÃÇïÔÎ]Vá×y<·5‘Â'ØMëèXŠw“<µ'nènÙÊyè¶Õ9a„|^™}¼L¶6ó£ò&¾ŠÊ€ž"kuU|5²àwÜí„p¢J&ß8¼‰/›?ˆL®®ßNÑb„Ølɯƒ|¬EÓµöÁÂxUˆO¸ê±wŠÝÜ×ճІ–N¬CÊL“4Mê¾íôUQØ<ŒéúH¹( +ëB'/e+¸Ö:ìÞï¾äDqEÆàÆ»cYíŒTD®{-IH ¸‹ÔQÌçI‹’bÚ=ÑŒC"mé|´-ö¼5GÄû® Ó ¼Å]ÜD¯Ö¢…'Ã߯Ï|£OôW‡‘© vE//CÏDæO#1nã:V]_ø,·eú6=?7éêüØ}lZó™µ^Ál7C‹¿ˆtŒŸxÿ‘ýP×üÂôÀ'øå¦°Eªm&®wÞm}Šó£¹à …ˆ¯ÃQæ‘(V:ÍSÅØ ¦;÷Éì­¹ç¹#[­!e4.¯#ÙhøO¾5-FPúß„š‡ñ¯EuZœÕ`—lø-°~ú؆üÂéEp /e-¯{$a¢H®xêc Ô¯ GÊ^éz\ÜsG#ôí÷V$L#ÂL{×Þp<Û[ZÛY¬Ç‹oÚÔ»FsmA5Ô\uüÖÆWŠüä+³²(ºg}GlÛú÷+lôv Ÿfä¼F&Âë~ûÀ¥„Ø&µ¨“ S¦J‰þ³ar6^&S”š±ôeîà·Eñyšøî¦›–qrÔóBo>Wð‘-¦¥”³o±Ê¨â]ìt¾JÜÇjªäÖúü*Åß|E9t <2Q›±ŠP¥!UúܶXÿSÆ´—;Èdž«•{8Êžš¥œi*ƒm2EÈl±¶„çåe36f0¨ä¬ÛJsPÚ¶°[ÜÏl;ºëóŽxæ–Û†T9^l‰!¦iBj)oû2£›²·¯XÎ룑“¢£js`%úîs,?no^©©#S²låôÐCÜÈ[ÎÝïoF›ˆâoÅÞcz3äí#~JÀ*áÛ¥šÚDè}Ù¿4T¡™' U ÏY?y·¤”ªYÝâqÇÎá|÷džj:Ç8²Bî”§!ƒ‘K™K’ÓÐ ‚ÊÑ·‰bÅt×1š0ŠõiúgˆðýµïóNcŠ¢†üðòJùˆÑ·KÇIž5FÖãÏ*áò2|6œòIœ°œÛrYk.5à†õ¨–|w,”ªÞ]%u—us8Äúˆ“ì#ô¡}[2}„z?Õɰ¾fÛÖ±˜¾)‹qF”öðç»Ï@“/Vn„Ì©-r÷hÚßý¸"LQTä-0'ºÙDËd"³xÐñØÀ¬¦‹¹Šï>È™¸IÑGˆ-öסŸ ƒD:GœýmÎ÷-)Ä(/;z*íeÕÔ;"ÐuÆuo~Á4c{"åT*fž3°÷æCñe‡ûŒ‹©É„é‰>œÊnˆeZÞìaM^èÑ›-LÆÓ‹º?;‡mbñ1ƒ’Ê”ôé9ÄÇ>î³ïîKc7 ‘7þË·/;Ø\ŸÑ\Þc°‡Ï£[0æôoÂHç·Ò3L›îœdŠ‚x°,&b?„&ÕS®*ðéð6pÍ'‰‚c|¨¥zÖ ZiŸ øˆÜ²ß‰.¹!„O•¸Š_@A´R>€®ìWGCd$ñiÖ»íá#f~žAéÇ…áhǽëñ¡‘ze8!t¹Ç,œÝJíÙ¼ƒöy”.—w‹E ìiµgô­è/„i›kNÉù•[5&É+´ó'´ŽK@³Ñ ¢ãƉÐ-H¿ð œY z]’‰bg;ßiDô‹ä˜Ù©ÖZ^YvÌçdÕx“Gªo·¨º˜eíýu ½{þDŸüx4²Ž›ÏQG`Üw¶§ý²ÂQmù«øÛ¤ŸŽã9nvaé¦J›û-¦½»t”5زkYU††…,öO ç¢ïV,Àù¢Fùm¹k-ö+–žÃqäe½ö­Ê³ïo†äÆ zÏ}Ç ÷¬6ì?–ŒáÛ¦™}ú}çÂl쉞pe¾ƒXQu¡€,ŽÜìÄâûöм óÚñÙ6œ5ùýš¡Né\¨Dºô±_î¨6r‘9LF„¾Jê=,à¦_¹û )ëþ¨ ê…_àžˆ „½=‰Ó½†£rÚ‰§ß—üýýÁ&(™è‡h„.V̆úÌÊøìxæú˜»¤ÅC·‡m ÊvÝþ*³“ çÓoDÓû>‰õ)pÐà+ Èb<Æ~Ñsë5´Ò‹¡÷š¦N¬Ý/9J¯XYÃ_‚‡GöÆ¡_mrÆSmª›sÄgÆ/œ›î…V>Æqt& ¨º[A®õ%¯“Ïý.âB¼™¾ãÌ=ZäwÓ!é1nQ9á`Zøpã7OÉíÜ:LºDt-Sb’¼ø?àv¢ +-ÒŽoK§}Iâ*½c¸ÔQ²QQ==‚eŽÈ›H‹Ü‰5ƒÃªàô sœýÚ¢½¨íC±ê[Ám6Žù ©p ek“ û½ ±g*ÕS©LGñÓ±G*)¶˜2BZ"‘•±AXÃÞI%!öä.§K›+ 8ªßʇ Rªµ(ßd•zð´¼á´pãúÎãíò1Ûs°d8y2s=+‹,µ:ìot:)½•Fml¹Ôlúê6‚ïS—çñA¬úÀÔb†ÖDOFøœ°jn1íê²ÝdýKÐ!¾Ëù}È”èW¼èŽyÝÕcœgÂÆ<•à‘ k⎌'ñ¸~9Öº_åǹã*2 ¬ÞÄò„ÜÑí¸°“6¼A¶kÀ¤jÎf:£X&[sçtmsý…HĨ´î3Ãè…+cj»ŠY€š¾‚pØŒïÁÇç\kDªZ"ãwh¿Äƒ¼=.£7FRUÒÔ¨f™ÀgAõد8Ý´á)јš#èÆúÆ<³¤ØV²EZÝŒ§Çè÷ÞæÐýf%Æ06å)Ù7_6Î?J­0œßó»ßz _ºøŒ±—ôûn¸ÊW-ïMbÕ§‹)ºT%ÏwzÇt×õ¡ä7Z¹V”—‚h39tkŒÓA¨´†ëÛªSë7Ò^ó4µ VI¾ Oز#õ S¡{TÉ$_},uøÕóûë‹ú=Òãò÷E­bµyu&í¦_Û¿ŸS¬4„µŸÁ_ú* 8õ·‰xXoNØYÎx :ñ³/ã=éøZ8îZ´‡’½œñ”åÉèñe ž‚åðábŠ/_ÞO^Wð.JÎjúdݰÚZ:6³þ–QWÔµEêf×{š…aÛéJñ–þ«é_t­õžZÆí"4oì¿6Åòþ(3—u”yà|ÛÕEýeÔï=¸èyU)Ü!ˆ rzÙƒ‹Tå»tíú·Ðõ‚ûç´ŽjnQˆV;r ~zÐ%B›ÃüàóŽ(ËÑ=3÷ ,•6gÈQ…£òçÅF§Ùˆ÷ö•6JZ}®Ekér8À%oÔH!½Õ÷¦í—§óÝÆ>ån¢¾Ÿu&ëUeŸO>k•r™%­HÛŒ_§Ê˜ÿ~z3 dÚG9ìß]µà²‰I»Qߺ~f×¶ÐÁn÷ÜåÝþ(;ÝMOvÛ*Yîü<ÙúØî!å‘ñ¾öóô*ë„c4Z‰ ’ãø]éÄù„›¼ ‚šôy÷«àñÜhn¯s}±7ár4Zv¤z0a—˜{ðv;rš_ÇÓ£%PZÒA·à‹IØ‹ i5Š­RÒ•{¦%Úe²Ð넃QLž5%+¥ñãYêËé3Tþrf·¨•êªÿQ¥.×Ó)g!è ‡‰Ê¸}@Ùm΃堟|'Õu€£œüMŽÝâÛ¢åEÐw¨üUPă*íòU!isAòð¢Oº¤wëüV«u]|½|D…Eˆãz ®G8‘â9Øý–íÙ˜â6ç¦ìs_Š÷EL+<<#—kÅãïóÊMØ)y¾3æwEcÿzßU“¹ê=ƒÆ¦÷ ‚mrM„&ÎØ”´RùµsÚ*UåfÕ<ÿð§ææÞíì¤×kÓÄCüÅ'Ù¦˜³˜rÎé’ëÔ",òLî ôÏ#xJyÑ4F0­]º£õh}'…Ô¬„ É ì4”©vôBŸäŠÅï0õê߸ož^•hdÕê’RI𫡯;m…DQŒ‡Ì·Â'¶Ñ=“¶ù]Hå»I RÒY¸½v¥ÒÁYEëùéµ#ÌÜvž3$“a‡L[Yq£ÝJ¹)`Ñ©iðš=ØoÑ ß©°…Ow*_¡n‡ •t}"3çãá:ÒÄ,¹¸EµI!Û'} 5»¸ óOÛé-Sêì"îI±ë/=ÒèêÔm@ªºM+ؼ":Z›í߯øš5jAîðßrg·ßãÎ Nâ}*г£?£~Ú,šsl?.)ê[¥~™* ޲ð­NjàÑ^Pê_Ÿ1.½Lo}<ìi4XÉÈ}§ûÖ˜?c04ÓÜÌ"¶>gøÐÐüší]’¥é5Ýĸ?yó%6\-¡Ä›º¯ÂÕŽýVýgÿH¯å;ñÅ……abç”Wß@`y…¬©G G ã „ÿîú¼õ:Aa™@ÍW(8àÖmr “=É]纙ÜÐî×iÈfõ°°Óö6¢—\àÙ§Œba STèUOT§_éŒWã2&…ÏP}K@vÕ§úhü0 I_ªŒO›Z&íÏhåÁNÅ·bmÈ”v`¤4ŒµÍy~DsQëËg* Àéz/kFË v€ÝtjCÝ7+‰Ô‹ìZ K‰OvèžMHêxZ,h¶Ô$j$= 4­u©ù ô+±;·§”écÇ]õg}c¶à4æü–”qcW9²ävxr†p¦ú¡»k{>ðüùåå#œYo÷Ð{Sêö×,|ó‹q8ÒýÃÛ‹êö$–¢‡:[Ü5¹RR—V£Ž©–îqq¥0…ëTÚÕHé1*ßÇ“ ÷¡Áú<†ÛóÀ•¦âIø716![—p;{[@ZG– gÏ7ÙŽ”ã^éPÚ&A †þoKd—ßü8)Óý(j0M))èú­nIö¼qÒÌœf¹á1õ­Fªjx¨«ðf¤:{ç`"Û–ªI»÷¾Æö³;¹®ŒƒýYÓ6ï"¶ò†ŽÂ¦‰eõdmTnaJ$ÒÞæîTLSØÀJnÕîÛw£ze¯HH¢÷¡ÎÒ%ÉH¹ÍR%‰eÍ÷Ó|ÖóÃñ÷Mn ýSçÖEwÞaÙvÊ!Îs¿=(@ µÚ ílvÔ5+Ô6ÞBÇé£%¬$ÁÂhÚj…:ai7é×M”$K«—ôÖ´Ì©zx›1íg¦ºý(‰ Òí3‡\ï2‰ w ½ I,›2ÖüŽºèhgÙd’ˆýöôÐé¬Ò„ñ ù†t÷.2:.æ|&”4€u ¡Ø_Ð?`?Èžæ#3¹Ì­õ5ñ¡ Ü W0¾CIx±è"ÕÓëIý¸NLß\‚€Ÿ÷ê®müi.…d–‚eI“°[Û@Ãþ¶òC†·îІÍ0¹Æ‘êTßjl£Ù•¿éóQ93K%o©ØñiPkEÛåØ[Ï“exˆ×ÊÇfðÅ$";&üL_?Êwqšlƒÿ‘ »¢¥·Â¡"ÒiÓ¸k¾RNVŽqÞ{üK™g/‚f\úÑ+0ÄÚîÐÝVúâàINeÙ¬Á3ÎØÒ`ºÒÙß²„¥E$¢zÌWŠrg¯”X?GÛú!c.¼Æûžº×*Ƙ;XjMcs"Ù¾ï˜LÕ),üpýM•?d™USk¾— Œ¡©r¬Ô4јÁb•隊‚,R±5±×cÞBÌêÂösÁ%/žçÕ[æ„Û­šs|ÍÎK˜&®$iX Ÿ,¹ÕÙ¸¿ íÒ a«¶ÙYÒ\Îr{T„Rkè zf#"ì?O³0ôrò;¯æŒyG0ÍöÂ#fÆ2)·Ú+éŠlJy¿ö^n µ2»AÍÅoLUwèŸP^›m`’ ŸÂV‡ö7èNÔ_{cwUzS¯þ)l/èa{¶­CXû~¶ŸÿR‡ •G¦‘®‚p}Ϙ`cÖ L÷Z‰p׫‹½ÀO.P¬@Z¶À™`¥ìlrø5IÌ2àî73Òõ2H/xÔvš`s вI£ÓT6°Q<Ǻ¾áYþåþíž³³=ø7«Yv3ʨž­”דU³Ô/1yà/˜•0ØQ"Ñ8èà ™¯ˆ·5þ$ÂL¨¡R! ˆppgÀqs]çµþ†=žwG’ŸøËßKÿÏ>¬u¯P›ÙBv ãz¢Ñ3ù[æÔ“ˆãË“Ìö§’“ic7·ß™ÀÍy²v E ¨|WÄV%-¡`ó ;ã$Íñà­•÷ê¬Aãï2p}\3ÖZ¬x½€´[ÿi)°“pžÃHÅfza?v„?iÛ¿ÔaO¿ÉüÌ¥hQÁ_?—Áæ~0ØúdW@]o\Oö[v‚a,ˆf7ÃÚ„ ýrwø {%Úw¢³)€Ër¼ë; wÇßÊÚP°ƒÛ¯=J]팻ÉmÄëUä½Ç/½¿¼žr5Úªé\0ýX¯¸ÑÞtMA°h:O%ìG-õì÷gæõZ±Û`Ñ«e yv ü3 ó¢íøõ+¹9`ÖLj×C¸+䗴г”³•÷Ÿ÷š9Ž43@ì¿y}sõ9 ;SëI5\ ~©ë›äØßÿjCOYI¸Æt4ÿñ½ëd!ÉC`]1É®“rÙ¿'­Ì¡æPo¿ cPûΟ»ôý–ëé¾¢è÷¤dÊùÏç˜]Ï»q`×,¢ÿÜÕð¯˜ñê¢'ÈÂôÇŸ<ç¯xdï$j ø™IAà O2öÿÃ[:€Üó»Qz–hÏú€Q¦¯o5-ÀÅ ò¿·fü”$Jº´ÝÆ„ôõ¤“¶üÏ{7×=gfGÎ º%®‡,Û·¿ù:®_ÃõÇ=þ‹J£ÃÿíÃZÊk÷/ fýô—AvýÖ™ѧ÷a£¿¼‘æ:ýµùOæ¿çÿï¥Bú¿{½|aß‚ƒó¶JÜÿPK Gv½8WEB-INF/classes/PK ¢t½8WEB-INF/classes/tutorial/PK ¢t½8bô\”Ëò )WEB-INF/classes/tutorial/NumberBean.classU[Sg~–vSÁ QÄÊ"ˆ!®ö`-X­RÑXTJ€{r–°ìÒÍF±?¥W{áM/¤-Ð)3í}T§Ï»Yat&ó}ï÷Ÿ÷´ùçß?ÿp ^gp/·ñ™Óò¼ŸÄ1†oWYrÜÚ„‚HÍv(¡Ì ±Jê×ÄͲß0«$®ÙŽí_§<;¶@_“î’¥ {Úv¬ZÉòæÌRÕïnÙ¬.˜ž-ïõWl:ë›ö¾KIÕhÚܲL‡Áµ'fÕ^2}j>Êè6Œe³lÕ²ëøÖ†oLÉk²ù˜hÓ¨­»ŽåøÆ|arnªUÓ©K«VÙŸБZ½¢`ôöæúzÕ.›¾í:Í(÷™·Y±+¶nzfU!®¡›Ø§\¯fú·7ÊÖºS_ Ñ*8ûú$$ZÐ ¿ANÄ:5¬V¦§ Ù‚ÂJ'*–3ìƶ&É SSp<;vÀEÑ÷l§BqÑ‘9Äpê¡0š-H1ƒw Soéh×ÊÕpL’E·á•­)[úß½ßî‹7…óȦpÃ)ŒÈQÁ +)ØXU0ò&ýQiÏàVcyÙò(ÐèµFÝ×KþSËrôÖP•ƒ-é|]`0¡ìÁxá(ºž±°Gµ +ú®‚Á׌‚‚žûalSwF%MC)¬ãûÎÉó>Vp²Ht~^æ6ôŠë붯{veÅR0Pt=ïY^÷½gzÝ­YÜ"§¢¯P*i›s]½d.åi¦WݧÂëi_m½vnOñÀq(–íEKÔíš»«ùn³¼Œ¸oTàW$¢Æ%©[â¾ì«C%£g-ùòä;)¼Âj¶‘ã8ÀA;\Ú1çr,ûfû-ºªÃU °ËP0ÄOè°Ãˆá´t‹_ip„÷¹ð î#Ôç4óãk ]¤€žÜ”\t ]¹žä"›äu!Ç3MK Ãó8Éoz?Þ!'Õ´Cx+¸ƒô©D¨'oíÂ6¢ v%ÚÍýŽÈÏHD×s\ÝE|qêâ´tbIaoãH:Õ¤#¤·ñÖŽŽÇvѽØÛAÏß/pj<*–ét›d33ƒ"Ž…°G ,H‚e` ¦È™!ð"SŸ'ÌÇÔZ%xIeåIþé]f!¸ƒwYª(uöxóèÃ{x?(ÅZ˜²PàJy â*# õÆÁDPr~Jˆ{–»ð€i¥eðYLpïãÌÉƱ–ñÍŽÆ‘vãO;ßêhœi7¾ÝÑx’N›ÆãÔ–žÅsüÍ6ë;u¦©Ñêy*èÏdýœÔLØd ;B•íÒÕ—Ï=1å¢îü˜ä@®6gÅ«Lq‚*½‡ƒ8)ô9;M¼f,Ûm qøä£§Êiò/—m¨ŽŸÙºu–ü]J)M±| l+-’Îw PÂËÚY•ã€j”AóœÄìMÄh¶ÖÄ‚ÇX’>E¸‹h‚£Fþ~žþIÀeüÇõT$j@yq6ëQßI²c<ö9TËkÌRºj€/Kãyýª—ëŠÍ4+üzÓÄœS¹Ë¬©ïÔha%ÖqüÔXt¯aë¨Ü€×f`ç³h{†ÅÉUx*˜Wìƒâ»Ox¢`ͽtù“í@·¸C(wLðÄìϦ”½4ùÈ®Y|ÝRkâÍ0^ÑÎT0Hç…ã ŒÎpºPÃÈa˜6™ëQ¡Ò$ú•uîpWPÐDÐwßpΰ²´f°¿cÅý e_µ*ÕìyVÛH¦ŒÕ+-y\NƒÑhÖœ ºèE¯¨ŒÆ\ª¶YCÓ€ÐBᬒïЫ–W;æ|6乆ðØ%`Þ$€€æ@ˆh—bpÀO!îü]¢O%|¢åd‡@‰¢Ë%³üÛ’Zãß2 «²~ïp›E¿ú‹• ÿÍÓX»”Fv¢ðúø» ´Ðü²çê”ÜKººÄ–[/t Ó‘ÓD c?¤JdïéëAžÑ•G̤»©Z,©–?{a8Okö†ÇiKE H¶iLLƒ1­:O¿WL‰­¹+pÃô†È„ˆøò,ƆJñ ¤`ãôœ¦@¤Û Á ±¦>•C\<ƒÊb'?K°HžEÍlbóXÝ&µ¤ÔˆvË—˜Ê,—’1²[C[} }¡:øoàÐdéÿ. K»÷ÙËÁ‡ñÛ˜-v•o¿ZߘÝÎ[¨[H…ûím­_f ÅÜ  7·ö¶ØÝcwNÝ×QRän±mP¡má1s³º‡ö!¨­×Ä× #&Þ£Ç+'Üñê%®îüÏÊXvO¾¤5)Á“Y¸àæ$üXt£!ZÚ'ïD\v¤gÝz_à¿Ý<Áô›¸à–æ¿çlþ¿ ní7oÜ$Ÿ´§bHB%¸ʉò´XååÏÊi¿6H]L¸@>?è ³ÆÙ(ŒÞ6;ž¦m\i8rÙÇj¦G±9]|j¶3¼œ6}à˹Íã.hµàCÙT‘|ÂÔ©™Ð ™ýø‡ñ&oq4£À‘cÂSˆDÍü%ÉJû.ãžÃ%®oüÚ¨ ÑZ¥{ч-ê*hÊܨ±$T䯑Åó˜ÄQúù©@¸‡Õ5 TÛv˜DKƒ7[¬§Q¢Â.Ò/hÈYȽ$:îyàZII¼<-' µ=‹ãñâ8$–uæëã¾¥ÖHšÕ7sÒ—ùNºR±RÀr/ˆ»ª²¾ZÐVÆþˆ”´žbE’º=|2à°µÝ÷ˆ ’²3!É~j`€ÈøÉ >×ò@pôsaÁ 4aYŽA·æj™z§×ª)øªo`Þ¬Ojó˜&š[Ñ5¶Ã9ݽg:e9µÉvKWm—ß2?=ð¬ñÑco1mÄ@c2ÞŒl·Æí1ß|50ïˆññÚÃÚ¡x #’’³™¯Çáßå 2j'Lè RòÄFdÉOnã§y¥kÚxÛì§£Ò¤&\ÀÒ‡»Å”VA&àØõS@…_Õ&NlÿJÔ_ ×oÒz€ÿÙý‰4'«WMÿ/ت(ò48ÁTÊOKÆIÄìŽVÓ.ž››Õz!EݾçÕOÏØCwl­ÐosÓíR`¸¯®yíò±½{zãI=¹Õîv¶ãÅÑá×¢|&T,¸èã¤9 JcHBZ£‚£MÇ5ôG'1f ”46ëµþ6jûPÅP*p-c¨³HuµhåÎ>°A»YT”wI®R¤àÚZD$À'Êd¸ €ßk,­"ˆ&»õ橸|įÂYË‘²t%o‰Ž©7ÎhªÀUNµhÌŠ3ÎÚ$¨°Ì¢ïdß=ÅkÄHçØ ?˃òæ–ÁwH~››²„N [¯c Ó¡SA [?d|ïiTE›€ÁØÖáïj*;õÜíG³ Õi£pÞ7Ž7œQBñÒì!½cþzÍ M6Dz<©:Á ™¿ïÒ Í;ðd† 0†eø6Ïò*A¢6ü­: QÅÊ©d495R¿5xP!°â#f}šGdõö ß·Q­aÙŒ®HÀGN‰’Ðû« îŒÀI› ÔºF«ÁõH|*Lׯô9ƒ9²sÜÏSßì¿R÷òIÿ_ûÿ¢ÎÄæ?up1€äYåÎÿèà†ÿ«ƒÛ!¸ŒüsG³þ´ÕåêÓPáM©: UÕí–ð_õ¼ëwA­]ê 38û]PyC[U¯… E×Õ×…©`õèHTÐ`4X¸&€¶ÃQ’†`,’ò[Dö¨¥ªq%µ“Jqì’(*™ ”¸o °Väo).r›œ  Ð¥R%h5e«$"Ön³v±õÞ‰x{´kÉk¸ËËú?˜þÍœ ¦e:YmÓ¿˜s•è'kfó]êmštùPê&T‰gÏ…½î'Øü¶yji'ˆJ\Ëé Ë.Nó³b;a·³œ0ÆÚŒäwAùGAQؘ>d”ì®ÆGrËÜÞžQ“hŒÔ÷†x ŠŒ7ëÊß„T“»æÑ&æÇ‚mú£ƒû ‰§æúæñæ~µ«QK‹Ð)2‡§£C×RÜ ]CÉPZeà¬wå£Ùm8¿ùj~ñ ÿDÑ©Lð©¦d±k ”`8ÎYý4Œ¾Ðpw22s]¿ôJNó„ê…ñ»ƒKþ£ƒ»L޽C!åì) è=[7›ãýG×úîž_܃€4§î`ü,w¡ó÷+!`Òø¼ñçÝ/wœÙº)ήÂWf XvðÔSƒ“Õèàæ&üÆ3”m³.…½aÙ¸ÁOµ«‰íÿîU ÿ°ÎƒðïÕœüïKDÿkå_KAZ#c—߇ó?–vYªÖ¶ëlŸ™¿¹ÃÒX¬?7‚ÞCÇÔ9w¢žeÚs^Ó(4¦K,UP¶ª9öÝÎ"Yw0@ÿ©7ê™ÝêÚ¹°Ó1¶éözT¢©Þª>P²m³Õƒ |çõõ4Qw%WŒü¼Ÿrú4kÞ¤oáOY"ÝßtµícÔ‹6]ij­K—Ru`<±:šóyZV!´s:çÈj$ÅÑbZØ¿Oµ,†³sâÔ±‰¤ƒ%EwìKƒ ^ÿøk»Ífu•D–l:£ZiŒ€fèð×øKÐ¥Pë[|ÚMuï¹.¯ý·ƒFÙ_41½sÉ߇‰¿aÁ¾;@[3µ,#áÄ«eê'+ð3/Ë œÖA~O ãð÷ â&ͺ=Ĉ`?ª›?ÃË”£}…DŸï }»#óJV½bß%¯hµéçÁ‹u¥¯J’Ò+þŒã5¨Vè_iXÀ‰j´´ u(Ñ‚Hæ1{"ž¡¦µÈü¦…D û™k€•f° > \:"A E]Õmü­‘-¬;榀èNÂ>ÝVmÇK¦Jô©^’Ù‘›D—ójáô¯8)ž/ö~ôq. ]ÜâŽI·8nɶÌPåÉ!·seÇs:WóËÙ\¡ Žþ~–QC'¥î!Í+•“ ½pZœuV­ìHq×NŒ8; Íxµ`À AÁð€žŠ¢GÊ}G5ozE´*˜xLŠpá˜ÂŒq€Yë×°TC%šclÝÉS!: ½dè%­‰ï,q;w„P=¥ÐäŦí¡À/¥Ñ.7¯9¨óïÅ‚Lùµ«þýo³…н¦Ñº« õBX?"D¾,ä_CÖ<1K!;­˜×"|7H.@ôAý Aþ±€o˜Zµkí ¤‰ÿYü.GëõŒþ×¢(×lùÛƒd¡ÿdìà`ëðWú€gû2ÿ“qOhQ(¯êÌ}u“®;¶œèaÄv]¶qmÕ} »p|ž ÀNZ•ï \­ØnÃøƒê?¼0Àˆí#¾¿œ=ojš±k2°qS&qîSÁØn1ë1[ÞÙ`СEîu–É EûB§ÀU\$V¬ô.³dôC±¹¹l<¡¥”‡›ÁËv,œ$ž18ìfSjÀÉröúÞe}Ÿ´bÐ9% ë!2±7*Ù t–ñg‹†££÷½±Ë¨Ÿ§ÂÙÀ(€±sN2P¸©©~Õoa Ö¦‘ÚA5ÑB™ÎûVñ2ëGtô¸2÷«qWîDé–4õV¹\]vŒüÎ-mk3‹m‡«yËOMÔaÉ JÞ.TTֳȀðkˆ…RMx÷®aÿ$åO¿ ý#-ˆ4Rm³‚²¸4_Ò¶ï͆U'ý%*´Ù¬z.‡<Ú\ª{ÔóC[¢ŸïJcÀäb–¸%tFœëÄ›Ò0ºÚgÆ›5^m•›ã)Ó]?Ø€$dr‚U{Çì8 ñ¶ÉEg˜+ëJpŸÎüøròéÍÜÑ Ç&] ¿ÿÈê-¢øÅýp™%ÿ0´ à‘ïÉ-ÿ !5V¤úÙB&ÄÖŽ»ƒ"Œ@y*Jõ,¿›Ô¬ÂG=Ëu× ;@/¿jɼ©Y¥®°žœ¢`®´ö@N¶$ E¶Jì{„Ž–Ö½ u”ìà†8Ë5z%à’°bÖ pÓRæ„›t[uh«èöíþ›ä6j\bž¡»½Û ÚòöÖJ1#Âଶx³UjèHê4ù8‹-lênƒé‹€åYû µLø 2Ö£ª.ã‡ö}ÒH®~<ÑE}¯*esª1Û˜{C_×.žÐ»×¼+bpìpúßöº1:Ùþx[•žE»Í5I›6ÿí¡.ìc ß­môÍr¢-Ë´®„4ÊZß9žÂ‹núùþü9LZèÄ Dpä.ñÕ’YÀ³`¶K§f ‚|ýž‰G1VÉmº3&¿tÑZ5;%VŒË2hbÓHöå¸öGʹ §qR^{ýd¢W¼G³œ§á+s.Õµ_ iÎ×Ù.òÉÅCÍpô¼¶ÉùL·ÖŒˆÚ¤l3x …éš5ÎL”Ài]óz¡=¨¢ðä“Vr8:‹gÅåÔ¸´ˆÕÌœ#l ¬ ‰¾»§i /¬QàBXÃì÷J#/ü:úð“Å•»“<ŒFÇýð(™To¾„L%þ!ÛëxŒùÓ‚.«ý=›+“ÀÜy?.)Ó-meƒóP/þÁ™ÓAžiâ½ß_·$°Ýä»wlŒ#ôµ ÿ±õ´0d[74`t#¡Ê9eNÙ0ˆ?;ämÅ.\7}Ç…Ù}¯"» Ôóh5Ì)ˆÿm3®ýƒ“F-ýò{…T‹wn÷™ÌFëÙ€‹U«ùi/SWk{>×.}*á¦÷h蔎âê*ÄJè´.ËÉßÿXÕ»ô‡žQ™<€P@ÿáoÑ~ 3´ÒwttŽë“bDùêï? ð w‹Ãö¨ÝbÔŽÂQ¾4®Ò¨oÄnÆð¢‘#ÃóÀ_u‰C@öHöºs}eÿø|y²û‘à¾èóÌAB¡IyÏ*ÐíÍFtÝ~‡œ(DøráÅyØàÉ [Bep6T•2»@ODj—>ïDw‚á6é,ùö}ž¢–äÇ6„ÍÚnPW}ðB!‹¢â]°Kcj–o¸y>IJ:/L»¯ûH:ŒGD¹EÚ+Çíܵýy9–«o„›®ºcQQ(4W#€xœ€Öð?Fw¿ëéß ¼­“±Û¿Æ?KYÛv…g«=$©¾Êò˰ÀÊêÄÏž›•0¯^2 (auØÖüÔ9M‘œŽŠ/‚œïðb°)Á…’+ž÷±wä‰såãåì œƒBØ,› E×½?¡ópjS(õžc þò“ÓÉÝiÏÉÛ@õ¢×ù™üv‘“ú¶?ó´¦’q¹mß!gbÕ¢$A•€œìÛc›²Q¦̺É@·/—PU8-;¬ú‹6‰Ö‰c±Ø­Ò®·¤[ÉH­¡EÞW¾-îÄ(ò‡‰aºAé\^èÞý9h@¤1‚·þ*FΤ·%•l»ääA颫,Æm˜þfç¼ôpúé^ba„Zü͘‘´Ô8‰;1åŠ Ñ “«©r’at{ÊFRY-aç%'é@<¹ßÉÍù>C'Ë×3P ‚–øYãÖTó$eèüîìA^9Ûõd¯#ðMú×%%Gþù"½ô^Dò•‚rÓ°“XÖµÀ±v¡g£ #L\¡ôf¿ˆmc¥QQ÷ÁQyåÔWÍ#±±+IÜÄzöéë©‘ãµ&( ƒ•ÎÂ1®6k6YÅ«<}-§Ø¾e‘é{ÃFv“—ÈëÁ¯€¦ï†íò#8€¥ÛH©’ÃDU4‚¢­µO°çÔ2‡z³ê‹¿ÐlfÕeÙõIs{í0‚[F%w™TYTkËëÂÓ‡×[ nè.Í;cX<øuH%õpáëüe¦øÒÇVnÔÏš™6¦¯!]ŠŸ*Øÿ¼çøzld_4¿ç<íï59ùß 'âfhlçdnkóOø‚ãÆd~Oþ´ÒqÙŸ-õâ³D;¢ˆèhÊö€®”æ{ n´²I×Ü(çÂIDH'9?>fØ÷Ÿ÷ï.p{éT#(ô&ò“Ii'ÐTi”! $Cª¯Ó™”mv¶3sŽœpž©|QthîÄñˆPà´·£¢!~NU‘ºâlHö‹<o˜]k4rë`Ú‚À‚¼piOй™àO}ùîâ6ÓÞR6ÉE¤ª¥vyF üæôŽ¬Ú µ7gZÍ«Þæú‰«­*)¤AÖ(mžFªüÉí/›Òƒ!V_ÕÍ® MKìXËÐkÛÃDA4òÍÕ÷0É;zQ÷"@'Ê8¨iQÝôLô5)Y¤þ¿ûŠÝ ì­²¥¶‘$kõO¶ ²Á$$'¶õæÓ¡—#ãõ©M_à–XÌ”–lÆYÄôz*–ëÚ¿<ôÁµ”Ùk“aæûœŠë0ïàÞÑÿšßaÖE Çßù]þ{kùýædëàþ¯ì*ÊÈ­ó#xgp|ßo f“0?ÃÔ$/b mF7£GWýæËÁiÂ(:,ÚxÜ  T–TžýVP>]M|î#lVôó'ûÝÖôä匮n°z_8 î&æb­Ynt6‹Î G¶TËÄM€ÀväüdwÃN[I5n{œíYÿ¦«Á ¬æ©¥ŠÑf¹ªoŠÀ•Òg%²ðÞþ³I<®+ ’ƒ¢Ë&Iìd©q¨Àø¬sçóªìHœ÷ŽÊw Û_pÖß3½ò=at³HF%¬L%^*>ʈâ»|$Є$ì;Âpè0±(Æ¡ZÓ}gW%Êøþâì“¶ÕPŒ®à”_ã¾kd2ìÂ-Ë]‡8ªÏò5‰3'â—žê¯o€Y# £ÏìdÓ”÷±}dJ}]5wm–, Z×ÕæÌCâo®–è€Fr'mük·Åê@qíL²ºøöcíàiZ!°ê•i-Ÿñy¹ýþ»ók' ë7ø[‹_ n£[ù 2\ Ç;Pç™P6 UÔ׌&céî@‡và³Çrùâ ÀXk­¡î#ÀÐÈs-…Dß^M•ÁRJÑÚÁ.z-í:)ÍÏÜ(š$v7Ó,iÊ!Å÷‘Öà§U°Eœ¯Âž~µÇe+‚amËow}ŒéÁýŒ¦:øóñàÄ´R îÿ>³ü{pÄõmŒ¬ŒþÕDwÉ3"™ ! Ü ûPa ƒÃJå0IÌKP"ÜÓæ€ãÖˆöÿÊCè&^1ªø™6×Òñüñ hª ,$(–RôA´¡{4ìk—Êå³ Z9Ø[„á†^þáUÎçÜ \âp’Õ:*·ß×s¹Í\¯o\ì*°+¾«žWb Æ—ƒ‰‰ª ajùèR£jÒša×vê5[aÕäy46¡,-]Z¤â†'ÇV‰>ek)i¤¶~ÉÂyDí§ŽwˆÝ!EÐ(ßÉeVÒ•ÐLSF‡âR—’IóöüëUîîùηß#ôãwåfù›QR57vý×H‘È:[Y©9˜;ý× %%¬Û,ðÿöÒ¨‹V{9yÅéÄÆ´²KXµªÖÁP”¥TìÑ6QÍ–cà¯Z¨èIü{€nƒçk…â(­a®Ü\_ì_—|¾Þo€zèšp4NVVœf¹ ù#JØ3‡@ièy‘ŽêP7ŒRPÙŒ­þ‰Ügá 3îÓµëóŽ|ôEø¡ˆè£T$ï{2r 3lÕ€ž0SÂdCR`ëX ©›÷Aé4Hcðw„3¼ABiI:XÁ&?˜5_/€ìâàÅá^€¦~EÏ¡FÖ0Ð;Ÿ°î±&UZž#Çð2¾–³mlÿ&ÂöI^€Êÿo0ý«Ô„ôR^Zâ;êNëû âl$#(ÈÂb‚@” ‚ o/N¦o4:˜Ö¼¦a‰n©yµ ›²hŠ$ŽºÑÛ¾dnÉÞr©am}6_óú1ãm›l…0q5âíÊó´ÑãI>ãu{] ̲°z\ôô¼%í‘r•`ƒò$uã‡ïñLHu€GõV¸J?H‰—¼—‹ÂwM¬ã“ïþ\›‚¿?Âó”R|›€ç3> Æíµ8!w²ÃŒç£’}w}wëÝ÷ ßÓœ»‡"*Gü&…ÞôFîÅTñ­mÑGÿ–ºþ5eÞMÅ¢Ç!áCnl¸çñÚ¶ó]ó3k¬Æ½,óêáúLÇ'pûþVóÝ3áKï_æ3aÌ÷q^ ó#Âëët·åà-:åðz[ÚgE ú…'áë²hÁhžïÍUÆ»=í®¯ûËö» ߯î÷º±¯±__û_ÏÈ„3%x"Å‘T !bmÜã´U05LI#Êi:SOªãÐ4eßuX¥¥hÁMåÛtXµÆŽ!N&RºÊP=Å1±TxY5ÚGÄÑ–8”¢žJ!ñžæMúnÊÈLæTY%°x,$“ÓˋݕãÄP=•%È>´ežÊULÊ1ñT.U˜—h~ —M%¯Ià9×ó§iðŠèeQùQÙY±Â›ªÞñXø‹Ñ&žÅpÊ€Q¯(©ÏX4‹ÑÞ”ZÄhœ*Lp[´‰-A S…&)V Ê;ã©\©T(¢”xªXÜ–›4­,û±ZT‰e:®@j/{.‚™gBRÊ›Bf6È€¾t eƒ@Bx³ABÑ8VHÃz¨dX¤šP Îs«©ZÅ+h– ©ŠJ/Qn—JGJ †æ–Ñ¥ÕN4OÜ/à*jÜå‹iS¨ÿ^uu–Ñç“/)zõtSlSô J)¥w_*:`ºaRò’"¯¨Ê¬ ª™ÀK‘ºýy óZ,æ-%{kæXtþ@ù}î’$¦}¡°Á»"iŸÐ¥Ѩ®­øKꆕ҆aɵá˜Ö¹@ló—;ô¬fš©ûbUÇfqû””­%r® ûnqû‚ò¦ôÖkµ›5 ¼hZezt´^#NØP#1޹)–¶§žfn'5TJAÏ✎N„-gL™ÄÃüøRÓ6vE ›*;íöªü¦zƒ$r–*êIØ0î «¿Z,eO^}]}õö"·g €_ÆžB/ø"ð$h³T@Öœžž•Œ¬¹Æ÷…Ú: mmgoG¥zW™‡µ(ç$XXÖ‡‰Ù çåe›J«Ê2Q¹ê͆Âv Cã»rQ'X9§ª²jí%‚ëTQ²k3¦öºr 5‹eöºÇѽ%Ö&)6ºjör… eg¤Å½%©Uv«òï1ݓŇ㇧QÔ+þ,c¯Ãk§±`¡ o§j+Ëdãå2G`š{’¢¦XçaÌ2sG)- u·ü¦¦ ùAD¸–‚}À¸UúSÙ™Ë;Ízóm¨§DU;€5àç2Úyvg{zš$XV0Ã{ÏzO2ÚÖÖ}fJÇ@,!M`ë@Ú»nȯ‚GÌÆ¢»z^æ¹  ® YòëH?5ðÎN)\E ¤•/]‡Ä¤7SÛìXöq«™/pü>Ï+ØZiFqO‹PʧK–±tÔÂ%2+ÌíYÚØFˆ+¢ç™ÌÁÒ¿Ž -Ь)Ö¿¤œ‹²¶†Iš-ÒžO›oëQœù­®œ·õÍt=TzgŠ¥É `<>‡¯HUË~™/Ï%ŸÅl”±"FÏB§ À®e©gËÛ_æÑTfoD no"¥†áŒëƇÌäBS¸b˜ °”z)ÛٜՂ:d‘„…ülhVaMí™Ç¥•9Z)_Iˆa Õh•Æj6G}ÌsÑJThˆ`cÉÐý\€³0ˆpAõ‹›Ë\àé=¹y[„m‹,ªÐŒh¾âð æçÏ=ÁîuƒˆÐï™´Á) 4xÓîh ŸEÌ*ä¿ß¤SŠºk|yékÝé럅³­ícZÜâQD¸³ÇR´ ­C{Ê*@G¢›œƒeœcŠ|r/AO±øˆiaY–¼“× .Ñ‘Ñ/ 4NZ-ú;ö¾7Þ4²ÄJ?Ä=–ãE8®%ÉÉž%5hXä¬Á[瘖Ÿê»'f·jËKà6.Â/'{(ãÖ/ê?¤–áµ,"Ÿ ˜s›—•€ˆÛèú·¸iž†qZØû/f«ò1ǧÞËÎÉM‰m3ädúyh£ÔeQ¦[¦›qÊžüZõŠ‹VÂÓ9 ‹ Ù¦ù!k§³+7Ûàún[¾BóÐ¯$ž i–ûãT†FV)uQer$êŠö!ù•G뎿•”Ò¥{ëí KêD¶F“@êCàcNÙ·~1çŽìë¦?¢g@í»ÖÈZÌþMñkDÑgù£¦×¶~YËWñkFÑÖ+ÚöäÊw/h²ò§ÅmÚ {„jD¶R dÐʢϼ-ö%>@• Å/U|õS¡‡¸"^Õ˜Å"ó áyïAÛ…OÚ¼V_O‚Ñxyu:†wëUÚÅÓˆ¸L³²¯°ÛH.“N«²/d¡Ý‰öï’”2eƱ}vîc»Êï–‰‰)½I{†˜ã ÒÆ7Q‡Ï”€ í‡S=¡=¬‹kŒ´—ààvpz­È@Ï%€÷,¾¥ø#Êä÷#þ©|0\ìW¶Ñ—ókwB·˜Åqú˜Å¥F©ë4ÄM¹ƒe[îŸÉSþf4ºz˜iv°!+£õ0&˜?O‘'FýƒY–°“7F/ìï—ðÏ`šƒÖù)–SÈnrùâ4ŸKüwh ƒÚ3Ì#Éžah•™3c½CJŒaƒ&+PDbrAfbøZ éfÎݰ¹ÔØèh¸@9ÄmAFnGCjHTÞ»òG½«ô¹€Ç•5t/^mAVº ^ùQñ.ç-ÌSÿäUÌØ×– õ´pÞžJð£1,¼¶L±³I¬%?$+IÁRy–1l4ŽdÖæ0ì4—®…é±0—nŒ”6Š-ú†ôs/ÔŸ­¸×Æ&j Ž“ëÖva‚Ö°œqj¯õؼW¦HOS4NÁ “”É6Зú2Ô™µXS´LÁ“Y#ÒÁ°ØxR0Ó ¢@²92!r,Ù¾þ~2ΠÚ>Ü8êX4ØÌ»O¤K»«ûªk”éá:Õžt* ³ÞÖ3…¡Ã5th›Mc˜hŸ Õ¸ö‡L¤¤:U´¾„¼Y]†Ú5;mwP°~FÃÖ ”Ú÷a$àzg³“`c剹¦Fcåø3Ê¡EE3¬ Ã6C,jÃ"„*ÕÃÙŸIÃÕpcÔJ²Ó¥Èum*ƒÅ[êÆ˜°µ›Ã'½Ž'ûÂ8;&{îùˆê°çéö6• LX ýM ¢ sV˜°ƒE/I²ZWôšÇ-ÞöŒtæDüLËØÛœ†<4Q^ CCÒ˜ŠV˜ØÂ0Z°ééúÊØª†gÌžFú?¬‘ ’í“í]jV§àÊhíÈ 7´ —lbSM`—݇æ{a[1héhg˜‹Á>*’¤¹•sˆû´çD\æ$ñ·ÅíÞ·^úJ°=G=J7(Iþ}˜2`°Ñ€»± Ö‚ z#«›Þ"QXÈ$}\pŠ«¤D«Œ£Ž4W"f¯š>à¼-ÁjãD˜OåÝލ(ݦÏíBí¤ÆÂðT˜oåé¤Sï`ºÏÕSeÞI?ßzzîe˜ —®­-5Ùy©NõdÜG<2Ï-5(ÄÊ1ñUQSÞ걸¯0€&Á úðÖ•V¼¶ vÈ•–qîà%ø©àÂW4 n Óè²E¨7ÙÝ›ã€#0wU~K·\AY¼Læ^º#Éó9ÖU»1š'Að$’íV8¶k8@½à‘Î.F¼NÚ»Hõ“¡<(×µ!ö»y J.8ŸØiZž‘Ž"=ÌŽSÆF¹ÉjÄBeþ–˜›øÉ“(ãÍs‰1 \ 7Ñ·çQ@˜‚ÎI ƒb ’%qG0“”oüUåf³}3½³8ØOF@E2ë7ÛúF'Ïg&ê1U«ƒ±Ï¼dÉ]0²¢jËñ;Åt×CI¶L‡¸|µ&æEUV¥uÛË Î9V*ÅÜ+uø¢ódM/Ò ìÇaÈ \ç)>j&Z9GÒ©dËÖvÂošrxãÜÅŽ_%«_7M’:>§Gؾ9 0×~ KÙ²­ŸÃî½Öõ -q–Ó•¦ðf8©u%cn’Û¬pô’=‚MÛ !§~šýé¼ÑÜ»–`õÙ‰´Ùßs ƒEïâ!·{… 4tŸ.?}õW l¿#ÇðM¹Õzg0èTÎtJp›c¦pMÏ ìKà8hôïÜ®É{9\fúˆáíÙ­ÈúT¾”n¿åE¯Žç¾Ë™Ëx7 ÏoÉK÷K¿µà‚·$!‹ã” %MÓ%–À %"Ùzj`圈wښШ¸BF§v÷#d$à­à<‰A¿Ruñ¤¶š #ðårñ ;j¿V]G«s‡­Ú¹Eàê³ï–CÜRc g……ˆÂ‚A–­Vàæì&9Ê'•žFQjØG†½Ër›Ý/¯³X0ÏûèÅ¨×¥ÈØù„,irís‘ôžRÇpòâáIýÌ :–Å~–ö&Qù 'B±„²N_3XqRzÕ_Ȉ×ÿÁºO!5pïy/ÑÍ™pD7ׯgŒ(xãwù°¡®éo"£•…è.7U·Â Ö7¢n†MB $Ùç,Ä>Tz(¨I¼05Ç/6)êxº£SÍnYo?=˜%®Fkk”„[E Ñ/]Õ—}§FÈ<Ú ú¦£^ù6Ù#±§=ÚYèÛŽ‡Úˆ³U…ÿ>øú°Ò„E+ %¾f"Ú×é‡à+­°Ää)\#æ;8/ð“%¡UJ.ÍU,x5LQ*`=qL˜Ùy§Ik{­ cõæÝÖvég—`Q³Ì7 ›FüË|@çYì‘hUï¾Â»AhFr2<ˆ&ލÎÄ1kˆAö§F~¬_ò YÑJÌ8JœÀcǦã)ïÀçåOw=ŸI‚KÈ5ƒ]°#‹L >¼tJJ#>‚´Ò|9Ž€ú|¥ö LµYøç‡ÆxYüWóžÂ,ñÃã딼¯ìÞüÒøãðge 1ÇûF0_¹Uñ_ |}Os¾ &¬ùž,k9ÅMè 1”UÚ¡l%M¡Uók ³lók fókÁ,雿à³ÓzÈsø!¶Ùˆ©Xg¶ÍwSsw‰Zð§WvÓ Ûˆ™5= ¯\É©Ðî$ã fYþ<(Ý/¤oaR‘]…… ’ÅW¤+IðÆ„cøZBtíAL'ŠãÅ–æ Ú#©:3†n•źÝÃðHTrÒÓtrñy„•ßÕžÜÆ„~ñJ’óñcº›À»KzP4tV†v’*š\ºŽÝ{I0J‡[¥¥¦É9%´ô«¼Í8ûœŸæ‹äòí~)~4ÙóÄÑ$²Ü“çgøѲ„ÛÙ7fÏ_°d]æ¦9‘gIo€Þ{—çu<|{ïµG‘Ù…¤aÝI瞃âõ'ß–ÜZÍBö^ÿ¦0v7^E=…½%äþ@êNlà…PÇR€‹Jwÿ¬Õ>!®àÈbœÛ‰~v\íÉßnÆÍ#<Ô¨fèû­Í÷GCöªÌ!%G›È¾;U«•^ÖЂ¼# ‹R4Ã^¿ky vÞpõ9DÔ(6%Æ%‘íO¬%º¦/ÊÉÛûòÕ€G·ÔâYxVQR¶FQ¥Œ¬ØA³ÆÀ¸øâU7;v7Æ/cð˜¹ðY7(ñȶx´ØëBûTZàæïœ9gsÞ,yýYª3 ‡© dXæ3*zÙ«BŸP13CŽLÐLÚ- ¢ì´·î‘xœ„-¿ÐÆŸÚ¼ñb=÷Ó Í¬Ùenݪ–0é®õª7f;”mælií9âXŸ ¦·§¿lÄΚƒ—Bì“vG.Š×Ñ=Ї›Yæ Çì—ÊùÁÈõðˆ S€\˜§KÍð³äixD§»kˆÑϦÝ#[”¤{y¤ÑäÌ?¤:"w >ÍÒ ¼êÎ!¾²ŠúV@nƒÝ.)Ò¦ø5âñ—žÈßJ—çªÒ‰L ÊÂ;`¢¬´»ƒ¥Ç´9ÏË ž,èÈ2]“,DßÒL±¤¼Çê¯YU" 9ºó&)_–ÌC¥„ÙÙ褉7®ñ xÛLõHçxòM•r‹œ=ÎM†ÃxnѤ™¾N;¥Ï,ÞÉÞ¤½ANfx§Ê–L„Sqƒ›O·² ŸÉŽq5…R™ˆlq£ð°lýƒ†Ã- >+~cz3›ÃËí Xž÷0«’¹ÿFÂv%ƒóFKðæY»Ã÷),rÏfuÎ5{îZ·w¥~g[é/üE®-o™Ïh:OÂûCN\&þØ¡ê£Vû5x;à )º¾­v€tÐøÓƒ7‰š¿TyænÖ4ÀïÎÝ¿À›Ü7h7¶d×/É3>?>ïoN]ýÇÔ6å=sD§Æ¦±)äŒÿ½]1¶±›Æ¶Žœw±]´ô<¥½ŠÛÆ0º¤wßQH‚Žâ® š;Ÿ”GÔŧh#°Ñ(ërSl)Ô óÍÜ<ø›viŒ kŸÿA? gÙ,~ssF±Š‘Á0p#£¹ñ•D÷$^y×"ðG[#M %6ú«ç"›‚ý‚À{ /Lõ¬Ø ðs7–Q4Ì‘¾ýû­E· ùä ·1 ødvàbr÷â@=™'Ë#OBmÀ/"ìÌ8”¢ N„ÌFèèoÈyjÁçyöv-J?ó¿gÊDp„&÷ÖeÃ¥x€Åä6äÙ£|G·ôö‡6g?ôŽ™ÃKíîâ4Y“°Òù5v³ï†õ˜ §¦®3Iʈř ·û½¦] Z%oU¦í4=lÙ¡Ë ]ݲ <ú ©z0Û¦µþ*ls±Wª5]z‡SÚ‘ŒfÚÄtH©18Å@¬+Ä}Âí[ Q‚ó"ŽÂí‚3…¿6¿ÿK§ Wq J^è1º­‚þ àCêr±€hê⫒ìDçXÕ@1ËÇ^Y,³äÄË‚¦Ža|¢'ñ[LO«£+Ä–6¾ª™&—„à&lýžcî†Ðérz¡+¹ïõuý<Ú§™HNÐÖþ£ë$8ÕMjMÒô¨CfÚgŽM«Â„PKlgˆ 3 e²y8fçnÙr"³-±/$:¢wÙTÕþîUœ:"S^œYcQ?2.›P—û,{o™Ï:u$!ÖÜPõÂòºˆÌEªí`ª±œ‚¾‹•Üœ„…ÃX+ª‰{’T@^oêõYô6[‹}[“¼¨æ Ôœ‡ å2çX¢,j»1õ >8”¾°Q9›ˆŽ—o¨ ]š²‘ÅÚŒ5‹“мlkÆ»(  忺Ö_ƒšçæuf6~sºp¦èW'©¹È*9f©²;saù9pRsòÜtNÌ]1±®©Ü:—KÇa^k­üS¦€ši# ^$%®3•Y1Ÿv ¯=·ßz…þ¹AW‡Y‡ÐèCXs{ á­Cj½;uÔ/8Îàå1måõÞè>9ûî îAÝü¬wÖö„šÂŽg‡Áðí 4ÜÊ“oÝ!:»g'BÝáÞRóú1ÂʲwÏ6S:0¦d*ôÌ»a?‡°‰çK¼Èr@_J K^¬¶ÂšªœÀs >d2«wýT»¸Ê‚Ùí¡µª@ÍøC€´M)ŒÚ„Püª(z ÙQž¨öBdûI Ó!ìO¶ä²i¢Óµ\Bÿ0[ÄuÄâønÛ, áý½ÏæÓâ'àkº€¥u­nͨ_$ê+^Á„« ÜÂø1¶4‘*Ó‡[‡Öœ/: nÖÓÔ=èw"òíø¼DE¤[Ìnì*Oʈ+¡Ã€—ªýÐ\cOsÚ«P°/„kĵé˜þ ^Ù”d'T> ö;¥{>©˜Ç{>x¡ ·Å¾BÞžôÅ#µ6í³†þ ?¸Ìúã‘NÌú_@tbÏZ‹ÁD ÓÄÀ™äCÓÍ…ö`ÒÇNŠú+12å¶ð‚åÔoq§\]¬ÀaH_hU+åì·¶óF>&·WˆýïIX/ÖSWò~_`O>Xõ¤!´LVñ„…"Ê£vÑB`)荒ubÔ8Wµšš·ǧ¯Š¹¾Q¢Qç« ÚG™Óï•U@“g†5Ûßwäj®È*úiQsÞf}ÖXÑh±7ü<ò¸8V²Àz8`?];Bö‡;3ä93$œjcU …+ÓVŠ7 ÜŒöbôh>Wnt±rf%$ç´ŒgŠ“Æ UÆ…¢žmäsëKµa ÂÆ‹¡Uà6ËoYXÑ-Èë¸$¦6%,.!6ü0üÏÚ””é(¼ð`â#¦ó†p„N/‹®izîêÍϱ é…¤ž*9Ö§:b{SF =;v4/å ¦ƒXN7ÖRÈ´l=opî/yù[~PN-fÂŒ’µDðµfÑïRwÞ^GîÒ­‰¹.¿iYm^<›ANÉlÑqxlÌh[ûK¿vGƒÛU*FnnFµV9ñmóÅîék1Ìyâë]šؑ;xø¯Myæ†âe&¨Ä:=ÐÁ«¨óžQô§‡ëoŠÃ2¿U4¶„z܇ëgžÐìð¬ݺCËÓŠê´Î°ŸC¸Ï±V†>¢ó'Áe2“kú¡=Í8Ö·óyoe_Ý5Õ¥8-Ÿ !þPò°þlbWíNÓÇ"Âÿh  ¹ó6`SnDɰuâret‚Ê÷Iñ*ºæÝ†úÍ,uþú§ß`a/t~náy¯b sÚöì |ÖØK%«¸)F§ME¡`T™·~‘+oX©;]y‘¤°7¡Lun¬Þ¢P·ÔäµICª¦âáÞ´ÉKÁtáíçUô¹é‡ ª‘T“c7T\Ö²rª”2øŒòÑê¾’JfJ]µÊz«DÖ ö"\ô 3¢¯ŽödJ¹Ô –3¦¯šötK…í5ž3è´mOyõþÊRÒ{ñ+œ™mOè#ø)Õ§¸6¬†V…Ö)§ü¾+ζ‚E‰ê®'F )°BÿHØÛmYTK߸&w‚*‡wƒ9¦­Øs–LάŒïk§™ö—¼‰ àèõ]{4ºùÿ¡ìƒD‹Ú+á¶mÛvß¶mÛ¶mÛ¶Ý}Û¶mÛ¶qs“É—Ìûf’Ì÷ëìSµ«NÕ®õ𬵾QmÆ$ú£Ù±¸:¹ªŽëg™onø £žˆôûa†JüþS©ð[$9 Ä%âÀLáÌ7¿€^/1ˆ4‚Øú˜ÿ„„¶$.³ÎXTM 5Érõ‚ ê­Å—yœÜP†ß)SN]³9axBá´Hn)7n§¹¤:ló‹ïñóšk@ÍI$ >Þè´´^ѹkQp‹Èp}‡ tT)JÒöÞbps Âvæ|Ó$Y‘?âù<À³®J çFO8Ší ƒO[„KVWžÓ„íb}¡³i1²¥1Þœ /åZ ­ æÍY¥å›åÒÛ²ä•\å‚ÛË•YK:Î¥€[7>M:×ô•Ϋ.;yÄ;—„êv¼{êd,ùxŠáæŸpUÁÏ)Ÿ!†^å8 X®žJôý£Jç´¿™ôÀVn µ¿¡üP›¯Y²zGôVÓÌ¿nŠÉªUüiôà2NÈËøÉ¯: ÊLñ·Cu ôÚÙÀèÕ «ŸUV\=¶OåïÛ÷`%lÄÁ"!•Š3ëj7xi~‘W–™'sÅðJ’^XdäJpVAÚ»í- $“'ÐÉéܱ‘1UØYµ¦H!¿IæßJNìàäø„Õ:æÃ?×Ð*TmÕá’Jý^ŒMÜt‰kŠ›C1êW¯àéÈt»Šx6<ÑÝ¢T¢S¿ßMFž24;[ Ãz%‘ëŠw”÷‰hXžüu?kQü*£\Ûçû•hZ¡fÁ¶QV¹;oqÁÚö¸º?±›ÿ|!1bÕ$ñE)‘`hþ¸üQÌ;”‘h:ùÇ]Ãÿ‰Vöeß[Â³Ù’Š°,)oŸ“¦k¬`@9ÿ{AëT;¶'»­˜u²c<çu±û)QZÔáM·v¦Øë“}íðõ äÙ÷!tE°Å¡{†\” v½¢koEÕi4[¸Î•ôpq—õ@g®‚¾á竱H™¦çûÔ‘– ½Çÿkàt"g^¨6ƒëCJâJÛ"ׯ2ÓÌkùÅ Õ£W²8«Eë±ä¸™”G1Üa)ln5ŽBÌG:ä‚Ïž6O‘TvβœŠÐËED8 ÜJÊ„k7?d!¦ïÇÓ'm¿ &ôWÝgæºA¿êéºPÞïi¸DWÅ~ßø/0ÞsC?v“óºŠ0ßÕSÚ¡±|ëA¡÷†lec9/hJY"Õ­°ÖòÝ1v½=‚„sëÍ<ïÝ19àLi|Êކτ‚ü™hË%þíĶ…‚‚̱˜ÚŸ”X8=¹€™Ôˆu¦‡d#iqÞ"}Ǩâ(Ái6 š^ 76­ë~¿"úƒ¤…|Ï$ùn‰ò’¥í !ŸFú%‹ÑϬЋ¾Ç|Þ«òë$®ûšœoŒîæ¤Ri>i»å¼ü]âÓé?A_]†Ç_õÒz¼x˜¯kÐß$Iß4¹³Î.IÔÓü2)Z؇£IªNæÑT)˜¨Ê¶4ù#DœËåÒ¦&ï,p'9}f0¨Ž­ªOJ¿{Ã`¤1º´ó„¸Ç,¼Ña˜ˆÓx‘Lþà<>á2zø­Ëùù ŒûL9ïtÃÊö>|Éç(Ñ”Júà\qÑ ošÿ(Dv¡S~puKýø_¯Wy_pü€ÿ# ‹Àº­ òë•þ IÉÙÀÙäÿä¯Å¨Z)a› ø²¡#%Ò† ”7Qn+.!X u/A£`‰ÔA¦­t¬['›(½63_€s}CŒæí…©’NE?7òMÜg»­"…çŒsÜwÍ:Í<æºëùý|ƒûC¦oCQz£ :¥Õ# Ž:lÉDÙ¥®U;aÅ­­‰óðäZ?вmZó8åM—1r‡6‚|(™§Èp€Å8„Z¨‡Z•›Ž»WKÅC! ÀΦÌu6ùVœD‹Ú²ioç&#TTÂ]GÓXÄlgj´WVž—Þpr̲Nm]·ך]¨Ž«èŒl'Î%éQ£¡§ªá[£@WA‹@¢û@)5[¶/wÔT¥”„–f:sª,nw™mv£ÑŒªÐÆ0$O­9˜ø¥ô(Œ=J…–Ð{ušlëªL’Õ8Ë8d,"}0ç¸ Ž¬DÈ3ÔVµôß÷„k±ã@šÕ“Aª©³+´, b†Þ2f¯ "‰Ð$)L[ÿBIVw/>‡×)2à`œãÖdå)“Í­7Ç›´>…&š W}©DÜôè)£‚$;¡¼2N/NèÈ`óú-Ã!óA`0ÚÜ~d´‰&ûkHìãLдFRÁÍÙm¦JÕ%«‡ ²prw–„Ô-¢ÄÑçžræI.+·æ< zk³ôP&4‘1ÝDY!)þ›~ÙÄØ!Jó>¾W?ÓS†Õì:³UÊfQ19êû™bë ²TSuPe¢Ãð"¶¨ÍeY‘ ÃVWKÍæ°2š“¸MVÇMµñqê÷¸;´]c†)ó iêtWpÕ(êp“‰‡ÑN9EvF›ÓðþµDˆjrÜ#NL’—Òš‰÷ Lö[xùiìK{0ôŠê†û scŽ[»âÎ<«["W{‹Hݨ ¢öwÒÏúæ!ô¢øÓ4T}: T}î@ÿ@Råý½LÒ­»îÀd||Á:„ÇwÚ¨"r¢¯$3¤‘qçЗq#ü>²^ú§¹+~“Ü/7ÿ3ÓJ+üúÓõ'¼ƒõ{gdÕ–ˆ!æþñÁð„î ˆRÄQÅôA‘#ÊCÐ Dvsµ{‡{(ÛÈhÑ„"Nƃ A–ܾ‚8ØÊô×ß&~BbÅ <$ëÀcYMH»£í5 j¨ÅŽå IJ‡PïÎàbp·iý@2ùDò¡sŒé–÷sÃäVàºøãFo—©?ÃÎt^ìJÁ^ß²Ñ<3ŸÊv_é£ùláâÎD¼cx½…~„ÞSu‡Ýl®ˆÿ Ô÷’¯‘víz·<í•ÃïÔ{ ú.¬TÞÐÆ Bv„“¬Ã14µÇIõ~lï|ƒ~\} úü££³y¼tºùûð_œ•Mlì­ÿú:!k ÛÿOô$Ç#$€’ÖwñjhbtÕäpMI¯-ˆ¶Q“E®Ñp¥Û6œí7=€¿Çtã€8‹¡ÇjgÊô¸3zºÉåÏ• ‰‰ƒÌI5{M½¿Ï¹èK“4+Ùx,?æ«x ”fN»EÕêHXÄñ«ÿšô„½Šf‘¢5¦¡ŽÝŠ±Ã”¨PÁ?Ò)¸'¼§œO>70e·’9:ÂdÀpªb«²·”™î¢%‚H÷£ý¼)zöå,›—ZM̺¦829î¬&Óf¾£÷¥Ê2TõÓcç>s Ðâ˜|}F0'ȺDvU€û*»•Þ°6*`œ8Ödÿú&Ý6Œ– Àø;°¿òOÀÐÉÙÑÀÈYEâhª5Ê:rÈ <­ustÉþo"Ô‘´zQ‘‘(ýsâŠÀ Ñô'®©¤“-ë;¬_ðßzÏ"Að#ìÈ~É7-ÉÉ+þô¯3Ò³ÙÌn¦½¾~àô1éæ‘EAÜÚ¢Ö!n)k”AœÒÓVÐJ‹ûçêª÷{BÁ±ð˜žj7Ó²a$[æ L«N¢ ±ØuªöóÑiè&¤áDFŸT‘¹½´›Iõ¢*蘩Oe-ÝtŽpÙjÆ’^€Z¶yˆ–*£ã±ï¼HݤR&šÎy´g“ò/7k÷Û'_Í̲ÆX/£ª ?Š}òØð±·)ÙuÊ8a†{çF‚ Š\HÇx ø0§å›ê“ æ‡ñÁa‘5„u¢©¹·h%Ðת¹…z|ééæ^” ìÔ|äZ[s”Eü¦¤GÁUˆ>KÕŒŒs¯ÞˆUá^®m uÁ­+0Búåªy H—´MÕCkìÚâÌ-jpä óøS‡„ R+)–*¡“÷­e¶!qO¼‡Z$®c%„„îG(È<Ž·!›Q*c$Õ²q½Éøàª3ãÚÆ,¨%Œ=Å;•WË•ã)deÏiòa7ÄùæêsÊ 4¤úáÔ ®ÿ}ƒ€˜¨/**ÕS'®L˜gТæ±MÈ* ‡KcÞC•® Íit„éÌÜñç¤'ЇŒ8XóO>†‘ó… Àoýl[M6é–D> üíŠö÷zˆš ¥ ¹¡1e4¹üPû;Dâ£g™Š£Wê_¿Ó!Âù›aXW)3I )ÛHl %/©J‰ÛDÇäõ· ¤ >AlДs[¡6 £Ý’—šçaBï€÷åNwØ1dž³æZ´›hÑmÆçsA3ZþÉ/x­åT3ÿM€2!ÿ JÿÀÜÙÙÑÂÐÅÙDÂö/Þ]ŒþCU£ª¥†­‚ò-K#-¶áXÕmQ"3 a3¶QˆÒ_Hh.@õÌ &½2U\â'®çm¾š¸—Øü´ü°™„ ¸ú@xÚpÊåå÷ÇUöûó²u0z`ùžŒ¬s.ÞøM>”7Ž¡æxê,}x”ÏHv‹w¹ÀH1TüÄŹ€" TÇlð+÷ì ñž•æ|é5Ä:••{ù®DpÁÙzQíŒÒ:cvºË(•ý!*À,ý†šdŠàå _6ß¾DÞ±õÑ·9[]*ÕÔwÇñ9„ÔŠœ å0@§%H"äüÉA1‘m‚i’…çú·”´ë:•j«­Ý¸¶ áEª´Ùú“õ:{p„þb)rÑh³¢|=îä¤Ü<ªW3–º“ ß]eIŸëdqŽ÷þ: kñEµÛ@’c5N¼¤¯ªëâ³ÌXÕ¤#–VHÏHBü;`ø¾§-'T¤$¸& 3iÕBÝÆ.R¼j»*ç;®¦cUðNx0oýg¤ÖKMÙAžXÝË‘•z”ÕŒTHŠ3ôdN¤Ù;/cJÛÎä:Óàwsçæç¬Š\6Ñ3 Ê5…ð”sÙ´kôàÆÜnâG‘Ö‹”j -EFªâ­¾MwÓ=$:ì6¢A•®’}j`½ClØ]¬7¸]+kTRX+0šjæJËoú¸ÊËËT3}à,N‡iÿÚùá}ð_†ÞZìDµ`#ü1Ä?5l"„1Òþónå..“TŒ’J%{þñ×'§hš]FÚ“«²TŒ!تöM‰(¶¥ÌeUmUó<¼Í¦ªé® AY*%ö·,´ÛŽiß_l g0[žP¨ çgž±mÀä\ ¸ºx2Ï•0ìüÞ—Ñp%99×âU=d (ÇbŸ“GL1N×åOÀ ŸJˆ»ÏIL7ª?„µªoÞ_žnŽ~‹fÓ£e¥ÃÆ=9üjLá ËÑé¿Ç½Á¢ühð’_ߢ3\/Ðjìï*åˆwôNcÑ‚éH¡wl“µhñÅcHYSÙ—¤ýûŒUòLÒ44ÔpyÌ6‡ud%9uê-,JÿØÇjŠBH»‚T:•S§º)²2Áÿ˜À›¹ª+:……ruªÜ§Q;}±ÿŽcÛSÔ¯'§€YÀÎ€Ž–Ý^¤ÙõÕ^Pøm›ðŽëÛ;jgôôÂC´;Ê}30ê~öedÏb!J*û„iÙ&=ûÛ)oÁäñ‰#Ìà÷™³$ Íf‰¶f‡Èe+v{ûà.íòãc"D„¤aveAí/šIü„©ž ±ŸHwÊþB=àÚLÈKHx‚æ0m¹Ä5e©E,Ê'viÕHYSwMò¯{Ñw;6ó­šrÙzÁ¼¬TNÁwéòír#¬ Ôkè‹ý’‚,É0Îüµª`Lÿ­²³±ù›žüg¤|)‹,€ò]JkÝI·ª¨ÒNQ×Ýw€ ªP¯,¬?‡oª¦Ý°mãÚª¹3ŽŸI!ó/2mwÓ´¨ôtÓ2'әלËl|¾^_p†PTª%qAµYÆNÙ`»(fçdë4zµÉ¬-=fv\Îs:Ôóê¬Ú£3ÄžzàÐñ¤jç¿>ã[¤VûĶí¬@¯YpÓi¼ Õ­ÉW™þ:Ón:s2žú€-D¹zš´Ãƒ»/þ@öž=ŸhŒ^e)$s˜z ‡¿_ça¬Z9›'ö þKsøT€Ÿsßó{Gšù÷e?~ŒæúïÅpÏÃ`BÛV0Ѳ«|ጙ0Ùç+)Gïåª4½&‘o/9S7E+óQX¬ i«¶8p(S–©ƒ‚@ظ;õþ®Pr KŒ>¥Ð^ù:7g(©P£®‘‰ºÖ±íy§’@BÚ‚3š– àbMx–Û¹wÚFÁsƒ9W÷µ1ÞÁ'Írx˜Pã3"£Yù¶}záÙD`#Ï–Šñ"Ï¡Ý××Ö‘x˜îå¹Öm\0»µ°÷+¤ã±õPJ¡£±³’ÔÄ8Ëw¿¦ý§|ÈÔbÀû€Ûy/–e¤¦2Ó‚æ¤b‘¡3ðòvà:íofC|‰È‚¨×! \¢!E B°=Cl‹'Grõsâ[SêHc²Ð{³wÇ<ê«"üšÑs±ù@F"ì´'!ý Þ ]m¢4¢žh^AÝÁ³2;µ"]d: J¹Òäc;q[i‚çù”žS‚R÷Ö- ñAu¬ #€¤N é‡VDŽAVí¸hTã®!,¿Ý=ÛòУå‹VDzʘ/ ´Q+iKi$wŠÿëø»0ø³1°50û÷TTÚ[ù8å'oJÚ”I["fŒ˜$ D1B8ñN˜#Q‚‰!ÓŒ !¹Rei#ìÅ€¶_lYÕH ??Ñ_aÉÒjõºãÚvu´c»y³ÙvÓfûƶss4õ{¶›Y(=¸m;ïaûÖ÷Õû”+î‡c—#iõçm‹úH…ÞvÜ£ õ§rP®û Ó÷w£ßâ:½ó‹;ïÓ€‘ÂW'\ïÂ>ßÖ›ýˆæäÏñHm7ExÇ6ýÀ›}ÚÏhÌîÅ£›.ÊþëßDjæ[-Œï°ŒÙžl 6q0çà.RI[w•]#Š\îaè2…ѰͤÝé.@läžòåŒA—=6’IaåœA"l/C0¡8jL¹5ût˜(ã$áüãÞ»uêîÉ›AÔ›i‘¶±«<ÑâÃ1@ËÔË8Vìij^û¤"ž”sjÕ¦„“Z)Ô·5Ù«x€8壥/ «]>,ÄóˆhCˆna}˜“fe)ŽfþTQS§²«AšîyÌ1®Z~c2ù]WÕøY³p#ßË8FlÅ1 +®ú‘ˆð’GñRDšN-¯bqðò¹¤Ÿ›§a< n½úVkk¡œ+Ëy­Ò«µÝ¤ófû"•zk¡ZŠëéPV§kXí¼¥ŠÇ1FËÕÃ!ddÌÖbÞ ®ÆöS~<ˆS»B(Klcù ײÝ$®1¶ºtåò ZÙ•Th_’®)Œè:ÅÅìp$7ÕÜŒn´ñòW­´³Õ&m¿=CF9Χº†\Û`LÓjˆë(ð=p`†ÙíþéD) $;†¶²uÄð8E\»þ-%‘-U8gPåpçÄ)¾@O(áÒÑÞEdp"dÿÌ3vR@j÷G ùJ Tq*š9´ˆ`Dl~ÏÍ^ÿ/”½A+­_üV¬d‡,X¯Çº’GPý ‰|q#Þ­ÙËó+ù½t(lÎ.7p#Y@ƒfÈ&†ªÀ^}ÆrË¡Éé´’dt[¤[ÿ^2(¶8pYÒÒUô5fgpJ_ºÝ£@¹ä\99Ö –,è^–,{ödt"áhê½KËÆÃ@FÜb?°’[ÑT.#8z¤*†Î®ºB–iqàqvFáz6"^ÕpÊ~¢¼€qq µ˜.9ÿŠi¡ç·ùKìfË“öR r{+ãªäJ0˪,/W’*:0Ïó)›=8ïyjwhpÉbŸ™}!bÖ /-î¨É÷Jº}kýÙ$akrÀìþã”MX¾@–¶•¸6˜î;hãLÎ ¬7¬žÚu.û]ÚÛïðûxB Üã¼1—=³¸³j-$[ý1Çn-8¬Æöþ¾ë·`-[–#²÷6-[¶#4’tªÎ –zŒ§R;¥´V^!Û”Mç¶íx9y„v`øöã¤Po(;Œ7Àï™>½ó+»{Ÿ~íeöLˆŠžžLsµâåÛM”˜á±­VÊ|‹1±H!^½q³#Yq´:ÁÁ™q–€-‘V×?йŒ³ï®ÁjïÖŠzS(;}¯Êåëƒyú ¿m&Í`ß³g¹O¯õÇN¡×!®ÅÕ7·‘¢5VÛ%'iô ©Ñ¢F’ õ¨¤«¼£Å{ãö£„}¶n6ñÅß43>‰ûUõ´Xl —¾l…zÂGaÛÅt¾"7n¥ Þ’ÜÃ#Ì’Ó¨‰¹l8'“ Äà1ä½ŸÇ „P,…oXïˆt™ŽxsÉ_'C½5ðôa–ÖJÒå0©xñH2 =Öhõª ,°Xùªi±vŽK‹€jj:ÄÁI‹zÒ#ÀMîÊ ?t@ç½ÜƒØ.ÅÉŒTRR f¡¨T &®%šJ’™‹Õð³haÙN¸iSC½ezf‚Gii+ÇØ!ñ“2f{°}\KNµ#_ ®¡5åY†_‘»B¹)å0•cM¤0…”tCGËØ„™÷Ö1Å[œÕ7u½5=tTØ™ßÝóó|aâæ¦÷Q“ËaÆ’i™bvð<<ÏÙAÎÿ¾™±>᩸ãåŠY¶ÄwÑTÕc$ÌU> ÎìOÙt²Åd8òð˜ŠG?J&¤Ÿêødêg§&à†}/íhÙ/B™1Ø­ä•. á‘B¯Š·ä,ZÍHª!™X¹.f+£‰oâªju´d3´¥áè´ÏÌ«I€'¾‡kÔ6¹=d¢v†²[…ŠÔ"—FREF^Ìc¢ö#˜7`e:\8]—Þ ØÞº¡©X&)ë]MX1Jœî·…ÎÚH]2½!3³Ð úhÐð»ÂFšbfe ”]ó÷éq ¾äÙ’emi ̤pó,ìa?5…_ËÎy5éeª[0w”Ph¼Wâ¼€Õ/V¾8„̳‡&M§ÄNÍšÄ ܤyB‰vÛ7I;Qü?Éܬmó‹¥ýªÙ+Éh'œÊ{ôàñÀ¨ 6ÓÏ=CѪäfèFG‰lЏu*–õO—_™ \‚ÃÚYrßñ¤dÅò†*Dˆ–qæÉKCE9ž ë1«p´íZZU\‚JV@ûCÈð…yMF”â¦í¼nÁ8i¥EþiÆ1=óÎЕØ.Á¡Ý(°®vÖD“Zó Ú‹"m®t:‘]³e©*¦s[Z¢ƒ‹œ¢²q-©t:Î'T„BKAÅVY§©1asðš/fù DÀ޹dj1I"® »1Ÿd×ØÜŠ5™»5#ðݘ,u_h¶¤\MäSYwH[Lª¡,NìñHöcƒ)Ò‰0U€°}$± ³¸•ô/©*1ð<Ö}mEnT¾èd£Z Yò®dʽŸ$}•¼c›Å¶dž$m—¶ÏئÎJ ´ø‰ýÚ™l5Ûßóã²à+nºúå(ù5ºOñüÚïCçs‚Öé {â{„Öºä€cäÌÐö+5ê0–¸÷Iã>ßßîð|ÛWºÇ5Cè¡ä/\K¸KŠ~Ïì8Øô80ßÝhó(kž–}_Å?4w=0éÌ)ÚS¹ƒ›ªZA£ãZçjŠ`Eà3F&>éöÁr–,÷&(ÏúÙ3º‚ >ô¥0ùåÁÚ™KqãÏ%ß¾Ò÷NRš'Šîlƒ1¸w{–G‡X(ù!xæÃ8Mû†MEP„Ú¡<¥]%Éúh&îz„àË®ò)o•”ïÃMÏ*Mµß?)ÞòãÄÉÜ’ãÈÉÜã”¾<Ç¿ÄÇíòØ¿ñIüXHߣZް)â‹àO+îür‘$i‚ûïM+¡á{Súºa‘Ï^*@>=@Þq¼ {ô¤ÌõdÝa¨”r ¦B“™°ç¬¨™„2F'–îuΡiLJñÊ’‘ròRͳ+®%ée<{=6H¬ä.¢þDã| ŸtÁµ“Y—UMø¤+0´4½kD¯ïo #\´½ƒx“3<š_`D½ $uØ4­C÷4¥K;Q¯kÓÙà³¼-¦?³Ð ^áIz8a„:AŸ>[NÝ YàOˆ_QqAúÁIg¥±Ÿ©+ܪ_ѸÑиÑqLà±Ø{íEqö£?ìó¹á£©¶;׬•ÌO·éë:ki}¥2Ó’»ü oíF´DyÉ›„IQ¬ mïFýYì”3¬z+U1cÖ-í_»$w°€³øVßÑf+?…º·Ã¦_¬P*SîÀ§Ö“6`ØÑO©BW ó¯Dít—­·UÙ¸D,„…Qc¸-P#_¨=v’º#Y\VR2zºc67FÚŽ8\‹á ݆ Ý ròŸñÌåÒÝs‡²c0öM»ãê¢AßS¡m5¦ÔMš¼Ç]^5Áî±ê𖋘UÊ –BÛ4wM˜©3½x˜rxA‰EB“23álWgÌ-•†«Nšp7¤ÐÊ‹k/Rßù×,¥“aQô8Á"n´ÌãìÅW鵿¿™‰"ƒª#‘Yéù3©¾Ô¥¸ƒê[#‹]vÈá'ú‡Wåpä@ë†åÐæäÙþ¶æ‡uw0ä 1æ}V=1ý'P³kVÿ›²ñsVPgjŽÏ4ôÊñ3Ô—ùŠmƒ #j™e’Šüc1¥æÈ•+ŸœÚÈŠcééKhMà30ð;ñs±w"üz¼b-7útj íKg’÷HfCÁ­Õ4x7;úNË,DObßÎ:QÕØcòM3+q\6޶;ý—?3؇ƒ‡£Æï&ì¤ÙcR¨ÏLó7ØÚ™Ý¤O¼ª;ð“:¾¨ì"󥨨ðTMd¹L^;™óEIeMtKêzô®Z†ûçÂÞÅuN:VfÒêËœŠúR”§_ñ$5Ñ‘‰Vøñy½b¶æÒs?†œ‚™kâwÜ.æYI¼®B¿#v¦5YÙzÒcˆŠe9T´F—A’i3’³d÷bd ‰ŠÁ?¨/xŸ*Þ“SW»#V/ën›;zDÏ+çZªozBë„£ç篆-|e‹º>æWBJ³çy0tòû;‹vr¬Iï(G ŽÝL)žyaL°Q˜‹A}NŠ=Z·{ôÒhYs³û5Ê«2ŽOä>Z›6—Êfê%$ƒTZ6U(¶‡Â„é=Toôž½Gi9Ó2LÈsÖLàèÞ4)ŠÕ© 0*e 5-ÄÌb~ó­!– ‹³m ¾Ú;ÂÓÏßåü¿•¢A1—÷ÚPvÞ¬˜ÏXU˜ý2ð3ä(·t\_òóï&˜œ\_Îݽ!\é'â}"1OÌüŒÀÂßà ²U³§f†CÔ(O‰ jñÎÃK0Ŧ¤qy‰Ä~. p W3$g¶YC:?Ê_ý°_MF›õrZ¹RÔß6äuå—ÃV†ÛEÚ9à O2ôñ7*³=ïk(ÝPŽ_ º'jô"·OÒ O­Ò9ücO˜~X+õj´œg£ŽEÚe¡['Ž=÷MÅêë×5®,¹-»×déî-¤;Y©‰Æ  ?˜¢“RÒ©ªêÄ+1­ê-å‰/ë4VŒ¸n[t½Jà+Fsºàá'Ñž$“,ZÙ¼˜¯ÈjŽIüqº¤áC;1 3‡·¼E§ —ºÛ–J¹¦„çkŒë¿ÙŠˆÕ®3æØÂ»pvûw³~û°ƒ.ÂK\Ÿ0Û‡âg>Ũy ½Sš]B‡«pàFéÀ±º¾W„1vÚ£_mj"#¿Ï­¦ihŸó|Ýh6“dFå|‰¿]šklh›æ‘L³¬ÂeZ‘“§¤ª¤jÃöj™4D©},—§¡i ,²\Rá$§÷çIù/?è~N3Iþ›inÒòÝWI¥HPâ‹Söò”|zML u*¿¿Ú¸\âR«“¢q|);†õŠOVù„üù3·=•â–Ò¼d¸j ]–Ôô§3='!@#ÉÕw?ÅžÃ"SLÝ©s"n¯Ãô§ÂW;¯¥sV#y³{Må(ÓW(áRàè¥Òá«éRgªßu±ÍyŒüž‘ÌÜAî¶ûݯÛâ‰w«˜@%øawtÜw”½ ·.ÄŠdhS>§.]0ãWà1’HÍÂц®•N›êËa¾ó¡(‡?F³ÛøóЕÀ5;B+ø]ðÖÐÇ͉²{ªL1çøøïÒ)×U¶x>ÃûCcê•TÇ…?”äÝv\ãBb=ƒ~™§»&Å;ƒ†whÙ;qüºû´äög˜S Ö´˜_ £¯2¬~äÿØ› u!;ZHþŸþ’þ½)[ gÆ»JiÒv‘…¹Ì" …°k¢H?¾‰ ø’@]V¸á¬0îkwBù&ÚDNþZ°~øb(§žR¡ JÝÝûtËkÆçíctÖn{t‘ìÂ}«O2Ü6\7\%ô=M’úO$á|,ÆEG* týÂÃö‘5Í#0£,¤Å(âyÂXJ§šþ¶¯<(0†&q ^I! ᦃáŒ;ãüg·¸1•M?ä˜2•ž‡ºÉa‰®£q:²Fª¯¡ûb¯ôm̘9u™+F^dœáÅvIù¼¢–ï¯HßM¡Uñø5J¡ÛZG–é£!Cõ?à¡'3, U=õh†#&JÀ‚|rÒ.nZ‹8-^>_•Ð\ój ^ÍÕöÞ±¼÷ã2\¼¬\Ðо 0¡×AÉ5™â   E¶Û’÷lÚr Ê >‚ôÕ¹ÐF,͹‰9íD¢s§‚°@JØÅ¶‚l,[¢ŠÈi,[Âa„ªtjØ´¹á9(ïÐodÌžfº*'WŽ~ /˜ ÆèB0sèß“ÝÉFÇŽÙ¥% º[õ[.‡3drI¹Ï££‰¡ ¦ÁÉ‘™ÇíIõà, @Ó¥A%d:¸2¦æÐyt†Ö˜æI{düà ´=‹‘Ö©:"Doš°'…YzÀ[ˆgµH¡aƒ š’ÊpI÷Ra´…Å úˆ?.DlÅ>våñùøíMà â ÂÃ{â*nÒ¨ØdôQžð ü²©dÆàlÄT pƒW%rÄ&Ð=1Eê:ËwèR«Sû‡øü[Âë©q¾b‚Œu/©±‚×Ãî &¸‚[£.笚"DìñY½,/:Ëi¯ýBMÁʈ>ö±…ŸÂ!ľMw&¼þü9¼P}âYJ“‰PžCŸ‹&©Ï¤7 ßÒˆÞgóxd¨÷5æð¸fÒ‹× Á“Ä™Ÿâ•HÔjÛ†9ÖAÝ€%ÖTn;h7' ÄÚ%î"f¥V "©ûEV²ñ”6ðÏž§:bUh€LŠÿSúwÊ¢¤7Ž æO¯Læº5™EC÷‚ωqHpi Éf0»…ôbS‰~ÆÍ ™[§[ ¸{>&**jp%A¾ÿZP)m³6ÔΫÏî+lä÷îÔUÂtñømZ—ÇãŽÛçîÏŸö]Þ×â8 _jæ€ÂöuHµ#àÇw„Þêý¸€ÒN©|DaqTmÌþ’fÇt[´aqïr¯¼ øðùhwF¸Ý¼PY÷ùz+Jrï)¥ü ôÅI¸ûrWŸÀM4G= L‚ÂKXT‚âÅõ]\-ò½‚ßcä¦sËLòõ­ôQíWäŽ1zÃÉMtôÆÓ»;ô8?Õ{:”Rycê! «¥zÓÐez#ë)ÙÛ„ê)Úë¬àë!ÏÛ}=xм'åS½Cåƒ%ˆÎ“ á{=ôÇï_ñ«ØSƒò¥•O‡…šŠºZy=+¨6!ÔÆ`I *€ÈíP!X«¯i­5z<ù-ÃÃŵ9ð•õÑâ4?/~–¼e]RÁ?~aO•QÿTÌšOÞ¶ËÕáõ§õ6Ú¹ùµY¢„4ÁÜòWò8™% 5rÃS¿|//£[Éó“ïFúÍ™õ„Ý…U}@#ùÒ†¾°’Ŷ¤Drç@ô9ZDødx|yhØ{‡ËXSô„ ¨¥SÔþÒ]]BP äf«…½®ÖÐДú‚-ÍiðŸï¶­õ&”]’š8ù† éÌT ”U Æ€Èæ\L[uy<Ùa˜ ²˜Ü«;:âíÚ[IŒÄ1ee9o7ôÉÂ$ÞÔX>tÑ©à¸íˆ`u{i·ù_æ¼A¦¶¡Ô¶}T3ŽpÆ¥‚:Yœ/"1ˆ“Ò¤íem‘@û`b$ê´> +÷”uŽ]›²f r#8M&ÎÊù¦Õ”CµS]·Ñ»o´Ä(R!Nó,Bú(àzúAaFq8¿G XÓØ¥Fj™Tå3õÏÖØ¤Ç(gÇb¾€¢ „s­ôÆÄƒG®[O$Z8¨ÉÖÍH@в5Ü:²¼u^p“Ö»ºú©ABJd:]±2†°.;ü(r6¨•b¼Ž%|ÖdÛ¿ˆÞ]œ‚_oa®Ðnlšmt­Î‡¦N’Ij%‰ÊÆ0TËœPñÈQÃJo.eöé'|Q«ÎM=ÅUAtÕWã3‡›}êz š,\Nê:xd¨+uýÎÌ(|P–©?pûÙ0¨A ˜®°æ´tÞ×Íé<¢Eꈤî7ÐR±Ntµ&Ä´”*{þj°®hƒáRÖŽÅr ùŠñ4 /‘Fu¯‰ÌYf÷ ÿM­Æ.Ú«ü‰ç‡`ží ©p/ö)1 Û¦ÀÝPÀZÿ´)øŒfaêF–Ë^t0ûÕwc›™‹³´Ñh:À9*mÙT)â8ì±R£gbŽ9¢Ôý•9‘MÖÀH\zͪA˜ä(tysfÇUVU¦•a1ØC­Iõ»Ý„¼Q°SY®ê­Š{&¨lÏŽê;Ö‚f*¡æø|®$x%A¶l!±ÒjŠv}3;FÔCîp=8Rzê»ä`×}>JÀ¸8Oy„†ÖPŠŒV˜JwÀϽÑUºÀtÜø½6Ò×Zá®!ò‡qB"j"8n÷6‰Ö*ªÝKrz e¡6êâ]!•rD/•?¢J¥¼C )yÉpt[®ŒúÆ/Ú\YØÍþqsAbH!]ê¬ S™V#wáˆiI‹ˆd<§’­n#Ã)µò„½úáH .Ę!wHADÖÊt:Kò@š€ADfeF¥)Å!k•)Äg#œc© 5m æÎ%w/6¸Õ´º2mÉ´MºxYfŸòh¼OHÓk7©(&Ù¹õ&è|êß UX®Ñ·DªžÕ¥Š1Å%‡CÖÝž™,š¢œÜÆÂµDP;þ¹ÖDŒðñA"‹ßÚÂ’@ Èk¹w‰FuI•5­“çD`ÑÎ#”8Ãä:hÄØ®ºêüò½eÉ6F¢n4”¼ÓÙª(ª m· føu$MRK>= ˜–‹ÇWšÉ D¿Zȧæ:ÈT6¨É‘çðOÉa$²$gÐ=åÏ)×ZS&Þ\J  ç!ÊÉû§·Þ¥øV8ÇmÓe×B“?I‹¶LJ}:¤²¼ ±4ö#ËV°$N%P>ÇÉž—æîJrP—¤>úœ40k'¸¶%‚œ\¨Mtù–§ÑïË}BøSÑÄûàš9ÕCv#¸Ãžò²æÒleÏ&ùt˜.øÚ:åm^›É¿Ä½<:¾ŽÇÎïìZÜÎæË¼â¸Ý_{&;€U[pÃÍ«»Âðr$tÝ£”ÚðÅFÉC)ñ•¥dƒÅHJV„Ùl*ÄN*Œ×c«O®s.ízZY÷I:x[‰p«D+V¢‚xç’þ¡GŸ—Z¢?T²óƸ¸¦àóYîÏTæ Ñü¨‰ba%ûÁìÏ gœ *O$jc,«Ïö¿ BÛ@œ‚±Âöv«¯ÜÌeá# AŸÛ1ଶl*Üñ}Y° &œ0£·¸Æ¯ÎùCð¼GþÕ\Ü“kLGr,SìÅ ÙnNºl%ñ"ÚãöØ6ký”ÒD_s¯ÿœG˜Î}¥™X‡­¶.|F‡è"®Ÿ®KЏIA!IÇ6Z_W_áwœ°¼†$Ì6´Äø¨k¼†å˜*<ñ‚4ÁønÏz ˜Û“¾8–œ69“†Dz)œ4ŒÇN¶Z³,|Èé å¦ÿNi¾yìå{Í’š=¤ÁËÛøî†#Ûß ØFÌý¶ 1oAˆ¬z ¹åó{2géá¾ýW[×9ˆª8¹ ù<±îaOõ“!`ÐD¥š>ò-ÙÎ¥5z#.³‡(š“tΒ‰æêzÝf7ÑɲL\ÇÂLjNGóEŽº;mDÌÁßòËlË£HÝ¢ó7Ͻ20¦ÿQîÕdMÓxázµôô>nB…›i­ü=®™ÝÁ–; íÞs{‚ãmþàÄV0ôn¶[#ÆVvÜ%¯Û£2/—XÎãŽgW€o`×۬|{¼u“„±ñf²š+;_ŒS–ÜÞ€‚¶sù)ŠfkÞ€æN¥èjŒ!ÝäÇÞ0Nºñ¥Ø¼+Îu\„PË~{5—ÕðqmôIÍV{Ìm+s¼!’ Mñá»úDQ÷zi­œ7v••&ìxÛŽì0ç{ç"ñp²`dˆI$å{óâÚ^©:øOlQ¥«„E䶈é­iäöe†¡ÝðæHÉš(ûpòŠ™xýŸñ>`ézð Cx™xCpuãÈîB—lG¥ê 8‰Æ$*ÐEÀÍ!ƒBE縪G²*‡£«:vF1œÃë Ë‘¡Î>©jk™Ç«öØõ¼UÝp¹ Ƙ— |F§†ð M»/cºôÈ‘÷ÏØd¼{ƒ8V±#èQÆŸV<€ðƒYøzü„\Õ!«£]qHÅjî$0í@놵 £™ôÐ<óDš,¤Pt`V™_u´‡Wµ®3ØþüÓ4‘¯üüœ˜¿enþÿXæŠØÙ[ØšýY|“®FùMå12.f³žÓ¦ÞŸÏOÐ=´H°P{0ÛòÝébXãxÖøÁÄ€,u<VáÒV—­yµQžÐ¶=ÖñxŽï• ¨Ë¤kû¸ÉH•j;ÝuÃÙÃ}¬AôØÞÓH&¡Bg}¿zÚY4+­ÐàyŸŸjíöþºDÞ¤šM¾F¡þ£/žMGP?%ž­ã}.¯ÕCÉY7k»Q8[‡ö[U ÇmCºqõÑ¡2‰§u=÷u®‘.zÔ<#ÚŽßJÐÝ»Sì¯ s™ÄV?ÔúI±P(k„ŒSyA™ýK8xâ«è¨¸¯.ÕgîùF)t-_–gw…U• ë ‡ …lŒ±ad¡Œ††(FdtF’£ÄÈVê«÷kC`¹gî–˜¹ÌÑìBº¶ŽçcYî@B'[Ã&\6+7€n‹ëÌ`DŽŽ>VNU)ôƒÎ^ÉR%×LëQMÓ¦ ²}ç›bN·$uB›[]ºˆ1Ä‚?…ªˆU&æf°I«Œ‚…oð—È=ÌòB‹¡<_˜ùi8Û ƒœ;4檈§íêÈ+e7*uÑ;£˜2.mŒªD7GfÀ¦ú‚/°[4× ÎÖä‹Ó*ßgÀkfŽI©9Ìk³Êû? s4]”oþmTõ‹Çÿ„¹II!FžóKKÔO°‚mŒW7JZ:ggôA J ¤Díî/Vt_|RYªTº‘Pf³™ŒÚÛ89·tå¶r{Jï8²¤¾é¦õröåqôJ‰kRºI×Þü\ˆèÓœÒø·ŠÔKWò»·2rêSðd$'õ\Ÿ­e1¿i­¢/ÕÒ•kZÚãƒØÅd©4Gk—ú PYË_ÆÊªù|9<‘ÍvE¥ I dbW›†C«ŸV¬RÐ:šÇºÇBœÐÚ·b#“ÇögÊ~}˜ úÜÆÊá䨲öŠÑ mfŸ/ößÿ4úF\ Äò¯ ÿ P\ÿí±Iÿ‹ØÕÀú¿Ö{ä(ÙÈ-ñ#ø–ºi—¨îì*Ü!´Q‹ûèG‡ò :&Àõ>_JIzY¼>½ÉùÎ0Üÿk¼ÊÞÎ‡àˆÆïXÌÉ0ËõØÌëíù°Ç‡†³–~) îüHwdˆÁWY²vg3µ™BŒ P¤4hëAö†ù¤oýrI™p÷J°‘lB-x’Qä!ŸR–óÊYYbÃhOîBîZ±*¶ %a‘C›—ô¹¥ˆºš‚»0h¸4«YÛ…D„Ly¯6Ÿ/öÕ¡J›—’UeÓ”¬ÉÔ*H”˜Šxñ‘\—MŸ@¶ÎÀ½„úDõÑš 'ãé4"TžGÈ>v¥È̤ntˆ;4eÞ ¶þ.@Nèݲ-%š\ ë§’xE‹[¿ÐyÀ#ͥߙDñL@€*°D5$~š¬^äp­^Ùq ½” †Ž\ŠÉ;›_ñÀ ‰ò@ÿ²×Ö6tó¨Ç[s?;@ÄCFû¶2.(jÖ°º c|–«!ŒÆ(—þ\n¾Ñ–vá^‹x,• °ƒ~Ö4–Á+u¯Z mõëÐär‚—ýpà£>õB›bs½$ã¾þ²}Ë~Ol['õ †®c¨>í£÷R 4Ix¦£»çèk•y¡¨Ãyê èZVßÙ„ÒÓ01˜ë‹ô–½óVÁ`‰ ,bdH^>‘[Œ_Fû‰ÓO.)Õ0énàö /l¥ùC1GøŽsÈ0ÝoÓŸ‚3GJqÈt ¡ÆÅª}xËië|áÞ¯Hnì¡×(E†{«Þ¡Êž’…Áì Ýj¿YÌ5£ëÑÄ‘:¢úù©Öä<}Mðh>T3ß:ñOCZj=¨k³Ž-þŸ/Î}èbèj³]"`Þü¯áˆƒ¹ñ‡#<<õô>EDPe𭑆*Ué-Ff³1)ÞdæŸ×œË7Û9'WcšÀÎÁ!#Dˆ÷`ƒž—²Ž©™š;X³ô«p;ؼ^ûN^5û‚ÓN[šä쯩ÉV"÷¥ûž$ ³Ùç¶ÿEÙ;yòmÛ¢eÛ®.Û¶mÛ¶îÒ¯lÛ¶mÛ¶Ùevéöyw¿¸wÿ_Ä>ç}ÈÌXëSF¬1ÇS™³fs±’¯¼îÜÂ÷kO:F½³ íؤÌžÊÁÀf*ž„‰)ùä,K׊hY- Úåy‰,,ð"f] AÍLžEÆdä8h3ÑÄß¿ö—o·<ØJS‰Á¶cZ€»þ?LzhxTé>Tp"ç]?ะOf"FѤÔ9˜«– PS³‘|ºèT×1¿µ—ØÀ-…GÀÑäª6Ú"ÙPcä]r÷÷ºF]Xª·t¾o"¨~—Ã5n¨Ïœ<—ág =5òÖ„Ã-òÑç>ܧZk’µ?§žs› ™ÕGt˜Ö¼¡XVJ Ä¥SÌc#4ò4$>‹ù ¥e˜<`1Ï›¤¬ÿº¥èZÃè“¿nI’Ù1|frlÞ+ˆWúÈ+ÑÔ¨y„´ÈO¥,j…UŒ‘õ¤nÑž€xõîéDUær"©IÔ'ØÒÃ%˜#÷¸Cð¦Æü¿¸vbÂÒˆÐ× NSºœ`ÓVóÁD5?6n h©`¡Ðû¤jÊod™E‹ÞOI™èýGvžÃ‚Lê¿ ]ÑÉþ?A§ª™çJLÝ©22¸Ê äòå2AHÊÉ’ÉÄÔóÿ¥”áuÚÝMyâ¾PÅ{þ?5Ñ«"*Qø±æQ–Ó©©ômB^?ȺH>PÏ8 2ÐLO˼¨ˆ:|5|6€íT(Ó ðû’×éZÎáËU!'šm?ãƒè+±ÿDîç¦ù­ÿ-€eª%d6q¦ƒ÷ŠS/V¦£Ï­Ë„mAþ§ùa+±ñšMg:>¼ïûSûèáX ¡ßþÝœ}dZhÌj~Â%¤=-H®ôx7âø°¢<56uØŸÿN²êÏ!ÅäóòÐ|Vü>CÖPú›IÝx„È®Ï™Û îëõi##%Q&°˜ Û.¦›ØƒÅíå”ÇÄ`€ÑïR8lfZ¹‰‘8L%jpu›ÚòÔBC¤Ž.²¢“ÊDôíx]r¸%¹-AýÑ–p‰µy£LWs–«¯›(¬úØ1£—¤Î"¿·Ü&CMUEä5ÈÐB¡2wË„a«C“´›»WðØ?¬|_Ê9‰qùÊÕrxËœ(u¬|ªê£µ… vÑ€¢Å‘¢K!ᓳëù<+:ÉôsaóóÍ>¹ ¹í¹3`¸Kš4µoߨZ80M»Â€ç÷`MŠ#ˆõ>i”h­)à ™f猪ÎÌàD¥?àÌ+–W ë2Ú"\2h\âZXJuadĺò‘zùn¸ ¹ó:)ÅZ„Q bykáC%ûô×T½µªù™²â§$;dùž«P5Úaó’±àèx¨ê¯Ta×tNwþ‚s ü¿ñÿ§¦œìÿ›ª6*‹ŠH|RÐÕB”ˆ^a÷HutÉ¿À‘«ÌJX„ðŒ.‚ˆôÈJrKQ ¼õcrr~ýL:Ü)B‚pd^Ïìô™]OÜ–óÿür2D¥*bŒŒ'MHC9q‡ñpÔàÝ–Ùç'€zP&AU“e¡œ¤‘aÀ.Z$Û„îµi9eC ˜”†“ci± m„ÓÃ6™ü0¼ˆ9·?›ÌwèÄ]\gŽGëzÉÊ_®Óû*èèùDw™&RèÜ×*Qa÷Ó¹º”'ÛjP Þ·<å]\\– ã@psQ· úm׉\gÎdŠº’†/UÈã!M}SI^½¢Y`E»­› ]º0.`5Â8âí› Œ°ø Åî=°ÄåùÞ" Ñgá_mˆúJ˧Љx™D¦¤‡×Í<}(£y¼ëÕï¼æ°¥Ñ¼¿® ˜ ‰£¸³Ëf¼eç~ª£XW£¯`q+LŽÄ5ÖM8“¿Çä{8_  "TèX¯ÿ×_c|g:ŸŠì"·˜ûâ—XQiÚpà‚Íë`е€ËËËg’~5,nùú¡²Tmy¤Q`kmÞ¬Hm6ùH#¹ûËT¤¤B9þüeŽ~‚°z XMa1¦B°“™´ãMûaûŸ¤OœK»CâsžoIXð Tuœ\¢Å‚k|«Ìž1«Þ¶àãRþAÉ]ŸZD8Þep‚ÕoŠ?CÆ_°¦^„Öú¦ñã”ï–üéå™®Ïq÷úÆç‘Ìð#xѲŸ®z…¼Ð£@ùã•qa×F[e½ûxÕ TÇülάñˆÁüÉ8](âŒ8ÃdQûäZ¸·ßG{4þC܈µ&nfsq„C·#A4`Õ7‹šŒ!ØÆÞ=´Ø¼Ö¯°yßn™(P0$ã4y#;3Ç¿ÛÿHèè© J¡ñeƒ‰¡ ‹éASۦɣi¡ßš` Í#¹c6MŒYjÊZ›ÿ<Üì±N¶l×iîT࿊ݸ3þ!î{~Îïws{þýõýàDfkÎVé‡ÕW…SSnD™ë¨7Mëí¤BwòÎâO{Øül êÄñ_¹O»´ óø’1*¹âÓT¼¯°lÆçD‘дT®”èÑqˆ`€)û“2ªúõ6U{_y¯dè‘dÝ™‘|QJ»Ü÷=·òa37yÌ?m¿¶ô™ï‘€ã£0+§Ú•³vôT-y´˜¶Y9x‰:÷ÕwS¸ŸU<¤…çvVY–<‚°¥WEt“âì3°=®5gHŒ^{0QÝšx/¨®I¶df0|®ywu4 (¨–f·ÝÑ}?ŸŸL#¤“9Þñ”iý%tµ€únÃs-·Ýðí¾R£æ¢Œ+çÁx6p1œk+Í•º‚}~>834O†c@ß¶ð¢ÓìsåŠ8^‡¿[>jº}ðÛT¢¼mõø«W]öÅû’Ÿ+)Ì£×EBÒñcA‡j+ò’ˆDMÛE‡WÖS`"Žºï pã JFœ&Z{=ïÀ˜úRSDl‘³ÖHo´öUnïըǵX¥ïõk™sùl$öLžg«O[Ïa;­/ý™^‘JióD”c¡%->¥èØ7‹¾¬çªÂº–PÉ̯;¹>ðÈñÇ®fέñ°ÀŒç–ãZÓ*ÍyË_Gžf}sðTy5 Ê× éWý'è&¶/Uú]óNŽ`/qÊÒª…˜'áÆUž¬—j9õ£¤] BOÁåyö–ÇØ÷£¹{çðá|(Èlyi‹h´9ÿÌ^ÜÔq:x¹i kYâúŠèÒxíx¹¦Ì‰Ï£êTïÜû¥ÿ¯g‚Ñ(±4ÂùT€ÖÑD¸)‹„uÍ“ÜÖ©Ùx‹„öÄ%–ue/œÑIÓf,§¦Æ¶_6QidÌ«%-KÊ:œ÷á(äXÙÆ-á‘m¢Í\“¯T9ʆÃëm«t'=Æ*6a¶0ß½ÊÁDÄåÄË—V]ÈÚÎRðÞ‰^z¶*IT&âJ9Íhé|cž‘,ÇTû÷Øÿn¶¯)ÔšÀ@@âýËÿÌ„ÿ55I*¯ò/§4)=(ˆÆ—82²dI¨M¨Ö/ÑCèTÛF%)ÙÌ*™äª úA‡)æ¸ùªt]å^·5šîsÍ—úþüu³– >•g=8ÔÀNƒ±B»„u_¨ézL"R¼|ЏÙvá%„#³ÌcV‡Nf:$"”l¡<þ˜eTˤÇ}ÕŠ=ur“6œ¢:@ˆÈMܳŸ-yf4'aG “ý3ÀÜ›b+K¦Xt+Ê3j KÏs\ÓKo%œõ k\r(ç›î.‚fÕiQ²=?L pȉ†©ÜZûEÏ»’¿¦ézlˆ‘(ü oBùIûsû<’ÑlŒíñëzw>\¶É0¯jYQu%pŒÅ›Æô”²³8ï­àî„@Ö°-õ(‡¹B¤E8ú—]èæ0ÈE…ée¢¸ö1ÀL)„8hÇxÅ šìÞ;/\íOµß?¸6“eçì/×bAý¹ö߯[““·UpÕ°Fri¡×éÁÊòµ‹¥#É –´ùiÁŠ›šúå¤qó¶QR\yŒP=cž:¾ƒ9£vSf–˜“°Gmºv~ŠùÎÛ.ü"Ñ=ºòéÉyyÉyá£øùñp´z+9ì% `*&þ5Áè‡ÀòJ•I-œ–œÍµnjÊB¸¿vJÝÓØd?^?Ìh_vc›2І; Øó#ÏÌnÓcp™QóË—§D‡-¢a±T€)çÜ{šºÔm²z&ø„v³bì0Ü Ø¬¾Á FÔm’ýá)[nQ‹}{ŽF¬°Ëž3åŠ2yÃ$²ª[s]ªÓ§[NÀ¬ñ¤„K±y¢$q†°}»E‰¿ãÊYvµ úQõòÚä§¾!ëN ®;•^WŠ^?1•ˆÚèVKO²êè 8±» ‹a"ƒDO¼oŠöxUs¼_­S‚Ñ]êñ—uñF‹€û‚ÿrµÚ‡šlÐ/mésµÂ"̘}ÞÂCQ’å1Tzvh¸ïZúE­¬™A:Õ ùyÝS®!nDañê}½. Ç5oØÞħR#$Ì1kÍ™‘Ù$òržª}™3ç1›¶XtøT'²(H‚@XqG±AjuMR8©ˆ+ÍÑ:ÁûGÎ.íj°Ý]_c ¯˜nv ÿz[]\Ö–0ˆC­n—D ô? oÌ„d4ÚñJ”H ÔQÌÞãf%õ.Ü·Â+w´íøUݽ4žäRWFçm’˜“–mð}Pß. ¾t^m¢)ÆÍÈ«má8Œ¹Ô­ I‚uõ¡{µŠúδ¿^ÖŸÁãøõQ_ñU×CŠ´Yý<»œ¾¥9]:¢¡|?C±¤?E}CÖuPQòKŽeÜR]/áÙí fQö:-Öwô%ÜrmS6a’õ©™)©hÒ4É)Ò2Ü*_xm»ãð\<}ÉŠç)£çXê‹…úT²Bü-¿çì\®ÁÉñŒ³xV²ÞøÎK©÷EæîW&ÕØ=¾Cû‡itpÉšÀꙢ~O„š7Œ{ )–g{èX ;oäÐAðk+xÊUXþÓ´‰k·¯0•à2·ú¡3ʾÅcM‡øB¯`‡D1¥&Õ«@&x¶yæµ ›ãðp†Ýé]‹Un‹Cw{¸Öÿ×ÙÈÁgþ{…4d¯ÞR[9*¦c‰¨±ø4g4 ~¶Á×K¯è¯Ó‰ýÈÁ^•NüGšªRÈ©/u€àÊ#ÝA»É׉Â^!rY'ýÞ¢ùóøñh> ߪ$~?ñ¢s6ˆ.ßv^K•òŽèN¾‡ãÁ¿³†|…¸…À_joùoÓýÏXãÿ´•F«èýïzÛvCƒ­µêGp‹ä¦™’¬µ/ïÒ½`ÿ-§€Ù´Óνâ;™Ô¸ôëo(s7ÓRþ8(ÈÎârzîrÃçqò’›Û d{X~w$G—ÏÖÍjµÁªÈh”×ö ÅÔ LÈL»2ófqýH|ÎEèÕ:aèÙ€}»+Òrâ¾!¿ö­r £ šz—²¸W½$|Öþ²: ˆ>¨>[@êYäB¦®zë^µÈëÏ$ðZhŽ™ì&!l&ä~:“UN(¶²vv-¦)Ù$¾Jx»Ï NÙ¼•¼Bøå³%@„&ÒÃdŠ'êf +Ê›¨&^ 3Gð¢3#„&Ù«–ýL ~ÒÀ™ŒYqPþ §Íw"TŠÙf¬12•ÜVŒ åùKNæÛ»utå"– ö¥ÞÒ¶î? £XtCÿ^ÍUbºœï[âz"Öt”а¹`Á°Xì ~)QÏzªMub×{’œ¾ &ÇE e› øþÚ|ò9ót ºb1g¡)R?ÓÛ6/4EÝ;1Y=a±" >B†µÔÊCò¬šÆpªGü  ñ7L‡^ð=3¹'áŠÕÌÂG ¤³¦xD6^ èP ÌÀ™Oð²QwµÉÏQÝß8#Në_RøîX ¦)¬f©³øë©8)*‘Ä´wªøö*¿è•$c CýÁÒIè f*ÅpªUÈ=¥*ÞÒ@MÛêøä>|üÙŸ°ÿŽDå¨\Å¿B£á/©ÿ#•ÍìÜÿ/&+ÉÉ "ù™,(T.k_ž •KVÎAH!iò¢!ú?öÈ©w$'ê]ˆÝî!ÞJ„'ÚÍUä¹!ò8˜ïfz öôðõ­ ZOpaiNå%ô£ùñ¢ Fiw‹0fö@·Üy-ÝLìI»êÕ$môÐmÅ@©fQˆ±\•uÚ½ûÙ y­D×Ó  ‡ðOôuÄùý¤¬õ!"¢Á+]W©±\òGfcCÊ¿ç«^š!Þþ9eÆGœTü$ë‰ðµ¬ýi‘YKŠqÊðIYg&3\‰!€iµ‘Où#ÄxR“ÈV®?Ÿ¿Þe§ÅÏ{ØöË*ñçòžBt,p„Ü]ö¾m.‰“ìoÞ,Y¢I’º‘·#,tqÒÒ‹Hí ''íDަ:foÙ`¦ 1¥Ù¬Aß…‚xOFB&·ïj7Û®7¦ž"-Ø›?—Ù54&ú¿K3, þÿx.*BšÿoË,éÿÕ†þo]³†—¯®ú—>󸬾Á¦ëF€œ¬ZlEy#A™\H¹´˜ÕŠh¨‚!1ÕôÂÔÜó¡¤|\ ©*P:À]X LUpýÅoW­×ewrÒ”Û äãÃäšï¥ÇgöO¶Ë5ïŸ]‘`N}Ø3NÐUU#¾šÁfæ.†°—˲>HW_¤ÕqÇOZ_(°;£ì\âÈØ ÇB8ŽqÇF|BØ üG$BL~‹}Ô×"¸Öó´ØM‘×$Æ÷¦°(E±:†0ž 6™Q]Ômæ›Ô}A(/üÂ6 H·¥Ã8üYx*‰ ÷€!3>GvSu>yJ $ Éà¸ä ^øÐ–>ô‘24>vdi(ɺ.5³áHuѱ)ÉÖiB ~8õ€+Êù9‹‚¶s­³^ æ&«(®ÁÚòà“~}¶µèâg  ½^tb# ÷ºñʾ‘Á*<[•­}» µá™tFQØW±ïË–eY!'jFu¢¡PŠ%³ÙÓ|¹érÃÑ©0•pFú›ÙŽåZ“ ×§0;»ÀVË7LÄ!i~Œ»„®çºH"AÝzn³Û„ÔÞ,8q«€•ƒ`Ùi“ß&H¤òÝ9†ru…“Š5w¥†S×n/Ê53<”’ƒ(l!.#"à\!¯2x¿sÎõ0‚§¡‚ŠS`duˆFM¸_—|Ûâp¶#}P¦µ•dZ\Õ±yþ_jr›¯úÎQtÊTâ5õÔ–;OZ0g˳Ã%9L’ Ú‚#ß@8p@W¿údž®…-kÝÔœùCRŽÅZNRvTÖ}­¥h®a|žØ»%Í}å¾°:ÍúÈsŠõ”uJ®d¡å×[W>˜IR¾ÛTKµ-wû$ކïg”n£qBÓŒ*ù©k±‹»îÖÄÑŸ„pO ñ«ë*xX­›GšS2lËT£ gâÍ–O²¬æ¬»´á‘ÊÑ‚‘„c¸5O£Üj T"Ävho­Fíª¯ôöàd÷ÅàÁ&t$ª´*¬³C ͬ‹›fu„¡ãÖԇ 6~kƒV ŠÖèÌðvU9éªPä Ø¹qþíè)-èrãeð'‹â:¶:ä ˆy£=[WNÔ*¦åa”cM¤]Ö[:S8_Ü¿¨4ÙëôL±â¶sÆ=ƒ ½Ù‡ðÿ1ˆhö‡{gRàûg€„âgAþWØS_Ÿ–§’Û- ¯ÍÞ)³íCX'>Ï܇²*!ŠËO²ÁÚx"‘Y,xX™C@zQBc~¦ÙÆÅ\ƒ_•ã-î‡:`Ù'ðµ;@`/â‹tP<þÃ"ž£r‡ÑEÊ‚ì(¬ë•æË|ïæUé›õ–áCgPIåHi¶~¬Jg£ò×.î÷àmΆ¿|S§…Œh/»íº»yËF]”Z@/3QN‡wG;´ÞÎ\ÉâYù‡ÝžÚQÔ·Íž×Ihɾ´³VkNŠ•YWO¢õ1Žzï¨!f‡)Ë•k¼û*ÍW>YHh2J£8JUÛW@ æ=P"}ƒÖCÇx¸:7÷ fÊŒþŽÆp××ÄñïžÍwi¯]¥ &Ó±äð¤ƒû-hçÎô©ø-­ƒ'æòÊî1jÕi¼UÎÄŠÓÔ²–ªãøoÁ›ðKKît\ùè<µãv‡ëã³ñaªÄEf>1aÞÃæ|égÑ‘fÕìŽ@zt¨o›Odb—Ð[ch2qVZKZì…¸Dw«š+ª«p·Ÿ°ZLFžœF;_¾ôêN™¶‰XªÐ0Õ›Í+L‡yný[©ë¤¾ a}õ‘bÉ2ŠAU‚¬³6ñýŒê%ð«„oTf‹Û´»~Yzž¢9%â2ù™”Dð[­-,>¸˜l¥zaÐo¤l`x\$AÍ??¾ÑR¤,TYx`OëX¥f`½ìIôÇ™FÔ{S]ôçXaªË?€&22óºÊ@<*63—²abðzÔŽ8BñNwͯÙÛ^œZ@"P¸2 D™ôÎNhïQÊH1óZ¬&j ×>) EÄ\ô>)© ä¡² ±F‘ެ‘×#ëÈ_ª06ëô +‡½8s9B.ˆÔb`%!_«szw°i¨Õó"a\U~3üb¥˜=„̧qpg#M,^^‡ô´ûªå‘+z°¨·®€ä½°3U¶“;"‰c/ñnfžz>l1•Ö\wðæýöûŠgšº´ÂóÌ­ý3ß„¢J"I§m ¾Áå0d“ŒM¡Ò®©¡2ÿ‹Ùy+¾ `fImCщ脃7g1²~ôÜ{ðƒ€›©o70¨l~–Ús)X<ùµ7Á¾ƒ/‚ñLl4–q6:†hša¢°…“šº uYƒ1딉î#nöiÍ‘*x¼ÿ#^í4l:ˆ::™&™¯:…¶:;xãpWC×o´Û Ú~ ýÓ»‹ib$•MÝ)»`À5ý/ý±XÕ°‰ä`$@òi°t|FÔ'+‹Yvçâ!ªðVn­«ÀVÝ204æF?s\ÎÉ7j¥.®Øãé]I;z:CÝc–š‚Ølž1¯(üëñ·e¢PǬ Ÿ‘º" ´Ñ`Ü{Í PºX³ýT§ T—‰Ã5¥®¯“÷ÈO.õý=õ÷Žªz]բɱ¨Êa§á¶®ˆófÏjÎúQCÌ^Éæ2XûHš{KëéB/øHQ»ˆ%Ÿ~bܺ“wÞ%/ðþ=µ"øôφ*£mjŸµÃ—è¶'Æì;}}àäV.T;Gd~™˜ÒV(° þ$dÛª{GÒæÅB ?ø+$¤‹þйžWË>u/ý1c™šÝ,;ù½xtzìïÏ n[i.§é7Bc€Z¬à¸ßúØ•:7ð^¤ó ›KšY}}2^¤ó9Ý­9ô ¾%`¶ÀÏ¡>Në7F £QàÍÿ¦@¶}­ºûSМéi:µ6žUñ U‹é^êü ÷qMÈ·e(·OLqat©8ÇfñégÀºÕkHÍò™¹ù{mgy}å¼U í²V‰Œ ʈ©‹ pØ”ª‰kó!bœ0ÔÖeÃDoLûŒúÕûlžÕ«åžÝ:¬K2ð­oðþ]Jƒ¶[ä;¤å$8·æèw‡Õ8Îa$Ô;䈞2ÏPÕy®.™áN6Ö}¾fÞ‹nœÐ›W ~ÊPÄ·;#ª{äñW%øÖCç×6ÂܸŠÏ6œWª·;+._ñŒ?Zü°¹£˜G·b\xO‡2Ê©j¾bÃà øë²ôÉìYª+#u‹%ty:)VEѾ;S°S;ÙRì¨Vƒîë`|QAâU{E L›²$õv€Ã´–fùl²ÐÌÞ<äÖZd˜ù–ff:å£.îÒ•„ÃôÀí NŸ+uñãr>6,F@÷+,Ôõ:öÌ-Z”êôÊv¦)mxñD2‚ŽT›zú«êЉ7ÿÁSyÔàMgþò¥Yænå9( \¡ÃÛÁeñ‰È?t4üåøw›Îµ~[wu±ŸÁ;¾Â!vÀ$=¥ xÆŒébV8uk3-æ‰÷¸I‰I6ŸÙdôNÃÒi±}­ Cí]וèè} ͤ%¯œ‚zMãvƒ‰z†¶À¬Î/³ôK[±ä ºŽ^Õà’ò@ZµëŒ¾?VÞb^DXì‹\T=ëxÌ0çáô ˆé*Bi¨çUªú&GPG?*uÁYKرjµ‘4鬸»Íùn°f‡Õ<ä®ðÅ…rÚ QfŒx|${ÂÇv•©~$kë¸t¯°½i‘Ôñº9䲡x ¨‡Qaö„«ŒMÿ{¦0ÆÞè¤ÚÒËhï2Ì á1¹ì©œðûÅ~…2 ¾£è‚÷íq²ãä7¡(-ï0ÏÇJjeËÕ£ni^Ü·ÔoOs³ìÑ}¢#àwWàðþ†ÛÒG;ÉKú7D "cb= Ú aßíCý3{9" #Ëç»÷ŒÖÑÓÇ6»©0,œ,.½ÿ,F¡Iü“üó’µòJ_»QUÒ¢Ež—ÙZáý+MÃ)Hqð7œ¥`œf±x^ù„œ ><ГàjU‘7}L˜+œäЃ×/=.ÊÜœöe÷›sqj˜*²Ó–‹úΓÿyGóqÝþñÔÓK¥Ucö“ì˜dº}TîC{Xkl9E)ì´b®_é®EÑ„…jÛD˜¢C×LÇž«L0*¡4ÅÆB,7Œ& ¢Ín´ZŒF|?’Ƥ ;L±{Sµ€b?¯t~Œ²ÉSN¦Î­ñÀZžº?ƒø1χD¨8L&†³[d»ëR| ‰b ·O!Á‹à”øDƹŸ#'cjÇ“þ½s ³óÊß+m—öL€ @:O¬ò}°`R££S—(rì‹û“pò Lo;¼sk=èÊÑ7Ø %otì‰Ó+·Ïùù]7œÍö ÷Í,W 1§ðqñl”eéÕ¯_ ì\‹=wðóµö ©ß ÂUÅžÌƉîXuBt>’¿ß©¼ºʇŠ4a ÑaÄù{Mȧâö‡Âfˆõ†à~µ?{Äþúã@«Ÿ`ɈáÙ¨Þ<5g¯c¯³¸£žUqYæ@ÿ§,°¶;d ¾È¢ +ÚäátU>Æ ¸Ÿ˜®?qu1˜ß²ë$P0ï^$¤Xï+kì™UÁ1¥ë p¸átù“vÞ¾8©—7 •dzc J_¯åjïøáÒa¯fØé|ð7‘p«l€] hŒ„]B–‹°‹Ó¶`WgOÄM˜!›S˜ŸÓf,˜RA/½´#U8 @¯«B· ­æÊ¨ëmé%n”¾CðEªéYJ”%ÌÙ:ÌøÑª¸¨ë æä@æ=l·¢ E¤Rçfd²Y•³¶üþ„¦‰}ßל ÍMQ”ÏZ ôb5ÂËåažã5Æô|˜{=”ÎñêørªÔüïäK ”9zt l™5ù¼1wêAŽk5À§1½Í/arËÄÔFá ‚§þ ÍçG×½½9E˜£¢Ô©9Sä¾Wô2ÿ“ðßÕ‘ˆÂú°*Ð3ÇVG®FήÿÝŒÁáÿnÓùÇnG_\r¨W!¦.ŒÜÅeŽ«ËånúïCZ‰Žm¹S^†—•Ž×ÝHrÜjÉœˆœI“S‘)C0iùQA,XSÚð0[ý™¡”‡@ŠúӇ̗L³ tìê^{Š¢OXŠš£Fø(Œ,†7hˆªSê[­t;Á£“Г;‡tIFT„Çõƒ6jR|¬C)’uƒ2…Æ¡-e;»`¿¢äô{a^Ì|@pzˆÌÔ­*³-?eÒ"±îmW…x*++!û9À±í½øç„? #`y ;š˜>ÌB+UpÀVbì”øâîcˆÆMYxÀºÙýÑâ°-dx\ Œ…[m>Ɖ^'õϦÛÖžðæÍÒكŗÆëãc¦|çAMîa§ÏL_®gî8ê‚C±ù}â…õȳ;­VLœ–Å9ÄÎ*|„Õü—g©fx®ÖLÞp–ÛHy™îo¨ò LK×àGèjdžUÎ&ßfŽ‚)#XÙ6N´Î¡5]\ÿ 2™J¦ ”í)uÉ.vøU'’g›¶pÞÚ`6>SØâF†Ï;¼LôÆtÓñ6T|§|N†Áž (ƒHà?UÕÈBÖÊØÙÈÙKÄÁÞÜÊ‚ô_«Ë(gkûø¢­º}ÍXjðhà ÃIþÈ…Bò¦3¤5¹ÿA¢cå -|kÉ–€Qkžº­•Ssé/Г°&¥ÂaÕi'§ó÷]ÙëØcT6í²9å3F¤Ý–¬:f¤fÓÓõ~Kƒ˜|çûüUö×í§9>33Û¹úm·@óœÁó?é…|%2VA^í‘ü}ø¿ä2~jÜ }Pèk܉ÇõöÖ@(¾ÑEÁw”ïHößÐR¾(¨ý©?¿ËÄwߪºqè½jÐÔȉ’ñ%¢d„,ñÅÊo’…ªäCyÒÇ÷ÕR,òÃó@j·ó–]¾¬Bi®;™ä0fÊ¿*@Té$>[¤ÛK©–ÊXÕ8K“]3ˆ’Ò©§bã¤Õ2HŠÚ…ªt¶ét'R,ÅàBUh ¹MqAkðÔlÒ»¤¼ÓÔ!ŤӯÉ)e®!p©®f¿´ƒo*€èTέ“µ×Ašt‹Ñ…õ°óÔ¨«p´i¦¹“7›rØÁÊô¼ä‚®gpÅÞ’kàܪ8ª<,~±ƒ[²ô¯bF§ƒu»ô:ÍAÂU l™Qª; [QçÈ‹{¶ d7ËòtùÙPÌ‚ÏçÅó §mc‡#T¬h¶,D§Ò¬JZæ wÌ=:h‰K)¶W-È¡UÄ7̤;‘Žð-J*f<|=1ä±C³éµ85¯ÍMâ–©b‡ªƒÌØñ»?ÜæÂÄ|B¤z\Õ)[e'í#±Ë“: usÚ~Kö6Y=eH±œû=W‡áGëз²jv3±œCý¥TÜ ª§?t¦qæm¿©±ì5[;'¤ÒCn.x¦Î©¢aßÀ·}nñdxˆº‰Ò>9y4D¬4~lÃ쇌ù͘ ôöÆïó##ÁÆQ®c~9–íw­‚Bâijl,§cÞðƺASo‹&F.ÕšÃFv»M¶Në-3=û˜ù äz]p奸ûܱâžYüþä½ÄÖN*ã°°76ÉÜ#ëþ¢uLwÏD+Ä!-tWÆ~_ôÁ?nœÁˆ¦‰ÃÄÉzsIÙ°z 6¿kàCIÌ…¯3½ÆÐrñÕ«c’cïχZMvÎÚügSP¾YQX/»8Ó‡VI¨ÈzrYá7?jŠí“\bŒö˜ðÖ,xrnñÌ@lqc{<¦Ño2’ëþMº1HÈw[À¡‡Ñ‰àþtÉ<Ô;ûÕÙ6#ˆÈã4«)®AgŸÐÂ)ËÛl7ƒÏB‘p–.}L¿Ö¬!•í¹ÙV”1ŠKËcMˆí4ùnêªÞ´}¼GB“O¾ÀWo) $)‡/µ~’L2žÂ–Øå–g¯ #j[+ºVÌgwGµ‰4-cR²Ì0SÃì+¹}K$R!¹ØÌŽê³Ð’î,LgyÔ Ç00Þ‘>^Ôw—Õ?Ó;,Y2µ¿‰œß¸ª÷Ãlãò0¾ ¯ŠòIåbdÈ[bšÝW$4ªhÒ¤ÁæÞÂJ-nϼ>é¤_xé$ÌVÉŒ.S¾•G¶÷ùÙX,ç¬BžÇ‘0_nª§ÇB`´JœÇ*ÐÛ¿kÝfÀiŸYE‚Áò­™:½׫Æ~qâi)¶V)l>ã$£ÉÿrÀÝaÅqy\¼”áƒ÷æ;cÞ¢î2£=ÝU‘þ;aÖÁÌKÆòycž#j¢ø»Ä²Àseæ•!NXì·°5–õ¶Ð·Ï{íxb…ƒ=`Å™‚­}/Q%ÅÏ¡OºÁÆûÃþ ,g ëýËfè§ûuä1\K÷á*ÑiÖUD>ÎÓâ/ÖÀpÖ­ˆM&ƒÂLJrUyÿ¥²x±¬9ég€úí)uôÁSR(Ù°‡~Òz¾8­`n2b3Ÿ€¥ÉˆÑˆpžÓÅI‡iZCò©G¶cFŒ‚€ÆpàG¹Gâš„ºK¾¿žEõœ‘_MN¸ #5¿4a;zfnt˜g弆B‰Œã ÄKš3u9j|'bîPv*i)´¸‚d”3H>¬bNiTg² J®Á‹ QXކ+æÞÂ/”*EÒ*Þº`'†Àm~ðCÖÒî…žq‰@A§›ˆ`m¸?b4ÿcx"¥Õ`¥;lù ûºA¯B˜Xw Á£¸z®Ä’Û4·a0‚5tð²µ±¹Vd¯šÎ^ Áa /‡­#òz匠#µ° +á™n§µ¬}õIbõóÈè^ %QqBîyQçÚuøt øçûÜ"@“¤r–+d!­ì´ýÖ»qVrôŠWåW¥4fµŸ›üs%ôPÖרÉÈyYãn{Y“/Ñ Äç± —°¤P´ÖoC…ê©å ÝêN`‡ù:˜f窋\:](•†ì’m³‚^ õž•L9:[»|ÁhËI!Âý Dˆ¨â šMP™DjÍ…ÀIšÌ.>#C ÌaÄ‚zLp¯ùç$Þ¨?¡©Q;•·jj32ÎûòPÚ½ÈÅU l(Ð3 Á#/wÁȱ«#õÏW¨£”Þk•Y/×\gKºc÷²ö¶¢»®:Dívµ üÙµô.Í(× ¼üý–Ó¸.ÚÈ$¼’‰‡ØÇE*#b:¥+1ýMøÑ!­ê¦A§ ^ÒC‰×°¥ÌÚ™ÎuÉf-‡A÷5Ø¿%;õ¢WÁ tñzzfÅ"æl'ÞϨè­2èŠT“èJQëËøZLèñîGxNw¸mF4Ùþl;μyðÓ%éœä#0ÇøþöºVKòe+™§¹rUn0»îô,–9NV‹ÑÐlñZûD.b±ŒpXZŠfñ^‰âê¯h¨ª6¿ÍãÂŒÜ' ¥¾z Âѧ ÛÄR¼mXt(äFvÞEÉô á0t¨>ò.—êÇl¿Àì¼LŒŸ;x¼¢•#dµ­îž?yx}nëÿŒ]u™¾x|ñùE茌ƒ¼Cj%<­…òåª Yæ0ÍÏ–ò¤z½˜íÛÕk7‡*.EòÜB¾…¶¯Ü?}FÖƶ|¥%ß‹eDͼáv‰¡ü øBrwf™y%å?¶Ãrïþù™¨¨p2œÂ=$à4dID¸µâÒíZ[^bàªMe3CöÅ*Æ6KÕ¿Ž ò£+´]mßUó Œ°'!>¦*Ã.–ÊÝ“W[‚}C{ŒR.T -‘› ôï®HSÏÎo}n¢ÂþS£¸€²tQY»û&&ëGpødUÊÔý-;—DÅÖ³˜æÃÂò˜–õÇ+Š'HkÛÛªqfZÛïžÆŠjÉÔ'̶úá¡P³¯©Rf>蟮îý³Zðký‡ìî“Õ׿7sËfýÓÍkIQJ¥Ó^©š£§#ÆËáD­% G!J~g‡s9z»tWo½Bšºuô°‰ýpÚá£eŠG±aL‹[+¿q1Rzw2}&éƒÚ˜x›•ZWYigºí©ýÊ;ÄýŠe)9+ŒIfË•Zw¯S¯ÎÖ•›£óôUoœIO„—$œŸ4Ìk«/p£ï3ù¹‰O‡$]4>˜æ‹ì¬ Ï 7v÷c±Ü³>Àò1·ú»û7Ia¢SË8x{ºøÓƽþ*õÓŒkÓ}vðDþ âEŽ\7Ä Kš†Y¥‚œsµ®|Ä2ƒ÷©áT½ªýy„88&~›òÆH«‚rÊÆìlöz—×[¡~˜ 3<¦‡w©€¤M±A ìÓqìî><ÎBÌH{‘gŸp–_»©í©05|¡Úí&)¦K ò5Éâ©æ ¬Ëز‹‰ô‰"ÙÄÓ²VÚ¡lzïŠVäsre%X%ó?„M,’É¥óB ¹ÈêÊW§V§¢2zv÷Ö³F¬±¼Q'ñ‘óÌ(>Xr+nmmvÖ¯Ÿê~+‡g2ð%O®ó¶˜eÍXœËEÃ'àΞ ªŸ3ÒøÃÙœŸ€ìÚLÒlä?¹©›q…&æLúƒïÞFHÑ;ç)—×­Ævè¬:ÐH"{½Ïèœj<„ÚÅÿ@ƒ†ìàVcÅgˆË?2£Ì‰ Éð{`.ÚvI_@óÌÿ†ýêƒÆ 1àv8x!ú~¸%×xîÿç«£¨Vt†@€ú¡ÿg"þφ”£í¿2Iv.‹âH£ß§X›œÒ”1¨8­öÁ¡œ 0hPðE€8EŠ9Þi´ ì™ûaõ82 îÒc5•Ý¢ìž3ȳР×RÓCÑœöÍäëçÖïn¾Ï‡ƒŸ m1Õ´÷m¹ýôw?‚ÒiÉoå R—ºŠ¡ÖžIBRÓ“Ø´eo:lªÌmå'£Ø[J‰¬9%õqÞ†-ºÆi]ÚÛ§[®m›Œ­EÑÃízÓáJX‹Ú&:n¶ºÜëf×É\¢îrc[㤟ÎÛü`‘íðà+»ƒêïŒÙÏV›ê–Aêöš[D¡ÌÊ”Uæ ›k'Nar>Ë͘Ûé땈Óëõèõ:æ,w/0»òζù |©LÄ`†YÇcЈ0µxl÷ìýkÅNïK7î¨ù#ûíðGæ,¾JY§T÷l™Xe<’T×À;ýO¼1²ãÍÏÒ¶ågÝ}i€Ï7ÇKN”ÖÍmh¾ßþJˆÂiͶÜgÿUcÒ³|žvE?# cMQ{£Ö²ŽrÀêÝòxlïwŒQR`µ«®ÌFΤ¡?¯‚Á×@ÂIGœ\-¸½Uf>£'~qWñM‹õËø—yw‰;NÚ*Ž DÎ>¨š®â`U€›Y5 ¨ DNaÄbìã-Ÿ}i½T¨ÇA§Pµ¿ií¼K;†d®NCg†ÑóØDLþøË9Ì\s9kȀ跷sá!çèNÁi³_…ÊÚW—þM»ÿÄo;7g>]üVû”­62ññs+«×=^¿£{Å^Ú4nDœÙøÖ`°ÏU«/ĺÝqé=•ni¾îX•G»lrjÝniƒ=™ˆ~Êûʬ|Æx™©ïðxÝY«ß0•í>.R6öPÆÛ°3xNBûh`Ô¶2à‰ "š|¥Fä‰RJjù|Ìdºà¾‘¢Î!*`^òTâ¤;*d ¶f4ñðò4í°²‰ŽàÉ$|ü7$e–OåJ0ýPë;<¶—:åZ8†'×Þ%9b{d§Ì0Ñ-¾€¥Ê4Ül¸2ø¿Sÿ€ ¼¢¿ Ð4‹R’¹C-G$)ňÅ<5ê£F¢VŠÇW¼¥%ÇjyÑŠ‚<´‰¯„•d ?qPgPëÔ§fÈÈQ¼ºÞ#~²Ù#õHyfÞ¾¿â9¸Â´:Á s†g 3I iUlHyÿÄç€P}—Õý­ð‡fO ÆNzßâþÓ¤ÒÕàÜzwà7pY#õjìÒÅ/ÅÞ¸ïËú2žWíŸj×”/eÜûô»c_ÿ m|´A( &Ôÿn¦æŸñ/FÐðòEÓÀÿî1M\§ ’’v•â8(WÂkʉf“Å9«e_É'ôOOqóÀæc( U*Ó)[Ú FVknj#t‚Yæ?•iß¼W¼T¿—þñcÉœ¶oêSà÷º™¾ùܹyýŠyy^þÎê…ÊÃÿ†ùÄóL›‡÷~ä¨Ä1¶ìãØø üz·´²ïÜEH—K·'™·7Ã_°g[?;ñFÀå;;ù† ¬z‡w­ìè”;Tzä˜Kúùê $áØ‹æËúËÄ3/¢òÓ“ò×ìžx¬ê¾ïɨÅñË!0ÞèéÑm0¡ÂÄÛƒ3'Q(ƒdcNF(ÃïáhãýX*oé^Q_`“¥ÍsKü’pó*«['Myñ¢·v?Uƒí<ÀE·»°¼HÐì{%'gǤÿÌÞ.CÊúıh·Þų»ïƒ~R–'ãÎr<Š^1§ ~Á»eBJB —Èr\µÉÛÀJ¿B*! k‡³U=Š £›8¦»Ü;ë*î:[u‡0R=¯Èm4µå,e»ŽÍDš¸o–ð|¹nÎÖ!Y³2­\ÛœûVÍÈ΄ܖŸ4Í][[-ƒ¤ô¸í‡›~™ãÞóHg±¹Q4¸¹¸úºr±¶ ‚!Ò Ôô‚Tç¤É(gd§«·±G‰ˆ'"Ǧĕèy4»îò*ÓôIrÉí¿Â•xòšSÄAÜ·ë·hüƒå|3Í êÓ°‰VBÎc¹’~lÇ~žè>{ê·ª“¨x”¸ÝOíq-ÉI9 %¯)ô­aæì#$ß#ýž°ýªñPÅéNiýÉ“ 'N_4h‘^ùމ[m¡o±Åpg:Ê$fÛ"øvÔãm®÷…8sëûó»o>»t™maœÄQu¸w‚Aü1É7G¬íƔܒÉʳ†ËQ°óSÙ§3'5™‡«ƒ(']TÚþEc›^O<ÐÙZö¾ëñF–è÷eMö [kaN(ÆÄÙ£-TË‹ ¢a«šÌ+ª£ÊÚ‰£.P§£~…Ü"x7ٞؑõá–Èï_|ðb|!aGZ+‘ç â9¢å\ÃëWÔÏËX~ª|÷Æn¬µwƒ4ÞßîÞ } ÷%Ïdé^Î¥F Yh!Ç’ŠËÂÎ×X$êÉ–+“α&;‰,$ÇPÙÓÍ–¶›,íφd­nm&‹è×¶\Y&*{áds#W, ¡ˆç˜éçXé#B<Ùĺ\+ áÈ[¢Òõ0³øÔì;J™g™¶ÁËÆà}±Õ—<ˆ3YÛ“RÀe¥Å/³,cX§Ëœ"’kÊAî‹ ÑÓwXž‘sšrìRN‹ª}¨­Re™`©ÓqFº7iîAÜû®4:?èN¶œt ªMO£A‚8•U·Àµ£hŠÝ<ñIß½ç~ü+!z· z¢üO„è+´JUõP„ÐøAaa]íé[éí”`e.kµíì²زúÐ>0Öéºg›°¾¿‘ä Ä ?¿©Žswák}C! îz]Îs:Ïçrw÷ü¿AG«Á0¸âÀÚ¨aTPÄÑËzñUQÐn) iŽ#cø±°M—-yvþÎ4h9lêÕ®··Èì-ÉíÞZ1Ü[ÂïU~$ˆÍ%WâuY;WçôÆxZP)膧fX¡PÚ=5îõ!BÈŒ‰FØwÌ!:9:~MW)33¿“7–À'+6í’U9é¾jöí®äC8åôž-Û;¼ñEjBJNú8½áÂ&iR:Xdw‘K÷”$VìÊN/vVü&pí[­ò'F—Ⱦ 1y»|ʺ Ũ‘8{xb\Æ™ _ÓÆRˆOR„Fu·ã±QÎÝ÷­.Ë–òÐ%÷0qÁtÐw‹‚»%©%I+‰HgP’Xò¨=ã0a(ŽKƒAÚ.€g{1K¶²³°6iñzù«³m ðK„ QØgç|x€A騻f•ÏúóZ®þ¨l%ó¥8ÁÐS-UÛ_¾3lÈ¢ (¬Œ|äw»Olóå!ncOJCNñ7~Ú~B,€w|YzDde—%$#7 (©Z8d%—Dâ¢}(Ô!–M· ÓvâÂ.iU¹Òäé‰ÅxÒx¯ƒ ATZO ÏÄ…±É h¯ÄÔ?$…ª¿I ù…'ÔjÀa –ã ËV#qª€#ßµ†Ö+* +½GÑ ÐÊÇ™y¤Iÿ\±Ÿ|éœLDäPÊŸŸ„TžÈÙÊKŒOJ¨L†!{1‹žÚŒŒÿ¥lkDþ) ÷~Æü7©á„æâù?sÿ$Ô²™ý?ºKÕªëx ª¡}S´K% kÿBfÃq¦U€mÑ„n]µÎ¢‰=pãÉ%†aÕbE…4ð l%sÛl}ÎÝnž¾—]Jh3¹ Aä¶È÷ëóÛÿÍûy:7:[Pt„x¢–5¢kGó 'géStTn˜®˜ÐT©¨¢A¸féKyL ­Ø"ϩǚ™½ÞÒáœi»ôÉÚ\K£eo>g”Œ¸¶“y%+¡E|Îw«­Ý–³ö ïžœ¡ŸnûƒÖp ¯_ÊÞOAÒqn“ƒFEŸæ¨Þ ×)ÓYnß*c:ÅòöQñ w"`1ñŸ.ÂÖž¼Ð´[^ =SÛ~Ú­;Ô‰£Ï 8ѳ€¸{!&6ú±¦=jaãc(ùó@edM…ÂÕ ™D¤´›ùX}šgäø#of”Èë£ÍØ·…Œ1v‰âMæ½þÌw›ù*jÊ085‘@y\G¥Y¾ìOW˜‡ûÔ´î$7O Hó÷ëAÂÐýŽØ¹›¯ÞÁª@Þu E7~ã‡FÎ>,¡«'Ñ]Û6=ÿýzù°ìï2Šò’Ë£ØK+\õ´¡è„àPé ê0UQù†“ÍrWùá†ýªæ}O…¯Ž„qe¨²wÉSV}äóù«ýŒ•ÆDƵÑvéO¹,@UéÔpiö³q[᢫àÔ—êðD&ìZQ6ä2ƒ[½îÕ·ÏÎÍŽ‰"á6ËKQŠk•í닞”8{𰾕!TÁÑK羡E•†°5>w<³é¡’çußœ—2ã¸Éþ8ðºpw6”œ ·l&]x¯ú“x­@g$†yýOÛZno Å%/hÙ¡Œ÷:éÛ€cí)Oüˆ¸/ñÍ$\ÌxõÏ8S¿¯ÿætòçØ¿hFñ(¢‚ö ö+Ö_[½:‡'UJ’)¿¢ÐJE_€dá3Üb¹©Øƒ<Ʊwä5œòÄ©ˆ¼9ÀJ Dº"D+&Á?Ý9q`v –¿Ö˜°±õˆ0B¶ŸT;ë–ô‘ÖzUoâEìšW2‘ðRDª,l¦]@ŸÒÍ5€0ˆ]fCe+R*!ä‹C05ij)„*A'8XkORÚ¤ê,¢k ñ‚íQé˜e¤Ë+m1O,¯ñ\2Õ«o&yâ—MJF+¶„ÛüÒ^ªQû÷Y…OÂï;&ÌeÐQeÂË«¢¡žSÌd7dÌâ oç(΋¹¥§Œ#€,’xåÉ[n?šQ±)uíÂí«VU§o5€A÷˜AQʨ=~¹?–ŽÄŸ{¡IäÖde6ø_1#áüÐIèç?ÅÆüfü7q²&´§ê*ú·ƒy'64qlr¨Q¢<2´°&\“Áä€)Åœ,ÐëÚR×ê]ki[åÊz”: S“%½¶5fº½v­Mu[›{ú÷y_ú$ô%æYŸÏ}÷ëÎϧEç¹Óïãñ8ŒÚ¹gÜW3cÜ»ô3`PDïÃ6‹>ÒYÏÃF އL‘›AR/Õ¬};‘…8>ÛflW,OÝBfÇ•h]¼d³ñÓYTç±ä%_…³¼ßG,|Aå¥^cˆ'“ÉNKˆ½Qf/ñ¦/ñ¥¯¨ ‚/ÆòS3.y¯EXŒXž‹ÑZMçú3c°Ÿ;!PGSe^0ŒØž›ÑaM.èþ·£´ž«ÑûäVúOnˆ{Le˜‡ô >JQûQ"=¤óûØÿ¥÷ótb÷~¨ƒ `{ \¼ä¥‡Ø{-B!œx›‡ø6>Ù|Ò`\;tЯ— øÔƒøI8Ëÿ}gPôÑßû†øMÛÏÏ%VCP —Z– ´Üã×®‚…º¼ƒþ’è F‚µR¿àF剺–7c±;¡H–Á¾N!¼(y¾åãàB‚öRøìµuðKÃÃG%jíî„VÁN„J³™Æœ9†œìzcRÑNI "t7s®³,ìÚÆMžF;CuÓ]v?3#'ª‚QÛŒ€F®nêl‹²ƒZ ¥ç&ׯ…s€fq§Ø !˯ˆã~=žEø4¬ÁèDvä£Ê6 ?9‘âFgˆ¯Õi›ÕkáǬ„…%S‡±~ÜÝwFdë-fáó»éé4W¡wÒŒpÀÀë@Ûh6ÔÕõLsÁô ³]´)«°‘­ø]ÇÝ‘•oÏ>àwùFô:ÄÀºP|P`Žßaš†¾S7‰¤“Î]o}ïâÂPJyôZ‘Gá/m½µÅ–k˜ü¤æÓÅpqk¡Ò½xôdŒ|a.òüûV‚—cÁp½ßë ;6QNšll²GdP#3Þ$a†¹ª¥;IT—sFض/›Udd…x9FbWÏ "Ë©›t38–f]¨hµ­¯VÚY›*Tï‚mÔ1KêÍômÄÚ±¶ˆÈ€ÍYÈ ]#˜Ó÷G±-ç–Í?ô:Ë׬õ»Ž §ÿî¡F¥‡;UËWÏ+Γ Å^‹¼À‡ ò§.ª”)X¿b{…QkxVÍ6jÛ¨I{YZ”Ì%¥RtŒŽÈ‡Ê±Ë''ó\fB‰Ò[Kªi@ÐÆŽ§K³*ANRö&eGÞVp.M‹BñÊú¢®ãL™¹Ÿr¨uM)fxfqqd¦ñðBÚÉ¢În”*æ,Á›Ù±\åæJ†L±=JéÚÐÔãÓ$¿9rjËíDvñ¯(˲ëÆ2­Jî2u°Ãă9sÆ#åÕ*F÷᪦UŠW.RôI£VÚ¦Þvbª‚yKvÂh,;|ì¯ùø‰žÒÌðÞ2Ë«_&º¾³ìíŠú¥u§Ë3Pž§§Ðq®b¥RÒı« h£Ÿ=3J—ǤU§ó©Äªóª¢®’‰Èq¨AIë¨hž8|[©I—•ë›G³€¿ôwæëYÃėꫬ²©£|™Ãw±(¯kÈYŸœ‹å·­Ô3Ù)vN¨.¯Æ«mhîÙyµR±­Êî Õ$ÑDSËÞ)TŸà¨ü]aSA—ÂSe6bÌ3­Ba—ø«ÌŽá—eŸáXçUÎ)>ɵþ¢7Ÿ™QÔ%ÇHœˆö<Ìï{>¨]j¾Z²JámhrEF,û¬hGq>L›—U ’•q~N*tðÞÓï­³“˜þi@¯ThˆÀ^ä]ÿwÛÏu€¿3šifQÞƒAGË"â4>‹­[Y5ì-žéD‹ìhØ=·³:H±V±Òì©È©Öä™—q$pï•Ñ©áTÛܯj>ÉH‡{À‡(×U§¼Î*²)a«+/)¤soMÞG–úú¢%&,êÍU3ŠPsÅšmû–}ÃRc«xúu¹áÆ.–í#E+ªºÙÃzqíw©À\Þà¢Ø¡Ã›‹àm·#­¶kªÅ«µ“CK€¸–Lüfw…£}AË!£yú§ÀTD„®KG íâ„v£]õ¨+’¡´“JqãI}M—ý `éƒ^£8Ù€åädb9–¡µ™v%Ær¨‹ä¥&.oèá3ÓJ7È0ÞsòñqáBl*q5a”©âü2­,˯™}nŠ_.^6Qy߬È.<Á0ÝY q|Däš_G8¥å‰`3xêðÅwÔh'ý"béê‚è&pgEš¾CrŸ ÁÚbç9ç‰8D¼f4»I¿éhDÊÔ 5âBõÒŒ©ÔLkj‡£mijqÄ0Öåžs¡ÞA»–ú€Äúa„ <¯wnÍZLœÛCíc¹c‘¢÷#›âKÆÅª´úú..~=LŸ¼ c墎(™¬ ±ŒqJjµòŒÝðÜj>zU/+.b»íƒTγü A;WEî1Ü ª¶À€&½ לDUbÜj¥_ì¾`<„ÀUêAjšÑOÜíÐ×NÄU–ý±ÚR„Bóã¦7cÒÙQpé6£"qGà\˜ÒU™/yÅöàV¾qÏ[‰r=báÌðÙÝoe£ª¨k1ê~ºq½Ô“—’º! –‹5qø‹õŽá³'ÅL[ ûÁÖÝœu$„|£áL}Eð¨ÚŠSß#SI¨šªK©F.¦Î¬á`wÙFäÖ­7&µ“’Ô“¬/á’®-¦^Øßº¶ŒeźEü¼á¹ ñ ˆó˜‹åçKÅë èmJ…4K“Gp]Ëå éÒ…(ùkK£EÏÃP†½A׎½ÅWæá£ºïpA*+áÁÔB^½&6ÒÆW¤ ³Ý·9‚¤hÜ–xš ¾Š;™™t‘¨‰Œ‰¶&,ÖÑT.ƒ•¨C< Ìö0ôÒ@&`ˆmZêÀü*Û%{†d3ºÒ5k…‡ÆÄŒÂPæýÀ¤(³ÑÍ*ñÓ&YÃBÃ/Ãf° AhÛ6 ìc å_kº h ZO üʇ½q;Od{Ù¯æG_ ÇGÑ»Iž R=fR=œÇ.ú­¨ØÚgÈãÚ"^oØ[Ú¤imFþå»–¸î†F­p[ ›¼ÍðÑ´Qñm0cÌÇ‚ú|y8tZ7kó¥ÑË­%R))çµi“2é{Ήéò ‹³œž8¹¬å— „xqE:ómÓ§¬sMü³QÂê—qŒÅÊ÷M¬lx->Oö´ýžoôË«û?µ—0¥Ôš?{q¥ë> Ç£ŒG¶†ØÇ=åÔÛ×™k-P[1ÍQ“Æa0©£CNw=ïT0ì¬Áó;Ç'‚W Ø*w+Pö! ¨ëyæóà]£Xf4˯_ˆŠšb˜v7ôkå¯*‚Θäl19nD¨©v?Ò•Rµ5&­¿=°ppáeà¢Àº-™+Š€nG¾ÆS_KÀ<0ó>¦¥ãÕ?Ý^¿À©g¥îŒ¾—£xlׄ왕yÆ/ûöè|%½ó?ü˜é d‚÷pgÇWõ_ZŸt—ƒ5;[¾'¿ì¦:·½½¶¿£³àÛë<ìWrë<ûñLú9ž¤5<žàxÔå7·2sQüúµT…ÍROáêbOjUó)˜ÔüÃ2{þæ)Öuv¶µØ÷ÉaËZû‘Щ‘kÍÿ¢ß÷õ›#Ékà|ÊÃÁf8LïeDÓ H HDN(.+ÊÉšç-3^ؿѣs¯–A2X²e /»­Å(g»)wò$‹Z ¼õð¨Fƶÿ¢t¿&ÅÈ;^ßíþçߌþê™Ö½~ù‚1üß'g+;;3ÓYÅÅ*M˃!ÕÂRË @özˆÆxё屘  1×~ ›£#ó¿MŠcø£1A+x7ó®ò²ê®fÆÏ·ye\«¨ŽF £9 }KMrᡵ柒%K¢5wd ÂhdÄ(@™Ó‚ÊËų΃^©òK Ìð"”Ì]ñjªm­›>,Ä\듲È8yq«·$Y4¬iË ´rŒf\‰â۟ݦˆ<äÏjLë…,ƶ®h•Ø´{† Á¸ ·¨q?9 Š‘f%KÜù:°´i›ÁäHQ¾ÉŽ-^ºÂBóP«JML}]‹kþ×å°Û}äÂ÷ý¨XýŠéxþ§ ‚M_˜°Žt.Î->½Þî{n]¥ °çàxÕ= v+ ƒŇIÑ0ùDìßÔÛ“›nlXè.-ÑükM“ìÕ›S>÷ÿ>šËýªBU#±ý_ßBMê¿í‘þEÀR«a僺Žî_ßÃF€Ë¤Ž§„bKE4Ý$¶4"'' ɩӣ(sÚÈ'ž†f o'¹´Ä¾ë±”R¶°f×ÊÖh;Yî{á`ù#½ýÓèéGзãs¾ÓÜw¾ã3ÿù$H¸êö³°ã"4â¨À4õTÀò0%! ÿάe75»ÄSDzÅc×Å–Æ¢`+q»woâÑ–— ˆƒ ªS5FQiòP£Z§y$÷Õ*ŸKg×]„ÒG.®ŸzÈÔ[¾Upyrà `®ypàÿvU;\mÄ;\¾q0Xyê { ùšOq<Á°ëŸ¡³æ±,Ozæ'7/Oàÿ‰ÏtFûãN΂úèKŒOÈŽª>åüÛ‰]puÕAŽû„íÆuo%.WJEçäSÜ¥É}jj”WC“úRA버µ¬€½%åV“›u´ÞeÇ{K~{Ž9l:1vÏ®$ÅæÉ?‘ Æs›•4m(Ž×îP«ÛÏÓV,;$ ŸÅ­Ó‡I " ëÞ3Un1S¶øïZ‡ÂkW&!YÒÂé`ÐLf³i{U5ÔœKÃ#ýGv+1B7§lç6é]vKšwe¿¯Å=dM´ØŽyŸ¦Ð±Ž:ìê46N–˜¾4ɱ §í%²r6‹{Šú¢¼ E}~õ?,0™ÚLµc©CKÏZj:Ñ•š¯“(ÛZŒYu«õqnÏŒq¤}2GµphÎ ÐÌæãmP– £‰ßV"У•¤-:6`ñàJÛÃÊå £€å oóÄxà/Èö@æO&RDxL ![Îö¹20ÿàßÏäˆê€õF¾§Ê¥©î„ý†nÍi𔦥åõøLÚ?hï÷©®û‘´o²5@ø N½!,G/“¥ÝŸïug|.ï€û†úm{Àè¹<`ðè†Ø݇ë E¿â|St¼A[NööŒºÅvê°4Äpéæ”‚Š.P¾#Öó·ôÓV@—»ä8X]Uw0žÇ}ã@yeó-Yøý“ËVV ‡˜¼+Ëš;½ã£Nˆ[9üIŽÛVµ¢Æ—7Ư³¯X3õâÔ­ÜÃâÞgsùN†yÑg7‘J^ËFŽgCdׯÚÀãhç¼iï Àá´ô˜1õåÄ1è#{‡Ù´¥ t¿}–üÈÈÅávjÝ—ÊuIdaȬÕݼ³Þb6:cð0u¦eÆÜ9Í@}°INJ´›:§–ȑӸ-N$ŸNŠ~ù`ãFëÜÿ®ê­Kܑͮ0iöñ?]¤y=L¾ ÁÞ-°“Ë›4ÍHk„|ò·l6$^q'½—šÓV‰‚ßÞ:SÉhÇ;„·Soƒëˆ&ôxã×u¤èêNËC{e¹âh~®µ†*§Ô)8+W·¹Á'hG±¹rJ\êH‰Ž9»Êj-÷y…{¸4álKdཨ´¡öq^=‹jeè#ßæ;p³4ÁÄ=B&-²ÄGq.Q«Ì‡T|®î–Ìûmª‰­õdÓÃú·1¦µ56Ù×/©ßs«,ÉÌ’Í‚“ šÏ›ífÐ¥g¦¸Ç£,~¼Ñ֭ͽP›p"#‚HĶ@ê®J†ÌÝ îdÎó6³;Zp@äø)úŽmq€«ÂÓ ‘½„]Щ¶XA /nÀñ-ža{ÝÃùâE?`Îؽ°ïÛ¼øh·&`üÞû¾øx´ŒoƒðÃ8]X½È‘zЍ,ÿ|y°d}3¼hXÅQ6,}<.õÖ”Åw_še” {c;Ô>ßbK»5_ 1?'qüº|²¤ ÛS~Ǿâc¨@ éFÑMéF1¥ÙI5{åN¼Ø" ³N›|P]ñ# d‹5²G™$ü6/ï««ßÁÛûu¼¾þhŒ S2F=GD<ËWLRØÖ7T˜BÑv‡ ê8Ý>ƒÈ•­V}MÕTŠ•ý¯¤YpìÙUÐÒhhïßpÚ ƒLo?¢(Ñí%¬­^ZÔ ŽùÄ)i Ùp»ââè,øÓ»l×Ý)X4j|ÙŒP^3uÇáX©žø»žŨçnd ¥‡…qÐdì²Wql"÷“UͩƉ>+ÛÇ«k®²FÚäøñ̤!ZÔ˸ýüöšØŽÆh²z?†+Äa¥a‰â•i5½G/%q+ Ë@c– &(h'V†fÕ-7owº9—&ü‚‘¾àÝ*­.4ƒÝGÒÛ I‹X] yñï´…ÊÁß"<‹©ùË_.^·âÐ`Q§Vþ›‘RÞb@‰Å?„7Ⱥe¨IÉš™“1ÿÏJSüŸF«Ùþ[ê6Õkõ2‰Ú£âˆÁŠÈ¥DE+{íN6*V“éy`ˆÿåôËÕ ¥Î”¹ùj¾×—û¿Î ¹Á@‹Çá²a<‘Ç•‡šÇR’U+ ÒÅë…g6ý8âv‚0™”PÅÞØy㲯t&NJi$Ryî5t/Mœ0SÐeàs™°#Ãʓŧö}ê³€°Ås¿øm…–'#u%g3c±#,‘¥á»¥¤¯ÌOC+ˆ=duÈ…¸ãÃæabžëUÂŽ˜hßý.à˜‰Žœ¶-u²}4¤tO7–·]ÕÊÆÇû#˜PøÛî+ ’´)žN»ÿ]•ŒZ[?&™Å%s³Á‚î„Êœ½#žoTy'¼je³1ŽðÒñîrP[–"¤ŠÆDk_Cˆ=‘«¸ûæ2]\ÇfÅäÌðŒ:»ƒa,MÈw–@m±d篜BÞ§üËD}Ü'‘‚ÂA¢øÿñXÿ ´4v]PÕгKf%@ÃЕ–‚á A¬íD%aÂÖÑQÙ7vZ;w€]9;'UÑÑxHœEH ßÇAÈq'0tQ ߇0lƒÏ¼ù^æÍ›³;‘¤î×¼'Þ~Ÿ¹û¼n¯‡}‡à72H/Kóm ˆ™`püVCì½™CKrÈjG~x‡S"ØY¶žd€ù…AîHV~jú©ò´zëRÊÞpi™-Ênš!¥Ž6µ’Jõ SZ ¶4:µ‰·ìl\M¯UA:a^:¦°¡J~®-íj¤fÒ ÞF­˜Ø¦¹©rÉB ³©¾BÒX}QF]Æ¢‘ll¨‡™Y;uËÒ1q£¹iµª®â½ 2ÁKn S†µ-2Ùd¿$Rýw7‘t×7fW.s:œ3™ä<lWOèö6 ‘Šc;[ç[¤Y%€aÐ2^¯ÉÎ'Ê8¬ ¥È*4Èêi¹`âd:ìi²† VŒÁå{Uë +œŽ(ȹ¡¤dl¶Èò…<«—»~iœ†´Å ý±–'ÃrÍÆJß¿`HÕ ³š·Ä1³¹Db×#±½6O=Øâ¤‡°àº°ÏÕ[r‹1ˆ \ ùÜ}×G.É1ƒ[Çþø7|½- h³«¬Ñ§¦RÅëͼf´:ùîb[Äq²ùK›Ç¤m•«y py\S™%„¿(ßë«¥8ÖÈž˜ ®—Yï‡!½4Am–Œì…¸-eq¦†ÇyE×ßz :Õ]W°– éw9q <ö³èM™–üÀÆ®V ¼GW­hªì´½Ö)4ç¾Í¸Ûüu¶–84Á·bÊÊl\Ò«S3qªj»«ëos[ª{ÄŽÄx’§KÒ ÅÆ 9¡l‡_ÛùúÎÈ Ygyp¨<À5™fN‘â¤ß¢#Ãú}ˆvÍÍqºóåî±o¹p†¨|`-`ˆÃ¤;©¾)*âŸMž žvNjœÂgŠéLÂLø¢óÉFá!B¶.üP¶_pÁqÃÇAÔÁ·Â”$Pv§¡îòÈ…ÐÄ…zÌÒ–ˆ7§† ϰ‘DÅRÎÉúÎÑL;j™ùÄØ®u¡êæ`œÎ“-åÚ·›î1%Û<’LšU.\ÖÒü8¿dÉØüÇroÏEQ*ïAéæ>4Éø0ŠcÞ‘T€™>ëTçÞƒ?T¼€š Ã{À¼»ix0q>™ø¨a¾µEHua$LntàýáòŽòŠwXÝ •…ŽFγûæ‹BQ„(­.T˜8êRý”BýÍ?ðˆlº7ÞÃíĘúìÄšÑ)œ7a2@ÇÛ¦r‰æóÆpñ'|'‡î½%M|‘ÌJθ¨ÍÈFŽâ†Ÿ?~…¥ÃEÉ“‚Öe%ù»T}ÔX‚;`£4r¾œ‡Äïò–‰â‡{Óƒuó´aˆÉÇdPß{iXÿⳚŽÜK‘Œ]ùûGl4ú-whï9I1Å@"¢ †‘5†›9ÖÁ{)ÁÀŒ:ð­­œŽ¼¬>ð@þƒáHÞ…EF¢Þ¸¿Äcˬ±)‰êÃy8”ÐAX!"¢¹ÿ‘ø’kü¢Ö ¹uZŸ]ô‰¼Ä Ò=ôðÃ8˜Šåó¦XµúHÔÆS7ÖÁúÝ º‡ÔOÿ‰«¤ÛKoúàì²oîÁ‚´OÌëè,(´og¾±MÁkxö«îûØH>óçßö]hÚ|Wÿ0‡ÐÿðO3úß}ÿ«')ÿOk¡ä §ã¬”%ØtŒ«²v]¤3üPôDðKªyføh]Þ&΄yè¨P bóu¥a±…©ëÜMV‹9¼óú{A >Ñu øl·ŽŽëc‚6ßÐ? Ï "Ž-9–C±ß>B¢‘’á‹sj<¾¢üê•K P6µýõÛ”º¾½©¡¥}Ò§Ñ+g Ø ÑbÎ$ÎfGVK‹÷ªB–¯Ç7|4cV®Æ™’z¢9X•¢g‹×Å}K,˜“jÁb™c;G•xU) SÂ*©8Jó¢áf†fòrωÏÊÈ^¥ŸiµbšZ袿›¥è$´–†Œ„,JICWÕ?hp¿ŽmsÆ›ÊkXÓÅ} €¯6`Œ‡ýA[øZ@]P¾—i…ßJÐ,BÑiåͧ7‘B­§=1暣øRÞ›ðC¿.'\ìlæ$Û÷ƒ´Ò4wYê*§Îy|÷0¹¯ ‡`x÷åÞi¨ ¸¨ ø„4àsmDÉé[öŠ>í¢*R=õÆYö±ç€ûåÌŠ}‚®ž>r+tþ&{D§†ÍtÚy 7möÒÎ\9Ÿ«Õ8òXàÏ휜cØ+¼H´qd1ä›Ó[stšT† 0•RLpøÿ[hn Ëx}Û?TÓâ?/IÿÛ§ù×%©êµÂ²"ÚÏ.­#¸\Ù x. Mp=Ò9,ÅoÉOÏK†â’–æÞåÌ7 «"C¶ÇbÂÏâ˜sw† ³ŒŠ[¯¯¹ûûù{Áýª£LüvɃ66¾’©«iâr¢„Ð8Ý™ëïLœ(œ;&2S{É}÷j8‘S¿ï¸ljóå¶‘…vÛî6ß!¦,îË9{Öõž(C,ªí:Íz¨€ä{.áÒ'º;[—}uïi¬d÷E:½ ì=—t!d¦IÅfüÃlÒ&ú°ù\¹ÅÆNbRt”óÖ¬§ C±32÷ZêÏ:²eMKRWÎ'ï:Grr}î´á©ÌQ&?€& ‚®2od¥çz¸ žƒN)¹íçκ£ÜH$D]97ƈ,™¿ö¶Ñ“F~ÿáª|Ívõüq¹‹«\‚á¨/È ŽÕ"'xˆŒé)‡[SXz¸)h\Ç3¸Îå‡S àë1ð”ûë}'I§ÔýÙÑÓx›U¦~+×,ã"'ÏZyáPÖÍÆDbF’5ÈqfÕ9œ;K “̇$èDÍEpƒ};ݤX¿ÚK¾9¬Ë.úµž?¾¥÷©³DÏ$.Óò&¹×+)±M§î«AýJVÁþ}„X­f6áé»3çF6€Ê®Œž5p¬äŽVŠ9é’fÉ'°…]ôøyY“á=q¾DŒIòžÌNÀ0 i9…8ë‰Ã=(2Ü;ë…‡°­Zê[Q(jðWž™˜5FjÃY¿xøàÀçÖqþùÝ®ºÍVì%¤Ã)qÚÕÓÃu§êD õ_†_–™q§m3· í»ˆÍ¯¶ëé`æÑ”ñû-ä Õ^~j&ýf½ÎMnO𝮗•DšÔõ†üéöUó!¿l3]žHi‘m÷ýx»IÇYž†ÜsòèÒ’©ñ’mÃwôÍ&½ ÚÞ߈¤ŠaQ–õ•º­mQrX g ÷X†fï„Û…?ºÂòð'Ø-6Ì94þ–}Që…×§¢ëôØ-üœ ¾¼)¹/þE¿†5È’9÷“îòž'ÏžÚHš «>ÚšÏeö8õèü`{ G6ÿðø‹ÔmF]5$®«CŒ¬C”9Ž hùí€ò­(²6ÉÁÇÃù†8Lº Ðš^s½Òæš«¼C´5Ð'hÓaU Š—{Æà§ÞG˜‚¤‚„9Ž”RÔž n´YÔ â Pû 5@¢dD@áûB]vLúÖÃN25÷š· %ˆBª[ýëxï—ÒC¾Þps?~.UÀ¡ucÇÓLGÈ)‚¨›Ô»gP2¤2ž“Q×|ÌV zp Õ£®ÜöUê”ÞÿG_{-¬ç°•äßSÈ:ÓÜ7Ø“?y@¨OÔ¢•§«N³Â )s‹?#ºõ¼K:ãÒ㉦Xi4ôI¾H`ø Ą̃êåMÐ4œ`Ät J`‡ÇßÀ"ØÀIäÈe•ŒsÌÕ<2‘ï›Ê‘ 1{V1c÷À§òbß³3UÁæ¥Ñ3â5JÌiúJ¢o*ú‚Û>`:wIc~Sí†åw¬… –F¿Väò ½å;<æDð§nÚã‚U.¹Eöô[Óß¶dµ-¬úÅâ¹÷\ò`;â³:ðwMƒT¨Y¸ežL³¶\GÔšçÕ’ù0¼¦‘5ŸéXEÂÖàè£Êmî¶ŒIlÖµö'fæÇIÒQHž]æF¹ÅÜ0ÿgj@¹|½mNØÜÁÿkãY¨êO‚QÂþgöóÿí`ê:>¨bXþ”rÍfZÜh0m[ÚalrZBH'T+EV!Ï/¹e:Ãö¹ GÐó£:ž)+y÷=áo¬¾¾¨Æ[eá° ,¼O³¼û‡_}Y~>>ô‡( ˜Ú`¿°Ö‡ÝP9˜öV§k"¡e­µæäP»ò"u2X˜c±Q›;ìP^ú‚¸A ±ÞFüc.‹|m£còü¬ ï°e]IëÕ0àf²/V3ô{é™ ¨ÊÔS~9´ì·GY0rk%Ñ´˜MLËO£» ìRwÊS-dê9ßñºO>FýIÑ­Ÿ˜•òk¥"bÑÕuå×ÐÃàÊ܉ؚX¨ùå»’ŸâÓ\GIIëñÄ’áþ›¼òö¼œí¬N=Ì©õb©¼0V›šª›{ƒ»öp<ë‚>ªÄN¥«`ÏǦŸóž·ô-ºW/ºÍÖGÉ/[<–8ͱouµÀ|ŽË|þÁaé×ÅJñØ»TOWøS|5“¤aÂëúiú¡r.JÖáe¸Êä†LpûüùFq^¿2ÿ#Üôy–W¤£’§)6/ê°„§¿•uC ßoÝ¤Åæ_±7„Œ!ê°›KÀÖ§CoJ=ïdLÎ#59;1ж‹åGK¶NĦA¹2DU—„¤'Z¬”áðï]¯OõÿûLˆÿt[ù?…aתj©üCë¿í1—P-$Ñ+0KrÁ¼0 š•îŠm´GÐuÑà×Åvä€ÛßH“îÚyA̱…§O—TÚy}ü½gÌ1TY½¤Ýj2{ªì»+ükr^BÔÉiHz.3ÏW¬1åqì2&‡ ¸Þ(£K™Õ\·]êêk ©£¨Úʳ¨+¬Ï4@`:áov*úð þßÑ"åÝùJë<#4YÏuf¾!ù’»—Ví'f<ÃGÝÁS\HA’ÂJ#É<¸‚&®n¸c;úüKûÑ6Ý/nÄb§Â²Kt‚tZÃ8aZt—x£ËŽÖ¨ân†ÍÒy÷?戗)ê㪖ïCæ!Î[,J8¡Ùjf¸–§1$vÝ0ÊÂ,Ó é~Óˆ+óæi²‚®Èi÷ÕÅçàAÜÕ€x•Ua8+èÞ TG!þtG~ÉŒq`/èø¢"#¤xlå\w-a.¿œÂøî$¹Õ­$™ëí.q¿œ‹ u´DvÛNMkö(b§%$¦‘6×{Ëfl†Ò¥\x±ß¦´Uý‚#fûÙ ÚÓ˜Ñ='Å·uá[…ą̊êÔ1±Íyþ‚n½\ì÷3›†¤kÔeªm'–¦êuüzUå¤Rc ´ïâÊgÚ&+,hÍ—o‚Z`0ÿ3Ȳ©ÕS¬Úò‡HÒFPØ5êˆ À~küÝÌâ á皣B &`q Åp¶GŠ·†<ç+J”þSÇ JéÄ4 v_hÎtÃ+ÍF¥ðƒß…'ä*œOfMböFMq&-DÑr4½¡%©Þ1ãÐp%<ÚN›f`DÜѶ7–<*ª7ÂC -H5Mæ;·æä h ÷ã¨,´kKîŠÄ{bDúÄøDšÏÇ~]Êz,Üü·ôEûAì©0ÌÿEˆæ`ofïʨlæhfäªlfojæüÿZߪﻠªañ·ïš/Ï*KK¢‹QE@—Ö•@¥lH³£ÙRAuÉ1Þ®ÝRÜØ¼êû>nRê›>—2"3®^Áǰjú½¬ö‹ñy$—QW.ÇÉy¼îÝû Î{ôÉ}žŸéúbì1-„©\¹óD²RÃÔÄõq2[B9;É’àÉÜQ„.óŒÀ0•;"©Éqö rÉŠqÙÎŒ–KÍ%œìœ Pîöu[þ‰k:Ÿþ{êÖ?¥W û\s¯RÐ{'e8! …â"¦·“Dxõö« X[Êë…tÒ˜2 $,õ·¹Oœ Y¼Xе¢fG Ò¥r(Ðg}ÆQ‡1E„;ªÙJ.Úq½•Å݃·ZûÖ€Ò™ç·GýTÂî\æé¡Æ¡ƒ+~¹)=åæÃþW( ZaR;|(ÕX2¢ºÆ«F:ÊyBíëN{w&dª1ò¼qxÄm‡é‘Xeãij•€ Ñ:ÁZ60Ó]@'(N …ÓM63âñ²&«ªh7RšL«Y܃?ó5‡‰9$>Rª±ë‘ÉfHBJbs„Œ‡*&UiÐ.h÷Ú]uÕ…æ¾ûMt¼œB@$>rÞI¨ÛHöÆ2mÄØç´…–a›~sóê™XR”ÀcPE‚rsXåZPøFŸi«bÃY‹²ÄòÁÖÉÄLiž8P÷B¢dÂÁÆ¢ôwÞ>¦‘ÿÚ:ÃèlÑ0•dœuöfï`†ò¤6ê¹ê®ˆ(€÷®"ÃM\þS£A­l–‡FÛºÓæ1°Díü³·ŠT¢“ÍdW ‡cμKwzm»-q°ôÿÜÈÒj.æÍ®ÀáòáqL¬aÉxá’à¥Ð·»äS88…ïñQÛœXæGÝk¹žÅªN™. ”²¯{'L…!Ý£8€(Ü»ºc_˜3áÌ;NÏ{· QdDÛ38¸cKºûA>‚dÐ~ ¹‡Èÿ…ƒÓ¿ìîl¦žú€âþ8¹)Èž²Ü£j;Ê…Lëh°n…ô9v) ñkñ ³‰í†«¿iÒyŒÜòjr5¦78æЖx_Ú"ÙÒ~ Eáž]Ê+Øèâ_7oÕÂAOò»ü³Õ9ø£;ôbd®™LÞ•¤z~ÒÇiGÞæäÉk½ƒÌ@.,g;óľô½‘µÅjÀ^¼‘PŸå Õgc.RÓG€š®ÒÐc•Ò¦¿AëðÎ:jC—-ñÿ<ßëG7Ù=)ü(ÿͤ”Ñøƒîj„ÝÊãcؤ½”ûyC.±$eÌô+æ0öŽAºuM¶hÙ¶mÛ¶më)Û¶mÛ¶]æ.ï²íª]Æ}ûv÷DqúܱV̘ëߊÌ92sfæÈÔXä’K±Ib—ÔmQÂþи†WÚbc‚ˆ{þx#äñ{,Ê;Þ:ô @©åfÌW¯ëwéäoÂä'OtH«]‰¾–'§È>ï =V‰à?Ÿ"xÆãt|ÃÊÖ±î0ãw<ôë1Þ˜úz:%1ãk”ãY?Âñ¨t%2 ì‹í–»ü‡œ»ƒ«é<º‡Û“ÿ^UÉ‚UØ]ðÏnèÿ0èç?aQ]ú?ñ_)ê¸X}˜a&¤P‹¯˜:t¾àÂ~þ¢'éFÏ@, »(++•¡š·=`¾T,ôÝ<€‘yÆÁü&þ HT R$´“GÛ‰›}&ÓV™n½Ö›WC4@óRñÊ…ž‰hÆÕ+½¾é¡ ÷Y!\\]§Ýà[ BJÚš~¶$×T«Ïk‘Ê'5Çoh•"` ¡£ß:BØßU&~$o¶êäßR» Zi @@—@@ÿ—ÿ)ý𘉻ÿóõ¿: Õ6Q%‘øYu´7¡CF¸wà!aIG£('CQNŽHPÑσ›$ˆžÔM*VkaŒ{a4"èhˆÒùÊU® "•h’;Yùù~¼ü/‚»ß@J"£cÂz®L±²tú'€¨Á{ç°Œ„ótÕΓÁ17 Ï·¬[icö0\Ѥ5ß"Ò ó)Y‡MUßu7­åMžÈèKº]3'm¢sHÜ÷¸@*Vë%Äò Ö4ë/uæ-¸úò’F©h ~£×ÃÐí‚ë‡KUIÿ´ÁµÏÁ 0ë® …ìë,?î±AË ýhÂ3݆üóÒ[í86Ò4ï•þûlÓ²Qr˜JÍ:ÎXB8W—º“°¢òÍQaçi÷ž=‰UÃDàˆwÿ€%X7/Q#šŒ[U_y"Ê+–ü¹kãé²r»¥(þ¾ø÷}ë’ßµœ•ORšŸL‹m¶@åv9ÇŸªA®u!\€.øÄIä;¸Ôâ·-/®m>—Û´äŽØb8¨ FEù–:bc›ûWj/Ü ¤çZ¹uŒR‡•cibMå÷‘hc÷"‡©s52Å5öéœaʯ€Zik9Ãt©h·Æðü:Aʾb Сg¾ÖGì=lìþ¸*+Çðàxwó÷] –†{©SÐûô‹Ýòs®§ 6:ÅÇŽ!G²<6 Ö+žù¤9ˆ„[‘}È☂Ì) ˆ™ ¾UÈâ±êÆÏÑ„H¤?´Œý!‹÷üƒèr7…‹™¬¯ßÅ8Q(_óëJETÌ÷¤¢É"˜iƒo`cGɲ¡L3‹<¥r¥‡¥rcÄ•­òÖcZa7–Âæ¥®HÞ|(7.‘õÛlMnƒ%™Ç’Ù%›°bŠnÏy|‰Ç“ÒÇcSšÒ)Åq-˜,†—”Æoê_:eýÎ&-õŽ«@¯¢!øÜÿ2ß\¨cžíº k;M6ýE‡<+ÜÙ£8THºágѤ'Åïøþ»ƒK;O†Å„5w g‘Ü'RTÑg˜X¢£`h{axe…È~²n‹U)g*¹–8£™…pyóÈôЋ ‰íi¾Ìåä“çÏσ×döKCý£ Ddý“Ç×`39z¡qLqU±Þþ1À®ó:‰ãGm úÿÂø·“ªjì0Su5vüëœê:àŠcñ·Íî)½Ì>:ÚE•’ØfŸÕRš±§³éc]êÅCÎ ‚ v‹‡ß‹íXÂ’äâ,­8R'éܤ-êjdÙfëv=ì%>JME±ÑÕÖ=6NÕûTʳj½2³ÐdÙPØðdVˇ¶4jm•^zOSì…ù‰º— ‡ˆÑ [Õj¹6V ÷DJ×çñ`›Vš”à×NAB’÷Ù5«eͲ¶à ô“.›%—`¨œwdØž ¤÷•AʦXÈg —nÝíÝ45µOõÓy8DMSA¡spa!©œ½Ó«Æ;ÝAV¹r#Žp)ùC-r”XøãKù#Ê ’Xòû–8¸®Üˆ'š¼7ÍBLf>æÌžÏû.Ø›)ÅO祲˜\kW¥æ.a&òã‹·Ü~ïD]ý_¶þóæ¨XF†Îy„ ÔƒBŠš@ÏB|Œ#Ç(k3¿Í€ q>B6Dަf”o¹þN¬L`؋В99ñOÌ>bµ!u$¢í ù‘Îüâ¢ìþ©Œ–¦Ÿ?SLú4«ІÍ }Ÿ3a‘i}EØäêc ™ù~0Å4Ã|¯*„©9:ÖËØÛ “Ý;ÅNtÐG%ÚåDµ/ìû<ˆâ’Ô²iò¯ª ó×O$ÐGBù‹Õ¡ý>ó'!ì fÁ¡v..#©ê$h%cYÑIRËh;êà `/Ö‘MZš™O2莒sçèŠÿlŽ›3 ýÅsXTÑÞ䀻ítíïPh{£äŸ_¾i+‘úvÏó ›ëEŽõ—E†Å;Ry¤ê]4R0= Xñ3ŒøžÓù  õÄC!sÖ“™k_vV7áQùâliJy<‰üò Q¹:>‚ýWG¿¬îÏô4S©²´üÇnðü+Üìqð†pºÂ¼–^‚´{MÑŒßî%WŒ ÛóÂ’£@d‹gô†¨'bÄys¶Ñã¿ ùAó"w&Æšf¢þ¿Ã¡ÿbàцöU[Y<˜ï˜=H‰ˆ62“Â`qˆJ±%Ï’‡›¡@„g1± +]‚l¨ÛÙ¬ é¶©™ÒÛ3W´‡m4løµ´·ÁÚÙÙÙØµõœÿl½œÌŠ€ì¿4my¬µì¶l½½o* ÊŠ=¶Qlüj)ËJ‰*_qùSã5WFàì”ÅöÈ÷DÌrìluÒã„§uv2½µL¹=Íï ÎøpgbPü˜F0u ÃÉÏ“1õÀb•>íö¤!sK“GëfPæ’Q~gUíîWkx]ôñ†STªqjã6÷²@gPâ’7÷— {ž‡Ó»24çhÁÍÞ[«–§ÃÓ²_‰¯@7ì  Ä&nMÖ¥ÍnÑÉÚáî.ÎWc{œsú>nq“,N1<ÇÍþeAÄÕCêp¾xr+kT¿W<;pNà3'Œ¨?»Y¦Œ%ÊÁ¯6¿½x•x)'Y†™R.‰á“® ¶[O·3›Ç³K£¶]þxM°1x;!æq{Ôst·ÍsûÛ«!·_wìEÊ¥!‚âž·Ì+ƒí6½ëEêÑÀj‡rÖoq‹qÛ¡Ÿ¾ïEö1Hî›HÊù;1Bp†0i_üs¼ôÅéü¯ŒCÁÓ³Ï+ê§ô¹ßÔâýÈrž`Ý#0âöPAÒ}É"…|Á\‚%c€F6%ß'·•¤ #Í[°·aêIâ\„›É6å¨eüÔ[Ehá·Áž)áÚ›Už"rŠ2.Ì©º°!ÛEBµqD@Æ@‰w… šéCë«û;¯ŽIfuOuSUSQw‘›©®*»ªÁ¶Æ®‚¡×æC”8HQ}™\Iõp‘å ftÝ#¸# §Suys{}uMwU›©ßáÅOù$ÌTýƒ‚a N?ÿÖ>bzÃó¨ïßEP¡ST%–ö±Yݯkfmµ,÷w¹,˰uÇ8(J9½é#w‰¯½qdø-¥úYþ¼<<¬Èše"‹pÒ †HÅt!&†p¼G9E:$º†·éÕð|£<Ã5‚‚khjÿào­V<Ôí}¤#íþöö?»×/£Ñ(&£÷NýR¿:z¤‚èQT¢åž3%(“*ÔÈ&tÜ#Lt?›„x_µ0 ÀMhýï·Üöêa†‘@@‰DçŸg¿¥j\”¢¶n`ëÅAXÚ)ð›è'¬V¥ 0zõ¿µâ|ˆ:s¬äî·ŠÔuqè¥CH  6»¸õ‡ê“/hÎÆy0äñ\ÐÖ`(yˆÚ¨ÔÏ{·u¹4—/ÐÐ Ãrçâ_›FÛ‰µÜ.uîÁå„°ô©)Ëuàʘ„®\hqÒfK§&8´<–w’DúÛ„c°4µ!xŒ¡¤7)²ÃâÔ‡€ÐÔ7‡Z©Òjž©NvÑi’”Ó¸µxJ7r/€–bc "$@…Ò6o.ãÿŠ}ÆEÑ<š M†]™î§–)‹˜/‚ãàŸRŸÃ$H“9`&Fr‹c™‚ –Wýæ`µå×RZ®ê½ ¡×öà•₇:³xCÚÆNÙ"m§åÉÆsš`&Î/©zõмr’-³··ÀNd<[ºMÛ„qïÝNîSÀ†L 71àÃÄJ}]Špó< n° Žã]ã¶D@ñŸømE•+ì<šŒÅAZuçšüÂ÷Ô«_ðb+®Ç †D–ݘ}¼(À@¾+eÖÓŒC½V1Œ ×J:`ÐØD`Î!6›Ûðt7¯LÛ³™Ç³«,`ƒÎÇr>0¡Ó6¸5m=â*ÎàÝàØK¿`€IÛ´t® 7#WÛèìmÜ dB#Ä·SA!$ýã[qJ÷Ç»¢9çðÃÔÂÌÀTҞĸFÍç:ï÷!©šf /`ÆSñ‘S›m#ÿ(È^+ ¤a¯Ä\|’Çz<½ú|b`Œtã¬Öiñ©€rÍ£wk¹JÈ+½q«±ŽúhM0¬Ào5+×tÏ5èAI­µXš,®08uN¬úYßa“Øô`üÒ·YåÒ@½v#Ã-j·8:³Á¡Òa" 98@·ˆj½w=ÞÚJÊS-âð¿k–†*Ø3€Ø56'ÌOwT,Ý6DMô¤é·Éo´]Ø=s Ù)\‚à—I8ÿŒšw&6¹éQ°µ‚ª‘¯ùÊ;)—"Ãc>“æ±¾“(ò›/>a¥bTø(åKGUœÃAÅ7`}âhŸþ³¨ ”ÜwúúˆÇ¹„_N¿é]‡6ûnÚ‰D@Ö'èwÑœ ËëøSóã½"Ü;ÞÞÃô§jHÅHÈÓ[çbªoýxQÓë©ÎÀðÓkÆ'm^€Ý7UB€(c93³™çYÅLýB¤hçÐúæ+tß Ûíbr@ÒÕ-œZ€Ãá«&D^‰&œ¿üúió«¢V!ã&ü7ë@ý£!’å¹õîç›8B8Ö'§ÿôÞÀ£ ëwÅÐÏAî'á7ãRé~)Iµ¸H½˜­$ü;ÏÃn¸»’Èo©úIn:K:Z]²ÙŒ#þ‰¥Áºô"n×Y+K66}—Kò!Sb¸Ùì_ö­tç©ùÄü±Z›8zÝÀ£ ¢µ‰C¨>1I'p¨'©ŠlvS3_äî…¸wü>ë…œ§ô¢cÖ’ÜžeG+KÓÐB»Úú8ÖÖûOÃü+´³Îö?gN§ÃòåfƒÔÑìÝC¦BöËV¢9ƒLáNOÝõòl­Òfb1÷4i p- Àaz•²ÃEˆm$ÉÚ¤û¨A3>þÕÊ]ÜxQìYopÒ¼”³ã¤ÔWp’¸¡™«Ê‡¿PIe“E­n²d¾1zM©–Ù™àë–| ã-ƒ¹žèir°áqs#kEK*7ÿ£r0u~dép›ZIÞFÌ2ôˆ5TÆ@}g¶Q²Nvḛ̈hšçT´Ç˜¶ÄMP}bdUy²^}ë…Çgé3]>1 r®1íÕâPí‘·o%M¸ã8Øoñãƒ2Lé Å©•¨QuL½º¾Áj^  9|µ[‘0”p»Ñl H+\`«¨ö,v›Bn;¶òz‹ð©V Dõ&Ä4Ys×£dâö¤@Úƒ]‚,=>Mâû(möqyê²´ºHê?Ç›ë©Kaxn?µ·Ôxà£ý$¥üšA~¯F2¢ÁWÖîð5ZYÕoïßäNMœ–YaVG_aý]^FxM+ŠkQ“Í»‰Õ1Œré!®±ûަɑöÓBZ’¿o±N˜hØ©‰èØsšÂðì•"‚ȽóÎ>‡Çô‹9,]µ¬2ÐÜÖÛÜhoêîêjʪúLNÕ_¦þKì‘z_·olo=›QAQ³\ඇóŽM&ÛëôŠQÃ7ƒ Æ,å qçZ`Mº3ZqÝÂ/_Rp;Ô–f•K#e8 oxƒ ? èê6vs{;¹H/ O·ÆBaèeÄ—À]ÔóÄáÈ´¨ªêãîéw´w—¹vOñøî×ådãÖTë꘻»lèÝíPßWNH;û<¦¼0岊ºš«VÑNyÐJiúͳÑmHac[ c¾úǺ%yÇíÍ:ÞÝ=ÈÕC]^õvw@¥cˆ¨Ae`·J øæ@Í­tî‹Ö}r²-)Ä;„ú–Û¾6mQf0ñµøÊaUÊ/vñ¦ÿû |k†…SpMŠ~Ù*kn.F[æÜxXñØ#"/EPGÀX^Kþ Š•&ÝS¦Œýa¶–\‘l ½%¨¢YÁ-÷{/¶Ôظüè|¿Iz—ñ¬˜³Qßç®÷ÝVÙENtù-ZûL[?nŸÞ·<õd­¨ÎF`ÕÜë%!ÇSKôLëÉÐ:=)C•Rv,K] Xƈ>*6~Æ5Ù ­¸ +‹Ýßœž”á7qª¢Z“o¾.©Œ¬%ÙÓ„›Šî“,é¹õÀ6;}±,;·p–lÊÖ]ð  ì/ÇéÄ·…ÓÀW¬ƒ#º¶è©#ÚR%¼g3Üæ?´kq^Jò„–×ÞØÐØØÓ‹JœJÅgÝž•»œ 6 Jί”2âç$£ÔÆ ÔÞ+5²ThuUX Jù»W ŸjDɘ’Ã8<™qBF›—2»Wꇥ@ÐÁõ]7ç,›§àÈÄ¡_”' ã¶óE“ǘ\aiËC¬ëd¾ÉЧÔ!‘2ü;¸m±yG¹qÇ©/‘ qálÂV M9Ò&¤_:4®yp.Q3·ŠVŽ’bØ;œX®žãBÃb?y¢4Qi_{ãôºÚÜBø 9øöãLŸ¼ÂJ…à#«ð›Œ})$k²Om_Xuƒ‰×+°¼: 7a¡µ%5…ó kÖÒ'¹üo,+ù[KA´·ÂL2h˽CàI%ë(†-H­Í(è‘:,w&µ-v¡ \Xwè7 S±>Òš}乯TÙ¦‘wÇHF_ˆÌ9BwìM©uw Ï™ýÕzÈŽwâMØ‹w=(ën & 1acÛHŸ%t×6ʃZ!¯¬iŸ×#Ýã|óÌOb-Y$lê6dñ ¤¢A¡¿%é „ÌÒð²Ä«üûª’½ìÚ…$ð—éˆå_ãÑpŠŒÚ¶FÊöHFAØí¼Â7;ÐÖ=jšŒ¬Xª]°{/&Ðà‚µýûG#2T 6ãPhçÙÝ¥«Aiæ nƒÊ³fïÀéuET㌌ç%ô.ô¯V©“w+'Aú*FyÉ¿Ø _TµÌÙa‰D•åY{¶ý' /çB'Á:‘°ä‹oI~EÝMºÏó‰9~á¢änL­´UÅ;º4)ãVUáuÓ(Élì®Pråt`Y¾¡çë(ãùaøs¾–—ãPòÙÝ^âÙ½ Z넌ÌM†éÁ_Tô¼¢àÑç„ÇØ­ý ÍôÕ–­ÂKhJ¢ƒ… ’ ʾk`bi*ëS&¯¿ÀìÊ8ìÄ9ìdm7üEu[Wtº !]iå· Á·5ÄiEPKç¹À-JSÒï!_U³1ÇowH5âÎ u< 5Y² ¨,¿ pé…;$H–V@]åw÷jΕßÀ÷>(Öß8Ðõ*‹§†4‚gIbfA®~°¿ôš¸£ò5é¼ Fì•OÓ—Ô6ekŒÝÖnJŽË”F²!2õ³XUÕ ÷©\sË )+ûá :І‹4`ñËM`ðË**Û p€ «Šè†$ÿ8ú΀¦™N„/Œ ]± «3[êCYk.2žáðHþ} ÚUÁì«öÔÞ_8ÖÚFì¶> ˆŠ•dÆØÜëÐÊ•½Õ|²1ª©ˆ’À>+ø°:è&f»Ça»§¼{à1û´<€·<˜E¶9ÐÓC½³×·*.ÈÆ•™~¯]ž4I² ­*¦VatÝqBïž[¨Ñ,*)Ðù º„ªS×W±œ1)Ô%ù"ðÏÙ3Eƃú-h ùœóÉWÞaÜÂ.’;.—Ñ$1ýX*«5œ¿c¿>F’š '©46„!”ž{ð ¯ —Ò|Œz»“¡WZÔ¿²µ+œ‚öMŠè ÿÉÎúÜ :~øÅIdÊ?w•òü´ºÓ½Þ*hb#Ù3ߨ¥·hXûìª7~!îËuÂï ×·Êá[š¡\‡,¡o®ä>W‘ÕnöäN0]ã«úTÄú(jy&…(d²]¼^ìè“ÿ ¸w&Ð\~37f Ú^¨göâ½ä@rë[úO0Žv¯½ê~„%ÅÌ9t*ò2ç )¢@Žw˜uf`B·ì¼··àAg\\m¢ÅŠ“r´+ Z¡òŒ©—È{d]QWÁþ¨IûaÎuãR–òY5BŒ¬áQ“Òýø¶Ìª“P^5M¢Á#o8¢}ù0\yšr2ž: K]ÀaÖPÈb ãÉÜÚšZ ˆÞ›–Á¶†kJ…[7¯w^"goÇ[«œŠÜçM_2D¶h9î\ÑÜ?“‡’Ôæêõu^g~Rôò×8@ø ½×›ð"€)tû6€¬Ê{<Ñ ìbr-CbôÀë¿RÕ÷èí.H-vžÅä"h\ë1/,”ô„íöa::£›¯ø·d!ã•8ÚK2`¶¶É¹pÎKxmÍ>íÚ)ëñŠ*½f¨\8õ BnHž —pNN‚pиœ`^hñ „²QÉD'Wt>±(Ú<Ȩt!—2‚{r¹Rn ˆ8iîñŽAµ|k‡AQ¨î~ØÊ®i6]½¾€ÄKôîE…‡Ì#í³NØMŸÈé¤Àç‹q } ¢ÄÂôÞu†²ÌßRz}]¹ðöPç6Ú*!]™”6€Z)=eC{0Ã͹Œ:ýH‡DM±Ž;»%{{Aˆƒæ¥Ñf!Œ;i?L;xdSBÕVéoó.äðšiÆ¢3Þ;ü°Ÿ?F;©·8™Á‘T„Ú; b™…/p >K4Dué­6)¥Ù%œÊ@ާ:@,N}ìeæ]CL÷úæuO´<£oP/é\Ø ˜Žð«fˆÍ½ˆµ’‹—ô.Ìr5SÖ=OéÊŽU !öE°º¨Ë5a£Ù‰+ÝJu6où+Ž8vwå¡/¨Â.+ðSb-RÝŒ]9únrpd`“îü¢KYV±,ÄÖT™R?*|ÂovlB·ÔnÚ%tì‹ä™m©S6òÚ²*C€äÞ|½¿©umÂk¸–åî ô ö¥äò­*=ÜU@5­Òõ­°eÑJ]ߦYô-𺜦'a SüÊœ†›pK6`_l2—`Üú‰&æ–º‘‹ªf¿à¡ú³%²9ô,åGƒE¬lé}g¾@A5u7ÊÎ#¾w…¤ÈRêð•v”ò°ÊååN:œò‹ÅÒ™ëÔ7dÇøØÞ|(T)×52ó¤ãEݨG"ve 1›µWø·r^æÝÓá×Á™lræ‰Ñ“ªUoËç'“|£Ã‰ŸæiIéÀBXÒ@N|пÔò̓*¥øŠ†¨ñPÂÿÆ %eý*’—ÔIW@ò](Cb[bЮW*W£b”<Î~'“Õ4S\Ô)JJÉç=!¡â“ÄQ)<Ô~bŒ#¼CÙ¡,´bî&Œ\¯nÆì9QÚíqR?þc{ÄC0(óÿîž`Ë(úWí.V® 7ûÿ·¤QÞØÑñ_¥Yi*¿pþƒñ-ÕD¸V§½õ"&¦s½T‘M¥ 'Y þ’ÈÔÝbâÆä“N¾šÂï¬FZ°ú~NHJU$żÅã–ßå–ÛÂýdí–P¸µ1CcŽÆ`¯Z]µzßî¼ÈšY­[ó3{דäNrJ±T×CyÓ=—ÉLPšÌaÅœÍâ›fñßå?ÜiÙ¿ôüÇþoä¯aìlelb øoòO–UÜB ›_'&³³”!æ“ñÊà‹4 3 ¢Á­–¢£4¬Âãm΋,W)RÁ´Mz/¡¹‘“ "us9ÝÉò™ó°¸øùÞÕoƒë7O«…ÙUã®ö…€Å¦c)íæÓ²È¬ý:Ò÷?†Z«zz§÷졾6˜†õ–ôfÙ¬ëÉÛ*ðQ­NZÌ ¢Âue?ýrªXAB\Jlx“¿ >˜Us¥ oÓYrà6w™óRí$IûÈßµþ(ŠýUcìå×±)hTù<æ¦w£ÏE©LÔs}ð(¼¿>`ÂÚ_qsyŸž‘;t¶8¹ìs‘¤$úº{gö·ÇT»ØPÙéÀ#¸œ+†%åOýØÜL–#<©Í¸*qÜ\Ž%õçÐ ›¥Ÿ>¤K§Ö4ä»îËJBÛàÞ’]¸$ç²Z¡j¤”]ó^ƒfw˜JÝÞxÇò\’^VY¯¸Sî}ã#ïzæ¯Ö(¥̈k¹ıkÖR$sØ"#Ö1oi< bc“º“~—ÿ.i 5~ì’:D¯Hæ V¢OºÂ8s‘×S,ómb·ú@™W/<”ÿñ*«fÍ­õh=MN´~E›ó ò×\ÔZ‰ ' ®ÿACÄæÆn¶®ÿÈþµý/EÑøð@;Æö7眴å@EÅ@a±‡ž0çì<ÐïUƒC-DA¶Ë³¥0sbi™›“¹³ï[в©3Rî-_]6Iƒ?ãîË}žàþ>@Ü ¸&\Z:ÍËÊ£›”b·xÔß½õ*xyž} ü‚ œ¾—FÑÆ¢¡@YσKFËiBù(ëÒÄa ªÂÐjL¡Úï'ÃK±Û£ o1ö@ê0Å…HóB/ˆ.òÑÙ$TvjP$DŸ™.ò1` (Ý‹¡`J£+RvùIyâ©ÜO“-2•¾¥± `üeñ¦²(ÌD>/P½ïÆDkÍ€¯¨Ì) WeØX­¢‡I¯ókWww›Æ_™þ õ£¸’\_ôõþå½³\çç5žÉœ³kÞ™òü ƒs š¾O%µ}íšWÜ–Ÿ.Pã×b™‚I¿‰C±¦Anåª+üÓ ÛÍ}…oÕÝd‰¾ƒn;E'ಓç#!]2O@i¾©ô›%œVÕ4œµ8!+<#®„GØ«q}OCšã·a C^©n£¥iAUƴɘº(¸a½ÖtŸQf¸î®¹ s‘¦\‡»uŽ ö\öFªûëpÙß@U׸º¥ú}­îª½âÁþâ¼]ö‚_š[*£=ǯ£k Yu„„/]‡¨ ½µGcJϱÞ_ùÂ`“ kqk¥jxH:Ô{I]±êíÀh˜yÏa„Áe,C{$ÿEÙîá´R÷¹,BÞR­pí`¢0xéÞq¡díl(Îá[TøÅ9‰¹iú1?;o”œ¿<âïÌĪçhG¨3Ôìr…ЮAPbƒym[/'‡¨Ðw‚‘PV©¢e¡fHÁá(Vªö*ܶºiŒÁ8Ä|S[‰&Ñ_ Ÿv_2•Ø(®ê•«ù’¢ÛèEдê4ȆïVû”¡õÔu`ï.¡‰·ò„±|ůñÔÁå*Ú—ï-;°ƒ¿Ý#@¿µ^áe×£fÒ”}$0gÓ ±aÿ$¸µyXhÄo¡»Ž ´~%}Wó­Ü‹&4`¹›Ïüü¿zG™»|ç²?€LÈljsú<µZ€]ѳÄòž©¹3<¸¦”õÖfM-°·ö½¸16øÜUŠivßxý¼‰nÓ«PJJbX¶˜.¾Âð8Óî÷Ä:¸«®WK›¾QbtrjE1â²Ø¬¡f›®%ÃwiXÜ,êÁU^Gú-?s_=Ës æcþPáËÄUƱ†´{Äõ.L½6êÈŸÔácáE”ÄΫƒÑ]Å1 ~Ê]çGÌ«ÈaÓyŠá u{zýª ‹Þ•ÐúZ.‘­Í‹q<©KrGªçÚŸÓV÷KõFA“q‹÷€‰Æ»ßû^'uÇåï7¡,æ–!|0ôàhVÿ#Ô_‰°ëž_oŸZ“§ÑÁxŒE O&üã÷^È¢ŠS9…豸-<¦ß¿_¿ý5ØiÁuÝÄåöAwº¹¤ç…,ú`Ô·S¢ˆŽ®­™Ç±LŸ(QoúÀX»Q“ <´îþzV!Œd‰C ƒü1ñ†\;Zrô…¥-ŸCö×m|ýŠ?ᥓzGj}´7iõE뜮ÁŒQ%nØÙÀm‘÷L¸àaÝ*P³\—š¨¡óϾÞ3*›_|©+«¥{0 „¶úˆrqt:Më»—Í×Qð’%oÈ3ÖI–kQÔµ1Ž¿ØN4ÛWý@ ç¤éê¹ "<¡„ =ùÈfï ÖÞ‘=â:ì:‚¹‹E£05Ƙzi,MW¹9¦Xæ´«l&ræH×ì_E~+B–'MÌmakÚ4(ªX䛩/|ÚõÚâY!»LaQ_†7Ä7ÂåOEëÏ^ý¢v†«Q}ƒ¤»³³WZQïy<ÿ#Êkæ8}ômõÚ¬µÅ£ImMIZ‘µû$$#bÌß½ÚL›K.Z¼©²ú2ÛýŒG ô׸5Z›1ÜU±‘`ÇK-9éîpì Å€AÍ™‰†&°Ÿâ¸Ÿ“²x¿gú—U‹Û“@åäþf f4¾\'Û‡UtƒTÅ} ²ï úZŽÂùŸZþ'»ù/si÷¼FþöÉæ›fº*0ôÑ…‘V(‘DDé˜A­iB9Ñ é›fK ö‡7åj¾À†?!‡ˆ{´3R¼iØn®Ÿów†•óÛ³ºVƒÙY}/7ܧù§|§ù-œŸ_# @ãkÌW¿ÂàLô†ÄàŒõEûñSœý9ã ôÔî àð;K÷œáœ¬~QWeÅ›BhdŽªƒ¯…_^w³szv,0QF/£ÒRQgj6-h4Áäë‚XÏ5»RÚX××ô€l×ß`es×ñ2¬¨v!;²ÚèÖWhï´šk¦rowÕÎf¥>Åo‚[‡žø¨cÝcÀyËÇa^Æê6±×ætŸš»²²g´FŸ¯x"Õ×òŠmœÕÛ1œÃW  k•›ÏZ0xÅÏîRa[£p{O.Ø‹¼`\‘äE'îÏF4u<Ó°*•sšj«lN^e%{è’mwjÐq ´TUà·Êuh¡aù4ÌñÆïŸ—LçßheS3)³_ÍmÙe+hô:>æ…]GS.ìnqtë-LûS1iiÄ×£ãæ{ð]s[¬àEÀ-n¯ªÔíqج´€¶ƒøEihÃáæ‹TÿGÖxµÓE&òJ¾ÂoÎiÈ™d\E«.ŒÃi;‡ÐÏ?nÕš¨6a6°ÀÖõU½Ñ„«›1› ›¹ŸýdÄÁà‚ò! \²{„H±GÑ ‡•÷ªï””K´ ó.½uüÙ$8Ò—0hÜEE+ÞgûÐܺ iCü”áõ£`m¸Î€l’ß4³yê,ò.ê`cy„Œíè¨Q\ª“6ö$©ýؤvô1÷˜ çÈ/¶¨£IuœÅÇ•) ÞõÎml¯õRSµ¸åT“¸“φ {ßo1ŠvÒõhÁÎçüº°YQüÄzÍÞXǯ#)°—1S]j,\®´×;dñØ’%¥ Ë>¸ÜL}ãY[ÔÚÉdaÖ6¤åÚY©ùÄBöÙ»¨ÞþµO…¡‚ÍÎYËàÿQéœR¢û!ÿ"¬x\Nº‘3+¨Þ©æ¬Éh̹äïmñÌBÔͼ¤\YÆC÷çê9Æ“k'0‹$ø~Çë÷ò OC-öúÇH=ÈÃ×&Ǿ= ­,q¶Æ; ¤~í&¦/¡†Zh"K×ÖqNÏZ€Oálˆ¾bã¿}ÑFò£!^FöõG*9¦B¿:¯KÊ«ä‹à²¤Nd"¨ß_î7ìì‘þÁ+ *ì’Üç#yÃן¤Œd%úÛWgÊ‘¶3=·/åìÞyqú‹I[T‹Ôn@@È—kÊ‹è}‰4¸/o š)>æoaý8$ÿà•ƒ:oÿC[Çœ9Yo¬Rñœé¨ ªŠ'é?ä.žhNiOLIi~‘/æ^ñ<²ŒcººjìwœöЮžÌ†ì½Ü—ýwÐ%½Ü,~ÊÎt{ÅîQGÐ5Sõ5ýÉeœnðùj }ØŽÅB­üNÏÅNcv+è­ò… °ÈüŠË[|é÷‰Ù°c@ÚŠJŸnÖuV lÁ N;´\éÚãý»ªž¦ÖPüÍ: „9Áç£fõG¸Þ}kª4< R§DðZÖ.Ü-ž²Î£è¶ü¿m¢r™h%>å—‡c—‰µÃÝ€~È;$zTîÚcGhÎÇÎ07PuP\Šf-Õ7;P¸-ÀÂ8vt¿À‰;žôšÿˆ¤.ì|)eÉ)\–w‰d7æ·d‘ë"ªÃ¡±!Ø­×nÙ”ó¸Gçæaš—Îr‰¾ô²Æø}„;–Ï3‚G(mñFý—ÊÕÝz\¼î„=ˆ3ÉÓv—€‘ååšsgcÏ?ì)õ5­RBO“g›`q¿Ò;±kb ï×ÚX"¢¸kðN~ˆ@Žo}u9¶è±`-T²7ý"­ËŲÆƒ>s·R»3‚gäB[/|q²códŸ!ˆŽmÁÌRÏóîXõóOÊhV…0¢ IøÆ9pÿå-4¥Ì8›*ÉÅÛ Þ[§˜—¤C¶°*j•(3|ä* ÁÊ¢Õ"'¨€jA©t¥¿R¸âž^ÙL^ŒÊ˜;H, mü¯6§ èKLÚ®ŽÔŒí3С|„Ѩ0ý}íù¢”}´Ú2ÌúBP[z¡š§.þ&òˆÛLˆÐt®sàö%AÁü1~­m‡òjeÒ&$WW]•]_$’·†:÷o¬%(ê¼üÛ @@ÖP@@¤ÿƒ"‰Ë ›;º:üËH«Û¹ h¢ù3$Òý±Yl-;'E2Cm³–]& –ßîe#¦ò“åÌaßž1/jäzªx­ûZ¸¯ic­t+/1üRŽ?50RÄâáu¹ÙnùÇ£¯Xž­ÐØà—È£îW•™%N4¨·8Ç“ôVÛü¹¨6(vð©k‹èë÷1ÂùÔ*2ÉäÇÎtV#noSùS«V[<ÒøGú¥QÍUn\½Cs±ÎïÁ³9©Kà!ó(ËbDÑŸz:Þ_jò™ŸŒùÏ6µ¨ãŸÆœ•ÔŽè•fcszƒrã4h!2õ;d 2KóÆj#øK4ßùpl“äBg c¹õ“~ûÏô;¹áô`¼vêЗ4Ôƒ?hGN %;šJ@춯žVä¾ {ŸTû”༯YÆý=ÈïôÓJØ\ÐàÀ} -+ÖcáH󮇘üTT™äĺÙÌ2;ÜgÙ§ãí}VOù/Ý ðÃ]}ë!Y/¤@þز ´ñŒX.ýôTÊ / YPÅ$"ù톆NôòµèŸe¦»ôÁ±²÷¨ñã|qÜ`ç hh!×ÉØÕ2Å*CíìÍ:›zŸúdíPápÿŽ­–×ßc®LúáýTMB @l3Ê–Ÿslâ•qœV} u$Uéå[&'Œ[ú™”Tꦏg¡.º– |vLüŒe˰´>æ}‘Ë•KMµ‚ ³Ä°]§†#Ïe¯ªºVÌpà"ò =Sû& Å®ìˆ(I´#ÝOF¬¼Ú€s}à ñ@˜˜ƒ§jNR|ƒ„øo•4L¡& Ñ}±q!÷ W¢­’ìÓ §6°¨t’dÊ£¾cŸ8j0Eïã€ÐÍ©‚åÚ¥¶Â·C¢ZðâûÄ!#R5…yâ$0£èzF)ѺÅHä¸Ò™/[¤±¥¼:õ$#·Á“Ìûe‘ ï ŸñÐcŸB¹hQßaÿìÞ9Q¾îs'Ë‚|ðþ/t€ñëá ˜ù;þ:qå€p»ù­ÆìvÉ"«ž•Ãæí( p ¼ù(kÖ1¡é.Zªî{ØXv¼ùþå–éÕìé´ûðÝÖ-Z½ ¯ÞÌhgð‹oiļHÜ÷èÓ?ÂÛmà å¡õ?¹Ð¹ßtJ4”±cã«éç¯'ê](tÕ^—z/}–˜º\Ÿ LÄþ9ÐÜŸ¸œÙÊ’FÅíËVu÷}L1k-Z(XP(rF¿#·É|-9züOxÝ׋#¾-[ 0°¢?W¨{åGÎjVøSm¼rÌ×’ ¢å.’ò`¯ãàËxŒŸÜp݇Ãcmºfb™_TíÛtnàƒd?L=t‚ðÃ妛Wb?÷$~Xú¯$Ö4 ™¤²ðê¯ï…PëëÞ¯ ­y›Ç$ºU(ËZâ)kMá"ÜŽîKã-îsÍ~ecxàfÎ=AiÕ'ó5"¢TAÊBÖªá˜çèneeRÁâ¯4ö§6?4\ÆJ8I.C_9F|ûܲüÍz,ýå%Þ@¯ w®)g9®vI®žH°€A)é+¡Ô©â{Ø h¹FþP²Í—·¼7 ±ø–Ézî+¡¸R:¬Þ—Ò3Ê'Ù&F ›ÑÅ©­è?˜˜Sivdä£ ?ß}˜æzØ ªSåW<0ëjE2zŠJíÅ ÔÏÁ÷hñÌ¥x³{V:ø§\#ߨ3ÎyD©j©—bNØW<¢>BÜÌ@aêï—X€o‚Å5÷D/D«jV;Òž¸¢˜KE„Ÿ-Ñœ#ö‰G8âB½ &àÑM~¾8¢ÏGþ^/ðÑ(‘,”*R?+è$œÉ–0¬sKmØÍ4å`±€´$?áëµd'{tCêbì ëÒ$±f#æßH)$ÜfC3‡f3ÊÊ.UËSœ2ò·7c8"ãë,fëšèîu¯ É+® ú½1Ÿ®4é¸]­Ýö~5t $ä+Ü-oé¼Êè7o±®9Jüçqºå›y£ Çòš^ù–W Âk< `£p0…Â]+s¼V1ßøÌî{KMÔ™G Jú|3$“~ÿ;(”Â×Cÿ(ÄýOóuÿþåþ‹ñL×eS í{ÕNW9Ãéeª®s¹CëØß‰:#QH‡=ˆ¢´q†ÊMm’trè‹r‘¼­|©‚e‰peÿj “Üi1v<ýùŠ{÷%¯å´–P ÛqP[OýžÅ@™9H³EjŸ¼ÁÂê^ÂæP—&›«bqnsø¾7ØC­7æE­7AÐHaˆOÔ$†U7ç$ýÏï®’†l…œy7DM—¸s—v›ˆSì|šÛ[ m€Ô¬·!Òz¨qo“Ÿ_ÞíI·hºôH‹œÅÊ“]Ó ¶ê~†û`b«†'å•‹%lýô—ö8ˆÂûÈCý¥ðæJC†‡'Ô;Ue+kz«ùõ`£èM‚h³^דy»Î|øhækÑ× ÿk»ÅŒ·½TåìðŒX™^Œ ¶A¨OmãH"¡¸ðCÿ³4ãH–T¾½Ï;ºñ½¤l1 eŸû„£k/è&JZºù¸+çSÙ_y{h·zÓ{ ©bpBš×HbTïé"‡\¸ã‡³£¡¤ŠÊz4Ú Ëç1'í胧i>KdÄ9”²°”@õ®ïF3AZ?1 :eg` …±%W´)\š(gt¸¬V)Li¸TrY¥14!í«Ø€öŒžöµõ›1ãm[4+•–ɘŒIÙ³Œ_®)swÄJd.¶B‚.2Sß\"Ùô©ùÄËQ_3æ ÊÍ~ žk RgÑ;ÓœPNÞþ4ðÚ2x"jù°Ç“kÃéU™RDÓ;úÆ.pLË•­¯ìøíëÄÊ ú¨ËºÖ7Êúš‘,€Rd< _úý Û7†ô\½ ~‚3H.<ÿ×$½~=4ùÛ4-=ý®,ýƵñÂPþ¸½PRnZ@¢NÍJM‰ôÔ÷àz@f¦ÜnP³;¬)g…,fÖæ„ý-É«0 nœ˜ÆÜŸL_„ ªàßigÔRœçY(UÐÝÞ˜3 ±kæ7¦½°vZñÒçn¨ÚŸRǯQ¶‚²íÖhüF´{l‰¶aºéŸó…rÕ4*VÁ&ÖGÊãrŠ#§OhÙ" yáÞUß@Ø(.f9v·*w´û_‘›­ýèÓœ‚J‰½®&zdÑtêï…/ZÅ\AZ±õ“3Ú˜]ÛU»ÄƒQ¯ I߸²}\D *€‹Qá‹.ä*Ê»â_þЊ ªeP¿«(™¾ÿ;&P i•E‚qBüóþŸ1á¿8@5ŒmÝ➎Ηÿ•.KÑWDF ßm±£N} 6$ñ/*n׆ Ã’“²®£Öóä¤7ýcþg4žúgVšÂàôSy¬…5' mšrs3Ã}Ëz›Ëúxù’PDph…`E‡H ÎãŒAêD*ÙùÁ¢{­n€|Ænl¶ô¢FÕëhØi—ô†LŒ?¥ •YÙþ+ªQŸýz›É±÷„Çx¯ë{¸ۑYoËâ¾<€ÚT}<ÅaSÒ {Yl; yΡzHÃO±|DTÙ¼Z*„jJ¡gÁ¯fÍžRµ²ZŽ™”?‘ÏXѪʹÌ0^0«ªôÔó·”c{¡ÆaoyÎ<« Ȫêã”áÓ²–54ö?ErÎE±êß»mEŽÚ|¶£døyÙ/ix,aؤÜqœ˜ŽÁ~K·üj—˜É1Âî éáQègŠÙ…íÜ]S:F —ð 5€ø›~(O(<úÿ0öŽA¾u_’pÙ¶mÛ¸eÛ¶mWÝrÕ¯lÛ6oÙ¶mÛ¼õ>Ó==3ÿ~§':b}8{ŸO'"s\¹s÷D{øa‘Ó=¿<˜0”aœJÌJ¤GÏZfŸÀNþý+¸YÃ.ÞØ €†P€€ˆþŸàþŸ(ÖpðT±@ÿÉ9*åìè°‘Áúæ„qMlkE;û=gªIA?¬ÜÊ.goÅD¦ç =¾uRÊ’#+A/­–þà@O‡ÍS*ð1Ï(àÿ˜% ð±-q×õºÓj… ¸\Üyí9å?õø›÷ú‚ø*ؚܫáÇ8ÎÅpÂ+„ÉËv-@+Cë ª£âŠÑ@ßñWãÓG[EOÞ‡Ç6PQ á4ë*é# ‰ºsÃÞEºäßÄæÜizÙ4þŒ¾…ê¿…¹ºåvRGš¥æŠó0ó5èGùú5â“zßAä |ÿVà=±FyX¤ý%9¾)EÉé&+Ä?3ö]PξT¹½¯J·E¸ eíCRPtïÈSS=|âÅäåH•{>UO5$Cƒw‹0ʪ}y§(-Sf2&›’8xWP/H õêqQ¡iü‘5…ã¤L*o=…:„g/ÂÈú‡'ŽìIH.N ×$2}Gøîãä`ŵØe" =ܺ†Ô¥Þ@Æ-£'9$Ù¨üiE9kä™*2nvŒîJθ,MaËðšcV‚ Ò‹é KÈ…„2Ažù¹$Žìf3puŠt©*Û!ðz'ñk„QµÙ$8ºŠÆý ÀX 1Œa‹îࣦ; Oó>ÈPo"]&ÒCžCˆì¤q<Â}„XþgŽIó5 Ó^s ²¥Ê‚É×Ä3S hÑ´Àçˆ ÁÇÆîU½G¾A²&¬m1?q#Q¼EÉàÙ§¥Ãš‰ nbiëú¡2>H¢ÊJã›9Áù4õ>…þs†Í㤙çðPoeÏW½p ðº 8'~ßÖÚ²Öx)ô[H®8±pæÂÉa7¢×3è\ÈX¿m<ómúÚL, ¡¦¯¶qé¡çyÔuÁÏd%·>Å•Vë ÏùyLq€›‚1p¼ÙfáÇ]l("Yüd×+êv·çâò^€i˜]Í¢Ô÷²ä‹ó}Œõ3:œ€›Än}x5¦há C;ŒÜÍ.<ÒD¼/zÀƒó·?ÒÃ}\÷T» PTÔø>² »¢ðǸ?e¼c&³WÆ|µ„½ÅÈØò„É‚gžëgÕ‡ãƒu)i°@;Ÿ@Sz/ ,È,À ްK=2ו×Ù^ÖJ `&«š^¤¾æhn„¤ØXô Ë*òä­±ƒ¬ ÚU3ð@}àÊ^¬¥à 8û"…\c¿2Þ¾jüÝk˜n|XwPz;Ô”šˆ$£5¬(|è8½òÀ8ò曺µw݇ O/­OÿgÎÊJk–7ðIÚ|ôD;ÃI6N’…ˆ\ÿ¾vÁŸV ˜ð¨Ø enzÇÚCs…®ò8¹j@\aø'ž©\¢ÏyØÏQXð*fÁ&• $†a\‚sZ; ½B—¸pìÐÙÝb9ß(Û:Hæ‹"Ð5{à•Z­yäÕ„šûh"ÿž¦¥â}|!ð:ãh-Àcï“VËÓ›¢>]nš†ӛܡŸ*¥úAÚaV Î̦{æ15¸lÕ !À„ -ÀŒ¢Â!¦ìP½zLÚî¡]Ø©Eœô¼ä‰™ï™ ›þ*W!“kBñµC¯2¢ô@P9±¥•ü±=íé`’ï3öÉE`²¢£‰çèTϹ¼=øÑùA7á~á&—ÿÅC# æ$uL¯ú¼õk &%v4 ¶IsAE+ðÂÜ Nfˆ!ª„¿£UÓ/­cRU¥ˆë VÒäõ¶)Ï °Ê{ìÂùúc…­m‚CcHgbc¾®sÒCñ“á6§v©‡#ä”±é›×t¬3az¹Gš¼3#ôtïࢄÑÂo&†:† ²êUþk‘’}@NŽª”r¿dYSÖFQ¸:¿Å²ØMSî9~M¹XnMžþ¬´ŒI6Ë)ºu üžÃnPËzXÌzÐÌ;³×0·Ÿ²? ÿ5ôÎà‚ˆ“_†¶<)³ý½ø'â)±ëÒª3‰Ÿ’ôZ¢‰f—w6ÿ¤õÇ(¬>ÿ\ct¶ ¡Ò.˜[¢0Ðꦄ¡4äð,Òç² ¼4„_(¡ÜrE·bMV–Ô¤hwã¸èY7Íér*Z쀛ΠvàÈÍßIgÕ‰…EŽ9­óX+ÞêžäJ“Có&úᚺtìaÒudu«N³N‡ù$4Ïzȉˆ J»¤8Ž ´2ê1EBª*zà.ŽJ+T´?Û(k0ˆ¸é¿cñ*‰¢ðrÑø’OâÏ4å±—ˆ«K- Œl‹ŠÖ„ñG]\QyÌŠ‹‡]ç Ø£ÛÐ åášW£ó]H7 Ø)AÊ¢ïþy±*åv9EÛZY»¨¿™G!ÐveOÍùNô¤ã¹Ái’6–ÚŒ&æåaGåbw\ËO5\K·º¬ù¼Ž¸çPzÑ[D¥Þ]ï 9´tÕž¨m½Ø(þýOWX­†çžþ³:ø¯"ÂþQ\²fF&^b²"ö®ÿc®ø_arÿ#",t÷MCçã>0˜›Íœ˜Uû´1–ŒlÔ°þt(ä¢ñRíî¡@Øû¿…„Á8ý&ú%ÑXYî;"5Ñ¡zM!Gsøv‘ZÒ%)œÞ2’³†NÓQ¯¸¬µ6Q¤Z½®Õ¯ýå;³ †tìK©­=™Êäÿ’Jù)2>l0Æô\‰ÐsþXFðAˆàG@ ÷ÅáûŸÒж?àìÚ€~ƒñÿ7?UÌÎÑÕëÿæŸÈQþ·ù‰ß£íZ¸¦ðwá$DL($f\3<,#{âd >KŽ{Yñ·Æ‡é¨`_€ñÓŽVêΩÑMŽË-·Ë‰¹ÿßw'hCȺL¨†QøKä\ O!Kß%õ? !õÝn²ånM*täóžžï˜nÆ`Zòª&)6µ}™¸gAõ‚xçýk¥ò/Š1âÙ¨Úy5Ç]6ªJõl×VÑQ 1³ªazÈM‘¨7U®y®¬—žú»…Kȼܘ{— Fu9ÙU°è¸fŸN³Ç/¼œ 5ùÙ³pe ¦œcòbÍÌ(’ _‹öHÐQ#½¯’ðÜ2 P›×úw=‡§X²îP§dcvÝn î<äl>ë\ ï¿>¡ëf\{ÕuÊ‹‚ïö-¤5…Qwt¼XÓ¬NðüN…ßíüC¡ºì°MÉÊ4 eÑŸ¯o¡z¤P …^Ä¡ÿ^ÕTA°9aúÿ}­WMx% Ë1°Hï•9Qk1þ¸ H~šL/¹‰Ô·Ó 2 µo{(/Ô…]×Jú8”þ+Õ!ˆ> ÒñûfÌKŒ¤þî?ÅQ©?’¤ÿ3oÀ`ñü7!ñke3[÷ÿ}ù°§ªºgFF–,”¢ 4YˆHH ˜99°, {þpÖ89œ¼y˜WHqˆu…ŸfKKy(MM¸-h14š …hy¥U½ê¥f¥íà±.Ïf·ÃÅ‚{¬Ï¢‡ñ´avçó¦{†ç3Ûë¦WÜùïáˆtÈãºèV¹!óÓ‘Q]–ŸƒÀ‡£0À)XVðf$æ-7oHnaëj¤ìΊùô ãÊåPÝW\¼­¢};†×±¬Z鲩}2fvÿqÁWhx›æÆÉ„§‡jºÛ~ªÏÝ@ùÞŒÓàX U×ç¯ô`{•rù•Ls3;¨±]Þ·JV(bÏ÷RÍw;ÆZôñ.þ QæÞêE hmÐߪ‡ü>`3æv/nï‹·jæ¨*\%WuúöqT2£2SÛ8îUmä;¯[Ý>gaΠÁ¢©ëùNOXé‡!‘õ“ø%ÚQÛ xáŸèòY™CµžßŒÚ£I)nÇêెeùõã˜LüюY;ûeÅíÔgËß:Ïõ '©sÄûÔTÒžÖÌ$BqÈêùì âí;u$쩨¿¼:qOX[&#V ÿü ¤ß7ƒ’øÜøþzVX´ï–¸E燓Պ1@t]¶½Y³óÌPŒE‡ ¨9èêõ'Ëʧ«‡0«2Ìy‹Ä ŒðÀ Ϧc×v¶ÿ6VÊë-e¶qË\¼6í”û%Ú0¥bå…¾&;µB· ƃÙ,§Bg‰+áj’ mîd_oÒê_5ƒ9\jèêÇ„qf{öŒSPΈ•¯åÕé,wwÞ˜Y™ŠÙèëh rw/#÷“w•ãþIB¶ÓÁ½wjqÁ°ýÊÝlÛc*­ûØÇCºc8Æ× ¥Ï~I»z,­ ESpKjÂÞc6”á{oKÞƒ!yØuÃ¥)áF T¿Ôwå‡wÙ¿@–î³ï²UꯔoRÑ<:´æ“OGH¿&…³Ò=K.R'_'À3¸¸Ñe'3ôœÌÄÿ 3MZ'¦? õæÅv¨uÝoÁOëllx°±·¶Ž£²ù•H~V_Æ{ϸ\w¸1bcP4Fœ¶3OZHL4é›7ªðä" â9ĶïGPîv5ãª(0¬S-øhaXWçšÀòk!c»hy< ï¯Slê%ëD³aíâær*˜•zóÙdc‚ÜB\BHVS­íaÁ6 öPƒpT lñe¼©¤S bjá"\úQLzñËK[³=l꡸èK"JÀÉKõÉŠÚáe½­q*†ZØÅdw±»#âs.:P„>3 Ç:mPÑm¸‡û€{k«šIRU2ïxb¯}ÖªÔËɰø›êœÔYøï›nÕŒƒö¨"¼©*¿ÈÂ1H¯@$aG¬ìÞí÷¨‹ úxŒ3¦_k‰ «·{ÄÍ.}9]è\<+¥•æ×°=§h %½OŸŒ‡x˜/³Ð\+±·*æü<«¥†â8èù¯¡²’(õüõ$à7! A‡FC‹àÜÆŒ°eûXh Å8èHùœõÆzåëÂyÿäÖÑBðñP{>«Àº1šq®O­‰âù[k\•aÂyѰóäÅΡI°Qž3Ùs…g¡¨yÅ¡ñ©Äõ±_hÊ4½ )çPâ;™ãÓ¡cYNø´fê·oýR˜vátD-鱑{À¶ëžéÀ;Ý–}2–5ïÜÔ]-W#<Ã|„8Èä:K(%å_xÌ-AƒùPXâ3Ïê©ô¶cå£Ä1Liö‰‘¨‚]íg2ðÅZ¾çN†Çˆ%¾Ï°ÆgÅ+Sb ÆIúØW„8;¶vˆ5b±+¼6Iç‰NìòÝ0¬93oŽ:7[è²KËC[G/µMe+!M÷KúSŸ^¡0ŠBAãGkµå‹hžé|.ÆàÇ·~œÞ·bÈÂ[qNºè^„D(‚Ýi…lz@¬-zfÅ螟–ºêâ =Q¾DK&˜iÙœ½ °á¤!:‰z^Õl[8\ ØØ˜-Í(1”lÖoƒ¸‚ÛÚ²Õ“›â#ŽqsÄ›aBÙ¢xñœ0I_b7AÙ6—R§éu¡8ƒ·GöïÊNë@ »Ð¶8Œ*o ]ÿ9;¶o|'ÐÞž´xõGZ^Ú±9• d0Ál*ˆZŸ¶=3Í:œÓ³Z¥žã†@™ãvªô%bÎãuT’Do”%S¶M‘êæiÂ|Ç !} §x¾˜@¯Ž~ö·& QFDª€¬øFš÷N¿ü~z€JÀÎ_.*¾6áP®²+ÖVŽ¿hNø_ÕKCº,˹±‚ZnÉ˜Ë 2;f|[À‚ ¿,¤K|I©¸-ô>œÌp0Í„)”bcèT£”½¯KtGw>ºàÚWV -ó)e¡bž¡ºÊ#·—ÒŠܵ¶CÝÇK¿‡ÈZÙïbuޏ>¦/"ÛgpŠçrÌEñ˜öÆ–ý‹;÷èøž­{xðNÉ'Uâ›Í~Hk£WVa6)‡qn1j+<Í­.=¢(ŽG@z„§ytG*‡ëe …÷ó¬¶[ºY¡¦¿£vJ{Oc€Í•tWuFD·ÇbÐÅ¡fn0hùÞÓÄ‘+NmâbW»s£«ÆÝ>y‰>)¸Á¨™'hÓÍ=Æ]ê_Ï¢ ôŸfü¿8êý9pÕ¿_m0ÝçM­¡’ìÃzqü¥ÉÎÜV¶Ï++ ßOb l6Û¢–]S:n„«±v®ºhê•lC¼ ãÕõëÎÛ¿üÚùúW½§(dR“” ó_ÄþýÿõÞÿœuÔ?5pÅÐþB$^QÐÕÙ¤®([)¢hƒü£àÖV ê—îêeæ[¬õR¡éàÿœ›ŠÌÞ;ÖDHÄ~ü HåM’“N&£ô øÜöéýL_ÿúž½ IRpꂉHË5Rë×€é‘'‚Q‰p@Á ¬Øóqò¥5Ü¥~†/ÕìB:€O°£·ÜÐuÅô‡Ãrè±ztF54UÛ*G5O4Üa ˆ”P„ÝŽ[G½f #svÖ6ħ‹Ù*Þ¬^=@ì†õéø-Ììvö$÷!Qc-Açv²ãýêk"ªDBÁ¼‰â\`ÖN‹W½Ô°›ôßã@„‡ô“Üq6C3$ê„^‡ šÙ9£ŸsÏGÈ\¾º1ߊ~–z@i%DÏÀ*ëOšc Mð»gwA`Y:k}˜[Ë-+D¢ÅÊ ˜®]¸Ÿí6*8.„ì´® "Œ¬ÅÃU• Oée–Í=³k€¬·_yùÌhIµžõÊwêvÌׯ>Å’ÆÊðï× …CÁ‹NE/tÇ4Ñ»ÜOc ñó#b¥‘Ê–!èìgFîܤáêÁ²QÞð‚íÒq&Lµ?˜ÎÞÓŸ?Ô÷~òÄãœï{õ2­*þdcÇ"Ÿx¡+‹Æv!”r ÎÒ²„Ã.ÕÿážUሑÁctQ+cmÓøM¥á/r“¶ö×/Öë@³Xš”Ê$¬ªbGѽÇ÷+EE /|‰z*ffït²—Dã_äsìöpjç"o®§»!ÎH€rÎ@ɪŸ*¯4ºÐ?Ê4£æ={G› ˜ÔyY®5&ÈÎÚ.#Ã\ÂÒ–µ÷Cª[ôœâéÎ/žy»˜mEžHW=÷¦êHJþÅjæÕ3-2pÄÚ°ªêj!åÁQ²©êÚ•ƒ_lcÈVjƒtÁµÃîvŸ)‘ÌiÜ »SâN%wVé›á×i.­1mî”Tð t -9Ì]¹UÏö1ÔTÚÕñù¾@7öbÝY”´UþÂ[,ÑyÓ´{aüW¾;íº ‘€ÃÑý?ùþoö¡{ºË¢8’ÿL©4=yIÂÚ„'5VYNx"LÉocX C2ÄàADëÞ'Щæ‚fÖ’¼O›X?yÆV)°bÐÜùm/Ûu‹Ww…ÏÝÝ0¦Ð2qÅ›Aû©Šö0U¸ÃÎ /pXåvâp1ôîöŠ=ð6Õråri#Î’w;ðÝŠ5šaO,£;?'…þo8W:))1!µÀ‚½À>õUGÙîK®Z+NsFèZ˜ÖcïÎcú‹çÒá;TóJ%NëN ¨èd‚ ZoZ‡¥Çµ†eG8Yا\fúE^ʹ¤M4IŒ+š6¸dÙI*NBFì™ Õ2ÓzS3}J迈¡Rë®à%€o®[Žš/Ðná¶\Z¿”³žÆ Ÿ.KmµÅÊùíÜ«¬qÉŸHôRq¤¸¾û1}’?ï;/ñÉÉÙ±€Ð½Ù§‡ÄºKuzÁ¶§¹rOW²v¯€ÑUöQ{¬Ø6íÖnì?VjQ5€ù» 48)@‰}(J'êÚ«=Ɣᰠ´í­ø%Õ2jªû&pîšèoÜä œ¸˜›RïÇÎCɰˆC”’Ì7‘º­gµÀ†éâOÖATmM;¤Çµ¾|a=½Îe<úV¾Á†§Î¾Z ‡ â&­ªy¸ÙôÔ¾XÍ– Ì 3÷~Tq;×9÷:‰,odݸí§BÖ]C"¦¡1vî[îjëVÞ°_4.œœ9f“ 󵎆=ÄI~¶?¦HõæÕÖopŸì¾?YxÄ{ÉA¡ø‡4ÜÞeÖå;, 6Íú’AÐÚûÖUC%uƒ›žâè=(­‰Êp©NlX“#º'N¦æþ|OÅ>:ßüÜ@e˜Ö o}‡Œè^‘[±Á*‚$nJð;[{uÉð•®„øjйìÊë2m*ƒês˜/™‹Rlö–«„m;Yã:—×Õwé¹ډR](¦¹Cg#ŒAÕR¨Ù¨?Éài¬®» ôhæCF„Jòu´Å´ñWνèj¿¢¬«¤—Xâ3ÿšüÐK»8ÆØ›†p³‡G,À©/X5W@4¿nÀÀ«ˆÏ{½TÇMQ4ÿ¤SôO¬3F¶J&Ò¬ß"(žÚL1™Ö¡®U rcz| È‘ðolmi5#бÂà…8‚\R)c?®RxÈâD]¹ÄT2§ø¿('q[ ɼ”"³Ë[Œ’xº"ZïˆO;<Í¡ àúJñ 1³©˜gÃßÔ¶»É‚·Ï‡ñ²âoÀ þ0”ü¡ÀÙ¥î8E\‡MA™ÀþÝxâ¹Ùß˪cÆ<ÃT±ñ€è8g Qªëãìý1 ^ù¯bŸ÷såÔ¯ÉÄb¦;Ô™<ù ,wÊÕz9„`@¬l‚O¢™o¤`ûéQɧ)å)³ 4¶šY,íIIÕOfªÜ}ÈÈzQ—ì¤Öˆ/¸†ÒCQ\è‡Ðˆwbôè·Zn•UûqžP~w´A­éàqíÍ•ƒÏÅ(øJ’å!¦¦V;ê¦ð×TñÔ´Ì•¬!ÿéÌ3Ã,.ß`c^%7æÛÝ4¶>Ä@5}Âjý¥nÛjÚ¦¦ ÏlýÙ±¦qäãë ‹ç „äHø§×¾Âý×ÚJÕÈâß…Õ6ÚŨÛh j m‹$…%‡¶VÔQ"î—W-j`1bõä  ødØp¬Næ…–6׸”߆«•õÕ6Ëþ7q=¬IRPI46NyŸW.³§;S‚?ß1“¾±úµ'ôÉM ;µ‰ºèTW°œ˜¡Æ·F‡b5ƒm(!%q3ÓJÉDòeè<"SÓÅiž#ÓòSA÷ðRG™K±…YN!¨:j°©CÚr±TöRên¥5ІصšŸ[{‰7Ùn³ÕšÏÊÄ3Há±Ão*Á[ˆÓk´Ðßý%ƒVZv¢ƒÞFºàgWQ16ßhp-âà_\ˆByi÷™Ä®Éî¨æ&w1²í0¶jÝ£,ÿn¶?›Á†Nè?‚³Ÿ—^ ±·LZ.ñšž¨x4“ódzäK›XtºaÏI´—‘”?š.‰Öcgg¯KaŘq¶fÚ]ïŸ6” ‡yÒ +œÕÀ·; §Cx¡UTl*<ñ<Ñ*2”ÆÂ©^Œ•ST”ÐqOœîÓŒÐ`†‰¾3ôû˜©³Mz1Yñš/ïé+Ü${ÿÔ“Ú¢^ )&çáQ@Z¥í…(8A}Ú Åãh‹lªˆ** ×4¹%AE.èºkîÏ.X ‘í¸ó»ý ·;Lo[$¶b¼£­D*)¢W`”ø‡–cM—NÌažAÓw8A†ˆÉI7rPòW5ÁÈ0 cXK5ØÅ°{÷ZŨ±]T?²ˆÐˆ*È4ÈÐ4¡6«q:ú`‹¶î(<6çð—½À=óÆÈÍØ›æ%Ê…ÝôÂòV„ùz§Uö¹ EAí(›­{62»Æ\åÞ74óâBŠ:¢l¥Ê…lZê¥3r7«—LS(ÀÞXu´ŒLOVCž½Qo0¶W+Wív~{‘xcE@Ø2Ž»TJS wÃp¢Ü¼dy>›"dn[ù/ï{:µ`e‚å$…á¡kL6}wëiyZ§3Øe¹°€$åó|P‘›F¬X{û>7SPõ‰¢â$׆¦7‡‚îÆ† ÔÙxE«\¶l¶GO‰Ý¼ý-л{3v¯,E*çu½rÀËcæñB¦|žÓˆ·‹öνp*”šž7•/Šz˜VRYlñ{BŒ<‹¡4¹ëgsi,uSíçº`'>ofÉÉÃæV‰ù0‰T7ëçRvÆ.ðöÓô+î{¦³(ç™áó:‚q‹ÙVÊ=õµ\„Òs¥ó²xY9¯5F¶q$0Æ(x¬ºøå¢Ø#;£]½pè€ÃŸèY´r®CÜN4×|•þ͵¢|\òê÷ý…g}Dô‘Qv™þÓ· ++µ»&¦ðºñºŒèz¹àAïù²=¨Xéµ']µ¢=0ôl4 yM! Sߢ=ßQYµNb4ß8Å;Rå;Vä¿iŒõ”†ë3ÂŒžlvÌVùÎiŒ*Z®¼¡ˆ·Yoi93gmFÒCb[Kž»š‡ºU#L4²ó/­Õo-†Qž•Œ ¨©Üô…ù¢4C¿¨T“ÍE$ûË-qʺ@ƒkSÁOd;g멊—î’J2–·‹íQÎÏla̬Ê#šJÍ(&k3ˆ¿Õë †­m…pW¯}SÄãòüj×Ù²Ó‡œ óÜS¹4J0ˆøx¹)¸‚A˜]ý)wlèW/è]¦É.ÊT’v9GÄ…±áôÖ2ʈ–,âС¼´å*–vÏd~5Æ-𩉵‹Èµë»=%ø=U÷K„ÓEþù½Û»zV|wÉÁŒ?ˆ×°>˜¡|ø5=ÌG.qÈ‚m¿qìÅO$WœÏÒìÜtéuú(EW4~ÕBѳñ9EF…hïŒßÒÌŽSD fwó­Kx¿ºÜá œñäÚ@›Û¾’nYòò¡g2@é’½ÄË×åÂ×øbãï+uîÎvºúï ˆiø0/òa—~ZÝÄ̽71"¡ÀêK.hODB¤»ˆÂÊõ¾†–ó—ó|—GØÖþ¶…Ž¯Â¨×&9¼…;¸}: ØsÖ´OØöÂì½öå&2fÍåbÇ¢¼@¹¸P¢ùc›\Î\ËÖCÝÄÀü¹è&À¬D²¡;Ú®ì©éø]ÈGÒÀ3c¬7³Z˜÷ãç‹‘¼òöp¬¯•¥ÐI‘ŧ˜ß !¢Jîy:Éþ5àÙò5À$Ìד6xl@û:“rJ˯ë/×ñ¥ZþUE0QæG£­¬ChTÒ;?a£ÆWÔ§ã~¤w¢ì›#ÕÞ/ºCgTNnX~{€÷œçq-á¨Ñ6fðP“óPÃn~#0ð5Dó…KBÅéãˆKëT6¤jbX™Ðâ¼Î‰~èÀ.9©ÄyØ—/ýœ¾1&M¯°²Ò¸fÓY>õó¯ÿù,"HP aˆÿú˜Þ¿fCh8ÿŸª6ÿf%[ToM/&bD†¥y Š‚–H21Pˆ±Œ¿ê“­´tݳ®[qÈ”¥âXvÖ<“Qz¦r:\n:Ng¶2zü¿Àî°}ÏÄ«Ñýe#„¬Hw‹C(¾UX¡gÉeßç阌!9ƒ2„]é H¯¨ÌÈl´û)!«pô­ÖÇíÓLñJ2=nfz-ln*§Vìy§êÙý*Ê5 "e J€ÖRÚf \ú¦Ì‚uQV4[mÊ Žað@ó»ãƒж° þ<ÖJý¨rþ—Vñs’ŠèŽ*4@X¢«î©{AÂw’Úª¥¶v¬²f—á¹~0³¬j1u§õQ²ÚæB´.Ÿ«~þÑø7ß0:Û"…¸Ð ¦ñÒÔj J[cgGZ3JñcêôWÌ\-Ê5œ~ZiMß5kŠŒF¹-_?a]eƒ5F œÁ’hb?-¢ƒ°ãøÙhv4ÁVÂ|”ô#ËŽa`A¯6pôÜ´‡"ÿó)MGÞ¾×f²OÇZ¨1Ç$´`.SÔ‡zÓußè„„u!hžÍ–9 Š'-i¤XÁ¾Èª–CE¨]¥âÊkˆý–œŸ\fz?>šß–ÿ>püªÉé­½™K¸ÅÕ¼žã¼ ²é†H³•Gn¤%Çfµç_p —pHV‹ÂpS«]†O!Þ){磘2¿_èîr Ô‡wç¹ sBI˜“ù«év~X?PLp³6YoT5£.¬Âþljáíš&báAÛR7­åÖ ÓÞÔ */¿ä¼•Ú ‹˜ç…&Ïþà …3\l¯->¨,Æ=ä|ð1ª'§ü\§RØì®;XÆ×ò†‰™ë—óßé¨úPÌ‚´ì¼µöW®ªvöWSˆ·\9w´É2õ!.9†’|!ÿ>Óç¯8Ëh&†LHäJŒÒæ¾8¨ë²3¨¼ü$´Í ïh†6ªÓ½¯IãLy¿a)Âòø¥¤XÕ$€V{&Û“èè¿Ò ô`ß(âYÆþ£“•ãÿζú÷M2!GG[/U³ÿ8ߦb÷©ü[éñìÍbwàU…©êÜ;ª;óDrÒ8ÀR_íÉà˜u>Ón óf$Ìoý„{q,3ú:EÔo^ÖG¾Ùé©¿_Ïß¿©»$‰bÞö˜ßÉ(™JÓ‡Lø˜Í’C­`Yáø·Rºú™T¹OÛÝŽ®, *‹ÈÃÒSÙûû8°½ÓJ½Sˆ3óÖŠÆ:=~%¨ŠÑ4 /½„öN¾ê9vÑx¼¶3Nw?3—îJHvU¯n+üÙñ)ÀºjT0ðð*"¦âЫðf/C¦:×¥uLhé¼ìB çst«xwê þõö¨!æ€ãÖÊøÖ?‰ÑsÀ0(I«à=óò·¡ü¢±Ò{ÜTœLjÜ>i'&©²Üæ¼",T Öî›Ð¯B Òû‰åÉ=sM‰qެѤàÖ3ÐÜŠ'ùï£ ¥\L „™ÑæÙèïÐ2ŽÜýŽ/:MÍæ†3\ZÍ–ú‘½/‹,ÞiiÒ»škÁä¼,TÙ6ÐãëÇR¦#¨}¢6>½7Gbòí’¸T칬m Áy»ÇYáa‰ýù¿fn ^!’ë ›†#Hˆ*™š ¾í„‡? ´GgïCBÁÂ!t1;˜¬Iù¬âráWìÓ ãgWÔ¾ ŸÂò`"¦rÄkdÆSB™7î¬ÐغˆÊXVÀ]bÉDÉÀTh ÈÔGòÈ׿à3˜²(ʱ‡Öé Öt¡2Š„il„p× ¥B¥c”¶òçºJmCl <Å™øŽž±nAÖ›=JÖƒ›®K²mÑñQNPØ#¿Ù=øPs„ñºNîߘUïÓ’XœÅôyγj*é–jWªjÂ.óo9(eôÄ)ùò‰zþê(n†t¤b¼ÇýWœÏžt\ÄÀiáÑü7qþïànÑðòE[Æÿéág¿92”ú‚5@lË‘E×jmw7"I†vO…ÏÑ4ÞgÊy3%>·³ €|AÒÖF\R¿L ‘ä—¾TòÑÔ¹T²¹.him}YÑ/íÝÍš¾¡ø“0§ð9Úõz2}ûí¿»ûîÿxÄ‹ÈfØÀ5½-pÕßBn9èÆ§;;¨O`¿·Å·u6˜æˆZgÿ²±5QåcÿX·z7y ssg„ÓsU”V÷æHyópXÕž¥ñz·Ó-05âÇ·u;J†÷8éO ¸ÿMyÇŽ˜šO€xÿ‹„p„”ü¥ÇáíNޝr™ƒùlÔË¿kWù®ÑÈw3üvïÏðÁ­à0eϬs®ù_AÃÁ£}lAÿ‹oO„ÙÇ;DAóDL?²JÙDAµ;ÚÖ•óÓèL¾¯ÄW}¥;šÞ/é~ž’ïï“·ÈoÝ_ףϦUZ©öÐíÓ¢q¿äN1ì~EÛFωÇ!ßFº.TS¦A½¥Õj-®7TÛ-N˜á‚ƒ TT kóJ%‹*odFè´b´­Ú˜KcÞY— ¿¢lÛ®º“tèå«laÌO5Ú}Km7F‹ò}§hR50”ÎX2— o,Èm·’ˆôb[-šhO4oæL_I°UØ´öÌœ‘ŽƒH]0ìþWÀ‰´··neί›¿ÒVË-º¦©ÉÓôLŒ ¡gâ4pÖÞp¦ß±“¶i¯1UÍŸ2B^½Ã.óXpŸ¿ߪW@[Ãæ£{»5O¾gy¸ö—l†¿”jYm›áÁuê¦]nÓR¨]äÈâáeA^žzÖ^Ø{}*½a†-+­¸^{áMë{0ÔÆ0+Œl¯qh"§ªZöÒb ,¬D^=,6”¸\Ó.T7á;ÁÏdîÈ7Yð |WAŽÞØ,űÕ"î1Û,ôî•ÓoDûÒî¿„ñ/ÚkCë=Ï'=”c4•îì4aÅë•Ý ŠÞDËäÀ9¼ÒI@­Ë &ìnMš–ƒþd l8Âl|ÅqUüË áAGÁÍc š5XÖßV.½”À¬%#Ð ˜\’hl·Œ¼%@¤LõÑ’ã‘þfþºDºŽ­+E4óÄÍêBjR”:ÇfzÜã>¥'Û]aVÊnس)uyžÖ|£š¸DOL`ƒZašÜ®öh‰NJÀ®’-mS–ºŽ}ÿñ“m wýCf1¥L'¢¨‹¹ -Asm²âL;õtïœù^p¹ƒÐòƒStñ.Øó ñãTs5 ,:v–5‹è²kdmUçCåÁï%t+éW¨ß’‚“Øš”Š)ðûð­næÏÊà ¸`8ˆƒHp÷Œ43"Êýj_1§mª®‡vèÊÔžo+ ÞÚ‚È~¼q*³)¦/V݇CQ£#Seg ¹'ò—V{Ùœ§BGKÌóÂ2ïƒF²};‘õYß¹CfÆ¢ØÂºøHv:=»‚µ¨#Ù3'ØÅê ¨›š`i/Rûíˆ8€j‰F ªTn…$]¾Áq ØbD^ð}?@³x‹´$”†o{È4©ä7Ô9bþf¥ ŒKI+åMižˆÐâO@ŒˆòEì@|5 õù! Íf q`GuF'÷NÓmÀ°ï0æõügã ŌӵиÛ}ó/ßo+\\©Ž_T|ÑçûßådgÃrûȪBu¬žæ^øh8³ˆÙQÎì9î—P»|-ñÌ ñƒ¼ÁlXÞd DÞFH”„9ëA5!KÉ;OùˆNds ©ùâË =—ê‰jp¼PÊVãµÝ¥#ÄS<îŒmõ6Oç˜ý¨ÏJþÒr§}ä©káëÜùU+EÎ î.݃šŽÙ–Wÿ)rû¿z«13Œg%¦Pq7e)§útX ü1ZÑîg€éHnÁAáE ¸› €"Ô0ñy’6á@DZŸ|KšLŒûb ã‘3÷Œ†ÂŠóFúH86÷éóWÇ!ŸYãô7€Ð‹-‹‘zæõÙ/D©B«W «\'º'\rÍŽ­Ý»Ì_­J»ªÌ'È2©“¬Å©vëšIq)u¨X…îÕ… Ió -ËùôErsezìIåþÚ“\ÖrÌHÀÄóÉõ’1î'yÂç &Ë„`òŠR3 »µËf‡ÐŠRºÿÓ‰KÚÿ ]¯‘šÜ€”»öDq­'S¦xÆ{b£°cùÝÇ笅]ß-h…ÇúË9²æ°íï¤ñÜSÁ’0Ôí DÇ!¥±8Ñ âœb#yG2Õ Ëš\%îU;»d™'½:©ñ›¸’l7/€.Ö‹ÉU Þ‚9¢Ééw7¦GCF»²q»®œÜï®°ýbW—w³÷N€¼IlÎJù±½±?ħ(SÚÁGÔ³ûYÛ©*ÚS:z˜MHb§ÀªÏ‹© U„d™'sÆœ˜Hm ‹SDrŽ/F9:i¯GøB¢‹(_ßÀ“tp“ W eÆÅé+ï9Î "bòu¦™#üa ÿöçú dø› ­Ñ +¥W› çÚ^Èœ#IY #«]»ùDuÔœ¤>>k4z²O7€½À2›ˆžGº*Çí ã©SãeQ½B{ô¬*®Ê[aÛiÚÿ8'Oȯq°] Ë6B þ\`ÐÕ,ÐÝd¿Ç· pÛí¡žNëIæð~fœàï¤×›ñR+lRîíœAm¿×£èòG'°yt_OÖ¹ ×HD;W(ðœs6Iµ_{%eus' èp¨Ú¤zm¸qAãÚópËtqtÉWc_e.Ô Š eCÆîIc•k$ÈhŽrô³<ŠG¡/zÔ)£=ÞuÏf…'„{¢À >wéU ·öŒÂËÄ©AŽ ž¶¹‰e(tÔ芋‹õ .9*(¹úÃq£dЕ4L8?:žðoo™šsƒåMòNh{û ùÍ8Ý5Êïž‚—”,}:t8îfû‘Éiiˆ>ðm SétúTahæ9_~ð :{èbÒwˆ+HÞ]¥±Ó¨4ZL7ë^m}òv\u:ÎQx\@ä ÚϱU¥Ãyð‘jïä¬f¥Ý1z|ˆ:~â™zZ}+ Ù›2ð%‹òºì§i”¼4Ê#W›íkM-³^¥ö—²æ”n9[þ 7…ïe®EÔæùÕ‚À—¸µ%ÁëlHp|S„<†­r‰ïâ†ÑMëËM¤Ö+¦6(Æ=ú5玥@Zž ŠªL%EBõ-Eçg(9Sõçlƒ!®?S”óò÷ \jô ÒâÞ&?xè6gû‰–`½ö;®¨ÙÈÚå p¡`.ýD¢„Çø¼þÊPz;ÓgDV´Ê;Ý(V´&b²†|ÝÈ÷@væ®6g>&®'=»¦öêñÌ‘öNïrŶÜÕï«âž‰n‹øŠ½3Ë5ç½qo]ÉG˜ÈÛ©©nWU"ÎtÞë¹ hw¥{Šñ禫µëf`ì±é§3Ì.EÿÞ»±ûù“4÷Û$—#â¶$ó£uÓçOÊÔ6ÞvòÕÎAˆ‚°(Ø<çæa‘0V;ë|DÙh´õòè•8M2d5}¡°åp"6\¹¸)v4IR ÇÏ~ÿ 9ü0ÐŽhL¡ bñ**ܰ‘hÎü:Ä$_ñ–ÞgÁßò>ïs’ý§ò¯Z‡•cŸÒ (_APèåHÏl­¦èl†p8Pý—-M+òâÞË*›FtÞ•Q5‚ÌYLéÅ“ZöpXõ‚´«¥IúÌHÐëÂŽùÔÛøaÍïï¢áéÝàFù½Ëu†ôLºŠê¤š2ÌȲAH™“Hç&^2Ï{d†7‘Xºù¾Ž!¸Èãr„óWÚ©aÁÄ[²QAÓ²ØßÓÉc mÊ-•øâ-ÌkKÅn {qHRu³ãy¯Þ) ÓÈãšÖ-v,—5Žš›ç:ƒÇ®<Äáø$HÐ ìÂñ þus,Ô#%±&.¥Œæ$}k¨W¬ƒùasñ—[VƒË‘æCߌˆ¯õ òŸÂ63›E°†Í'·ˆ8ÝãÅ[âęɌ,欘9½QS_Þ½wœ…(s˜vStuÓºæ=ŽŽ$L¨NAc9H{”ÜÐ ¯p¦cþ%uQpb{&¥s 1ÅNÝËÑŒyÞ8Ÿrgwó{”hš5=‚QêP,D("“»¢HëvUp¤?!¯¿óæ(·بW,ºÄQV‹®÷ÈåÆÝ¶êPbt~Ãía¢\Ûá°‘ð–£°D—Ì1½#®{LB\Ÿ–÷²ö˘ÐUæhæØ6Ø>›Ïé=žØÄ¹y÷D }¿83¯fLc™…ÜMÜEÍíAnÈ* i:ÛÁ rº¸I ÙÊ‘G ØÛÐèÖe—[7øà°±\X‚YO“áöEØ9™gÀß|ÔÛtE‘cðù$à39›%«O½Ë¬“^y8H¬VΔH2úæÇr»ò£Hb94P™¾šÐîw9×Ü"ca.%#šDSR²÷œ_¿cÏ邎H¯¦ÇÛ¿zòáÚ_ Ç ÓZ,Túâ†V† pýÂñRä=§öâáFXXCj¹ø´ƒÅ˜¼†M·í¹ˆ2!²Ïxjòü„:®GµNÃȵDÙx¾(Çß.\çLh-š‚á+Ƭ¯yã‹‹ª˜¤²rEZôè³Uñ%n¹"ìžß;wÂÌR°x8uŠ-§¡OÜ€¡—¬WТ7J€¡½Yï2f$˜›dt¡1Ë+&ùE[Œ•k†°²k†ø‚«M¿kFþ‚¬QkÌ„C ø>_=·ðHð+«á4£,&;qȱ:ÞÉ0©k†œÄù+,åÁÃk@L5äùa>®@¡ÀU¥61õ¸ÄubÚ€{ªðg´7÷T©V4zØa07ž˜Ä…K”ÆY±XTÏ‚‰C`dlÑH«`N);eÎ)Û…;GítQ’ÆÕ%0Q$݆Yž=ÝœœÃH¡<[M±1m¡à@Z§xjµR™æ[±té~Nü Ûõ´)dKÚº<ƒ‘MæÈaõ>h…ŒS¡¡n/=œ¼¤œ3^„?¼îQ$('ŒSsÚ5paƒ£ÁK(VöÈHóÎp±•|XX1×O.…‹m KML3¥!Ájùñ1þy¼€j*œÙJÔï\k¶_ª@ã^O™Š#ƒ‡«ê&\lÙ~ !]SŠÅWΕ²Ï;·8;;zqå#§ŠtõèAE,L: žœXÅã~S¿K+“Á)c›ÄÇ!£ök|,±ía1MÄ®LvO“ß;E×Tôýå­êéiJCCÀWF­e‚0 .ô-àö°ÚT'Aüðø6¦â½ž@X,¼ŒË̉©öÙAšEŸÈ8„wÒ)"ûqìˆîGûk£¼Åè:%j0qx´×ßd ×°öùt–ªúj˜‹ŒçÁy ë!Ú®Ÿ@HR„1<ûEÜ Êq´,‰Š÷Iuz©=WïÁXè~—ÍØO,$- j¼‡Š‡žŒå¨OBcPcpóCvÜ?ß'¹_A˜†½¨/ôèPí¯¯d.g5Ù(Ô1ÏÂ&ªÅ&Bg áÓá“E³–ààV'ÈÜc-²ÒaƒŽBcÒæp’9„ÅøQmUbŸùÆ´I*­êçöÐúnáYØOÖ®ý^[ ø— è€ðŽ”²ïÊtÎÙ–œ³‹Ò´1ÄIË=éô–{Öì©(øø«HŸgFò/¹SõS) B }Wx4Á™;à×®(BB¼ð\<÷©¶¬7P}(°þÚïxïv@è¥ó’.ZÈ“02."àùU?Ÿ Ÿ§òÞð#©>Î1ÓS‡?ìÖáŰhü£?«Š²—üí¾@)dû‡Ê•âú‹S'¨q»îŠC\l&$&<¹´@U_f´â039@Zk?²Â|«†)fC ,ÕB¨>ãëÙ—ü-ªâûSÀ¦_é)OöüÂ~†øö¢Í¿ P8nD¢1­d’£ÅÆ™Ÿ#9Åȳ°”£+ Ü¡9. D¤çMRThXŽ÷QÝ,†¡à(Zœú±Ýúµ&û¥n÷LhM㪠Қê 31ÉK6¦BÄ0Iy0 1ne‡‘0ÖcÚü#)¯Â0÷SH¼7'´ˆ* oZÐËÇd P´þ¤ÉC]³FôFǨ%Ç÷/fwkŸŽ)C;½‹`Ât5´m}Õf3û|ÉAÒ‰ãìcÅûBÏ׿ £Ø‰4Ê´]H&R²áUŽðµáUn0xdFêºÝÁ–íÀ ûß‘šßôõ`)»°ÒJ…Ù¸)`œêé7½šÑÁ;<ž]ä+^©ÇOü¿kîS˜õãSÓsÕМ&t‡€ÞQKN W“ª6ÚŒ¼¦¨ dÑr(mÉ”nËQ:æWf=|šÓN÷›)¼Xºƒðh¾PúìdY7š÷“"œ„ŽZ©FS埜FxpÍÏ‹ÉiDëB“Ô½ÕœFá i3‡0ã÷5hÁT¸CL ±ÕòöK×|Anl‰sz¨¢Î\ ƒC;_—!«©Ÿ©·®9­TUØ÷¬²ÈJ¶8üV }žw¨°¡?æðEˆëzr›,Ц7\¡Õär)QyØSñ“žý3sÎ_G`Fmj||}©åÑJû]¾¡¨“yÞvžL‡:MçL¢ÁeưH?2W«®-µ{ê»×J"Päh99£šFG}?m}¢^ÐŒºZg‹zmôî|bw,[ ` ‡êtÜSú¬¥åÝKÈ=*ÅJðÔ42/L›_8;èì«U„jkŠvþfPÓ7£‘-LO:µ©0Ü~Àß.*´µÄŽ©N38ñuzRi@°Þ>9zBg´ïÝþìµ™9µ^…™üQDû=|™é¡מƒÖí€scüô:D.À£•sS7˜¼²¹¾ÕBRh¨í!XNC‰é´ðÛ|­>ƒÃðwÝÉ#½=ôÕBï˜îºv"Z÷«êÔÑ™TÙÂ?yé×H*Q`€€–1þÿ»¿¿.öNžÿ¸¬õ—ûÓQEû¶7KàHïj:›-‘Ó>m fO—å6iRXKH1ÑJ¤GòÉî²,Íž J—ʤ¾–V­Ò¢”YEQÊsIo‚CD¥ €¡'„nÃ)(k£þ>éN3a¶ÜI¿™è¾Ùòºæ:8xÙæïò¼4‚YŠšoeö³½ãâP3l…¹²Ó ´ÖÕПîãîq.Äí<:úiiw,Žñ¬¶K¾IËÐ*é\²±y0#ã×ɪw ÏÑÆÜÿîÜEÜïÞqkš~^Ù«Û¦= >øÍgdžµY¹ÇqínøÇùî—,¾Ã!¼%ç¥ðz47VV°/F‹´_h ±‹J†±(#áT oP¨˜Ál´Ä­ªeÏñpákGˆ½çu¿1ñ³öWNoëà‚}ç-žæƒ.FjáŽóÁÇ«?«êY©è­%†/)óÌhAç- FNòÈ ë§ÊÀtŒ…wbÿã2Ý0;Élb„(î*j¸-tSJ$ªN¾‡º;©9*ÀöÈ™p &(:‹MyLÐy6É3mM38Ü3c#ÊNS$A[3k¹<`’nG6cÆß"'·’Èsq•¹J:• š|Ž"e³Ä‰.jgGRM3ÐO/ï]V¨’O2ºÚéÙ’ßÀš•òmIÑ¥tóê*¢ã‡/$¶¸ÁÌ•»PëâÓ°.ÏÖ-È—1q qï GO¹Iâ_&óXš¹„gá 5ÚFaqøæ¼ât©sV…d¯·ãÖ²ÃWÏÿЄ$÷wMb«j(X‡²ZÅA㕃bÕ—ÙuDñvÓD¦o@¥DK‰‚¾†-«¨ À`ë5ËŽ§37 hLº …LØ@F™µÆ¯WíÒ(8 ›ãiOᑊin·%ô’å¤Yº‘¯ ¦2Y¡7ËÎWر¶ ÓÖv&-Ÿ^$ñ´Û(µ³ Æ¡–ÀÎ2±$Å;`RÝëÀ˜?HŽy…ßR²"#T…¹¾a2.œ&`CÞ™+ýœ^E¢†×eêj”€3DºhšØÆŠ †rR›Î="5dÌÑ¿ w= c+@ ÌQs”kŸ2Õ³EаePÕYæïêÁkv­rXÙW`U>ÀE”v× EhC£«Û¯Š™0”n”áö Ium* Ì\š½^2"åp†X¨·v­J4ãÛî;eýÔa¸•ÁÃq(Yòèv% L} pZ_'Ýé &[=]º£ùÔÊPwù¯µz­ŽÙÙcû4]LÕ5ë{^o»û½r ç7xýÓ7ÀuCÁoþÎüSl¯W^í¨Aèωó–·=mÎ}™"Œ ÔTHüì­:žßÀ€ßPí¼÷Q«p[rrc3“…‰Dºtr;iEòg4®ÉÜ„²ÃÜÛÕšƒ×°¿}+¼?ý8ØßÕ÷÷äÛó§]J¢êð:ÕT¥5Òõ40®Ùñƒ…Žœú%\ña]r™S³já•ñ²žûÙñƒ—&AÈzºÉ{ª %:Ôêvºª”Ù\V ‰bXÍÄÓ¸åÒ]‚eáóK¤GsKRV ”é•VGÇHìI?jã÷ ÊY JöØÆ*&†Úæ&¨G4[Ò«*±Ù²Ë_ hèDcR²© ÏZÏ&Ì Z‰WR,ØvS8øéÚ•Aj8P…¤lU§N<$‡òI8kŸÄ#rÛ£ÑÚm(ZW]wx–žQ:ˆÇ¨|Óб¨…QŽw±ô|haæºxº›É$°úW’\Ò²8Wìä^´µ˜›‘ž£§“eºžÀÉ×F›¤cíŒö°/,"¼ÀÖ0ôÎFs}${]ÄÜÃåͳº%ôéÌÈå‡ïa¸—bù÷¼Ù<ÏÙþתãHÆÙÖĺ°:\;<Ì¡ëH¨£îf̦nwO¤Èf´dÄse¸í(û¤ã³o“ÄT l——5ôü"l.ä7“jiª,ûŒ¹’Šk <Šßv9µù¬¨ÑáSboÅÏT<޶ÕkYaö©‘åhµåbeæv,šÂÓG4SÐlCüh¢ÂveñE·‹=GÓUxªJó¥c¶ ÜÁq í0 @ SÎ:¿¥8ÿ|åã“·7™&¼Ài—m¼ó³d}¥êxÛÎŽS꘭Õ9'a¬¤[}Úù¬æN— PdCKj h}‘Ú¡Ê@΢|w‰ÕÛCXÛt%Nl†Vª¢àÆAýÌxÞJ 81¿¡öÕ±N£Z!å÷<Ìê­QUû=}ÎçÔÞðs»¼*g…ðÙŽR`[¬Ýý¡­Øa´¬v[«‚ ‚咽TfUoTþ©˜ñõ°™¬‰èdÇVSm9q•Zˆ"77Ýzq-"šÃBÄeõì"tAYËÔjfYÝ“~hœãqÀM$¶cÆ3™ÿ·y¿¢,mŸ¡ ^oÑN¯s'låOK•R&¶hËžµ#/;ñ¡Ë±²ðÇü(BxcñœGYéxCqlŠ ˜ œÙWb.íéˆ)…ÐÆÐZ.`çõÈ0ŽPè…Ñ{°F0¾h"ôþ·Ž`{‡Àõ,aÙé‚£‰A}sŒì¦_¤+cãˆ_s±ûIȼš¶ß#ˆŽeüpö™8»!âÏF. DºÿPsÖm¯ô¶=^Ûð$ï¶YEœ°²­Äzò›}ãJäû㦠¢CB˜ÍÓ14P@L—hG'qçÖÑ›?7ì~&mË®&Ü(À›A"…ø/OªY5>\•|êX…D:w1š÷ngýè ’’-tcU9k½Ç²ñ€-…Í£`@ôÖ„| „û€`´éþMðMD¸ 8ì†sÖ†—8i¹êÏâH&äMxòj2Ù¢ƒ2’zˆ«`Cuq-Œ PÑ[`¡˜f"² -’亮(\@û–­î 90±Á†ø ›Ç_.§Žª¸¬]–9¿àÒ«–8Ç.Cú½/ÉÓ¬ü­ù8áVâVh7{µ:ã›6&Ö{†\Ñuµ¤­¤ùIsð¸4ðÐU|A¤`Ôàâ„ö0̆©r¸ñUzWzç^}ÈQº^'J¤Ätq>#½b1Ð-¤G–4~‚š{¾l†ä`›c›s¤,%;ŒË]Nr*U­‘¸7“g4"F¸ŽØŠG5•3†=}(m]ä©vV4Ø ãºb¬-êÚ˜w—Tœ °«ÁꯨÀr?3áhŠhß²8!O^»£ôG·¡µ>ðM ^OsN ¹ÇS¹³p¾äaŒ¦x1A¼ä£¿°,~”ï‰8Çåó Þâ•ô7Ý^ÁÎÏ‹À®6—Œ¥úZñ‹Ë Ì/Vóñ¬î„KT?aS~è5(úêòâÜ }¤m¢ORp0ˆû€MÈ™M´M§$ê–2¤ówåR¬EÆ&Ž¥"‰Ðñ[/KÉ×>„bú#¿5zV +WÞ>"¶¶ƒ´F“y1±ØOtÎÂÛšNÆê$RÇÓ´Ñä<¯ÂNê|‘·»@À8& NÅs:7ö§#NDßy¦gFó›D2j[-«?ÕW;æ5ÒÕWsdBä¤mQ,aÆp…¶ê<"=3‚oaÍs|ßqI>x‹õ ØõH=õ<»lÄ>Åð”ï½£Dô)oŠ6¥Åo©+ŸŽ ¼(•Ié&ç§u®všøýåÍb*€¼Ö(¤É@EØ´ÍàzÌÒWlý£~Ëïoî'lîc½ ÓúvaðGë¦5Vcåm.üµ…`:û!ól#`Lõué÷/m]ˆÍ ‘ƒ±üEØ7ítu26ýçæÉÊÚÿÿbÛiZ ¦m,,4H§°<8‚­AJªŠL/çíÜ weÓÈù¥ù :'ºó¥8܈!“ˆÎn2n?ý6Íanæûùy× £^Roµ µ [UX`,2RâO›s\_|c‹7ƒåT„zÎh¦¦ ›òÏ2É|xÓ¯—ùaî¶AV´øˆ»a»Ö¶L•¦¨‹Ä¨!7r¡)DY ³±G¯îOöÓg…{Ãí´ß#ÿæv´C}³–Ów?÷ƒ~ d­«©Öf¢Ùt„[µ'.û'›?©úò›T"3fr¦¼àž¦Äˆ=8ü ÍžÔúÄ£íR4iÌãarê+¬³™«R#v%ê\¸ÚÍ\ú-žÙÕËÓU:¶{PUØ $î0dÐ9ÞÍ(g,ô›ò!…Z_æÉm¼‹6Ÿ1¼¡:¾t#ÞV抅»¢}äS[R+›ÐJñÓ ,JmîÅòê¦L?éâëšè3Èä¶…>ÒûÊW.Ü4¿“¯PˆFÖ÷ŠéŽžªŸOV08£ 'y‘¥¹ñÅ2ÅoDÕz ¦&<¹céÂñf´£!àûÐý´øñÅßyYÈÞ„ÂÑ6gèÊ­³5;¾bÏ_ÛpN;¸ÙÒæJËF¸šä&9‡´ƒ“hý%–“HèK´ÅlÄö?"ë»Èx•KJíZR¿ñ#¦†fÇÃl)]¸b´Þþ¥¹NØ^Lvú_»> ÿæ’àAìßc‹çÉ~…àîæ/^S°¸ÿ™Õ°8[€+N—[5Ø ú•5Øåòµ›P0Ùåb-¦ gîk˦ áàk©èT¡m & ´@Tà Ãe*‘D(ʈ¢ãPÿÝÆ*/@ÇÄÅFÑ\¤!ÀÒJ(A ËFÔ/ü§¨jñ™]\œÑÀÄÐÄÀÌàG=¦†?) οtF[¤ Púë+’ýw¯èbhÎ däìâô—9U14—µ4r2tò$ý¯1tv¦v—,Í,ÍÿébKqâ”Ýÿ5û4<»ÄYÚ"? Ù"?üã `ÕŸZ¡H¸¸L²‰ú"œ*F‡§O”À_  Ö4. ‘ÖÚq„ɰ¾ÝX?÷c‹g„e§Çï Úf&­ÿõ^#~/V½´>"Ö î›Õ†¹Ìç†Ã¤Œîf¼fm/ÅA3è&¢kãv3f«{ŒQ$¢ç$ás·Ó,“ï;-Þ½óØ÷t£õ,ÈFÿ•$úç„Û•CæžÝ•=\B“I‰ïhœ­‡-qjF Í3¸Õ6€5ÖÜñ$î£Å;6qí6q’Íwšÿüyöä«çÖr[wÍw`OˆPÒÇgœ§šð±m¾I®óÈùž$|R'±M–K…Re©§*ñQ ŠU#ENÐKÛ†Û¡Ç„Jzš…ù#b$d‘Vôp]y¬-¹®oц- ês·¿}8žvkîæNI–ºVIŒå)·™Â¢¢°â@JŒ˜Îl}P$w…ƬC´áÇo’ _,—ßK(èÙcZÔ.“P"%ä±Ã󹱘ç©ñ>âÌ8!1lÁÔJb¾°e¥¦ŠÇî(eTó³)ÿ€ªO+o`–å…¨'"æáaÄ5„$u‡Œ}\'ÔÜ„{¬»\”°#}dFñ'ÎÀFÁGÒGsÓM‘5g0žÌ&iÕé×°ÉG6鞈YYzq–,yºiúo]I.ÆNX$ŒJ•·xŒaÂí1‡°¡l^b"@!1¨µ<èÜ”NÊ#UXÁ*"•‰ÀôÌÎ ú°÷/#Ð]ÙUþ¬Ð_˜ûß`VÒÐÎÄÆÔéŸò-Å*ºöÈB¨| IhEÅj´úª÷kv_•å–’säe¶Œ¤=°¿dZMܘ®~ÏÉ%sø%ÝM¬!Zy¯ò°¸OóLgw><¬¬qáx KÀ"·H¬ÓâhD“dù{ã*¢Â¢Â%ÁV1Mj] ­$ ¿HèöÕ)\ÝÆnº´Ùdzõ4˜z%ÕÙ@³ ŠænÌ?·b6´G®FæxG)¹e¢¦W­+u᱆Epd N5·)Œ/_ä³ìûÕñ…¸¼É›Õ¶Ùp «¶už‡ÕÓ+˜†zåîº%Oüä³li#ÃÝó*™Ù8vx@ ¾|p[²£¬‰I¡`´;g¦ìóazdIr> ¯ºO‘;É€ÄL@´^µjÆJ)Qœ‹¯ÒÄŒ½ô sNz§$ïq¶¯±ïœg©³ë%]ÉÙPN)[íˆ:‹ÓXiMìÅeGn‹n”Äô˜¬{šAÃ-ºÜÙ©¯X;~†,ÿìËõ­2œséUÁøãYûà‡sg[HB›kè:mÄÂýÌøËÓLlC±K)Pn/gÉùÚÀñó9Á“¥+kÝ õ«}™œ1ú"ÃNæ‘pP°;Q©ætHòLÙ—"u@­uÌgì]+Ù­ÁIžn$ÏôÐkÑí}° ©Hç]úë,¯ÞzjÜD0`»Iô¨{/nÙúa’ \цdBP T5»÷´Ñ@»ÿû_* hü¿`[úŸR­Ý_ªâbêôo©öã¼Ö|mÖjèÔ@Uz©)m…–aºçåPˆ¥@0±ÃÈõd[:¦˜7&í¿iäHÅ>|S¤_iIu*¢ØOOfùÌ8ó›=ÄÖîñÆW83:JdvŠU‹dz­or(²(rÌŒ"´#3•µlîNBIÌŸ9ª¿Cg‡½d³ßp€¬=¼ËcFØÎG­ß0«høNãåNô8ãRÉ[I}—St[¤î9^Ùw­Ý¾C‰´`¹€‰´I92r_@.ã韺øO|¡Ôðú²ÖN«1˜iÙýÐØÍr©ùq¡‡ nd¤¹¡ù„[9îý’ŽëZzŽO¾$x’p)ïÄVzøÂÕ9ìÕ<ˆ7:n>ºãÜgf 7Ñá’3±ýe°!ɬžÌ‚óhÃܺ¿\q£’hžyùâŠ×ôÜ\\Ù¥W ó-†ÑP6ØívK¢µ5êë#LQ0ÝþØóÂ>ü¦p\Å‚LÝV¥Kæ‚ôšF "R^`0¸š¹ 1| ¨MÎñýę̈0×½ð[qîj!ƒÄÊ´áÁå§XlõѰyÝð2XÔð33Á˜é®n ™—àsœƒê{‚wª#f!R˜;7\¤;w¼Ð-…%®ÖS«Î 3ù­÷¥Íˆ ­ä/Y}%äOJ¨ÊÕ×ÚÖ½Gä¾ ÄÓ¨vÍþ •þó"*aß”[ò`º–VG¾gæŽT9ÚÞw¨ÆŸ‰‚.ÖßøËýOióøû÷´¹a·.ˆÈ‚x “‘0[’ÇŽ,·™Êß,–Ÿ'*|%R â©3)…‹S-—ô©JÓ,lUä+(Pq^E„ …XA=ÑØÉbc>sýºrC ð£Ëß–8CSƒCñv^:“§ò\1ò}òÌï=)U4j™v€ëþ‡’*/RH‚(E[Ã@=G0 V°©Ö³!_jiV¸ÚT5M¾G)ã=ú1™)„¯p1gzÒXZÑÙ}O 08éd†K°!:Zo‡£ …ˆkuÞ`ÍB^%®¦k3éÛÝÔ¥u1¥6#“Äjúk²ÛjÄþ¢é.ÛÞn.ÙÅÊ»f8@¦‰›+f}Á,÷vO 6¸îñ…ݧ¢µ©Å¼ŒRw¡ƒ‰¶©ržüð]èlM¢ɽ¡Ìþ„h䂼+ÛS†üe`;©+~ c%ùŽÒ!ÒLpô>s!tê*s·=س¦«âž»¯PóÜ_úèFÒ;š)Ò£-_ȲhT0…YÃhÇŠ :t2Ô£D3<7™³„+6>F±‡”á:®ƒ2µ‡hn ^?äÒrú‡&IU;‘5¼'ïñk"fj/vNƒú ÿ ~ª§™A Ä×ÍZ/Mšß¿ÄšœxA @@¨@@¼ÿÿî²UuÕqTQ·8 Òeóåü—©Ù褱蒉 ¬q¤2±š°+–3 ‘Kh&w'ƒÐ1üõw+[ØÚ.•Î­ß urxK‹Ħ¾¸?®§ùOߟ©;@] ôÆ@œ‘FqL/d´ãý A¤:ñH}ªPÒmä{°`H&CŸñ‚µaª€(d;éQ„}tþ˜<Â….ê|JÃhCÒN5Úä{ó ë‹é7عÎàïÔJ8»å%›@žiäYtœÝí9,À“PP*Ü‚C-cyŒF¢;¦°¦ubM *¬2{kåàP%w8:m4ǵÃâdzáè3nÈ^fÏîŠÎͱÂ}Iù~%à98À̶° b­³€ÓqQF_[¹Rc½Ì\‹U1uÕíÁ€4ä%Üèz}~åbS €áhB×h¶˜šÀÖ$–Ük¬û–Újsá/n#4P<9¯«¦]Ëæ2¥úpLo¹‹¢yì¦ë®Žoõ³ -ÞZ¿¾hå²êèÏ2š­Mªe¢iÝd&6?JViiýsq<—‹ZOÜC1œ ÌÞ@¸««fÅ{Üá^ÌÀzé#)2ÈŒ,é¯hV1ÒðX€2—rÑy\$v^ÑÙè’°ìÁ»p[AZwä€a3Igƒñb%³9ãV Åh#o"3fBn…°Õ̇©d—Å»&/Ì}ˆ1œðRäú À­ÛŸ ÝÓ:@jš›É2Ó8£ðœCÝX}øSëƒEKbÁ)Kœ ClÒ>8÷’}¹¨›ZæO®•wX.pëºXZâåý=wPä#ÚMÙ 'ÁªGü–ŠrÌÃÓÑ>Ƹñeyg½&²¡«×Aäo±Ÿé‚JÞÕ™òÛLò)ÿ'ƃqáOƒ ¬£$.…wÖíÝÉ+çÞA¶Y¬æÀ›1óãE0æì¯=6ÐS¦yç¢?QŠwì–ðóo¤%Qsôa@SNç@´l(Àóô¿8,qÉiD ]a`ìçì6%lu€º’ ŠgKâ q€Þàãmž@ý% [¡¿"ü¥J…_±ŠÔ̵1iKüB?ñˆÏÌã,ùkCás…kxƒ•¸zÃO`HJ‚›¬öTÞæ–Ô…ÍÀ#h©­ÒŠ“½ìš´Jf¡I¯!NõL {ûÌnPÝ¡pÞ¦Þá éýÄ .,’5ÈN)mì£âÃ;sÆÔ_<,]2Œk&°Š L+Ë^þ«ƒ âQj±ŒÏâ²GLÃ=iéX$TU½.à jGÝ{êüi¯–ñsôý¸?àÿL&›QwÅ{)Yå_GRÿ™¨:ÿHýF ZÍVù/fñM)¢µiU TÑ–b„dS£žO…D…S£¦~j°éŸ¯ëÛ‚cx|ÃÚv0ñ~;–øèKU4ŒÉqÎ9ÉòzæýX˜ùÁˆÀÊJ4FßEÊÄ5a(< ¥“Ü(…V[æÑüC .:MÉQ.0fEµ+Ÿ( mEusv6@Ξ˜.TÍÞÒB¢àG±·6¶—Äô±Ê¦Õ ë¶í¯YÊULjtTVÒ¹R»br Ô¦mYúpU¤(ùà xN£ÃTõûK/òä ¥ã5MjËK†4€Éé[AqHý€ø¶_©‡§„zrˆ±™SÉÞJ,j™¾€ÑZ G…cÃÊU Y¬&€øw¯CFbŠ-#å«$mæMò>dt 1†ìO*Ú÷zåeT5Îq„ùÑ•!”ÍœZV×u`ŸˆF=¸;Ž%Û‘Hd[!O~½µØ+qÜXêÃÆ—–Åü§Ý&ÊÚë‘gÁaÔãáój V© õ^–¤ÔÐäµ-&‡FT'äŠØ·pf$žÙz@>L]þ°s5ž®˜ä>àßÏì÷š=pni¾óv3ûÚ8W«ƒ3xÜÀ#K7wß#ãʣꬡû°Ý´Ý'›¶ âg3몛¼•ÚŽì¿Tëé1dêOøcƒÞð)Vxå([ziÑ.8¦2\Q…a1g2c“î…F…ŒY¤‰u}Ì/xý ¸éJ%âÇÏè͉9Mò‰eˆa_ƒ÷YÓM±‰è1á(‚Uˆðù|! à…ÉŠµ ¶/ ç® |¼$˜;ÜÈ'>çÈßšPpÀ‰>S»u€ ýÝ&ƒ2rʾ¸Gýxûì-’¸ãôŒ'ò‘ƒ- pbnõ5ú•ëÿ›P¼úä´%´6‹3WR (çû34ï•*:W ‘ùñäXÝäTAø—“ÎÏŽÜúå;ŒÕþx*i¶W¬Œy¤)ýýS eæ{b­HN5d[äÀß]ÑÏèÜZ±wAA:ƒPÓ§¸qÔ=~XŠ‘ ¡4<Š3wê5†·v°.6¿PH^+ê‚_ â(:愪œØûY¥ç¯uÀžpC<´öè-Zá “rè÷•¸}3~!úgËB\ï-ª[Øñ}AåÈó”HŸóÃoÇì¨ß8¿þj¡W^ÞƒÖÕâºØo¼Å=ÄqÆ®úø—d pü]Ë_<*÷¿âÑÿÁT«Y+£¨cúÂÚh`(Výj³D6ªD§IQSV 6Ø d_]ÆO‘Ó€ÅéèüñIñá[ÝÈÖëq-É}äö *^ʲ$úÌäiÌ;èK؉ÞhÛˆUã[¼V€¸ßº‚îœ!°yW A‹Î»c° °8·‚þÄŸ´µM§–äÈ•Æ(º‘‡Âmޏn¹káhO‘Ýå²Ë¡Íß½K¡sød›÷ÝM®Ê;…ʲܽ½Ôék PyGyXÁ[*7žJÉxŒ¥[ðèh?Øzˆ±fHaW·µ—ªA·9²šK6=ã:ïn¡z˜Ë37[ih.=U3¨âééÝåÛyžgÚI¹Öê{6+vº­ÿÅtÒÁ«vlË<3©=4•¤ï¤Ìe¹Æs«ì?YjW…Œ"–bâ»­ùTôÂù^Ý´eéÙ{¹Þ#Ƚ¬Å„¦$5=&Ý’_"JÔP¥£G¸á:0S|Ž¿Ô-Û4:—Õ9¥QÁH'Å`­h]›Æˆà¬.X+ó†­Æ¦QÕ}¡–Ÿróœ&]’C•Â;‘ãªR`—`*÷fAhòoä4'Œx—ÂÔ´5@Åý©]¤nP4Ö·v^àoî”qܱÙ"gÉŽZ‚U5Ñ {H²Á×ús“ýHrÀøÕrä 8à#og[>øÒʯ€¾ ÓàæîX>·‹¹ÚKò¼LtDÈøM€l÷K®HÌf®2°Û£1i‚*»%gäu’Ie·Âéá¸ù·ö+üà®ñ„`ª…)YF’haƒ)ñ˜°»˜7MâŸüÈý¸Ù%,ˆ¤•N´«·W¸¡u¾&˜òô·+ú¶-NP†¡Œ‘ËÕü@¦ïc϶¦k4÷ŰÊÉA{,tšÐét³Æñþ3Ž÷‰ö›už¥‚ºÕ1Œg¡µkþÉf:(æ½êÇȰðæÊî“í4|ýjÃ÷Ù…Î¥`U–öÏ2­ FÍ­£¤…2/E;%GRJµЄ”qݤ»Hfß¹Ô¿WÅ”Ë>ôÒ§Š_½o"Uê‘ζi/ -ìŸQΩÑlé±^°Ó£*¥9¾%Ï›æËtë ±Üà áþÁ̺<¯„ï7ʺŸhYÉ ’oÀõF˜‰7ùsÞŸï¤]Ì68[ÌÒGM=B)ø,øÀX2k‹ V9«¯3ôm¿ÉôÞŠÙŸô+Oµè_A“Ê^Ì´øÓöà™>‘šáÏp<ôŸqÜ©˜…Ö>L˜¢½ÙÚÓÉ fS—/ÿkô¤Ìpæ˜Ô9e²îñƒñg˜GÓ‡‚ÒßQ‰ÐzX7ªÃåAFùdˆñcÚ ‰®6 (Ú°ÙÄZ¨¨0(ÙÒš°Ó÷åp=¾$L!99'×ä0T@±{qŒsðâ[Íof¿ëðµˆìʽcòúâ i?­2ã+E‡WˆïðÙ% ,¿POº9$YlÙ+†š"ÊHùIOóžq—ÌúÀ£½=F~M€{Зþ?“ã§ÊÎé   ÿ̱þMŽmÿÙ±*ÛZ/ "ú’»ë­{œyù”Û—V_m¡Eù"å'† +ÔµìŽÈu`(ÏGÛÍžH±³×:asqéºæþzÑ+tµdïГ„™{ú¥BÅqp2öD0›6«PSE}Ç2•¥äœ…~ôGðèÊêƒ&ËXEÁôÊÿ—|éág~V¬gÌF'ÄŠCö•ðX·ÿ3‘£"œlßÇ¿4µ«8íý_Ê«š¡¥‰á_úïl Š:ª/ýÉ«¨­¢c½¢pXxµVƒ†¬Pùý€Um/MvC&›Ókð§ÜG‚׿eln×÷ûj–¯EýÅ3g&ð„ˆl*–Ëv¯—.¾®—Ãï·—™ßÀœÜ?™– u”c«~z—C.X±îu„à0Mž‡í9Ãqáy1Õî¥Äl´îÕ„tÅøhÌ:"Dž×çíõÄÉÝ'€ÙHý­¯ wª°úIék¡ô`CëñÂCã 8þáòaÉdR±ö¸ÉÄü ÔåV’©¹8š½[05ö[¯ó&²*qßœ¶…uåþ»¿z³ƒC—Ø@c¤é4óôb¬ž›E*g²EìⱟM|_c2øÍ W Ÿ¾®~K7X»N‹jšL FñIÙËpÉîŸ>tyZ/j;Hã¥;°˜Í[û;¶Sœy]ªí((~4F3Ý•çþ[öäRg5S¾õ-YE-·5øOYB™ôrS£‚±Ú£,SùŸòöwã«Ý)æ½v—0&(Ùx DP4ÜÅ2Æ*f 5ÕêIã.«:Ž1X¦¢°õÀîesURôhr0ó4kB4Ö[†Î­.`%ɵ†šCÛ6É8O×€2£ó7饯K,‰¥sžHËäLPr¸¬^ð}NËÞÁ0´Up€¡Ê®`è=tT§²~Ó©ì¤êW¯Nrf ÕTÊ0k *Vš¿·ÉGÉÁòoÛu= e,4¶¸Ð1wÛP¼Á—ÃáêÏüi• Uû¼--=cKVNðåÛ0sëT7DÌ?Ál ÃàãÐìiKÓÕZ´Ô¹¥%|±Ÿ“ ÔgàðºídÎæ™ú¬pÞ0F·õ†„ ð ªY¨’ˆ¢„óµBEPÄSâr7yC½äøiŸ¥±„nù5åœE ¾ÈK#ö–9}ïYéÓÍ6/ñË6ˆ¼™ÆðÇ'{ýêžUâ:œ(;ñèþÓéÏuÔýõ­ÇËlì…œái¬] ÎͦmŽvdæÓÒ|”+hÛÕ/ŽV. nóÚ;S‡LLJTê øÄ‰zî ºs]OtÏÉ7ÞH€ôW¦àºRsdâoηÈßÇ €ï}›µl‰¬¹ p` ÷p={èéfÃm&¤½ÎR\¸@«ëà„B†¤,Ϥ­Eƒ¨ÒžB± æäÍɘߢêÌOÈ[c‡±§ß?ⱟ»D±ÞOô‰Ô0O¹ºÁ¾ZOš®Åfƒµrw›Aö¡‰ùö©ßQc"°p1V "h‡‡\‹ÊRMhÕ$YÄÅÀ ~ìI›Òô'·F^4rJ”7|Âx «¯jcšÛéj3SÆëÏjŸެO?ð¾vfÊY•Ù.k óèáË¢®Ô1imöv{ó±ái<غFTánJ“ IüÃd·’²,Œp„“VNÑpHöáÉuuߏޗ#A8cc-™DD9ú–Àˆ•8“wŠÉ§É®ý„m0Úcî7ÈtÈÝÕ×ÊFÀ~*û‘ûáiøåùížÊsªyø“Ì ¾ÁˆgÊIú? "Øszjî«ar÷EÆÔ„xzñ€¸¢u…sþë€6Ùî–àÿMmìÿ¡È[Û°[D ùã ÀKLRXæÕ²HHɈD'DB¤*PR¡×slwdŽ·–°. h‡îCè!2ÃC©&µ3sùãí¼úôB ÿû‡Ç/0Œ¼ƒf÷ˆÕþ¿ÖäöÒ’š¾8GªÏ°üõú@Üå_ý(Šb›õ€öèOÿ ^CÊ癫Ê8 ŸióÑ™ö#ÇzñÙ»t‚ßù»Ý¢ gÕW4Þ ³‰¶>cO C̈9‘¼ç µ®síDqåt8 N·«HÈÑum?ùåJB¬¸0sšDƒÉÄ!¥ä mwÉI7cÂfLYKÌF¢NÏB)LBtkÂX£bi<ßed_÷1áÃG>¹A¬£ýòjŒ©üM3¹¯.…\\²£_´šPß$¶¡ ¢™~cª¯j^¤‹A.«3Wo¾n—Ñ̆r¡±ä˜›ÿæw`¨ñÉ®Þ_w¦»¤”>à`0%ˆÉÌöÌþýi‡éö]/­rv†Ñ[‡¶Ä󅃶Ä_ÍuŸª@Þ)YÊQ4:«eç n}©'h}©Kø¯ƒ]3l¨Ùa‚õ'LD ?ÀF r(6¼Í[üX"«|O±ö>@͉͎5ÎãB",¡§‚â— €ƒ^î!œ`”±Ð#ÆTÞrà&â÷ˆ—ÖÈegAY§…éß|Z8Õs«= øgü}$³/þ…¿¼ÿ°6ö?Jt±Ê?zQVóqÆ`Ô+ µ@£M3øÎHŠ€H²yovÚÍØÆtšÝHïê[X‡ ôêùNëéÛgZM™¹›åxº™»™ÿÖ÷ûß³Aañ`…‰…C…åeŠï gÍÁZe­3ÍetŸöYÛu,‹Á†hF8i™™áI†íR‡][aŽ»Ã¾+ñ꜎+‚ë«ÓHô÷ØàrâÞ‹a`Õ=uú=¼øs'-\`4ŒHŸ€Ö{40„A%¹³H‡YCBˆPeèD‘²Mßy€…çÔ-±³ÃÑdd³ñ%›R Õ©¿;ÃU=“*ØS ÿÿPöMqžuÉ–YiVÚ¶mÛ¶mÛª¬´m;³Òþ§mVÚ¶mLõî¹Óßïv÷ÌÛ9ûá<숱"ÎÚ;"»²ó•pä¥L’,¤Æ¬‰òä…*-[NQJÓ Ð«-†™`‰@ÖÀ¥L¸¾s¡ª–K't§OTW7‚Á˜ÂbD«[ŠÊ¶ç>pƒLc>~¶šuNv©wl,¢já^Íp¯þ6JÝ™ôÏéŸÍ=»Ÿ²„b7[ÎRz4<ψé”0ˆ×]pÒ0 Ñ™¦ôyËc3’CpÝx÷eîÈò’b˜ ÄÏaÍ'_S(ÄNý0LùÌâ³=ÝB™¤HÔ!¨’òŠk˜£Nî&x ì¥IÐÉ‹÷Spþ" Ñ× ²m ²Ýfš«ŒêJ(å„—Uh¥.’¯‰ã¤Må#^¬¢«Ç=׌øV-®á,¼ˆs þô†¢ f]'!÷ ãf¡››èáŠ~½ÑVNû«< ¶þ(>èõ_LùŸ]ðïÅ…Æš7¶8ê×¤ÔØY2u7‹]Qsó¹ˆ%e¾åêýî"IÕ^cÓ^åÒì˜Zœú©Uòå’’T«þªC÷œÐ Ùѧoò=ÃÜýø@±7ŽSç^ꩺһ‚ÜÌÜGï~GLÎfþWW~ðÛ~U†Èø 7‚¨ø³ý ïϵ!,9²ÁG*>"ývî׊~>2ƒÃ¬ÇÏ"ô|áGª>Rýxy»sXà×ÓË¡©*>jý±ü¥†AùK !ôeÏ!P>’ý©7¨bÏTü]%»z2»¨¨êª>ºƒì*>Ê»6 êQJŒö¦oE†Ò%¼öûµ”y¹õ4s9Ô˜ ¿4‚ŽÆMçÜ&ÐvâÓ%€á •šeÆ¡£ÒNÌ;M'½ówµû»X0•(ª³¢¥%ŠÚƒ-ŵæ6µW3YövÈ ˆ8‘¼0©Qãb͇(Ò+sb“ZC!šUœÊ'S)°Ö´íûË¢ÖÑ`ЬÔG(ãhå¥Î8ó.ÕñÕ‹•,ß2IçÊKpieýZ€A\9˜à`-9ÏJ”' p6¿*5ÅÙAK’CÃZÖÌ PäxG¨ýæ$d`YÀ :A xÖá´wŠLiÕXÓ8©N1™ã,l4ZÅó¦ß›òŠßeí@3ýyÞ ¦YOðÖcµPGI‰R¼ûËv9…`cäÈw,&xù÷(¶%õ‘J} \K‡f~]¦Úf㨧Ïþ—‰…$òcu{Å‚qB—'" Š˜ *qm‘+P¡ â½c–ký³»cÃü™/£ÅãMf{1ûØ!¥³Š&.b¾^†Üû1¬|V™vÉfÓø#ÚÙ9`Ò[[† ½®Y“"“Ü{ÕeqÜÝSøl¨ðÀBZÉ·ÐB=ð¯mž’¢c!q úñ”!>(žâ¦Z#éÌÁ~Š n¸B댦!¿}˜že˜¸Y]@$&òg 7gÍP‚ÇÄN–\³q ëõur–f¼«â ûŠ$½ž Ý›nw ú“;ZWömYMºœ.4DiI¿•[¬ö'¨”´£„«Zõ:C­§QÝùDªµÚ¦»ªáQê¾U½S¶%­y(¦Äà“‹~c ÙÚô:JMJñŒ°Y/jýE}Õžß»À0ü 1îÕ€ncN óy‘¢niƒÌ0·ƒÊ0#* ¦¿>3†ãWúeTþÙ3”jÚŠ]¨÷7a¾ÍdÓü%¤Ï<ëH¢|µ¶ZŠ[®ùdÆx qnQˇÝ&ºFìƒÊeTþ9G8þ¥¿w¤¥šãJ£cÜn$ŒèÕ:&n–(* '³$CHœ°ú>u®ßRöm¸nßÜÎ Ný¸¦üôãOÎyøÏNûrJf óÐÆš½«Jžß¥¯m§ÊTO&m|[µõZƧ¯]+ówÁìO€g0Éz¤&-Û\雯fm¨©{3o}=*gÁöκ%¿lùt™¥J=3¯~zs'˜O’ó‰‰ Î›’¯½®Ïðÿ<*Œ‰]zž¼ï¦‡ã2Ï#Kûä"kLùÚàczrr±ï?é?îjû ôP¶üûNëàd«TèÂÄ †7==ÏÌÎàé…–dóš‹·>9&˜ó=Î€ŽˆOxt`_Ï·ºˆÐý¬¾þ´TÄY3)‚ÍàD¼Â¼rܱwðÕ ¸ã#sxÛü+Úûaº¼ßR*P]dùÌÕ ð¼AÊHÞ± òñâåè‰.0xàÁq°Caâ-¡ÇC»ÚËØrÏÀ!ƒ‘ ×rê“ä87Pâ>}ˆ±qÞ¥”CŽz˜±^Áv3…xüíÁ&WãËäzñ‰Õ1ÓÜÇwßwGÇqbÅEœs£ 8F+P&—VÅîù3äã¤q&‹%RC–‹wšÙG‹«šéh½éhEÛXˆt±àÈ_˜[ïSÿ,µ\Rt Ü-£t±àÍß°[én¤ R§v6q'êø³öðn¦›qŽ: ®8¦âXÆŸů&l8ž»ó"ý—ž^¶}ù<ð7C#Ih¯Irn{®Š!·O'2=ÖXñ¡Éþ§þ}² L˜*¨œð¿˜d:ý±O©pÐêŸÉÀÔë¨ýhÑòÈ9+ ,D{Ëú³ÊæŸ~¹–ÝÃÍ?([ÓîH­<Ùͧ$cï~üä7º½|Öx—ŸÞ Ý웄ÞP©f_ä6ýA#ôF@ k(…ù`=ÀñZâÚúÊÔÅ‹¹•eÿqëÎ}uÌ þmß;.JOWý‘%ÅN÷ÀxbÎy@ ™ÔWë$­Ë#æû©˜ë¯B–²g˜nϘjM´u 0áù¾ÑS<Ž´Eé>ÿ[öÙ™o#H^½wOWî›úXÓ…8iÞ%´ÇvÃÂÓ»ßÚ^£ö„ÕôëQ1E˜gðJärZR¼D?ÊBpç÷×HèÆïæxÁPyˆsÕ°›Ðg¤Qy‚µ{ñ••Ó€ýud ±ÞYEÓ÷b«)'~t”0À|–eôZÁ+g‚ùÛÈî@6µ({C4Ù—>ÊYüõBsVöµ$  p ±•Ñ…L íœìÿT-.ž²º’«)‰ˆ§¡­¥ñ?–eM] ÿLÃ\ ·¦ô‡Uò ÜE@R¡×üHû!¨‚¢Z–”r0WeÈz^†L›NÕ«$íûTH3m£ \¢Ðu?áò”5·±Æû¶wtdÂh¼9Kk!:4D2qY¨ ÓÏVm0PV£0Ûi‹F‹Z­uìï“…i¡‰‚a©¢êD¢¹ŸèJ±7m&ù0bS©‘[XÖ£U:›ÑþeE:Ã^±"µ0Ý•PME©;j¥9A7¶Û¹%×?fÊ…_%<™jRlDaïÝUz-Säv´1ÚÃ<»h:‹“þàꮫ«´S C¥8LJ ¨¿— Éá´§Nô¬€t‘«zsZp>êÏ«ꔓj¥iBq0óÑVÌ‹ˆI¼Q”¡:ùêCûEêê‡.Qâ­‘2^Ìó{^n^È6Þ§jñÞCW¾ÓLµ@Œ#¢|9ê+¥ÕŠþÝTCÅËkRÕÔ™äå†ëËË·oÁ¸Ó[Œhæü•Ö—ý×I ô¼TÕEµ—ì2‚rÒÔy´jÝm&¤í’™hÌq™‡‹ lûµ«•æàŸøý6 i‡À2à>§ênx¥—š¬ù —1¹þú‡ík·,Ún o<>ÀºÅr‡qÐSJŽZ;«pð’'Ë“Y¯Ó»dÚ“L§j8äÁ8Ú” 9ƒÇ/‘]_ú‚¥;êä„#ÎL,%uÚKù/’Úðz*Š1{ÈXhó†g`“ÕTîâÉû6Àöà šd¹ÄF÷rU¶_Œº=Õ´½4±>²”ˆY§}Ÿp6]–¥ˆY[‚DŒ-^Þ®À‘¸mVÖ8:É“„qÐÜ3#Lh]¾éÈŠ€#œY ‘yŸhÓKØ+EuVÞ‚ :NÚ_ ßà–:C`;¡@ÒbÀ»!tw÷tœùüÌk»3#αõE5aXÛC Ü"rÆðÝ>Ô í@ø4gæ5lÀ¹‘ïpË4'°!Ø'ú$Ë8­óØøZÝ£ýC«•ßrß½€Å &-b/@E5$çÜdi=ˆáÙæ÷Mßn´èýncÿŸp“±t1u2´ùWpÓVFGùÌÐÅLƒ( @ ï•ÖpÓÿ.‘nS;ÂÇ*Ý…iÖlæõ^À£ºø«(§d¬;á+nl ¤ïô{py‡K._ê•ÎkÖåÒ×û+Äm³=»ÇüjM»ôƒæh¨õ:‡¥!ó´FGø'[žž£ŒzÛl|ƒ¡@zÚ ­´¤ãM%/æu ºî¸µÙSwâ‡uuÖ :²zʽr×ý*ö&$€Zu°¶Ý:ìúQ}‰O±±úx›vüC¨}’…£•ö«¬UnE󟦿 †T{igÏ3pCëÞFWhnj€ åz^!³)½‚ôd•+ªê~›ü”g¥¤¿ªX'>Cƒ×\$øxŽZü}jam>Q§tª“°å6 h@„TW”±è`ë=Åaìæ2SA©¬¾.?xÂÉã¨X¿ýcú™Hö¹”aÞBLÎieÆ(+òÙ‰‰Ž!åO._H2uÊC¡ÚI& zX*¦_Ô¥%X‡™0¶¯ï2²WQYE±èZà¬n*¡è¶5A“e%‡¼ÊoùI¿6Xľ‡\'~Ërþã)8>a‚0±8{u_í´.·Úö4>gyQ¢0Òßs VzÝ=¨žáEFr—MCǾ«)0ÖùMwÉ•géý>ÿº@.G¿•™ºï ¸óJ;;ý$È™Ž.nšLF¾L ‘ìÄŠ0>”(ÿ^¨0áÁ]}»ñ3>4Û& !H'%~­ßrÃ6MÐØçB^”é‡&ß&„y•›:) ð“S6íò7ΔWP:1ÿ(>KþqÒ!i € eŠƒÅN ðÚ>´¿'áXx§ù V´KG“£=hè.ô¦U¶è¥JXZ’7+ÞLæ5™ô\?n1àÃTOõ l0ƒ¤½ïì;áÅ8¼O ƒÄRú¹›Ñ3Ç} ÜÖ¶¢fu•¯%É+9Ï„'Û5öŸ^@¾dWaÛÊÝ—²%å ØÓ|B¸|‹Ä*BÃÕ5ãêHn¨xQ"ýd^"}%•øðŽ˜Â_Àÿ ï½>Æy` k0 ºÿxÿý¨ŸÊ åy…[6.êѪôiÃ~Ү¨Î@HGE0–AYÍsl|7t[;—“ÅòŽý„ ƒ"Ix>äó0׃B9>Ú”›Êò¾ÞÔïîþr€y’‰"¶7úÎ.³."(þ;($!¦><¨þŽ v?Ñ…æXÃð^tt—rֹЋ8²ÉLè(=ePõÒ©Æ‹BDb°L´½é˜Wwšðc@¡ší6þ½½«sw s5ýbøç[è›Çé2jÈ@ÄYûí7áJ…u“µ5¸‚´²¶.MÛÑÚÞ3¼¢ ÛPïL‡…¯Þb²]¥äýì˜%å Ø\˜…ØwäÞKö WL€_ƒS=ÞìµRÞf²ä>C'Kp%м¸"V2#’·L ’'F4!ûO#k(ÕÕÖøÆZ´þ}ýxº(qªm·vA ãÁð¶¥µDy]Õ† ¨*M´)ªþf‹_vgcC¨qXxñ {¿ÅfûW?³ L¡’FZfÈI~ñy¬¼]sѱ®‚ÝÇ,MƒëàœãÛôç\`'Ïï÷ÒM´ÆgŸ*{y,8-Ä h!½(¿yÓ6NùM$M16½Uˆ5RsXôc–Q`åFQ*€DÎÄŽ’ˆ ÷·ôo½è}£)ècÞí5¦M¹ié[ÂçÔJ3Vš¶~ø7Ù $¯Õ]ýn1}2³^ÀV37)BÄ}O€xŠÄ`ÝKeø>*zi{}Ù)’ú(K/dâžjÃ}Œ4Þ1ztÃ7 M¾$ݽëÑL ;Ȉ Ô?ubIBl2:@ã5’ ‰¤ ïþ"²ùU ÿÈüÇw @€˜þ•ïþ—*ÑùO.úûu0o)þ㨪¬ýœ‚¯5¹c&Öì¬ÐZã= ¹É7GêSR+B%êo­«Ò§cuÄk‚;Sô;}¨$T ¡Ÿ@~PÝÀi®B(Š¢”©+-Ìö›Ø5þï¯~ß¶¿y ažOGë6lWxƒÓ€†pÍ?¬æßc6ë³gåvMoAŠ{1Å<ÿfð {o&ï÷ßP.¯œŠóÜ}µóé©5Ÿ¤£aÅTjÊ£ÅDê¦Ï}j§ÅìB¡"vZBɯ˜"f@ÍmC~`r¥áêøSä îÝ&ô4?t¸ÃÊW•Xà vlq Û´Æ 1|O†ßU;Ùå\˜Sm¸o~Z“‘F“[d0öO¡cÖ‡‚ˆ?±_ƒ4ÔD¼Á¶N-£F.Q霙èƒ~ÌÄ‹Wgl¿&ª&Ó!“ý";d°'ŠÌ ¥aTù4_†õàÝqv<“áÚ÷r‘,óøð8Ï6tuÒøE’XÏãŠo`!‰Ãã·‘éiSµÚ%ì|‡Åàõ…;H÷‹þY/Û.·nÔ+ƒ2µh<º¨1p{ÁÉÐíâýLg€ƒ‘ÔP‹\DºYJŽ'7ñÔÅN Qò=~(Í6‚/Ïüµ9ñˆ~Œ_+“©æ£Rí#,5ìíûþq·¥§ª4V'äŸU¦Ç¶ƒµèˆsa¿îèR© ºÑg;¦UÌ!ýb­Qú ×¶6¯s 2+5Xê¸&Ì'§•Þ¤òŠ"¹øø—aÆê+O¤g߀€~þaH ÿÑÿÄNSc{§¿µ¶ÿ>­,aRi^aø+´_‘๵¾g˜0\„ÓC3r\KM5ŽŠ‚.ˬÚžœý Šçó^¯Nj<D¾+˜¾àqµ!IJvú¾èm«;'½f‹y€%³þ+O«6C5ʸ9úPf"Ó"]àì"’b¼uâ–PØ›>ª^fv›2V„hŸ!®ÿüú³Ë7äÂkÜ5ÄôˆŠºVŒ} Ù0+bÒhùåûi£q¨æ@¢nÎð¾-Ö-ΗÍ›Gœ1¥œ¡ªXU\ï‘NõÔØK7††Ìc œ6l´ˆWçEåñ …Ú|4s¯ü Œ]~ÌÙ*ZI~Döìå ·IšŠ’`ßœßu‘;°ÅÇÓs9ºø†À[͈Ðdí 3‚Òþ"¯1ÜŒšdû»²½ö¡ãêUP)Ô±“cìf2—?VóiôfŽØM}êÈ‘~¡çì™õ¦øqõÞÐÓ-“&6ø gý]ÒV(šÐ’ßÁov°$êâé1©9âu”ÂzÜæüö w†}c±ÉIÖ+ä!›g}†CüÎù•Lü­ŽÂÄ_ pû/E.p•³z°|)µjH€"[„ITàê_Yµ"îÙ,‚Ô w“Jí7Èÿì8Ârj㺜FâßäÝÿÛqþ©1œ$ÿ‡>c åæ`jôª €(…™©§èê °B )å ‘ªÂhYy^Ëÿ É×37/K_IÂëð¼Á>fMÕáIûU„ät ²ŸˆOð‚'™ãž6Õ+`e½yéYúæéÿáòôùzD_¤Ó“ì‡#vs¿ÇSò6›ÞOÑ—â (¤ÛW 6êPþ#D(÷ªJTnÿDcç<»»ù€¼ŒSá›=à¶Ûxž)W‘ãÅR3ã=Óa¢˜¯³âÿFà¼ÎÒÅËí¾<²’ćǤ°5½ ä#Z ?=ñp;tÈ— Óµí²*¢{¼y¯à÷ì!lU÷nÃcT~‚ºN”}À6h½!.>M`fð¡í…F‘þJæ|‰af®g†¿2Äð.˜†!Ö3?EN³‘>ìÓx€Ð¨é,k4nh²½ÇðˆÁ;Dö}ZÂ?ŒìØ…ôÂ0—°3NúR3>Ïl<}€BæH_¤?xÆñ¦ªš¶:å?´È§ÏŒÜÓüPž™^œ²/\š’~ï‚1ŠLzOr‚aÙ¾CÉ“1WÒÔâ„ 0š}ûÁè‹ÇÖüó6êN¤É­Ò:°\ŠÛÆÕ2æ(üÄ…¦ÃÇ(þ‚ýá–¶5£sŒJÝrúÐ×4s=1“Φþ\ljqd 3ó~jF-‘Düã–¦MøËvCWË=Ö´«d]Íá3Ôõˆé̃›9©Sª3’émLá©sºÈúçƒWª5|ØrW4壭Mgk¶ñ‚s¥WŒêt]‰ÒäéÖ?UÊ=%äÉ8øVâT{cC—ÿ3ÉØWI÷o¬"«!›ê»­¬D›¬$¿Ã:BKÇ5jr¨B¹*)î’¤.§Ûþò;žQ9(ÿüàeîÐJýã—ë›SSS'~ïﯸ=„9ª ¢°pÜ<ç·µ¥FÝ?µxx({·[uŽÞDÄD”ÂŽ-KVcÜo6ÝõÖ“ãh™Kž‡ö£» ?ç÷Ø„`ƒP\ÏÂì£ö·9f­]Àd‹¤ŠhŸ ¾Ùrzß´ÎÁóÐ!µÊ9ì ðñOGJ9Ècdð²ci&²4‚Çœé1Õ!™[8ŠíŠÚ*ãyŽúÀ¬XÌ)Q©z‰ÆÈÇgüžjP’*€eV™*`qëdçS¯ùD;vJñ>¶D¢ÂUhÌåGçwñ\¹raxÔÄÂÎ>2Š‹ßËáÂÉÚ0²|Z>L÷¸XOËzµ0ãyï “9Ú¿=¸c‡|LkãüÖ/›¥…ã$.rv&:#BïñˆÞõå‹ËS¨Ng78ìEIhå ¶a+QàSÖÊ6ÊÖˆärW¢“Ý,Ä|Ó(ý•~sÿ-@‡F- ìh›þ+¶–Q½™â®úç ØØp°Š"J»Qc ë„8³ÍaÂé펈6§ÉÉÒ GêºNÜtyæVú–‚‡ Q.cà¯TŠkS3гdXê s@C¥ÁW±J³èÒÞ_¹~™ô°XBÓ·ãCküweå«Ð+Õÿ‡™Î•DGWUuz"Ü,z9tŠƒ"òˆ‚a{åY¯×ËJÕ#ÔÜ’x\ƒ¼S8²Sé5z{ô{¿¥y2_áרÉ1|Ÿš¦Ë÷þåd:y1ê"wMLKœ<~æ•<Ât(¢mŠƒJyÆ™:vcÿ›ù鎈e’jv$·\qJ R³#)ÜÖ¢VH^ÍÒëoľ9­[˜IO2³O´Ï ‚Ãóu a%ì—ØÁIÚ´q™ ‡¶ÓDІ:eÏr¤^ùãÔ2xxܾÏ!SÈ­{öQ¥’!n‘ñœùN´Öºå&™e©f·=éÉûºµ0ïåúå/¦¼P kÈ5µ€ðhdNð×;©?yñ·[jþÓf:ÿcÈ_v´\ŸÂPw°˜"ÂWÞ€^%9=²°Šì€ƒþ*X í¬/½<žþ‡¶Ì}Þ2 ôÃÍÌÜ9}£å)U¨t¹¦ ,%ZÛöÀSÊ·WÁ… ¼ìgþå¨ÂzIC~þ³B|é‰(Ÿ:ž´±?-oG”‘—s¥ÿ~õîÎòÅ™FÈž9|>¹Õ Ãþ¾¥#)§«Ç‡ð¤¿›â¾`ÏŒ³_,àðEƒ­.ª)ÍœèöfŒØk¤oF%§’?ÄŠ_ÊX_GR¹ûÎÅ\90©¿W_•òÁ:ƽ¿üºiA, +M“-mgFlœÔ´¨xϼ–œ …ÈÅ4‹–æ·^&DÞO*FšÄách5æªÂø¬Œôjcâ9YE¼~7±—¿HŒr¦£ÂäþXCø_\æòkHÚ:Ø0þüÆOJ0þ!¿ ÍjÖHT‘ùÀ tzT^è`UÁâ'ì³m·¥\q ùŸø=¡Häk9•2d_é[ ‰>>] }fP˜•¨µz=à„þXÇ=YˆLÞoºBͨ¤ù§`Zzd…9Qv¢òuJwBúeÕaÀÞ¹ášÎø c¸U¦óJD1¤ÔÞ9ø1ë¿/³¯‹ÈÜ¢1è³ag"£S•n1™A± …Ñ÷ÁˆA‰øËó–Á«#á–^Â7:¤÷=§pÅöÍQödAü–BŒ3uˆ«òâA’ûãnæ•þÖ¯3À¦&ñÄçŸöR}‹5án,Û×¹Ëׇ³ïž:|/žñÜ`E;Àk>T|ù#Í<²=ÀÞÄT½G¶¿9¯9ÿÐämØF=ÔqˬڟXÈßÕ”ëcDù¤+¹-Ín`þÙ.¶VrŒ^wÑþÅ8ÌÿÁ.ÿ=@y `ú}™44pcVÃí„áP›„«YA HÖþ$(;&ÁLž¼äâT´n*^õR±¡~(Óª²=§…ò0°nZh~äóñ²Ðö^y«¶|ÊL'Á®ÏÜ?¹ëyÿz¿Ã½rÿÜ:lÉñÀêqB]øåkȲóÝÓG¡?Ô´#Þ zØyž:,î²Üîºè튲W € ½âS ƒ¸Q€ävõÁ¿!’°x6´|™Gî³ÃÝV&:˜ãZÜaÆâ«Øqæ:ܽÃÂ[p  ä*8N®yŠ îó”àÀƒÙcxuÁéÝ»ÍïF7ÈCߥ„“?+ëáóôsöP[¤Ù‹ì»Í’ƒÒGÒœ†¹ƒ ~fgñ•Ó›¿V"TÛ®Àê";[rß5U|ƒÛš¿¦%|m¹:æÀÞB}¼²|î"XGïƒy…gí(ØÓ9Ÿ»&†ãWƒtÕŒY±ã*é›(É>´kh[ ¬hÑ8¬~0kkX‘©R‰%çF‘bêºË#N9.³ÛµZÚM£“Ô®¯àÚÈ.Û4lÖt—T¿ëðJ\LøÑ@nJ)s70 [¿4<é’‘ë2çx®aÝb\ŒZbr|so­kFeºòÎÆº§­Lsqm°‹Þ,0’ü²BÈòf–@ J ã4§RI> á†Þ¯ŸTQ̵i5 1lrqoÒz$k`J”P®ŸŒ²g»Hëx ¥úŠ6r7zNÙw Ð0àŒÖ-`LôD:÷U`»¤¦!ŸIØžVPNuƃ†Ç$©JAí^E’š@xLÖ3ª_Õ;¸_$;ËûTêsg?Æ3ñ§Éöô3Œ/¿"Æs…ÃÇdÏÖM[š Ã5¼¡.Gó™)¢ù{¢Çl #ƒùÌ„míEnU íœá\˜WøBD½?æ3û&‹ßfþ?øgä—¥Çxãa¬•¼òKt°,\ñŽl0æpKë·›Fs¾• ….j=”8½ŒKFø#`ÏvÕw i“·®;L‚®¼L;$C$ôרUD@Eí°‚ò‹°¨J|II,ä‹ÂÔìͯ´æèô˜Œü¾ŽÑë²t`ç” Ûm#„ñè@º„´¨â1×B*Er gái÷ ÎŒÈ5(ÍP ÃOkTÍŠ¢D «œ ùT¹}-m—` ä|Ò훳ƒ1Æ`I™¢¶(O#ÉjðxMQ¦`ŒÜˆ ‰"é­üåpÝpÎõ—¼Áó5aÍËeIâÛpYªYfu“M¶–{ý¢Z Ÿ&Û«D> u3kåúÝGE*G§6ý|š·YAôZý9™©aaÄ(q(#™<`¼Ù4²}Ü¥ËrŽ´ƒü”»ªY׿:¼hn–vJ—뱈‘"ÖÇB[wt#eÀøg T)r ¦ôH™çz’8$l z©O ¯ý$Tuöò1ÖK‰·gñDh5mŠÝ±Ô(Âw¸_Fºi_³›¶‹„ƒqÿa ÇÖÔ[0 mf²µÀ‘-ºôøb¦ÌQÒ! ÅÏöI–ý×Ê^W¨³ÄÀÒY¹•W³ó+ÛáÖëùqsIÀȱ²WÁœL‹†úï½€ ö(šÄüm0S“DÄ<£,óM êXb|,ç„Ь"w¡hK.±Ã³]¢}uA.·¦±¸~¿\W6©SìÑ—(L–#6vd‰W<é+Bë6)#i9RƒO¨Þ²Í¯ݘ²·ØþËsYE܇µ£IzY¤°šS1I1îpáÌ0«»)£>í²sã¿ÖëÆQÆ_˜¤LßÕ‰”A—Â`/Ç<§t9»Z©ÍYÝ7«I@œáî¦ÚPÖ^:¢ìí ~W뚊çÁ×Tî2ÜŽƒ#,{‚…"î«í±¹`ììTé=bܾ*,C’v“)à”ù¼NìÖÖs88á“ÎÆŽ¾,׳çyÅtÉ{Ñ—Ü[á5ãõñèL2<ó$È×bÉ ¤E£j1+D«– ZU¦³°îT â<0èÆçÐP¯ŽH?[„‚¸CÜwãxÆ8À¸g|r܈±»ôoh¢%Éü1aôW∿“q1~²§Ëôp:~/1ì¬ð f+ª…䮋Bíu}éÛç PÝŠ•©ÁÈߥˆÐ¦ÊFá,/»_OÊo zíñ€ÀtÄô“†tÃ+Ô›L'÷† Žpƒº¼AD¢\Ú§6x+£{’3{& 77ûì5ù2=•x#®.™©vÓAYcòAÀBÍh%ås˜áëmð±}µË lQî5u¹>àÄéÀVW²!SÓÒÏ[P´ñçÓKJzÚ *L›Ó¹ƒ`p¯ðáúé9ÉKa…) ²yGD®†×ûÓ<¨­¦E'¯']#Œ4íJX«O49´¬+,œ9Q²!®N·o^SJ~‰aÌüw{`¼F%k 2ÿ’',³e½‘†’}5àšTuM§sÕ;­-×…:|‘ðíC£È!V‹ïtØ(¸ÝÑ>åÞÈ_êJ­M¼A&ßZÖŨuF%Þ µrX O•ò>Ÿ«¾žü…n§žfPù•×4¶JÙ<©äsóYÁrÖ±â½Û„lÜfR}RÏ)®)ÔX*V£Ù¸¯­"š¼uO¼êc™I¢­µ©¨_ë”$Ô´Ø£úÓ›:WërŒé¡ô/j/7!.~^¨‰{¸õH§ç_Üž¶‹Ÿ jB€;4±œgÏ•”*,ŲWä|Å\8dØš£ôâ°¦å6¤åG¦)U¤©pc¶:ÑÚõøu`Ãïòz`xß@nFê­‡™;"ë²vGdÞpÙíL/i/à¬WK9†R gŸºœ«S;¦f¤2ØË·8¡pµ[fÊk.µÛJÞgR~‰y¥9Ù‰µì~K%–À‘WšsÝïD‹Ýýاˆƒ½a–ŠBã™v †£¸'ùFUXàÒâuú.«a€‰w¢`´±æÃX¡+ep ´ÈHp„#$iò±gÁCBÈ•J~„Û§ ¡»Ñ_Ü–R‚Ot¡SÜ2§>Ky»Ü|Õ¿i€qÔf$lÿyÎõ~RÕ!$å¿#ž*†æÿô/&ZÕÖIÅŒfMÖ¨'ÕÊZ%YxÕêWB‰ËBÄ3’Læj‹!¦ÁE½tê Û ñÇ ÿLÍâbšò´e÷Šók¡——y~ óÓeöß“íóÑÿ'¨Ãw8ÜTÍ~T8O\BšŠa\ñ:¤~D”AÕìGk©gŽO\0%áÑ ®¡›ð˜L@ñ€üÂIs=Ý) 0!¦PºÓ«˜ÙbêYAŠQûÏcî\šC×–mÆòg‘'$½à„ÍÙvkt@iC¸Æ9zÖÊ-tK•š%›v*§dH‚*vkwPÇ@*lc;GH›xB;œ@ [ªøm¼CÏ!;Cuzº†9Æ.9MV<éÝLÔÃT¯N™¾¬e©Õœ²µvÕq ‹í6¶õ6Ç&c"£%\IUPHF ”ýL‹¿V£9ã‹”FcÆY²Gâ,–T¹Xxù µC·lFð't*vÎ[aF>¯èæÂwèÍÔ”ìöaÞ¾Ô>j– \OÍ[ÛÌóß±f»P ûoò™%6úñ#ß?1u®Ð·ü²ÉòSE¬èÅžøZNîvæ æ ±~0X%íº–0>d”æ½äxT}ãE¸¿_Õþßáôê‰õ†4þÅxÂR¢ùXvj„@0O/Cne«e.é…² Â|2á,2+Ÿÿ=êáQ½•÷ñÒ2Gð‹õGf¡ëO: rÇÛ%ŽrÃß@%G{aåö`9!+b.¹ÚdꥶÆÎ{<n¢ï¯Òjå½¶½ ê@¢½ý@æÝ= ”è“ žû ‡ ¶Ô×ò‡YãÐ Z/OMË“Õ_{7Ç‘¢W‚=a‘ ·Åñ ¡4M Üëo.|@2ÔƒU§pöìÓ'c£„U|ËeñŽ«S°Ô8eÔ&º bT*¥q ÂTµ½ˆ0wC•äéy,zÎ>‚4ovܮٖK›å\<@„b!÷º7ØæíÀ·ØèÌT‘|ƒžó?ÿežÇ>ÿoŒ×?o.ÿ©1ößÊ!ß8Fù~„à­&Kàüübb$!›àoÌu ®åó”=@§~’²ŽÉ\ª»¯ iqÏß>!¹‹a$<<ŽÞÞß}nÏö{PÁ WÁŽ!8ˆžÙ¥¨™‰C”²Ó™%ÌH'¥¸?0%—¶’pä:•ë|ðÞURõY& J+.hñ8’9[RzÐÙï`bÇ@!Ö¨½xA@.õw«“­Mfĺ284¯a"³tÖKaÒÓ—'ÑùP\ÓGæÅÛ{¤.ú„Cn¯h‚>¯t®`i߈íšè~ÙsR¯¬¶z@t²¨v /7¬n`ÕÆ"\CB¤ôÔ—9âûý%Îò£œ_TÿÙ¶O` òÿ´uÿ]Ý+Êʯ øC—¿@'Å" @‚•þR„×Љ‹‹›ý9O….‡ÝP‰ÃÁÉñ”ê°£Sþc &·/6/[—BH”¨ž‡›9çi“çêê-S¨Bƒ&¿!ðXxt+ÉÙsâH‘l_»`#%;Ja³FÜ’z¢MòYV„)… ¦‰–_’ö{ÚYNÉI€ä6•¢W¢Bùc_ Fk2ƒSQ5ÒKëšÕØ”úï¨VåÊÒø0ì‚B™å‰“«ö_rsVÃóØaò_¬PÖ ©µ¡&Ô²<¿Ïˆiú4HBwìî$ÄV/%"¶Å^ƒjgòd"Iêñô®¡õgíÈÖÆ0°¼»î ˜/vàÐxö· ÀàE£äûA¿0›t-¯«žnhA¾ßÕƒ›‹sÌâ V?Üžqàª/äÚ;ƒÞæä¾këÄN;Æ`2þdêîÙ‰Éeì1 ý*p¼Ù ±þMê>ï×Ë; ŠóU÷ø ÝŠO§ûÞú¦_Þ§M·C›Û Ñ,õí wÂàg7 äB²aÀ9±Ò´žRFÛž9åjã/mä_,\hÎLüRëßL®bèdþæg´â¸#ÊŸòmáÕÂÖ7&^hX”P PÍç›)ئË.±s)!)Ÿ™v"ü­|c&V'*Ò çä|Z_Ïü¯Þ'Äòa`4 [òQ§R|ý0lz„ÿðvöíh\M…„Þ÷7ÙrìL$åÊáÈ« µËwI¯æ XáV¼_»DûHY,;ÑP} j­¾ˆ\KkØ;Ð%.< [qØÐd/yh¼ˆ²~û*5ÅÒÃR刑kú“r–5lë[ ªÄ×lñ¡Š8uÛdÇŠD å;|Œ‰”ä˜|•Èò•:sV1ÓŠ÷·92&ÝïªÊ"µvÇÈüWñ‚” ð”R/§?îM©¥ÞºæQâY²î!ˆ\É• æ‘f¶ü6<€ ½•\“ÁKu~aá·UE“ÖPÀ!L.7Yú”Û›cÁ, <“LìÎ íHˆjð³§p‹dh‡(i¢0n›)*¥6aû—𘮴Îÿ_º¤Y£¶ óHQ(ä¿9…ôÏ–ûoÈF«j«#«clCEI‚wÁê„è‚ÊØÊ’3KÈ ‚…PßH„1Ô™Y™]ž>ºî‹áݪ"f«þ6°šþUü×›Œ$ ’ÚbÖÙçcË4ç[ÖûÛW®ý7Ÿ|"Œžh†]@ù¶h¯×Ñ8d—[„æz A·âúàR= Ô€î§'H˜V’³t=€>Ú º r^ ¸îÝùC\wía"BmÆZ3 î©À rà uƒÊúuÕsÛZ«Ä]Ü€â7[¦Žùq‡.I©%æxûm¿æ\ æÈšhg}5wÉ9;xð(=9òeZµ“~cEF»µåš×ï2Œœ O/MjŒ½Y^_Y÷±ÔŠE*¥BKÛ5à~WTí»ÖUœqœPNÜÊd—€ºÉÅñ]fœ«ÁŸ;h¸ ‡+ßâs#Ä&™mÇU¯ÆP ÒU«½b,“F«³¥k^¥í"òNØ [sìP£“/¦2_Tòrk¹–ñ‘1dH¸³$+Eo3üÔùhÞ$ö«¥ã‘Øpæ˜= ¹Ù6˜6‚W›©Å~Ïz0ÝÇïÔå§~‡$ªx¬VfI‘±üñû±!;E‡J,^1 qõz&ÞÅ=M•1Œ u\CñZb°Å£ÒÕºK¹.uk/¼ç9µt»é±+Þ^ôÅzÂE³5ÁÛ‰KBò¯p^0Êo  )ìBýùkú„^LýùÖÞľAËÏœ$~¾O[W~Còr·Ìõú†Ö?¡ÉÒéIâw¯èÎDev” ªÿTªQ{8SÈò´€‘?¶2Àˆ™£:D.¢‘qIØÃ{c—zÄ¿9€jŸÐ›)¡9¬|Â{ZòÙ›^Î{ß*òyh*É < Mp©Ä[žG³§iHõ/ d‘úqQp3*Ðð.ðD¢aøM„¼ÁïZN>ÕLî%ñ“5Íâ`>¼úF¿ã/B¶[Æ[“²?áÁèOxàþ7áÁÂÞ俤ÕÿûQÈÒÎÄÒÎüŸéQ¶š­:¶èŸ*j¥Ö¤]yímãrÉŽé™´¶6•1–t|F`D?œv?™¹»R¿{¬ÿà4ïpçcÙÖØ'V¬{H£H½e%>“óÑT¶wîÑ&wÃËÝ•¾?„H1‰ÒóŒ–{’‹:œ³ 4$–f¸w`˜ –ÄqKè{nšSMïP)øuz8*²~ÚsÚڛХª;æÐ­ü³ò¥ @ß ø@¤sRyÚÉ n)éÁíJ‰Q½¿qÚ…¼è{Äè.*:2ßqŽâéyϧ´÷mkÚ;ßD¾ÉsZÕ#a0ýB`ÄkÞjŸÕð7ùS‡Ã-x¿ˆËˆ±ÏÙCtÚ:ÇõAN\Ž4Ä•gù¦ßÄ=ÏJö“ÿöÊ·¶ÄãYpbõ ÒaÏitë‡\D”¹`–Ÿ…ƒdY<« %¬¶þƨ·œî³S­k]:ÎÀÎÝ7¢™)°ôËA¦ÙX©«ÈUòµ_ÖMè¤+jýßô*T¿Ë¬GH\ÜÖÅU¼*±˜x»áóäOœš08ñ Ç? ~Q’ {©vÖÇIéÏÏ'äÅ4®´œíUÛˆ4S’À~äàK]¶sà(N a0èŽ;Cˆ©ª`éⵂv9¬ µàuêÎ˙ಋ<Ôpë¿Ù¯ÂT±û=ú‡ 7¿ÙFM dDCP0dñâfïhAøE䢛^â½WxŒ½ #Ÿ±±)˜¤yE“0™x7ßIcë)ƒy0àÄ{"ë3®¿ëû_»µ8W}xˆ¹ŽŠÈ7‚FCæT#øW {Ùê¯@¢3×,«]O»{«¯zª^A}f˘Û‰®§—¹]ŸrêÁN¶Ê´‹:Ò—}æm"2eœÝ¾ºz÷ÉMQA§zÍ£ïÝJΩS ³òHZ.ܱ «¬¥séŸXý‚· %EHµÀ)]o¼,ôäá^Ç#Lɶ#Êɶì‰!Ë0&{Í9IDf‰±|S}íª2Œ»œg€F9"ôÔ6]}ùϯӫŠk³©+#Ù‡¾4ëzklA)­d=G+㟯ÿFaâÀ(*Œÿʰd#Ýßâcby¶$œåyÏ\½ÉšcœW$…ŠÁÓ7ƒAÕä'F¡„â™Ñ5h¥×³‚V:Ž‚èr¦Dï—IÓÌY3º‹M³«mô’}È&¿n>j"è.éÄÛ'Ýöš{MǨ8ëí¡?¬“W¹Nrȸ>ëÙínÑS–«÷+ puŒ;u•z+‘ðçþðù5¬ÖÆú¢B{mƼ¼)îTÓ;Þ.E ]l1Î"ξ„Ð$`Þî ‡HšÀ°èÙA¹¯´†,ÛDZ6¬ôxrWI¾¦º„"È/CÏ+ûA¨#ÒI±¹èn«z)x8oQ#VµŒ<ÞeµxÍ7~”œí(³ì¡Š]H±ÌÁn‹Ó¯Íc<1ÊV]8ÄàÄЎͦæ˜]ÉÀá[z\­ý,eØ>éГL¦†y¨ïž‚!wï´Ñ>¦zTú L梲×ËûžRuñ2{óàõýXú¦j£xwg¥uÉt¢]v™@Um§*¨‡¾„öTÛñ¾Ê hÄ"¸aáìbåI4÷|NPfVò#z_AYJK0š² “µÜ«Øpáˆe2x¦4*ätÔÝò‰úÂ"ÛE —áŠiJBÓ¼¤sÚ5Îy(ú;8žõt" y£/ˆgâÒ»ý1™LOhPØ®!ô×É&1(fU6¡fU6©IÈbD«¸ÅTïJÿ}S†ê‘;)ÈýøEN>+·ñ{poûÊÊî~÷'œùØP.F[…Ìp4î²¼Ã~î}ü*É}!‡¨Mçòõ†‘œaœI¤\‹äW8M±ÅVâ <Åž¸Nÿt[™èO—”J©4ÂeÓ[zC5t_E Ô£%(©Ì~°lg¼«=*NáF `þ>K-Úz¬!&Ó‰÷¿ävT:P *( Òÿ í¿S~µ udq”/Y¤úÑzR¤®ªü^¡"åZ(ÒŠI‹l Ô”hKàÓfìvl¶¼¾gü3ýÊ[>wÉ«À9^r¾ G÷±§'Ùš2ÀAdð­ÎWÙÜî~ÎGììoÓÝþŸ`ÛH·\v»ÂpsX|³ˆQ(-.÷Æd|ë)FjÜ\—FrVøâ×ár{¼¸¹»Ì¸˜’¶zÂjâäh&|K×âðh,4V#Œ÷Ó0öýšÚ”m*L¸™6]c¼Së ¶;SZ*H¤!xü·Í–5^´2ôþ)è Â*‚³Ïh>‘e–ùŽ/ê Ú§¨@, ›¯ižƒ;žÖ<’CÝ7yƒ*Ú7êlÞ^Òø”Mhß_’3¾Ÿ-Ô¦Ò2…žÎ«â¬ÞòùÙ+)vP‘sp€ä9t*™°æ¿/ÌÓ“˜‘º3`(†¸50ÇÔbòV!ßT{´ÌÏz¦± lÅ6úV­ŒRÝBù¶Ðùn‹‹r?ÃÊËØýµ«$Ëá·úÉ³ÞØ„ÓÝ‘œ2+¥>`úZsRÊ_Ï6@Ú$)íV)g,â„­Â# ÎE-±Š@—àKóíqöŽA–uí–hf¥±³Ò¶mÛ¶mÛ¶mÛ¶mÛ™•6*mgÝ:§»oŸïíèïöíˆ+b®;b®kÌ1Ÿ¹ž1‚Í/e¯ ²±·R±7ˆ9zƒÎìŽ~ê§Ó]EþL@äŒF•±°ä‰)¢ôkN&UK&u˜È£¿¾™~ϯ¨ÖX8›w-àÂÚô xîCˆÂ¢»›½¿1÷‹¥÷s[hˆZ¯k'_Ab)`;ó ™=>â7^;CÛòþà0ÕË—*={Vr®@ÖiAFƒ+=ãH.t˲Qû™+È5Á ûnyÖúëFIª=‹¸)}XI[,¤:>D¾š1†~NÞ:SR©ÂÒyÙ2¡•ø÷UÀD–¢¼ 4g` ] Ç©Gâ¹­g¼í}.ÇÕ¯_7¤xî‰j<loAdK$} ÅQ·0¿?¤`›>XE ‹l¢pCÖ¬†¶ç‹(ç#µÍ´U«ßÿ¥sÚ§‹׸Xÿ¯ ¶Dù7ò¿/‚€³³£…¡‹ó_{sÔ,Ô°NQ|EýEa‚ŽÑa‡G©#Fê!Ǥ…°7A­ÛÍ¡KXÎYÃÆQ050±·H¶Óš%’®%:íÒš `CY%Ò†-:K½ä6<7þj»?B›^»1Ãæ±|g:7^k÷Ôžß}rÜPú@~ª·ªÝ2£›&ÝB(×{û9жý8-í¸7ûÛÜÝaa/÷·¼`7cîOx‰ežÞêH¼ƒC:ÞNnx*æ½aa^&ÞÒcwP½oÆy‰w`5¯Ñö}ÑÈÞ¨yJõXyiw`¤ï†zoSÞ"£j9u kÛAдXŒ½d»ŠóAvLWBŒ½Eø“¨ÂwÛð¸'Áb‚îÉiqîÚ£ 9ÑÙ¹©ø2å2YP<8k§¨ýu¯n\™‹Œ_gí)R&¦$Áéý’P6 Áx3tÆ…<Å*¼–Ç_æÓø° “f窂3YV3<=üNôtê’æ’ÅOÞ½Q&. Õµ‡¥¬Îˆõ5Ò¤†©‡hŒ«Ù%ˆ¼tr&ÔF«ãæ;Ñ2y,ˆ©s#íE"öä)bÄÙ1Ö†ª%jµ—Å^Š‚OõB½åq%Œ¢Þ¾ã2gKû^±CŹRw;Égkäè4¢1ÎÎĬéô±uU5ʺ‚e}ÏHï— QG²têàŒÂ•Ó˜©´xMbW#õ¶:Íà]Px*PV ‚¥ÍGò²wíܳeÄåÂxT7•âmxŸ¿±)±®„›1ÀÛ–¢–BYÌf£©MDyétgQ©÷nRÊvJ ÜFâO(*®˜ì;ވǛœÐÂOÄ2¦^yHÉÊ7zÊæå峄PiSì>kv'·4Ó~홼öD}E3e»oYB¤%¹vöJÛÚö‹Öõ/ôZ‚Í&¡Ò¸A÷¬¾qi/·rÏßQ¥ö$o(óªV§« ÌFÄ›tª ÓÒ!ÖF¼wË}þˆú vv§;(e±¤56$@PÇÆç΂éfÈ-À¾>w3CN G» _'œçˆ×¢%ûã¬oð¸[gp-Ø í”„ÈÔBð{yÇùÀÀÑŽºˆ}@ Eä¿S»™£ÞÆ¥Ñj•¿BÑ8ª¶x ¦,Tê!¯% ¡ZýDKTüDS¤jU«ZȲF]$»„+¶M¹lbÝ:4À²œ·DeîþÁpà³.99®Á—¦-VýR„ qö‰ßzŸ9qÆÊ¨Fò>~Fžá>Í#³L&CÞe+  Y7X#¸/°/Q­+Cb82[‰Hå*×¢ÞdîˆëAºMÿå«è7õµn©ÕPã+¤9W´î õ´_¥Úp8m´î‹ ÀI‘gÁÌpË’Õ¤™XFm$¸-šUSuäÛ žD¬BÇú€¥5Bgp˜xÅJ Ñ:›WˆÝ'•˜[Í´æD³ªcuñ¥ŽèA$qÂ<£Ñî ú‚FßNO4¥_8¡¤Ý_¯Hü¢ éÚoÛ × ¢¨EI&:ÁT$ÛBÞüæüSÍùÀNøÉ­ð"¥ÂOQâ MáOV¹^±ýŸ±‘]Ï¡òªÂ%ÂoYy )#]wýÉ×I‘ƒä ሾœ®âŠè-ÙÖ°é3&Oì.Oµy5ÛLýÅàœ\Ð7<Ë3Ã2dþ&ednþÚjvÊòUT†ZÍœÿüid? Ì¥*¢ ¾&´¾ÒQ9F Ç}Ðíç·†že (|ýx©£ §¬žGæÕ¯»p÷‰ýGS”‡çIOÂ"˜ši_´¬HúNÄ3ìWžY2faÚÒ¢".ÕÀ¢œpiéhsÅ?ª¡¯Ã›üÛ=þ•v¯› rxmù" %˜óçåôüƒL  VèÓ@ü_EŠˆ»‘‰ýÿì5«IµRZâGݵ±1ê&È'4¯F‘"_þ¨qF™Tù:ÖLÃ,#Î!UñKõ3û”±¦,›êtr]Î¥Ëóë_/§—¦mz½¾Ÿ°{Ô¹íáR˜ï1T˜‰í”¸kŒí´îó·È¶yY˜pû©¡›é³ú¢ÍM†ßÖànÂ^lAÌ×%å¾ÿ˜VëŠú)ÍœkNËì%ðÐŽÆÚ÷ÔÝZhÖ þ+}èÅfÃWlQˆäÌ6µ‡MY³ÁŠ{ЇîDÛï•*Þ«š®gë–‹Þ=تÖ!´Í,•Í–JÀïóªvB­á²ÝJ¦ã¾fžÐƒ›‘›Þš»R94‹T‘Ø2WÄ¡•ma]“žVIÀTEšjù\Å”öbÖÖCu'ì7Dè=e]¯u‡ðŽbw™i O"nø£¾úkW»‘GÛáÓd—ö&ñ#ìÈ…¼ªLä ™ú»˜¦rOÚ&Ϙµï¬³¸ãÚ?7úF‘›¶+¯Ù4ºåãn¦ŠÓ2Fºc ÜË ÁÐC{²ƒÒ^FAmÃg±"Ü…Eð£‡Ì©ÎÔHjÎÒúŒ1*8Vøîƒé‹w ?':–î”598é§·û`Éüsa¢õÞ/‘Ç_mãa„ü Ûñs{T›&rМñ]ºx*{Xø åÀQ¨nìoÊG»ð"Õ%5Ç8_Ð8!b1 л@b‡SB ~FD©­ÄG"žo:ì12Y,lPØfa•êiC5ƒÓ‹_¼§ô#›ì2xÂ)Í1?‘”ÏdjéoŠw§Ù=.õKÇ94‚ƒˆeûØeQÇ‹‹Žç(:ÎçJ)rYû ÞÿbU,ÞXZë qNèÕ†—U¢/JÔu¬'„¤’ó…šÀT©®4ÄP¨¶ö§²ÚœÀ"òiŠ2 æ&:Â` <ˆ¡È•Ù¡°;pÌ ÷—Y\N Î8‚gEUvD\/΄ÖR°° òÿ“÷Üéœçi(!«!{z†â†Šj€Š 8iø;€²€ÓÂ1øAð#J12 Ò4¶Pƒ4ªdžӕ)+”ß*I ‘(Uï Wýö¤('´pâËÒ½ÛÊ @7ÅKÐg{|æ:N½w5JOÇ ô¶Áê¡ì¼ä£‚ÞÊœ ß¹ãæƒÑö<`!Ä` q”åɦá¼èƒÑPº ž~$”³ûj\2ƒ âÀ¶ý½"¶‡`Š ½ ŇAØFƒa„Ú!¬„/YØI…•á ‡Q¤)ÙiZÊ>øÿä„ ì½ Ó¥Ç‹4Õã~WÓ—ˆ~i¥H¢'ï:Åü”€ŠE9—7׿*+Ò¤F¼,R D"ImŽŽlüí<.$Ê(b¢[…À¤x…hÙu†¿·…‚·@B À`è!ãa¨&{oÙ'—“¼«GÅ™G uo…+µ+… ݽ=’L„ýv“ˆOò” ž0¸^3V£þÅâ9OäYI„™"øDC«á(ì¾uíÃ,Õ+²=ȳ,±Jº¢ÃZûÇŽžÃÆ<94¿sîþ€ýt ’C*äh—éc<09bø×¼}ÙÁ¯ž`ݼœ"jƒ¢ÌÙdzò\x\Í!…ªã:sL9=îÈ /@“ÂIJ·€»‚p4Ÿ7b¤Ênɘº Ô¥Z¼r‚ æT¶1lí²ld¾ìJÝ5ái%Q¼lT­šBøþyväC{~! u&â*/Ceî`">·ó_AýE©‹ôÚ(Òáã¨,½ß_WåB¦ÒѦìlÐì"‡çÑì6öDŸPù3-E%—žÚŸ•‘ÐGÓ½iÄ-½)ƒyöÌ4…ÝQ’Ò¶T"pËØÈΉ5Š<í°ØSŽÞ±£& ¸à¬Q­|HTZ*ûz©EØý’ÜÚÖÊW‡—˹¥µà’ZS¨xn)®¬…|âÈ")É3š¢ºIjÿÐL?ÅmÍÏü¡Ð“:‘pÌÛw&¤º'‰¼>ƒ.Z³·;[B3¢ ‘ýdòšU­•^xv†trÆß9‰íÞý½ß+‘Ï®Ãü~φÝë¨UòOšýÖ,Ê“¡R‡ f-ì=6;óq|í×CW_//ˆÈàš½YüM?Ûí­ X3m;È _ §¦#ŒTS/ô™ÉZIJ*i!FiÓî©­~}n”ĈŒ¬CÍt†@D¸RæŠI½5êôKäæ4dSê íCàŠÀ¥Ékð)œqýëí¯}p¦½~ÔI"uY }ÕßñsÜ(ôJ%ÓÊ(-í¶»:¬˜³18ìc긢Œ]Ìl‹fGÞÍ[ÜÓw¥ËaØ—ÝB¾"¤—?‡?lÏúT=mL‡/ rûˆ­%=$ýkábÑ/¤MŒu¿y/&¿@é}XM÷“âÞ”™w=om0‰±'Lƒ6 ÙLuâÐ] Û­0s(? }L*´<æ›43›þÎ;æ ñÒ2Ù©%¹Gâr6ûŸ^ëd’úÛjz"Qäý–U¸U¯®“2µŒj!I#••Uö©êǓսÞçïÉQ&o"“À•,þ àqùèFäA¾xe×èÂw°/Ûì¼iz|«YÎ •¡o/ v#ÄÝYf@œbei+×ôçÏ™ÃØ¦¾/êÃ;ûMõvÉ›?v Äç)+ðëZ­¬í¢Œ´ŽU¨½ÚOAÇ.ØR‚ôÀBî©óf¶d÷5é5.¤d}ÝüpC Z@ 9M}Í%b0ãÎ ós¯`8ÁÚ92#ेíÁ}ç¨ÔüÃüÝ»h[SÐY·âˆx6¢Â¹z[ƒÝ´ŠI0¬£¥·3¤ùC½,xŸŽ—<õçp«&Bß’§5ûdrC³h0mŒ5îdµ g¸áŒZzÙ3|†D,"ø]JrÁ¬Ž_8-ޏò‚ºÇÐÑÐýMÐ7<>ËêËióîÿ°ìá¨È‹ü;šú÷…¸xãp=Ù­ñ‚ƒƒƒ€Ëº‚»º‚É‚Ç&/}'*‹‚3òŽ>µ¿¹¿š‡–³— ¿‡¿â‡­d¶£aµÞJD&*l38ø•@ iᙢ§10,B©Œá(Væ$¦¥Ö^ä&%eh ŒŒõõ €EQEÁMÁQá£PÄêÿñ1_¡\Ï °?(õ¥_¶•:Oi 1sI1 ¸9ĺf3Y„ªS<“ð.Ù¬¢j8Öâ•FŠ˜×?Np«A¹„5Šd×ËçtšÃÌ”›Ï×÷ NOÙÚ@k€å’ØAOù§1y™|Be—¶Taî0í@KÏ9Øä¢ôîz…Äk¦ÞÙ³uP6a„öB:Ì´=Ÿs ;â(ÅVÉúŒ»6ÌÏÞúû¶wãäË´dž‹qlÈQŠm8뮞ªšõ®<É*Ê1±Ä®ÉÖ9Ë€*ùᨉTNÚQ¸bLrÍLþÏ^­ËŸ£KL¯ç‰zçþ› \ˆÍC¯Õ-´Á]ðÌÔ'qÚ‘ã( ok^¸>û7]ZãdG+³CåTÎô¬Ýjnvâ°.8å3Óø¿KÂëqûR*¶±}xØ#D²ñx+.“õ÷“t }™.C˜Ì¡8GéiˆA‰6ÔÆoŽ×õB $ofÄQ!ÜçV/ æ2”9-'àï,l]€X64þ Æ6rüâñÅ#Ê£¡²YB‘{']9ZAví*©¾’po{=Jd$W} ²k|™å ˆbï±îóª}–9±ÎÀ_ýÂÆ-éQôXxQgÉ•’ޝ^â ä/uYÖ Ids+­ß§·ÌÙ ¯RylÑìM=Ь“KÐ5¶â05­žNGÙÐÉë8bºŽU  ­1d㿤À°î4T±»—®fG¢zŸŠOIŽQt[:îxùGs·íÛ²o(Pí¿;Sþ_úkTu”°TÐ}QQY­[åyG66€J‚áÅE¨ [P -ÄmÞ(›UÙ&H©I»˜»*äùjßÉL·Úòqâà¢êüí>fGÿÆ•°s.Á¹¢S£C(·G[æÏœ8TÖàmzÎi€f¥Ë䈷kˆÖÿ.HÔ)üq/³N’¹†õ«;«/|ÊÎ!UįŸßü§¢¹1ÑW (Þ˜€ªBC|RNÙŠ?~7О‘@³c1Ê@1øÙ یȟ,„A²‘ÖA"YÜ.Y¼e~Μ²ŸM‘*ÎäÑÔIÅ\Cæ0Šg¯ G¨üçErÝ'¼ÃòÈm:§¿ŸŽ>¿ÖîPFìêö_«©q?6^æï´Ú×äü5Å îõaÛ¸ŸùÚ¦}K†w¦Sº§–´S:ÊDnö-'úüÜe…ǹùÉÞºPÅÌ£ùÝ€yæpQ›|ºü[ÐÒ’øæ?°“ßqzÀº1¬º)ݦŠèüøÿŒ›·qÿ6·RŸŽË›XŒúó ws˜IEÀ D°K»ÍÔ+é¶Jòál‹ãÖ–|è~ÔÁ. TÇ’äž+í`çn›eÒ&#­‰ƒwÀ™A쀑–sJŽxBEúPSíÅ­©PLa0º”ùõÿ<Þ?’SGÀÿÆ>ä2Ù¿Á„ÄòØþ€å{hçGVˆÄJ MÊEl(ä/ÄG³'5m1gDº‚CèÀƒØ“×à—'ÐV÷ÌË£¹y΢ñÿ録K$½î£EY4°üЧS›­[@U°Àô5ñk¼K$°k }J$$èÕÍzåx#B"}â«‚.áDœV•ÓÕûê§w‡ôîf›g#Xwßb’vþkMQ¿[uá½]ãwóï4:ȹ²už\ÝPüeyHfB6"™|•[û þQDT´¿„üÇ¿§÷±„‹‘ï’a€Ç“‚$ú),$ŜΠ@<vàG ä»Ã‰¥u=z(¸µBö Q */n_O1535ûzúºƒÚÃcèdð„屈AÛHŽ3¬œÌˆÜ?"Ì g€1pä}”Íò¶œÿsÈõ©›îP€=ô†yï顯IÒ­‰rª¡dQÖ] ;G®[à=Ñ3Îñ¶¥™dÁ¸+^Ž@ßpsª0ÕÕR= £¢‘01öLjõ}  Ⱥ’Õ Èž„&áñ“ÿ^‰Ú(¨ÉVŽ =ÓãJ&_!"ÛúP™§Ï¶Ö]"?]ü´`&° ]šAKL$+øÞ]5Ô7Çï6®‚Ìß¶Z0º\ôŽ+Exb%øx: ^Ä“·ÉøGÓTćAáßÑ1пñR6qÿW—Ðÿ)DiÿªPWpYQðçÇåÄøåHDQp€L^õp£ðWöp·ó×^bát·³•(¸Òÿ*O}Ø ‡8øê@ËW0«xk÷> ”Û¦³ÿjYàxÜ Ž Oü‘hXhôÒTâÒ ¢ ß‚èyÉ)™Úƒ£ãýãýÃ@?¤©£a§a©aaõ3QÈÇûÁÍô!þŸÏ6™‘d  9øÓ'ôßÃ4ÿe¢5jV^Hc(¾c‰ÝÏžúYQNñ$›?2­—Š#‚´ˆ4éÙCçMiêJJUjûCI{JÏIl–Xm³t·`l~€bØÃØ$ féö½Ô=Z¼ÏÖRK%ÄáÎLçr8d»Íšœ\ýÙi‡ÒGû.!Œ• ¤@á%6NR^4!è°×ŠW¤‹júj6NŒŸœƒ«<·Zg“Ù‹h \$Ä/1%2VíeGØwƒåö#å0Àòbåª^ay©0òlúOÆœ(sÇNIæÐŒD~yK°ê©Þ¢€Ñ•CTQ¶ŠP\Z)^®¿Û1ïg¹K ´!{k ¸~š=VÓÀss ¶•¹Òâä,ŠNÚ_–‘y(ŒMd"qŒ¡™‹k8l3Ô4÷o$,½cðd²fŸ59ÒV”‘)…&¯^Îc3¡ð›±cD”9oÂ9Æá¿@Ò^!ádcxo¥3.Æ“ñë÷´ñ–”!-wÄ#bÆÍ–æï§;Ää2O 'K !•Å´É÷íJgÍýèb¹Â¨_T2-ìÓþš= 6ìÏd.¾W&IÍÊ¥o,zŽLNEÐÌá¬5“yÓÁ”ÈYa›ÈX` *ïÙ•È5õz³îP3Ìèὦ¤¸í—4…|•‹oIáç½Dרn(Î÷Ï(6ƒS0šÇ’7šfÇÅgºnÆ!q•IJ(dâ®gvU@$ý3Äý“nŽ•h®ª§~U\$Mþ¾´<_õÅk2CÕy^ƒa £Ùñ|„Ɉ(GÁÍ´µ¶œ¸`âLã7áí%2é­ªêA9*[Jwõ^toÙÞÇÃ?hú’ŸOäE$9g7ÜùÄiØy«e:b•{IfWœL9DÊ"Ò)âåY¿h꯶‘Väk²~‰,ÅivXoÅÃ4§viÆ!ØEì´$Jû}¦¨¦L «¼¤U§¬ÌGᙿø‹ÕY¾2øî•aú†z€ñ­ÝÂ|* !w1_ŽânFt1eå½ÜðH‘Í áÝLdð˜(ïKd/ÞRi+ßZú¬¤‘§dùŠ7%8sB_öu‡‰dnÇgËöjÈÝû”÷ШÌÚC.³‘#(;<©.\ç°(Lß(*Ìg‰¤U‰Obi]ÛÅ[®-e{©¡›;€ß0`w@ð´¸Ý¦ö÷¸EÅj”ånÍ*è¾ ÷m>U†víå‡vï~‚ýY¦ŠÎT!Æ·®©¹d°”6Sì4‚-–fãÕJ›ÆàÕ6N]ÔO 0Ý]$O½mFQš H@t|èÒN[`311²]dt`™\¤Ï?µV씲aÎh™T¢‰j5¡ÐjÈx/ôgV#7w¬f÷gï#KѬì"üÖî žr®·1¡%Å àIq©­]®3 —Mÿƒ›…“3ß”S©½¬ÑsÖ¬¬¸ml.åpíO±ðe“x=-B¾¼ÆÕíj¸ª­ä:”?/»øB¢¢Xy­~>lâ?Ê™BཡRçƒS™´h` î|‡ Êlû[—›YSG‘ã°_šÔj½õâ£Aeµ~²ˆÊ\•4ÎÓ®² …?©': _>%REëZ§MÛN-°ÊÔÑÕ‘"´ ]#×Q[z-óÜ’Íùͼù÷»Ž'†õ´zFIJ oxæo¨ 욘Jc]qqWe‡™ÊØõKÝ_[ˆ&ž5¡’ «½Ä4»xVœN!t´½ žðüYÕcÞÛ͉—ÏÔ—XÆ.¤s@/VziyEº W§k~¯Ðõ|h±Ôù¼Ø¾ ’¸fÝÌëÎÈÒ[s·ù­ÆÌÕX½Ö8OÅ{óX½1΀´¾îð§CóŽHÕ…S=B»Ã|™zSÛ³%k«.¾¸˜«ï‹õ£¡õO®?¹bBêö$׺a_Ö/†1›àåT.;Ò¦!—CEú݇!úÐêÈmÁÑ‹¨Ø<Ùý Y¹H!1Eûú#ЕçBg° ÏNô§n»qÄu塲"ìz³Q¾{ÅÌ}±¨&†œÜ]1"V³ î ˶S›uºf£ ^eÝtK'4Cjö+ö%ÍÕ\ -W¥gÔ7ZÇÚ˜„]œÀL|Ⱥ~êÉ;i9+Y1‡Éß ¡Šz?3ÕÜžëì«¿ŠÏÍx;OuЊFª ˜ùynðõgÚTü…˜ý7*zZW#Ô€X¯<µ•ÒKÕ¢L³¹íÅU2ëè÷Ÿ5€¦ƒÓé܆¤3T>gD¶‰Ä;ïý•O'B¼®+°%éÍW!°2kòóØmo²žnÙC­¢d7ÿìR®€ÌL‚ì¯ Ê@ÜB4D.£¿!˜d%[P›Ã :Nå%|¦ÝrÊÙ b&Š:ÉP§D/µæÞ±6âG«ŽÎuØâÞß B%\šÚEø9\µ1œºî¥ýÜkdž·€7”«ØÛO¬Џ„ðªLµEø¿3†Ë` ‰€3f~>º Aúó™ÂÄötþ‚ìßÄ‚þƒ˜ñ øÜ’<üŸnEUNx‡ðIø£¨@ä…WÑ&ê, Eü€atÎ1rŠ«ÅÞ„73 åBÒѼ¯¢è5ÔüÒ‰‹m/·¼®­cßï÷wœ~ÊÜry†$aÄäiÊt©Þj}‘RDá‡ÕØBRç ÓX¥^å8b»‡¥õ!.Zž1m‘¶,œŠÕL° }¼Cöìì·[!ERö4sHÃýuÌ8 Ýß°Ž¢Ë°/OþY߇ú&ÙlY=ÍŒÔßœ›{ºD÷%ÛñÅ+@ð ·ñÈD! œcâUñ¸E}™|àSh¼ϼͲ§ä6€=M|[°â»ERKAI€<´<†OR»K F¢§iªþ7 Bí-.eBû#ºÀˆ\{È%ØZ³†~Øúè“M\©]f>ÀÂm(¸LèÖ6ôv 7«Ùî_ñ»ÇeÑŸÿ¿NñËýßÿJ¾9ÊZrH ðß²ZêÔnÝþÈÐÍ`þæ  X Ä`ˆÄÃN<É$S¶K<,OhoÔº·‰è»ÒŸ £]1ù¿ŒÝf³;¼w§/?_ßÞ¨ü-¨ÏÍ…á@†0E™‰ÑGÔaF]ÞK— jˆ‚ p¤[ #)R¡h) t õ€ó5m§4­A„E6º,­îné×R‘ØW›ŽaúÔÎ@ϬÁÓžDý3òõZõ:d—(4œEg4î(®Ín˪‡FÒë¼õÖâ««nE„àu…®­°mZfÙž››Ì‚ÝRµ*Í„‰¦H?,¨Ù*©Yú]ÿQIò#µÈÎi”ç7)[Î-š,¬ƒ ÕåD—Ðá’XšÖ ©kMàc˜ôGø«Èš×—\²x\pN›|Ø!I…Ÿ÷o¤&uîµöÇxãtýˆ±ð&¶×^ºç W©ÖmÕ£ýÔ׌Εõ!Ô]WNSà׳ýÜ×Vêô·@?Q"³D¸ ;¿ô ÐÁ19sY‰3Wdô8¸…òJN+nÉP¾Ãó .¤[‚~)<`a2E—În…âv8ƒ@øpôµt6|:=Q<Ýx€D —ü’Ó¯¿•ûRyësÐßÿÇâuÐ !¸ü¢rèT ¾s`Y¯V¥â°7Þ@!bÒîоSV;¶,äÒb ½Ùˆ24S,‘Ø­jˆÊ9v^m;À„t‡èž´þ¼À«G?’UÕ!½]´¬w³ç ⇄ˆÉãVÿÌa:os¿“é=V¡üæD·ñ¼ÌîÂÂö'ÂÆ¬s(“ÜÂ=ðÑYÞ<怅%8“Ôíi`³AR3S{Èf²¬:¬øTw˜=Ïm°Tóϯ¾Èñë—¿ÈÇû‹|žÿkä3þè  ó,¡J¦Ñ†£ÁëkÕW•ãKdZ$„!#î¤Ó ¨5L³¶+*úÆÍîf†ñL>MÓÆk˜³¦}™rœzµNNëêv¶l·ÄúÕ)¶†…ÑÁ¿ÈžL'ûiŽ:Äx#—`¡j“çèZz|¨Ì%­Â6Q(ë‘ë´²ºu ½ÊV•  œ&b5MÓ'uúùúDMì´è+c‘­f¾2oÙbwðpI—k‘è‹¥þ*ŽI,Àþc:•"tßå=>¼sϼ®Ýzá^èÚ£Í]õyä%é$¾Lꇧ yï ŠYºU’8 ãd®ra j•×'J›6íŪ§Ü:¥4µmêÐk‡y(­x¤—ô;,ZBˆ–ƒ3¸œ™ü2$O:ƒ¡LÎ"D<]½xϾÁJÄ´YR»M!dTšZ‹¾CÐ;á©Ì„RS{Ú°ÒOz3CÜŸ'šÊa‰lÄXbOîÑNÌÐ]êš8Ÿ«cy°Ffçݪý÷¹Ï ¢³1HÆl‰† {ýä)lj«kº¶ÕÜ%©Ýæ‡ ¾×öL°Ë!…Øn=Wd5¡tþŽú{˜åv~A–k¥Ú×,!"oóã++7Nuôùßk-»~±%7â7¿à YÑ]Q6Ç-ì’{ÿ ’öã¿´9[³úكވ茜ŒÙÍÀ*(ÕÄøNkô¿$"N=í-Ö}‹ÛpBì‹¿´{‡‘3·Kpžãìè$æì#@J$CtDG7V°£>ü(VçOÕ.ɹÑzaðHDà‰DË)c·Cûü_ñŒ0I0= Tø÷Ýÿ<ÿwÍ¡º­„¥‚üGq½~ûZ°Dž€_X³Z1!P@‚P²²*³ÊÍ{·¯„ãÞï‚û~›Åø-E¬˜£Î–M2³°+C¦ûC›"Þžz{œt®«ìò¾ÔqP&Œ@¹–²@•¥«“it*ô£é„У<æ<•®º˜™ª¢Ô‘ønlº93K&g÷gˆ®™DÙ¤£—¿ ¢Ú@!DgG\r(C…鎢8 ö %Sfmel¦rMõItð·FQÅ1bˆ÷N3¤Å³?"ó2JÂgG¶ûªØB…«I±øŽ*9¢šÆb³-Æx>(i¢|ëø¼ÃsXû¹t˜‘ƒ%MͱÇUð ËosN7uî_5§Í³Róî­C[Et ö_„7°6d”Jä2–jÒR2[ŠñC‘ÁF æ æû‡¢0hfú?’aÁHï¡sûõ©ìåñÓ• È T”ª)Ðd¹è\%·½º.Ù¨Ÿ€ Ø¡?3Ù¢<-‰èןZr§©;ëø™¼J¡!)ÎNÍu©D•¬KìTíAzY'gøèÞÇ/¨Nû·ÁG› ª<òdËÁ²^{,Äi5N”z¥eÃÉu+Qa1¤Úm:Ïæ^s¦gCÜlÆšÐ,Å'”0>%¥ WÚ{E§„KØCw^ Œ‡¸±œNºMÖ <%‰ŽÛ¿ü1u<å‘»êÖŒYš«‹±âÍ\꣚Ð3Ke=9¼þÁ¨ºNšî"`%‚Ow¬@B ðmJmJm…Yiì™®œ»Å›2…ÑæÇ1<Ê=ø¥?†œ'…ƒ’e¶HeRnS!gnYwpêe߇$k¾Óâ¿ùkvÛâ~‡àˆg•NÐ>çû¢¤>ä'çx°í?Áz}¥y¹)4ì‹Þ€kOÅ\hjhSE§€,Ó=^ ôùøƒÏjÿzfKµÛ–Ñ%Ú4m¶nº: uˆÅª!‡gµzlwyWz„¥ð–‰zÂÒ4Ù=ã“{…ËzÕrˆÂr£—Ü›oúI°¿Õ…ŽDo³·ƒdk€}ƒÄÏÛK%1ˆ‡tÜ÷fwd3·§±”†«üÖUÿ¬9[\,&lK¨‚b½$ø{L'2ìÓÏ^{飿?ÿTM{{àB—&7Íü˜\ÇIÁ…¼…ÔuÞÕßurïnÇÀr dM~‘­Eïg'T4´0˜5!sP¢u!øU1_èŒp×Y5Ù†Ls€ùÏÌr"ýntÓßÑøòýo“‰þƒÿ3ÈÖÄÖù¿~³d7È,r“l¡!µZc³ÔlGÑ øAê9+зZøó¬¨¡_“›Vûºã¦çôâ¨~dzh8èÆ`²>ÞXPGU3ñ®†0Ô¤ž÷è€Ò ù(¡‚‰Ä Ö)‹;¡S^Æï‘h{ꪩ°ˆ—¦@Õ‚”ML(þ,‘­æ B¼Éžˆx.+ùÏÑÅnɘ“l„úW‰ר‰>ú:ÆF8\P‚þÊÕò»î©Ñç?¦ßBÒ‚’º"øÿXþßéÿËJ‹º‡·ò Ê·¬©GÒD1’08(8d| la!ixp¼81L#¨YRš=#’YÀ^/J—&õjŠeŠ|•ëÐj­«ÛšåJ+m[WÎÃÎtV}’ô×/¾“™žÓ\¯g§ëŽ— ?¾Orÿ7ç$·Ã*èÞÒ=\2êv5^=·é-µÐíö>ä¬z1ÑŸãg?d¿ýÄI% >ïûÔxßvoú‡d•÷üõ¹ ãíØïÈq¼•Jw)GÚîpÈz£‚ sí #í³o8n}ÞüðÆÿü;k¼<'ƒû\Ž(»eJx<ýñ‚Ô7\‡ýê‚áT–ã>}Äñ뾉nO$£—¸œnê´­ñ6²_—fèæ6³_7mëÇGˆ¼ ŸòméøG*’Ý!N‹ܧ†ý. ê Ç/¯ýÝkUô7©ÖŸÚ=<ÙæC¡ŒO¥Õo’<¿¨·ïCbøE( cc“@c§øœü’dleJø² II‰FŒ›|GöòÆdme’|(gtçù}k¤Ìâx­‚ P)rD|éë­ƒÍߤñiÀúì{WG~4Òòïû¾¡ð¦.ïDA;ê„—8·o-ñ¨q‡½þn1tóˆqbA>í£¯‡è䈫ƒw,›aÌSø¸÷ +ѨpôŠõyù¢-ö}¨+…àÂ~ãhQ*0®-új/6 Ÿ‚&¨!ª?JªÚ³ZÜçåÊ'¬±kQ WJaWh¾Ýéuq$„¿¦®ÍË{zåµp¡¤AoÌÓm¾ÚëèŠ/ëé CƒîF‚=XÞ-$¬{62Kæ1Á'º-,‹s)nàCšn†õqÂág„>ºå‹(p“Üš‡YA ‚>Ü©ƒ_Û®}³±òjÝæ YvæäÍ9öЏ!1À‡£-ûîM×…>',€cMÅ•âá»UsâAß {%;ùÍÖHuð(>^ét†R êÃø8JZÎVzlFì›g@£LD‘ywÄ:®D°†ä¿}+ࣅ "?]P ™S° »˜f'÷—Ïï1£\oÅë8ËÞvSC„1SU­äo­H%'ù–xµ¸³ÑÑ qÍNnج)›!!T£"ñè3­Ÿ.¥´‘´Ô‡„0È®p•Ãêó7HX^ZŒF3¦×úbØJÕ“DÑjèuRQª$‚šÒQÍ¢¨IŸ -5²u Ì䙨7‘ÁLoÅQ‘Öoê?JÆ•³âI&Çå Çå NÙ$U (à<+ŒÆ–±-G7¸GÚŒ_Ç›‡šP;‰DOÒ)ŠŒfÉØQß„*Í+²E9lJòpYwX"wBË(YpÚ’¹ ¥§ œÇž‰O5ƒP`ƫۧIâfeVÌS§TZ´B@(gL1fJ0Q€«nƒhXŠæ-ÌU+RC*©þK:žcÕ›F’ lÐYy – Ë›çJÆ©˜÷JŠ-þ@á}¤pN–[b€¦Q>WçŒL°UÏDGŸ/¤Ä‘“ fŒ›8enÈ1³{<{gu÷Yhrëã@ÿmÖÀ ’P>†·è½?/¥®Á€ZåLH£à¨5qÄâ©€´¹'_.\T´T±ÈÐoUè$«hÎæ„LZDZŽmæÁìÒT­Y_n.HRÑÈv©XŽÁ¡|‚ KqެRÖ¤I^¥eÛ7Ei3ì’´ÊàzZä ‘U±à±‘w€©[°à.\ ÑH™(î)i±™)½N­eMa]ÄÀ Š)Z$åT"È“ô9RCNEV,ÂgÁ´ ŽÜ´ï’ü*¦î…›7 ´Þ(\Ô@VähâH<Á>p¢õÌÑì?ÝÍÕÁ©BH =³.€O‘“¼ :¤ 6«ØP¬<árª‰ g–TÛt«¦7G/ÁEJμChã{Ð*Ñ“m˜îí¦,y;ÅYµ« ©±,ìÆ7›¢ãHÞÁƒž{àN2»VРŸ©œ#仕K¦ÎCjå`¯AH3e÷¥ÇãUÏ%;#ßP·ãotêƒ}3ÔU:Ë‚ìÄäT[åfkýÞ“Zظ+78›ú‰"!ÛZ²ÑFït([*VÒÂïÚ º~ÔþÂŽ±FJ:F€M^!Ÿ?o@ÔøÒ‘i A ³á Ìþö”ùžõgP;~œ[LIaß_ïéN‡Û¤çx‚ÙgŒl«?˜ñXoD°î¦{{dåß7 ™|2·awwL’qeO—®BFªBJ(¿ÅØ3¶MaìpþÀj°ŒäöycTísrÏ‘HmV†´w˜ßœÙµ?è ±ÉQ: .1£'8p±–â'h^›]y¿[-n€v*<¨/³»fŠå£9ûG\‡‹ÁB^Œª¦*ñâÃE9rÔm-˜Ðð¨œ"‚üÒdP>¡:7:rS‘é*Îzvh¨¶6ø y6í@½Y;](61 Ð6M±Øwfsy =ÚÉ٣Ɩ¼=¼µpž+á/z¤Ó„M­ýd(Ú¤E’ÿý-²þɰc3Ú~î1:˜À•¹Sn -äamŒR}à~Ht‰MCV.\±ª,6<ãûÆÄ`ÀÇ‹6ظN¤%6j»q€uĺ4G˜\Jt©&Åî4:N³$t\QÃÐô¬²ͬ²ã•lF­*&Hë”C8#ÐyÛ3•9-7ÿÅw,önÊ29â°Apä¼y¡Ù\}„:Oah®Ä£‡Î\ Ù9è=Öz-Fs£òÿöŽAštÛºvuÙ6»lÛ¶­§lÛè²mÛ¶mÛ¶»ltŸ^ï>kÇ·Þo+ΎȈŒÌ™qÅœcÌ{Œ{¬‹·Rº9,G©: ßcng–Z¢¯ÈVÌ/):¯^ÚdL/ ª§wYDx\<\ögcgB)­ ¶Z#Lö³dr±ßVÊsÐëà1ØRMz¢@y¡hªf“Û QŽtèÑ~éÈ ü6\ÐZ½û˜W ïÚdIÑÁ<È£+`5jç¡EŒ…õ¯ºg3‹#‹6«ÂÉÑW|é"‘3ohðšD8Ðz«Ü ¾’Y ÿ¨3þÑè‚ÁˆL4·0䧯V°5l]¶IœÛƒ´øiɦÌá›2>ñ ¾êբñ´±Úiãå ”¨“÷L’r3°EC¡\_Zæ ™Ü»ÁѺ¬ÁÑ^IXøHÕ‚tË2›c€–3ÌÁ3wÊɤ+¬;àøìE®Û¯Õ5!zÉJGSÛ迳çî™øu‡.¾¶ùJ³³ßæŽÁ~È{5ÑñM½cæ`×%ÊÀLÆÍÒõãZW“1Õb§Sù„vÿ+õìDÕ‚o0‰–f^7xµ1¼ú•g´`º9ŠøxĦ(7C®gûü=^Ñ¡ë5AX•†j,Eµr«è: H̓XÆ­ÜoðÉQT=PeHŽ2.ûû9:üÚÅkŽØVÇ¢­YÜÍ !ÒaB®å¿ŠÉ^ fĬ9¦q£Óßa›£; q¦ï|ÙÁ×-ðR%»ØÊ'â|=þxLAsCiM28r‚1 1FÙž? žÄ—s Sv •|ba¦qKc[뇢3 ÍÞv"&oz•½RÜÃûl”²5­ˆÌap.’«šÑ` OgHº/‹"q¡‰ò˜\3Ž}ƒ4¶“ÍeöfÒtþIB'Wi·»H;fo?ÁGGl²”eµ|TXBMÝj8ˆ+µLLD «éðÉÛΆÐßGžèiä-Q®s,K=RIØ‚lbþâ¾%Å»H}jäó‰Ù ïT"ËȯuêÝÛhC0ãñ“|¹”2ƒÌÛÕépÔ{û[3Žøƒœ0Pè#@þ{Ž÷×¶Œ…³‰£õ¿·hþ«ëb±²Î¿Éè6ç« Hw `Õ-´0i˜(Ñ!,„„”q¢¹2%“ -ë3lÛšÀü“",ïúÞÏâX7°ÉÕõá™W3ÙÜ/YÌ/SW±¹z½ß4†i˜4¦#?¸<óø‡YðOâ”ðc¤% §â’ºˆ1¡ŸØþá©h2iS–C¯=‹©$Îfá „÷®èœ¯ò2ƒ3¼À»—Ö¶åæ²·2(Å‘"\®ä@ šf“+âBxü½•ÚãÙ_ÇÍÖëÂ<éÕô¥Õ&ÏÝ¥õR¼Î-;ï5éoAñè^7êÕ“ó’(¹ 9ØV/ „™Ö·ÉåSÏêßIPz´üK$˜ŒctÝúÊ.æh˜àÖÙ?.p0‰Â6 E‘Ì¡†áµmÓ\*S›Rƒ…þ;Ütì•I àù×:7’pò0‡œÍçp©XN͹=ZPχãÃy$©I‡³>öä¸Å®} ÊV¡!9Ø|]S\?s{Ïÿe”F0ΠÑ*µ‘9ž¢pªÏÕv¾p¯yXâ–éö$BlÀ¡)-6{åŸ)¾Ë ffz$F‡ÞŒ€ÞPcN˜Ïû€ù"¡È`ñañ’ ‰f–{Cz‹ Ræ >V‘‹ÿÔ¯¨Å×Q&ûͨJÙ€5A‡mà€çâ5BA.SÔL«Ô®íSíÆ²úÔ˜|#á3ô€$éYM/¡íέ0‰Âj¨Ó›ÇäUùÙ&œÅ•1ªS!·—#H¿Ò¿x<ÄT-÷õ7…<“âÈó :`@@‚ÿs@Õ ¬]LþC[àb›?p"ú¶Ðâf…BÀhÔ «°Ê6Å)†´Œ*Õ¶_³ºi+û¦„ üUãÁÑI‹j…í4~u53õ05¹óëóé‰ÛO”§Å~1°Ž±pÖ”v«9®™bUŒß‘í=®µN¿ßhLB¶p˜ê÷PwÜdDkþ€šÚØHrVI¤¯ÊCBÈ£k½P>²ü]Dë8õì8~Ž”¹Y³6y^¼‘@p9Tú{.(“Â,æJÃ6‹Î¯ýlêD=BM²ÞƒÃObÕ4²ºð²”ñ³ƒÈ± Ýv¦K£ß 0©ïêuA3Ëô †[Û`g2’ˆØºržåò3®ÜƒËÔb‹â.d‰Q™»çÊvukC;ñ^­Ù÷,¥)E”ÂK¸v‚W+n“ËV’ .¥ÏÂøË ¦þ Wl©Ç¼Š.Cú0deÀ{/Œûy­ ËÉkÁ 4µ±ÄÒ~Jî¡m%Û¨3>GýâÛ::À !ÝVŽÏáf‹©ö«p…·ûÙYÍÍáb F”¶Ò„C—í²^"á{ìåo–Ö•ŸÙÔ-žb²þâÊic9¶Ëéðä?i6’™h²ŸGqåŽËñ ô;ÄËuÏN%eÌï‹¢/ö3“Oä­ —°$œbqÏXZ£[ ì­¡Iܽ¡M™»Â'w="÷L¼ô}ආˆÚADA­ÎðmÕî€~Ö>óŒT,Yæ’¨'‰Ås—-sf' g`™“y³_Kì½…¬ÙÄñë¡.~þ>°® upK^[CÂÞ•h¾"<áP Œ…² ¬¢»Iá=Ñ•d9¿°¦Œp{ÿÖ  ¡†’ù6ÔW¿ô€ýŸÙÝÿ¥#¢þ*ÑÖ(‹”-ÇH‚6ì¬HD‚÷ƒË$F„Gè‘MÍ·m̶q5“}Ó$CE!ˆšýEq˜n„ÌГåtè±›álüxXm½Â?Ô„/¤ˆ1EhJ[6œÄ=¹£%L²ncCÇlHhîY9ÊmÇp\¿mQÁ‰p(6 YÏ hî"IÞÁ¥P9 Ü¹mñ0Š>äU"¯übû&›TÄ#IÁòÉç¯eP–2³5Þ ªíúJ5Ow½ Lɶ¨¦3´Ù…Ÿ¡F”ÊÍÿØ~3U!/8ÀÐ<8¨Rå¶ñvÁðRªâ°i8PÒøQæõ*ÅJVްüMxt),õov¾s Q‡Ê"qå®Ûj…\¸|¹yë_‹Lž€K8¡ Jl>¬¾ƒì—ˆ€³zvöŒHŸ}¿à.] MnÆB ‹"fý¦i¨®`癄çÞ€vã­b:·úÈ+ŒDŸì#Ùwf ꤷˆ9u(‹èÏZFIÝVõX  ‘…®) F#ˆÈ®VûÎÙÏxÚ…àaLG„°W àð+‚ÆSØ®’Û†™Ç‹L˜¶ÀÎz?‹­Â+ØëÌ ¬Šù§G°<Ô¿ÏXyYZ‰øý‡T6¸ÿ¢;åÿGëÿm÷T¿TFQGý­i¬ÞŸw_¶V¦8@}g³‚!„ƒÓlX?KºT¤bÑ=g`¤¾zj\Šý\Ep`3ÅPy+s–¢ŠL‹fËbTpƒc°B,ŸÎ"l*Ù„»ã.²g4*l¬JQ­Ã¬b,)ß¡Fë›ê« ÑùU/L3ò)ùò*šâ‹…C‰éæYj˦·#°›ŠQAˆ1äSãeÙ¬”¤ùFâx¤xÙuÊóøNLFØû°¦.É®Í$5ˆ«Üx ®ŠˆPÙ‘´ÌÖÎÑ—ÐXh3s¶»sQûQ•1)úkJK¨BùþõP¬‚8•±æ!'¸¤äÕİ9øÌ’˜VùÏfä£*VX‹á(a™P¢Š4ѽ§éøf€Â¼·$±Üý4,ºàÔïX Xç×÷ðÔçÃ5ß• ïê ‹UK;Ÿö•¶qçdB™’$ý=°Pá[ô“ N±ãâ[$“Ͱ ©ÞW¥™[q›Ç¢ˆT˜OÈ¿'C¹Z¥K•¥íLÖ> ÷ž?¦k¯sg+0ãuÆm ããJž½UÜ"¤kRç?[€ã—ÍBª“ïËbÙÎ d¹[ $z)ƒäÊ)ÕÇd¤GŒÜ#›îâ#ßp×è ù‰ ù4^ãIƒé-†H»¨©j$ÝåG>ÚèA†LpO¨,Û# Ù±¨uGà¼)ö‰±QB ­.‡ç ü…%åü6§ÄdâúÓfÂ_ZL6—“YÇ¢ÉȪË—7xÆæ4n[NH‹u ²~àTÇY/Ÿ[غŠPµ!–\êªÄšJÓ׸—ºø­©ÒC“"m"€‚×¼#™œöô ým€ؘx&4/Iá±­0KÆ€³ (ùQD™ØÎW“çÛÄ ¡@žî½š(*âãUAëWÓŒM¦ðÕœ¬<µ@†Jì!¤buygÆ Ç •>ßÒØ©ŽÄ‹"ÊíÌ »'ÂA™ü¯Ì1磺kt9·–Óïnؼ/óΗíàêžÝqº»ÇçSù¦øÍÍ÷6K4ú‡æ^…¥Fðþë`KÇç²€iS¥ùþàÍÓz“oO…6?‹ ࣭]ç£}@qçꓯ{¹ãq¶- ëæ ÇH= QÒgLh€Ræ´N/?€å Ã;^bœ“Ç(§ 0¹(ƒmD©Hšm^*‹šÒÜÙãøèS·ú‚çÛS¨Óš\^+„ë\ ÷†¤4|>®+J½ y»”/€˜f¬#¯‹±AãíxÉBH]«ô!K-¦(W-†iŽ GO€ôÛm\{Eï0>›V|«-GG]C°û²ñ ¬ÅÞ¸;ºÕÅ•!œh°o]>íK[¢Aü'‚›H3*µT~´dA<|Aâ ™ciŒT;Üã²(Èê§&1Å¿µ9š§úÀWüy\CÿŸŠŠÊ.öövŽÎÿÜK¼¼¢X¼‰ÛƉۛl’ʲÂ6Â’‰ÛÖ” æZR™,ʼn ‹Msƒ™Ó²Ž“¦vkÝ›%ªˆõT¯4à ֑ ~˜dAÊED8ÕÀÀTaŸoÄ9ínn™U$¿˜ÝN2ÓífÜzF§|>½n êPo:ëq}lŒÜøžÝo¼…àé§ñ½‘ÕÛn)){”àùh‡½Žo™Þª rUñѳ“'0 o€{RvÓÃɆ—dï«DéZ‡}-öšÁ':oU9ßi8zÛ¸îÚÉ=x»¤i_ [Ç}[=>ø±Áu\ÇÁÐ̇;Yζá`íâçA[oÛ­;Œ=×-Bùe9oq6·ñ“ά¤½ZÇC™-ÚPqã^ÎÏ~{  ÝÅŽ»ƒf8Y88+°ˆL×2îe}hg0öLEÞ…f!}­n¤ðtË¡­ŠC-Gy«Al+ù)Þ‚ÌJP\4éhŽËhxºŒù"ñ¦wùNtåÍÁŒ%› ¥[5ÖŠI¡3–Χ4Uå±3¨‘ƒxýRì… ,˜ Ku{ñ*f »ÇGl$ZCÛ˜—glÅD?S× $Öª›ù¬ùfÇf[Ptu½´z}Švú¶bÆb£`‘4h(šŒÃvóDdö'û:ÉXÍ{¹ û3S•<›–ù¥‚ ‘ö$¦¶§ ¦qObÜ!dêR°—Ó¡çºE /®‹Î'ûоçr Æyiéc9ÝZl“XñKž ëík¶æÊzá‚0 ÎHx®^ë•u¼àò'$Yµ]ÅCìĽÒ¿Ô¼¹ΰqi>°Äœ~ EYÉ—Ê,±f±˜)s¾VˆñÓ¤Î|ú¢')ö[wÚí «N-¸À*gùþÊ µß€Džp ÓDzyi¦·t(F'­fìE·„÷§Cáþ}ˆ/~wÌûé"½lk‹&ê|Iýý#†m7d×Ìù Q®¦2˜Aº-á&ÅêѵòfÑe ™V!)Äz£Pçø=ÅvÏ*ÑMÖ墭™4iÙyÑÌhw–¢êE l= Šb!°Jû–¤-j{¢VµE‹eÉRÕR VŒªWÂke{~|…ÛïøŽû`üÄQ’õ”¯ŒøÉŠö°/T¯á*÷˜ønû¥Ð¾!äw¥þÙ;0ùýTGBEÞh=Ê׿­ØÄ´D<½C­ð¾“ýWk×}M°Ùý·#­ wA`` ´® T´O±œfèÞäiÿ ÉFb´_Ur‡5‘n®–úFÆä0Ö¡³|K­íê0çÙ+Š—Ê·ÜŸºýÔÏõµÐ4ÒÏ.öâC >Øì£ªÐ2ƒ¥ïÖË|Äs¦—î²}ìš9¯ ºnûp`v±tŸ’‚?\÷iÁìé¡E¸¡vQ—ÿÆÙQ¾u[ÿ½r)îç7¹ÑS2ÕÏîK ÔcÀ‚¯Ÿ¯Å•.ÂéqZ„¤‘mí“Êl·¨¢¥´MsE;W­Óü™¬nâ¶!W©²c¼TCº>‘Î3\±ÿ$8§ßë¬ÑTJñZéJDQ_{”rsDX¬.`¼äÄ×ÄSáEÞ,û™RÙзi»‹›‘øÌeÔ•o‘ nñ; «Õ@’­] '§M«+sñzý \I­Í6ù¸t¶$°. ÉJA)~¹ ’ªwâ|ñ–Xªƒ­>È’Gb²•1ÔmQß©¿Ôè!¢4}Ô*£–æa@»`âKÌïñ»q cèà'£Å›¥õ”eô(KËã³å¼'«€ÜL1Yçíž²zª‡]þ8‰éj6Ä;`¬Fh(Ã;å9+=¸ êÅ÷yñ+±h¡M¸¸’4G’\Uæ§ëäÐû™!9RÊÜ<îËŸ—™Ö²l²š¹¸¢Fd«XbÊX3-+´pU¶²('GÄì¶ZSòyvÍãÕ£Wêb»^W/²Ù+Åâ$‰8ôÙê2;ÖxõõQ™¶•Ø(¨kàXFø¼)žÉ{¨¿.iNôà¥#Ñ5,¢q?¹¨mx`lŸßŠô;3¾÷ìnM„uV“Z­h@/Õ«^•jùv›÷qy5–í_&j*q…äê@gp³F}¯'Ú!ˆ3Ö§­Ö©ÅN¯GÇýÛ‰íoUv¯ä«èÆŸQ;Lû€Î:t›Fô}[Zÿ²žþ…$ƒQæâ™MœF8;Ü NQT“"ÐQsèX ¡¯ÿ˜Î¨|¡0öìœQ+zdоž&Ë616IĤ(K§¶åd¾bÚ‚Qq~Õ/&DÊ¢Ã]îôês2&†]pÆnð§ö'ž®, í}˜³–ѳ&]HB?V´ƒ¨ïš¸èg-¤opî—'´4NÀçI5IlXf{9‰M>N]ÒH#¯*‰ZE†24þxlîËÔIoó¦/*ˆ\ëÄÄ÷Ž-]‰qä# 8Ó÷sÖ6ÍQÅ¿^3¤;àoe¤$ÔSynÑ"L”v$9Ââ£{›=Ò: ±@§-X9—w/È=OÓ$æÊÕ¹¬ºç¢=š5Ä/îÁ\^qþ¨s÷ kŸ$ç©€£Æåb¿©Ö¬É^Wð>2êÙ®© ãvÎÐJHÜ–Éi$P1…Ÿ˜•ÔÌTrO¯ÌÔšŸé›b¹RÔ<8|E·*±ô<’É£ ‡ª|œ=@¼ÑXŸ’TýS§S,Ï`ïW¢¦'Ò4‚ôÌ‹º„pµ‘ü w\Ïpè¹ìçÓ­J`eI;Í0sÞ4Ò¨yÝEótbD(YKj@xr¨yÈ€D*O‡:§€˜ñzÇ‚ô˜g£n™èâ«Ü„Ø+z¸Á-²=r;ÐÒ) )ìÉ—‰>^ýG¸öRÓ©W“ªÎ>î _tG7“2]¡íŸšc˜ü?t,_OÙvN—ïí°Ÿ ~G«2[ÜÜN1𽞯F%W¸ê#Ukb!¶•ît18΃@KH¥®:âѵØï-` ï%ëÛE‘8°«À†ñ_VG|ËY:ÿJKépÔ}Þ dvPÑt$CÜU0 )^›˜€ý¢d9Æ2_HÆmMæá¹TÛ1B¤ñðWÚiVŠ]†#"ÐùF‡hë Æ[€XB1`bHö±¾F~²—w{À¦AlH'&‚…þp›¦‘ÝD »¨K=§Öˆ¨g ¦Ê)¼dØv¬ž"ž6ÙrõÝÇtrÌè¨ `F11$]Xv¯(C’<ºçßwÞÆü°LlQC´¡¯¿Péú…ñ¯a/¼tE"ò1öòßÂ^[WÇ­¤KVû2Šö;†Öêx9ÀÆaˆŒæ{ Ñ´ 2¢9ž _)”Íê‚„nœÛðµÔX»' !„Eâ£TžM›dbËŸ´^Ò®„Ÿí‡<¿O£Ö$µfîo†Œì—“ì]ö›·Éß>ï`~´¯±Q¨ ÈmAQQ®ÆÃL¤F˜žPXÂ’“ŒõGC¥ø#,°P%A]“ t¢×,/‹¨R§5J§xŽã)·A«$Y)ö!s) ¤ë¡xÕs»Lø¼hõ/NâÜ c™‰Å­ÃèKÒ(ï5ÑÐE³GíµÚ‰°™†0Ò-½‚”-ɶ90±q,ÙÛ¦ýê ޶ùˆx,0j7+¢.Õe´9„"µhŸàâe¾ZãÆm9¤2Ü%Æš%Å{®Ÿjý—îÂW× ·d¾¥ßýi¡mGØIþ€Úî™ysÈCC‹Ui•'î?ô5tZð‚eÄ$ÖºvÁ-Ób*°*l×bL‹Ú,MUrKTû;Ýåi~¨Ü’wÑÊün zAóöë¥hkeªrÃw…ÃŽcˆ†ˆÛ‹ è¡e ‡"ó)Ý2ò¥w.ÁÊA÷DßPp„2 Û-¨T‚>™V¢å£e‚5¾ªô‹z“í;éí! »u/BÓF ¾°‡SPjž–%zKQ_”ˆö`LñÐZ_ïèlË2´l°„=µ¦•ÙÂEÙU<ÏÁÆ]«„&«]:ô¹+$«RrN,ià ]ìôzƒz©_!~QîWÜÞe ºK ô¢~âè)©¥¼6Dº.WE@‚©Ö Ù’83×»å"”Y}þ¹86u¥ö66¼»_c¿à¹-/C>GY6[TÔ<§¹—p‹ºá.B³eþ[½Ï%™ä êÔ”TÊc%ѸUÐfïÇ„Ð(™ú¯)á  ÞW}ÍÈÃS}E›†º&|÷”b~:¸+IvÎÞ„Ëaú‘³Rï…gŠôg¤&‡‰¬îh÷{h4ÜpõŸöŸ(Î:"/ûgá"Œ#LjÙ£ÒMÝר;X]Q&’lÈúÄxC[hÂf{ĺÂêE7À+¸¿0»oˆ$ÈMüÈg0°Iƒ&Uxçg—m!—Ä?AÔ‘È´ôı.AóÍä~ˆ ]Й|)èÒ°5˜£ã`‰8sr=Õê/Z<"7Ëc_Á莔hn¡æå[8áœ> ³”;€:È(Y.¢êÈ5Á“Iϧ(ã-r€ÃpNÍ]Kbr„rˆ’—îÏqh÷yQ,¤¹›$™£föÿ¸kÃ9AÎð­Gé¤@pÛ‡u=ä›xWëŠà]“f䋌~%ë¢2¢=~ð• ºXÞò&yV´²åÇÿÞ‰0§K†áæÇ&ÈÅËãÛ#b[ˆJ¶NPŸ–)‹õ &öi'&—pbeUê®ö3ÌÓthïÄ¢sTXO#ÏNÀÏÛ^×|Žõ4·Î^U¡³™¹AYR^ƒÄ÷ÛÕÕ«hÊ(]{0jU öº²êº Å+]ÏiŽdŸÝC„¨mÆçßfVRH)âæÿyÚùïûþÚÜMÿµO z€3覶yú`ï €qxM°§ ÷}¤7¿¸d®Ä‡‚ /YÌ¡í0äƒãú®kû[#&T˜áÀRݦZËá†Cw/âÉø½B™Ü¸’&±²úéŠ5¤ƒVsó‰ŽnÃ7$AÃV•§_ÜÙUæÊ„ŒÝ:ë%q$Y"¿ÏÀ·FžÁ]*åƒ)0á-ö+*²ìGИÐÝßùl˵R…ØqÉÿW+jlál`hmò—b)agmlâøÿ­ùóÚÂø§ÿ*aVÿS¬¶^§Ûƒ«†V*ÆÐ¿óîKK®·$ Ø-éÎ6M'íTVú‘nøØÿzË”³ž [T”‘&ë:›îÔs3õö<õùùô“Û 3m蓤¡ÍÆ „(Åz«¿!øú$n„F†4d‹¡hÖóç;lê%­ïÔ¶_eIg)qy†6,Š|QÂ;å õu[Ól\yp~Z¹4©n3‘ç$Ž?ƒsþh ¾äa.é£óÑ¥R䘈üe/jFb?V–N±ˆ Œ;.Ì„·âË€0»-õ‹Ÿ"—+«]GõkŸÏµ´Fx­ë@Æ|¦ëwèSevåÏ3Š×9úMéÞmVËü…‚ÂVðßms(yrRÞm ìHÓ1)4«Fš[JŒÀnŒbykiâÙ-NÞjœ<6GXÒÆ9ɉ:› ¡sÅ2áŒ`º ôknw¿Px|ƒÁ²ÁëÊi¾$êü9tØOè#cb‡K¨UÃÝÉBõ*¶\Pmš$§m¸!¾bNßykLÊ0Õ~å|åqÇI\MþˆË|!êo>¬c¼¸…]¾Êi…(ô„ùú–!ä@32¦ýµJ •*–r ëgº4…¡IÙ€'3ï•Ñes¯üØ<©×7‘<+á#ãhzÆ+Ë­ RblÕ&±ÓlËF·O§’<Ï,]OwÊ=€eìû±Œb,gŸÿ UŽ"ãœ,Ô]§ê}²RGïêÀûÌ#z?dY…Ó–~õ¤3˜ *?ŠH½¤ý‹ý_áåxÐ]Õû/ñÿ+¼ÿNíX[RýÏÚ’j\Þš¼€0©xö|Ú14Vßþ4sx VÅ…¡×~뛣ËúÕ-Ù/M2ª’‘ð[:´b†të™ëÙ9éfä_£§µ@m&C2øV+ý™!tšƒŒpܱ¸áÿ&á+<&š¥lýÝ®‰ã˜Ûàëi^¯P¯—3·–5ìv¼ÔE'¬tñ0zvÈô¶ƒ*ºd÷­u»ûPvŸ N=Ükvw £ÞÖôE/&Ã4K{½ľO9 ¼K\Èéž3°¹: ÒŠ/–H0"u>Âõ§¬úfr×à^'‘÷ÆÝðÃÚ’®ëæ¯Lá†MŽ-©h­¼¦³‹hÏÈÞ“–Ùd3~‹– ÂĚƘk¦©ì´iÕ¢vGdÑ}Æ´Ù¹³0Z¬Ify+‡‚``*t1}ƤÃh[!œun¡sÁJ¥WW÷­ðä5˜­9p5šªƒV¶ ÆÝŽ`œ¶ñº¯][ÿ|ÄË[í´šœ”ø¢#øq$ÚõJX”âûÈÝG9ðˆ£n‡ ¬Þ|e¶ÎŸqˆ&y˜¯å¦¤ÇÜZ‚í9;¸:ý¹¨*Û2çô£õTj$Îzš'êÞ\_U9'IBµ¢9ø0~#ôøx LÆ R—˜ÚGfgvjð}TÔ7ñ™CYÅ.I;H}ùää¨þNG²%óA®ß$ª0“çÙÃ#y§R¦.Ø{¿¿tÝç£=#™ñéŸÚÙK‘Åy¥T²É^+£2Kƒâi§:RºsÓ›©ìðŒ0>¡ü+Ë<ÀzåšXfÿòÒÿŠåÿ¬œäï8/GøÖ”ÝÁŒ ± ÊB“E°ZF­ïÐgÕ¶o&¼7ʨxKFå~)Ž´S7©Å Ø™¹¦¦ßž>6€L¶óèÂIlÍÓVã–ëýDñ8·–âû0ÚŠ kóûâö¤Þ`#U'7™[XÜÚHùÀÊw!íÓ8±g;å­ÉF˜{â¼Æ¿ä‹Ý¢Í¢Ã¢¨ŠGT?ëê¼nv]';.7¶iö \„Žm¸‡¬c»áeRÏêÝ4y#ƳÀŽ Pë9x B:î`ëJ2¯1®Úˆ÷®¢Çò®¢ÿjl¡v,íSN¤Ü±l¿ùx»F8w)¤Vá)¯VÍôÎͤK…{°è¦¤A{ÂoU %ô2e,#.F»còÎãÙè!eËŠ+zÔÛЂ+R`aÌGÄæRÜè+"ÒÊAU‚3 îç¹îü1+Isåéš[‚ï„-žâ ýWœc†› î¶É[=‚ BfÔš³¡Æ©³™IÇè.8Gj“&!åÞûÓŒ…wD'f1œƒÆÂe‰"Œ·NѲì»ú`Á–/AÜ·è*Û€_I—qh›®±€­øßãn×o ¨6q$´ˆ~!Œ¸$ †$¥ r§ 8E£gµ}Åòa>aÞt œr`î‚V%bôáMç5ìù:߈(ELe/O¸ÍMßÈvãÝU?Ã4Â}úƒg19ýžÑ ÏŽ¬ŠîؤwᮋÇôÁW!¹’jŒØ¨8ðDÍІ™©ì¾%¦½ý­¶dsBIÜøÈlÿ ]L„Í lÍLŒÿ“uùŸ¾Nè)`*ˆŠJæ0 OH½ú2Mß5 ÿZ—eZ…5¦Ø:••ÿD±C¯ë&]Ì“ÔJ‚ÈãWÙ£œ§3陫«7@Tîúƒ#Æïö“IÁÑSkiÃ68œSOÄ‘E¸êT¦iwŸæ³² Û'=ÁR€áÌkt;¾ü¯¼5ÃôüSÅï Oi5¯§Ò¬µbpý G`JÖM/D;Oqj5žñ³ƒØ± ¼üSåÙß 0kïêh+¸l¢‡ßqü­ù0"ØÛ`g:’ˆjBx$AñvÎrÆm~Ö°‡Ãmk¡²‰|àE¬3Ÿ'€t-Cïâ]ò^9®.³”‰ýÃßéÙõMû:DäÌvÅ-¸vj»±ç‚uF”ùü¥P#©ÊØçÉ2¼CÖ92ÙÏc-iì3} ˆ/{L)Ï|#c”ÔsQ%‰åi´7eɈ¹'‘Äðì³9rxt‡Ñ ´j·Õ~Þ-³×Z„þ¸)·®\ZËDj 4Rövù’Æd©`ƒ" OŸGeµ#÷ý­{SL[èäŒÆ‹á!L‘½2€R÷"VR×ãÝÚ¯¤¼+²H3k+u1”|¹´K°pd¥^§}Ätµa¤_}>ÀÊ ç…¿¾)Ð^pPß[à¬SM3?¶N~èÇŽu±›Ñ-rHTƒ¹‹é˜Fk¬8›ž[v‚§I42½‹9|ù=ÀÑNÑÿxÆq¬ ˆÓÔÏu8Gñ|6ð´ejÉdð—%fLˆ%¹Ç„+X™—Ê "‡åŠE 4KÚa a|ÆùW¦‹'% þ0­ö‡iÕÿ-Óÿ“õ^¡?BŠ:8ÂFðÚ;:"#.D,Q¹ù¢±[{ƒxTÇ©•ôÉ,½ì5“ÿ£0ÊI;I ú¯pcûO¸±nFöpxšjD³µ_'ŠžÊ:eNq‘6œƒ\s6¦ï jXVXQ0³§$áÜ„jnCIËÜBꉫ§ôXœN£u¼`ãQ¦`…à»û“0N¥þîïm¼mžCƒ=lÁ3Ëþ¶â1XšØèzfÿ#P\·a—{j,ƒ•­m©!c@çg 1Ò¨.&ZB'ÀüP1¬ìäýè··=“ö]Iû…'S¿ZX¬ð.Ú|d ½”8󜲸GçÏÞíÒ.æ½á§EÊÇõî­G¨E€•5”8ØBÌjl´)æs€Æ}ŸânŸáœ^Hö’ }¼å{\*-©?¸˜"+p`~®3šµòOD\ØÁŸ¾zõ‰¯ñÀÕuò|ûÖô)yý}D5LúRkµ8mþ™°V¿Û™`ßüÃ>^Î :\”tR¹¯ÚŒ5ÑÛï;jÁ+–Ë@‡:s (v+oQžäcoôÁÑ:Õ ÷ (`MÔ)²Ëk¸óü`—w㿊 ö$)XôXô€.ŠǤây#µF-ÔK}"~yº`TuÜ~+w›8e©6bñôëd ¾FšðÉÊש9•5?2!-‹êÁ¹1èñ/!zˆÜÿ1UyáU„¾Fžõ–¯cžË˜5À]óÀ›:°ã3”(–ðýl¨#Lšjß-{´(âÓ4d OóÚ?7j,ýá9 îÏZýÿÀô?‡Ênª£ˆcþ®²^«)PDER$”¸UÒÖb (‰Î·(lîú†>h»µýݼ[U«ùÙ°öôv\iö›<§ —Üï²_æL8°ùÔ7Óž·“ÎY;×ß_7±½@M­L,{Ê|E¨K{QÒL|Ê “Þ¯Aº‡ŸÔߪa–Ðïñ'ƒ~À!ý@!¨°Âê VLLY1TqTej#.`›qp} Ôe4€¥œ5^4~8Y1 ýçÓ@¶ï¢@­&[û¦Án&[‰ ë¥&ߦ«Q:óp„ÍÒ çµóFà5ë£L7§Rꌜx¬7WdÓnN4¬5˜CÖú˜TY‡;uG©Q:ihõ¬|ôĉ| [O?“?“‚öŠ‡ÂØJD™‹h¨º¬ä„0¸ŒJ¹;ä]: ýÛ ¸3âM‘áINÌ—f°æi§™¦ê cØPñê! ³A: ŸÌÒnošÒ±ôWÞ!ñ#Ý5\C²Ñ¡¯œÜIlp¡ÑÜùt=í0P™<[”Òr˜3 NMAàô¢…š‹ú!(ˆ±h'È-tR!m ò¿!¥ÅѬ£襬NÓæt¦3Ä›?väs’$±„|¼žWñäãTq³oÌVéúÝç0,v ¤Ì¬z”Ìb­”³O4Y³1÷3“ï«) %ĈFÏèøéÚ” úÿÊTC¤l¬5…c,¥íê@å™$qZ¯²P¤+Š<ʈ>M}ê¦ÓHUhÇܤ8¤Õì%3#¥ÐÊ€ÖÕÒÖ&µ¶€õr±4åO½ë\&†Á—„õÊÒeïÑÈQgï-œÂr^\ ¹œEI(âŸË™9ª¬&™ÎJ6ÕáªÕ|‚~ù>€V¹ B¿Ï7#¹öÅåä¼!Ú!Kèœ×!”b¢EÅ×Lj¦wàáÚENHƒÍF„ÍÖ0W‡„Ъ’5̉•HÕ3°J…5JÕÓBu¦ñÏØ»ò€Û›þMþ®0è5ÓPÀœTBéÅ÷é“h?:ž´ :Â1»·'º”Úèõ¤^4Hâ¬eÖ÷Økgd âõKÍCã­›âGñ  î‰Nƒ—E*$P ja}1 f¥33¢OmX‘®-F¬-;,²™jƒã‡|=ð·æøc…Í÷ÆJŽ 7Ò+(B¶R;O «·’‘Öl±«É3”ö¼µ½=ÈÌJ€"@tÛµ4x´Á,d™) %Áö;£ºÆmY+v7b¹iú~V¡YAžÙ¡s”ÅR~¬f ,}á·„bC‚άVƒž¢÷m®}Ós³Ä ³Õim«ûË™Šßò²ÄÏ'€Š»SwšÎê­kФ(ÎÙäœ8!ÕtGòö Žð•B¦ðÀ‡ŸžfW‡ñr‹ñ²nÓýbÔ^ò‚…K\™HS“¼ÿ)‹fè! •ˆ¿ç«=‹²abŒDØ~Q¥ÀýŸÜg< ;ñKÐCÁ#ÜM‰^áÖ÷`J(;`‡)ò‰¾Þ ðÛx—ùU þ#àøÃ´Þšvºq%øÞT™e›'”v­‡²ì¡L‚uÖàò‘§åNòØÙ¾Ó«ˆªWoxÛ¼7CÞUNzæÁˆ'öèyç YA›lþ.¡ÝÍÑV!ÄŸ’»€Þ2‚\lܰ‘Ì/»¼hU(EE™ư|üqáI£2-c82gI6Ô„ Ùœ,nÎ’%!È«i­ÖÑ¥;ßOipÁ£û¸4õäâ`JêéiÛOýEé$òÅŒŒÀÜâß´3¯Àz|(5èÊ"-Éî¾Ç1NgÅîuúûBÚ2áÀ(¿ø©Òûét7¶m-Ü®¥JÆvµfvï­ÀzÙÒ©²ñNC¾Ù{«¤z÷ÇËË?»¯]»×jJº<˜çI`ë}ÿô&„áh÷<ï+”%| gú`Z {tÆÖÁù¡ ù›ΜPK–E¨)Â<É<Μšêïƒ<£ÊzbÎÀ€ªÿ›ãÐÿ›€šüMì'Ô,³åöØ™XŒÁ¶ùF–Ôš(qüòÏ,÷¾yûPZÊæ GJ—w¡Ê½§˜“ŒÉ ">oQr“ˆ.³c¸ÏñQ˜‰Wíº«ˆB ±P*Þ]Ña#s]îm"ázŒsó8ïôœo·íÙ zÍÆ\áâØE{ÿ‡°þØ”}ÈŒâöÞøJ„¶‘Õlp¼©Öd¬U ÝÊò´sù&ìÝ{ÂúºÈ²R43“‡m¼ÃO‹ðæt^Ø{xÝ:÷Œ#¨’pø×FÚ\êéêû5¬&!BþA{ålaW5²¡Ë[ ³90ï ÒM(Cº4pö¬¡_ñùëí^ÞÔô²L,{ø3g1}q4”÷:¦|‡†‹JD ꪢî|ûJ¡¥P ¶Æ@pƒižl]µ)Qïj 3-{6§Å9š‰"[§Q ’ÁE ]û1lídݤۄ TJ“ôR7%'q'#ûâÊ‚Wµks¯H[§†§Œ3 ‚JÛܵ<‰µt` Î3t UÍÇÏÈåò²”óhX++(ÉÅu ôè(ˆðI0ÿ¦Y-‹e цªð÷`t¨Z w´rØ J“6똿ôK÷–Ó/¥ºJö\ºMÕ)ÝQì(ÏkƒZѺÝÐós [öTЦ,T2s4¡w?`©-ï6u§LƒC†ðÙkUU¦\]Yˆ§U™+W8To¿ñ¡ŠCó¡³é…Ë“xWì1{×|ÿàÒ|)ÐûçJ¥ùÒm Àô…Ò£xEÖ“|ÕêguU«rˆ¡\‹æ…Ž9àI–T~‚¼0˜V£^OU¼åõU¸%ö5亵î*,y-R[Wd—:ñá!Îj|ýÕÊ·¬pÓÈý+£²ÎÃ%_›&Û nÖGX=W(‹n*N#·Òð.gx‡¯l©1BñSs„"û*ÞRû&Ú µ)¨Ùã´&€ÏƒaãÑ_[_¨m-µéœþºO=Ò‡û¸^"Ìq¥Âwžš€Wu:\ÔÇC¡à²ÊpE‰ø.ØPºá»"nc)gG¦Ç3ˆVöÕHØÞ·Â×[Èèµ!>2…˃ yGöö=ÌÄ€Lhà-×Ð)çš'.ÂXï1.áZìÅ}¢Tj’Yí%ž/ÙÖ”¨¶uÄLfÊßßÝ‘;êÒï ʵªÛÀ¡R.¯°yt]êÍkf—yÅ”üè«[æa=I^ þ“7žB&×ç0ËDv"iŸ}þ˜Õ‡ó):?,G3˜¿±X!Òâý‚ Óãž>3Xª´`•ú¤}ì%ÙqBþyç®AEìŒ7ªófeÁís14u6Ê4o. ´² ¸¶fVÄßNžûÁöEëô~ì>k„)'P¾üä|W轕méˆÅQN5Úä:¤dÊOóͱîFó^à‘ä½ù°)2Y"ꀑ…¦”äúOµOÉÅÈ™}ÿÞ:Šqp`ë¼è4î™ùϧπäÓ9¬k¾`U”^ÃcvóÒl&:|Hgω¶#z×Üʶ+<ư…Ö4ˆ‘–›6V%X¾ÕógULdg«Ï¶Mi} ˜Ý® !²d«Âس‚þsÂæÇØ8#°-C ªí(*™þ¾ÜÔÜè-ÒVt©ýÞwÞ¥WT o˜ëæ`¿5‘,vCÿv,²–Ä ó #ˆ(Š€q ×2`å)Wƒ ëŽô¦»]¡ý4ÉŒyâ2ì¾À&äþ°8½ˆÝa—Q`"¥OAêÃ{#VAVÂy³gGŽž<1n"Unàƒr%^+V!"¶0ã¨J·èœ;J !Ðܱ»<÷gU'nMUô˜\`n6Oðê$T¢$›À 2“<Û‡9×®MÛÛp‡ð­1lj^Íg3w3Wu¡QùIˆÿ~hûJˆ«æ`ö®5‘n¨ ‚öem£,p”ŒþlOû¸Þ@RÖH¨Cû18ׇm£®uic †(Õ’‰‘{•:riÅ‘>”5Úû,³B&Yº( SìÉ*ÚFª›oˆ87Ð…©xŽ·]ˆJšh–øA'&:·¹|ïÙYÒ¤ ¿Rù ¿L óW+v}ó æH‡ª_útÿ66ð((úO2)þß|쿊ˆxØØXý»Œú÷îG«ó¶ÒúTE‚‰ A@+Õ¡žQ’h&¨È€J¾ºwv/‘Nn›¾¤$é™éé³0ú2߉c™ÙÁ*X7p¿0žN¥§gïþèùbÙÆ”ìÚK#aHà¸&g=ã6ø* ¢“Æ„8ì üJ‚©>a†I»¾ƒ¶TÜÆx†0ÓZ§hè¡'«ÞZ5ÝúšïófQåî ‡L‹#X6,,:zHo3©BU—ÖSv &ãQRT^¾BQëV‘WnlÍ«Nh9šp¾QšÝ¥0ö9„»¡’…dJ"Â<’{²#†ÓQö¼Œvi¤çü5ÂÊùŒš§‹V™ïV£X•ªÖO&Í…ÑêÉ–4c˜ë4§êX›vÀ7.Ü¡Æá¯ËåÛ¦-̳½Àý¼1,™áçB¥;qTî\Í÷2d›9‹þ@ÉDÓiA¤»4dm¥f™iæuaãþWKŽ™®˜*d3V!«WížB¨øqBá]¬™é‘P/«}:\ÎOìΜoD”ŸÈ/Ýæ¦¸…OѾºVwx™E–ôVS;”khæD\ŽQm"Ö°ßZ‚øÖ¼ËÍBòxõ€_»Kyä¥fqøC¶?úÿƒÿ5ûýŸ£Rýª¤Ä¡° hf°Ï©i åšÿp ë™[Ôa’aëVVü‹4ï]dï? wñ1÷¢3›%­ò¹_òmuº-_ÙoÚ‚@8r ƒ@Ø£‘+vd –ÞŸKo<°B{"8b*S—2Ç£jà &© oeoäw¤Nã­gžÞ¤OmzÉŽ‹ƒöE5Ú_Ñú]~#Þ„âͦ½#2kº¦èÚÚ.›Ö3žy6ªm£éËCÚ5_ñb¼Öà³F3^Ð6\ðš\Œ|ÿº`$jÁ2mXGMÜHÕ§¨|¬|ÅßÚ'¯¡/+x÷ ·ËʓՔk‰)SÞÞ}»¿~¦¨[føsWªíwÍMt¾ oŽçñ×T—æ ®ËcÎþ Ps•C²±× NpËá7pIõr–þáHq0|ˆô&`Q&™äúHhö@Vw¢ÌÝ2ÝoÉÞyZn>…ˆ%˜W·Â[Ÿ×"A•*ÔßÝqzÈ—ž™ÿå”d£Øÿ{øN‰íÎ<¥ðŵ0b$ÃÊ©4S÷[æF `ÿL‚DZ¤YG°Iú1^‰zÌ JÏ@E’‚A3I˨cû&¢  £ÛèÔ NG\Ñ-œOnŒ}’¥9Ï ú¼“Y¥ $ò¸;XÁv£Ì"ª«€âþÿ˜#¼Në÷‰nÊOâü{n¡k@-º!.\äØO°4ÞÙ¶/ØÑX ¬^ŒÆÅã'¤–ñlÎB¨Ó”‘y¨YïÝy€ ʤ‡d¯[$Ò¹ÅOñ<˜Íˆ/ÎrEVC|ì0Fl€A,ôˆêª63eb¶ã³6‹ë{óYyîè„¿Â\—\r¤þAµÇTËü/PýßOm¨ù/\Ûu2b¢¢‰cÒ̈«þ H—jH(6"•êÛsáû£í6M|8/ç8ùh{ÊßÔ{6 Е†Fœ«ßÙœ¯xž6Ú½ýýú…ÕC*çbL„À…]ÏÁœ0DnWÏvà>&F4OÙÁlL«Á)†F迌Œ¿±UŠ|—k+lý]#pdWB²B*ì4zPë!ÇœÁö±PÂôª&OÓ™]ÃáFG¿’¥pyŸææ•Åî°ØÑ’Z·oèaš7¯·¼Z¬ÌÐÙuz»æLi‘/cXã4T(Ù/}¤|$çÖg«3,t÷AŸ“?õ¡sYþÌÕþ#ݼ xHÙÓ—QS…>Õý˜¨E`Ìú1j Ù9d‰À],Éð|Â"(y\T¸½èÌ>ªG÷ ?°_¦–vªŽ ˰ÇÛ+>!Úª¨âDD'qÙwª­Þ ;Î&¨VŠ”éZÕi¢i¼Z"çýñÐf $r‡õÂò.ÑŸkrÀyB¤×l‹ƒ¡ Ã&¦ü~+tlXL6qãÉ_f•ÃDŽۛ_¤MYåb’kSœ_WsßQ£Z&9‰ÑÞ:ﺺÖÕʽHòçû>„·càr–æÍ ǯنykô…Qè•||Tl¸£ï/ª)ô­)Ù†ÝÁCNÞl„$-¤äÑÙܩܪ% Ú,–O… W`í±£uB£ þbç5íÔÛN`Ÿàž¥Šb?µãEw9‰´bÒ&LcéÚ—æB3ìߨºó­é>>5œ¸KùI–n?‡,,y“o¦qGŽ ñ @î*=„e‰˜äÁ+x?¤7,“§5J8èѵI:j Ÿ™Ÿ|ùým¢C˜Ã?ò˜äÐ/ÿ¿EÿŸëùg]Ã÷êñÒ](Hšï„uÏ,,jÉð¿2ÀU6®˜Fß4y™üÇ·iâbüÏÝlÔUðŸÁÃæ<õ”s5±úòø>o¦á¸ÞG£;ÖÛçͦ¥;Ä¥?¤ÏŒÂ–¡Ö‘*Læö%Ïð¦ÛrÿæD錴‡—ôRÓâ4À¹ðv¹líÐfd)¾jÇ<ÀxÖÈ„4xâ"ïwèWsjéÜLìí°ðlN²޽Î$u˜ôòg+1è é_x×£hÕ+£éªõ™9ƒdEÔ3HÕ¶eœc•˜(>‰dn Nò&ÔÛFÉÂ%»¿‘—é)`ÿŽ•C‡/Û» RdxTê Àw5°\—ah k£RͲ´•–”Kнd™ ÀŸŒwU+u*¬ü4¬yÙìI¯¥™]AçÀ04†Eà´AD/Z=w!¡º­+žûµ*ó^6É\oü…µÍ¨zŠÙÈÈ Ô‚Ý´¶ ½ÌÚf·m·Ö* û¨ALòM@žJ2U鹕~ ÎÃCªba!…â¶DYî®dk}Ž]b:Ô[Òh}ÁÍbm];ÚZ$ïY««\ ¸8‚ 0 øAÆ±Ž†ùjzãúCW°ŸXMâB͵ÄmD7A¦¡i3Ìó 7©½ƒ©çøÇ œ˜'‘xñàH Ã&Ûkàúš:ÂZÝÝ”¾2ì’K*‹`?QVyŸîX˜*"½ûÅ­O"Ïç=rIâþÅBü'ºx3Yã àG îÈ!W*ÚõNÑUÑ1MvÄî La™="†ÐßBʹÙ?p~üzéÿ,ðûo½ô*¹z« Î5D³ßg¨JC%LbfÊbi2éY19bŸ,»°ŽIÖõó¯ÒïZ”ÚE(CæþÉ7SØkÊÌ,Y[ÞÓíÎÓÛþ~¿ ëCq(K¸c؉ð4Yú#°ª3Gö” ¥ù9 ñ©™M6¾ä†+F8üèuhZÛ¥Ú¸i·á £½7qNž–P ^NDm‡zÓŸ¡e+­×ˆÓHçÌçïߣҜߥuªšÙ…‰¬ÒJ½ðª÷/D|úqcHW’ŒfÞqSëÎí·à£õœ“a_ÍÉãW4êP%²ÜE{S#ýõ¾«&I>TÓ¦BͶD,opYkƒÔ©y>0Å"R:áÖP\ÆßI9 „óR¦xÕO×_KYYæ2W/N‡=u šÍQÝ8éXݰ FÜ<%÷S°hèåÊœ)0EO¬l-ŬŠT_B™»¦‘Ìaó¬æJwµ(©Ï,ù¾ÆÒ/Ï’Ä…¢SF!‹õŸ3;õ™GœFÝË×\Šó{½£Ç, k†=Ü, XP®…7¬æÝªÙSíuИMÔ¿kpˆjN8æá'¢º$òLjˮ9.LÝ;n˨ÖöIfЮE5Ð¥‰«ú$[Lú¼‘Ø3öï}db÷†¾ju)~K¢6ïs¡B¸–™@ªú]‡Rð~VœnI‹h Ò…1q™t»È~æ~©í j‹* cN«„š—z7Ó¾Alë•<ˈ. ‰>…ç÷ÍǦéÖ&^ÞŽ¯èl4>÷ßîw÷‰éG{3,Žj´qí³¶]ý¶ ÇÑ““´>yzã=Ì¿â¥Õ—¿©ó¶ý‚ÿ÷W.ÿ/iì-¼€µY©ýÒV@ÜÐ\ O¯\¥¨.¨c ÍœjU3~¦×ѹÓÿÊÃûš‹Ì„'ø"sÈÌZ7õ,É“ëñ)"€ÉûrË{ªýè×Ïvÿ»ä*~b`‘µ•ül RÂJi#´¯°ÌÁ‹G4’£à©5wöЫLïãƒWé®*Ä~¼iŽ„ñPè}£Å»V셡ͼf—„TEò…êˆTÙµÄ%AÚÑÑOVïÁýŠR³ödYìB7#Çg»Öd¼±<ßQÇfQÔ:¹),ûÄÉ"Ÿ¦­wéYj|uÆE)Ÿ×ÙAõøMçÖ-8öû€ÞÜŠ@Ç*£»„¤§=ElPQëÑY«0n3’9ÉŽé…˜WÛ /ÓÎYS„'SRÄŠOý†¥¿'A/zçqÔ1ˆ^LMV$¥àª §a¥foH9•2ìwZÄ9_%>’c3[6ŸrÝ©&4Å^ÛžS³õ$â©VÜa¨3'ÇïxPj.~Ë»^o{X‹cØÉAjç„`BZ!`ûôºËB…þ3®©Cœ„ +sßCk­™hŒŸTšÉÀktÜ«8@¹ýÑ2zPvVG…fŽD¢Žb\WÄ“ߨ¤Úésuµ½vËî»»ä¨œÇ á¦»À(AIÉATª ¿xVÁ4ê—( $m(G\BÃcÈ}ƒegÿˆ >ƒ.ójÚß媭¶ET´Ug°ó!§’nùkgeÆiv°­_]»ç1‚÷r™ YS€ã"®ÈÌ}ë0,Ù¤øÆ¹"á“2¯«(¢æ/sF¢× }y?ú–iY—ÉìñîÄò©Åû€`ƒnꄘ»!öÅïwJ jͽ]†V=¨ “¡†ŠFk—ž›Š&& ’ný¸/ž(OΔPM+úlðÿÈ ¼o'·BÅ1Õ &÷ÿ%ƒÆöN¦L];øÏÄ-¹ÐËó¯oþ´¨é(àKbþÂÁN¥ DŽA_£d¤ˆ±•㜬a ‰XéøÒ7HSPÓ¬R¿Ôå6 'æ;ruì½h^B^³ð!õóΦ6!Ú^y:®;•ý-W<æ‡q?ü~cõ˜úí‘׺àh8È»nÄ÷ãðvhàI¸l ”Çêæ™kwܨ.‡ô€/oÄ&á5HSñôË5T©'Ú[•]­`Š8¸æ¤\¶ Îæ§ÔoÁÐ≰éúä6¦™Òåí$ÍYMúˆHÞ~àdTì~û¾4òÒÀ8EVhs¤û=Q$èË"C<6<3$þQЂcƒU:sR4­Ç€C%’â*ç5!T”L ¨V…Õ‰7¤o‡z˜4’Û2«±2j~1×/ŸM ð5ûŒ!p®3@¦ ÝÎ…°«»Œš¥vù§Í2±Xû©*l×\Ž*ÞÌT¨$ÞË¡òKö® Mê–S#朮4ÛxÛ‚ ÞÍÆÂ!›Qé« ¥ ™A)T™‘ø¯ßš¦’Qå‚Ã`ma‡9Žž#DZL£šKÊÌQ̪]ûºgÑV㪵³0`Ä7‰ü_sÓ»]Ö=%¿+ÉöiÿJy*ìhc³)ɶ̺¢ÌŸúS“¾Ây…Ï8çŠ%{a¾~±‡}GC˦Äm!¨Ij üà¸À¸:wæãNXÍÅ÷ ƒ\ßgC‹ÔÝßgœ…”›© @Æ”ö‹û݇nÊ-®%—ôH”8(:æKTwMHTiÊý¬nêÊ%EgwÊ€|:òYÖL³uG|D©¿ML7#ž@±"á¾ÑèÉÙG¦ék£~¤Ø»?Ä_µYdæ L Œç§%ÿò®Î40$1? 9ÔØµ-kЊD`ÅΚ k"óP«ù1ß6ȳêÛ·| ë7µS¬¶Qlß2êZj¾Œó”¼MŸ<ýf{Ÿ™çÃ@$!ß½Ù71s;œÊÙþþÄõ4µýñþÈóÜ&Œ( Hu “É>˜ Gás˜ŠŠGY¿QFâ`òvœ ÓøG«t—Ç& .üGì[|O<Ž´`‘ÓhrH3JÑÌóp:ÎQ;rÎx¬,³EH;ôÈT[=\+J–ãBØ£=¥‡ól˜üˆLz²CD/±£<‘4w¦¥ǺÒ¢Q¼7Òi§Ë`«Z–p¤µ„2Û¢Nœ3¿Q§y ¹ªžëyxQ1Y°Ìkøž¦ö†ëÂ×µZ&+¼ì‰ò_á,¦"Ç‘ ±ˆñÉ ”pµ#µÈ••;Q 6Ô+ ¨³‡™Òý¸j„ ½Š¾ŠlìG¨@kF„ÚqveíŽ&ÓôÞySJ8[U¶…t>"ªx]êÉBºÔ¡8T¸ïY‘Ÿäʆ]bLÜ9 ̸5Eö%8n¶æP‡ÎUÉÚV&íŽT˜dUضu_aCm~JÂÕ©ÓdD Ž:t…¬ ´²u\¨ž§A‰4Írˆ6— æ'Ä=½è®­P 2ÄÝ!¸ý4ß‚Î?@?5ÓF]yšw_¼´R¶å;B­Ë3œgM!ýü2’dºÒXɰ_m”ÿuhñÂèú ßDÖC´ÏÎ^Æ#êM—9¨s'Ôšl¨'î†cï–8•MìÅ>•0”(l{ôFÑŰGx¯¢«±‡Ú?/KÊ¢K¨¢ÂC2ÎÊ€Ûy]ýt-H,@¶áCM¢§aâR…X ÆdÞëØù¦»7°€>Ã!Ù‚)ð™9ّð<Û,ð õ&©n´-–Ž˜Íæ’UOÀòÜGW|Y9‰bÀ~¶(Fªž·†|#ùN0e6v¤p¼ñÂH²ÓPÞ»áðjêšÆõ"ÚÙ‚Ò(Œ}FÀ5Ø¥Û5â±?̡޳öéŸQœÈ-²£ŒØv“aæÈOP‘/)ãÉêo§™¼„yÆþæá¬3äž¾«Ø]Æ,ÄÌpZ¹Cwo6“ðzCšÕPøÝ ¦ kueA±>¼$Ï2¤×2 -&'[†[ºÜeyÞVìhuÉ:ÚfÂáèô*w4Ý4òµ³ËPÖðz‚ØÎ™üý¦Î„…ZMmèKÞ¸ÍǤ¾½Ý8F’aÕúõº²Ôåu³ëM7*ÔEš^§£Z¯F¦%v…þPÊá‚ñ4æ,B>ÄÞ²‘§wt¯€³ë?áIö›Ú*ö_¡Ú{ÎFûæìrE™ffõ ýlqChèëǃI„j¶øU~ƒ*Xéóüœ7)eG ž&ØŸ>RqÙˆ[§>sGÙ"¸ïg_\hŠ^`I©^/ïО:Ä ”Á¼ct&µE|ª,èWÅÒ£5Þ8 éB­í7q†Ðr…”E¡¢)×Û/ µÓØBÁ8–@Y’v šº(iˆÛ7È'TºŸe¤íŒò‹ˆ(G•q6’8R’~¨a+×Fåå/~÷Û¨œHîYøâ¼ˆ¦‚ CiñX˜¯«ÅͰö©9¼éÄ%köùoÙ$:‡››Ò?ºÂŸ#öoMþ5‹þ¯Õ„ê'Êø’¨¿¡ÕÑe™Y ñaP! ¤ ±©m$c1$bÐÀyâÔFéÁÆÛõI=?}LÂq×Fú+§pŒϱ¡‹@W|.©\͵÷z{î(kñÿx;2“¸…u¿É )i@õ‹Án¶á|Q€eÚó‹O#ýõò¥Ó¿<YX‚7wt꬛i?ŽýâÁ÷üè[ûƒ žëñS˜â™ý\+{æ)hèZ†ÖØ–:Öœ–‡£7óŒº6S{á—Þr˃Úô":¢¼NåN‚›ù"¡¹¡Þ¦2 ââÊDu­5nZà K¨±LâÙŒlï á¼Þ¼®@ÿÏ5YÞa¿ÄÏxå´Í¾NSÉbêÎ%v.%ÛYYÚ«5á,¨Ç;Œ•%Zù@ãorl5¶ž›£4¸ãKÉ2"OjlÖœ¡ÇÓ°yˆ ó…¤È "½+À6 ²àˆÄ/µê.AÑ…Ün#O½¬ójØTIa#‰üd»‡4‚I·¦¤¢Û~ÔAVI<úÃó¾¬!CQ¸5?OSO¤)ªeF¤FœHÅ€¸ÐET‘‹Ôv¢7x¢7ÁÍ_5s3jÚÐ2‹ö=¶nÏ£9 î¼\ ê`¹È„“ ¾£ñLÒŠN'Ȭ¡Ëk×›¬§2ƒyâZÏ´³Sæ ×EÃzE¬y-Ö¶Å ƒwn«r)‹›è¸’–š6šiz•zJ!N{Rv€²}­Ñ¤n&>±LÜ¿J¢ë®[¢ïÙ²÷â®W$e–%‡t¤F<¢íÉ}èöø|¦™o?¼2 ¾éË`Åܱm*SšW¦ŸW^âo|]Ü‘Î#Ô,™×gÍÇ󨄷Pƒ¦1_µdqñQÚú-,ˆžXy„ʪ»é†`ÝÚ2Y÷ˆã’8Ýu8e™•kg½ …ÈeÅy¥Ǽ[XËXAý@¥QÒ‘©¿Z “&W¤l:àãÄäœ`/_lÑÒ‚›¸W°7×å Öµ”*"d”k¿¶¤ô«ðkp%[¶ô¸êƒ2-ó;*íxUðbÆbO½’½ÐtvRÜ•;ªV+I¼ã-&Q} â<Úµúåú©HðêÂØ£qZ¹ 9æÍ³.b\Õ³.Ÿ'¤]bضe©!ÔŠsÕ îpR´ãžú$ƽ’ ¤:Äü>ì@Ád§Å”îš¿xJ\®¡ƒægÑ»}Ÿ´ûqž-_¸t=À…H:׆Š®ë>Kq‡²Wðç_—…§bbÊ©ˆX¾NÎ}6À¤”®ÊC \ôá?—qÊ»·NÆKÓÆ7yã%™óÇà ÏÖã’¿sZ³ôrrê»ñ­ÏS™þ©³%JV²z¯»bAΊ?vóu[/R‘×}g·gr #nA¼ ¯ÞzGù«î÷=Ç…3Gãý·º÷Ï4‹ÐÅTÕÒö¯ê—£q採†úa›e–d*Kò¥  ^1þ7ª™ÁP'2ÿ€$&%vÝ%Énõd¢‚Û}ý™÷¬®*¦´C€DÀ#yƒ@ükæÅ›êœÒÒ]å=>cÕûhêmjã×ÍÓpͨ*tmÔÇ56¢G À=aOÒGsØãÊ.ÊËÌÐsÊE4ŠŒf9?¨_ !ßHSL¬–î5µŸZ…7˜ZÐÅÂØ·"+¦Û§L€‘`X Ö’"õÂÜûì—Ä=µMEAí$/H±Ãž‹y“^õ,©ªƒ_‡Ÿðú;œƒH¦tBQ5ÆdF%ÚŠ‡º¨ùÍ–ê~'¹ÆþO]ÌÔ¥v­5•Y:¼&Î<ô9]Ð0CÌë|ÏQd‹qsá‚\;h+š¢¨@<{<6¼œèÌP|÷} 6§îdYÞÖÝÊGS6d¸„vl޽2µ!'PIeC_CfDÑ\]h»ï–N¿YIJ5üAkö)†í[bt9;zÊ:êŒÊÀø£°n+§¥;ç}\ÆiqSySv“JŸ´é@.f}a5ù'åm±¨õSe(~²]-4sHU*¾4öXÏ"‚,Õˆ7h¸9üb?¿Oİ»3­Ñ• sª8M³¬ð'@Ë)nÖM¬'³0×,8ïêF—+¾“]g3•½Ñ d˜{¯/*OIã"ž”ämŠEPĤY!&¶^ë\CO£Uã#7m“|C›6/§‘Óà }†ÛÌb!)5€Àª? KªŸz¯_ÂÌÓÝÊÛÝj&å!?„ÝÅhø-B²‹„k¿[íì!;°ÎºÕÛɺÕÿÆ:ÅöІ(Ø7œз0ò ™ŸÎ†ò©’rÍçëƒÞcꑌÌNÛç|·Žâ\UöJ nexÀŠ%@[Ž#¹ú·™)J3–­‡ò~®‘Ndéz‘¶ˆVêÂØR«Y;]A›r–@…Ãô±¢‰Oh¸nò ãÍð7Öî~Ó¥çïÑ+t»0¸B»‘ÎÛ¬ãz·G»¿ºnJ¤w“&=¥ØD|ß=Çéd6[ù‰xRÝ%¡lƘܸþz_mI}ýC+•4RµØƒöµÞ ÊüFôšä=4æ¬Íða$¿š Jíœ5Ä–ÄûWÜz8 :¼t'Âæƒ[>¢²¶‹@U~;Š(¡ö™¼ «7óšqª’:ãŽÄQr'™É C˜§õ¾¾ Æ, ú >)wYgÞý Ð$ál‘TéùdìÔ ¸\kø¦›D›ÜBkE¸?¨LB0lúâýc5c$=í¤›:Jž ÕR>I³‘¤F1˜pé4ºÁ"ÏáQÊá,öÅÙrª¦þ.Ö- šj,Cü ?±„OÕ¤ÌÎKpÝI£ü 2êÐÕ ‚ ›;¸‘AF¦=A–"Xî´u´ÓšÚ(š mÅ& ñ‰ œß,þºØõºQ?¯×wãÒ’h’kv™Gµ0ÈAÁxž6&&0’ÖVNv‹NÁ›GýCTZlÒ‰:£Ü*,Ó7¥Xõ'QÝÙJ(­Ò¯¸À%™w§´9J¯þ†,AK­™K>†C9#¯°‚oSÊãJ·]ß„Úf²„<ž3¸ó<¬îhÅ-:_=‚®ëW]ŽŠóÒw¢Bß}3¦Ö‚¸ûá÷Ú»>\Þ«’ÍõI.{÷=…ë-yY Œe¡(±;’™¾tÄryãq—Ùe3“óZFÒ¹$­Û6YW1™ ŠQ=m¹b„¢h Sé°²Xd¤EO¿á¹»­£öˆË W4ß®Ös~+OËUWú«r«Š*§V<û/¸¤ptšcHՠמJvõeϹ6¾KȺ‚o.ù#`o4„¢ñ'Öhï¾Ú±¢ªœa¨±ŠÑ ´‚Ï…÷T–ˆ”±sÄeÌ_x0̳w4±Ü Y©Ÿ¬‰ÏT9möýümäsrÂ$ò½OüRŽ¥m‡NŽ|I¥¯–ß‚¸?Š».J»<ž…i†'3\ÞÚ ðç-2sOç=+Þ*Z‰ };z‘?zþæh—Êô€ƒµAÿO ΟWæoÞÉQÕQ™ÿ‚ù;{äÀP.C#òÅΪ]s̵ô ñJ¶c€™¤f4µâCƼyêù'ʵ$On1Å€ri4Óèê? TÖsßߎ˜Àî¸ vÄÁh;XRŠ´ÙYiÍ®•éUÓŸ¾c«võQ@#nJŒ¶cÖb^ ' “]êvÍ7P[ãsÛ+ˆÙ¨J¬sÔ‹GX]j´b)¸fó5ïÓßÙüeû2LÍÊ»/ÊJÌ÷Xô’>åºÙðOéykŸôɈvyË·ÓH¦º~Íü ”uc…†.ÔeÒhÉÊÑ×YìÚ¼R41³‘ Y™)¨ÙhP ¶ÚåÔmb!mÓ|¨³ßhUàæ<>ÃwJªµt’*D Û ÀBN%ÉØ-OnT¼>â¼¹PõJF"‡0dÑö2Ýkë0W2¢™ž|ü5æ]·ô7òÆ•ë"åAŽÚÃfWë#ŸtཱུGð7<¯™ªÏU@¤3xNv›Ýœ lÃ>–µG!Ò^ºb}å QöƒMTáæŒ( Yxw­sªg ¨Ä­¹Â$=X7ÃÍ!ŠTÀÇt ¨%q“¶oqF–êáY;“‹(ä)ÞÑûîu¿@ œŠ/ì]ø¼"ø4×S{Ïä9”ˆ'ZOÕ]á …vÜÄ!ÝìdïPNÄ;D9£Þ¶í¨†×/àEçX ;xÖk¿}¿pnéÇl™x-üüL#ÁÊ€à s¬šï óþÆÆ&ÔÚÑ‹g´ö!ÓÜÀÌò:Uˆá2ŸP8ï@L²n xŠ`ù:þo#x§Ìá"jޤ—ažT¾ÿŒžèŽÛܺ\\ÏŠøŽ6 GêM(BmîˆÙ_†Û1Nô»Å[0Ûud%ÿºKC9úUñWÞÔ_yÁ…cmf ÆýË‹¯®¶F»ÍLQûOV`Ó²”æ{@@7QìÑQ 'Uï ³Ô´JwI¬Ùý1‡[‹« ø\D0MÉa’¯é#=uùòÈ÷´iðã‡/ sè2-/Ëb$#aÛ’DÞm)K‘6—¶£Ê ÃFj:¼íån.<ÖÓÁTv$LºF}þçé£ÎR 3¨ èäòÄopÖ1i]÷¹ƒY椔‰Ó׉Õë ùÚ'µmš9¡6nûÁý¾ë¬ë ÷'Ÿ: WëhüHçºII‘!OM£ÆþH)Ù­a.P¾¿i¿£5Õž>xè_zvó$ÒÕ¿ÚÚN•Ãщ˜‘ô&U›Ać‰ˆàj¤‹ %×Íädª·WÓ@|ìëDËíýåkódéŠ9Àfd Ÿñ"«‹ž~ù‹žVS¹~"þ¶=œö OûìJEÕ&gvâïæ¶qy4ÕüU†Ë1b%Væ$`±9ÐjïÆ%ÔÒ«/ô¦ÐÈù6ÈIh<¹ºR1:-t£§ÿÕ-·xÉë”™Øp©ÎŸÄ¤ÓHøzŠå¥L4ç€gÎÎ? bt¡ó(bÅaa²ó÷â â‹qàþyr5®UûÅù癣Ѭ~a Ôüláh.צᱎЮ,\Ãë .üÄ•Àç0 á'vWÀ^‹[ Ù‘+ßoíV ·E!Z&a‰V|ÀêŸô€[¶\§!ÔèÕñv+%U <šrxù)J$‰öð… Q´±H·•avO@Ì–€úÀì^~=Ü(=£,]ˆ{/êö6]Þ‰Õ¬K¯•$iV‚ ]cèr :±ÓMžúNJ¯ƒ’1ZÂùÑ#§ðJ-²…JeÔ¨ÚW4€Á™•æ£|h“ˆS£0bÏr2‘–‰—3–Û&ÒÆš‰¦|u7ûã ²f\–Òf ‘Ý$†?ágD5¢|G?!¿ã§ M©ÙUÅbØ”Áª!&]ÂhèÑÊî°¾J }q¢Ë ÀBDãÙüÌñm{Ö.è÷{Æù3NsÌG@GêKÈ€‚‹œIÉ5Ö(ms0µ×¨¿aàÄa©©QD4?ℹHåˆÿdWr­Q2 1¹Ž}¼È…p1;½J<=¹]vt¢…8ÖžÛ€•5~€›Rjš÷çÃß,šœIøkö íßl™ø'sLå,œ€NžÿŠ›^þÄM˜¿‰î[¢aƒòé[æÀàªæÀ±,* ŒÅu"éƒæ]2¡“äÒ3’w»ëÚvº¯øÚ ¨áwAÃÛ¿„~-ðl½QÒ°ÙZ¨(Lex>ù=½m¹mû&ý˜úpÀëaÍ®ÁS‡bÅâV e]ùå@¾A»P-æO±æ h”¹öìX6 wÞ¥³KáMqi|æðUÜ%‰[}(Bs¼sŒ "ÏÝ?TA£È=³Vʶ·Šnc"³xŸº˜¨Ã˜‡ÁÐx7Y¨–ôïúñ¶:­ u w(1Ôá}»]) :P"›kb±Lцûš*Њ,^Ïnˆ¡‹F]†~­ôƒcbÁavc~&ª 4Ï-Z2DŒŒ”C u+©ˆ€ª ïqÉ @wèƒúº ÿaåò²‹%Ý?Í-ûÀ{ÈÄ“ÌúÛ¿ Äxi*.ý‘N/ÅÓS}•%¶Y(ƒgcÑÎ:Db»©r_±`®>é$aöD~} ˆO(ûÕã[š¹Êôœ¢ÎºWgƒç–Ro1L-`q²VÎcûåëö0ŠSxÌ=MO$1BddªÒoGd<lLÐyªÎ½zéWižÓ8,¥ÄP@èŠD+‡©±™W×¥ÄFèþ¢È:Z¸Æ÷+Ã÷¡^¶ß1â³yðý- ßÀ žJ«»…¯¦œwäÔ†cøpŒàð$éµtæûš¿Ã¹¤ÇVz)nŸè¤¯€ä­UꇈûáKúvçÚcóÞÜ^±/¯Å•äÊ7ù)­²žØ$ ä»±<Çò ¿%–ýâïAÑùµ_~…ÒÁU©oÈn¸¥â³;Þ7VPœB§ÎôN’ú‚Ì€iRb©àýƒbiÕ\æ¥aç+Yfð’¿Cº °ð>ã´„ïÈÁªDfä\°0;7…¯C“Ò0g–ÉY ì’é^­WÕ Y¶\”M4Ú]úXµL€ò¼»·þVY4Ä.lC¿0‘ï!o¤Á-gxY¢ð‡É¯ž h0t…ª&üt¶ÐÂfx¯Ù ±”àªÓ³†_ÿøRÍj5; -ÐiÉK’60/xI+Ò1QpK`u_™”ÞuÇM+ÔK~‹(‚p¢âTnV>\‰¥Z“_ñÚLàÍtóE/ðõsiؽì.Ï„É5+JvEO|6…Súäʧ° ‹“*¬QoGØ‹]ÃÕÃùy%|‡É® Œpj„ÚBò^IpÊ}hÅTúup¡"]Üë;ÆŽw ýÁÏzœ.U(&µ^4ß œ&]–ðß”níïu³ujWìaД\^ûÐâv€µønưDÏ/¨ŽåƒúÀ‚¢faa|Ìfiû%§• ‡*{õëCaݘ±~€€;Z m†Ä’÷û½®~,Oíx˜ƒ;ˆƒ$ñKzëÇlˆý§#Œ©"ñ ‘*ÍN´>õp¥Ùp·Yq¨K0Þ  Ž"è1¾ñðz§{¾ŒôAÎSÔþ&à‚¾{vL“|Áx;œîâ¡Ãê-RÅ• 3Ä=…´<ñt=/k -û^Ÿ¡Y~8Z6#±¦kü'¤}&?;ÉPJxýÛ½àôôV£ðw”  Œùß5‰?§#£öŸã¢R±ëRE-n ¢žEdzÜHKZñ˃òó&œèFjõŸ0ýò¤1Á)_gˆM³;æ—);Ùšš¦ùÙ¸šÞ_¬?ð»"IAghÙá…ÄÆ’–³˜ÑÞob\…ÇC“Ôv;nî…mQÞmq0[Ž¥0IÇ*ðD4éf°ã?ÌÂq¸^¼k36h­eçXª@\æ:£ í}òÌ! ú¶måëX5‡ÚkÐË¡4&òI]Õ wNês‹ð>&sõˆ<â—d¶ïpþýÔæ‰t!9MËpušF½5Õpæu}Æfgº;±;'0Cõ>Ö €¹š.küL;>ºx5Á¥‚¸ÄËac)£™É*µ;²~„ÇÐŽ/ÝÊ6£Ñ mŽtjëè© úS¿Gü@$zv,ˆ®!d¹j—3 us9¸…/ zª%ÂIJÂê½ÑAÙAÃ.õ&±Œð FÍz€1Qm¤ w i\P$·ôÆšZ Ú—Aú\æl†HŒOD(]©õºó÷ŠG˜üj7ˆâ @!MãPÆ¿ÌHøò4˜ëŒ>EÁËÐæî…FRÐÓyT’`ÑišJþgÕµ‘ìÚaùùíÐÚ9*Æ09~&¼6¹Èý¬ø)oÏ hõb4£‹}êq„«i?Ù¿™pH#Kd•.bBÖaë;*n-d– ¬ ãåÄø”, +¯kC®ã\´ºëÊ|QX‡TŽCê¥sê¼£Ðé–ø(ÉTÕ#õ`Òœl‘/—k¢Xµ1:n V/]C9܆)nŸþíZ0ë*6è§ ¥oÛ[… 7SEP$ù!8Ül¿»$4—–ÁUÞŒœ¨.NÿÅßʇ>%Òýâó=ÔŽíöbÍðÄ̱‚!oˆjsÒwØ]“^¸ˆÉÖÀKC oÈ Lòœê[äårÅ47º†ÚKîVï¬Gòýõ1²×c>¨^FûÊ eX¤œøª ¡*Õötù‡=Æoµ]ù•ù‘Wïœ 1‹IÅé1ßÈ®ÒQ{h”2Kè(ó&…gܼsYçô6ï9SÝ›a,„=<‰x±È)‰wê“í¿Ò±ª9Q- ,õßxû:ÊÙMD\ÿÁÆÍ)›:Û»:›þç©<Ðá¿NÄí\þå‰Ö¨ü³íçÛfªQnµ‡¨ø1”VWV8€u­®[þ›èjÇùÒwÔwšî—Ã(”LXòL ŸIÜi›4x[ƒèî çCŸí—©ŒŒ¼Ý>ÌQ|4ÅÌ)!A]ºðð‘4Ì)"póðµÅÔÜ ÎlE†©$¯Ê]À‘T|Ÿ4kÊo§k #€ú;£¨OZV·¡ÔnêÎ$›ÜAç|Y(¼¨Íl-« '}Ãé•jè]´†< Â*/Ý˾ âP—m¿šCÐA¯­õêØ¨÷›U©G_â Ö8úT᨞Fâ{lêQü}™éæÖ¬îö\k£ÜN{æð™vÿæœË:šöêa öº(£†yaÕЋÌ)¿Ζ1OÚŽÏŽT°õ"hF€Wã¤k/ö´usÔÇÝNÁ£•êˆÓý›ŽqÔ!¹H×m»4aÜý®¯°¥[Koül1¾Sb‘Þæ””î†YÌoö¯ùyv·(;ÎãYòë7b¶54—¸­-÷Ú8ò'ÔmCÜŒÌÕïG4lˆ.œ%?±ûQúÈ)'b`Ô{mA0ô䇃ô€¥ù’a×jÞàÇ´ÁcÚûNÀ+jo=·ï8ǹ.ÒœùËÙç N2N~0ºÔGTš¯W$¯"h&–“sÃP‡ßÃÈ#öAÔ¬[Ah4Ÿ¯Mp±=C~±d#[˜hu=ã&ÄÙÞŠ¡êÂÂÎׄÄÇïÈ)84ctm`ø`‰\˜JŽT ­óùå ó[)€Øö ¹S©"ìNXËËd¾EDë½"¹+ 3ŠFa¥3*® s (]{1¦cõ¦(û&ÕŒî§ÙœdÿÞ¨«£…ŒØËó’Ä-ímg‚›XŸF¶.Ü™)õú¯\²v'þÃÄÓ+ôË…ö_¨é9c¨ü8-;-;Þ!á1•BæâØ)üò¡Œ*ÄãChC„gmm¿mžmÊ—ølŒDï…âès#ãøE³m9²áAóé¿At=®š»7‘[’rË•™»+lÝeùæ> =ýcl[î0£É:K@«Ùn8)™~ÜRv ]î‘©nxá*òÄN!`+™…iO™@¯m#ðÛu+l'é^÷k|ÌŽÞê`ýgèB¤ÏTàw¬Ø¦ô£š©3Þ_«sæ¿&Ot˜.B4[Z=&ðÆJW‡ÈeÕ~g,°íEHaŽ×RZ^P]ŒQe˜€,Š=-½$J«÷.ö\9ÎI¥¡S¨¿Œ¶³2— …š¬c„}îŽNQ‰áY\tg^Ýe<ÛgOÕ MVaU‰²úÊÆ¾,Ý~ªl5¨%w@¯#kJÏquå(ƒU$ÐF£àd3‰›i% KJÈ3é2e1á¤óe]q²da¢/2Õ™J‚I:^ʨž¶¨ú’»£ÓÊ…£ Ko“ŽXë‹o–c¹¥iÏ"5Zƒë¤ÿ{ÁMõá\FÂl¥-÷ éœÃVµµ³ýïúï´.kôXì:HRR±3­DÔä­«dc²ŽÙ y§ÆK9œÈË*@‰…±Ñ¢EÃÀD³ä€=YO1¹ýÔΘü'Ôv§¦u!9Á{æ¡#烙‚ÔaW‘D7Í8s[ “´ÏRÓi1#|¥¿Jê8湸H/?ðùÓB© -6Ãúâ-Ûà—ý'(^u“jZfÅøú§ñžñ*b±\åS+Ú¢òŸ†Á£÷ :ŒÀÃ|ÃúÒ:ñ¾ÖbC$i¨«=Ú–ŠíG1KG% ¤¤¯eXÕ{™€Z:©½ü G™!$¸¤¸ÉjJà©V¨uÇšHlI |ŽÁX³£Ø·%SWyÈ(üÝQݦ@¿ójšÚ5ÐúÒ5Œúuã© MOsÖÊØ sK•ݵVžØ ^?Ò ÇO> ²øí+Á+sí„k`†à±d‹æ‚\íWÁDN?-¹…P.‹çŽë…jLýˆ. þÞšBO_·[_¦GG‚ýei±g˜Œ§ÏC~"û0~âõyÆ8Lê†D mQ÷¬ çÅ+IcYÀ¥¢ç¡!fØÏ”Ï'jΰTÑNûß‘aÅÏ,ŸCXȃx$¢r¼1„HYÕ%¬qmqt.MŠÜ»(rÈ)a|É©°©GœÕE¹°® Í&¸‘=B¼Eû¾K)a ?¯:ôÂNÂÖ©—!$É-HzÁ@¯ë’J X2š1Xr ;ãá ŒÒ™"C¶g<9Ûk_Ѹ§ ¯ Þ½HÛžß…üɯ@а°šÕáDDv|;3|8Ãç°Êpvßâ”®ƒÊ´xóqú”þéÍ^é×h]Çž·è”à…vù7ñe,'ɳÞ\‚›sßZ¢m1»·½iŒßô@ÈcôË C®Sù$\¢³|£×Ÿ_©©_YPäßí¥u¬~çW ’}‹E–!.'ŶïÕja_5Ròß-žI ^Ãç|ä:òê]„0>ÛPït+öé„07Vº~(qä©Õ5b˜ÄKü áäŒ(ü¶ŠÑ z›©ŽFg~†‘øÎBVaÚ—ªò+ ž­ÐlÕ¯«Eû¿îµ€í`s ÒX™­\k€R– Ô«ßœ“\ ö—›÷ñµŸt®:i3PB—b–.Pª£~F‡%÷&mõ¢—-V&¢>€? þªÒcyÛúgþýQiŽÿ¹JÿÓ#Q?ÑøGãÓ÷DC€I(^¼„ÌÊ©E[9ß~ŒÖ5‡<Ž™{¢¸ ¬¦ÓÕà7òH„|¥‹•"µ¸„á7ÊxÊ€×ýøþa··¿»ïS÷º¿¿7FÏû³ª A† Õ§ò˜M7‚l×]lˆšq ÐÁš+¦ëÃ8 ‰.»nŽ––“NOe&+67]0úÚÇÆŠÇÌ´Çš›òäõ ¸~õì ùŸî)U»±§["Š§ÙØÏ´fÄ`V³ÌXÜÌ=‡°Öž…TQ ~K†ªXóJíDü WU Ùªyí×®³5¯>ç—Ï¢ƒ‘fl!Sô8—¬$7Q›e\wf>8A ôeB&!t­ÍîÖÑž§÷Â’ˆZFbGÁa¬Þäz㟅ë€ãêdkh¿Oa.,¯Í©±—š:í¦„aÕ…@á[„Hx°ak•í˜t‰C•h„íð™$Œf²¤[û?¤½ctfݶ®WòĶm[Û¶mÛÉÛ¶Y©ØNÅ6*¶“ŠqÞµ¾½vûÞÕöÙ{·v~Î6ç¿1úÝï>GWÏ ¸H¸=Œ1s^P³1æu嘴%ÁõuZšlâËd k— )d¿b Šè÷ÈIÔwÙ>½ÑN²ÐÝbO¾Â±Ðb¤~1Of-J;ä§°› Ù5!³pëá‘bãÙ-Ï*¤?/=>j¯ ,™Í™üè¬ÕõP*Žz}þDë<þv>zµ©;M>™˜ÔGN'Y žP¬÷¼­lúRҧÀ(¤åŠq‡”˜e0’êŸ`"££e2’úEÕ¦®\nY²Œ¦;ÌþO‚Z5\¬OJBaëÅÔ8 ­'|=lø¶!×WþUàvÊMZp«“Þ/`{Øe[ãT å&18þ&Ä;ˆ—EE™8j_i‚ê•i9Q_j0Ø58­ŒŸG¹¹äÁ›±(oç«÷ì˜Ri/aɹ¢î‰Nô›j—K9°ŸMIÓäÐ+°féqQÃÂøÊ÷jÌ—ÑÊiØJœ Åœ¶JTÞå‰=fé¹yx.Ds¬(ñKÍ`›¨(ô˜§ÉdMâ¹nw™@cF`Æ Ä9±ª"×ôr{晘µ‡:7,¦Œ[_Ϻø°I2ëÂ~qÎÝ‹géH1Ÿƒ°ÑD S¥e”ÉÉ"2ç'Ü åt5‘lÔl5šŸRÜus0 ® åä Wy[øÇ9WT”"ç¬ô ]v*¬Î“ûä;0Iau~J_ö3°WmŸ?+z ¢a+Ê…Ð'[ÄC8y ÝÀÈñ6E?ž8g™l‹˜qÈVË,©ðÖ¿ßCiK’‘Á……ü.hs9?ÐD2Åø´€G£@ú†#ÙÏ!ZÅs…æSÅäß2ù¯m}Ðòç òùK aæóÞ&úÀLç•æ¢÷H`¡ÒÔ¼RïÐ|éyç„D„@È…›Â ¨iÄÐë‡RNÐÐOሷȥ]ÑBÈÜÒ\My|ÐŽo°(§îý€¿Ê¸ ýË[ / ÿ~¹áJÓq+è/õ,ùà&ÿTOEK#³ÿêžÔß^üëšÔµ ª?#Æ€5HbU-:;ÙN‹f3dÊ<›(¥Lí¼Ü]`éÃÏN¥›¯Ó›%ž¨–\«7‹W—¯xù™ä ˆÜÓ‹É7§§m—mþë­§Ïç·cP߈%¬8ã6ø-,¥©?Xö†ªìùÃLÀvSc,  Ìæ"S%ñJT%ÖúmØk~<³y> ª½4+“Ã7rçˆmsÎQ£`0=ÏlÝ£ôX§Î…’“¨ ÁLwQ–²Ífûcw&n`áj6ØTÿHÚÉx}¢Ü G.¹ Ç …•æwZmùL‘ ÔÝk7‘uqè=ƒû’z¬“ecnuG‘>É+1+¼ÕÑ%‹M–µ}¯‰Ä°qk%oó9„•ý´Œ°1]®zìì³ Ì“ÉìxNó49ƒ#zÁ„¸ˆ‡œA“ìÆS–DÆöj SŒØO2;ìgqClÚÏ"%g~«.d~+3ïnÃL·$8çBgr†ÝÆú´øà?ð/ŠÑ¸Þ€cn`íX¨Öi•ò'x¬˜à§aH¢ Á3UFþlM€ïÎêï¦Sehbí’—ÖÏÌT³ äX·±Ô¥qó­($Ô´õáý·È©°sÉZ|Â’8®Ú]üûgñQ~ßêÝž¸ošH\~¶8= FE…%Åp,kŒÊ>N#Qu˜“žöRøJVá.#µ«fÇÆ ;Ô?.bEÝÁ'àL÷à½S‡ŠâÈéÎOD¤G%°ÔØWn"¡dF=+ßÅF¿âEÆ“r·k÷¢èœ$:E’q~îÚò×a(ª(ÛùìüºÛ¿2§É“PÒÏÿÜÖëÜÜÁ:‹™::WäÿCµ êÆûÇÞ­I  6và?ç÷²ÅÚàŸ“Ú׻ḇeM6ù©ôô[;?äëƒèŽýüÈcw1„"§Ï‡ ª.üZ7ô'ƒÚ0žG¥°9áa/ÄtÿÄŸ_Öê¨ #‘òéqDÉk~ñé(Ó³.Öòä#ØF´¥J¸–twY•—î@bò®$²Øók¶fý]ºˆw6…§^aU>)~‘ŽÕ•Þ° mÿð4…Þ$¹D;]õ-™&ûB¹UÑ®Øõã· L®vžOWoØðIÎ@#ýëwám†ù?A›vP.¡Å!BtWѵëçB‘óS¶UÚ¦-Þ¡®îS5¬ÊÚ.”Þ¬Œ+B1­a$N˜¿óõ´/ÎîˆrAªÈ<ëË­ÈŸáä_ý¯ü@å!Y­µMÃe2s(oÇw_N½2ó•]¥ÂôK‰:9Íõ‰¼ƒÈ P e½–ŠnW5$4ú]qwjwrpв*:¡‚ç¥l¦ÿS4VË»J‰=J«.´C¬¢- {¯_Y‰N_\¯/2äïB5ÙQýW1÷¿i{ø¯„î_NQGã/YûD€ ˆ)–lR·¬-n‹ÑÖ¡ÒÔÁýþƒX¹]§9ù€ ß|o…q©åÑ¿·«) oe]Ý0µy<»né©ç±ÜÕ-&Dª¿ŽáWûÅšE¾C€OþÏ€¯GÞ@“gýH8)O¹1ìT,Œ©ˆŠ˜×9êbd¼ºBÝ‘óŒDZxNS*O•IƉ¶`bÁ:À˜Ž°\2²„0›Œ®¤²‰ÙÅ`IƉ¿,LµCô0Ô û›áxCB¢£\ð”"æRÝq8{¸„Ûè!e&‹¡2!3Ûè.BÚÊT‰}6‚êrÓ™©{)y[¿ž„[sOQéL[]íèO†ëÂÑÆÒD_ +D‘ÊzLNV¦z¸Ô„lòônhŠ3±Ñ$Ì-¶}G!¼âY†O ¥Ý”ã¶+e{5%V•Âé_¶“ÂrÊì‡ki¹ö–/2­T‚uqǘÉÚ)—ÑâðÛ¼´åH†ù¹qéƒÍ:4‘yû‡ú²ìã! ßþYšT„ïU‰¼h.¼Ñ¸T%ÌÄÑÏïi+óùŽÚ:yOì`v"÷;®ÚylÒǖЕ0Pz'¯éËۛ㮄þŒiMŠÛš8QõHsÛ gMúR²ûµè"ÍœB#­Dܳ sS/—Qê¥Df,œ•Ì»¢Î{¡ Ú/ñaÙæF°´ÈöíË ¯¢ðô %üÄ:{0Žð‡ ò¸¨Žá1Ÿ;}b‰;hç赑G QM¾„!5__žÏM8öŸ§îZù"Tô‡òyŽÊf Ë…ê=xD5xø_;Ñ`6J©";|½ aFYo &°ìíi"L_2 G<Ê_0Á1R„Û'ܲézo¹Þ±7`†{-õšW›í@}úDiÿ( ­Ú#¿Q ôîõ}z-2þ°'”;·DÑ;Ÿ±ô ]ïSõôÞÃdÛa—:º‘mu@þ6ÔÈÿ§Ç ï¢Îº¾>KäFàRñ†.s{V$°kªÁ o0-¢ÏÄQêŽéÌ3(‡Ù’‡+Äå?Ð@m.¿!1" |±êÕ…Q÷íNw¾£k òûXÑ%û¾:¥Õ¼‰Ýê<ò1+T"郼QwDŒGz=k+6¬Ý$þI]UõIÒ!(ó#«¦0 ¯ËL—VbLP« ÕÇ\ÊÍ€Eí³½ÿÛ@¦…ŠùÌr°¿ž @@ôÿÇ bæªèìàhæìêõ¡˜Y™xýÿ>û»ûmþ×z]êp1QdäJèu‚0%E%;¢$<ƨÊÖË‹ƒ&ñ›z¸7™Ð8‚ÏàïJ#kí $¬ÞÉÉé‰û‹éÉ­'Bƒ^ÐŒ![(«×ïƒ(­¬m!¾PXÒ1VX+L…ý‹Lc³êÇörLpÚ]ÓO“ôöÑ}huZêŸÇq›®¦ni…üþj¡¦|N%¨ÓÌd÷a,"UvÊ^ËÎ%šu—ª¡_YºwšyS[,Oønö\*»¼”†'­¢©o6$ººõvÃßÒPC…ùB)%2 ˆ`B•ôÌ!Y1öGQLL"úì­!ô ¾FŸÀÛI|…OaïþÃ2Ú÷D•Ê%…{‹ž×Éoß•ºk%ºˆLl`öÍ™0Ð/GÃ]5ÍÍz_1Z6KdVÅNhÌȆ¹X‰FHÅëTÚX‹S'—>Q%…`Tíiî?ƒÑ ˜uLŸ¶ÑŸj..cY¯ŠD(Bšº¹ ¯ÌAê òã«´ÕïÅYMžxFHà°Ö|ÕG2»r Æ{hÆW{ÓŒ’Z¯‹¯¼ 1; › ߣ×âÐÀ¿TXɱQÂá(ü–¨Eqæþ”/¿¯ÝPÚ}çáÈàþ6òÉÚãøÓ®é×ÜU,Oq¦â„hoMè:å¼S³ Yç)›XV¢=«@ˆ_ÌNRÁ¢óAv8$±(¾f¬fÊ\,’"¼a´N©í]è  =£ÅuïĘ¿‡ˆn~Îñâ_!ÂüWˆhþ¿‡Èÿ58jÿãÌþÑûOAp #‰¥Ž¾<¤¨Ò|Фò´ÕÞèù›¸ÎŽV»ªüwŠàÄO€§GíaŽŒ“ôÌÜÜÌãÌÜL›Þ¯çWø>=Û²ÙXÞ­aíHY€Ö$5sþFjÜ&«ãᄂ 3 éÖ£uŽQâs÷Á½<5UÎqµ&Wð€ØÝ¤&±LžšÎZN,”SÙD¡È·” G¿^§é|§Œq—èv»4oÊéáö¿˜&i‘UÛ®öTí3!í—ÉÓ^îX΀uZ®þDôeßó>÷¶Q3K©N[µð ˆVÿþUW25/àÃæã?ƒùz¬ˆú|nþÚZqÞº zˆûä“°ä –^ÿ¸§ÉØB?·¸¢^e‚1¢„X”ìƒ~Æw w~]YƒJsŸ`аzÝ·ðð<ªì¥QU‰T9ÍâÍ,š¡­ø½ÒwpWM Çóû£½"*Âoç%_sFë³"a¶¹hT oY]¡ø p õ›_C&58š¬?â()8nûX+_1p~Ç#LK•õ5ýTð)Ëó.¿Gu2í’µ¡Ej÷îÎ?-Ž-×§Â_å ¥ë( @íÞ ›üÂ%Íç3{±k¥Ú§œXà8NÇz•,TÍC!‰2–,œº¯eºûÌ¡süd±ûù)«üÖ}ë°0Œö!î&"H—²¶®<±Uñã-s=PkL“d»°hˆWÒC³2$äá‚:1ÂbŸ íÀ‹QH>Ñ^l27]¼3£ÐWøƒŽ“!VÒ¤WUˆ&¨8­S—ðTòh¹*§Z» cY‰Ý%—Pö|`>Dm CÕÕ^:MÑÄZR0lÒ /¶Ì×7®EÙ׉œ`VNö[q Yu5Æ¥”)Ž!–GGPDt0Îòm¥R.¯À¾›çkkŽ‚’ @‘ü€ø{$AèIª”ÿUmèÀƒ€ˆþ?GÒœj¬ýUy`}ɵÀ쫲i¢Õ`±kBQéÙFâŠ+Zã 'Dmá%e3±MeÂí[š;õ.ÇMò}/Í s´ó½ÿ9`ÊÊ8.o¢›ówO@rÀ×Û=#Hx•Ü> …¨nÊΙ ~Âl¤Œ¿« ´QUdÜ„ÿÃÍ›2£”'vý aý«S˜ JYbRj"rbj8+‰*òO÷=v˜Ú_vA1ÜÈ8Ç‹bäý%„/v7ƒáäFœ’#1]ÔY–é%‘ÖAmÉŠ²a6sè ¶Ž}îa¶LêúþFiëBšJý1ôŒ@ðÈLvXm¶âÍ8-óEåÆ9r^K- ^ƒ¦làŒr ÝOˆ¦²¶›Ù–úPç¨4øÜü<3ja[GÍ”Á¢С%¶ž-ÖIe²ÝŠªÊe'åU5ÝkŽe~ê>Ô•S=á%ÍF&Ω3‰„ï ÔíRÊ/×j£YJc¿“—Èg²2-¥95›HB¨e–š›sÔš\ã°7çRìB Ii©C¥òuË¢$§C,éÕ›ŒÝ£8ÖÉtŽî:FØh½Èz[ºÇ_Özã¦\îþˆßƒlHáÑEú¥%Û(šg }MJ Ÿ·ÃIIP„ÏÆ#ß÷î—¼ìTQWêë(ŸÜE yJ±?¦ÉâДi泈¡‰ÑExê áòAºGœ\TUT:шÇZKg¶G…¯ì©Iž-7èÏΛ±së e—$±Ç Ò0–O‹‡Í’GxªŒèpI4ÏK6ƽ‘ImQðL± $c¨¶Óœð¯oVˆ±¯÷ø±· 'N„2ºlrh‘9M»âMEgi qOöo9©·xÓ‘ÏŠ#ÏšC”,ÃrÒê&c`#u?„ÕÄ‘<XAÓ ”s‘=“-Ïà÷¯TªÒÊ.\DŽG1Yz†4T/šyzs° ö1àcÃ\«Æ§º‹Ýi!ÔX+NÕg jÃø`Õ¡Ø÷U]ˆ¨öq}'â¯M}ã Û¨\ŸŽAÈ ­i¸fQþjñq9õTKãQ;zöêDœ£ænª³TˆE…¢m^"éÐH¬‰ªGû›z¾ïì·èÈ !’Ô)Af““•ç ƒ•¯§Â’ä² ¬NmEø4FP‰ª¸„okž[ìƒÆûa¾úœ–;^j¬c–Ô„Þ ÜíòajDñpΠcßtÙSÁ;·OVÉê +¹)/CŠIÙ°Ú±'U²ÄÇ…ji~p)=ðåã[mT«cqª£Þ7R]½ý8SZ%·äƽ¶RÀzÄlJ\Úϲ2TÓ4Ù•Î8C ¼ mí¿çñ¡SÝVÌyŠ"–?Qj?lQÞN“l¶ oj…ëA è\ß^:úF`}¿f½2üõÊ~3tl òËÜ„ ‚þ€øÂg›“i4Ðñ'®ýháCÌ%ö”R`E(‚߇ nâA¹!ËkdoÚ·Â#~ËëÿJÊ?€å‹£µÒ¡“ØKLI:áiŠÌ9Ð[\y¬aûñm*èÈÌ6û^ÇaP"¥Ñº»”c½3¦ã…²éi[d‚D[½Á¤jjáHo ¼gãDSè|àŽb Óyñ­Ð¾Ð®oeãè ü’asäý"„?¾Öpf…ÌGZ\zUcà“¯ÍGêã1ªZ’9•ºŠmÉ?êòîð’K™ï°‡%÷ŠÊv¢°‡°ç3Bë‚v:D…ò¡è˜RÁ7ä==$gø¢I«¿F:?º¥‘h*B¿ÐÀ+Ë#ö–!3Á²pÄ R8ÿÉ™äz_10ä/_Ó'çïå-}³Ýlæ)Yl³D™™æ2F/¹ã…‹C$u|ên=¦ôÖõ=ó˜ ócF‰üæ‹‹ØUè•ðï‰ ]—¥!þ/K%ú—¥âýÁ¿fGý7×аøe` ‰u£=E@…¬¢‘›Õ±3ÏÀ™ºOQÒa`(p¡¾R§-soû wâß“Òid± ïô¦Ÿ.×~¾½ÍÌ€Ýj‡}Û:Yš ÃWá!ØKŒ³BsESšgUZ¬‰ãÎÀ9b§czÈq”Xn»{÷`ŽUâg d}ÛD‰S ªl³»rî,Ja|!‡Ó«žOµÎ5jqôz7r4¼Êݵ÷¼ jšæ^5Pá>ÔN£wçzn<^zDÒ «,œ,âßXÖ9cµþ(AÁMh¬4ðä £dü´òŸØÊ"}¯P e˜RìðÏ^Ì=„ –ƒËNÇs©þQ@G.¯Ö®É@ùÎöøÍ|à”›Ô‚Îmœ)1j˜iÕr·[Ñ—×U”mP™˜Áˆg³y >ü(z÷ƒ&½ÕaÄð̨èÑŽàÜkækÚjòF±Æ æ!öÉh`¥&Ûl´¼<Ýn&Ð œÖ³n7,ˆE½»-Ì ¼¸­|·4H£BñüË-.¬I‡¿%l#_ø4Z›Dm^žÖŠ×Ôý²ZÓfáYsœ>Q¾ÂÔeBu·®8hKrrÛ„¨Ã#äß“öftÅeôÈ¢ HôæÚSD'μ×{úˆ?ÐVNÊäš`¾NÌøäVḭ:Kò¢öÙ"üšs¿“z²%‡šÆg³Båö‰.«š® ¼ ØîÁkTqÎ*Hïñ×êMÏ ðå#V®E߽Ĭ8çõ3ÙƒÜZCpÂ0Ë îº£¾È¡r ªHXàë•:üšW®.~“Ûëï3†µÚG¸)xhÈ*°AC;,rwq;¹T¤¥Wl‡  Ã"LÄUx‡üûïÕ&˜ «]pthõÿÍ>ÿרÿê4é¿xý¯ÂaÃW ‰¿8zEßD‡¹Ý)š%Í”—(h‡ËEKÞô@ÆWÉLµVÝÄGí\oåŠêǽšC[Œb_²Ê°Æ ¨/¸ØÌ/*’´>±ÛV^þ-¿××™÷×Ñ'AжFW¸½A¸RnÝ9't‰]Tü•›J þ sá>»¬UÛZ´Ï«“Îæk¡‘ö` çŠ.ô?Ñ{KólàÙf\J7ÝŠšyšö!£¹=—£µ¬½¬CCW’içˤ®ôƒºAûvº³UqÅÀ{kŸÑƒºJ<4piåóLG> Y–ŒÌbý\sÚPý›Ð<*^‚|[5¯c5=ôxTØè¶ÙWE,Ôlù_Že¶ükjÛ€ìС yª¶Qp¨âƒ9]ÇZ¦ƒ’6Õ–zV[Ï£3—ôèY´e âŠÜbÛZÿ¨ÞDu;Ÿ¤GQËØe_k¤ðàäQB9@î3§hËO €f"¾îÐTZÙfro7'kª»Æ\¿S¸¢$a-óÐb +X§ŠÅð95ðÈßïÊMªvœòGÝÕ´ñ-¶ïˆ5Ž/ vËÅCЇãCjz/'èÞSe°&hF‘ƒ)Ü  Ã)ÞèYSÉF“¥!¾ЦmƱJäËY¢{«ê5HÓ–KÍ$»Që×~ ™šÇztKŽ=™OæF5œˆ¬p¾f7(Ȩ«~—xpïKO±§>ƒ^õ|³ÌK™d”3]Í‚W!k iê—³ôǵr¿½£’%èañ"M†+…OÓ¯Mûö ÷üíǤ®m[ÊiÈ1¥%Œ¹6N§Ë",H(o ÅÙ0ܺ¥£L‰Ët.n¯“üÄ¿ÊsŸ9S&\…û x§aÉŒ»=èг“7ßL;.òîâ´Ušv/ñEÊÒ{«? EãÇ ‰˜UIMy½D~_ëfü'zøƒÒŒ’»ØØ?{ÄòYüœj*r“µaóDEÔù¥<âŠzvœN|‡r.œ:gH Âoîš¾Bfp1"‰i‘š .Ò$bA?wŠ_ÂÖÿ‚ÜØ§ý‰ÿ»²¼É[Äuñ1¦¥ËKz‘ÒˆÆá^÷ÛI2®‰#ß#øëJÒHû*kÎs»Uþó„@o|ò øÉ˦¤hƒDWŒÊÁ+qòF …a–ºØƒ!ðÀãŸyP˘Yb¶¤Wã)âEOçzŸ–ï;:âîŽÌð;€938ÙTÕþ¬o1Q,Αtuˆê%IÞ¤M´…Øåûñù šNÂþ,·$xEQÌÂ/˜¿‹Êúý‰$ä_‰³ù¯*JàÿATþ“òOüý?ñ{³šÿÄïEˆêT£Õ¨‘R±CÐ" pŽ‘Ñé¹ï_A…ø­¼VÄ÷\ÈløÙØÑÎ:Ë[õ®º¼vÉ >€m A1ïöŤ›Å"É4áp­2ªÌU4ÄP¼!ž¾Ÿ[ @B5µUì 0È@3ú8NLº=ÚQf˜ ±WØ üTå§Ò„Á9ã‚ÍÊ$Rè*ˆÙ|ÔíTÅØ 3³Ö—Ç^ÊßÈê/5Oš–ò¯ ‹6ˆŸG±ÊP†-ëÈ¥†‘±—Æ&’î*0´Ïx’\Ÿálª»ëþ›Š7ä=E¡µCû¸0A¥ÔîTùc7¤om’Çâ%Ùò‘.˜$ÃèSWp4Ïœ^.2ýmãÈ~ s¾ª Ô‘´/JI–H–æM­½tAYãû¿â«ôZž‰¸aÃÛeË~¸&ºŽN”§ã¡WÉa/H+ªÏ«Í Ô×ñèC—eJ¾Àà5OþÌéxC¸Ý£K­¥s‘.Ð_¹ïMzÕ`~5[?gãÕçÓ{±¨Î7WlB¢p_’ĈêÊTë´Ãóð\[z?@LœÐ ·ã)ÀøÅûsÍÁ–µ™ÿH{Ü~Hg¥ïhµaãퟖ^]nL¢ }¹öêÖ4'#Sׄ˜¸¾YO­­ÁQM;–ÿ¶èºþÕ^Ëh •=#c½Y™Ïs¬x`&æ!IÔƒZíPCfåöóˬop¨;N+ç/ÚOËrµ+ö`<½8þ!îï¿ r}ˆÉIæÍ(R#Óå¬ôç÷‚ãYAh*àÀ{œX¸ÙÒ[½.28`à!YÐtƒµ9*ˆ}¯¶h0Ï3?³øñx€¶Lµpî>Ù'Hxë1Ëé YôÉiÈùXõ鞜ɯ)GOZŒ½H ÒÝœ]`Ä:"9O†]ârÒ‡'NðÁ%Ãø.Å'Ó9ÑBpæ#Y”%RV*#r"йؼ ]©¶|ç{T™Ñ{O¯YRD~Aåt"a‰µ7¦»û†ƒª\Nù{vU”éa'H|ƒyöqnqûükZ¶0ͼìGákx2ŠÕêNf?j.;/Çâ{e5SØ·í­Â”ÑÂ/¸àÏ©K ‚YR¶ÚûÖ1ç¹'÷š¢G>SoÖš~H¶âÑ^TÔ3Z.  VŸœÊ©}à— ±CèÝ9È Q=ÂÒ­cL0)к̀œ€b6–à.7>n‡jíÿcñ•à;ýƒÅ7ÛE&ªJ%7ð3Á?f¦0ëÆg½L‰•ÑÕSò­»m)*sL%ðÈša”!IògºhúB5€R”7PÝ(ƒÜü¯šøß΄ëñ6þÑý4 Âú?'3gc#W+»ë°û2ßß¾ñ‚Â((‰$Íš¶©PÌ4:ªV±2A¸¨JÙÿêüs-¡tÌ~Õ–ê-@¨×šW$:W©—{ßá&Ÿ«8¯S*9A´Û¨íé¢ýø{†ß"ý÷çû-%§#ÖßÕ³f¿0´?]9ö€Ø¦ZZpð0‘x^_7Ò%­±Öå0ecZJp³>=aè µìŽËmÃv4TòE¥ ÝwÌQŽñNš¼h£T²ÔZìN—3 ¨ÙæK™ÄŒ°‰ndÊX?|Ó¥u¶‘äsw^ 1àV±6ÊÌ:îáTæÐĨ²y²Äçš¶¤õeÖKí°Ó²›j»ÚY17 ’ܧ ±$3ÓëÒÉ»k$VÔ:ÇÃðW{íu)›ÁZF³ŸÜáö¼À#.­«¬Rßšs}iàóÚ.2Ô†5 ~H§xœQ«LØ{žž±Ý4éyoR‘7Äå®5麖,Ÿ·(vK©U¹ðÏùèàjå ÖÖê+Ñöø&q¤Ð\XkCSÓ@ÇyÆò´1{þ’dm–Y…¹’ÛTQ‹4ÎÕúÞcztøérKÇS¯#uD’Mî$Áe'æù|wOˆU¿Í†Ðº{úeUªÏll£Ízš…—H“‰„*p¶CÏÍÕd ­›{qÙ f·`'1ªÞ1Ùè¡I.=›ÂjƒµÃæÀF<΄—†aßý÷Žq÷ Óæ‰jWX+5qb*‘9j}¦œâ™¶¶øð·¶Ê`Òêï‰!…$ñ¹YǽÙQ`²èž5E`¿ÎD«E×*„㨮UœtÙR9ª©þ¨ßƒ©+ÿ\x`’'\^~ÇZl÷ÚºGÙJ¤á!§ÚV•Ò¯M0olÖbõ'Ùf¥|-­4;™ÉV—g»Ù3:jý\)ÆÏE?ß~ß•§¢½‘^Çu n‘»7ñB™SAlì2˜+­1oÆX0¹¼®uü©–EµÔloéè„“ÚÐÏå ó µï'ïµ]bxì·¤Eµé’u«Ó‹ÞÔ77ú ƒ¹Wª[ºÚZ”ëëjݑıºH¿î>·S¤–Ž©|.w¬‚~P¨a®óW„ÊDÙr0Éý^~H-Ãró‡Ù“ ‰4O\VòÎ ÷帻C${a·ùµ >â¤KlÕfV]B»3œàˆ?ç]#x²_?Ûó_†…0/}f…þÎõ€Ò­3ƒì Èd“P´ð÷Ž›½Á[œ¹…2?D¶Íãá&Œcj{y¨ÿM„O˜ÇäÃù¾ú€68scþ‘(ÏÀf4 íˆÄ †#†š1L¦Îö6{ñiå%»˜r[§± ÍÔ­$ Þ¦rŒç£¬d"–SÂ˧´"{¡öÚ“U¹E®Q*yŠ €¹6)“½‡=Ëî3e\ŒIwmr_•Æ©ÔäWûÞul‰Ù?ÿ0jì—ï )èD+‡Wxl1#QtЃªe‹›\¸‡!ðÐdDã÷(ó'§•ß–ðþbÔ½¬ò—eÖBøß0"Ô­Ì<þ®fÿðÈH_ô¡¶ÐÑ’ ô=‹¡  µKQÍaX)8s(JÕ cItðN!…×é~«­fùVÚÕsyê‚s.¯\¯Ì¥À¤B§Âyºog¾egòr~½û¼1‚\¶ Aáí:¥Œ2SJßráÆñÎÅ "4ñìö9ãˆ~ó‰ãš¶\ B'E°5Wu6„-.–E6 ¹ÂÊs$‰s¡–¯ärd¡òÀ}KBÏè³ú¦l»E¦â›D-0 ,ϼÈðE{òÍè;îˆMÉðé9C.àá!^Á>(…»}¸Úâ F‡`æ01S+f1ݺ“Cøë€ÃmC…ÌXê£~ÞÊ·±QFÔ Ø3HÅ= ÌëfXY|IldÊõ³dä$Vo¦ÅœÂFjÌdÃX²³R0ÕÈZ‘Î؉âjr™Þ #Î ;^^–ÊÌÆIÄá§h¼fbîsÔ›bñ»©JÜë§Ø†÷ÕÈÎm4T´Êξ¢óPCÈPÁ´¿f±ÐØ3ýt„³‘“ݶxãO‹{˜r—8©dÊŸ¢¤É¬àV¬â;Âðö)(Pn¥|\¿“ÍßáNRæ¬öXÊÝXxóÑÁ~yT¬Nd; XÕjÌ£ °ǺhZÙ‘ û½‘“–‰ƒU†RœvÔД(áp(ã-3žÀà3[›»â`î¢÷WTÒPs¢©™ƒ<&#œò€W6¤0ý"Í¥åÓ?¼Å‰_Á®1oq\Ý™Ì+ÿž–RÂcnw$ûP)Ÿ¥J‚ÍZfÎ{x3í¸)]ªÌ)2­œ¬­y–¨EA7é„»¡Ü§õ ƒ¹ž7˜U#oMs™&¾ Uf Öb$Ù‡ë™ì´ù—B6ÉÆÃ_ÚžšsØ áÆ{@tE?Aä z\Ã>ƒÞ=Kö¶í úŽï³‚æïÃÚ"ê=}éwp}' Ý9*ì>mAïŸåûžÚD—Ò24Ñéû¢1@w$@w-@{vYênžÕúHOŠŒ³Âƒß~¤Ò°®Û™7mLØO`´Žbùæ‰ab„7WQ+™ðT÷lƒs?×ÿšâI÷ž>x5Ë+VɦÎúÎ$1¹À¿B§âœò³ë6Z*÷9mó/ÂêÌÊ=uRj¶&…á¬ÂÔÔ^ apôh\w¼'iNÜ"K¦ ø3†¾úåòDWÖ61æ8{ÆŽiä¾¢ÓFÏ}%s½i…~Ø­K¬ðPCévõ.· ™{?µPÛ_€¶/eÜÊàK¤PíÓ>Ÿ¿¡s ï7,ËèäW#ñ21÷Ÿ?È#ÄrH¯N×ìA`O¥¢œíEaÍ@s¢¯ùç‘hYê†â„S î©*ÏÇ~_‘zØJ‰òªM#ÏÚåJÎ_¶àca'¨¯O'zÞ‰¹Ú%̽\&„´ýjüeÇó2C7ÃÏ{Åðó(|šÇyâ_þ¡[Qœª¹­ŠàNkGŠ~º»p)µT×¢Yôá{ØÄÓì÷ubXΓ=ûiÙ)ÆK×±V¤#{fŠGò¶Q,.±òà§¿H.Ú™ÝÍiä`ï~«âøç¼—C¡!”cèœ:DÏÜN³—–¥ËîÄ\ýëNÝ€ƒû‹ä†i¼BP­öω8éûÁûF<")D)­u÷=â…ŸöEjªÆ~±G¿¯è^tÄ]<ºé*.mrûp©ò…ÔªÓ™*²XöhÌ#<«Úçv*mñ=´ y‰M#¯Ô5Ò+UÞô5 ÃHSꥩUw)ËTj3†Ü¤úW8ËòF¹f¡ô5R K“ÙÖDZÅ­‡YÒ‰bHnl¡¹Ú ¨âÐÕRë¡ÄQËFQKÈÂÇT»®pƒ\qÉ\B<òó¿c‘s„°Ž‰wÁ>ÂÛ#°êf'ácöÐPçL¨Êù/BKòa –÷FX6½²¶äX9´y';2±6KW/ ¡™ì½Ç,xí÷•.Šù`’¥^ßæÂÁ]Á¾ùˆ–ì‹&¡°fÕY9j„¸>S`¥˜yLni¢ÉÐA\”•°'ƒ»C‡öR»í"½ÀÐjà‡N$¤VnLñ,¯}wçmVŸ9«t³Ëv zâbÓ )¥Nx–YJÚ¹Ý+Ö2O¿¾ý=? ?[å‚€|‡áüïò“¥«-£±‹«³‘‰«ä_g©lØ/|GâÏ.q7ч@z–Úͯw;Z©©Â@Vļ¬T+ãqG¥t¹Ý›Ü >HôÛ%›À`Ÿ©†j’p"£é/§ f¦s2Y?_Î'8AhW™Â%hŽÔè,%•¸áyî¬6ûæ‰ÒØ×å"5iÔUkXlW E²ÄWcqZñg"…I÷Üö™j°c+N±;›Ð‚Íioð×ý—\ %ozwÓF?:Ô”Z°æ}FýIVÌó:{píXcto6£CÏWZ1ž°•à ΘL£ê®SÖ§¢HÇ»ö“è¡8žÛÛaËŠ€¸,5˜‘ÕbºµÑmÚCKIºµ˜©L(›qdÇE:Ⱥx2ú«I(Þ*²åÕ„¿6q:‰&Mé(Šr .5 ð×äiÁufƒ[rñ5j,d±¥†³âÜd™e¿¨™Úe¨#rõyšã’‘‚f™cFyòv*›Ä]áv)qšûÉÆ&óL)¤Ì“LËR&/8õy(˜K÷±9°Ô¿´œ€/=Þufú‚÷“ºÔYBµEhçéº Æe‡x˜ž¼d¦§Eʇ@èíñÓ.²enéàM=¬Ê•/nåq#'Av‘¯FyAÁ‚ –Kì_”RÍyËt¹-‰˜ŠÎ/¨T„¿¤w0jµcä _}³kxñc’ÂV;¢™£úŸ:è «Ü©3ô6½#Ÿ!š6†”Kú¿"ˆ)gëÊ2†¹b¸Äê\^è†!†¨KØåÕÃg!´¤h"(EËèÝd~É÷ocö’x9«~²BõŒ¶ª¨Še«D&†[S/YMY¦µÅÌm[¡’2Ž->ÿ›#Cò‡5‰ÿÏÿ¹ãÿ±ÓEììÍìÿ:IUžBª3A]•óí5À,>‰:±K<@â¯8Тt2e¡íD%(Å„Dô$$¬A£9Ãónñ©ªêŒöóóñmˆfÇä–Ý`Jµ%pa8ú‘0hŒ 7]¸8Çlë°Ò°?¬wÙìI”ÂôÃÂs£3RGŸýb¨m©ï&Óò!B¬_1h©gí´|É&æ:–Esè帴“ØôbÁlRg6Ùðåo³ ¤+Ü«{NKN’„KêËÈO,D Æu¢¼¦A†tlPêÝõØTÑmí®ÚsºÐèYÁ+xqÿܦ¯Uz0wd°G‹@µzÊù°Á—¡!Š/“¦b5Ÿ ·¶õ–&æ¦ÃlVvé )¾l¥ ¸¶úY}¯#+µ q×ËâÂÏ`ž«A€Hãb9ÆÛ"CöFåúïkÌæ±×X2 Âü¿ZcQ³¿ ¸‘«ÃÂ'TtÔð>ÚÉÒ‘b ÂÒÔ ÒnÆ››”½Ð iâ9uîæ½¥ˆ6³)8!š`-.FjëÎÆÀ¦·ìÃUÄØæ8íì ¤â¦ÛçNWünå¤nk;~÷ï½Ï½~×?Þ4øzq‚í;÷<ªÂùìöG`r:ÉH£ÄH;ÉÛ¡_K߯á]é‡F=©Êz;!?uUô§`6g¨3«çD=©ùìõD!ª p\ i’ˆˆ–Ø{6q£;Ex7œÉ¸ZÏÉ>„&ÊŸ‰ôjÏk¸Ò×e+ÙmÊOZ¶~ 4+³Ûj¢üã $rR"ï¡GkAÑæ1±†Ý$ä¼h2?W²£î.2·Ë„'µ-uÝNßBe5q¯¤e£.€ÓDnL 3.cN“šÄ­„ñ¸z6 ûó\’%Åo¡z1¬™5*Ñcu ðJpi?ÞKFd¦‚iù+úì'ö—ïÇü-{Ðkò\Ò¦©o¬jï¯oã’š´#CÚI‰›“„cw£®}:ýóQÈA§ì¬tP<><¿3QM“|nu+»öÕ)Ð9 LäTÙ¨:‡Ã1š9M—¦éef?× ¥g¥Åš'rss׫l!Ó.@!d éè`s¦Žã¥øVIS, "a¥ßå-`ÐTäNÌC»^ˆðæJY±—mú¥É332'W]2L Õþ©‘tΑ֎Ð`Fã͆’VKñçNkWB¿àß·!Ëcë:2Ž n2#³yð°æG8u“ËŒ´Ð‹·ã!¬&Û¾o¡§2ûÑÍÞ Öe!ÊYbPýîœj=NiøËw<»¯•* ÙðŸèR[˜ñGBb,FÕ „Ãã¯ì³ÖÌÝëZJ,X\ªðfL®ÏûܺQLå½²u`(lK' ’yi!ì!@¼ßlÞ2‰÷¡™°b`"ä×PåXlîSª<çË]‘»O  íË_”wþŽ ZØÉ¢pÊüŠ„‚î‚©î¢àP{Æ¥utuÇ4 ãØö‹³[¬sÄÈÍæ$Êãž%’`´H&Nk…ßûRT†&Xì‘#Ê»±8.»lï-0ïs£Š¿Å,Pêí\š›¶`•‹>c¼óáÆ¼¿·+8¨ì} *x)°Å½Ie{žXq2¯¹ÄôÝnAH'±û½_Z' –º×Wõx«*W%~xh²l°Öêÿ˜ñ§Êï|i´æ/댩à±àމ޷‘QG4Íä´$«Éë²[5Ê>¹+GW|m™?a/ÀÅÿŒ¶r‹åçìÿ(ôCüÔy'~ŸÒcùè–uBÉO¬L$פ<ð 9ÔìÃqÏœˆ]©•Ðr˜¤<òR> ϼ°]±™Ðt˜z$}ò.q.…¶ïž¹7P»r:¡­0×HÛä]m’žù7 »"¡ñ0ùHv#W@ıCeÖžY$’ÆŽ\T)=ðQ…hV’,dsžËxVþšB·M;‰Œéš_h%¨Ã‹Åç½ÜyMJ†âǦ¾â¤ós º®ÛcæE¨Î‘¸‘]¿¥ ËÙrüpÒþ NZ[âµ*+óÛg¼& s[ˆ’W5$‘°ÒÞß.’c§»Œ&HÇbêQòZ/%þ}ŽSøè•ÀM9Ë“LœÍmËE?œ$v„öf ™è¬žròZYb›ñœº•½„NxKÝDdß°úÃG3MõŒÊÁûšó.v¥åÙn|–ˆTèc¢WnB"ø03ëJV*¥¹†ÎÎv>Ìt,JkWÛ¸ió—fÕðݿϙ K‹ÙoKŽ4’ÐïûT#BM¥¬g´³•(wh™´þ¶)ЛGÍXNöÚª¤Tl‚‚ˆ2•„™<‰–·ô=òW5£ÑÜuT0_kÎn«ÑïÎMÝ•6ªqª«ÃÊbÐOÐÒ“§½Kz­k,Á4WϧF¨9šz]‘…©˜xª€²j(ü&×á‹l“<Éęʯj‚*»v1ÔÏÝdwH{zxÕ]`:,ޱ*³y5ÙÂN.øW¨ýZ’tnXņSßè|Öç2OŒŸ àå¯$ÃÂØ( ŽXž®û1§Z=šR†µ«R¬¬,Ãñ¸¥‘î/©ìõ>ú’vjRW[×Kì1Ø–Óïðx‚å•ò~¥T¦»¾YO¨v4¥ñ¥Ònÿ<-è®=-«¶¯4 ïãó³ß©b¤{fÄíP]Í6||‹£¶$cJ•“hçå|Ò2ª<­Ÿ#U¦|eçÿ”ÝJ)÷Q€_©6‚2ÿ¡·½ïôâ ®n‚"Q`$Í?¶2D¿5êLéœ Úk™"éÿM«3(¤?»ŽØfžÝ–)UˆÞ.VÝêœ-|¹ÙŸ `f>ý3É]!N8|ž2oËLuŽ0’ñy»PeÚâ ; òë;SIteK5%9òÅm’LVP‘ƒ‹Gþ·8ªä»_0ØæÙ>¥6kþD5`és6Wøm$ŠÌkÈăž X<^¥{=fžKdïSß5©­Y øŽÊ»02Eöø+ŸónJþ˜WßÈÄ)›¢=;†6ë^¥ÖÆfÑÓÌßòˬ6Ž0Í¥E9WÜòUq4•›ÍâÒÉáÙél4‰ë àmœVx?ŽÂ²—¿ãœˆ­÷Ñ`39Nõ™ðÍ%p:‚“Â…È5Î6˜ïP/³ó±Þà1bM~ jV§±!¹©¶¶¸ãÔÀß²T8‡1ï‹V0‰¸}hæˆbnVÂhdž…«^ø±|™´^ÜÿQžžpWáK¦ýôü”£O?l&ù³ë“Ìü¤ âñÿpöÎö_¶h’ŽmÛÛ¶mÛ¶ÓÑ7¶mÛNǶmÛNçöÌ™™º¿÷Ü3gêV=õÔçXµöÚZ»]›Ì±ý Ѽ¶ä%U€ÎN1¹_Z5ÃJ©8Í¬Ô…Ææ »èéè±wÉ'~Qi ·Ú×…ŠX;ÞÜdâœk:þ5ìP3ø²´9Q=ûQ·Ø0`×ë œTdžáìô¬¼ž,óþ3æšÌræ/o!ë-ªtÛØ$3fÌþ”yÉ.§Ðû—×ÜÕœ¾ fYÑE4×z¢H—ðXÔH£ŸT­Òé[ö’ª|‚ÅhlÝNüS[Pç¡}”IöíAZ/ï}ïhACç7ʿ›à¢;Oôß  Äô?€·…½½ó?UÕ´•QÌ1ýz@×ÕâÃÔÊ-ˈ†i¬–¬hT‰-Ö1­Â•šJÉ4Gÿ†õ­-H ïŠN=Î…ôé&Œ&÷æjB× ½fæ/˜/ˆ/¤æ›Î=D̺>¡/Þ3Þ:Þ_Z?€:î’ NâS÷Èø»Úz'&ü\Œ„† 02ê`0|ÛK}ÃRÕ3£&ºt,‡+=¢SWȺú¢ìßóÞç"ÈÍÈ=VH/Fõ†}F¥gß8®G놤ûb¯(%(¥@3d(j5Q:ª¡p¥M§ ŒRáLU¦¬À¦êÑÄñ”‡mKóLd¥•‘=ššÀÂ+â©-Ôtò ‰kãÔ—K ÃÚRƒcÍ`*lC%˜DòÁÆ%Lƒ ùØ’Ë‹m^ªªÐŒ%¤?­±³˜ s ÍÁöåó^KA±åÏ×—ð+/T…1d2Æ*‘¤“¸CudÅ8Z:¸sUQ\J„R„¦fKýdKóo|ò6÷´ˆÚÚ])FKi®´Ð ê¤»EE.H«á*ks0ÐʧK•܇&ÚKÂós4KŒk“\Í*T2PYÕ^þGf¸¶óáÐä[æ™ Ò%ùX1NŒé{H\_dc6Ë騫ÍZNÍEZ¤²wúAPÀþ;&jÔœ–«È2PdPöÒ»b"È[¿–µtyŸˆªº\‹ªÑW\ýÑÕ n&âË×xVN=n°˜ÏÚxJcv!&»}i¬™ý6GÉwƒ©;òC öäCÕâ&uwh÷$Ý'Ì¢·œÊ}ËJÊYh)ýŠˆÍ{xh‰Â’dµH•­m†w„‰`­ã‰¦Ž9&ω¬ÝüÖª•”21W’Ô’’›ìq™d ?ý¶êÎó™rÚä¼#ÕÌ¥öYº…*ÖMií6ìÞÞѶ”£özÃ7R"ÖT”UÜS3Ó»4iø)1úâ`âž}\ò­ñqýlÍA}$íßjá?§¤Æ·þ A†Ö.(‡Š%Š·2g\™T1AUóýî¤; üòŸ•ü.`!ìu•.r‡¿âËÁF<ÙÔ.:?.F‰ÆÑB2ÂdG|ý£É²Ä³ó6:cñŽB ü­Ë‚ðXbÉ‚l îôÞ‹» ³Ù_B™Í9™?”&þ-rRO u“ïÊqO  Ûhá>?`°So /ïy‹¨}ößîÆvç2$Òi]à›.14(ló;(Æò•8ðyt9³Z¼>g™ryΖÕ©=Ó~ž$ÜœA—Ìê “#¦Ödç€ÔOÁ1dŸëê~€ø§ Wщ‰!ìh!Ç1 R X‘Rç5åšëåÙ%.qãÚ?Tn›þ*·/FÛ"ý·ˆyÝÃ3\mšß#»"ן_“8‰AÒð.Jf¿ôXHª9„9/ iž‘ÛœA©%ãôu@/òas²&ïDWÎ8AFKñyäuJO/)þ,Qrù~â¥Aä–l ¨"·ÃÜ)Ÿãw%]‚ƒô\T¥,Ÿ*¡®üA/`Öì'Û¤’Þ[§~"…$óNú§K2î£û<0Ðâÿvà_IYÞÅÂÔÉÝòŸì¬¤ûo櫼 µÉnh`Ÿ Éj–Œ1|˜V–’l·@÷|4ÂÜ&ÜkéV_šääbŸÀ(²«—+l®É™_6oxÓkwøüoA§¨ÆÛ˜C‘¯—*ϱa“1¤¨[§êZ°†Jf®˜‘&D¸&²OïIæ®0}K:®Ž…ËåÈ|Šš6 åMÜHå#hDÈÑÇêG“^üA¥kJiÎ&O–ÉxØÒ³sÕðÛr&·©¨õ¡|3F«d†<­ï¢ŒI¢ä7˜zrš&î&ˆËcùÖâ'ûјǖÒ(Ê…ÅnŸOz'¥ÙôÚQ[qùŽDxSéQCþyfe×°Æé\¦Mpü½Z¿ž€p’8X‚hR:Ç+[™tSFz„ànzÍÂ1$2˜ttÌy-± Ã’}ðP+ª 3iJ Dý•›øqòK#}ùCo°Î‰í^°È÷<ÿðè‹0ìð·<¦ùbbõxX«Ä{ih–î›w ‘™Ã¦ ì~©¡x… b?Ûbè8,€ „,ù¸–mâ÷Qšùø-@Gž£¢‘H(‚éënÊ ¶UgmV/&½-„ fÂä¶€jª›­Ü±±;u[aÒmV·}/ÝL>ë|¿àçh@3¼šÃF@4„»ÃJ?/ƒ¡áRŸï!fÊw!Xå­á¨ôÏM˜×ãÈ`ÖóLØò²´ ±Îó.8Bß½3••b¿Ÿ;lÝ ×ä8Óu±'ý¾ùç>™‹lo¹9Ãq|&7ýcÓ9vc¹tæwÜŒ²Éa

¦Kö:R¡lP¹kÏ–ŒêñSÚž3EzÓ¾çPño”ü„Åi6 7¯ËàÑDêŒx4² r/gR¡É^q“‹¸ò/2°šðCk-¦Où¡ëºgÓc‰wmTOW0¤“#¼³Ÿäg›ÞGOd±/(Ú²R ·’^Áœ›¯¡×z72LÉÿ$ e~twy—µE Þ†²;¥2“°ß³À¸‡Ë¯ ¶*;ÖïiÖƒêWÐ>ñ >™v9Ïõê§¼ª‚À00…J]ØžC-pdœGóK4¬k›œ‹mþ`XYÎÞ Ý“Ãï߆igB…ÖJ9¤ ™QLy¶‘gÌzW‚æª:»¢*.ÉZqèN,“Á;ùÕ)Îù÷4ñ ¹ðê’Eœ 2þ³ØôZi³w ~Ž­ÀŒ˜qÓÕhƒaGq+tÔ÷ºÀË1¢ÂAÆ5rØE„u¡¼ü§êéÇãçi„>ÚÎBøÌ®ÕÍ.S¶×ª§ŒÒȳý¿b¶æL¯¨÷¿#ýÿÆì𭔇ÊÚŸ&ûûcÙIrÃ_½„šXˆ°Lñ„ƒ„åŒýF½¶i]Á}c2>ÈA-ͪëËÕV‚:ÒÍaP˜këØIR[ZÍZÍËF¶[Õ-¢Ú§í7²ä‰&BB=ô/9Þ7íß¼'›ÎÓ¼öðø¾>¿4UÈR=$ú[Æ$H ÖèŒÁ𛣣À/Gw¹é}[ñ*EwŒÅ OÝ×ëÕ;/Ûc7æ¨ß)H/Ñ¿ð¹ŸÇGGøšôY~#OÕ’}Љå ñõyôÆ”îZbAÜicÍìÆaþ™0¿Ë²ÈÁÀy(ˆÚ9@ô’T ‡9GÃò¬DÖKÜÈ%í¢3fÛFìµçº5ï"SøNp;ª7{j þ=Îå|ïŸx[%õ©ÛÏOÚE±÷ æ.?8–ԇƘ‘/þ¶<ؼ¬Ä͇ü}Fô~îS{8ý5ˆw¿—Øg¯Äç¬×ÿ.$ø{ŒCüŠƒ‰”8Ð9¾Œmù¼}¶[°øÓ£mu•¨W¨–OÕVÿ”µPNûbMhß7Z¤`w"ƒ©Jâ½n3ËuiL_— ˜Z‚©•)VH^»dÓEdy¥Õi/Th¬åeåÙfMÑ(k¶`³ì*'y¼hKxr±3%ø[¯Îìi†ÉY­–Wòf1jX {ŧ!3Dyœ­¹ˆ5o›®B1ІA‘ ¤hejŽ(c3ÌX°°/±c]šú¸ˆº ÃPýûÛôõ*þŠm…·EưÔñìFYDfpJÍXøÃá‚‚=#´Òg¡ÌôeHŠÒ¶™}Ôò©yÎL‡ùÙ÷²Òu|K©×è>ÎÈ#«°kAWI “ÊÍ>K‹ øÑ’¸`ºi‘BCdr¸ºEq¸æ%³DÉ…‚Œ@WuÊ “D•QÁˆ@Vù>°MÚ ±¹*´©úœ'8wE‡¿: ë X²(.‘ ªºyJoúykØ›içÔü`´-¡ò2¼¾hPÆYÄ–ìé¹~Ⱥ]Ù×ejDfD÷ðƒTB™ÞÁÒ*QIºÜFÍ!Ӣŀù·Ð€Î­)už;e$Fã dJz iÉ ôµpª't;¥zOÈfRí.þ&µb€ÐÁhá¬GFÞ®ùjÅ®M²EP‹dm›jþØ¡ªÅu‚E„ÅœJÿ$ŠôŽˆ[÷‚œÍŠOø5K¶™„JÑ.r0•Y¢Ô5¡ <‡.e‰´J…V25K"®w!¶¥÷R Ü£##ÐV ž÷¬‡–¬ÈÊk·L싳8ç¸DB¹ÜþëŽ@M `ÀÇZŒP%jÌä§ §'Œq hƒ•RÞÂXäFf¦ªíÛR@˜ÃY^É=üM¶½³Êƒ7WÈq˜YP©R‡9~'Ê\¶ØÚ½r±H) •|™\:[Ù1J ¤ó´e왞jW§ï9œ„Œò±©uŠgt´évÙqtSè3Ô… C¦EMÜ.à êÓ4Óæë!†Öá½Æü~R|ƒ/²¼Þþ]Y¹tÆ4vîÛœñ@f;µÄ¢ VÁd|ÓˆG gz­F­(=Jì]žƒuOFø¥XZêýOLeÝ)ç‚_Øá©š)±:`ê1{Q¨ áíej.WÜ.üVÜ”TOÆU6‰¹ý|bZÌYªfsI*V‹‹Å^÷(ÅEÖ¯Stu|ˆ•'´˜*¤ä$ÆQj)(ÆÍbˆÊÑØ0MuRU»`(Ñ¡‘ŸiÉ«„3éŒJŠm¨{•T˜À‰»ap‚\R霫·#݉!¢ÖË‹%”!#ldÁ9Ì71Ÿ¾ÄnœƒÕ¤óã`ß½#kaìÉHÅöÕe¢¼íØp•Ÿ!òlÍg¶wÁñÚI9‰BŒ$šNŽ®Yý+µÊbÕQ¿ž{P¨J‡à3@—S£•ÈË$ ¯B¨w—¯^y-faa3„3mdŸû ÏâK‰øÍAº6뢡[(ˆªÀíï• ‚÷È‘}PMŠýPª ‹P/Ñ)ðc}g½ó³íâçßÖG¼¡gñê,û€øü)ãh8i‹›#ÊE³9"%åm@ýÓQr«Ž[bäÄPŒ™”X.4nDµ‘ç”æ„¥B§ì ~D·õ#í/  ´Op¹Óßã¤Ó 6Ö8òÞ^úÇ6 ¹‘ãn²5PZÇ {hÄ—W‰pR3ĆèîçN éOYkÄšO³‰ÁÄ*ÙK$ýê×ÌÔtE ØÇ®E¾ †®<%W+ÊÜ7}.¨«¯ƒHì0 û- ¹JÃxÖò<#Å“¹ÀŸ¹ÍoÁ‘HÍ4JŸ¸Cär-Ü~*Õ:à ¤Yó“ÛQé ðÖ­o˜y+íÜÝ·x+í8µSá°E‹Þ¯ÿZ}ž*Ë®T|­hꎺÆQi¥'BÿyÔ×Å4\üºoÌo¨ð1Þ¬Ãn4¶f!œØ ”5¨n}ÕMCBõpU·ž?2–úÎ<‘¿t0ñlìZ°|GuŒ©|³)‚ç¾³íͧêÉ®+î—ü™»7ÓÃDv=–[ì“4ÖÐVt åOÃÈ•ÛsÞfîÁØqr–ݤΕáíEHí\6ÁÈìØ8º´1«-þ˜ñM¿ “YJio/îJäZtN ~–Yú/›yÎbÓNv¸å÷n_jr2‘)i‹\qðö>[5ñï ö¸-KÈãs ›àLj€nÚ5Ajàgï>ÖŸU~øc;Yn7åÓ_ŠÉåÙlé@f…#ØRóT’¹<ïº=oÂ?¯O¬2sßñÚ Ê¶ò¯ô çêèoÞô&¯†Û²×ô'¶aC8ÂÁïuzd·#|x ð–¾"ÅìŽp.F/$ûà’bqÆ‚2-ˆíJÆÚBÌöÔ2fô©¶E§Á°Þ–ʹϓµ…®;Ðo…}XÀøë¹ïù­Ç@œBñÈ@ÔeÃï+zÁqŸÚòˆÝäenȽCÆ.œ¬ÊêÄEø¦À^šW»kC{ò˜òäÄò!™ xlöůZ­î²¡6à­çÝz’Ù@ÁÑlIã¦s=à8dÝ(sEÚ.Èàæ3¯ráá>ŒŒÎ°­‡Ù4ÌòèL»…Œ¯‰©÷о±$Óº9½NEÚ3HáïHißd:HίÔ$nf dt§–IƒÞÙzZÍ'M7ÄâÀK‹³hqÐÉðT40ÇZ­‰Èߥg~¥†ýc…ìaÂÃÜCV¼ËIîl‡ñnü{lÕ>šøõê2z ~‹¼%³þŽ}ÜpØ/´~ìCnm„o05yڷΆ_nÖ\“ýØ}à·dYrtñþ‡/N-íjpàýWÙzð¥ íNh~Q ºm`#F¤g ÄÒ†—£™1½¶wÝ «{ “-{Ï|Pã ypö !1ß>ÐGZ”ÑO>æà\ëˆdD> Pd¬$ÍHÁðÊÕ—ÝmŽgß;*3Ï3ࢅ¥…þâ: Œi¢0¨8 yšÕ¯~:”Æ/ŒÒÇýM1?†ß´åRc´ªRB-g¸ŸÄGš’Ñ—JàX‰£Nr£á̔ԒÇGPé©8Ï' Ÿëfè’Ï«Pëj+‘,n@ÔI=+mÌ•ù‰ž-Sig2k_¸/8t<½kÀwçÓú˜WA¦Ušt¥yÉY9u@7LþQ ÍÿŒaù7›º/0 ºÿ{º%iö¯ãþ³ûšR/-8K¨¤Eè$Þ£B·Í89ª‚MNʺÆô¤ÿz>ã f°ˆEàûo'½eë“äºn(·êÔgkСJfX–¢B®H€8%çÕð",üo]p×b›û‚:õº²Ýr잎£žÄZ-'«ê%Ç(i38ݶò=N=‹S„&.$õº*¢ TlµºñY¢ × è÷†‹õMR'Ù¾ž¥GtV ;¶—c,‘çµái¥;ÂRØ4aóÑùÚ”•7løzûèÛk¨n²°Ýu»–{@dë§ñØý«žj¬óئ§»ö¡›DÌŠR»X0«È8F,PÎLÂcËèÙf1¨FãU²ÀŽí8ï J©¥¾H2´oZØ=Fl¬9SŸÀìÔûvŽúÝMïÄüߘèÎèP^AëgHÖB:‰UmIf»†JmMn vD÷@á*ï¨4ÉìÙ„.Q šSa¸ÂoØ^ †êŸ,$´;ݯvñ¥ý ˆî©¯é*,Ùc<¹Pds åö¥òˆ¾b€{^Ë7ù˜Uù²où9'ê­1_Þw¼j¢,õ8àe¨AÉ-Yðœ R³± *IU'êt1‚÷rxK¸]¾úÁ²gÁþÛ_]Šïþa†û˜P Eþ1–œý”¿ ”ó?jHÚ™˜z˜šü»}‚¨‡ƒ“©³³¥½Ýn·n(áˆ#ò’@muÒôƒ "c`EÉâÚ„jü ¢–é ÅžM0UßÖ5,¿ÏXñ×óè•„­i£ò”®¸W,¼¤k@¼`*Qeææõ}wyq™9Íõ÷ÿþÑ˪R8jHü†ØÓ ÆH#æ CD#ŠÔ_9m¬ »yתXe  [èXjäA¸¬#˜ÇLH 18„¥Õæ`³oHŠÜ<*l‹%{ö(±v§C/È*6Ê‘xÖZõ•’mrPº§) Á.ÁÈ9Ò (CÍ~J7Ò¨½`í2‰WÔ¤n5C L\'9¡~–ké¶ NäžÞà`ïQ†MUkÆ,õ\åhVR•«0»Ó}‹ó­Ê)’£®ÉaƒE^À»²ö;Ì܇8ü{uÒ:áIýÁ“œ¨´-»ý)™Æ˜Ýù9<=ä`…KdÄt‡‘ð£jC%<»È•wV…I,üm±™¼íôÇ5&·÷¢3Âwên`×ã”z—øKdÀTëí–Ѩ ㌛:㸎Ruý·Õo}óÓJ _r‹f1þ©»EàÀrvÈj>W4âò?êa=M´ä¶ÚÀØÞ–—ÂÔDÜÄ’¥Abüà6Ž™‰kúê ä\ã¦Ôí6[å;ˆW;#ék¿o^n„ T¿ÆH>^-b¯–Òéoˆ1™k) ½cº;‡·eù áÔBéXDº}|8tÞÉ4á”ðkÎAâ«`½|Zzlqòq}ôáŸøñæa.ãäòœÃV‡ºtí¯–‰‘;øýpü’#·k¡dù®ìu»#4š“ñ·#ÕyBp-© UóŸÑ@5aùT€Œ@ h5,:ÏMV8ëäΜ³UyôÌUdaý±zÞº/Õ«;Ò@‚á8çHú.ÛK,Ûlí‘ÉVwÝk¨poØ1Þú¡¸DÂ-¦KZ_OãÌ_®.­VØ4ŠÂ}öÍ:(Øæ%ß {§*æ¢ëÌ–3~ƒÙs~ÛzAr)¹ Ï±ÙLu-nœÍj,œ”ÇÙrå[ðâ_=SÁ;,¼€3§­µ¹î”j{lW;Ç_cégéZnº ßkl>û,9¯HˆpãQwný’ª÷.Y¹§ñ(%9,p/G‰åH^SoñÚŒmhv쉖æ‡êVþ “œ¬š«›„×jg_¾ ùTNÍýè_¹7!†€ŠëõE‘u}tÊŸ¥)†Š`5‡Þ "9ÃÙѶãb ·‚†oýÄOUgɲŠ(•ä r`_ÃÌþëôúÆW’œ-´}-7ãÝ“N?…cç1òX!…J¹‰ê0åÇ…[¬h&¢0è«WtfX’M“6?Ørd–öq\5¤*Kwìíá<,õ«Þó§À8«ï%WçæÓËX¿òʣ芸KWÐÅ# ämp ©Þ€ï¤Å+$õ+¨2v‰cªáù·. uº£oQY×3ozÓe3¢5›‹?0aîÞ¼«±¢¹äⓦŸSqõ@·bùl¸äºÈÛ5)íšsß~–9NŸ¾Ê(a{ÚÏës¨æ>Ã{Äö—bÌQƼŒ³–IÌôN²ü˜Vô./¶ýì vþ>‹y$}ˆÇz”ªb|>Qò_Oi_#Påyn²ÉÖè¹xT‰5ÉîUJ¿¬¨8 F¿?pÖtv¨ut>ðÖé%æ¦SȘnËzL (™¹ó4Ïx gæà•t;´z!]ÓÛ˜ó×ñÊ媅žá㯎ù/vKIøt[ãøQ™HŸõÂ:^ÛdukHäÐ4Â!Ø)%¥¦‘GN­ É3ô‡±¡Ÿ]™k×ÃBfZ]ødiÉ a:wh«‚o¬û‹zPäobNÈ*y«PCNÅ/À͈‰êf)\`{¾Æ¯JëÔ_ÿà!rÕF<£¿™ÍÉ_.bùŸòÐ_æQv1tquþN’²¬ý‚¢oæk!-­¤κЛ…$lônD™H>bØ.âh~«lœv;[;ä]$‡P8døþ_!iºâ„¢|ðÌ3…žÌ7Ñlüþ¾ßÀ0îæ ÑÚ iý¶xl®§ˆ§uÅ-‘xtϘÇÊñøn" ã^[>ƒ½9Œ“øÃŠE\<¸Ð8k±Œ«Lç‘/‹‹¤>ĉ*H|fuB5ù[h?°“´K?ñ„ðáÍŠH?`E‘žÊYU÷iƒœõÅ”x 8ÊðØß¿«UnfÚè1µ˜éæºñ]û[qTÅj›$ÎY4ó/måìL¦«VOû„xb}P7á e, >ˆY%T°^ŽÄ%ÈPê.É-ûVi ~ê%âéGFÕr%xé-QWå Ì'0Í^5î¡ZøÖ­éxñ%³XºTMS’fëw gá$å¦jäÏì*ª›w ±0øèsðÒ\I Ï ‚éùwþçHŸhŸ ÞT^‡eFRLðëǾ£kWŽ€A§½}äé>é™Â_EMHt–¼äêÃé‡]ÓÒäƒÕó¨Ó÷w fqœ?ì þ®ÁúÍb”ïªÞ µ\$«î!c~3~ ]êä{D£gÖÍšŸÆÖ p¥Ö±^áykÇ”®¹è £=ä±GI™Å-k2HpSb±jƒ[.µjµ g±êàUÂS^`µ|£M—òà*w™£{kx0’ôyš¸'tåJ÷ÄàpîŸ@Ý Òyò¦ÚÈ& 8á´¥ ÓÉŒû%H×ÙµP°óϭȦ~ãü+fùÃr§yÿâµê¿5iû?`öž¶Ê›*¨~×=öèM*ŠŽÕn?’Õ´,|5{/ .•*å 1 QXÇZ&^ƒ>÷C+и܆ý\† Ž<ìàˆlJ—¿½Ÿyf8_8O6?¿füAÒ_ÑëÒ†J57ã4RÈ` Æ‚ðMä œ ;Y„}IÁëK<~*ÑT"gX„›ÊÒTjV™ß¡ ä Øê².·_¦´·°Ìô¦`M/Ó,8ª.èªGÃË|3`5·b4Wª|‡ÎÒÆ[*ƒ:cö+¸Çs°#ÌÖt4Ú«;DÖa2ò¹äÂÈú“½Ú÷¤@Ô‘Û”`GzzJùTЄYÝ“2 +|z]ÜÛ+­“æ³ìίu/µʦÙDª-ºìž…¿Ç®R:,ãŠZY”ÄÈ|-0•¯kä8·ü†$`¶Z¦ðˆÉr7özj`ÜÛjúáLóå :».¦Õˆ)ôÖ62¤ËªŽ¿'ò Ùq-ó©Ï,•þïù±?a¨Î¦©Ô[Õd~í)}›Ü(Û¹, fjÔt? t#Ã#Lò9|&Fà“?ÞàÞü|dW–§ðæwƒkíÉN`¿ó ±Uò"øJ‹e—ñ%›+¹:ý¶Æ‘Ÿ:¯]™ $eÔœ¦ÛÕèõ†otÔG ŽÅÙ§rŒ:1ßsu›¢•Æv´.¬Ûn_n.ò9bVZxÚ‘§]s-*ª¯ZÃà°ô‘’:#tpÎ'=‰¶Ú-QŠ›©wpø£x$*KÆß¬ gM)²ªÚ–P¢iâV–Zvñ^õ˜Òu~Ôp]c Åwåó¯*ÞÊÿþån÷éb9§Mïsc±;(ÃÚ1N~î0šxÐ^*Û[øÃ ¢ï´\:n^`àdõt8Y›âL‰×‘ªu7¼Hk"Pdm¢]Íjœ¶kÓ ¼½Ãj¶HÅ€1úd:Aéâ³Ç…n8óÉ×vîkÌÓ·ÅîØªE×iÌsæW‘˜Œ~“|D†ú….;B%Åõ£:¢¥Z²_zè6 x£0ž: ð©ÿ˜Ö~DÕ;«§åƒ?c2¯@Êp‘HfMâÍ€ÉðFÕ#%ä¶+Œã|äf=pDó­•âKõÀ%ÂÜ.l㻘"l9?Á܉ŸD&Ò&ž”É­œ©Ç cû¤žþ üD5g÷HÏ#’þœ@ÚÞ‹sç8ÌîúõBB¿ò=¾ñèaJ€t;·œ¹_É„»¯ƒûI"º‹“ÃâCÁa¤·èð‰øÃ±ÙãPåíVÅÓG "²Y²âBŸSÐ5¬#K’ £Ä §ظ7·fµ’ ‰øDÌ(~fDôµ^þ0«MdTz'2¤¾Ô öb&n“C(bQ‚ÿ…ágÝ] –yØ‹pEYzY+_~)ÿ/XVúØ7ÿ”AR–…°7~íBþ‚©Ôß—ðßÇ¿¬¨%«ê:o¨ ò6ài»%§5åÿ|³`´¼$MX˜Wʘe¤‹ÛEì©5]S‰gJY'è»ù%î`¾ŸÊ4ËaøBåxEÊì¦Wãör¹VÙùRõxãïÿ E+Ýz§âŽÜ–)„ ¦w]®!½‡¼¬ê“5{]¹*1÷LŸ[Fét«ŒF††°ö)3tBÕcà¬<”A¿FS¹ªv‡–ÉMÕ£v—¹SñJpÓ®ðE€üª(Ø@êFë/Ÿ–èrÿ*‰)»·=ÕÛ˜ý¸xñàØ`ÑB)¹GwrYÒiýJ;R†ôÛ¬)¬ãn!pæ•r÷« K´sêJuaªäö öŽip÷þï~ kRìªÇ¡BvB™aùIìX)þð…ÂB#À–ªK¡ÏuEŬPÙÕ“PMT7‹:È»æBoþI9®'e¨&+ð5.cïjCwûG={uÞ@Xíz Þ¦böL Ú ´]²G“·Zy³v}­¢¥Tt[‰EJˆy£?bÜF)ö^ ôv6MÑ%–gWÕî¼bÞ!ø…ÝDy /[uw¯^z:ÅYuÆTP«ŒmíLÓ²í¶ßgØ´ ]Ú¯Y…>8°Æ¯sê4¿l%'ÓyÞJtrÏœ Ka48ò èlÁ:÷†´|egל€˜CÎÄmJ£–I’Jƒƒt7®­€é7®“ ¼rkv–Eõ¸²¯¥º^Ö”÷EŽŠk¢ÄJÃø1ßÑnâØL%Eì”´ÎÕØ êçU¾ŸAÓ‹Ÿ‹øc[ÂxÖ mÃÍV¸êþ‹­ Ñ|õ*Ä¥"/§¥–i¦`©ò&[寓ҋó–i1§ ]æþ̯i®€ÍÝé]æäTN®’ž`g/Ê)àp¢oëÊÔ,?¦ïŽåF¹Ùט <Oîà™òÉé9Þ\ŒTS؆œ=¢{u áÛ—,xóŽL¸{*6XZtCS’„Ń}fKä’ÄKWÚ’~÷Yp=˜»å¿Áì£z‚Ó¦âÛçÏ!bÇφo[Gå»@FKZÈÙ·0NÏ®!b§Î¶O73öÍj±åCAeÛ'äñüÌ—„êÞF^ b!Ëÿè—Úí»ÌyÎÀ ë›=$zþJõä•Y€ïúb~>P»8¦¾øÛ:©8ädä)èÏBi`…‚½BypÎÙ& åo4}âŽÜúsÌwi'#̬.c13Ó!ç{1VŸ_™LÃÐW±Ó¶Uøn¹,ˆñõÌôŒÂÍæ¹ûÄBgTžËG}v_ÿè)H¶ ›aýUÞÚ•ŒÀÿ,d þ·üŸTÔÎå¿ J”þ×ü¬YëU‹©e½ŠÊm ‚ƒwüY‚H8=¹X„ Aé„F+]ç”^Ø{%K<¦Ï-Äka”¹™õb@*³y玻Ýÿûµwœ¦î BUQ?8㬪”nô“ÀÄ„a‰Ó ?Êɣ̜Ô½bí™´Ę÷}P¼hÏ]½Ò9Ì,YXëK§f¹D+0±Åã{`÷²^LqsÚŒ·ÅJº{/¢‡å “d]iD¿ H‘T ~Â`=ù $ìvÿ`çÙsľ}éOî‘1Ê #" ŸÙbH¨ˆªç¹†áOþÈŽ2¦‡ÅÖ’IæK£^ÒØ²œ¶®–¸É¶ãqmÍæŒž*<‘gz£”!Qï¹U®t–^WtÁAk²Iª7.i‰†_¶áŽ›¾}|ßb¢™R­ó±Ôÿ¹À~ò#µDëy!Û>+»¢Õ+@”"!æ–»žÆšô9så*ô×ͳ·Í C^ËÈÀýzÎÀÆÏædÀ¶H¾DÞÚV –4o~úQµÄ4wžÕ÷)€“‘BÒ)è–xˆ-²E «1c¡1 Ç› °”'cý²‘È’%÷”bïúæJ¥7›WvEc@<ê`.µ½d$2 @æŸî­’: ”2­hˆh—Š…fs)EI~æ¼?FK¯IÑ¢wqOõ2 Þ^¸{qTž&\F?O*‘`®ÀúgŒ:§`€âúÿ »ÿZºrGQEý#—`–àbED[¼ˆ³Hh‰) ×n#Ý<:dé´.—>œ.)‰èû°¤žë{ßLJšŒnJûµr/Þ¾émi‰¾Ê“Å™úuu³áýÌ—èÿçë hà•<@ž±Ú@¬ÏÄPçÀ.àGº8=ŸõßÉÏ®ü.̦‚ƒr_5¨ÊæñS*”…Ænþ¨pxµ)l$”£U:„n_D 7ˆíA‰õ è¢äBÒsY>gŒ è3Çü2«±ÜzŒ]ú ùè Y@Œâ„‹Î”Ë K!ñÆîw°Àk )ÅØgDKÉì”讦F¼¨»¡ÑÚ{‚@®»Ú”$ÉIÀH¥©6×e¶W„L–Q$j¡2Ÿ–}¸<.Öˆ¹UI'n7%"oaf‡·\‘Ï—ôŽìÐRôf’šœ§`,ìd|‡b%)×CÇO˜ä%0Ë+À¡F1™@!Ë,×jTÛ—é‰IEõqVDºöbÄ|\M¢ssñfÄv{©ô1åÄü4ÇFQî•/íä`JQ®V€‹0Ëçx'uåõ¨@%,µè·J^'À„Þ¾=ŠÓõæm÷ËôO+íF¨­ô­³KÐí‰N9+JÀšV:¸v£úº$¦*ãxBì•TkÃÅýU`ðt[‹’¥«}ã“ûÕKÞJKd¯„媖F~õtƒ>ØÞc/)Zûõ¡«úzãY²ÛÇyjYïÞ£\ƒš–ð’1ÈרDv•™e—V’éJm„‚«‡÷Í¢°Ä¤Z'%… ]OOŠ*ë X%•ŒB(¾Vn¯öŒ,tŠ9 9†/ÉF‹ š¥Õx[å>^‘ʪƒ ®Ðïˆù€Ê‚@Ö€…γ‡-›Jÿ’®Ò‚ˆŒÀ*¹=j´Ò;!,Ÿê}†íb˜p`a¯Qÿ *rGÉ!OG¤B ·Bñ¼QwpUíHòb-ÛqÕÏSŒ&Õß¿Ê ÷}(¢­Ð®ÛmŒ›'é6–y{$[Ð&t+˜¨n'|’íjϼ*)ÜÙPÏŠzz¬´M-;›-Ï4†3hJkÓT¼>tÉov§Ç!,2?¼óê=sñ¢@5-×ÑÓ¼†`ŽTÝ4fFk¾õ¶y½Ä)0}9fÍéùºØñD*·Å6%íP½†ÛÔÎ>Ã^4mJ5±±°!,]# ½ÜÌ[§`ùÆþÒzI ¼þ4ä”BFcXt…qˆÍ…0âgñ¡ zötòŠíM$ ÃŽ³Se=ZäMýB˜ÚÂUžzAdZøƒ¸ò}`p’ö„¬° ŠewB| Πܠr)ÒªSvœÿQÉæAñÈ]Ý÷À£‹x“ß úõ[,‡#FxæF<·ÀœAæ³é—gürMöÒsUÄ/w›ô^[Ä/S‚5–瀻2‘zÔó9_|ÚßIC,ÍMÞ˜4N~~v' Ž¥™RÞ}ÿDŽÇå©C„ç.*È5 }\q}\ItÈË fæøø^MäÖïã½× {ƮߡX†¨ôƒ'»<éfõüÄÒõ/d^ûÂü8ö\‰ ›Ÿv.3ªÉ{û%x»…íÁ-'ÏéH“yj9ì¿ò+véÎ…âµÑ¯ÀœgtèÏ9ÄŽ7¼—O¡W˜cÅ¿X/\”€JB2T»ç;á 0ÝÁ‘×ÃâÑ\-BãOß|4˜€O“cÆA±?PýÚa ¸¶þ^iÝ- ‘ÁN<Š÷ÞéR[¼¢=ˆ›DçôøµJwša4Þg1g…üox§‘Ãÿô.‰‚Ÿù›2Bþ·†ÿIÇʦÿjÑ­jëŽ"ŠêW"Ù8æÆX—¤Rà™¯§’D‘_¼Gõ³oÿÂŒY²Õ¼Ç‚õî;Xß·¯Îù±ðäµg{-˜ÔeÛùd›{¦ÛýzâÏÇ?p #B[CÍA»‚Џ$AUæ ÃL5kx ”–`ÄQì í¥Ž¸|‰ãZú.ã°ªò4·‚r? 0!0šsƬC§µ]ƒÔ¤Sh§µ¹G̼ÆÀ65¬KäÓ¹Žì“nè4㢕e8ì4I¨±Êø2 6₃³„gPc&¡”ÀëH¢äwbÃhBì´íli~V"CçiµcOY@XôUÆ·›Ì¹yþUìGJ4]à 1x'\¨Jì'œS±Ð6ÜzãðbºP GêxrqLé–eZr»"5ó9‘¸·Sf žãþa•x.`ö‘G·xëù„•²3G5 øÕz󆿤›°ŽGúãseJµ™”ò%³´Ð{|ÊýÄ ; ½³˜†V†öcãÓu-Ù}ñA[N:æ[<”g‰nÓgÐxTRäÑÍr÷¤Î)=¼$Àdšj™u¸h(=–¬Û›sÒ°±è¼iwö+[d¬r«³@êÊ÷î“ê=`O>¨ÈèU:F.ðÈv^|àNæn1õ%Îáà´= Ñ™±§ÿÆÆTìžþl½M@"25E½S¶ÕŠÃO¸]m°KEU˲€.9‚NP,º¨ŠÎœá3Ø æevðÀLœªšô}¿üTDáNe^~+áP tS)½|&´K;Š*5X¡4„ØQN/õa¯n>w˜0ãSñ¥Ú°µyŒþ¶_ã«}"‡˜ÊOvÉŠwa™‚udÒ:“©)¾«ÎÄ_f|—ó‹dHŠá„ï$úªHáÖ‚†Ø³èø¹ oÿÀoà™.†ÿ åìfHujÌX'Ùg¡¯~|fÏ,Ë_ é²&.rÖPn;¡’L‡8žníµS´€Â%?Ë—:Æ'N“8—ì;è/HÉZTâGt:ꡨ՘6¨JZ/‘Æ©C8-Œ1¼H¦CîÓ!Joz ÙÊ.âÍõ”_ò5!#…_ÖrÜ!$¼[ÓÇm¾ÃQø Eq|pxRKq•¢Ïˆ½äóó]öqKÌ"JÉ_( öm=ƶ޲­¥ª@[vdþf~=­ŠÿŽ N"i—êä¿ÆN-,¾°wÃJÎñ~v¾“iÉæb}s£.L?õBƒád÷²G"‘ö`?L‡Œ³¼l,%™;9Xu…LhuCjÕ‰“ÑxM« ˆ"fŽGe!²ÅêV—¯ƒF€¥ìa‚˜‰N|qHàd㸪’tˆXd¾$"=~Ø+±e~”ÙÈ*E®FÑ·Å šQÖ§{1'­ÂÚÉHμzëˆÀ“o÷oo÷u‚l£Üññ!ÞÕ@¾Jü¯ÁÄ›˜Ë,òòK.ÚÕ”ÑÒv祰Ú%¶ò myÆômX•ç®Eæ?’—͉ùF0ˆ{Ô_3 Ÿ”\ûf¿eévqvö¹n˜µjhÌÔÚa4à`>ôûŸ¢[E\ŠiDä€hiW@è'ÿŦö<"oü™N’µ×¡àŒÍ/˜?]³ÝlΫW?Éx¡Ä1?æ¼ÁSjHMí2þݸ/ÝëÐù§“¡±my„%'ýãm`+* ÎêÈvÍsUxÌðTðžV7UºÕÛ™æm4QŠUtAëÊM Î|_¨¼âzjØè` KûçâÖøPF•f¤Þ笞m uR#a»°èšTK2­_?ç„U°ÃwWmœ•Å|f•âá¸A·,:¾2b¥Oé])“'k@é)Ì„˜sÜ2›þ…&¹YþX ¤Y™ †c.yà阻åRÇ_nß„"õßlëï7‚i]Ñ·öa›Bò.Ãë7YŸ`ÿcï¤Y·D V—ñ”mÛ¶mÛ¶í.Û¶Í.Û¶«ºlÛîé;s?Üwbî7'NÄ9?wjeîÌ•óÖEIž4³`ðÕÒ;0Ç;rNÛ‚fªÂ_þD†7ê èºÌïdSÿp»êí­Kà­Î–Ù©„`h@>à«‘`¶(c%³)ÈbÁäðÏh1äßÊÎâÈ%<ÃM’C©’, Ãy MİuìHŽ%…Ç?Òi%0{ uZš­uç‘àæk†»– ö^…cÏ—_:öÔ†—ͨÏr"š®‰ÑÍfz÷cÁ‰åyoôAz`ø4ç©ýÐÂïÌä\g\yÅíüy¥0¸%^t·ü@‚;Ó7¿õ8ÉvÉ+ÿ²YØvñªêrë»)*´êËç¡F-^MÿæÁ¾vûÌ!ÙуÓ?êÒo|^Ãìê)Sò ÒÍîC×a2A†ý>æ…mÒ Û G#d†û4vHåÞs‚·¢0];½5ÐáRÍÝ⇇}üëRYåųÁk*í üé)î’HÙ Å1Åo g&Öñ´ó£SЇ$³å2ÀXr'Âldö’-¼Ø€3f¾îCφû‰ÿ?#ÂÏÔMp Ñÿεþ¿EW»ÿ{½ëÿ@‹ÎØË˜¼ê‰´šZ¿cõ#$e‚zY„MÓÜvÙP»òxš“Ôž9OµNH÷»ŠBM¸fÀ ¸faS~Š™LI©ú¡þ!~p¸7kNN`]bî|¹Ý¸Ïrîø½þ٫Ǽ)¹c+Qvâ¤Mc¦äIxXð! AOâ –¥a“™,¡HË y¬+&±˜3†9K¦KN™Ï)!¥>òdÒ¾P[>îÅ!M$DQ£ËÓ©¶ÓŒù ¡'¶QÌuLÖìãxØ]tÍfOq‘CKð+fä/fm×Ój¡:Ë3FYGãoúGƒÙ­Û€‘E½ùnÔj|$©ÏK¯Û=å©ONtf§Òª? ùF«Ôæ™m¬Ë*-´sÍ4x^-ìŒä´çîKÍR’r5Žr^ü1¹dɤ³^T7[©óÛ:ŽQÌ/nÛÃô)´[Šâ,éàK]¬Gx =m;´—¨ÞÇ=• ŒƒPĦ‚MW#‘[j0¿‡• ZÓ+|dÛjo8›«¹Eêa|’'ÏvP8ˆ±Çx¤sÓÖóÅù.+IºŸ®Z«i–´*þ™?ãì>}³:x~Ü\ÈlÏS“QÓ8Xˆö×±pPÙ9R—î“Ô@’1‰\ye€¥ ¡ªmÔÈu šõÁ„XÈÂ|š‡Aƒoà E§òl!®µ0%(¶á®ðu]£Œy<û깟ûN´VHmkæV[z-Ôr‰únƻ۩¸®“P¢ØôCçöICÇî%:gL¸ß}Š-nTìBç"þÐwQ§X‹ªB:4«ÛU«ÛKˆ»Ñy0ó›e•^?P¾&¹øâÚ“Ü™ƒ­:ðF°£~‚ÉC»°Á˜ 3ÂYÓŒ FÑ ¥²:/QªŸ¸Nnø”«“õ­{õÂz¡S¿ç›zÙ5+ý•ÏûÍX¾K‹¹ ÞUc€sCA±ÛXv«ÞÞUe t-'ù&L')¼Úže'>¨{=.šÊºcL»™®¸øH^ ÞˆÓTƒ5ióËX\%pà#ëþÒû·lÛˆ´SSŠ«ýÔ’Ž›õ ’ë·øogÙ¼Cgq\ñÎSë©å(¼X½Äæˆ[к+cL;¼«ùG;³È5 ¡u÷È3ùÄœ[¥0RÛJ]ZÝv\[¶¯×| µ•+q[0sô³˜?`‡Žœå&†fK¸À›ÒåQ=ø;vÊõ^ó4âšPùr ~n=¥ã‰u]®Â}ùõ€µX2•Û;cðŽä|K~ž»ÎAx/Ôiÿ©íõ³ _ÌjŒ¼-¥Ï«,?Põ“.Ž9O¼>jÖ×c½R)0’UfØ?DfLNÿþÇ»ä8çŠ=û`¢+}.`hg3£¡A«n‹Ý¢7 úÝ¿iG0¬O–MÖ¶ÊŽ äBש÷œióƌ㾹ìzÛ¢Ûå–o™É\ë¯k؃Jü›²á1»ƒ€?!ý¶B¡Œ ò¿¼Èã‡%«G,Ÿß1¯ùåÇéëÝÌ)õŒ_‡CÏS5³|ý\GoÃBýÒ _À3 W ‹õÂöÂS3Hã?²á¹4ø1š¢›Ü^ßWü´˜ô¦ö™lI$­46¦ ­PÕ¦5Ä´Ù¸0š÷Ví:ŽÁu î=‰ôuÀß~~¢ ^Œ% :5ôËjuÖ†˜õ«kDTUQÃJŽ7ôŸ×k¶l¸ñSjâ”&ݳäBA^þ4€EFÚè¾nªºø¬­Ûë×6J¸ý±ð“ÿªKð«Ê1§cgHë{.>øDPâ®åççïøOíÞàOãâå6üß¡›ÄW^-âÝÉOøç­Ø¡/BGþ¢Zdsáýq+8?¦ްYIï?*øH–Åa¯² v7Ö>'…‡³ ø—Ê‚ßi¬ÎÑóÁ³ ¾EËý‘Ï£ )z^"òþQb.Uƒ3ù$ Dõÿ¥\-éÿ'ë´’©Ù¿”¢¬4#‚ïÁŠßo«ýæ]YQ0ìá""‹_ k+…Í»’ûX«clÔšóþ%äýAü}ø¤f«-Ï»‚ÀLI/Û2‰³u/ð@ÜåÇ BhQ˜4¦ „2«òÚ9‹Ï’ÞËÝ—Ùϼþ‡S¦'\ñ[ä(=Ьê£Ý&¿d(¾ ±ÅkJ}%%ð%HŸû××.•\ÿˆ!˜ÙTˆpŸëGåOÖñ"¶Þâ^?yø(Èœqc"­ØŽÞ42(]¦r s™dvÒ$V_¿àû&ó!·šgS»½”¼È¤ï¬}ZŸ¶ãƒÅZŒ­ù»éèGý;dƒÃFTû³˜UV•‡¤4–½‡Øik1ÊÃBK-œ¥Eb}€¶búý#½‰,œ0ÉäØ4{ò@ô. MÆt–3{Ó ¤›,¹0Â3ˆa¥2­sŠ™“Å]ÜÓ ž—¡~™žØ“‹²&Z²&Á…ÎpÚÿõ§ß>qŠ¿²Âþ/Ô‚ÿÕÒ$LË  „Ì •DFî#CŠˆ¯b°ÉFà > d.âÝFš”w&S"`ðû˜¶cý±‘\ýå®»wƧ.6`~:㼯õéÁ~°â0¨”¥rÆ¥x s!q2¦“cÅ5}§›Ð¶'D”&¸ºà7J–¦£€2ò¤¹bz–8 dKg;Ñ)uÏ!¤mlÚæ’/‰á¢ïlŽM¤2^E-¹(ÂFí_8¿ƒ‰2¢dR¾Ê4šÝ©ÈÇ¼Ä üØ™:м2Æ¢Þ L€o»Øþ¼ "˜£ªqqkº¼ûE\ØÐ=~ÆGÿÖ;Þ È^|!P†G…a2Ó¸h+•_ ¢yÉŒ–¨Û¯ Ï§f-ïrWóÇŒ™*®ü¥sl»•ln›5º­‹žÿh»cM¹bì‚‚Gþ/©ýÿ8vgËA¸lÍñöQ>Âôë!»’\†) MŽú J!iù³B¢J†å\JQ»o ›»¸ìêl!;=[`’LÎtfòÚÝmU·2VV»µ€¸d§×â@ï£=_§Jz¾˜YŠ×jôŒ„¬nÈÝí^sQ³{å:¾zpúñix•}ƒV.2çn:ýÄÐxª T»‘é¾ÀëM_Z–˜ ðïÑúå9xöhîA?g ",>W,‡%왵¦, Wèh—x% ‹Ÿ“Öó þõbùÌzÒ#®,3;J_&¢Oö8=h{$©„•ri÷¶4à¨ËJ“ùÕaºã™«wÓøÝ?YÎ'Bå²–ú©ûoò8æ%!—;G±®—ig¸ß*µy*xr~¬ÁTS{üIqJ‰~Í…[—ÔdlÐRÌSSCóCö}+s›—‘pcsó69kb_~j‡¼ZcÏ3ÕU· z4 Œ³P:*ýEÒ®«—7Kó§8ÿïQ ,¿\ Z­¯¯ü"}˜BÍŸOˆÇsx{¥,Ù£ ¤åî3’‹Ë—Y´˜MΧÊ÷µÛ²ÊÒÛ}˺þ%sÌ6ñN¦ þ¤ÛÉ©Uˆ¸)7—òó©ØyD\ÒäCD]j¡%°þ$íçx‹>âvžÎÈ+NIP¡Ãb‚›@AÜBºf„O(•(âÌï;ôS<²4²,e?ÇŒL ÐßjyÓ}%‹/$`ÆÝ á¡Äãx¼²Y°ÚÝH©ÍF†UK Z0ÐofÈ:¦ ·'œ4ùd‡ÌpõMÙ‹ž­ÔÝ«÷ðËÌ u~€ñý–º5ÆÕ‹©òhI¸@²j¶¡i«Mõ æ}À=¼L ;ÓYë|ÎÎÉ¢~fÀqÚ½žä¨ƒ•ϧÙU–`޼è;‘-0B±ÚU,75ÀaîÏwBQ 8H÷DSíÑ$ß»ðeWIB1³GÇ…5.GãÌÑY‚ä X‡c*×JÈV5N¿°³›Œ+¢ ñ§ã¡e?H—iÓIí¥¤I=Ìö‘æ(vp„–§Ûä‡ã?Kem§ôoOîHèÝLíÕ™˜•¨«uæ¾UÐÜ"FÏ­sŽ3,ÙÕ_-ðzã.‚ì £®¡,9Ý­ø°A d-q½Î\`dIVx8ÙSbtÚû„äù!xŽ8UoΩ‚Ûèë;úcêÀƒT Qˆô‹%MOK„ì´lúQ‰º»)¨ÊΫ"¯“¤Û…ž÷ž€÷žÄ×9öÛ#e6aCºM­Í!§ü¨ ’;¿sZ‡kŽvÅ€¾¶¤öq­÷ÊjAûOG}RGSâ$ÝehT6ü¾×„³ô¬üM¿^7ûÜgqÚ7|‚ØÞ¨¶ ÿ  ´^ªƒÆÜzt~­ûTHöÚ ‡;d¹Ý`™Ã –­¸~Dìì·Ø5)±“§*tÚX’tÐãñ9âkæY‹«i™¸‚äÄd Ëz¬bN ‹pÖÀóåOoÖ ü¹ z•GC6BÈ cxÖí¾G ‚!2û¡(,Ûù.N KÂÐ/Ü>B€y¿v,˜å-š¦ž¼»ç‹¾:”8Síú³T8éÐmbO@¡”yÿgD˜Ggòûª9IôG#…+n3² m2¼ÒÖiµ}V ÆYzw¥3n=™¢-ÎlNÒ W,d¶¯Få¦ÿª|ÔЯ¶ æÂ¡Õv…¥ ˆ™QâOg ´&òй¬F›`ma´¼z.#ÞÛ ‘­ „¹äLv°G›/]i^V.-¯­³³²‘¤ÖÓ‡IQ$íìä‰løF߀?ªyÙ;d‡Èzúç?Ø×v¾‚mÿ"!o$ Úÿ‚„þ½¾ÄôŸ0ÈCÙó¯lfRišÐ†¢B¾€¤…òñš·‚ŠtºBS7IÙ•¡¥\ê_´äùûøËÏô|©àBe©E@=ÀóbsÉ3k¦3‹=Ûý¤—oÿ†›\r‘¬àÁó“xçˆ÷æë¹Ûóž?.b.Öÿ->°„ f7ž'e²>ãn?Þ}—Uõ´Ïº{íðà›Ë³]¹ÿÂ7=¨èþ¼½k>Š}|Ö}üèÚj3ˆ}òˆzû\d[-¦õWÕƒ|›”³G»ßÛGãp®W=wûdøãèû=Å ¼d<õk8ü4ܺ#ýu͈øc»N¿/Ò+”ç[1|ÞÀ´Üë\¨ü䤹Ï_ä‰õ´'裖ËGž6+Í+'ÓC0Þ«C¿÷ ž’£d·é'µ$Í%g5î¼ådx$Ã>HÞµWƒrŸõ™pDºÙ0µѱEJlØ{s8ÞbÊØ¸P÷zŸÙ¤VØB*x³K)¹2p3X´»”ß#IS1Û|•=Ý4m°]"7 ”˜‘ղ̥™ûI}VÄV6[fëù—˜Îl!Ì”³ÈËú)ÔxÕ¬Ä&Ö-1BO«Ðï¥g/b; lKOiÍÅÎ)^ƹv³¼Ÿ“ÑçqŠ<îBR÷zá7sá𳥤ðv£€áíª,•õ\¾ðJòÓ¨¯æOÊ4¢…€ÒßKFá°Q©K¨"… ã3ÉÑ"É mÑ»À«ÇA«¤ ­?µã^k”¤IŒˆÙSo—ÜNRh|×Λ"®f+Ítâ´ º·tÛ¯¦#‰…c4MxÑ&Úã"’ë—E« L'œQȵ3ú'ÍD¦Š]jí7DäÿÂ(yJ¿ sÅôý›ž äOM>›ÓE@sŠ4»öw»r09rߌQ@ -éZ2E@äž+ð¤¹dÖŠ3nÜ1l3ã†å;sNôélF¹+3R½¬“¢ƒØ°&ƒˆl##ªS›-IijP²L¦$ê†úÙá™)0Œ“­1YKIL‹…˜¾š#܉ªMŸ*úmz¤l[€)J:êUh‡óû-kmùmnbãõ—Ó&kµîêQ6~ª÷{g ”B+h+7 &®#ẺUÁÏ!W•Îà^/fà«L¸¶É¶²ù=( d>Óbó§€Çl/¦ʃtešì|@‰ÈÝÙóþ~Þ·ÚÃÁ×ã5i=EJ‰xœ ”oòÈ”4*ó#éBE¿N§%£ Œ½$[Þ>scô©‘ö›FæèSã,))s÷H¸¸ÑYyîð4ùÛžÞ±‘dNjõéDí7„åõÁ¢¯{L¹°êÔæ¬›#󮊽&›ôF Q~„6<¼×£Ï¾Þ ?NÞ5î00ïãÑ-êðýmȵV\0vvùl¥¶ù»ë½ù¾ºìw€jÀÏ4Á'Œ¥>ÐãÇÁi +2ÆÇ¥÷“œÞÃ)ܰxÀñ Ê^óA92Gl7Ï Oh¨Ã.âR‹™ƒèZ[}Þjå¢Å”ÁÞô_§ Š–pg„W7eáo .‹”“å™H5¯7z\B¶ Ûž€c?ªK¼Wç¾Wÿ}¯.ùÆyæc'þÍ¡EUïÿ¸ðsíXØpy‡l ÙQ[Q]W|ºûöa‹ø”sý>áX]“Àë®9/=;€0Ä'Ú«švñãŒXqüO-kô(ðˆ1˜ñ¯€„ø_ký—f4,bD3›Òuy8¾|’uüÂt³†äæ! ß1º…h†¿€:‡SNIQûa1Fè& tõGí. —Øâ{н+fÉbq?êóþü‘¿Ýy¡ž7M5†î_[¹­t`RÃŒÝ%©ÍÐÖ¿À æÚìs¿ ‰-wÇqTu°¿°×€3íæà«8yJ‚«C`»AéñCû‡™Ÿ¯Ÿ¶;D&ÚçãBØÈwOlãöڊЮj[,Vì«y)á `‰Ôçz“ƒKXÆ?³­c© ÷Äh0 xîЦdW5% w -Ò&\.Ö×”Ê}Cœ•@ðí‹C•ñœU ŽªË ¤=²¯k“ÿÚœÙtÔ!V.(Ü:Í ^?MÕk_ñ]pMÌ«ƒašÕ;ü0Ù8ªfÞu»—7âSšD­—þˆcÎO¥qÛP×–f¿¥KW=ot´ž¸ÚÏ^lç.ëæÂ- wxÕç-óNé˜âgüŒzÚ7k£¢_ÛÜLÖHX^0f[ÏdA86dÙg°-LJšj‘‡\'²•þFÿOܾÇK} ”Dý_q‹™¥é?ø`~+ý‹[6*iÞ¢8Ü$èûRþOÃ埪?UδÉY« ÉfŒ†!ü‡êæ¨B”ª·âº˜#„ ºì´û^·[¿äõòûýHrÆ4Oˆ#$<Œ˜Ê¤0ü–æWfÜLEìÇ•÷\]Ü|Hýp”9CÂc †í!ÇH,iýäUwµSY–]ˆ¶ ä*ÂÌ|6$Ñ­L÷®¼Â:§«ƒÔåh9¿­ì®]\[® ™bSDÆ-”Jf®îô65´½k¸NÊB­µw–~øÎš¨kÄYgîÌì p‹°Áæî¨ï² ê¡Ui5ÏæŽut™YlWsÃÜ…¬[~„LÚ6èXAŠ\†w(ßV©¼ÄÙ¦ô±."„õèÐ~§}ISÉå–Sã’ª iz¸•™Å£_ *:³,Ö“¢LIxÐp%ß:ßJ—zŽ”T9.üì?3ܶRØeW+ÃI§íç¬ä=ÀNT¢8¡ s Ç⯴f À`4ŠûVt6$SD+‹9ö;F;Š 01Á ²•ëU¡fQt]Cç•aA Ê8€Eòò~™UVÑÆc€kE]²Úqâœ/բɸ œžU¨Êo#ÜèL#q Rb”.’Ãäq.ËäFq„¨7f‰–DH›ë-JH5AmŸú¤À”…WËò±Ü0Jùg]С²[Ôѹô‡½¼›ÐÇ 1ˆÆ­hz]XHu'RÊ0Á’×ø>¾$l·!\µÛ\Ñd]þ· í»%'ñ'º§ú@÷Qâ¸tO]êÞ!ð'ô€·ÄH^¡Q<Ì'>À•Ê”ÔÉOR ÂBw„º-™lŠE$^©nŸ.\‡0Iç…™‡Á‚™iiŒ8Y¤Ó—0ˆ  ’L&ï@Ú¡´Jð£Å×%5›×)Ýé|s'#À}58‡÷ §!½*ëK‰ë[šd²ªZ¾Ô#Þ“úó¥NÞXeÂÚÞ*¶ûÿ/“öíäpRšœ"ºûk24ÿÅd$íŒm\Mþa3ªÿæP*¢QŸ†7¢P¤µ;R£ýáè0¤tRZ\êïÝÇ¿ÍÀ Q4œ†ðè¹³nV êºÌå=™l=éx{:¹p\S™ àb¡„4¬ÏM%à Eåé‹c 2VÄÅ‹LŠf7NÚOg$=€&¸ÁøZþ^½ÓÞX†µs¤¯óôRÛXjtÎ=ÉÜ‹#ǰ*“Ùx,…«ˆ”çz®ÍiÅ(.nÄÄZ,fù²½¶;ß@³ÔZˆ-ÐÖî°Ž|ˆPºžâF=¬(±¤º¼EÝÚþÕF½ÉøÙ‰áE÷JX~â´âzóš lÈë·Kº`ÿèþ`?c :ÃÉÖÊ{eJåIõ1¸ùYð¢ÄuÏ\Öù˜2v´”ž}}AUov榶‘µFwíÛC&²³,ÓÔ)úª¦ˆ‚Ÿõ,5>1•™LO`¤6Ž`Ëõ³¾&R6ly±e Ê‹Âh©NWBM3¡©ÐIŽ4D¢›ð¨Þ,C-D§Pc»œ¾dj+ÇÂMagM»æ#èP/Ö N{µ*0;ª–[ƒ-ž’L¹´¬jPø…Å={DuïMG¶­R¨›Rî»ÒéÔÍÛ[gvÐdÒn’Áƒ i”4OSȪÒB¹:\¤[¡Ibõ¶‡ç£ÖËκb3÷ÝÔµ du“Ï»Ó=ØGÍf§Ñ"t*Å%¦ß¤À³®©P[ß㿼•\zFPõ\óÌÑâµ qè*.QxkÝÝ@²é(‰V>í)+l\%ˆ°s(QøAÃF´¬â>¡.§Äu‹XD  á¡á’ÂÜ9ëQ;»àvÀ=(bŒLŒL&ÈS½„©Ï2—Èůˆýy àq §’„òRwöåÞ¸©±Šþ !°ŽÏ`V@w?t£ÂH•üE,˜4PûñÆð ôygûw¢üà V –Œ¯å㯡<™eO5ߣ¦H#0ÿD‘¨5#8F+¨RÆìöØD ‹íœy ½Üæ$i|Û¤·ˆ;…¼ù¯‘½“ow¢^õÿ3<=õܬü«¯8 ò¿‡'I;gS§ÿì)®QÕUFVÇðKe×TFY/l,<–FŽdE‹ °‚‘€ùÚ$ sÉ1e—uã~,ä/L{ê9ív,QΩp×{w}ÏkLpáÊÈ~È}é:ñÌ{9Èþz¨;ñ« ¨bXp„Xc‘9è{;ÒÙ 1T ³—ÜûV´—†m8½ À)+¹—Áãi êªN•§«** ¸NÑ(zYø™cµœ-E£Ör6g·ÒŽÞ—¢èH¤R]§Î?â/VCj{È2[TjNvΔªN–¬@¦¸Wsi6àü:µO5^¦ÙøÑ¦ÍxÅÚh8þTËtîkÌŠªs}©-6oÊnÏ¥ªÍB’%µ+Õkhiç¥ÔÕ©%ç¼Cõ‘›ïX§Y·±C~`j(NPOÞÒ­_reÐi9×vÍ5p 1ü™‹cB¤tׂ=šnTF²É¥V_i D…wª1HÎÅ7Ü Ké:«êS` z¢êSq@íS³»Ÿà%Ýßnø3l¤j³l»ˆì¹ ý*O?É)mÈ-×J®…Vð»…s¡FÆ– „h€ÍLÚÖª›¬‹Áš, wµø˜lÏ•̱ª]²ÅM©E0X P[LïîÏì$n°Bˆ§W1¨Çl›W žX!g¿Ò/teï[[äPéíŠ}Õçìo 2[FSfô¡ÊHÌvT„²gvÏ¿Sä±UsÃxêh- `Añõ|F”sx!ûà–»MF :H; =µ£(ö‚rŒ]푎Â\GIOà¼FuøñÐM$¹sZŠ˜r-ÜÜ„A*J©K’ø˜pAQZ¾l‘gF¡Y*ÎÔ‚=¿™&A9þgb#ù:*•öñOð7ÛõPm~é™–Ëæâ€íÛ‡Â(€/r¿8¹ ¹hgTqjœµî€:Q+f?¥Nr¦#Vþ¶"–èÚšÂrÍ’ÛGA‡Bëºö¬§q„v!À¼ËÎîî=‡àöRŠ3tܼkžèJ³ªß×ÿŽÒ{³‚ÞN%šÚ N*—ÒÓLï|®`íØ™| 1À–QDÍfÎ.©ûP"Èsµâ÷“N¥ÌÌÑUFº­x²V'êžíTGD¡õX†w˦{ÆžÁè3&¬¸Ýïcë»-ÖkìâQ¢Ô†!»lzN{6ìYÌkØ;ïfáx;‚uA9]Aíߤä¬Zâì>Ÿ¦\Ѫ5!µ93 q?¶vñ2“Äaf ¦¢¬rûŠ* Ê—9P«aÕ0h> dÉ!8tN/Ìdz­ A]!ÒmSÜ eùžƒYm6û´0ê·-î4]Q/2:Í·||õ·n5”¿ÐøFÈÁÕþ| 7ÜRò5*Dq=»§žó¯2»Ú 65\,ܘÐúDtEÔÑøÄXG+×#èÉ~¦»G€½”fÚÔû¶gHY½ú ªƒÁ§ŸEbRšô™2²òjÛ¶õêFŽöj@p>æHŠEj¤Fôý¾õBT¾ÔÕ¯\BÆ{+ *ÄÙŠ´ái  å§œž¼mcÓ[tGÔ[hsW$뎘%êƒffÞTÍ«†Z»ýèM…¼<_¹V«™gE´Â$ôþ£mÒŠZaÈàÿPQü/üïSªrÿâ~(mÚj ¢f¿Q]Wê†íB"C&@øb· k0é¬ÙªH"¿£dad‚¸-ˆ6G ¶ª°Ù·cböžÉ¸á>™b¿ŠËÓï3lÆîNŸw„’d-6’¸HÅiÀ’ÁÅrâ:väåfÜTƒ}aÙ4?ý}|äJø–Ýï±×Q¨çÐvGØaÒÙ¢c–.Vc5üˆUÛ>K»y–‘˜6-l¿C£BÝ\I­£YÞñáÆ™·n‰^IÚ?§Þ¤ûk¾ü2âmÇy,‘Böúò¶£¦G>ÚÐÓycê vc…µÿË]:¶ü„’~²ÌHB>ŠÐnJ´ÜŠ;ö6ØDC þMÛŽk“6Ëoëmé-vãžê¨ËÏ~C¶6R¡&¸Èy)—=eò7sså'æ‚$’É)® «=nû½€Ä×Aº:λZ³bëPåþ~½¦jd„‡Alp€¢Ž)w|C‹EæDéDu¡Ú×—l἞4¦Æˆq蛀ªL3¤<"ßüíR3 Qª)éÅ8±ø«/k}à `1 S }rŸ¥%JPôçüL‚+½!»‹¨ «ãoÖ„&i3ÞqEõó»×¶Øð®´·Ò©^5þ.„ô¡bð–ïd¡Î°Õ÷+jI<äA©¢ñ\Å"b†lÍ7ÜaôXeJ«¡ûÓMH"z1n´œP *y`ú®%®G™û8G® Pt­†Ø nÉê‚#úP‡Dú:I­›gÐ]vJ—Ù]eÍ‹(çnM´ ò²Ÿa?§G)_q½%#$ÿÈbxiÆ—ë7…²ñNFyˆ‰ô¿ÄxKæ²F=‰%Ý& ÆŽ^¬fb´ˆ-Ì@ö8öA°Ä‚0ìȽç3Ê|Ñ‹@.~{À|ù¡c~i?Âü£‚ÁfÂ>µþˆûo¶Bþ_ÌAURÄÔÈÕœ„ñÿ1…D]ûE”P}vÝF³€‚ØûÔ_„ ²û‘r¢?ÃQúE ÜNÈJŸ9U÷ó¯Ìe¡®ßÃhò #ö×FO|g¾®>ÊèZîòcЮ=W‡×‰€ááVt7õÏ1)k>¶`®pÃE)…Ýx%3ˆZ¼’И¾ÒyÑ™ôÍáåX1£Š‘‘l¦he ×ñ«··ÏÎmN*õ×ãHÓê¥'ô‹¦Êe“ê\=謻ÚÚ¬7aôíŠkEùÈß"˜üNG¯nŽàâ‘ÅTû¸CüÓ'<üDâÃ̇iƒÇT?%öeU°÷]ˆ^,7 EI nŸœâI¤'•U¦/îkbʇ6ÿü+op]^®89Ý•i3<"3Ãò|ÃŽ2¯X° ƒ0#£Ü¨™šE!•r,¤½îË•Ý.Ê\­‚(M¬úJ3ûfI#œsºñé14v¨´!,(À>rå4Z*çÿìxª(!Íâ Þý³õé`s×dµËC{ÿ#T£t¾î¯Ö ÄHoØJé‘O¨óœe®ñÞ~° è©žÇ2(÷Å>Ö•öÊSæS¤ÆŒ¿¦<µšÃÞÌ¸Ý ¦VeÍ™ZI—ì²6õÖÙ2?ÐÿRÞ¿êÎÆ/aÿW=Ä€ÿÿ©Ó¿ÕCaRjP…·5F’öNóã¶æT¨“a_ÍÑP•F„íºôLC|QäžâôÒn³MÑaâUqZAÔÁÀì:Ûû8wÐó‡/H}ì@%r¬ÈªÀÌ0ÑÀ®B€t#øsâ³ß"ØVÃQ• nÁNZŒ¼ðˆ™é:4÷vV¤¸ÁŸ%QY >K (”~_ƒ©áÐËp5b±¯!÷щ;┣ÂI.«³!Å-• Ê8á2”·ý¤Õ4ûLÒÅÚ0“!_ZÈv¸‰w¯8â>Gر±únzÙÙö _èMºÀ§4üEÕlñ:ªÖT„ÁvÊ µþµNZèIû§p{ê¢~Cr§Ð¼k,©š»ù: à+ß `=¾Ǿe`OS‡ÓG9tI_@¾CwwqÉ&Èg]…q¨5À0ú‰ÿ†›]Ç_¬Ö~Òãg‚ÿ'ëð¢2•þÔwr5–xħŒ…_†kŸFlŒYÕODÃ%œOÐÿ”ôËŠÉßOHT Òÿ³Ìþ]wPw÷Á^Æý“[£qÿ6¦žžœ$ÝbÃI(Ðç¨4Zäv+ÌM½ÐèÒB—-¿m2*‰œŸ,k™Õr ×±Ð"“Ÿ*$nq¶M»å ßñ!ÏÿÕãžX²×òt×ùâwó÷ùÈzéDÿ~ydʼÕGÕv$^U-D…P… rèÆ°ƒÜ!Ы# ÎRÝ ÔVÝ Ý¾„Cuß§CµÚì’&êâ n ?ÙCØÆØJVÚ¡ÚDè6òÍø†ßû!èÃ&ä!yƒr¿]²¿åÁþR^Þÿõføô틊ï'±jø~ E8|UøÞO ’à,Ðý"¡cñáŠÀ×tƒ?mxˆeø°ûŒŽË„<Š!°J€$ªÜAB˜½6 ~ZyÐ;¨”‘×âHóÛ ‚\Ø}N0˜wïÖ—×GXæzsï°@‡Y=_yÞĵ3ÎRÞ…êÝè–è+¯Ž««…šlÄ2T:¼K›««ëßEùlÏž[”`l`Gi®ñMõÝE®õæ»™µß?$Ë%Ì»¬c äØ2ZÎlÉŒYZ¤ói“˜PhÎm‹èÙ¹L8@ÞãM!y2Ší®p•«†~¦±é‚Uy'fÌg5"z-Ôfe=Þ%ˆÌÉÀ;7b ²êqyä¼—[Þ͘ί٬«&”ÐÚjQŽÖ{Pžd¨Žºðö­IoZE§›h"§à|6ÛeüâµÊ=E©bóŸ§IÖ"xA]šš®%(&çe6†ùHi†žÉüájmç±æ0¦Åxž»GÁá¯ÖÏ `—öÇì$E[Žõ•$¦.Fž2òÔÈ,ã?1uÎ Œ:.šµI¥ÆÆC_Ÿ¾ dÑ-»öRF¬Ýë%ÐÑi²«ËE=/Å¢f®øÜ7”.•ï_e…÷aÞ›ŽÔHr¿b¨Ä¬e——×<)楧¾¬Ìw`Íf¤ÊBàŽ ƒãöê_Ǩþ“öa0%SØé?8œ $ÝXëoQ—ðx_°‘"Ÿ&ÕÊ¡—#ªªm¡¼0AžÒÁœäœ(VFÙ :i.\ÄQR€î;´T[Ã4kõš!8@õ»Ì$nŸÑ/JÞ¶Ý]4;£Ó¥)æÇ:aõùAz' «?Æê¦»oÕÛOÐS°—Õ¦Öùû@;üÍØ))ËeªÀ¹þ«Dìöc(3œ=T”«*¸KsùÖÖ',)B¶ªÎÆÚ×¢[IõvÁa&õ7*å)k8Üõi„(œˆÒ»H1©öA‚Ûsá¯ãð ¢€C±ƒ>œc™ÖBÖÖ¯~Eü ÂÕ6Ë2¦ƒ˜ŒjCÏ; [ÇÎTjú¤_¡.e%”rñ˜ÒS[©®ŽQ¦²H.ò/Nµ³ÌVkœþ#} /QNâÇŽÌG%ÚllO(gâ³ÝþS(ïv¯Ÿ°òæ¤É°ÍÖûº†3lžÉã&s)·òù3÷ñ˜éˆˆ\} Ó8NÝóssàOPi`a(C<'NÄñËÈF†è4i‰æý«Ÿ ŽS‘­å"+¯‹Riú0-m‚,'€ª¼.¦:#ÆnçR†.1ר/ë˜ï<ĸ·lwj@ÏxƆ† +4^ÅA²Æ!ù ipeÌ +ÒA‚1´¬n,²•|{ ¼ørg„À?w+œ€›ÐN¥‹À¿pkü)2(×HàW»‡þZª¿·ê‘«ôrœ Áú Þ»<bWðu£]Vºóæß‡Ïú å¯Vïæ7,9¨—˜Â°°]^²G±z«Þ…2´cÜžÐìr×Qu=)BRnñËÛi±°~âúb}RM,hBg‡úGFÿI õ?à‡žÉ6^9P®º£ègjkÛQK·_ÖMm"eøÉ9‹Ä¹{Úb“ÂêB©Z;·.‡ÛŸ6Y¸?iµGÍÂeŽL8$rì%[¿jXc1mF»(oÖü&Wè CoG&…‘Qu24Ýkfí~æ6T÷'­3?˜qgr"Vf™kÔKÎüXýc~ÿZGñ IwÒ2…¬‘¬šD&ªäV©•Áìí ìî÷¶mÙM°ÞH…¦­7æ)ñðîNÎMîÊ Ã å{Yf{ûÚåxTåok‘NF¶>ö;U) `gF ”m \Ëè‡öYú春\¸cö+*@rðag–Ñ‹W,64]&e;-ã͇É3k7[ãÄ4œþÓ+ É“~v4—(õLW¦]]B^šÏn®âø¬å Ázªûßg;?”ÒR"¼„O0ï?‚aw…Ðà,16.BÃ?/fiÆŠ°[‘~]érÁdX„Ödg=+6–s3_Wß3É@–É¢u.TòïyPè&LqÆö l¯6ÑܱŠäoÔÇîj¿ÍkX5ä|iB¨›ž¾«’^¨Üéí}ÚØPԑ옒ZßçµKai‹Ç~éèÊuÉ­ò‚•Ðé<“L\'A† æ0EDн]݇BÇÆ@æç*!}¦Û0ÕŒxuergÒCq×#áô|§‚ó ëyr¼Ž%·AKvÔZ¼-Íë®åð{ý¨0ª»ò†lpêø)-ª"Õ†ã=&úCŠŒ†àªà]²<©¼òD9k3IcÍ8Ꙇò@üy¿'ô6Q2Ø=8í=Îôž#wàþºöœÌ‘ ¯‘C¦Pëzô¨Íc’dæ8#å»R´ö>ww}Áéñ Ú"ÝÇ‚îuQ²Ç"ö}B¼¤C>‡ê'êЊßÿb¬`ò¢dâ3XÓs¿©«çÒ{SÍÍbðš½ Z;„àÒ¦x€æ¤ˆ„È€)Q·bôS0$›0¬Á †ÔÅ ‡ü9©òï¢÷§¦Ã¶ ¾ ¢iÆ¿W×^ª8MSu°ÛhÑŽÕÚá¤{6ü³€ò5e›ªTcW u¤ÇÈÍv|o8Á¦¯Êh:³?)}IzÓÁP0†µYúÏãqz-¢8õ«Ë!Të=áŸJlAXÓ=AØØeôvv uª)Ujó8â:#ÇB‹e|¹M=äx› Š%·ü…WJ´¿)*±á|f´²ùzýµmp’åáøhÞ&Ô‹î¸GÁ'i®À"}G4;ñÞTÇ‚K.üzvnÔäÛqÆ~ކDjpÅÃ"›«¤î•µ³Kf‘4zOÔ(šÂWœ“«Å UÛ´¡¥ÕúSõç¥ÅVYø‡Ä)„ÊVîZS§ÙGŒ-EÆÁ[¯z"A*JŒ ¸ZÿÝý"©ŠF"iÞÿˆ½¥ÐÑ®lm®ÜÆSׄ7 O¢c¡ˆâƒ¦Uþ§À¦À •Æ0jW‰~–yBœ”"XBOº5­;ªqõ¶wežX-zmD¥ ©CÒ„ ÞüëþõŒA^Úmä%›àÌNa··œy{÷zêe!_ªèêúÂ&Íã ^y‡Âj5©Vg5a¾²4dÙú¬ŒÌã× Áá.ûLvΔH޲l:ú3,Th`»óê›®øÇȧ*šp‡|9”(œOïŠ'3Fì ¿8÷?§žp«Ý,º[…J§-I¼É&ý®CØrÇ„Ó>©+‹ÑÕ-çk±"Rl.V>jý烜™;‘º9³‹÷Írx|An{€1T%—Ëž­Ý»®N¿JÔ=1zY%½w3ûŒ òqD•À„ ”ÈM¦¿.üšj™UV2+Ïd—¢‰,«ÆÓlаªäÕg4÷dyGHÁ¦,ùÁ9„Ysê¨ñ|óµ"¹…f‡”D|„Â\‚v¨>@ðy¼Ïg¤×IŠÁds©Àʉe-‘jHç-géT` άþ`$Ì&³* yjÀæò‚HœzÃqþ´ sqA!$Îõ€Ñ suA!¤ÎØÅâ†@¸ÐsiÂFŒ 6‚ëÃGµŒBv î TÑèç1¢gl’¯¬!¡iyfÜ1ø Á¹”¥~ ¢¿ù9y²7ù\¾‘ÜK{²VtƒOD‰DÛl ÌnsU¤9Bï¤@ÙØ³s,Í‘7|Aðs4˜Î阜j9ñ,…†­Ç5!&dKŒ_3¾¢”pí«@ ²ÜÃIoÅÜÑnGb5_ÿ¿ ‰k7»uD8H @+ÆÓY»8[XÓ ý‹¦ì œÍÿ«³V‡öVZÆüÍ=!cëîNR'ìªä^@Ž…:–)V‡‚ ãFò‚þË\.Qüž1Ø^¾8-ÖF'¯ÖÊŠož§Tzsµx‚«ôêè”éÔÓñë–X"õ•á4ËsʵûøësÚÉý9N (­ “Ü ö²/‹yÃX‡ävùóWv«ð°Ìy}垇­‡nÖËå«Ï?¼ÛÃþ€ófµ~—Ã~â..&FH»Íe|®ú0oŽû`„˜o¨Lt¯îŠ›l0žgø‘;ÿP¬áµFnü® †õ&'yÝIð9Qû …ÏéðÔöK0飻—ñŽÛ—fJ×þÍp9Ì72uË]côFzôc•æ×NŸ•»„i¨ ŽÓaÛ»Žp×þþ‘‡ Æ·‚©ÝÄ]Ê\Oõ¡œí—ÆÎ/Ñ Þö[&÷nüþ-çÁžtý¹tWåa.Ö}BŒßù[k€•,JØ´Šý›äŒÂZp&Mp?ì߸嵎õˆª;8Çâ:­#øœÃX#žö²á°¨aX™ý• s¯²†á]cÐjõ¦4UZ¨ÂyV?ëKë‰pÍñEÕàEØÍ/ô÷??s)*õâM&/}É °áÍq¨•ÚN®ôæ‘ê4áæšëììêÝ¢IqeTµ¨àD\ºJçâhgT˯ìZˆ4Œ}Ñhžl~Äuø­ñsÖ` †À,¢‚Ê# ÊŸm¼HÊâvsSWPà‚QD«è2–I>Aß*Oceg, J‚àèCH’X …2d¥¯«U‡rŽîÀ‘Vz¾UT£.Û%t€ƒ©ôz¯‡¬´-°S†yšdß;SÈvã< ÂÕç_ô£ŒiZ>‘a$Çj#ƒ´,º®8½=Óqÿл^¡hÇÈ63Í©¶óΩâ[ZÅÞ§Û¡^VËS7ÎïJ.g½p£Æ< I‹aމk¢­!A‰¹Ï$–ÈAy‘¸Šnjò: ±vqVÉ3®ˆÎ2o²#óP¾_”Û@ƒ‡¡äÒA×>“j<¢íØ1Î^˜Cµ°iÁþ˜S›hc] žDÃæ}ѨRËT ëñõæs N:\TÇß +â·.‚ö§¡B"†¡kLz&š9ºî¬'P¦Û[‘;ƒôðY6¿‡ßØñ.Y»ùOBMçæ<~×±ðŸ™UÀ€hĨ$k€1*Ùñ¿tó/²E©ì¿ˆ'&7Q¨Ð”Žq ›%Çü¦¹ãÿ²Üò2×áÏkŸ¿ ¾ çSxÉ<Ñ+iõäÕ÷ØŽW,+¥¬¦K–ãhÎÆ©øu.w-áoK¾¦Mä3+q$KõKǦ”;¯¨Ô”Ã$›Q)Sº+03F¥[ÆM°ÝÃn²½<=H¦(Á¢áfY©®ªL-©ü-)ܨ É#°4$ç-­4(y(#R‚U#þ¨¦s•>Få› —Œf]ÆH.¬¬/Á*ɬPÏ6¬PZÑ‘a^&aÑèÏn·4ál÷æ&TáÒè:4âË)Soî bP)/»Wñކ+8´¯‘N¾¬PV¶BŸuT1x*]Ƭ/YPVZfVR ·,­§0.Ç jMB²)ɼpVŠSÉX+®Ñ޼”fšf^¦V1ªX·”ËT^ALFQû“ÔÞ©$I'7…ì6¥øÈDâ¥D#íuÏÐ uø3KZ+?W:1½‰ñ£ [lZ%ÎÔD d79«È^V΃dyãƒòÇâL.™šbHuê"¬˜”õ>U ǃųÁ!ìÈ¥µÙ).¹ZÊHÑqáÊõ}sã K×÷Áh}¢Š í¦[QF:ù¦_ë{þ¸K3¤Z•“IJմËâQ™³}í×~`[qxp©‚îEôeÁä’.¢ávŽEáO ™%Í› êªyϳâ]ˆ£Kýò™o‘ –³QE]éA\qÒ%‰´<¬Ljçš%Ôæ½=Ë&SpznµÈÔ ·\‹¹ü³fr.š0Íf£u퓺»ÉÁîüoˆŒg3É$Vs3'B¸¬.ÁÄKx¤ÁxÂÚ°ä Ì}2ÌYØdt\ËhUòwc :¦-ÑŸV‚N X"¬¬úºmzÔ§ÈÚíK¶W®5«ñi®†H¶nâ-<);^UEÉÝoÝœèùñp ÞÑ&³”¢Å¨¾Wœ¨Ê½dG ˜%œÈ:Ú !ÅÊ&BR±<Cðbuô`´OŠëª†T-¦É¡ËY>@¡—òCeRùÇ<¸E<‰Ì,Rqe„.–lø*ÇDdR¢@‹n[úóÄ F¤çã£JdÕ —{Ë­áGþIrÑûy`+lä+^Jo=ýrd82[”!:·ÀLà縡UpÀe—аlú:€³OnÅÞy=2ÑNŒIÀ¿™}•·îR‚4ôt°“²#9´°© {ãÇ—[ÒO’ÓºOT ùÔ¡Äž÷+7Ӻ䭢;s4ûpFl_[¬Ç¡MµzQ^@o”MÏ Îáh\ö0M_¹£b5´Ò‰ÇVî†W[oßA W¸ÇÉIÂW}Ê2K× GÈR[7•8FÐ çÂw¸n›â®#F_'«9du=ºk»’/8@±ödyr¢“¡«ñ¯Ö‚xÛnÌ6êbÀü&ªœ•{/M·ºJ;&æúªÝ:UËåE{¬qC JÉœ7Ôå±vV#ƒê79`”¶¶Øéd`€Ûºt°P=ì|he=Êj¼!›¯?ꙡs,}…ÜÝ“s;»ù¶7¥ÐѨéYÑ„r†Aܩ냕8Û½t˶š’jÀ óV@K4f[|Ò&V@ÓF>—-¸Â:¤!œ‹/a¥\,:c‘Ï_–".i —…¶7î\Bn¶™ãÃ¥möÈXÈèËÒQ wü5÷,éªy$dE”¤ eî®dânMœDW#q‹ý7Ç:×ÔÄ_éÎU»‰J%k ›¼ãÓùÞLúVÙ‚d% 7y±M5'žë-ñÏ!+§ò}QÂÔè>k¯ÁñÇgóQ‘&ÿCCMH¯•¿¸-l3ržÄÛŽ-C“N5Dàs5~¤è)H¬)&ea…]qB´j“6úrÊV¨Ûe(m¼ÁŸ‹p²¤éúvš8*Ýô¤6¿M$½C!«(‹nFq« ‹VÚÙc|AçC¶è²©(a…¢äÏQX­{Þ9j±F¦25llûGáS.3º­â32cWUA‡‰Üœ^x«ͲìVÚSdõb‘F²‚˜±-àfs;›fˆT²°G¹%«±±»:á/  +œD¸•–„â¡)ꛪ²t1½üicö0vô Hº‘8t#µGúôftÿj´%¸Cue|ê Ðjb¯åíNµƒêõëölÞ†}<~=x`²í«Üà â9þ ÉÆU€·VpoÕ„ìÁë²à}&Á»UX´IÑôm[RrÚì] òʹk âjiŠð°2zØê[’­ØšèÊV;;êHoDK7 s{²8ÇÿÂxM‹P&/=Q%1áé¡pJbËb_+?wßR§Ge‘î‘3IØ‚—”)4µ¥ëgÕp¿1Ò¸™ú'æRŽKía)Zy«’¶l1¸IŸï+tæ3eezàGLHB,‘¨¶[¹q¤YŒ‚èú€V…mõŽb„‡ª£à ƒâµð(IÞ€É6#K,”FäôNÈæRiËÁ®[ÆhzR…:EH],÷•naÛž |ÃZöf›c‘ÒÈJN·¾óô'“Ÿï–*¹EGöbß»dîØ|MÑmvÐYÜ :¾°&¡Ò†Ö¸:ÏàÒO@E²>n2”O1däYUQhc‰ñ0å,ÔG±Í¤_RuÌÕé={ä)#áÐɧ¢k¸ë t ºG‹œ²“!È F=Ãtý¸NüA¦Ï([3ת§//M,>ÏtU–QFÜü@EõÍ ¿7ä-fׂv¤Dß´­žºê¬QxØÖ9¼¹â Ôè\¨Œ:÷è¯ôb¿Ë9•$=Ö‘æp{øªcLO êåòÚ¹¸j×Bªñ¿ˆ‘âèÅ dï2ëÌ~m{%tÛcàÍ3Àg@ä3e¹À-¬S<î«efþ“jã KY²ŽDÂvyGá)±O[,¯5Þ5î…½ù·|s´!¿öJüG Ïfœs¾ ùß‘ÅLwâí@÷àÍkùí{¾ÿÜZHø~ZÈ… ø¿74‚Vÿö<¶ðBVAñ-•a´àÔ1§Ä@«læ_$Ê3h\R­ÈF*¦Î.I4•Ì(gJÔTpг׳§¤ -ûŽÐŒÃï=÷óïš=ð"—XMZ(åxÝqº]ßqšMÿ|õëýÓÇ.Z *d>HÃç|:p Gx=,RÏB*’9 š£Ã˜r”{d*C¤²Ì{g 1$¡Gñ)"´¦&f¤ARÀ<X1lBÂL ˆwWʼn„VBèD‚kˆšt— Š:%}{ÁÄä ÈçF‰‘ºkJêÊH‹Ÿïl( ìpÑÆ–NTBgBÖä¬ÑQGOÃ#7YCÊ0‚tRnnÄd)'}jºY³\aX°ÔÒl¼f˜–À] ½J&€¿”µàDZ’·Æ^]Šº)#÷4ôdXÄR“ÙT…·´`ÉÁçŠj’Õè-.eÅpãq0YÔ4U¿v¡&fšò‘#²Ò@ªxô )G;šhTõ Ña&ϸꪱˆê•­Ç""Ûu_p žHØ¢p“^1ù†n’#yb¥gj‰Š\2¼ÌH—XCÕ¼º1”móËía’ÃBTb=—5tbiŸ‘¶o•,ëÄ6ió„LÎ]wqZϹH!#B©³ ïtWhJ’Êáñ£¥sÞà,>­ò0–9ªÊ*‰!=%ËJ :ýÀxœ;Œûu<œÈšh—C0åA–aêr ª äe`¬€]í_(^ôÙ°Ÿð¸»ÏFx‡êñ±àÆ—"p¢á´÷oX†´Ã öèû×d=èH7ê5a]Rýo9Ÿ¯ ’¬ì1c÷<‡je’º7º…¥:Ó3ÙcPšÊ¼-¯ Ñð«ß,~žq©n!yŸ5ÏC3Áj&8Œ,Kæã+RƘUwµã&Œjr+NçD¡íÍä:x§W7uç>é<ˆºiâqðÎ: õˆ‘Ú[ìœæœ / vhZëuHXò‚øæ(¸¢CA8¸½Qÿzƒe”Üü ?ð´Þ‡íιcO›p÷üýmìiACÆ—}ØöŒ[àe.ÌUÏ"ä4 ïçðtËQ‡o»šãKV€ŒòùZF˜¦½žšS²¶mJàBžO¹?²°<#±ôÆ>´8™’ºž:F<à ê$â¾üÁÿOy ø¦"Ùðù¿Ëƒª…“…³#É¿®YØšýW(àììhaèâlò_wl‹l¬F3³ºÉºYYš±r-›êK¸óWÀ©$!âÑdƒ•ØÝ4iV·ë:ÑÏFн÷Á’ Dìö[™™üNL_?ckw¸ûº%ÕiŒðÐqi9–phS!Ô²\–G]ð­`œfƒP^8„êÛ×Íî8-û0©âã¾\|“ì¿Ye#”‰“G4øVÞóÌàƒ Êº#Ĉ C} ‚T:lªÑ$l9pA½·Ç ²6c]P2´Cð“̶2è[‰ K! ×ð¦H°ü”¶ (n+µK¿Šíq«rªºü0bL¨AÚþzúgµâ¬àbµ!ç…ËàÓ„ ÿ®Ãv, ÞÑ+ŒåÛà™íSj ^ïÈSMwjþ‘A¬}߉öZÇcž÷VƒÓf¤þ†|Nj€‰D sç>9‰žŠÁDóÜžéÜñ}âŠðÞ"}vÍxˆ·™4Ê?Î0àâÒŠF6áêÝ8¿g^ ùM±d•[θ¹2m¾1ca• ©ö;ƒsñl&m‹/ø$;"¥ˆ]ÒÒëÓÜ Vu(<µ¯yÆtB~Ë¥(õ9Àò>@ãæ&¶¡ÞGT½Ã`áÎ'LòŽ{PFFU.uù£¤Ûç±Qi<}ˆ•R¹YT÷÷Aî?ám,Ý?÷t:Áÿ›Mäÿ#|þ¿MäMQ”Ÿ )$rþ Ö`$rŒM‘î²6È„ƒ%W ˆóà‰—°xRQt2¿¼[Ÿkº3)|ÉÍ4‹t <®Eüäs mC‚c7——¬ÛÏ™õÆJ?½ïg6xyµ¸>\H7“)Š0‚ÕÐÖ»à(/úஎ©×C@4î¤:Šýø­x„G#oÊ‚À£ / L9jJ D= õ”ºûî¢Û+ U§i{ØYׇœS •ÝCÚ@Í:ꛩ̎ˈٴK6¬§w­Ýe¥ÖŒ ¨v­i̲۴#çòÆÓÔ½Ú>–õ økA1¿«-½V9Ú©2Ô°[¥)»¤E§YGm“gvUæ: *æfòî†D©T¢³ŒlU|¸KçT0Øà¾a·Â±´@M†–y“e[{WÈ;t¤¬Õ$îD¹Þ´•yµµ)D÷ìu Î<î=æÆ&xB|–?Ñ‹\Š9>£KŸ¬»s`Œ>‡“‰ ‹ ~AŸÄöLxzÖÊ{”É:ÒŸ¨6dþÐàŒiëΘnà=J`fyªn‡’PP£Þ§t$¸üœv$I¾”(Üb€OU“^fgiºkñIkë!&ˆé)Õgçò).¬²Ì½„¹.òF!äU9ê°$"ö>£Gå—UÅ;V2I•%äÝ*îèÝíüeƒÚWqû„Å2ýþ–Âñ,êÑÌýö`9—K»øÔÒ$ ÿ0O4uÁ¶^§Á†g÷ŽÈ"¦³|TÃ)‡ñ¬¢ãÄGx:í«P×ã¶Éì:FM±ìg|¨pkSUë›Õ2wT¼DA§­»Ö©ò&o+`Hë¼P,= %Ï â|&3¹°×–ԧÄVÁ=«Ï7³Ù§~º½½ÿ˜h—þ|êùô“)¼L}_’ @vžc4r‘H¥ÄP| §Ð“‘{nO‰98 AA,3BU3ZUPD5Êb<³HãZäØû*qº~&ìÝÒŒoØh˜UÔw|U€g¶Eá-¹¶Ä/`xÊDîY¬þ·YT }ƒ´v„ží¡dK´;¶Ú«Ãõ±®?—´ˆ²Ð È=PdÒ6qCªù)ÃzÄ[ÒDh:)…^ôÏ_Ä~¯¤Cfܱ tTxÁ2Ûï TɈq ;ìÁ^g“7æ>Ü›7Üür é©EÂé>ð3¾>§o·1/Ž˜~Ç£ þ;Û¹ª8— wð ¿ÿœý¦£?þËŠ¬Œ€ä¿eaWe;;ëÿÒluHoååe>r¦q/i]Xút’¨¼¼„¿ô’@dˆ&éSÜc}Æd3]ü†ÛàÍ+–VÐ.•Í2Ûª¡ (óšM–Ûš©+)+–Ÿ>/‹šk+šï?§=l‰éôa½?“›í§9|›Ý[f/ó _Øð:BøîæØß(¼øOf˜Þ$½gOjðßÑ?´¹±ó½<Ê$Ø|Å¿â·Lï8séÜM1‡ÜðÑ¥ðήãk×ùÐìz§@Ù,˜—xxÃxYSÁx¬mâ§óìI‘.çû ܪ¼ºÙ£îÜ©c Ùºq/ѱOò¨©–ÜóBËÜ©vŒ%çþ¡¥wÊë*7ûÚùÎë.I0¦gÜJ…ÇJåNÉM¼Ù•.5óí-q3‡XŸ<ÎHøJc²„ø“£¨ŠY§f9#£èŠÈ¹î¸¤²Kí²§ïŒµÿ”9óJœsÒ%¡_n•="ÁgOËê|ƒ8=“˜xÀIn¬?^ªv:½`;ß.wê=»ú&%í{-½sŒ œ ü#NÐÑ¿k;<8û˜e4„¦Y ¯›hᬤµÑâÄ™¡©J«·4?¤l.W¥½DÆ=R==lü”P2\J7¹e,Çž •‘Ú\c>è,àÃŽÕ‚•¦¬R™¶]C­‹“QݽmÚE<‡É ² N jr%ÝQ]cPîíA¿r-÷$ú} ,Àd¨ éW‹ó–š–ÉeX/tÐÖ ¼O±43Pá|›‰ ã#Ð8  0nŒ¥ ŒÄ_·làú* „6ÃÓÁžšEßvNP‡F)uõl?µ‹s}ÞÌoÖ!Ò4Ã3©´8ùIã¤Àw¦7oe‚üR£oj…^ÛŽ€Ìv„j†…ÊÈåÅ–eí"–&[.ýÈIŒ×2õæÍr£tGòÕ¯¾ÄøIý«ˆÉ²øŽ9PÊ ?ÖÖŒm/Q²QÆ9žC©WoZÁþ%¡oZ2á@9ÒR$WW 16œ¿tn¡X2±¥y²` ˜±À*­ií d·Æü§Þº8õô£¥ŠÒ ”º&oy”™øô¦„—>Œhð Ç b‡æoÎ{»Ï*šÎˆÙ«‘]_D8UÍ ¿œ¦Bó^¤–©øZ¿·éRÄk¡MƒV!Ëat÷–ñ̶425*ÛªØTÞ±Cuº8«ùj6v=m›KH!¡z²…cŠ­éP­âƒ¡f©w'jððá/6Ê*D”'}tTK“&ð¶iƶATÜŸóc‘|Oöy@7ÓŒ÷à·>š§ý!J°œu;nsZX©:Éã{ѼÚùUØ^½|ì8GÍ N´eÖVÚgâÕ*~›±-m«‘Ãú·ªž›0Ý.ØŽûÇq0TÇh:æ7¢žµ=©7Åh:¦7Ç(£¢9ÔzM£•u;æ$Yæ¸ÈÚ1‚‰ôa–ž…<¯7ªÀÚ0½ÁU ê`hØž˜amcrŒÂMi léÀÞ©Uì/TÂSO÷³©0–Ý=ì·J¬]Š®ú7²ŸŒ‘¾£WÁ$»áü4¡&©ÃLØ0¿Å½ë.!IÓ­¡å-°ÝV¬'¨nË9ä&pbµ”b[¡ðÙx<“s×ÀÛ=;lorÃ[ ot=«;·w/,xŒ/ŸìŸmÓœU+²ª‡ä¿ì]PŸHŽ;J`»‰ÍÜ8~`»“¯˜Þ½š¶¡?}¬Vïà Œ ð’Žôú&µŽKZ NØÙ[Àf+ŸJž•Ð.È2ÚÇ•|†´ekHp:.Ç±é ½]]½;v.Çyìó%òæ‰oÁ‰|ÃÍLhvôo€¾qWu \Œ/q#ðØ_¿ò‡b°²²àï¡îjP'WÔVw¶;&wF_m a \ Ù¢ûsqØ]b/…݈I¾±—rœ¯™XòLùÑhwu@¥}x¯Hüe°µUuY( Òºu.ŸV£C^ó`&P7ýޢ(jóÌSŽÔ‘¡Ëtçç’À$?Bx‰«ˆq?2Ùe#¨K¨ ª'ŽÅ&.Qü[l; ø”2r° 8ÉÅ5°mÚèFøOYB|Öß®ßÝøX6šÕŠCËEl¬ŽÊÚÚ4la·LHÇHI塨LµÍuÆHÖ8Ì£Èï m{EƒuìíáàK$•.áyWNS4†@÷A¼ƒò`ˆKù•‡¿Ø €yQ¨Ò¹˜¬CÚWO mÒŽýV ´>l°ª|Ü‚‹¼Å0Cña) MžÑáUåû| ˜µ¥ÅqpµŸ7éûЧ´YºÝ$Uþ®á¡3¶ïÌš'’s?´p7d®rÖVX1³Þd :w¤ìÁn16aºñܲȼ¹øuFtQù*Il›ž¢X·ÞÒX‘ÿ -4ËfCŽë»æÞ¤…'«þØx“Ì8è,<²YŒÉ>„ă “„l[Þ:s‡ÌET wO…•j´ášˆ/öÀ%`²¼¯'ŸÈ— àù·3½§@ÚÐw.ÐjŠîÂŽFyÄÿM€ï )xϺ²™ãxé¯üÅ1¼KwpA¦Q¦~%²É)øÉS†U•Rkˆ²…¬‡ô-ýgœËÅܬ87Ô…pp]ÝrÖøBøÎL“4ä“Ò3ÉÑy:;±µ nÁEuþzSt aP†øê‚ËГIÔý?¯fQÛGñà¸È畘X'vÎ'vŠ×Uûˆa·Ó¸‘)ó'Ÿ®H|E-ÞÀzðšïúZr»Â³uáæ\×ü\="­þ‚Sý½Uíà”vG?‰c"ÐL/窤6³Î€gw(.ì,”Xãð‰—˜TOF?ÄGžiPÆEå ýBì†@C„– ŒRæÌ4…÷ÎŒÉó”'nþx5pfôjþ/K ‰Ì©$³fck2Á•ù÷C¶TšÝ‰¢­QÓ…£O+$¨µ9§3Ù¢«K’[XLö{ß$ÑÕ“tÓ¯ž‰Ì7ýM-L! Qÿ .Bq&È:Zzƒßqd£Ía"ï2®ˆ~V$2Å™ÂÍ9ßÎkTU€—;úGx—7TÛâ±Ï±^ T3ÃíºðïSç9³â œ¤:ýUôÉ—ÝCЏ¨ì¦PJ£Í†ˆ¹[€ˆ»*§ûZwg]\S>GI(<'ô”χޚóS÷ØÕõ ò-ãv ã‘”W s%‡L^Å*Љ±²̺+Û–Q©e4÷¡é,÷t™–­PˆQŽüÕªòø0!§|>H›¾Û§Q–ô¡÷â[ž{—4Ïæ¦Ñ¯F‚~¡ÚCêì7á~á5ƒ¤˜©u€cS ]œ™?°äOCícñf"+¢“Z`˜HÃ5<Û']k'39Ež)/†a’Cf*=QReõžÑ^WEê²QåÄø{&8æ†øÔž&©?ÕÖ#àÄÓ…jà z.y‘_é?ÅZ¥µãba៘6OŠU¢Ð±Á`DØyÿÐõ* …}çPžý˜7p…ư€s[èœõtâyš¯v(¹pÿ¹W‘ÆÑïUШzš»SG¦g‰ÉŽYƒÙ†¢á†Åh˲°©E²²I^l’u:–KÝ›šÃ->RŠói3œE wþ¸,ÌÑ3uªã_[™ïv§»+Àv[’¨ªv[ìb[3yÚ øŠ@cØvnXÂY­Œ] *ª/\Üä ›hìO¨9qWb’G‡ÁôG‚ütÛaÏ%·UC–‚ÃU-÷…%¶”1¡üF‡—ÿ0›ðÅL±eïÒƒÝþûW¼iG•¥hòt•À ¹ˆÒÿ(˜‚ÌHAv$Ÿ= ðo:¤ غäëdÑ„‹xvYg<Ѭ˜¹^ˆz×/žû;pß#"'u.¿5Ä‚M_%Ã3±'–k:dí;Ã5p„Ê]¡Ù.ð­'Þ âÝœ\öžb¥GÜ…¯g¸.âWí\eŒ«ÈÅÜ(ï­dD(ŸM§ùvI“mj9‰Ë–ä°¹,>ÑV™ñ4¿í*žË:AöþcdAÃõ“>ذ†«ŸË„¯m}Iƒ^á“õgóG—Õ¥Õ±V¥t{êJyycV¹’É…uPɬW ÈÍ_BÄSÖŒÀ“-B(úæάҮì™Rb·ëWÀ°gÁ–>ÞÚt“y ™7w8B"7ÀÖQ`/ùŸ—È»k0÷GõBÔ”³¤:!>žHõH{_¸ùî« «$êÆ2½þ‹Ê'¬ï¨—ÅË'ÚnÛùÌ'Âï„Y»âE yR4ÂéÜ‚«ë&e¹‚ëÃ&>°ÒÜA_§º,Ù±˜–U%4Èq¥ÔT¨úc¸Œ+äYÚÇè{r‹n€:h,z¬ôÁ×ÁU_àk?èë]0¼^!0w5 Îþ“´”âxR¥6‚¿‰Ç,pèP¼@¢Üâ:4,B(!Å쨛5šáª‘GßÚ6á!]ø×ži¬ëc.»‚¯kem²,䔦«Ÿ—R¹E9¸Ì²Þ #ˆaÀK§dIß6´#h=‚óÙ#I'·Å;$65À׌íÃé[ E¼éYT‰ß3Æ~ 3©r=’tÄ ã©Ê¨ãµ‹­–eN•ÝèdçDJŸCðtªí¢À»¯mZx™òÇ»#ß PsŤ/Žš›8«‹ÎÞ¿a$w~â#·‰©¼üïÈ7&ø@|‡²Ÿˆì_¨3ol–¡\6NÂç¹Æó½{q¹y{_Ø«§rñY? O˜8תîgI‹l¹/ž™,žàÜ»‡Dab‹£ÚÒ¹¬îUc½ÜÉ)ÐÏ ¼À«Qìpgî ¨4±Î¯þjý% 7BÏ|£5=TéÍ×ÆéóeQá7øØúƒÆù`i_Ù,¸ ÒÉe‘kŸ­ÏÇã'â–ú.µ2¯CZq[i$ÐZ7æ¡8P §CܓϓÐRr§ÇP**Y°¦.jç„ ±àJ˜˜v˜¢ ØçVt;^ˉˆ$·=íðPúÉùÙïPÓ¬‘ß+4ÞVLVV»êÜð²Ih…Ú_À¨ð¯¥"‘^ ÀFœù- ÷ÎrUÅ‚GCÈÕ½èÆý¹•j¤þ§¬I¾/¢”lü4ú1Ù] ëz]ìX¦½U¹®ÜÞ©ÜÄÏ—¬E†Ä:î þü $bz}<[Pøýß~l:Μ¦Áþ§W¢ÿDNòÿ6£µQBVCñµ…XG@'ZP–'†5o\[IŪ0‰9“¦†; i؉sIÙžº¤{€ÆG1Mš·ø¬gúVÀmÏLEM»HÍJõšqºñÈÉü~í…÷Tï+„±—tí5¦ÂþRšÑÇaµGŠ´øÊ ôbŠÖÒöÐD:½µo(اŸ´¨ªë.Ýgƒ­Ú:o9…‚ˆñÕ«þRÐë&óRõ1èa†uf‹Ž0ÐÐ0,íå¥XÚue•ÅQàVÜu,±‘Ò·[£d––m\v´ž„±p5°Øƒ.B³Y…³ƒ‚A=]I@½mGÁ¨Ü¨©jne-úÚ²§H¬ôL9¯Jï™v`K‡Ét% Wjî¢!6ïƒw2ÆÀ¸žsBÅë~rO®qã6—˜´µ®}~)uò'ˆk¬·±Ôí¶aÁŸ¨;çÑ»QoN-z™*ù¬&§,s×¢™M¾!àÒRfÇu í«ó‹ßzœ´$cpþùc :fê¯,\ÛüæA"ëqaƒ”= t ‡·Ôe?lÕ™{~FM¿*º™²¨B¥ôºÑCªf¢ß$æžé¼*àm‘Ô—Î~^qVc-,ÒsûÎÙ3ˆ‰ /¿?ŠÂPñ‡r@²~U9¢› —4‡WöƒÚM³F³Cïì}“¯€Œþ´ÚÅ;T;OÌ]·ôLC6•]'bmÞ*±iþ—oÀÖ(èÕü0¸I𜕻×Ô1–XÚvØüH/âò£èÜ«ö­Ýìš@ªºÉ®)¤ïš8ghÿ×g<6ôÆPÂD»äv˜ÝçoBš!íXæÁ÷X‰‡„7t~$3‰:CD)åGx÷/^yë ½P/fC^Is©\l„=Üé2†a7ô\‘nîôà'¸Qû¯èÊk^·hc{”{¨‘œžWOKâ²›²MçóM¤ ¨‡‡`N‰“¥h>ŸKÈÙ=H©Â•ÜôMôB.ãàÉrëxªSúÝjjô+2ÃäTÃNR‡xòüž·}þÛ$¢ ]»hj§´ÌÝPw¥ï°üçWq]ïÐýÞNžÁ CörrŠT¢-ЄÔFŽ/q¢|ºãYŸóŠ“°wœÝAó¹¨jøk¢Iª¬0å1*Ô†gž£ˆ&%2J'‘k—gäÿ4º˜g}[;ý'kÀÈþ‡¬urVs´pþ·åK°ŠÝ¢ê?y›ýZd-‰IBC©Õ¹d‘ „‹],i®®µÁɯR 9ê„D¼*Úìü‰þÙû ˜É<Æ,ÿêÃg¹ÁÑrÙAŠá]ësÃ1ë4ã4£òóþZ+`µ6£t‰)}ÐHRS|ç†Ô#žxÏIÇÆXfèÓstl vØ6¼­.MúÕé Ëæïø"¦ÓSÿ»P4ʘW~‡ ccž(c #{M ]œªµ‡|õ)8£ò^h¶YÆÅбôÏT›jaíZ&ÎL`ÓSVžÀY»½V›ô Ÿºi”/ÉßWQª¹œ@ý| 1½Õ1Zs¹q%BßWn¾!.úPÚo1ß6¢ë((úžRì±ô#‘ˆ^ý/š¢mAë°·]Ç{/¤Ñ2¦°EÎXŒfÂàXÊFPA½' Sï$ÿ¿»¦”Fš³i•ÄæLcñ$"ñ9>Éçé¿ôC¿‚(îö~T$jG|qÔ¼Å,oN¾kÝu¼3e†Rø$¶Ž‰´EñÔ¨x‡9SÊQ¥õÈö—¨RBŽÕ!ÕûÉÿâ0w а·É<\!œ[†[¤;¥H¸½Ÿ[‘ĦC缺Dtภ¹%û$ÅYÅ8R¹ Nå VýPÐ÷: .ƒRƒ¦['Dw/8ªTàõœ<‘løîÆoÈw^_¨sžæïè#ŸOÀîo“ñÓ…'>ñîé fóæiÛ‡Ôà$LŽý€•x¶1¾AÞÿÖ-|F¼84S²c蹄euÓû²+¥+„˜S†p~ìøÀÿO×ü…šü‡&€ÿ÷ÎÿEÿË»Óä¦271ú÷qŠ:rÿòœoÝvµÒ„VàUµ8Y>ÅÂ'ùX"€,Œ]4 Ü\7å’úÒê™Fòa¾üµ†4Ÿ ̼êf2›Éò:™ùúø¾æòW[£3̤mѶN5…äbý$ån|÷Àä¸ê(k/CްKR=¡!ܵ~†˜𦂔Ò)>6༚Ò`_uÉÎ}M(°nëN(ÿ}ÊWï#㘛y¾!y#hã÷)ŠÅTnDL”¸\’îÆÂÐ .ë($Iš[¢rÚiåùjŸå*±AÎøsÈ!Þ Ðì@Û\Ž_¯ñ˜4fF{QÌN²X™½Ö´rª!ðù;w­[ôæë=2Krj˜õ5uU™ûͼgŒn ŠcVK#þB9LJ•)Õ…{™¶kÆ(´Ñ¥;ž’ûø?A!;Mäqû Žþ©úþPü¿k_Ê»JØ*(?´ëAuIÌHÔÁæÿp¬Æ€bÓ8¥ÀÆ…¼u3'­Áßë X²L¸—qt³/ô%ðÏÎC˜£‹%Ì_|ïûß;9„ÞNìˆêséôý-¯Yž]ŽÓÏ—­¯ûÙÄ]À¨ýC YîˆÖ»fôâô¸EŒÔ¹£ì? ÚɦŒ”<42´nGœÈýͺÃUÌï'E:'Ämx#ÑôP@I‡œº²üÅ« KÞ.ƒhg”œ5:–WU›ÿˆE· \—:V2KåɘÓd¹ç¦¬Ž~zÍMÚsˆ•­¦I§¡—Kã>ªÓøC 9(ç¶¥Íh;|8†,ê­ ÂrÐÍ~o¥ˆ±ßàÎ7qñ0<È¿«{jÎΨѥƫâ(ÊäÒŽÙÊ%‘G‹bvqO”³qOÔ!ô¡Þ<ƒê™ÞÈÞ#›³ñÃèé_2_x‡oñ|º|‡tºda!m®ûàY‡²ô¿nSÌSp'w”NÅyuž÷›ÈÃÃÜÍßD{Že².ú›—8×ýõ%ÒåïÕ(Æ‚2ä%Șò-±eždƒòû8¶L“…)¨&ÓŒŠ%?CåF?Žæ„¼‚?´é¥óѯXÄN˜²r5´sr8rN†\¨Álɰ”-csŠr…ia¥…Ðç…~¸yŸš÷‘ûÉ\p §}Õ•Â"Ò¦šΙbGàÜÜoâô¨‰C)X4†?á'ü%‘¶G³G}žS×Þi\{¤ñ*}Ù|{žUØÏÕâé ¦FußÐÿ“,”ÿXó}ýShÀÿO ¢hbjmbô¯«³*ÿ„ÿvw}÷B^Eå1¢!ï_cdÅ€IÛN±ÉŠ )‰óg(çWÅ™d@%!5ò°†c2e&š#!)b¶Yð¡+ÆÖLmrþƒ³0‡»á¼û þôù¡õÔrcLl4ßôÁ»ýºÓåuËõºõy3•ùÛá Û‡û¦òº§1JlÎÏÐjD"…ÖfHNd‡¼/*ë B~Ÿ¶– ¥ôë rÛÈè%8œx°Q*|oh¦ÂÜïå ‹v¹§Ñ¥gŠ0|jüÒ/Z6*ìM?ÉNs@LÄK•Ç60*ô& ‘ ³¯DèÍ4t·ŽÀ‹>ðNÏ mà-0„.â-1”*â-2$‚H授®ÜUt`ªùÛ·gÿanéN‘Ó¥'0?Äð]´“½\~“t™¶2$ : z|¿ÿ&þ;”ó÷')`ì ™¶ YÔGƒ'µP¦nµIÚ­HOë3 È/—ÇtNi )ÊØ×rÉ>äyž:WÙUt6æ,†òòA¨—ËâÅZÂøªüF{ço•ItÅÞiÛcuÊóPƒø0£å!•[·5»ˆWdrÚ&ؼ¨vdbl]%àY+‡8øóY†ø»”q¤)+[é^Ôå¸×iÂy:ÑsÚO»i—ÇæÊç») ÚF¥Í¦V4Ûðaö.5ùjØKŸôû¥‚ZãÆ_và ÏZ˸i­(â0‚\6üþ&Aj–½Xß'XtAö˜)±øÛ#B˜!‘ÔBiçQ1‚h±£PNÂ8J!]±î¢gëd¸iË!áB#•¿Q°Q1:6c«, 9Òõådt6ô°5ˆ|)s<š-¡áQvdÍNR„•ºªÝæ@|Ðv«‹vß +amÖ)†»`ÿò-$Äîvw UÅ[lFwY¾Ïöû­&âÖ‚â "D£«Ä€ÜSY{ù޳§6½3íMKéÏGM'jw›½Ì áG«xp¾å[|Ö«QWÁ9–oD®E[ öÁž–oÌ* ³ ¹ø ÝYà¥õòÔ—ä`íñ–[^¨šÝRKcˆ-ƒ@a©N{gºÄv|׺Ç--øHcËM<½ßÖôFB+¿í‚«±Çë¨ò—è ƒüð­ò—î0¾ò—Âp®ò—ưžò—JÉo1<5ÁÙßy£-…9Oèd‰Ím»ÓêÌ.„r¢Z³ôÏ‘ /EǺÆoz«ºÇPi·´äv.éÿ‡w îxÚ„cÛvrb;ùŶubÛ¶mÛ¶mÛ¶[ûßýv¿­÷½Ø‹©êé©ê‹©®§Ÿî™îýÕz ‘€Xþ쩸ÓIòÍeŒ8uº ˜æ¡¤Ø‚ÇRú™cü±úíŽç‡V©©Ee-öÇ×T«lÇž|”V>ÓøÇÓVÑšÚfÑ,ÕxÂÞ×–ÐÃ{|:ŽòÔ{íɎΦc1zf]$ß õFjÁäZ×!ÃíÇ/÷ˆ¹ÂBvK­N'n“s¹Pã6ºöo“9UÇñèrÞše_ GÏÊ»G¿—á”¶­£¬à±[–õ‰a;.KY­f€ilVèÐI%õê‰N¢É)„GŽLoò—CE{Isl^ Cµå-Š¢ôI|Ù¶hÐÇ딦àÙßnJ»‹¸ƒìŠI6z¨7)ÄŽmÜÚ>‹6·^|¸2ÈOôe5kï‚2ž\òþÈ©úºmNêÎý%Ø N1¡<¤!˜_躕ô)ÙR!“àˆ«wbDþoó‚QÍ(V;ãß,¡˜'×zÚöÎ(Ò-^Ý“b/JR¼Š·/â:`yhŸõ1&Z@Îá>µ‹7^XÊúÔ|![‰÷²‚©aÓÝnÛ| x4dÞ¸&BŽ•~ 䂹=ÚAQÓ²…µáÅarÚ(U¾¼Œ±&xiJõŒ*Å1ÄQ±jQ–UP­Ž¶\`[¢Ö‘háõK[òZ›ånÂÛ§Bl±l–»‰Nÿ hÊ”¼# ní ”œÍÂ>±ùÕ]#à–hSÍÛKX(L…6ÏÏhGT-T `n ©?üÎ]羸‚»‚æ…r€ o  ‚«I¤A÷xFi0>] {§ëPñ­Ž7›Ó­”®B|º†Ô›¦ðÒÙÊ´Ÿï9±U¡’mÉ#]° 3c+NÛâQ<аäÃ{”SÇù#“¦ ¸k­~,Dƒâit xXbô†/×x„ù7"br÷i brh ÿx;Ð õÉþû%Ý r¢I˨9Irì«sÚB&hË8½Œ jCѸ¾ ½áIMÖ¦ÝNSã†Ê?û[ÈÖpìáΪNùLí=ENUI:k¢'Úñá¿ô‘t€Ó}—eHš× U_¨x˜™©ìaÖa(7§gÊ<³ö"Ô_ʨùüYNi»À|a¸1ŽFÀaCzlRjô’+—V–p.F/Ai›–§ìãû¥!,©`ºø8a÷ÆP5ÆH@(µ˜v,â„RÓ‚¤Q¼âìl¢+³ŠQTÑ}» É 4{:j9Õøe¤ö¨w­ÂÜê,qc[qÒùª°-¬;û§¨(ü9 ­¾y(ë®×vߨÈdÁŽØ{šà—ŒŠK81÷p†G˜Ñ¬®žbNñv#2¹-Y¹6¡”)ñÁ3S¶’tfºæ…²¯™mçÔº æiú‹(GÙâÏyª 7ÒN¦d‘ME3Ž|‰ð‚µf´«Bå‚ܤB3 v‹¡zÞ z}L(¸óR£?¹VN3>O l»t5¬{V:¦}Û:f}Âe16µn} ŸÚ!Ê`õÉ’dÔ#ÿåö’E‰4`@@åPÿ¯Þ,%';G#2¦ÿ3š5FÍFy[Í÷_c"¹¬‡&¥B1+]Õ&‘ʲeň+,Œ-fH«”üÁ?¸‰Lc‡OQü‡/àïE½}õ›uQ“ÑKÌœ{q®Ü,ã6ZÚ’Œ‰޳ÜÇìW¯Ç[¿¾_`}]L¹#&íT¦À zí\öH.l»ÃÌà+f²cÔvâS&Úðœ6ãì‘-fŒ²ƒÔsAÁÁ°HæzÚƒ°Ý¤†@UbéQ¢ÝTû0↢¿‰¡ÆÒ{ lÒmS›•·™®©VϹ7vŽ{¬XÜß²KÒ²ÒîyÀp“…6Nv¹c€ÐGð¡ÕîÊš砿ۯ͕vZ›0¯Ù•VwË¢W݆›¥~)|>¼^æq3>7/R/õ.Øü¹nìã/¹†.^9]mOÏó¸có5ȼ 0ã°ƒ5­Çöî^ÑUè*uÐ9Œ@™ƒnB0CŒ„ÃÒË?*7öTþ¶XÛEEV™8ž÷Ør¹2Ë‘K…Žó§Vüã÷fú¤Ï'>:»—‚MüŸeýlužÆ±Ë§·€p©ÔÈ‘w™7:KÐÃë‘V¼ ¨rg¦˜yQta¥l gðì÷ÄC _—yžX4‡*\Ö1‹3§&‰SsÖEÇæ€g£X]ÉFÀq #ĺ%HQõŸI¢ð(Ìñÿô{þaB78óHÅ{a$ߎî6w^ƒ@’™öx%$ùAš[Yx2³è´°ÁŒ0VÇw|Á6¯<Á‡ñ©×sh”{úÇðÄÛ_²wÞÁEœî+l72ágo‹ècn ;LÿA(ÿÓpúCµ9þ-k‡ÄO2{‰óJÈÑ3)TêÆû‘ØÝ†í2õ†ãô!ý†!ê »74Šp¦ù`ÛÝže‘È”4¼WÈŠ_·¯ ÓŸÔ>lO5ÿ†3 .³ ⎒ü²ÿþßÊ^¯Þ ·¤ @@²`ÿ¯ ùÿœÿ 7Ê[¶KH€+íìö¢6ÉV”Të’Êm$º…D$àñ‰(c5]²1Ù.õ9Ô_ª þRD÷ÀÞh†®¨‹bD‰)®f®¼N§×Ïsz{¾@å4$q2ÖÝÃ#ða5y™ï׃‡êF‡±JHRy«Å™Éó ÊžsóîÜ}Ü8¯ÙL—°"sâ˜èû,ÇyàÌy,œ³B+¶iÄãbÁ‡,iâŸëýÈ…}Ñ”Œ{Ðßy¯8>%³r! A±®K“IjÃx%ÁD[ÿú.¿&,Ó 'Pì2 ÕÑ%šc}vËk׌Žc±†šhD@¡`Sy£g?¼Kô´Ý¬ð4õL“ѲlXº¡DW\¹›Ì];yUr½JFkW­`eÎz÷þ äІš¿“Éâ">8ÐXÓ¿4¢ŸäÙP½ÚÀ|Q„Í&ð:à ³LÕy¿Ny„„»5’|[1¡;37:0Ò¤›Î@¼Ý)Ä[è‚6ãšô[d·µäP2X…Zí.kWõž`Wý˜Oåž6W™)šeZ_kTðÀ=o_úf‹\rÄìM{“ºwXšN•yNºýÿš—e™ij1YÙIgýþ-²1&Á„ž&Ÿ´µ/u^ƒy}.ÄŒçø¾×ÄÀæ6’f*ÔlU;ÆÊt×ã™ëc{üP3ãd|rJEwÍhâ¾îzB’B_^C™›BUjguouˆøs7óÊGýüþÁ÷ßsŒæƒH“y‡­¤¿8È9rµk¸ +jí*/`žïb튯H ä›rÍ[=~Ö•*Òéib ¸¿åYv"YÈiK§íÎ-Ol×:•¦B›k^‹þÕ5Tl´¨ K—Ïd´JóM丰 :TF.Í$6Ô$W²spÈE–,žïej´ôäî° ›£jÇTéÖ¬#ñxÞSNi¡-æ„%^;Ê1ǸõÖʸ*@b‰'¸bmŸ¤ñ~‘E¸òn© MyWþŠ"*üÙ¡Þìð…ó8%6œ¹'Iî%¹ŒRˆZ_yÅÌTꉛ¯lOw“ún>íeŠ zâ ö쇜c$Ô`8@ËÆâ2öÑØ=‘€¿Uñ=¡ZÑÍÆ¯:hUÁÂõKz‡~*þË $ñt”ø±»\vàÛÙ–¸–­*Ù%M9½_&4׿tk–yzþ °a…·Šþÿk5Göò¸R%}5/ ë•3Ô ÿ&+×6H.½ø¦ÆaþZÃúºÚî¼ÉZÎ+Ù¥3œ@–Ü=c–Á+ãä[Þ‹áØÖ17$ õ.-óQ»S^3-NC®$¦ù1¬ž¾ÓÄ>ØþÀªa‘¹ú¹3ϲà#õTFt°ÌØõ“¬ßú Eì¯gf­ÎËâÁÃýjZÖ…1²&[ž‡ëÑÆœ¾ˆ»_š‰Ü~‚·éŠçðrväÿ 2y•ù‘½ü·È½¥^S‡õŸÆÖPÈØÄÔÀÅÚ™ÞØÙ¸IÑùÙáÙåVQBRVšv†JÑþ)ªô¿ùhÆ`lùOè§„øÿŒüo,¦s60³¶0ÔcÒcüŸ¶B’ ì6àBûHï µ7¥ýkkX *UÕÊSkB*$Wž•]È(¶“µ»`#ùÿH­–¤(8§îy}mòÑÇÑVíf‘éHгzÀÑ÷Ï€m;éQXÖ°ŽN‚‰¿ê‹ ¤R@"`NP‚tzø`B€I =†£ŽDú¡Ò°È-¢…@Q£Ûç˜g¨:ºLQ rŒ‘šØÂE„Kã‘´²Å¡Ú˜VúÁß$³Å²¡ ‰Ï<S7ˆaPçxD˜—¢—£Ÿ¨D…ñe¥>€i›å¾}sÏ)Ÿ¾H"ßÌ’yâÈÔ›_I’53«ýJ•·MØ‘`RÅÙr0~Ç™Qó`)Ó.³d(äë¯qgwáŸÝ)óñ·ÀÇnúÕ·\¶ Ùåc_m>Î’¾ïôåyÍ®Ÿ€mK“ޏ– EÛôåsÂX°3üYq¨ƒªT0~&Ȉݙ¸6ÑÛÃÙ ¯$Jι^+˜MiE ’È¥¿çŸÑL¦S s*£ã:L;£÷œW¶äÞ†¡CÍøÄÊéfÃçtåô z OQä¼ÌN„¯{Ÿäôíùº9qsó€a5²‡ï©C’\§k7k\¯̽9z å»ýâõçÅ™;Z¿Â©Z˜À¢KŠ™à•¬O3î`óväwþ©4ngöôÕDz¶£­çBþž­¹ƒåìÀ¾Ï¤V{’ìílýܼXž]Ϋ©bFå‘—ýZ³f7‡E«­1ÅÅq v\Ó¼ÿ@ü%å†ÖŠëÐl ‡”ùãX”(ó±î3D£bù!«Š}i~áY:lxïÜ^;ƒsÝ ¬d‰K½âc뚃ië*IÑ­÷­ºÑ_s %æòïUn½oÛ¶¿Í/ËøRv³[UNûCMSÊñ;ÖÝvÁý@ª¨ZNñû_NŠªOë? õ=´îæÎ6ÖtÖÎLô&¶Î5Z:v[œ> ó¿ý†]ëÜ &Ì2A"èÚ ˜]˜b¶ÄÅ ­ Ë•”^×$HŒÎ¥˜Í>Óu/v\øg‰“z?Mò°(§À>ξôÌSЃÍ4°íW½£X>”Ṉ̃½hœQLqˆ­ ÖžïèJ~|¨¹JÄÉ-ú”†ï pÖuxÊ"à›Ž´EcÜ TPž¥#³œâ´Êv ÖQ½Þo=”ÔÅ^Ñö¹XUc5òÓyeB 2t}4‹.ž,_0N² |4®( Fà1áB¥šÉÉ /‚œ’*®ÉáMkuA¯uz=ʪ鷌c _î"^d¡ÿ^;‚åŠ÷P«”Þz@|^¥ß.|]~Ñ¿#ùv=Òö ƒùìloÕœ’Єì ÎÎ~±çææž³ªî`;“gœª¶—›8V ÔÑÞoÏÎþsh6wÄ2Úvöê—ó»ŽnÁÌ­·ÍPù‹OYÍ’qœõšrVöøWÔ;nœ×ý¹!,š: ´Û%ý®ÁÆåµì#N0ÒÌ·²§Ž²ôgï­i²|ozµwgQyž›DËÐÂ1–ò‰$XoŒ ®ÂVwЂWŒ|okS­Wtª—ðýwÀÈÞ Ó9í4ݤ$§xÂ[›CSu€È—ž•Tó§mnóâè/æê×õ$tì+¥¬zHÙKãt:ÒfóØ—GLWw ¿âDÌöI*XNºÒS‰x^–²úåÓe‚AY)é«4HQm™•ü¬Üè“Iúx,kñ“a:_é^},=­m}žó¨d,Ùs˜C{ǚθÉhvìÜéIÏÐtZ‹£LÙÉ'Á–rŒó”a‘…m0¤•mÎ:5‡þÑeFù'$D%8[^Œûü\í-NÖ]óUçÝSßµP†·ÆW9d#IFF2qÝÊÅ"™öO-ì`ù}˜rÔp­ÎI?Ùõgš¾PŸùv‡o9SÙ¡ð$ì6¦ƒÿ®;=ÉÞÚMC«B[îphŒ;5ð(ýüR}i‘'¤ž+Mü+>ÐØÄ$£ ´%`‚\î¸üùê{æŒç¦£WÊh£»AZšdqÚaõƒè™—JT+á …Ô|†r¤ ~s°ÝèZ§ÿ¯ˆHdØ4]œÍ£¡¹nþaF…wjºmEëkUᛮᆗ2ˆ€¬ñ×=qœ¦êô¨Ìr’o‡È‰pt¾ '5¬’ s žª¦CñÈB*û«Ý`±‡·õØ’€IUõìLêj*ÕÎr¢¬êÅv\¬·$ÚãN„踺ԑFcÆ(öXC±æó1ŽÑC±h „8­¬Cß‹w|Ì×i0!‚¹¾ˆ¡å¬ò\A5´k¦1-‘­cµXµ.+ÑTæ˜üæç*Æè“¿ïÅ]zød±&¶)ÈáD»Ý™9ñ/¥™ £ÿñ#Füœ¸‡ –lå6- eB-wlY8'ä2¬£‚ö;Ñâ5h±ºRÄ´&âÚþáÇ:þª7\ØÍ|Áøw@’ý Å€ý2ì›{†`?[ØÂ÷Æ1„P]7–k¼ùyÏrÐÛ¤…+dBmw& Ì?ÇÔÍþ|²jjý?ʰگ,|¡s¹& ç“krV‹WÂàî “ª• `‹ß2-° HaŸäðâo+žÆ"_­ÏèkÄïü EHþ1Wà‰ŸÍØëò ¼Õ]Ò.g?\Àå~Y‹zñˆî–¶‹ýÒ¦›:F<&+ù ?$MRàjŸ¹£ofý³U‚~CÕ s}Ì;„byÞÜo èŽÅô¹ÿ“û­¤ºM7üâQL“9>o˽«D$Çl¡‹ýæ¨ßÝîº"w¸Íà6žÀ¯… ‘{ü¦J}†ÐûÛþs•ô~‰à¸T÷"̪ñÅ» ¸Ÿ>/Réûhu7ŒðˆW±Ç‡L Á/¹Mˆ›¨oíFÍyÚŒ¹¾þXé‡vÜGÜ06댗·š¹ÈgÃ.$qÙ°3¶ŸÈÒ´2/ü݀ݨƒþd]€%®C€ÆsÒC½¾@CŠ»‚õEÂkÒCmÞ{þ¡\”LûDâ¦ÖWª{zKçÖù8öl_7RŠðÂÇ)üX%ˆŽ“|ÅIØËÿ»^œ|KÑB%,@(@ihf´5Q:…÷×ÐÂjK¤¼/?¸öý›ï~ûÇ™/_.éïF¼'67¶BÙDˆDO&\lùÒ±Iñl¨Ô²…# ªÒ-…0$Éö¹$MÒ& »–PaŽ&xVs£âi‘¾´Dsþ’$ &S“ŽçÌuºœVGø{ôÊ¢•é˜óâ¤è´—LZ¼>KÙ@öp7\]Ó“Å ñi¾´„¾Qåω)¸M‡„æÈÔçJ{‹a^s#Œ“ÝQŠï~=*Ñ´„¥´Y•UÅÓ&õÄ.UÌgOôâÆ’Ê(µKêï6˜ÄÅØWQ¿”Ý#xÉ›Ý Wš°›žJxI›#^½íIƒ‘÷øî90m«»]ƒâÿ­´O‘Á})ä„„üÿ³'{# ëÿEDÔ­ì¶ØÑ¾»Þ­Cè0¶ñú6k.ÛuüY¡/ÁtøQ蚊$bŠÛû|ÓО«³[fàÐÌ)wf¯ϧšua©TÐT¦”Ûú²ÅBVÄ z~»ÞÝ=»[CACA¦‡ÝéþPk*·ñ$q¶®TðÄÙ^Ȇ²à~.îþÓ·3M#'3ï3øž±p©Ž¼km·ô³g¶_±žAgÞŒõMs˜SJŠTCÞ<•¢ÖÍrzð[7­}ø/!Ñyˆ¸9Œ~ö®N©¿mgPŸù/ç5Q¾ºÊwù¹»-ñb=B § \a¼²ÁÚXN+?ªtl§È©ŠL§s¥G$7V$¨•ÉØ« !$;P92Hª”©Xû¤QÉT­*vÚö”í¢Ñ©„ý~-Ê™d0ƒ¤ÁKÉ Û†X ”$V“À¡Ž˜Þ½ÝBKÆ®ÑJTÿ,Àöž ÞÚçYÉB3âMbÓ™ŠbQVìpî#aètU-«²wQc™gÃA4²‘H §dRµ")a%—Ýé'Vg<?‹ý¬“±.…( U.Ò(Q^„Çë75X¢ÿ"òö£‰c¡in÷â¿ôÜO´_ê 7ƒÛ\#E÷k·ÝgíÛ+ËØ-Ù âþ1Mi³#;‹jª&x5•F±aIYf‹¢©ˆ'²)ÌDKk‚ÁF+eê0§•8´e‡’ˆ2ÏpOX1G•SYº‡"CÏApüÏ®µõõó4±ú¾¹y=|ž06Üy²_ÍOöÆÎ_Üæ`AH ñ,÷ÉDÁ‡ŸZÞÕûÿ0¡q;p€,•Ç2¾Pƒ-Ñzð¨pñL9oC#hÒ‡õïp“Gr• |”L[Dô‘®e üò—®`­4eqjÁ:6¢ e9«3w-¢N,̯•jyF­5•+ ^ý¹4ÌnªFZ"/ ‚?ã0ñDl‹šY*ä¦:iÉ$òs„ð[æHJ³)1ÈÖZÚd¦²ë²C±T‰Bg–JWúCÀKþ±cر Y©Ä©ój»”ëWÐ Ö n¸ »Ñ=€Ýrîwû8®–IK?ÄgÔúÂï?G¿ãŸôâ())+}ú7Ñö-;dÌ['âH ­`Ð0S+trâ'ç+²ßZÐ3Ñ äò3ÒÈ­Ä„×'zõ ÛpE2k´¶3™×/ÿÔ°<4®×µj±t±ùsÅÀñ#Éwðó.köÖ±AC©WHÛ^ÎUÆ µú‚¿h<¥z¶ñršZ-Qs[ˆ ¾’µ¤îˆ@æê‰eÝ‹}Uóü\¥úQ­ƒÖ-þ¤HÏ ¶Ùxéá½?tE{;9w¼Eóõäõg¹ïÕk)q_ºDs­oéÃÙr k´€ai^åb$bèãHþò†RhâÛ(j¢šé_™ß málÓáeÞ®ýòž þ´Èâ ö°XüÙ R†àÐ Š‹nF¼¼­«å¿áû1j6Ù]Ò4Û©¶T5«™nå¸jOÚ¯¨Ñ™j/Åp—="I¨ÉMÌÝ ³Žÿ ;Êö\é´¬Wƒ?}#`²]0Ð>ÂjµS³!w'ÀrßÙñ\ ÇoIa%ú² _îöK⬸„8²Ó÷WÒÞ±371q{x©XMÄ3~‘¥É #É™àƒ¿[Úô0ßÚèÎØ÷…²+Ú§RV/x8¢^zih$}ÿ”Ha nÔnÁÓå ó&ýÜKäÜI þÊ ‹ü#AA~p€@ç61Ù-¬%nJÕŠk…ˆÈ£«úî¬ërÑ÷_YTÒ½œéÿ¯‡¡ÝÿÂÝœ¿í¶Ù1|âûM\¢žMþ¥µÒïcwíè/ ‡ã7wÙ5c#§Š¤$^söùÎS%™UŸH„»ý #”|>³››¿m–Ò£!XxJþ¢Àö"c›Ø‘~!R"H ,HCO"߀’üùzý¾½ØØ`°ëõxœ™ ¯·¥@JUïö$&¯šø–ˆ>“'qOø};Å ôóýy9úîúüM¼…2L‘Bêøîöüµµ)íÏk3ÃÄô‹^ÃÄ´|èÊâ)J(íqQ#SUýrw¸ÿúòþáåÃtôrø½8”V2¹¸;üøÑú}–™âÔÙû1Äð3{~»˜á¨µi*¼$÷ýõH Jèh‡û¤lc=Ó[áO‘sC‹™l·iמÆÉ²Ë˜v×<œK!J ÔígÚ?ÃÔÎ@ÖM¬)"¤)î4>ÎPÐÄ‹À3»÷–þç z–Æ`2Ò¨aIn!iØzÀÕ·Mëëöš@‹ñxBEUì~È­ =>œ]`œ+n_Å\Je9¦é±ë2ü'µñϼÂÁ'ÍÌ;ê”dNY5˜F&“‚sbÓZMuqøUøÈ™XâõÆôGn^Ó£ò2˜(GdbrÚ "†%‘”E¥Y~Ø'ˆò<þ NQ @²ibš‚aâêØq(?PËHѰ,·úÓQ.×\ ×Êã>º”D¨4›ž}_átÜZMЙlËß<œs6\TÅ,ߺ [1§fCÁ|¤jr³@Ò"ãÆ~4oöžyªfHi˜C+çû“ ½Òâèyz7ž—R¦–fEÓ’Qö¶ø%Ñs)¥ ¾„taêä“ñQkäs_ì'fXA¯Öëœw \ô¨&bEH†ã+tÓ< gG?&°_/j,ªØÐR‡y‹ž'ço…m !þ¨ÇðÄù$¨§|SX:»€x%M‰æö|•?®o]DÌÁ¹•iË‚ÏM÷y>Õp·`Ç‹ÂÏ1ýdÂàÇ ü¤lcvœ±2c)8é“1è{¤Ë–âµÄšXC• @ƒ|„ý|lrŒLp€U¥Lu¼åçxÇÑV´­ÜJ*ø¯Š“ø,Äç싳Bþ¨xcßð ñ†z™ëÖÂ†Ž°"%2“·#Ó1oG“O‰ªÅ"°œ±Ü'Û^ô“ E…²+~JKä´“àQÜXX<èÛM¥ŸNX‰{V,ð›Z[9]›ó)¥éTÄj_.&GÜ6"Ä,’<+©ù× þKå¾ÿÞJ°xŸ¶DØêì6=ôª ZM[©jÁîª6=|mîÍ6E?d¦;ŽØƒæaÖ¼eÖ ™|«Â­ª˜ãàV¢{× Iî 3¿t[¬…§[çRëP1¿äGÐÐ#i†I¡r‹˜_¾-ÅÏH…¨InOCý&Ø\2.WΨ˜Ê.…„íe°Ó qW>eν´ÓX²ÄïŸäÑ€œê9«ºZÅL«”ALuÊW#† ׆`häâÿ4¤x·¿Òh˜BVÕ(\!%ÒeâWw¤ò××ümÈ’u­?eÇ»ýX,p)ŸI£‡Î¯îÞe¶éu¤Z¿Ö÷i³Æ¿ÜkÙê3ƒ„­ã‡ÿöáv T¸1°Hƒ#ÔŒÐr[þ/Z®-ÿM4›‚FÂð¤ƒB>í/–®%žŸIå¯^Õ²¤Þ©2œöp=ÝÕkÅ:ˆ¯Í ÓaÅ ¶ÿº*%i½&Vô.ÍíP=µÞZè&àšt"#8ŒhÍP6ûét;W>Z×IƒØ‚G%4£³ƒhê#µÃ’ÅdáHé‹’{™¬Y±*B•–‡¹Pp¬9Q}ßÜëji¥3™ºUÙI ZhˆÚÌÏ÷ŒÈhe=(­ðÜȉ~è\Ž.l%`ÈiD@Úb†Š‚‹éºsÞßYwÔÜ2ÖÞOýäîºêp'vXUÉäA ns¼:¬[zFŠüÅÕàtšdX‚äÕ×F“îxHôJ¹Qäe*™´ç¡ï˘QÕQ¢í^Ž_Å™mJ¸»®!@•¥»×b³dh…œk>$' 5?õ—Ðï¦9“dSeNÙ…LÈ<[Ê:ÿ2Ö!Í}ø~¥¨é$ò#õT÷‡'¢IM(´ˆg¦ –Õ`ï´"ärfÅUÖ4•šáúì8€[ï?„ ©¨¼x Rb6%ò§MCRÞ äË0É{uEl«ÀlýF Ï!KkOb'¤ÌáÚ]*mqݳ¼h™ð/¾!ÌøZ! b:Õ¼ÄBÇÝ`|Ã4/XŠ„G•9|Ä^™ƒd^­g®­Å‚U¹ºˆûeÔÈÏì U­Ò ñËpa¶ÞiQ÷lLÁ㨈*‡}\¦ö¥¤î¯Ë|¥J¬:Üs,ÖÊ€ Ø;`¨U‹? Ÿ9ÚnŠÖÊ•Q:Ñw‰µ°£Ž·Œã(ìÇtÒ+–òu’ï}“‹£˜¯ÜE­–2ÒÑJù­ª…²3œh.-Ѝ€Y§ðäbÎôv ˆTÉÇF‰5U¥•‘ª.rÕ2u¹BgJ›ìŸáF»Ïý{ú‚dX°¥º¶Äƒ‡mwó'‘4¶/±àðhy/ÑþM‡h½zò(Â<3Øñ6püÎ oý·¢ìèÝrP3LI$ZC1iRÕ`9_ÐÀ9«Ÿ²se›ƒ·½V|âeþ– €Çc¼;Š»/qæ–(ïeRÅ  n `—ÍúbÕñŒXû/ÂP÷Q¦Ñ‘}6”Ãv¤C?ŒK‹Ë¢V}ÜPÏ$/nê*RVšgþIŸ€?¨d|¤Y¥¥6é:J˜^ÆñI‘_(B T½-AK%§ÙÅC?J¢>}…ŇPƒ:=|Ý ¦öº7Cg>(¨C ã¥^5ïçó¯s%°nOú3GÀ3Úls,Nëí ÀäÓáÑüÚö½«ÜMÅ:µÝA°4gøè5ñÎ cƵÀ@°ôÃ0N¶B_`°‹Ci,ÿÝyÿÓiìq#£DA(ú >ÙU7’ (r$Ó¸3ñ)¾IkãÆ¸X\Yk•dÓîA‹¥~PŒ>/4Pò¶ Ö,ºãˆr¾²lD¾Y˜RQÄm„0m¸–¼cNkjФ]Â×ôcˈ1à“/AÇ¢Á)¿ýq  °üB o4–¸¹¬Ž[?Y.‰Y•Ⱦ\Ðf#©»‰ns;ûw•à vD´»¢—XµõúÆî%•÷¸ì>ï¼3¾'h¬^“ÂçŽ;Q†c‚-$ÉQ¡,^0ÝÃÒM°ü)Ï[8¶Ò¤|éh…¢(<-ƒà8þ`B·ü%2à·°õíw}&h"ûcÏ,þJõ­NGý­Þvÿ‡24ö»¨qÁÿ÷ű¡B¹Î©?†»WñûBqR½ñ…ºw ú¦©r\ƒ<`f›¼YŸ§íöÆÀšÕ¥ýC35£¨ßÙk©‹1ôÜ÷kPEk¾Ízu2øŽ´É»rÈx §­75ÍúkÎŲb£0qçwКÉd¿Z¶þo ©2Ø %Bâ û"iíEeђ鵹ߠlñ"ØTI$pÈŸ¨ÙjÓ£¦±úZD­ Åíg%I{½ `™IrÃë´ªsRX tÐèw˜»ÿ¬}úoóDC¾£„Aˆ€€ˆ€0ÿO^ÇDçìh`ëdñ?l ¬ÿçö ÀÊi»µ%ÏÎôОCµ)«šlÊu{¸r«nbãﻢd.ÅÒ$=tDyÇq&"€ûóèÖˆH"mÍÕó󀺡†Á?èâ%î·§ëóY](ühK©4D‹BéËûþCE{ª[A“á… <Š×_ÜÅÁÙáéY}ù˜D-ÄÿwJ#’DCmûÅ¡)¤þ¤-MSnfS¢Î˜¸P*’¹h5¡³;¹CFؽ;ù$&¹â  Ü‚lV¯‡og Рé‚$u/3lÒáÛÙççäÔäöhÎ0U÷‚èûqQö½Õ®MŽóE65b’"ŒØ¡@õÔ_ÜAYì})hï0:ƒèü™¶ñA¯®î@Uz ôAèFÈç~§ðu³ ÍäÓÓž5’Õ4òØñ¥²a-g“û'‚sˆ=„3)dºÎ¤ùÏ6tÐ;jm¥~¡ÃIFê¥Ò„í­9ýnŸC§û„ðïó×á› |¦<<ëÆÎ¤áË+òëëÍóæ¿/K;Ζ±þv¸øoç_n‰—BæÌóZ?7Š:ôÆQåó+¯XBprªéYÄÏ»ß!P‡»°²¸ß»§P°·ªþ~?0[¯Õd†#"ÄA”Uó”IÕÔJ…}wiðéyˆV~Œƒû¬¨‘‘:Ã0NèIP‡Hja ^^”ò>¾¥±Xn½§/ëÎp$˜L~~ÐÓü’¦C›–鄽Û˜2œó˜þ©]švå~/Û¼@ÜÂurþ *í²aËì gJ«Áï&ýÒ-¸ ²îvMIz7¯§ï=ž$Ð&Ø µ³RåÁ ÞÈNûá­Ù†ÿ\ï×ÿ0Që`ý´Z•~[¼•>S1¯¢(U£tY–¡6Q­å<+hØIŠ®MÐ’´‘Æ´ Õ­+»-X‘sÕ¾Tï4IúGÃîx{á†Y¡þfáé¿çݱäV:Î/‘?o¼SªiTS<±ƽý-1Âå-ѵÏùžJU ¡[ªðWϤã2:Lé‹iŠï¹ |¦>¢Ù|8×PÐ=ÛÃL­ƒ]<Û´+róÜJç´£æíÆÏ„wµŠA¹Z#5䩆FNLÚï‚ünˆg^•2™!.îù‚8×¥¿RM÷'w [ñT¿â¨—¡ÃOªÞ# â¡S&ýmò#®G׬‰àKd™‹GÚø£ÆG›]€¨`]@dоЮg–ø4º”¦‚t}í@þ1 oøD4^¸72T^æÜšywl†¹‡ÚˆØBʸz¥L´¯ä?¡ÞÒ"â/÷Á*Ajm¢ÒóE±äÏ8¹¹¨Ë é#¾ò`‰€šž¤utUHv².v§þ]¦÷˜Š€W9PkÀöL«ÆžµJÿæ¨ÿ‘S …yF°ÛZ(%,b»ºéØub h”+Ë]"Uü»r¨‰*}Ÿ"'µÓú]þgxÛ3GâM½F³ÜY'eøkRóoXøÈå¥Ga­R~÷ôjVJ$ ‘wFŠIë&ÙCãv<ºe…YMù¼Aˆ8šY./ú^vNçó!xÆÁƒš6¤¤I°†Ñðz-A½˜;°³¼K—DrQ¿¢Ÿ¹wäg {¬p\ !UºÙ³ßѨŸ–üI¤|¨ïÚÊ%·dªxña\Fa+ÞŠ‚þ™gõ`-_,ýŽÀÓðó^{A šy‰'æ4lÞ¸Lpàì<ܯQK@&&‚VM0±¿ï ‡B2ªµŒ`¤¸8ÀõMùBõöKò 2xò®Ï3aÐ_ >^‹Õ ²%Ö‰h=º¼<>µPKþç8h1x ]9¹„óçå,«:/æ’}7M_{ð q ê§Á¾@è‰B"­ÙZêüŸàià\ÅÜœþdÇ¡‚U±b{¨ÒZå5ÀIzؼýÏ)ìþ™†”6+4… &¶¨ F(¹À?ú$8VÂÉ`ÞU« ç¯þêA<°Îчè2ø˜Ê—Nñ>RëÇÅ=…E)(+#ªœŸ*0IÿÁ…g“d_§òÙdC¸°U m¶Žnö¬‰›’Ue,C-U†ïc¬ðÖšZÓmè1’{øóÓ¸Ãb9MX3%zÒ›>*ÿöpûý‘ì×…¯s£µöÜoäÃyóàžê.HY i?ð#°€á±çGÃdúYQ8ì:YôA+)•ºójÎCnæ>Ææ‚3¡ÒÙÚ[0T1W³ÏÑÕúÒmmê ð U…¼çµ'°íWáýŠ¿Óˆ‹ÍJ¬!i‘¾t—XpYõ6ê¶"³1c´ù ½ÁñÅF½´o>45MHé«IܤvCŃþÆs‰]¾î Mp…§úƒ‚U·QR^ÄnS™ƒøs/¸æá- ¾âƒ0ÂÂX#m›‚ óœNjœNt¦ P‘¸8=G؈O‹<$ê´îÏbâû™ù –8ü†ÀtN: Ïrl%rÿܼM-`•Ö(X¡ Éb4±'ªÞ7dº×Ä~_ˆ&š­*I–š®C·*iÿ§¨CÍ+ D‹P¤~4Ÿ$ñToíuþXŸBéeøž®}œ«4”;ä>7.…Ä3¿bÃ?¢¨ñ™Û—t óoÜžÏâõê’é+?&L8ÃBÖÑÚ-½¯s\\Û9óìI‰_}>¹,öô!Á ü¾Ô{q‘C«9¢»û?3D“¥:ÚcWã\“ºÞ@Ó0„ë÷z{ ³ÎD|Ñ%‚œþ³³¾œEÁäÖ5²¦p€Ì9:Ã&u‹rÿ6Y št䱿§D Ç(¦ÓÆØÇ#|™k!íä·ãõ}’ñt¤U´Ô‰2Ž·•»Nû•ƒ½ÙY’@Ï -“Ôot!;"H5NÄÊë 2«ËÎ\CÞðk´Æ…³êì›KÚsOÁ2”ë B–]0|úx‚ôY¶Ã³Dá¦ÅjGTõ­â"pŸ€éÄà$p töÅ ±R¸s[9·¥la§ìçÄÀ!^6m­Â1¯©Pm´}G,öó'=9FAãuPÎ6͘GÛ¬zo÷‘xPÉæ:Hšê¹rUç7h!ü‚ëÀï&J ’Ý'ÿ+”D¶ Š°5GÚ(Çቊ1aºÕB± Ô•«±™txHu*)bmYÓ Ó½)ó,?á±Ê)Î_™Y¤¡Mê2ÛÐRWó@Eb’~!/…Ì‚l±vÀNE— KÙ-‡zúDÀä~Ga‡Ã¦Æ·d‡´£ˆ$û|’ÃÈbÝSÍìCýJë<./ÝAƒÁwµ¿˜ÅŠ®êðNfºx ´kcµ3ZO óm=qû[os³Ó äç=ÅÇtÙP†ç½KB.D;Ÿh˨®®ÙÌH»Ù>Ùã½E«­ë°ƒnP4X#Lˆ5â0Sù”ìÄ¿ÞÊ„ j5Ã9šù|ÅÍsÔ‰Ð;÷ÑeÊR“2½ ººx½Žwø-óˆP}TÅ«1¶5ÅÍÜ3Ï~®å¡Ê|¡‘‰ƒ‚Õ°¶âÒy’ ªµÏŽ:Õ‚^øWèD'²ò=¨™l‹`úê ºo„îõ9w BæG3QL6hä±rfèfž÷RðÑœ‡5Îkžwa`0“DÀ*Ï´$G%Ëš9“™M±[VŒ/+»×(Ÿ?…PPwþõ”ÝÔ»$~Pú¦vÙ©Ý–ÞÒ:d£JR‘é³—Jm!+<丬ã†NŽ>BK_ö1d-ÜëB%]‘Dm»‘ ï†ÊzÝ£­Mì,ñªOO0;RÔ±¾µËç Aô%P >ÁÍîØô‹âí‰r³aÙóO€// Óé~1@ãÏõ=QK¼%=Ú·"ÂÝ`¡ é¡ NúSn¹OCàá§»‚lZúƒQˆøËSz‹WC7‹(I&wôSÁbÍÛ:ú¾*Â’‹ Þ:=æµK•ý.Ž«å}[&39sæ3£Ò©Q±u|Âng4kb’–I–ÝÊú‡UÞœ,aæD¢eʃ@©øØíl¬_'_æA¹KyšZ®ÁÁ‘«¶¡ô®ÞÁ‚ÿ3{³~‹išûGF2ÎPÖý£#„É ZpÔÎ5n—V“äŸ+çö²S!ùñ13| Ëpg~‚Ђú#öl \Éí—Ñ ÷áMýäºS’ÿÑÚ™ÀCõ½|ì;%BIÙ³–ÊBÊ’Š˜ÌXÇŒÆ(¢…P*iC’’Q*¢•¢²o-„ÊRY"ÿsI™ëÞ;ãûû¿¯^¹W÷ý9ç9ÏyÎzÏ}½Rö] [½¸)»³L\ÒÕUIÝ+©4ÉŸkìÖÄÎði0½û4&Õ/twkYsEe¢äÂ’£™5WK<1:¸€§¨³½³ðñnZ‡ŸÙ€ø¬]g‡“öi.U¸ý(ãR÷᣸-!’eļ¯äêï7¯Ë Ê~z{ñ÷»ÛÚ]ljÛv$/ÐdGÅw•„Û;g-¿zÏOìmÿõÌ.çÊ-Ñ\‡ä=óuVÞ<;e½F¹¹|ûžº/1Ê™9Óâm;uE•kæ&\Žô¶Zmlo¥ÀÊs¡Ç,ª, yª¿ ‹òíþúÖÎ…R-Ý3PùÓocûË0)ƒêé62?f¾h¯úeN¹ÎZ£#~È+ÒðÇÆòÃý/´—„)¦â ¿ÊX¸¥©“¨ßí7tºK' ùœ­[y+ËfÍqéÒSŠÇ—=<Æ:ò©N¿¤WÛ+6QM-OûAI§hƒ»“hÛiŽûÅËsv:Ô·—\«¶z©úƒsû»îtå]ÁÙzÞõZßô9/Áù¶…DÖíGÞ=Ýílv7-ÝìÝé´üÁ%†•Ïõ¦eÆ¿Ž&œHq]n7\4®Cñ»‡ÄKk¯O/?Íæ<·$–?]À^.¶÷ÓU;6}œØ¼UBžmz¨VÜ•ø_{—¸ ›R]srµru„(ÒÞê÷Èõ?Q”q9õÐm¸¨ª–coQvI˜VËêçÝe‡¸~¹'7Fï–gÏóç¼ÀKš_¿çFÍÌЄtÅ›¯6šwi½N¹Ô¦8ýø9Ú’òºW<W§áãÝçì‘ìt,Èð¹TÐɼ|wü±®æ=Q"Í--¬{RåXýÅñ¤*Íx¾ó»‹¸sà§FCÃ6åy/½9º²m4MØzNÝÿ®ÔÂùæCÏÚ’Œ"©‡ Ç”µ¿¸=ìÙÞqÿTgýZƒÛò:)u…וæ9:6/Ü!5kKéç»?Ÿ©¨¿|[Í—\õÚ~'ÏÀóŒÐ7ýºÛyó µdb^½Ýþé+ŸðFm9••–Ùs·|îé<ü=°ù±˜ÆoíœÒ’z¾Û–ä¬Í'Õ69dóËVp/¦h°Ìå–È|¹­‹8Ë ?ZSÄösžóLC•%ûW?M=˜}3é@á¥Ì˜³{\Ãî’-¸C¶¤¥V¤ÎZuÿB~ç]¿¤;òÛØØý§™î¿²Ìcû5©ÓZQ_,ΆÎ\½W/¡c Sfiu]\d× b \ƒ¶^êW—ü#üKr<úGn°Œ¶|wYuDD3åLî[/¥Dõ åµ2Ï‹Ê_ÍŽ_tþNåkƒ3lI¬¤ 'Ê¥E6Yz&Vä…qs7oÒÑiùƒQ¯ë þ{Æ@tñªö VÚ¯¢ô$v¼çðQÐX$7˜rˆ/*œxÛw§LÛ¥kÄæSG^%>‘pë˜ñƒœ*µëÞë®UJǺìÙ9x7X—MB«ÉFGwáúâÙ»únõ­·þªïrôµ¨uþòØó+´çUØy;²Ù q«)yªþ¹¤’ Îý,rˆÃ¥9ÜÚ†§@ô÷¢]5Û[¥oǾg>’HXŸ||ãìd©3ýÛŸð5Üm´&eÓ2¿‰lXw럪qþ½DÛ)‘GÜ"·Ýâ›÷·úªH>ÙcN¤•ˆª¿6KxÙžG›ßì¡â~‚e_J¸æ6ãý™#Tg{ÖìŒmè·HäÕð𦾚›¸ÏQŠIU´ŸùœeìnvŠ7vÙ~YüêÔë@ëää3ëB—Ïz¡åÚ¦tapÂ3±‹¬~´ð¤“BMÂ/Õ¦7ítûd<“D¨Ý&ÚØþë*×9Óyå×oùR*ŽÈ/Ú§u7Áªñº)-"té’“¤ç´¼c2Vm‹7&’ýú{×õÉ{Ñr®¾ìœÒªœ-õ42f°ä÷ü竞è|2N ˜Q›ï ß}ªìX eRãk”å.vþšâPÁM¹ ë}ט• uˆ¤²ìÉ\¥ä"ê&´ÂޝìÜô‡gÊØå¥…øåÓgc£ïôÚÌýQê2{kÕº/r=–Žøe¼· Ýqî§G²Rqÿ/«EÕFó4_mö9t÷|;ç•ÚôÚý×?è¯q².QˆÀ äŠñÝü’e××0cðžvц“V±I’y§ŸÜþfƒrÔ§­R3‰ÇÃêl é‡$:\'Øœ÷ü¥XЬÔìå ÑJý.°äER3iËëÅÍleï**Êß<˜yØWÈæV‡€äyI OÚ/¥ÐS¤kG|íNÄ:ê…Øà^˜«­eåºcõyÜ3Š×¦Á׿;–n\îj/”¸¹[M°ûX¶·îÑ[ÅIo>Ïéjéo‰°ë¹T¼à•ć5ÃF\Ë vö ½:¸íœîë³%õq)”«FkÖ>V:Ü¢'7«ipZ×ÂmeEv”IiYöŸ+]¦¿Nˆèª¹ßÅóð€„uÓÜ·ÅoÂÌ.©uýŒžë²Ô(äLâ­ûž¾\gˆ¹xWÙyWÜܯ÷[Ó[EÞ~˜µ¼W?êQËàþtß7uñËÊo=â£Þ0\:÷¤õÕçÙ9®Úz=Z}ÅzÒÑüÚ]­'—‡ÏËoÞ*ø´½î‰’óÈví ¯×e÷8öŸ[šímÚ¬gr¯\Ësò+Õ‚NX„ß}ÈÊíoš%º)ÔtÑSŽóß©5/ƒö*„h«5G4ÆgÅEžÊ×c[Ò¯ÙNÑ0=5§Õ³ù|NZ•Î¥:maeýÛß{üC|ï}jþµªéÿçÎÎâÉÙú©)#òëSùÖþ3kvìN–VÛóÓCe™ä#b×#;¶öÓÊV7_)¿»cð2K™Š^×Hj>¯Á¯u@cF›¶üÞÙºúi#G¿ ¤úœn¤zKÙ®Q‰3XYýe¤FCÕAw{‹>_åJG·K Û÷P!a—5þå·+®‹Ö_ï^Ìÿ„{¤wöjMù·~ïT7ßûæ@ø5'\ç#1>Ž{MËy™·”gC¿ê.ÍÐ{uкN𳢎¬^M«Ò%“¦Þýdéî»&Â/ꥩoºÃ+7<Ù|C«…x{á¹­»´ãd¢®}KýY%J‘¯ tϬR|òír©x¢‘äúÊâÔ¦ [á‹ËÔÄ(œ#b…dO\õ²xåækuZp֥›:ÈUü¦ROû*å²é¨›Óýq[¥FªX]Э9»bíK¶öuåØêïs´í©šïºËÁ|šÐIµ‚ãGOàV‡Ðvšš2Û¡*ÎDj­ï‹ËåÝzC4µGüç>¿ÿ¼ä¤„skè-¥‡wìøjŒ è·½Ie‘idñÉÒüfÖù9Gáã>ƒÛÛ¥ë \í/®tiжÊ*Ï]øe£_][nÀß4±-ì=OÝ5ç7šœ·vÏdrû¶÷Û¬ZÅ5 Óo_¿ñʪ&-’¥iµõƒlâÒa,ÚéûÉ+òž£kò„/ÒÚÓ¥òsW±þƒò_F>GÅ›>xà‡Ï2Ý#d¿c’äÒC¶"¡R_…/—ÏY×ß”#îz,²¦ëâÕ°¨†k²Wuºn~-¡esï8í${¬rÕ«ÐŽ'´W¡Ú‰Ú¯ëŠ ûˆ]¦D7s=ø×)ùd ¥Y%[†ÜÉy³1ðëÊ¡ÄK·EùHÝq¼ÿîφÏ3ÔjËŒ§Ùy½˜É»øãmMuÕIMon5(Ëýüø„¼“ðâ,í.Õ½õ1§µî®`ÿe’V¥'!EËSq”qÿp1þä‰ÞGÜ+YøÛwâ½ï4ú½ˆÚ»ÿRÏ—›fá‰çö°MçÖï7~ êdø¾&ù5!(]Z¯Ú\ãÞ,ãÏY-ËT̯'5~ \*Zg¯vt½™„ß¼¬ŒzßšèÓÃ#õÞWšFXmW±°Š°Ap¸[ïèâ&üǃcÿóÓ4ÜCèokS{Ce 3ÕßÏp¸rãÀ£U%Í!à*ü™€I S𸍵¡…™©½ŠµÙDqèûÈÅþþ‰×N$PÜU'> f?ñQvºGÙXÆŽTÁz‚›î‰ù,ÿaÁzj:ÝS«XŽnÁz\‚îñíHƒþÞ$"“#IÇÉAãPÈD2 $Bê@I˜1:‚+ÁÛÏ›!JÇXƒÄ á=1âtˆ4„O€&FšSˆ…q§P‰S`õa± ­:SpM6T ›#CÇñÅä0Ì ,æA_¯ `¨Yt¨÷h¨@oU¬Bï‹âì¨'”OcPJäŠôzߟÉ>Ñ‘ 0ö7Aew ÙÃÛS%ÈÇ$_©ÑÑÅ| $6¦ƒc¸2d[•±“EH¡œfºˆ$gn r ßu¶R @ºÂ6щ R/ŒèÁáý²|ÏÀ¹Ç6±Ü!Ž®‡Fb”¹‘¨ßªã™“¤Ce ÁQdTô+oúa ÈÜ’¥ÉÃÚŽñÃ\Ä­àÏæ@Äòܳ:×ðløà¼sb<"•J¡ÂyP]ùsʸ/ëÄ`ñl$\Ól쇱Ӿà¬Ùáùû!£õ‚ôͧc•ÌFgSÈ4b R[~dQHž2(:¤‘ :Ò4Èèm'D†>Öªdý  lðtÊÎE‡‚¿hj0226¡Ñ{pEa#7ÎCGšãÉÒø'làÈ¥¯oÿ¸h`ÍÅtÈ09t¤£7qÛ¬œM ‰4ñ#9p…¹…–Ëë€5·¾ÞÉ3¥€Œ•˜CÊ¿}î¢v«°v4<ˆ•L¿ÞŽ€¯à*l’m—Ú"ð쉠)Hc’7èY #­ò‰žz ÄaR©Þ …!`šÃÃzDÆDä¬iðž§uÛÁb‚10òôÏú{AÊ)ðÔ÷~cZ!…ýjW4DZno¶^l¶ïÖî~+kúÉ¢cç¥ÿ£^ýΘŠÌ|'²ai;Hi%<ÀübÀü׌#£w”\É p‹:Ì4³¯E™Êî ?Å7Èv ¦zªg{Úoz ¢®Ü KØ31“[Ð×{¥$‘îq«y°ÐÌôbȵEâÏ@²Yxááã ? {lÂz-ÑŸˆ§­%’ D*ZÂ5f¥€¶×€ƒ7sç¦cÂ,Æð¨Íæç °ƒ Þ…< ÌØ¤;ˆH0ÝŠ:DöËÿrDX¦fÒVKŒ9 ;üV"att¬ <Ÿ:w&WªŸ~¸#Á”2Vë gÏ5P5å& -çk `‰¤Ñ%T³@²ûØÐÕß­P‹ó½îB#×Ç“ñ‹àñToüf /9ã’Y pô-‚8œ.~¥62Þdìiú´Ë_"«„ WFK‚þ`’Ûï2˜‚ 2ܾÅíò°;Þj„ gÆ>ÂK š€é}@{?®fŠ 7µ2$àýi 4A»ë¹Ñü9icc„B–ÜØ_ ™ž&ÍÑc&uOÜ­™ [¾ Èéü>u8á½Ýmk0á G<)häO% º $¢ÕÞ¿Ä€‡ÂcßSý'bo%‚\|5{O·¥‚«<$>vA¦Y=ñîÁ¦V¦‰ÑBbÓ ¿_>pºÝÀØtàk›˜›úùÓ‚™ño»Í½²'€ExÁHIŸNê¡sRã×ÐÇ3H[Ñtl Ý/ƒfyáññ†S:ÈXo¶á¨óÀJå\ð–ú kM¤yQFÞdh¶ ½åíVCYV>‚>ó":ôÎ,ô¨#b’—„qiä>~x¢ÛƒÉ ›<–b,‡ÐeFÒ²ƒ-!Oôã¨h†UgôSöIs¸X¥8ᕟ7™L×Q1¼­¥*?ç¤)žõûà£ëÛãA|즜¡¿?)ØžâKDIù§[í1 ?·^>Õ`x€9 ärPðüúŸ©#C:®XsÜñŠ4>×:Éåå)¹-Î…·Ø ’¦$‡l%•ºyY3€•ªgÂñò™Ãc®,±˜},å,ÏŸ Ûwƒ~üÛ<Øaf_ó¡äDpU„ƒûG.šs䪇‹Âׂ¤[5¡#—å!¡Åóñ–3 £“J£ý¾±¹ÌJX© ÍÿES:Åð‚ÿ øgX‚Y>3:ñJÉ«ìðLêÝ™Š$˜úH=ãLl]Ä!Å3ìðLÞº÷™Éd‡®TD/¨±" ³”NR¿˜yIf”vŸoË·,è”ö>f^É!²äJ‘õHw14Yk=I¶¼tª²S°ë}ƒdèµ”²ÁíÚùrj²àSéÉá̶ûˆT©˜šhú¼ x ÄL­îäF"ׇZæeÿJ2Q;~ÅiWÍÖÑ&ÕŽªúÿ ÈL&¯æ´Ù Ú²QxçÄ©‰iI”Á¬NÃq>àÍ  aF‡Vüˆ‚6"âɶT 0-à×’ˆr&Ád¼Ÿ·ûømÐ1ƒÜá‘5U 7W‡Íg\pÍĶ)hþd0§ù¾X½Ò”šï¤YÅ Næ5‘Ù™éB?5Û¾–½ø ûߌ5ÖÕõ͇v%†³ÁGyÝŒø á&Dw 8>]Ò°q,uäU\pËtõ2AÇô.Ëmñ1lÀ2ÙàƒéÄ>¶Å>¯pfg’*?0ÅM8°iùzÙq>ìµ°/¬ð©JÅ_ €hÛ”N—Üg˜«Xážü!ÆLhõmjîçc£.[ÄàfÛßÌ‘‘¹]Ž_þÊHŒ>|ÊÍŠÎÅ鸖¿š5®h“Jë'?½/éü’ `ÐÖ úuA@ôÌg.Ö£G4ÓAŸy¹i  öxª'šœzêÇÍÞïå†í7ә¢§¸G½‡í4ÝÌ ß±0,ŠŽCÕѸI7ÎÆ¶wïÞ]@ˆŸ¾fû[œY¡ƒXl-ç—¢|* ‚*òÀwaÕI1ÔB™ØzEë(ÕbNøÞCKY$piäA›4!Í ˜ÁGîzvóÑY7‡ 'ðDJQËI`ß\^xdïWfÊ`b¯²ÚÇÐÞÝワv½Sg‚޲†‚³žV®¦³Œ}¶uUеn{Gïâ™ýàênÚF]t"ƒfíšìê+ÐŽ$ÓI‹ÁYzèP%TîÜ |4{’*/E‡bÆÈe#E–¥àJÞXô­`ˆÄì5®x,,6P°ÂËo„NÆlÏ£í> Í®~ÄÁ[Kc4$£Õ·¡<ëGÇAߣ|<üZ™ 0ÿŒG0±>Íî ç¸Is V(Xè%ÃÑÙY»±É(ˆÝ°ò ÉD*Ö´íÈÞ•ï\€âôIs6ÿ«¢Ê*ñïû)@2€>¼»´fê’X™3ÿúB4(ÉpÀ§¿/ØÿW%”LM6÷y ¨d©“ÖŽ¶®›‚2\ímïupuKè{»û1à°9"döÍù7E@_r.<áÑ.̰1ýye¯Í¶e .Mvúù2Ÿ8dúâ±[ä$e®ÐN ø4ª ™iɉSï :rJ< jâx&ÕØVÿ©É1Ûå諬Þ?Ô´à±7.€YEd²WÂÁLpY+w…7ÁÌíýý)T”ž¥  oæQ1§ Ã{–U˜ðщ#L/[`¹föYpõfRõÈ9È=>»ˆÌNö©M·…Ú"`ñÕtì31lS‚7 Z²-Ys ‰@¤Nôå¿)ØE­Û»©ÆˆÏ›$î|ø?ˆÿUeʳ—²º^\­£ñµtâ Žý/âÌúyóµ+ @_{’~wÜÓ${áÉžDæ†iïKÍñÐË@ßNÿщÿQŸY|vÏu®òûà;Z“¦ž”­”wµ¡Æåi“öÝÅÐøSœØû•Ù#WÌŒÙÌŠyíýBÜiP<1À>+éØ-±ÙtÅògðo,À.Ÿú Ô¡ 9M jN'úñÒÿƒ(JߢëüW­x T-éT ¯L]•ù¶m¯Ùl¨ÊAï@ÒéÞÊùºÌz¾üëh45À/Ý}7§ ý÷%¦JÏ%,]Æ;ÁàÖ˜NT7ꢣ·±sw,½^r8Ä ¯^Ì "ýW_lSh©m®›rƒ=úê0}g~üÅ9+üö`úß + ½âê.³IþÆHáƒÿ¤Œ²-Û¿»û0Þj^øV<žg eÆû’˜ ¥l:ÅAhô„oia)g¤ðÇåL@ˆ´÷öÃÖi;fy8{>'\‡ZŬø•'£p¬#ãKø³KŒ~ÝþZ&ulý63(²•ÇÜ} ',Óá½H“FÆ*T"æX¾¼üMŽ!È‚æ¤}iâïÁ¡U ìŽdÖ£‰  â'5ùŸÑ­(x‚Q ¯/ãÛÆî‚Ñãß;¦dZÍ}·ICëô®üðÀwãóÿCEŸy»©T%n~ø®™ ߦ,о:ù7…‰4xvâ;# [/|)ÑýYwÿó;'²€=Ûùá>6ð_t‘ X‘ñ:187ðûMt*á#ŒT숴ñ;”¸;ºlÂ?CÏñèˆôÌ©ÖJu'º´œgeû_ÓÂt*Ø]ÌíÒÝ7 ÀÇÅß8þ×T +&8k\…ވ䄯/ôó1RïÍ2 £KÝàéôn1H„QG:¡w‚Lá×Èi¨ïm3ç½)_ãКñßÓ€lØœ+³ ªûœ¾×*^œ¡‘ºOóöðÃß©¶™Y/o1¼¤ 0zï>ez¿w2p‹ðíÀÜó1à£çºŒïG0˜ÍÒ´|î‡@Ïq9<Ê *0àÌͦ-ÞÖ’“ â|OÝ›…̨0X|ˆá,„N(¸1i ³J…<¦…y©}‡A1œ›t¶@©&*|ü(c<ÍÝ Ó42wR Eu>øn†LmÆx/ %»ë$4ûû¶×Þl¢.Ë—2É_Mó"R·y3bW±àôvRæ€ù}–1)´Î‹ˆý²ZYiM¨аa‡O‘.4d¨aF¡šâÿ–†œ!•ж€<¨~•ýyÓ-i§ fÃãG“ñåÎZ µxÓ¶ÉX­a(`áÉfIþq¶Ø)‘^ð${Æì±÷‰˜Ú|Ù*ZIV㯊œ^ÏXh´˜T’w¸.µ˜«uÒ*ò›˜T‚Ö,hxZ Êjëò}gÊ ý:¼uªw›ª£ÜÄWI4€ZùŽž›"C-KðÃ1‡Ež±‡8°×F£t )Þ Fàå"‡1hW^¹šrÉ Î$ý75d ùËÝð“ÞÁ¹°…¡ŽƒTDÇ·ê‡ ²üðaZq ܃þI‚2mô|QWuW5$¿åÂ{€Ñ€!¡ ãÊ ö±ol+“ð4uл‚?+Ÿ¨ßn L0mâÁÑ£Ók³ÇŸ ð'º{ãIHO7µÊ#^è<Û‰gÏýûx°ßf âÓðÏÿ{:J•íãà¶« é@nü/éŒÃÝY ¬ýPK Gv½8 íAMETA-INF/þÊPK Fv½8Ÿ÷£Ô\j¤+META-INF/MANIFEST.MFPK Gv½8íA¹WEB-INF/PK :3ßÑDÕ¬¤ßWEB-INF/web.xmlPK p9.4!ú¯¤áWEB-INF/faces-config.xmlPK :3.Íâ o ¤guess.xhtmlPK :3lÌLàõ ¤Findex.htmlPK :3ä N*Gc¤c response.xhtmlPK :3Çvº~€~¤Ö template.xhtmlPK Gv½8 íA‚ WEB-INF/lib/PK 5G8NúJÊf}r¤¬ WEB-INF/lib/el-api-1.0.jarPK 6G8% hh ûI¤®sWEB-INF/lib/el-impl-1.0.jarPK œ•D8q&Å{ÿ¤ónWEB-INF/lib/jboss-vfs.jarPK 9G8ÇU‡k“Äí"¤A4WEB-INF/lib/jsf-api-1.2_04-p02.jarPK ;G8Š’:Bc}¤ìÇWEB-INF/lib/servlet-api-2.4.jarPK Gv½8íAk+ WEB-INF/classes/PK ¢t½8íA™+ WEB-INF/classes/tutorial/PK ¢t½8bô\”Ëò )¤Ð+ WEB-INF/classes/tutorial/NumberBean.classPK (v½8òáj˜5â0 WEB-INF/lib/jsf-facelets.jarPKô´f libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/facelets/packed.jar0000644000175000017500000000163411017016540031526 0ustar twernertwernerPK|‚»8Tyıž pmyweb.war ðffábï¦Ý³÷%ÔβAXˆÃ]t=ýÜôs2“ô ÊS“€´^VbQXPAlýn‹÷2 „¥€Ø×5Ĭ ª¡$1DU俨¤æ”TêÛx32‰0à6 ,Üæx³²AÔ22xi°z„ëv[§ÇÉ‚0?’—€†¤ÂsÎPAø ›Í_]ÆtÌ+L@ØÒIJPK ‚»8ñÖ朜 pinner.jarPK ]»8€GvOMETA-INF/inner.taglib.xmlPK ]»8€GvO META-INF/inner.taglib.xmlPKG?PK'»81|Ã?ƒñMETA-INF/MANIFEST.MFóKÌMµRÈJ,KÔ/-ÉÌÑçå .HMÎLËLN,ÉÌÏÓ É,É*PòªPªÈ,©TpÎI,.N-VBW–ZT ¤Ê õŒ°Èæ¥ä%ƒRS<Kt<ó’õ”ôx¹PK|‚»8Tyıž pmyweb.warPK ‚»8ñÖ朜 Ùpinner.jarPK'»81|Ã?ƒñ META-INF/MANIFEST.MFPK ]»8€GvO RMETA-INF/top.taglib.xmlPK÷libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/0000755000175000017500000000000011620060454026601 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/0000755000175000017500000000000011620060454027721 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/0000755000175000017500000000000011620060454030700 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/0000755000175000017500000000000011620060454032706 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/classloader/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/classloader/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/classloader/test/Touch.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000067411042465226033521 0ustar twernertwernerÊþº¾1   ()VCodeLineNumberTableLocalVariableTablethisLTouch;touch SourceFile Touch.java  Touched! Touchjava/lang/Objectjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)V! /*·±    % ²¶± ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/classloader/test/IntegrationDeployerUnitTestCase.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000053111042465226033511 0ustar twernertwerner ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/webbeans/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/webbeans/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/webbeans/test/WebBeanDiscoveryTestCase.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000102611113261537033507 0ustar twernertwerner ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/test/MyMetaData-include.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000036111024202462033501 0ustar twernertwerner ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/test/IncludeTestCase.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000053111023733714033510 0ustar twernertwerner ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/test/included.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000014411024202462033500 0ustar twernertwerner ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/test/MyMetaData-other.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000015210772543652033521 0ustar twernertwerner ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/test/MyMetaData-foobar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000015010772475367033526 0ustar twernertwerner ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/test/SchemaResolverXBPackageTestCase.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000053310772543652033524 0ustar twernertwerner ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/test/SchemaResolverXBTestCase.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000052510772475367033534 0ustar twernertwerner ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/xb/Common.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000107610772475367033536 0ustar twernertwerner urn:jboss:deployers:2.0 org.jboss.deployers.vfs.plugins.xb.SchemaResolverDeployerMetaData ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/dependency/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/dependency/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/dependency/test/DependenciesTestCase.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000146411113261537033515 0ustar twernertwerner ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/annotations/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/annotations/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060454033504 5ustar twernertwerner././@LongLink0000000000000000000000000000024500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/annotations/test/AnnotationsScanningWithMetaDataUnitTestCase.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000124411113261537033511 0ustar twernertwerner ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/annotations/test/AnnotationsScanningUnitTestCase.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/0000644000175000017500000000106211045550671033513 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dummy/0000755000175000017500000000000011620060454027145 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dummy/empty0000644000175000017500000000000510640504614030223 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/managed/0000755000175000017500000000000011620060454027406 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/managed/annotated-beans.xml0000644000175000017500000000131010675614745033207 0ustar twernertwerner @org.jboss.managed.api.annotation.ManagementComponent(type="MCBean",subtype="AnnotationTest") @org.jboss.managed.api.annotation.ManagementProperty(name="prop3", mappedName="propWithXmlOverride", description="ManagedProperty defined via xml annotation")10 libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/0000755000175000017500000000000011620060456030132 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/0000755000175000017500000000000011620060456031414 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/META-INF/0000755000175000017500000000000011620060456032554 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/META-INF/MA0000644000175000017500000000005111114012063032755 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/child/0000755000175000017500000000000011620060456032477 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/child/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/child/META-0000755000175000017500000000000011620060456033223 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/child/META-INF/jboss-dependency.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/nested/child/META-0000644000175000017500000000022311114012063033207 0ustar twernertwerner TM Barrier libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/bean/0000755000175000017500000000000011620060456031037 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/bean/META-INF/0000755000175000017500000000000011620060456032177 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/bean/META-INF/jboss-dependency.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/bean/META-INF/jbos0000644000175000017500000000022311113261537033054 0ustar twernertwerner TM Barrier libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/module/0000755000175000017500000000000011620060456031417 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/module/META-INF/0000755000175000017500000000000011620060456032557 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/module/META-INF/jboss-dependency.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/module/META-INF/jb0000644000175000017500000000013611113261537033075 0ustar twernertwerner my-simple-du-name libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/alias/0000755000175000017500000000000011620060456031223 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/alias/META-INF/0000755000175000017500000000000011620060456032363 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/alias/META-INF/aliases.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/alias/META-INF/ali0000644000175000017500000000002311113261537033046 0ustar twernertwernermy-simple-du-name libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/support/0000755000175000017500000000000011620060456031646 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/support/META-INF/0000755000175000017500000000000011620060456033006 5ustar twernertwerner././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/support/META-INF/support-jboss-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/dependency/support/META-INF/s0000644000175000017500000000044011113261537033171 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/jaxp/0000755000175000017500000000000011620060456026756 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/jaxp/somebean.jbean0000644000175000017500000000004710640504614031551 0ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/0000755000175000017500000000000011620060456030054 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/0000755000175000017500000000000011620060456030630 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/indirectory/0000755000175000017500000000000011620060456033163 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/indirectory/archive.jarlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/indirectory/arc0000644000175000017500000000065710640504614033663 0ustar twernertwernerPKQ«5 META-INF/þÊPKPKQ«5META-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àår.JM,IMÑuª ˜êĘ)h—æ)øf&åW—¤æ+xæ%ëiòrñrPKm¾ÚÖGGPK I«5emptyPKQ«5 META-INF/þÊPKQ«5m¾ÚÖGG=META-INF/MANIFEST.MFPK I«5ÆemptyPK°é././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/indirectory/archive.ziplibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/indirectory/arc0000644000175000017500000000021610640504614033652 0ustar twernertwernerPK J«5emptyUT [æõDjæõDUxèèPK J«5 ¤emptyUT[æõDUxPK@8libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirnotajar/0000755000175000017500000000000011620060456033477 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirnotajar/sub/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirnotajar/s0000755000175000017500000000000011620060456033662 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirnotajar/sub/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirnotajar/s0000644000175000017500000000000510640504614033657 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/notanarchive/0000755000175000017500000000000011620060456033311 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/notanarchive/NotAnArchive.jarlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/notanarchive/No0000644000175000017500000000000610640504614033604 0ustar twernertwernerempty ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/notanarchive/NotAnArchive.ziplibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/notanarchive/No0000644000175000017500000000000610640504614033604 0ustar twernertwernerempty libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirisajar/0000755000175000017500000000000011620060456033312 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirisajar/sub.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirisajar/su0000755000175000017500000000000011620060456033662 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirisajar/sub.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirisajar/su0000644000175000017500000000000510640504614033657 0ustar twernertwernerempty././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirhasmetainf/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirhasmetain0000755000175000017500000000000011620060456033733 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirhasmetainf/sub/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirhasmetain0000755000175000017500000000000011620060456033733 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirhasmetainf/sub/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirhasmetain0000755000175000017500000000000011620060456033733 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirhasmetainf/sub/META-INF/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/subdirhasmetain0000644000175000017500000000000510640504614033730 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/simple/0000755000175000017500000000000011620060456032121 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/simple/simple2.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/simple/simple2.0000644000175000017500000000000510640504614033470 0ustar twernertwernerempty././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/simple/simple1.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/jar/simple/simple1.0000644000175000017500000000000510640504614033467 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/0000755000175000017500000000000011620060456030632 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nested.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nes0000755000175000017500000000000011620060456033465 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nested.sar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nes0000755000175000017500000000000011620060456033465 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nested.sar/META-INF/jboss-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nes0000644000175000017500000000030411070140372033457 0ustar twernertwerner Hello World ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nested.sar/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nes0000755000175000017500000000000011620060456033465 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nested.sar/lib/nested/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nes0000755000175000017500000000000011620060456033465 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nested.sar/lib/nested/test.jarlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib-nes0000644000175000017500000000213111070140372033457 0ustar twernertwernerPK ¸Š9 META-INF/þÊPK ·Š9ßÕÅ\jMETA-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àårÌCq,HLÎHUŠ%ÍAÒÎE©‰%©)ºN• õ¦zñ†ÆºI¦ Á¥y ¾™ÉEùÅ•Å%©¹Å žyÉzš¼\¼\PK ·Š9test/PK ·Š9ŽÒ×éZ?test/TestMessage.classmQ[KAþÆÛê¶™×ìîÚuUbéµ"È_ƒ¡Ç-YÑ]qÇ ŸUBA? A+JÎ9sÎ|ßœÛÇçë;€”T,!ƒŠl «È)XSB&Šui7¤ÚT±…m; ò t¥Ï}ßîp†Ôu×~°ÍžívLK ·sÆ9w\G\0b‹!tåµ ªú\Ô¿yYcžXliXABÃ2â v±Çû«Œœ^›âµFS¯W-ë²VÕOu û8Ðpˆ#††"Ò Á}a6IýdNüþ׸ëò{AÅüGÕ+Üvÿ@­G_ð>uä$aZ¼ã™7T‘ º¸Ý—ÛƒwÛ Ç‹Ú› Í:!bTxÓCƘ"½ #-b ½ž‹ä4’€ -7@wš'é$yI²Œl¸4{‚<´>¤gÏe‰äKåž|Cèv‚p*2†R&#:FlJÄPK ·Š9¡Qcvtest/TestMessageMBean.class;õo×>CvvVv6F®âÔßÔââÄôTFQ Ÿ¬Ä²DýœÄ¼týà’¢Ì¼tkÍ0 xIjq‰~€*õuJMÌcd@¨öOÊJM.ÈÈÀÄŒ,Œ Ì , &PK ¸Š9 íAMETA-INF/þÊPK ·Š9ßÕÅ\j¤+META-INF/MANIFEST.MFPK ·Š9íA¹test/PK ·Š9ŽÒ×éZ?¤Ütest/TestMessage.classPK ·Š9¡Qcv¤jtest/TestMessageMBean.classPK=libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/0000755000175000017500000000000011620060456032662 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/META0000755000175000017500000000000011620060456033331 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/META-INF/application.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/META0000644000175000017500000000004011070140372033320 0ustar twernertwernersomesar=test-in-lib-nested.sar ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test-in-lib-nested.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test0000755000175000017500000000000011620060456033562 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test-in-lib-nested.sar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test0000755000175000017500000000000011620060456033562 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test-in-lib-nested.sar/META-INF/jboss-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test0000644000175000017500000000030411070140372033554 0ustar twernertwerner Hello World ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test-in-lib-nested.sar/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test0000755000175000017500000000000011620060456033562 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test-in-lib-nested.sar/lib/nested/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test0000755000175000017500000000000011620060456033562 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test-in-lib-nested.sar/lib/nested/test.jarlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/nested.ear/test0000644000175000017500000000213111070140372033554 0ustar twernertwernerPK ¸Š9 META-INF/þÊPK ·Š9ßÕÅ\jMETA-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àårÌCq,HLÎHUŠ%ÍAÒÎE©‰%©)ºN• õ¦zñ†ÆºI¦ Á¥y ¾™ÉEùÅ•Å%©¹Å žyÉzš¼\¼\PK ·Š9test/PK ·Š9ŽÒ×éZ?test/TestMessage.classmQ[KAþÆÛê¶™×ìîÚuUbéµ"È_ƒ¡Ç-YÑ]qÇ ŸUBA? A+JÎ9sÎ|ßœÛÇçë;€”T,!ƒŠl «È)XSB&Šui7¤ÚT±…m; ò t¥Ï}ßîp†Ôu×~°ÍžívLK ·sÆ9w\G\0b‹!tåµ ªú\Ô¿yYcžXliXABÃ2â v±Çû«Œœ^›âµFS¯W-ë²VÕOu û8Ðpˆ#††"Ò Á}a6IýdNüþ׸ëò{AÅüGÕ+Üvÿ@­G_ð>uä$aZ¼ã™7T‘ º¸Ý—ÛƒwÛ Ç‹Ú› Í:!bTxÓCƘ"½ #-b ½ž‹ä4’€ -7@wš'é$yI²Œl¸4{‚<´>¤gÏe‰äKåž|Cèv‚p*2†R&#:FlJÄPK ·Š9¡Qcvtest/TestMessageMBean.class;õo×>CvvVv6F®âÔßÔââÄôTFQ Ÿ¬Ä²DýœÄ¼týà’¢Ì¼tkÍ0 xIjq‰~€*õuJMÌcd@¨öOÊJM.ÈÈÀÄŒ,Œ Ì , &PK ¸Š9 íAMETA-INF/þÊPK ·Š9ßÕÅ\j¤+META-INF/MANIFEST.MFPK ·Š9íA¹test/PK ·Š9ŽÒ×éZ?¤Ütest/TestMessage.classPK ·Š9¡Qcv¤jtest/TestMessageMBean.classPK=libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/0000755000175000017500000000000011620060456032671 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/META0000755000175000017500000000000011620060456033340 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/META-INF/application.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/META0000644000175000017500000000003111070140372033327 0ustar twernertwernersomesar=test-in-lib.sar ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test-in-lib.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test0000755000175000017500000000000011620060456033571 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test-in-lib.sar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test0000755000175000017500000000000011620060456033571 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test-in-lib.sar/META-INF/jboss-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test0000644000175000017500000000030411070140372033563 0ustar twernertwerner Hello World ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test-in-lib.sar/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test0000755000175000017500000000000011620060456033571 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test-in-lib.sar/lib/test.jarlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/simple.ear/test0000644000175000017500000000213111070140372033563 0ustar twernertwernerPK ¸Š9 META-INF/þÊPK ·Š9ßÕÅ\jMETA-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àårÌCq,HLÎHUŠ%ÍAÒÎE©‰%©)ºN• õ¦zñ†ÆºI¦ Á¥y ¾™ÉEùÅ•Å%©¹Å žyÉzš¼\¼\PK ·Š9test/PK ·Š9ŽÒ×éZ?test/TestMessage.classmQ[KAþÆÛê¶™×ìîÚuUbéµ"È_ƒ¡Ç-YÑ]qÇ ŸUBA? A+JÎ9sÎ|ßœÛÇçë;€”T,!ƒŠl «È)XSB&Šui7¤ÚT±…m; ò t¥Ï}ßîp†Ôu×~°ÍžívLK ·sÆ9w\G\0b‹!tåµ ªú\Ô¿yYcžXliXABÃ2â v±Çû«Œœ^›âµFS¯W-ë²VÕOu û8Ðpˆ#††"Ò Á}a6IýdNüþ׸ëò{AÅüGÕ+Üvÿ@­G_ð>uä$aZ¼ã™7T‘ º¸Ý—ÛƒwÛ Ç‹Ú› Í:!bTxÓCƘ"½ #-b ½ž‹ä4’€ -7@wš'é$yI²Œl¸4{‚<´>¤gÏe‰äKåž|Cèv‚p*2†R&#:FlJÄPK ·Š9¡Qcvtest/TestMessageMBean.class;õo×>CvvVv6F®âÔßÔââÄôTFQ Ÿ¬Ä²DýœÄ¼týà’¢Ì¼tkÍ0 xIjq‰~€*õuJMÌcd@¨öOÊJM.ÈÈÀÄŒ,Œ Ì , &PK ¸Š9 íAMETA-INF/þÊPK ·Š9ßÕÅ\j¤+META-INF/MANIFEST.MFPK ·Š9íA¹test/PK ·Š9ŽÒ×éZ?¤Ütest/TestMessage.classPK ·Š9¡Qcv¤jtest/TestMessageMBean.classPK=././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar0000755000175000017500000000000011620060456033466 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar0000755000175000017500000000000011620060456033466 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar/META-INF/jboss-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar0000644000175000017500000000030411070140372033460 0ustar twernertwerner Hello World ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar0000755000175000017500000000000011620060456033466 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar/lib/test.jarlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/dir/test-in-lib.sar0000644000175000017500000000213111070140372033460 0ustar twernertwernerPK ¸Š9 META-INF/þÊPK ·Š9ßÕÅ\jMETA-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àårÌCq,HLÎHUŠ%ÍAÒÎE©‰%©)ºN• õ¦zñ†ÆºI¦ Á¥y ¾™ÉEùÅ•Å%©¹Å žyÉzš¼\¼\PK ·Š9test/PK ·Š9ŽÒ×éZ?test/TestMessage.classmQ[KAþÆÛê¶™×ìîÚuUbéµ"È_ƒ¡Ç-YÑ]qÇ ŸUBA? A+JÎ9sÎ|ßœÛÇçë;€”T,!ƒŠl «È)XSB&Šui7¤ÚT±…m; ò t¥Ï}ßîp†Ôu×~°ÍžívLK ·sÆ9w\G\0b‹!tåµ ªú\Ô¿yYcžXliXABÃ2â v±Çû«Œœ^›âµFS¯W-ë²VÕOu û8Ðpˆ#††"Ò Á}a6IýdNüþ׸ëò{AÅüGÕ+Üvÿ@­G_ð>uä$aZ¼ã™7T‘ º¸Ý—ÛƒwÛ Ç‹Ú› Í:!bTxÓCƘ"½ #-b ½ž‹ä4’€ -7@wš'é$yI²Œl¸4{‚<´>¤gÏe‰äKåž|Cèv‚p*2†R&#:FlJÄPK ·Š9¡Qcvtest/TestMessageMBean.class;õo×>CvvVv6F®âÔßÔââÄôTFQ Ÿ¬Ä²DýœÄ¼týà’¢Ì¼tkÍ0 xIjq‰~€*õuJMÌcd@¨öOÊJM.ÈÈÀÄŒ,Œ Ì , &PK ¸Š9 íAMETA-INF/þÊPK ·Š9ßÕÅ\j¤+META-INF/MANIFEST.MFPK ·Š9íA¹test/PK ·Š9ŽÒ×éZ?¤Ütest/TestMessage.classPK ·Š9¡Qcv¤jtest/TestMessageMBean.classPK=libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/0000755000175000017500000000000011620060456030645 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000755000175000017500000000000011620060456034022 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000644000175000017500000000000510640504614034017 0ustar twernertwernerempty././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000755000175000017500000000000011620060456034022 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/WEB-INF/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000755000175000017500000000000011620060456034022 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/WEB-INF/lib/j0.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000755000175000017500000000000011620060456034022 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/WEB-INF/lib/j0.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000644000175000017500000000000510640504614034017 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/WEB-INF/lib/j1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000755000175000017500000000000011620060456034022 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/WEB-INF/lib/j1.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000644000175000017500000000000510640504614034017 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/WEB-INF/classes/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000755000175000017500000000000011620060456034022 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwebinf/WEB-INF/classes/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorywithwe0000644000175000017500000000000510640504614034017 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directory.war/0000755000175000017500000000000011620060456033441 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directory.war/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directory.war/e0000644000175000017500000000000510640504614033603 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/0000755000175000017500000000000011620060456033060 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/WEB0000755000175000017500000000000011620060456033416 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/WEB-INF/classes/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/WEB0000755000175000017500000000000011620060456033416 5ustar twernertwerner././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/WEB-INF/classes/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/WEB0000755000175000017500000000000011620060456033416 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/WEB-INF/classes/META-INF/persistence.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/metainf.war/WEB0000644000175000017500000000004011003605063033404 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/notanarchive/0000755000175000017500000000000011620060456033326 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/notanarchive/notanarchive.warlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/notanarchive/no0000644000175000017500000000000510640504614033660 0ustar twernertwernerempty././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorynotawar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorynotawa0000755000175000017500000000000011620060456034004 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorynotawar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/directorynotawa0000644000175000017500000000000510640504614034001 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/simple/0000755000175000017500000000000011620060456032136 5ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/simple/simple.warlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/war/simple/simple.w0000644000175000017500000000065710640504614033627 0ustar twernertwernerPKQ«5 META-INF/þÊPKPKQ«5META-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àår.JM,IMÑuª ˜êĘ)h—æ)øf&åW—¤æ+xæ%ëiòrñrPKm¾ÚÖGGPK I«5emptyPKQ«5 META-INF/þÊPKQ«5m¾ÚÖGG=META-INF/MANIFEST.MFPK I«5ÆemptyPK°élibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/0000755000175000017500000000000011620060455031674 5ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/explicit.earlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/explicit.e0000644000175000017500000000073311001632225033657 0ustar twernertwernerPKã^‘8+Òq‰g€ inner.war ðffábq-/§æ”Tê•T”€pN¥²@îê¤ëé禟œ“X\œZ¬O¤VI$­9™IèÚ™Dp; 4ÑZeQ´jv²U0{róS2Ó2“K2óól•Bó “³•°¸&3//µH¯<±ˆg…»:‘â*}ä°PKã^‘8+Òq‰g€ inner.warPKì`‘8ˆÜ@5|) ŽMETA-INF/jboss-structure.xmlPKD././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/sub.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/sub.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/sub.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000644000175000017500000000002610640504614033654 0ustar twernertwernerClass-Path: cp-mf.jar ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/cp-mf.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/cp-mf.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000644000175000017500000000000010640504614033644 0ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/lib-dir/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/lib-dir/jar0.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/lib-dir/jar0.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000644000175000017500000000000510640504614033651 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/lib-dir/jar2.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/lib-dir/jar2.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/lib-dir/jar2.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000644000175000017500000000004110640504614033651 0ustar twernertwernerClass-Path: bad.jar ../cp-mf.jar ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/META-INF/jboss-structure.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000117311042465226033665 0ustar twernertwerner ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/x.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/x.war/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/x.war/WEB-INF/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/x.war/WEB-INF/lib/w0.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/x.war/WEB-INF/lib/w0.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000644000175000017500000000000510640504614033651 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/x.war/WEB-INF/classes/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/x.war/WEB-INF/classes/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000644000175000017500000000000510640504614033651 0ustar twernertwernerempty././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/jar1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000755000175000017500000000000011620060455033653 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.deployer/jar1.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/complex.de0000644000175000017500000000000010640504614033644 0ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/comparator.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/comparator0000755000175000017500000000000011620060455033764 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/comparator.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/comparator0000755000175000017500000000000011620060455033764 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/comparator.jar/META-INF/jboss-structure.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/explicit/comparator0000644000175000017500000000152111104043637033765 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/0000755000175000017500000000000011620060454030771 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/directory/0000755000175000017500000000000011620060454032775 5ustar twernertwerner././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/directory/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/directory/empt0000644000175000017500000000000510640504614033662 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/unknown/0000755000175000017500000000000011620060454032470 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/unknown/unknown.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/unknown/unknow0000644000175000017500000000000010640504614033724 0ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/unknown/test-unknown.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/unknown/test-u0000644000175000017500000000000010640504614033624 0ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/simple/0000755000175000017500000000000011620060454032262 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/simple/simple-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/file/simple/simple-0000644000175000017500000000000510640504614033550 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/0000755000175000017500000000000011620060455030622 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/0000755000175000017500000000000011620060456032701 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/mf.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/mf.j0000755000175000017500000000000011620060456033454 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/mf.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/mf.j0000755000175000017500000000000011620060456033454 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/mf.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/mf.j0000644000175000017500000000036110765747146033477 0ustar twernertwernerName: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Red Hat, Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Red Hat, Inc."././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/client.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/clie0000755000175000017500000000000011620060455033535 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/client.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/clie0000755000175000017500000000000011620060456033536 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/client.jar/META-INF/application-client.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/clie0000644000175000017500000000000010765747146033547 0ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/foobar.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/foob0000755000175000017500000000000011620060456033547 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/foobar.sar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/foob0000755000175000017500000000000011620060456033547 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/foobar.sar/META-INF/jboss-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/foob0000644000175000017500000000000010765747146033560 0ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/ts.rar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/ts.r0000755000175000017500000000000011620060456033510 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/ts.rar/empty.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/ts.r0000644000175000017500000000000010765747146033521 0ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/META0000755000175000017500000000000011620060455033347 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/META-INF/application.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/META0000644000175000017500000000004710765747146033374 0ustar twernertwernerknown-module=known.jar jca-ts=ts.rar ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/known.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/know0000755000175000017500000000000011620060455033577 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/known.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/know0000755000175000017500000000000011620060455033577 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/known.jar/META-INF/ejb-jar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/know0000644000175000017500000000000010765747146033611 0ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/webapp.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/weba0000755000175000017500000000000011620060455033537 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/webapp.war/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/weba0000755000175000017500000000000011620060455033537 5ustar twernertwerner././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/webapp.war/WEB-INF/web.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/strict.ear/weba0000644000175000017500000000000010765747146033551 0ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/mf.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/mf.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/mf.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000644000175000017500000000036110765747146033601 0ustar twernertwernerName: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Red Hat, Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Red Hat, Inc."././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/client.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/client.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/client.jar/META-INF/application-client.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000644000175000017500000000000010765747146033567 0ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/foobar.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/foobar.sar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/foobar.sar/META-INF/jboss-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000644000175000017500000000000010765747146033567 0ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/ts.rar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/ts.rar/empty.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000644000175000017500000000000010765747146033567 0ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/META-INF/jboss-application.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000644000175000017500000000004710765747146033602 0ustar twernertwernerknown-module=known.jar jca-ts=ts.rar ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/known.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/known.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/known.jar/META-INF/ejb-jar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000644000175000017500000000000010765747146033567 0ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/webapp.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/webapp.war/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000755000175000017500000000000011620060455033555 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/webapp.war/WEB-INF/web.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/someappxml.ear/0000644000175000017500000000000010765747146033567 0ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/META-INF/application.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000031210640504614033775 0ustar twernertwernerservice1=module-service.xml bean1ejb=module-bean1ejb.jar bean2=module-bean2.ejb3 client1=module-client1.jar mbean1=module-mbean1.sar mcf1-ds=module-mcf1-ds.xml rar1=module-mcf1.rar war1=module-web1.war ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-bean2.ejb3/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-bean2.ejb3/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-web1.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-web1.war/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-mcf1.rar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-mcf1.rar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-mcf1.rar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-mcf1.rar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-mbean1.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-mbean1.sar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-mcf1-ds.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000001610640504614033776 0ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-mcf1-ds.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000001610640504614033776 0ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-client1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-client1.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-mbean1.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-mbean1.sar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-bean1ejb.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-bean1ejb.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-client1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-client1.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-web1.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-web1.war/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000001210640504614033772 0ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/lib/lib0.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/lib/lib0.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000001310640504614033773 0ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-bean1ejb.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/module-bean1ejb.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-bean2.ejb3/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000755000175000017500000000000011620060455033776 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxml.ear/notinapp-bean2.ejb3/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/simplewithappxm0000644000175000017500000000000510640504614033774 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/0000755000175000017500000000000011620060455033170 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/jboss/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/jboss/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/jboss/test/deployers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/jboss/test/deployers/vfs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/jboss/test/deployers/vfs/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/jboss/test/deployers/vfs/structure/ear/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000023600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/jboss/test/deployers/vfs/structure/ear/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000755000175000017500000000000011620060455033524 5ustar twernertwerner././@LongLink0000000000000000000000000000025700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/web.jar/org/jboss/test/deployers/vfs/structure/ear/support/TestServlet.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/we0000644000175000017500000000071711137607542033542 0ustar twernertwernerÊþº¾1 ()VCodeLineNumberTableLocalVariableTablethis@Lorg/jboss/test/deployers/vfs/structure/ear/support/TestServlet; SourceFileTestServlet.javaRuntimeVisibleAnnotationsorg/jboss/test/deployers/vfs/structure/ear/support/TestServletjava/lang/Object!/*·±    ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/jboss/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/jboss/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/jboss/test/deployers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/jboss/test/deployers/vfs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/jboss/test/deployers/vfs/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/jboss/test/deployers/vfs/structure/ear/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000023700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/jboss/test/deployers/vfs/structure/ear/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000755000175000017500000000000011620060455033511 5ustar twernertwerner././@LongLink0000000000000000000000000000025500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/appc.jar/org/jboss/test/deployers/vfs/structure/ear/support/TestAppC.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ap0000644000175000017500000000071011015514454033512 0ustar twernertwernerÊþº¾1 ()VCodeLineNumberTableLocalVariableTablethis=Lorg/jboss/test/deployers/vfs/structure/ear/support/TestAppC; SourceFile TestAppC.javaRuntimeVisibleAnnotations>Lorg/jboss/test/deployers/vfs/structure/ear/support/AppClient; ;org/jboss/test/deployers/vfs/structure/ear/support/TestAppCjava/lang/Object!/*·±    ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000644000175000017500000000036111015514454033512 0ustar twernertwernerName: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Red Hat, Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Red Hat, Inc."././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/jboss/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/jboss/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/jboss/test/deployers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/jboss/test/deployers/vfs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/jboss/test/deployers/vfs/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/jboss/test/deployers/vfs/structure/ear/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000023700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/jboss/test/deployers/vfs/structure/ear/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000755000175000017500000000000011620060455033507 5ustar twernertwerner././@LongLink0000000000000000000000000000025400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ejbs.jar/org/jboss/test/deployers/vfs/structure/ear/support/TestEJB.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ej0000644000175000017500000000070511015514454033514 0ustar twernertwernerÊþº¾1 ()VCodeLineNumberTableLocalVariableTablethisLorg/jboss/test/deployers/vfs/structure/ear/support/Stateless; :org/jboss/test/deployers/vfs/structure/ear/support/TestEJBjava/lang/Object!/*·±    ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ME0000755000175000017500000000000011620060455033412 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/META-INF/empty.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/ME0000644000175000017500000000000511015514454033410 0ustar twernertwernerempty././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000644000175000017500000000036111015514454033523 0ustar twernertwernerName: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Red Hat, Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Red Hat, Inc."././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/jboss/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/jboss/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/jboss/test/deployers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/jboss/test/deployers/vfs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/jboss/test/deployers/vfs/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/jboss/test/deployers/vfs/structure/ear/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000024300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/jboss/test/deployers/vfs/structure/ear/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000755000175000017500000000000011620060455033520 5ustar twernertwerner././@LongLink0000000000000000000000000000026400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/services.jar/org/jboss/test/deployers/vfs/structure/ear/support/TestService.classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/scanning.ear/se0000644000175000017500000000071711015514454033530 0ustar twernertwernerÊþº¾1 ()VCodeLineNumberTableLocalVariableTablethis@Lorg/jboss/test/deployers/vfs/structure/ear/support/TestService; SourceFileTestService.javaRuntimeVisibleAnnotationsorg/jboss/test/deployers/vfs/structure/ear/support/TestServicejava/lang/Object!/*·±    libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/archive.ear0000644000175000017500000000071710765516061032751 0ustar twernertwernerPK pk8"lib/log5j.jar/META-INF/MANIFEST.MFPKâfk8'J8bMETA-INF/application.propertiesKJMÌ3LÍJ²ÍÍO)ÍIÕM‚òõ²‹¸PK -gk8module-bean1ejb.jar/empty.txtPK pk8" lib/log5j.jar/META-INF/MANIFEST.MFPKâfk8'J8b @META-INF/application.propertiesPK -gk8 –module-bean1ejb.jar/empty.txtPKèÑ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/META-INF/application.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000034710640504614034006 0ustar twernertwernerservice1=module-service.xml bean1ejb=module-bean1ejb.jar bean2=module-bean2.ejb3 client1=module-client1.jar mbean1=module-mbean1.sar mcf1-ds=module-mcf1-ds.xml rar1=module-mcf1.rar war1=module-web1.war bean2ejb=subdir/relative.jar ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-bean2.ejb3/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-bean2.ejb3/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-web1.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-web1.war/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mcf1.rar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mcf1.rar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-mcf1.rar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-mcf1.rar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mbean1.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mbean1.sar/submbean2-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000001210640504614033773 0ustar twernertwerner././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mbean1.sar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mbean1.sar/META-INF/jboss-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000001210640504614033773 0ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mbean1.sar/submbean.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mbean1.sar/submbean.sar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mbean1.sar/extensions.aop/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mbean1.sar/extensions.aop/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-mcf1-ds.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000001610640504614033777 0ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-mcf1-ds.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000001610640504614033777 0ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-client1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-client1.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-mbean1.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-mbean1.sar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-bean1ejb.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-bean1ejb.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/subdir/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/subdir/relative.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/subdir/relative.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-client1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-client1.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-web1.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-web1.war/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000001210640504614033773 0ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/lib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/lib/lib0.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/lib/lib0.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000001310640504614033774 0ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-bean1ejb.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/module-bean1ejb.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwernerempty././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-bean2.ejb3/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000755000175000017500000000000011620060455033777 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappxml.ear/notinapp-bean2.ejb3/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/complexwithappx0000644000175000017500000000000510640504614033775 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/0000755000175000017500000000000011620060455033226 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/mf.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/mf0000755000175000017500000000000011620060455033551 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/mf.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/mf0000755000175000017500000000000011620060455033551 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/mf.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/mf0000644000175000017500000000036310765747146033577 0ustar twernertwernerName: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Red Hat, Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Red Hat, Inc." ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/client.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/cl0000755000175000017500000000000011620060455033545 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/client.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/cl0000755000175000017500000000000011620060455033545 5ustar twernertwerner././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/client.jar/META-INF/application-client.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/cl0000644000175000017500000000000010765747146033557 0ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/foobar.sar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/fo0000755000175000017500000000000011620060455033553 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/foobar.sar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/fo0000755000175000017500000000000011620060455033553 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/foobar.sar/META-INF/jboss-service.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/fo0000644000175000017500000000000010765747146033565 0ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/ts.rar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/ts0000755000175000017500000000000011620060455033575 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/ts.rar/empty.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/ts0000644000175000017500000000000010765747146033607 0ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/ME0000755000175000017500000000000011620060455033450 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/known.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/kn0000755000175000017500000000000011620060455033557 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/known.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/kn0000755000175000017500000000000011620060455033557 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/known.jar/META-INF/ejb-jar.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/kn0000644000175000017500000000000010765747146033571 0ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/webapp.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/we0000755000175000017500000000000011620060455033562 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/webapp.war/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/we0000755000175000017500000000000011620060455033562 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/webapp.war/WEB-INF/web.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/noappxml.ear/we0000644000175000017500000000000010765747146033574 0ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/notanear/0000755000175000017500000000000011620060455032431 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/ear/notanear/empty0000644000175000017500000000004010770643606033516 0ustar twernertwernernothing to see here, move along libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/0000755000175000017500000000000011620060456031707 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000755000175000017500000000000011620060456033632 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/jmx/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000755000175000017500000000000011620060456033632 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/jmx/interceptors/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000755000175000017500000000000011620060456033632 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/jmx/interceptors/scripts/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000755000175000017500000000000011620060456033632 5ustar twernertwerner././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/jmx/interceptors/scripts/myscript.bshlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000644000175000017500000000003110731616564033637 0ustar twernertwernertype=bsh name=myscript ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/jmx/interceptors/security-config.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000644000175000017500000000000010731616564033633 0ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000755000175000017500000000000011620060456033632 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/META-INF/jboss-structure.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000644000175000017500000000067010731616564033650 0ustar twernertwerner ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/jar1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000755000175000017500000000000011620060456033632 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/jar1.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000755000175000017500000000000011620060456033632 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/jar1.jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000644000175000017500000000000010731616564033633 0ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/empty.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000755000175000017500000000000011620060456033632 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.deployer/empty.jar/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structure/multiple/metadata.d0000644000175000017500000000000010731616564033633 0ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/0000755000175000017500000000000011620060454030305 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/0000755000175000017500000000000011620060454031636 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/root.bsh0000644000175000017500000000002510731616564033327 0ustar twernertwernertype=bsh name=root libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/0000755000175000017500000000000011620060454032434 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/interceptors/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/inter0000755000175000017500000000000011620060454033476 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/interceptors/scripts/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/inter0000755000175000017500000000000011620060454033476 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/interceptors/scripts/myscript.bshlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/inter0000644000175000017500000000003110731616564033505 0ustar twernertwernertype=bsh name=myscript ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/interceptors/security-config.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/jmx/inter0000644000175000017500000000004310731616564033510 0ustar twernertwerner ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/nonmetadata/nmd.jar/META-INF/0000755000175000017500000000000011620060454032776 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/scanning/0000755000175000017500000000000011620060456027614 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/scanning/smoke/0000755000175000017500000000000011620060456030732 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/scanning/smoke/META-INF/0000755000175000017500000000000011620060456032072 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/scanning/smoke/META-INF/jboss-scanning.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/scanning/smoke/META-INF/jboss0000644000175000017500000000040211113261537033131 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/0000755000175000017500000000000011620060454027306 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/0000755000175000017500000000000011620060454031604 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000755000175000017500000000000011620060454033246 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000755000175000017500000000000011620060454033246 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000644000175000017500000000005710745410017033253 0ustar twernertwernerManifest-Version: 1.0 Class-Path: lib/jar1.jar ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000755000175000017500000000000011620060454033246 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/classes/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000755000175000017500000000000011620060454033246 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/classes/users.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000644000175000017500000000002510745734646033267 0ustar twernertwernerpath=war1.jar/WEB-INF././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/classes/test-resource.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000644000175000017500000000002210745734646033264 0ustar twernertwernerA WEB-INF resource././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/classes/web/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000755000175000017500000000000011620060454033246 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/classes/web/Servlet-classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000644000175000017500000000001710745731710033255 0ustar twernertwernerA servlet class././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/classes/java/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000755000175000017500000000000011620060454033246 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/classes/java/lang/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000755000175000017500000000000011620060454033246 5ustar twernertwerner././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/WEB-INF/classes/java/lang/JdkClass-classlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/war1.war/0000644000175000017500000000001010745734646033261 0ustar twernertwernercafebabelibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/0000755000175000017500000000000011620060454032352 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.0000755000175000017500000000000011620060454033206 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.jar/ClassInTestear1Lib.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.0000644000175000017500000000004610745734646033232 0ustar twernertwerner public class ClassInTestear1Lib { } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.jar/users.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.0000644000175000017500000000002110745731710033210 0ustar twernertwernerpath=lib/jar1.jar././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.jar/util/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.0000755000175000017500000000000011620060454033206 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.jar/util/Shared.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/lib/jar1.0000644000175000017500000000214510745734646033234 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package util; /** * @author Scott.Stark@jboss.org * @version $Revision: 69249 $ */ public class Shared { } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/0000755000175000017500000000000011620060454033200 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/users.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/0000644000175000017500000000001510745731710033205 0ustar twernertwernerpath=ejb1.jar././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/pkg1/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/0000755000175000017500000000000011620060454033200 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/pkg1/ejbs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/0000755000175000017500000000000011620060454033200 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/pkg1/ejbs/SessionBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/0000644000175000017500000000215710745734646033231 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package pkg1.ejbs; /** * @author Scott.Stark@jboss.org * @version $Revision: 69249 $ */ public class SessionBean { } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/pkg1/ifaces/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/0000755000175000017500000000000011620060454033200 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/pkg1/ifaces/ISession.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/deploy/testear1.ear/ejb1.jar/0000644000175000017500000000216210745734646033225 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package pkg1.ifaces; /** * @author Scott.Stark@jboss.org * @version $Revision: 69249 $ */ public interface ISession { } libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/0000755000175000017500000000000011620060456030031 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test/0000755000175000017500000000000011620060456031010 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test/META-INF/0000755000175000017500000000000011620060456032150 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test/META-INF/test-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test/META-INF/test-0000644000175000017500000000016610757064705033145 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/bootstrap.xml0000644000175000017500000001431311113261537032572 0ustar twernertwerner .class -service.xml -beans.xml -ds.xml -aop.xml org.jboss.classloading.spi.metadata.ClassLoadingMetaData jboss-classloading.xml true libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-classloader/0000755000175000017500000000000011620060456033302 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-classloader/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-classloader/ME0000755000175000017500000000000011620060456033524 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-classloader/META-INF/jboss-classloading.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-classloader/ME0000644000175000017500000000011410757261156033534 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-assembled/0000755000175000017500000000000011620060456032745 5ustar twernertwerner././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-assembled/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-assembled/META0000755000175000017500000000000011620060456033414 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-assembled/META-INF/test.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/bootstrap/test-assembled/META0000644000175000017500000000000511037647060033415 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/0000755000175000017500000000000011620060454027103 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/0000755000175000017500000000000011620060454030735 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/tcalias-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/tcalias-beans.0000644000175000017500000000022510645107223033445 0ustar twernertwerner JBossWeb ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/mbean-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/mbean-beans.xm0000644000175000017500000000040310644676121033461 0ustar twernertwerner Test libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/my-beans.xml0000644000175000017500000000030510644433255033200 0ustar twernertwerner ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/aliases-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/aliases-beans.0000644000175000017500000000051710644510077033456 0ustar twernertwerner MyAlias ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/servicex-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/servicex-beans0000644000175000017500000000045310644676121033611 0ustar twernertwerner JBossWeb JBossWeb libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/jmx-beans.xml0000644000175000017500000000060710644676121033357 0ustar twernertwerner test:alias=Simple,mode=Bar ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/tomcat-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/tomcat-beans.x0000644000175000017500000000031010644676121033506 0ustar twernertwerner ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/justx-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/justx-beans.xm0000644000175000017500000000037710645107223033557 0ustar twernertwerner JBossWeb ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/joined-beans.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/alias/toplevel/joined-beans.x0000644000175000017500000000035410644433255033476 0ustar twernertwerner MyAlias libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/0000755000175000017500000000000011620060454030347 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/0000755000175000017500000000000011620060454032352 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/jar/0000755000175000017500000000000011620060454033126 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/jar/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/jar/ME0000755000175000017500000000000011620060454033350 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/jar/META-INF/jboss-scanning.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/jar/ME0000644000175000017500000000026011113261537033352 0ustar twernertwerner ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/jar/META-INF/MANIFEST.MFlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/jar/ME0000644000175000017500000000011511113261537033351 0ustar twernertwernerManifest-Version: 1.0 Created-By: hand Class-Path: lib/util.jar, lib/ext.jar ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/META-I0000755000175000017500000000000011620060454033207 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/META-INF/jboss-scanning.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/META-I0000644000175000017500000000025611113261537033216 0ustar twernertwerner ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/META-INF/application.propertieslibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/META-I0000644000175000017500000000005611045550671033220 0ustar twernertwernerjar-module=simple.jar web-module=simple.war libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/web/0000755000175000017500000000000011620060454033127 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/web/WEB-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/web/WE0000755000175000017500000000000011620060454033363 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/web/WEB-INF/web.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/web/WE0000644000175000017500000000000611045550671033367 0ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/web/WEB-INF/jboss-scanning.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/annotations/basic-scan/web/WE0000644000175000017500000000037211113261537033371 0ustar twernertwerner libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/0000755000175000017500000000000011620060454032012 5ustar twernertwerner././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/directtop/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/directtop/0000755000175000017500000000000011620060454034007 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/directtop/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/directtop/0000755000175000017500000000000011620060454034007 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/directtop/META-INF/top.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/directtop/0000644000175000017500000000001011137607145034007 0ustar twernertwerner ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchild/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchi0000755000175000017500000000000011620060454034105 5ustar twernertwerner././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchild/somechild/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchi0000755000175000017500000000000011620060454034105 5ustar twernertwerner././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchild/somechild/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchi0000755000175000017500000000000011620060454034105 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchild/somechild/META-INF/child.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchi0000644000175000017500000000000011137607145034104 0ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchild/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchi0000755000175000017500000000000011620060454034105 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchild/META-INF/emtpy.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/topfromchi0000644000175000017500000000000711137607145034113 0ustar twernertwernerempty libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/0000755000175000017500000000000011620060454033575 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/tempchild/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/t0000755000175000017500000000000011620060454033761 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/tempchild/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/t0000755000175000017500000000000011620060454033761 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/tempchild/META-INF/sub.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/t0000644000175000017500000000001011137607145033761 0ustar twernertwerner ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/M0000755000175000017500000000000011620060454033712 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/META-INF/emtpy.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structureprocessor/childmod/M0000644000175000017500000000000711137607145033720 0ustar twernertwernerempty libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/0000755000175000017500000000000011620060456031423 5ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000755000175000017500000000000011620060456034027 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testSimpleWithAttachmentlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000510640504614034024 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testClasspathEntries/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000755000175000017500000000000011620060456034027 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testClasspathEntries/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000755000175000017500000000000011620060456034027 5ustar twernertwerner././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testClasspathEntries/META-INF/jboss-structure.xmllibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000024010766002755034035 0ustar twernertwerner ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testClasspathEntries/cp2.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000010765763765034045 0ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testClasspathEntries/cp1.txtlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000010765763765034045 0ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testManyChildren/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000755000175000017500000000000011620060456034027 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testManyChildren/child3libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000510640504614034024 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testManyChildren/child2libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000510640504614034024 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testManyChildren/child1libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000510640504614034024 0ustar twernertwernerempty././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testSimplelibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000510640504614034024 0ustar twernertwernerempty././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testMetaDataLocation/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000755000175000017500000000000011620060456034027 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testMetaDataLocation/META-INF/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000755000175000017500000000000011620060456034027 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testMetaDataLocation/META-INF/emptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000610640504614034025 0ustar twernertwernerempty ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testOneChild/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000755000175000017500000000000011620060456034027 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermined/testOneChild/child1libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/resources/structurebuilder/predetermine0000644000175000017500000000000510640504614034024 0ustar twernertwerneremptylibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/0000755000175000017500000000000011620060440024714 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/0000755000175000017500000000000011620060440025503 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/0000755000175000017500000000000011620060440026623 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/0000755000175000017500000000000011620060440027602 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/0000755000175000017500000000000011620060441031611 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/BaseDeployersVFSTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/BaseDeplo0000644000175000017500000001167310640504614033410 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import java.net.URL; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.structure.spi.StructuralDeployers; import org.jboss.deployers.structure.spi.StructureBuilder; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentContext; import org.jboss.deployers.vfs.plugins.structure.VFSStructuralDeployersImpl; import org.jboss.deployers.vfs.plugins.structure.VFSStructureBuilder; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.plugins.context.jar.JarUtils; /** * BaseDeployersVFSTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class BaseDeployersVFSTest extends AbstractDeployerTest { public BaseDeployersVFSTest(String name) { super(name); } @Override public URL getResource(String path) { URL url = super.getResource(path); assertNotNull("Resource not found: " + path, url); return url; } /** * Get a virtual file * * @param root the root * @param path the path * @return the file * @throws Exception for any error */ protected VirtualFile getVirtualFile(String root, String path) throws Exception { URL url = getResource(root); return VFS.getVirtualFile(url, path); } /** * Get a url string from a path * * @param path the path * @return the string * @throws Exception for any error */ protected String getURL(String path) throws Exception { URL url = getResource(path); return url.toString(); } /** * Get a vfs url string from a path * * @param path * @return the url * @throws Exception */ protected String getVfsURL(String path) throws Exception { URL url = getResource(path); return "vfs"+url.toString(); } /** * Get a jar url string from a path * * @param path the path * @return the string * @throws Exception for any error */ protected String getJarURL(String path) throws Exception { URL url = getResource(path); url = JarUtils.createJarURL(url); return url.toString(); } protected StructureBuilder createStructureBuilder() { return new VFSStructureBuilder(); } protected StructuralDeployers createStructuralDeployers() { StructureBuilder builder = createStructureBuilder(); VFSStructuralDeployersImpl structure = new VFSStructuralDeployersImpl(); structure.setStructureBuilder(builder); return structure; } protected void addStructureDeployer(DeployerClient main, StructureDeployer deployer) { MainDeployerImpl mainDeployerImpl = (MainDeployerImpl) main; VFSStructuralDeployersImpl structure = (VFSStructuralDeployersImpl) mainDeployerImpl.getStructuralDeployers(); structure.addDeployer(deployer); } /** * Create a deployment * * @param root the root * @param path the path * @return the deployment * @throws Exception for any error */ protected VFSDeployment createDeployment(String root, String path) throws Exception { VirtualFile file = getVirtualFile(root, path); return VFSDeploymentFactory.getInstance().createVFSDeployment(file); } /** * Create a deployment context * * @param root the root * @param path the path * @return the context * @throws Exception for any error */ protected VFSDeploymentContext createDeploymentContext(String root, String path) throws Exception { VirtualFile file = getVirtualFile(root, path); return new AbstractVFSDeploymentContext(file, ""); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/DeployersVFSTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/Deployers0000644000175000017500000000744511137607542033530 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.annotations.AnnotationScanningTestSuite; import org.jboss.test.deployers.vfs.classloader.ClassLoaderTestSuite; import org.jboss.test.deployers.vfs.dependency.DependencyTestSuite; import org.jboss.test.deployers.vfs.deployer.bean.BeanDeployerTestSuite; import org.jboss.test.deployers.vfs.deployer.facelets.FaceletsTestSuite; import org.jboss.test.deployers.vfs.deployer.jaxp.JAXPDeployerTestSuite; import org.jboss.test.deployers.vfs.deployer.merge.MergeDeployerTestSuite; import org.jboss.test.deployers.vfs.deployer.nonmetadata.NonMetadataDeployersTestSuite; import org.jboss.test.deployers.vfs.deployer.validate.ValidateDeployerTestSuite; import org.jboss.test.deployers.vfs.deploymentfactory.VFSDeploymentFactoryTestSuite; import org.jboss.test.deployers.vfs.managed.VFSManagedTestSuite; import org.jboss.test.deployers.vfs.matchers.VFSMatchersTestSuite; import org.jboss.test.deployers.vfs.metadata.VFSMetaDataTestSuite; import org.jboss.test.deployers.vfs.parsing.test.ParsingTestSuite; import org.jboss.test.deployers.vfs.structure.VFSStructureTestSuite; import org.jboss.test.deployers.vfs.structurebuilder.VFSStructureBuilderTestSuite; import org.jboss.test.deployers.vfs.structureprocessor.VFSStructureProcessorTestSuite; import org.jboss.test.deployers.vfs.xb.JBossXBDeployersTestSuite; /** * Deployers VFS Test Suite. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 37459 $ */ public class DeployersVFSTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Deployers VFS Tests"); suite.addTest(VFSDeploymentFactoryTestSuite.suite()); suite.addTest(VFSStructureBuilderTestSuite.suite()); suite.addTest(VFSStructureProcessorTestSuite.suite()); suite.addTest(VFSStructureTestSuite.suite()); suite.addTest(VFSMetaDataTestSuite.suite()); suite.addTest(ParsingTestSuite.suite()); suite.addTest(JAXPDeployerTestSuite.suite()); suite.addTest(BeanDeployerTestSuite.suite()); suite.addTest(VFSManagedTestSuite.suite()); suite.addTest(NonMetadataDeployersTestSuite.suite()); suite.addTest(ClassLoaderTestSuite.suite()); suite.addTest(VFSMatchersTestSuite.suite()); suite.addTest(JBossXBDeployersTestSuite.suite()); suite.addTest(MergeDeployerTestSuite.suite()); suite.addTest(FaceletsTestSuite.suite()); suite.addTest(ValidateDeployerTestSuite.suite()); suite.addTest(AnnotationScanningTestSuite.suite()); suite.addTest(DependencyTestSuite.suite()); return suite; } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/BootstrapDeployersTestDelegate.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/Bootstrap0000644000175000017500000001073311037647060033527 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import java.net.URL; import org.jboss.classloader.plugins.ClassLoaderUtils; import org.jboss.classloader.plugins.filter.PatternClassFilter; import org.jboss.classloader.spi.ClassLoaderDomain; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ParentPolicy; import org.jboss.classloader.spi.filter.ClassFilter; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData10; import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory10; import org.jboss.dependency.spi.ControllerState; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.test.kernel.junit.MicrocontainerTestDelegate; import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver; import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory; /** * BootstrapDeployersTestDelegate. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class BootstrapDeployersTestDelegate extends MicrocontainerTestDelegate { private static ParentPolicy parentPolicy; private MainDeployerImpl mainDeployer; static { DefaultSchemaResolver resolver = (DefaultSchemaResolver) SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver(); resolver.addClassBinding("urn:jboss:classloader:1.0", VFSClassLoaderFactory10.class); resolver.addClassBinding("urn:jboss:classloading:1.0", ClassLoadingMetaData10.class); // TODO add a negating class filter to jboss-classloader ClassFilter classFilter = new ClassFilter() { String packageName = BootstrapDeployersTest.class.getPackage().getName(); String packagePath = ClassLoaderUtils.packageNameToPath(BootstrapDeployersTest.class.getName()); ClassFilter patternFilter = new PatternClassFilter( new String[] { packageName + "\\..+" }, new String[] { packagePath + "/.+" }, new String[] { packageName, packageName + "\\..*"} ); public boolean matchesClassName(String className) { return patternFilter.matchesClassName(className) == false; } public boolean matchesPackageName(String packageName) { return patternFilter.matchesPackageName(packageName) == false; } public boolean matchesResourcePath(String resourcePath) { return patternFilter.matchesResourcePath(resourcePath) == false; } public String toString() { return "EXCLUDE " + patternFilter; } }; parentPolicy = new ParentPolicy(classFilter, ClassFilter.NOTHING, "BEFORE"); } public BootstrapDeployersTestDelegate(Class clazz) throws Exception { super(clazz); } protected void deploy() throws Exception { String common = "/bootstrap/bootstrap.xml"; URL url = getClass().getResource(common); if (url == null) throw new IllegalStateException(common + " not found"); deploy(url); ClassLoaderSystem system = getBean("ClassLoaderSystem", ControllerState.INSTALLED, ClassLoaderSystem.class); ClassLoaderDomain domain = system.getDefaultDomain(); domain.setParentPolicy(parentPolicy); super.deploy(); } protected MainDeployerImpl getMainDeployer() { if (mainDeployer == null) mainDeployer = getBean("MainDeployer", ControllerState.INSTALLED, MainDeployerImpl.class); return mainDeployer; } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/BootstrapDeployersTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/Bootstrap0000644000175000017500000002654711045550671033541 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers; import java.net.URL; import java.security.CodeSource; import java.security.ProtectionDomain; import java.util.List; import junit.framework.AssertionFailedError; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.jboss.classloader.plugins.ClassLoaderUtils; import org.jboss.classloader.plugins.jdk.AbstractJDKChecker; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.dispatch.InvokeDispatchContext; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.main.MainDeployerStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.AbstractTestDelegate; import org.jboss.test.kernel.junit.MicrocontainerTest; import org.jboss.virtual.AssembledDirectory; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.plugins.context.file.FileSystemContext; import org.jboss.virtual.plugins.context.jar.JarUtils; import org.jboss.virtual.plugins.vfs.helpers.SuffixesExcludeFilter; /** * BootstrapDeployersTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class BootstrapDeployersTest extends MicrocontainerTest { public static AbstractTestDelegate getDelegate(Class clazz) throws Exception { return new BootstrapDeployersTestDelegate(clazz); } public BootstrapDeployersTest(String name) { super(name); } protected DeployerClient getDeployerClient() { return getDelegate().getMainDeployer(); } protected MainDeployerStructure getMainDeployerStructure() { return getDelegate().getMainDeployer(); } protected String getRoot(Class clazz) { ProtectionDomain pd = clazz.getProtectionDomain(); CodeSource cs = pd.getCodeSource(); URL location = cs.getLocation(); return location.toString(); } protected BootstrapDeployersTestDelegate getDelegate() { return (BootstrapDeployersTestDelegate) super.getDelegate(); } protected VFSDeployment createVFSDeployment(String root, String child) throws Exception { URL resourceRoot = getClass().getResource(root); if (resourceRoot == null) fail("Resource not found: " + root); VirtualFile deployment = VFS.getVirtualFile(resourceRoot, child); if (deployment == null) fail("Child not found " + child + " from " + resourceRoot); return createVFSDeployment(deployment); } protected VFSDeployment createVFSDeployment(VirtualFile root) throws Exception { VFSDeploymentFactory factory = VFSDeploymentFactory.getInstance(); return factory.createVFSDeployment(root); } protected VFSDeploymentUnit assertDeploy(String root, String child) throws Exception { VFSDeployment deployment = createVFSDeployment(root, child); getDeployerClient().deploy(deployment); return (VFSDeploymentUnit) getMainDeployerStructure().getDeploymentUnit(deployment.getName(), true); } protected VFSDeploymentUnit assertDeploy(VirtualFile file) throws Exception { VFSDeployment deployment = createVFSDeployment(file); getDeployerClient().deploy(deployment); return (VFSDeploymentUnit) getMainDeployerStructure().getDeploymentUnit(deployment.getName(), true); } protected VFSDeploymentUnit addDeployment(String root, String child) throws Exception { VFSDeployment deployment = createVFSDeployment(root, child); getDeployerClient().addDeployment(deployment); getDeployerClient().process(); return (VFSDeploymentUnit) getMainDeployerStructure().getDeploymentUnit(deployment.getName(), true); } protected void undeploy(DeploymentUnit unit) { try { undeploy(unit, false); } catch (Throwable t) { throw new RuntimeException("Unexpected", t); } } protected void undeploy(DeploymentUnit unit, boolean wantError) throws Exception { try { getDeployerClient().undeploy(unit.getName()); } catch (Exception e) { if (wantError) throw e; } } protected void assertClassLoader(Class clazz, ClassLoader expected) { if (expected == null) return; ClassLoader cl = clazz.getClassLoader(); boolean result = expected.equals(cl); assertTrue(ClassLoaderUtils.classToString(clazz) + " should have expected classloader=" + expected, result); } protected void assertClassEquality(Class expected, Class actual) { assertTrue("Should be the same " + ClassLoaderUtils.classToString(expected) +" and " + ClassLoaderUtils.classToString(actual), expected == actual); } protected void assertNoClassEquality(Class expected, Class actual) { assertTrue("Should NOT be the same " + ClassLoaderUtils.classToString(expected) +" and " + ClassLoaderUtils.classToString(actual), expected != actual); } protected URL assertGetResource(String name, ClassLoader start) { URL result = start.getResource(name); assertNotNull("Resource not found '" + name + "' from " + start, result); return result; } protected void assertNoResource(String name, ClassLoader start) { URL result = start.getResource(name); assertNull("Did not expect resource '" + name + "' from " + start, result); } protected Class assertLoadClass(Class reference, ClassLoader start) { return assertLoadClass(reference, start, start, false); } protected Class assertLoadClass(Class reference, ClassLoader start, boolean isReference) { return assertLoadClass(reference, start, start, isReference); } protected Class assertLoadClass(Class reference, ClassLoader start, ClassLoader expected) { return assertLoadClass(reference, start, expected, false); } protected Class assertLoadClass(Class reference, ClassLoader start, ClassLoader expected, boolean isReference) { Class result = assertLoadClass(reference.getName(), start, expected); if (isReference) assertClassEquality(reference, result); else assertNoClassEquality(reference, result); return result; } protected Class assertLoadClass(String name, ClassLoader start) { return assertLoadClass(name, start, start); } protected Class assertLoadClass(String name, ClassLoader start, ClassLoader expected) { Class result = null; try { result = start.loadClass(name); getLog().debug("Got class: " + ClassLoaderUtils.classToString(result) + " for " + name + " from " + start); } catch (ClassNotFoundException e) { failure("Did not expect CNFE for " + name + " from " + start, e); } assertClassLoader(result, expected); return result; } protected void assertLoadClassFail(Class reference, ClassLoader start) { assertLoadClassFail(reference.getName(), start); } protected void assertLoadClassFail(String name, ClassLoader start) { try { start.loadClass(name); fail("Should not be here!"); } catch (Exception expected) { checkThrowable(ClassNotFoundException.class, expected); } } protected ClassLoader getClassLoader(DeploymentUnit unit) { return unit.getClassLoader(); } protected void assertNoClassLoader(DeploymentUnit unit) { try { assertNull("Should not be a classloader: " + unit.getClassLoader()); } catch (Throwable e) { checkThrowable(IllegalStateException.class, e); } } protected ClassLoader getClassLoader(Object name) { ControllerContext ctx = getControllerContext(name); assertNotNull(ctx); InvokeDispatchContext dispatch = assertInstanceOf(ctx, InvokeDispatchContext.class, true); try { ClassLoader result = dispatch.getClassLoader(); assertNotNull(result); return result; } catch (AssertionFailedError e) { throw e; } catch (Throwable e) { throw new RuntimeException("Unexpected error getting classloader", e); } } protected AssembledDirectory createAssembledDirectory(String name) throws Exception { return createAssembledDirectory(name, ""); } protected AssembledDirectory createAssembledDirectory(String name, String rootName) throws Exception { return AssembledDirectory.createAssembledDirectory(name, rootName); } protected void addPackage(AssembledDirectory dir, Class reference) throws Exception { String packagePath = ClassLoaderUtils.packageNameToPath(reference.getName()); dir.addResources(reference, new String[] { packagePath + "/*.class" } , new String[0]); } protected void addPath(final AssembledDirectory dir, String path, String name) throws Exception { URL url = getResource(path); if (url == null) fail(path + " not found"); VirtualFile file = VFS.getVirtualFile(url, name); // TODO - remove this filter after new VFS relase SuffixesExcludeFilter noJars = new SuffixesExcludeFilter(JarUtils.getSuffixes()); dir.addPath(file, noJars); } protected DeploymentUnit assertChild(DeploymentUnit parent, String name) { String parentName = parent.getName(); if (parentName.endsWith("/") == false) parentName += "/"; name = parentName + name; if (name.endsWith("/") == false) name += "/"; List children = parent.getChildren(); for (DeploymentUnit child : children) { if (name.equals(child.getName())) return child; } throw new AssertionFailedError("Child " + name + " not found in " + children); } protected void setUp() throws Exception { super.setUp(); // This is a hack for a hack. ;-) AbstractJDKChecker.getExcluded().add(BootstrapDeployersTest.class); // Reduce the noise from the VFS // FIXME add method change logging levels to AbstractTestCase Logger.getLogger(FileSystemContext.class).setLevel(Level.INFO); } } libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/0000755000175000017500000000000011620060444032412 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000755000175000017500000000000011620060443033426 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/VFSMatchersTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000341110757641060033441 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.matchers.test.FileMatchersTestCase; import org.jboss.test.deployers.vfs.matchers.test.JarExtensionsTestCase; /** * Matchers test suite. * * @author Ales Justin */ public class VFSMatchersTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Matchers Tests"); suite.addTest(FileMatchersTestCase.suite()); suite.addTest(JarExtensionsTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000755000175000017500000000000011620060443033426 5ustar twernertwerner././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/test/FileMatchersTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000001243010760546324033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.test; import java.util.Set; import junit.framework.Test; import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder; import org.jboss.dependency.spi.ControllerContext; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.spi.deployer.FileMatcher; import org.jboss.kernel.spi.dependency.KernelController; import org.jboss.test.deployers.vfs.matchers.support.ExposedFileStructure; import org.jboss.test.deployers.vfs.matchers.support.FeedbackDeployer; import org.jboss.test.deployers.vfs.matchers.support.TestBeanDeployer; import org.jboss.test.deployers.vfs.matchers.support.TestBshDeployer; import org.jboss.test.deployers.vfs.matchers.support.TestNameDeployer; /** * File matchers tests. * * @author Ales Justin */ public class FileMatchersTestCase extends KernelHolderDeployersTest { public FileMatchersTestCase(String name) { super(name); } public static Test suite() { return suite(FileMatchersTestCase.class); } public void testMatchers() throws Throwable { KernelController controller = getController(); MainDeployerImpl main = new MainDeployerImpl(); main.setStructuralDeployers(createStructuralDeployers()); BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("JARStructure", JARStructure.class.getName()); controller.install(builder.getBeanMetaData()); builder = BeanMetaDataBuilder.createBuilder("FileStructure", ExposedFileStructure.class.getName()); controller.install(builder.getBeanMetaData()); ControllerContext jarContext = controller.getInstalledContext("JARStructure"); assertNotNull(jarContext); JARStructure jarStructure = (JARStructure)jarContext.getTarget(); assertNotNull(jarStructure); addStructureDeployer(main, jarStructure); ControllerContext fileContext = controller.getInstalledContext("FileStructure"); assertNotNull(fileContext); ExposedFileStructure fileStructure = (ExposedFileStructure)fileContext.getTarget(); assertNotNull(fileStructure); addStructureDeployer(main, fileStructure); Set matchers = fileStructure.getMatchers(); assertNotNull(matchers); assertEmpty(matchers); builder = BeanMetaDataBuilder.createBuilder("BeanDeployer", TestBeanDeployer.class.getName()); controller.install(builder.getBeanMetaData()); assertEquals(1, matchers.size()); builder = BeanMetaDataBuilder.createBuilder("BshDeployer", TestBshDeployer.class.getName()); controller.install(builder.getBeanMetaData()); assertEquals(2, matchers.size()); builder = BeanMetaDataBuilder.createBuilder("ExactNameDeployer", TestNameDeployer.class.getName()); builder.addConstructorParameter(String.class.getName(), "some.bsh"); controller.install(builder.getBeanMetaData()); assertEquals(3, matchers.size()); Deployers deployers = createDeployers(); main.setDeployers(deployers); FeedbackDeployer beanDeployer = addDeployer(main, "BeanDeployer"); FeedbackDeployer shellDeployer = addDeployer(main, "BshDeployer"); FeedbackDeployer nameDeployer = addDeployer(main, "ExactNameDeployer"); Deployment deploymentBeans = createDeployment("/matchers", "qwert.beans"); assertDeploy(main, deploymentBeans); Deployment deploymentShells = createDeployment("/matchers", "beanshell.jar"); assertDeploy(main, deploymentShells); Deployment deploymentTopLevel = createDeployment("/matchers", "toplevel"); assertDeploy(main, deploymentTopLevel); assertNotNull(beanDeployer.getFiles()); assertEquals(new String[]{"my-beans.xml", "some-beans.xml"}, beanDeployer.getFiles().toArray()); assertNotNull(shellDeployer.getFiles()); assertEquals(new String[]{"script.bsh", "some.bsh"}, shellDeployer.getFiles().toArray()); assertNotNull(nameDeployer.getFiles()); assertEquals(new String[]{"some.bsh"}, nameDeployer.getFiles().toArray()); } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/test/JarExtensionsTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000001222310760546324033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.test; import java.util.Set; import junit.framework.Test; import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder; import org.jboss.dependency.spi.ControllerContext; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.vfs.spi.deployer.FileMatcher; import org.jboss.kernel.spi.dependency.KernelController; import org.jboss.test.deployers.vfs.matchers.support.ExposedFileStructure; import org.jboss.test.deployers.vfs.matchers.support.ExposedJARStructure; import org.jboss.test.deployers.vfs.matchers.support.FeedbackDeployer; import org.jboss.test.deployers.vfs.matchers.support.TestExtensionDeployer; /** * Jar extensions tests. * * @author Ales Justin */ public class JarExtensionsTestCase extends KernelHolderDeployersTest { public JarExtensionsTestCase(String name) { super(name); } public static Test suite() { return suite(JarExtensionsTestCase.class); } public void testExtensionProviders() throws Throwable { KernelController controller = getController(); MainDeployerImpl main = new MainDeployerImpl(); main.setStructuralDeployers(createStructuralDeployers()); BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("JARStructure", ExposedJARStructure.class.getName()); controller.install(builder.getBeanMetaData()); builder = BeanMetaDataBuilder.createBuilder("FileStructure", ExposedFileStructure.class.getName()); controller.install(builder.getBeanMetaData()); ControllerContext jarContext = controller.getInstalledContext("JARStructure"); assertNotNull(jarContext); ExposedJARStructure jarStructure = (ExposedJARStructure)jarContext.getTarget(); assertNotNull(jarStructure); addStructureDeployer(main, jarStructure); ControllerContext fileContext = controller.getInstalledContext("FileStructure"); assertNotNull(fileContext); ExposedFileStructure fileStructure = (ExposedFileStructure)fileContext.getTarget(); assertNotNull(fileStructure); addStructureDeployer(main, fileStructure); Set matchers = fileStructure.getMatchers(); assertNotNull(matchers); assertEmpty(matchers); builder = BeanMetaDataBuilder.createBuilder("RhtDeployer", TestExtensionDeployer.class.getName()); builder.addConstructorParameter(String.class.getName(), ".rht"); controller.install(builder.getBeanMetaData()); assertEquals(1, matchers.size()); builder = BeanMetaDataBuilder.createBuilder("JbsDeployer", TestExtensionDeployer.class.getName()); builder.addConstructorParameter(String.class.getName(), ".jbs"); controller.install(builder.getBeanMetaData()); assertEquals(2, matchers.size()); Set suffixes = jarStructure.getSuffixes(); assertTrue(suffixes.contains(".rhts")); assertTrue(suffixes.contains(".jbss")); Deployers deployers = createDeployers(); main.setDeployers(deployers); FeedbackDeployer rhtDeployer = addDeployer(main, "RhtDeployer"); FeedbackDeployer jbsDeployer = addDeployer(main, "JbsDeployer"); Deployment deploymentRHT = createDeployment("/matchers", "some.rhts"); assertDeploy(main, deploymentRHT); assertTrue(jarStructure.getRecognized().contains("some.rhts")); Deployment deploymentJBS = createDeployment("/matchers", "some.jbss"); assertDeploy(main, deploymentJBS); assertTrue(jarStructure.getRecognized().contains("some.jbss")); Deployment deploymentXYZ = createDeployment("/matchers", "some.xyz"); assertDeploy(main, deploymentXYZ); assertFalse(jarStructure.getRecognized().contains("some.xyz")); assertNotNull(rhtDeployer.getFiles()); assertEquals(new String[]{"some.rht"}, rhtDeployer.getFiles().toArray()); assertNotNull(jbsDeployer.getFiles()); assertEquals(new String[]{"some.jbs"}, jbsDeployer.getFiles().toArray()); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/test/KernelHolderDeployersTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000570710760546324033454 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.test; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerState; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.bootstrap.basic.BasicBootstrap; import org.jboss.kernel.spi.dependency.KernelController; import org.jboss.test.deployers.BaseDeployersVFSTest; import org.jboss.test.deployers.vfs.matchers.support.FeedbackDeployer; /** * Holds a Kernel instance * * @author Ales Justin */ public abstract class KernelHolderDeployersTest extends BaseDeployersVFSTest { private Kernel kernel; private KernelController controller; protected KernelHolderDeployersTest(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); BasicBootstrap bootstrap = new BasicBootstrap(); bootstrap.run(); kernel = bootstrap.getKernel(); controller = kernel.getController(); } protected KernelController getController() { return controller; } protected void tearDown() throws Exception { try { if (controller != null) controller.shutdown(); controller = null; kernel = null; } finally { super.tearDown(); } } protected FeedbackDeployer addDeployer(DeployerClient main, String name) { ControllerContext context = controller.getInstalledContext(name); assertNotNull("Missing deployer: " + name, context); assertEquals(ControllerState.INSTALLED, context.getState()); Object target = context.getTarget(); assertNotNull(target); assertInstanceOf(target, FeedbackDeployer.class); FeedbackDeployer deployer = (FeedbackDeployer)target; addDeployer(main, deployer); return deployer; } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000755000175000017500000000000011620060443033426 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/support/TestBeanDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000245010757641060033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.support; /** * @author Ales Justin */ public class TestBeanDeployer extends FeedbackDeployer { public TestBeanDeployer() { setSuffix("-beans.xml"); setJarExtension(".beans"); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/support/TestBshDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000237610757641060033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.support; /** * @author Ales Justin */ public class TestBshDeployer extends FeedbackDeployer { public TestBshDeployer() { setSuffix(".bsh"); } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/support/FeedbackDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000353210760546324033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.support; import java.util.Set; import java.util.TreeSet; import org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * Gather feedback from deployer units. * * @author Ales Justin */ public abstract class FeedbackDeployer extends AbstractVFSParsingDeployer { private Set files = new TreeSet(); protected FeedbackDeployer() { super(Object.class); } protected Object parse(VFSDeploymentUnit unit, VirtualFile file, Object root) throws Exception { files.add(file.getName()); return null; } public Set getFiles() { return files; } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/support/TestNameDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000240710760546324033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.support; /** * @author Ales Justin */ public class TestNameDeployer extends FeedbackDeployer { public TestNameDeployer(String name) { setName(name); } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/support/TestExtensionDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000253310757641060033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.support; /** * @author Ales Justin */ public class TestExtensionDeployer extends FeedbackDeployer { public TestExtensionDeployer(String extension) { setSuffix(extension); // plural :-) setJarExtension(extension + "s"); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/support/ExposedFileStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000370010757641060033442 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.support; import java.util.Set; import java.util.HashSet; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.spi.deployer.FileMatcher; import org.jboss.beans.metadata.api.annotations.Install; import org.jboss.beans.metadata.api.annotations.Uninstall; /** * Exposes matchers. * * @author Ales Justin */ public class ExposedFileStructure extends FileStructure { protected Set matchers = new HashSet(); public Set getMatchers() { return matchers; } @Install public boolean addFileMatcher(FileMatcher fm) { super.addFileMatcher(fm); return matchers.add(fm); } @Uninstall public boolean removeFileMatcher(FileMatcher fm) { matchers.remove(fm); return super.removeFileMatcher(fm); } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/matchers/support/ExposedJARStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/match0000644000175000017500000000357211046056310033437 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.matchers.support; import java.util.HashSet; import java.util.Set; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.spi.structure.StructureContext; /** * Exposes recognized files. * * @author Ales Justin */ public class ExposedJARStructure extends JARStructure { protected Set recognized = new HashSet(); public Set getRecognized() { return recognized; } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { boolean determined = super.determineStructure(structureContext); if (determined) recognized.add(structureContext.getName()); return determined; } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000755000175000017500000000000011620060444033440 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000755000175000017500000000000011620060444033440 5ustar twernertwerner././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/IntegrationDeployerUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000615411042465226033455 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.URL; import junit.framework.Test; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; import org.jboss.virtual.MemoryFileFactory; import org.jboss.virtual.VFS; /** * IntegrationDeployerUnitTestCase. * * @author Ales Justin */ public class IntegrationDeployerUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(IntegrationDeployerUnitTestCase.class); } public IntegrationDeployerUnitTestCase(String name) { super(name); } protected void setUp() throws Exception { VFS.init(); URL dynamicClassRoot = new URL("vfsmemory", "integration-test", ""); VFS vfs = MemoryFileFactory.createRoot(dynamicClassRoot); System.setProperty("integration.test.url", vfs.getRoot().toURL().toExternalForm()); URL file = getResource("/org/jboss/test/deployers/vfs/classloader/test/Touch.class"); assertNotNull(file); ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream is = file.openStream(); try { int read = is.read(); while(read >= 0) { baos.write(read); read = is.read(); } } finally { is.close(); } MemoryFileFactory.putFile(new URL(dynamicClassRoot.toExternalForm() + "/Touch.class"), baos.toByteArray()); super.setUp(); } public void testPath() throws Exception { VFSDeployment deployment = createVFSDeployment("/classloader/integration", "path"); VFSDeploymentUnit unit = assertDeploy(deployment.getRoot()); undeploy(unit); } public void testMetaData() throws Exception { VFSDeployment deployment = createVFSDeployment("/classloader/integration", "metadata"); VFSDeploymentUnit unit = assertDeploy(deployment.getRoot()); undeploy(unit); } }././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/NotVFSClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001031710761233255033453 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import junit.framework.Test; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory; import org.jboss.deployers.client.plugins.deployment.AbstractDeployment; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.main.MainDeployerStructure; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; /** * NotVFSClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class NotVFSClassLoaderUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(NotVFSClassLoaderUnitTestCase.class); } public NotVFSClassLoaderUnitTestCase(String name) { super(name); } public void testNotVFSClassLoaderSmokeTest() throws Exception { DeploymentFactory factory = new DeploymentFactory(); Deployment deployment = new AbstractDeployment("test"); factory.addContext(deployment, ""); DeployerClient main = assertBean("MainDeployer", DeployerClient.class); main.deploy(deployment); try { MainDeployerStructure mds = (MainDeployerStructure) main; DeploymentUnit unit = mds.getDeploymentUnit(deployment.getName()); ClassLoader cl = unit.getClassLoader(); assertNoResource("a/b/c/test-resource-deployment5", cl); } finally { main.undeploy(deployment); } } public void testVFSClassLoaderDependsOnVFS() throws Exception { DeploymentFactory factory = new DeploymentFactory(); VFSDeploymentUnit unit5 = assertDeploy("/classloader", "deployment5"); try { ClassLoader cl5 = getClassLoader(unit5); assertGetResource("a/b/c/test-resource-deployment5", cl5); Deployment deployment = new AbstractDeployment("test"); factory.addContext(deployment, ""); ClassLoadingMetaDataFactory clmdf = ClassLoadingMetaDataFactory.getInstance(); ClassLoadingMetaData clmd = new ClassLoadingMetaData(); clmd.getRequirements().addRequirement(clmdf.createRequireModule("test5")); ((MutableAttachments) deployment.getPredeterminedManagedObjects()).addAttachment(ClassLoadingMetaData.class, clmd); DeployerClient main = assertBean("MainDeployer", DeployerClient.class); main.deploy(deployment); try { MainDeployerStructure mds = (MainDeployerStructure) main; DeploymentUnit unit = mds.getDeploymentUnit(deployment.getName()); ClassLoader cl = unit.getClassLoader(); assertGetResource("a/b/c/test-resource-deployment5", cl); } finally { main.undeploy(deployment); } } finally { undeploy(unit5); } } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/InMemoryClasesUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001441311113261537033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.net.URL; import junit.framework.Test; import org.jboss.classloader.plugins.jdk.AbstractJDKChecker; import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ParentPolicy; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.version.Version; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.structure.spi.main.MainDeployerStructure; import org.jboss.deployers.vfs.plugins.classloader.InMemoryClassesDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer; import org.jboss.deployers.vfs.plugins.classloader.DeploymentHostNameCreator; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.vfs.classloader.support.TestLevelClassLoaderSystemDeployer; import org.jboss.test.deployers.vfs.classloader.support.a.A; import org.jboss.virtual.MemoryFileFactory; import org.jboss.virtual.VirtualFile; /** * InMemoryClasesUnitTestCase. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class InMemoryClasesUnitTestCase extends VFSClassLoaderDependenciesTest { private InMemoryClassesDeployer inMemoryClassesDeployer = new InMemoryClassesDeployer(); public InMemoryClasesUnitTestCase(String name) { super(name); } public static Test suite() { return suite(InMemoryClasesUnitTestCase.class); } public void testInMemory() throws Exception { DeployerClient mainDeployer = getMainDeployer(); MainDeployerStructure main = (MainDeployerStructure) mainDeployer; Version v1 = Version.parseVersion("1"); Deployment ad = createDeployment("A"); ClassLoadingMetaData clmd = addClassLoadingMetaData(ad, v1, true, A.class); clmd.setBlackListable(false); assertDeploy(mainDeployer, ad); VFSDeploymentUnit unit = (VFSDeploymentUnit) main.getDeploymentUnit("A"); VirtualFile file = unit.getAttachment(InMemoryClassesDeployer.DYNAMIC_CLASS_KEY, VirtualFile.class); assertNotNull(file); assertTrue("dynamic classes should be in the classpath", unit.getClassPath().contains(file)); URL root = unit.getAttachment(InMemoryClassesDeployer.DYNAMIC_CLASS_URL_KEY, URL.class); assertNotNull(root); String aPackage = A.class.getPackage().getName(); aPackage = aPackage.replace(".", "/"); String resourceName = aPackage + "/TestInMemory"; URL testResource = new URL(root, resourceName); ClassLoader cl = unit.getClassLoader(); assertNull(cl.getResource(resourceName)); byte[] bytes = new byte[0]; MemoryFileFactory.putFile(testResource, bytes); URL resource = cl.getResource(resourceName); assertNotNull(resource); // dunno why direct URL equals fails? assertEquals(testResource.toExternalForm(), resource.toExternalForm()); mainDeployer.undeploy(ad); mainDeployer.checkComplete(); assertFalse("dynamic classes should NOT be in the classpath", unit.getClassPath().contains(file)); } public void testHostNameCreator() throws Exception { DeployerClient mainDeployer = getMainDeployer(); MainDeployerStructure main = (MainDeployerStructure) mainDeployer; Deployment ad = createDeployment("A"); Version v1 = Version.parseVersion("1"); ClassLoadingMetaData clmd = addClassLoadingMetaData(ad, v1, true, A.class); clmd.setBlackListable(false); inMemoryClassesDeployer.setHostNameCreator(new DeploymentHostNameCreator()); try { assertDeploy(mainDeployer, ad); VFSDeploymentUnit unit = (VFSDeploymentUnit) main.getDeploymentUnit("A"); URL root = unit.getAttachment(InMemoryClassesDeployer.DYNAMIC_CLASS_URL_KEY, URL.class); assertNotNull(root); assertEquals("vfsmemory://in-memory-test-classes", root.toExternalForm()); } finally { inMemoryClassesDeployer.setHostNameCreator(null); } } protected DeployerClient getMainDeployer() { AbstractJDKChecker.getExcluded().add(VFSClassLoaderDependenciesTest.class); ClassLoading classLoading = new ClassLoading(); ClassLoaderSystem system = new DefaultClassLoaderSystem(); system.getDefaultDomain().setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY); deployer1 = new VFSClassLoaderDescribeDeployer(); deployer1.setClassLoading(classLoading); deployer2 = new TestLevelClassLoaderSystemDeployer(); deployer2.setClassLoading(classLoading); deployer2.setSystem(system); Deployer deployer4 = new VFSClassLoaderClassPathDeployer(); return createMainDeployer(deployer1, deployer2, inMemoryClassesDeployer, deployer4); } } ././@LongLink0000000000000000000000000000024600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/DeploymentDependsOnManualClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001255310757303634033463 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.net.URL; import junit.framework.Test; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; /** * DeploymentDependsOnManualClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentDependsOnManualClassLoaderUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(DeploymentDependsOnManualClassLoaderUnitTestCase.class); } public DeploymentDependsOnManualClassLoaderUnitTestCase(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); URL classLoaderResource = getResource("/classloader"); System.setProperty("test.classloader.url", classLoaderResource.toString()); } public void testDependencyCorrectWay() throws Exception { VFSDeploymentUnit unit2 = assertDeploy("/classloader", "deployment2"); try { ClassLoader cl2 = assertBean("test2:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-external-deployment2", cl2); VFSDeploymentUnit unit1 = assertDeploy("/classloader", "deployment1"); try { ClassLoader cl1 = getClassLoader(unit1); assertGetResource("a/b/c/test-resource-external-deployment2", cl1); } finally { undeploy(unit1); } } finally { undeploy(unit2); } } public void testDependencyWrongWay() throws Exception { VFSDeploymentUnit unit1 = addDeployment("/classloader", "deployment1"); try { assertNoClassLoader(unit1); VFSDeploymentUnit unit2 = assertDeploy("/classloader", "deployment2"); try { ClassLoader cl2 = assertBean("test2:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-external-deployment2", cl2); } finally { undeploy(unit2); } } finally { undeploy(unit1); } } public void testDependencyRedeploy1() throws Exception { VFSDeploymentUnit unit2 = assertDeploy("/classloader", "deployment2"); try { ClassLoader cl2 = assertBean("test2:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-external-deployment2", cl2); VFSDeploymentUnit unit1 = assertDeploy("/classloader", "deployment1"); try { ClassLoader cl1 = getClassLoader(unit1); assertGetResource("a/b/c/test-resource-external-deployment2", cl1); undeploy(unit1); try { assertNoClassLoader(unit1); } finally { unit1 = assertDeploy("/classloader", "deployment1"); } cl1 = getClassLoader(unit1); assertGetResource("a/b/c/test-resource-external-deployment2", cl1); } finally { undeploy(unit1); } } finally { undeploy(unit2); } } public void testDependencyRedeploy2() throws Exception { VFSDeploymentUnit unit2 = assertDeploy("/classloader", "deployment2"); try { ClassLoader cl2 = assertBean("test2:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-external-deployment2", cl2); VFSDeploymentUnit unit1 = assertDeploy("/classloader", "deployment1"); try { ClassLoader cl1 = getClassLoader(unit1); assertGetResource("a/b/c/test-resource-external-deployment2", cl1); undeploy(unit2); try { assertNoClassLoader(unit1); } finally { unit2 = assertDeploy("/classloader", "deployment2"); } cl1 = getClassLoader(unit1); assertGetResource("a/b/c/test-resource-external-deployment2", cl1); cl2 = assertBean("test2:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-external-deployment2", cl2); } finally { undeploy(unit1); } } finally { undeploy(unit2); } } } ././@LongLink0000000000000000000000000000024600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/ManualDependsOnDeploymentClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001276110770621230033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.net.URL; import junit.framework.Test; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; /** * ManualDependsOnDeploymentClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManualDependsOnDeploymentClassLoaderUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(ManualDependsOnDeploymentClassLoaderUnitTestCase.class); } public ManualDependsOnDeploymentClassLoaderUnitTestCase(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); URL classLoaderResource = getResource("/classloader"); System.setProperty("test.classloader.url", classLoaderResource.toString()); } public void testDependencyCorrectWay() throws Exception { VFSDeploymentUnit unit3 = assertDeploy("/classloader", "deployment3"); try { ClassLoader cl3 = getClassLoader(unit3); assertGetResource("a/b/c/test-resource-deployment3", cl3); VFSDeploymentUnit unit4 = assertDeploy("/classloader", "deployment4"); try { ClassLoader cl4 = assertBean("test4:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-deployment3", cl4); } finally { undeploy(unit4); } } finally { undeploy(unit3); } } public void testDependencyWrongWay() throws Exception { VFSDeploymentUnit unit4 = addDeployment("/classloader", "deployment4"); try { assertNoBean("test4:0:0:0"); VFSDeploymentUnit unit3 = assertDeploy("/classloader", "deployment3"); try { ClassLoader cl3 = getClassLoader(unit3); assertGetResource("a/b/c/test-resource-deployment3", cl3); ClassLoader cl4 = assertBean("test4:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-deployment3", cl4); } finally { undeploy(unit3); } } finally { undeploy(unit4); } } public void testDependencyRedeploy3() throws Exception { VFSDeploymentUnit unit3 = assertDeploy("/classloader", "deployment3"); try { ClassLoader cl3 = getClassLoader(unit3); assertGetResource("a/b/c/test-resource-deployment3", cl3); VFSDeploymentUnit unit4 = assertDeploy("/classloader", "deployment4"); try { ClassLoader cl4 = assertBean("test4:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-deployment3", cl4); undeploy(unit3); try { assertNoBean("test4:0.0.0"); } finally { unit3 = assertDeploy("/classloader", "deployment3"); } cl3 = getClassLoader(unit3); assertGetResource("a/b/c/test-resource-deployment3", cl3); cl4 = assertBean("test4:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-deployment3", cl4); } finally { undeploy(unit4); } } finally { undeploy(unit3); } } public void testDependencyRedeploy4() throws Exception { VFSDeploymentUnit unit3 = assertDeploy("/classloader", "deployment3"); try { ClassLoader cl3 = getClassLoader(unit3); assertGetResource("a/b/c/test-resource-deployment3", cl3); VFSDeploymentUnit unit4 = assertDeploy("/classloader", "deployment4"); try { ClassLoader cl4 = assertBean("test4:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-deployment3", cl4); undeploy(unit4); try { assertNoBean("test4:0.0.0"); assertGetResource("a/b/c/test-resource-deployment3", cl3); } finally { unit4 = assertDeploy("/classloader", "deployment4"); } cl4 = assertBean("test4:0.0.0", ClassLoader.class); assertGetResource("a/b/c/test-resource-deployment3", cl4); } finally { undeploy(unit4); } } finally { undeploy(unit3); } } } ././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/VFSClassLoaderDependenciesUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000002016210756575630033464 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.vfs.classloader.support.a.A; import org.jboss.test.deployers.vfs.classloader.support.b.B; /** * VFSClassLoaderDependenciesUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSClassLoaderDependenciesUnitTestCase extends VFSClassLoaderDependenciesTest { public static Test suite() { return new TestSuite(VFSClassLoaderDependenciesUnitTestCase.class); } public VFSClassLoaderDependenciesUnitTestCase(String name) { super(name); } public void testSimpleClassLoader() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deployment = createDeployment(NameA); addClassLoadingMetaData(deployment, null, A.class); DeploymentUnit unit = assertDeploy(deployer, deployment); assertEquals(XA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader cl = unit.getClassLoader(); enableTrace("org.jboss.classloader"); assertLoadClass(cl, A.class); assertUndeploy(deployer, deployment); assertLoadClass(cl, A.class); assertEquals(XA, deployer2.deployed); assertEquals(XA, deployer2.undeployed); } public void testADependsUponModuleBCorrectWay() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deploymentB = createDeployment(NameB); addClassLoadingMetaData(deploymentB, null, B.class); DeploymentUnit unitB = assertDeploy(deployer, deploymentB); ClassLoader clB = unitB.getClassLoader(); assertLoadClass(clB, B.class); assertEquals(XB, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); Deployment deploymentA = createDeployment(NameA); ClassLoadingMetaData classLoadingMetaData = addClassLoadingMetaData(deploymentA, null, A.class); addRequireModule(classLoadingMetaData, "B", null); DeploymentUnit unitA = assertDeploy(deployer, deploymentA); ClassLoader clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); assertEquals(XBA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); assertUndeploy(deployer, deploymentA); assertLoadClassIllegal(clA, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(XA, deployer2.undeployed); assertUndeploy(deployer, deploymentB); assertLoadClass(clB, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(XAB, deployer2.undeployed); } public void testADependsUponModuleBWrongWay() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deploymentA = createDeployment(NameA); ClassLoadingMetaData classLoaderMetaData = addClassLoadingMetaData(deploymentA, null, A.class); addRequireModule(classLoaderMetaData, "B", null); DeploymentUnit unitA = addDeployment(deployer, deploymentA); assertNoClassLoader(unitA); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); Deployment deploymentB = createDeployment(NameB); addClassLoadingMetaData(deploymentB, null, B.class); DeploymentUnit unitB = assertDeploy(deployer, deploymentB); ClassLoader clB = unitB.getClassLoader(); assertLoadClass(clB, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); assertUndeploy(deployer, deploymentA); assertLoadClassIllegal(clA, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(XA, deployer2.undeployed); assertUndeploy(deployer, deploymentB); assertLoadClass(clB, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(XAB, deployer2.undeployed); } public void testADependsUponModuleBRedeployA() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deploymentA = createDeployment(NameA); ClassLoadingMetaData classLoaderMetaData = addClassLoadingMetaData(deploymentA, null, A.class); addRequireModule(classLoaderMetaData, "B", null); DeploymentUnit unitA = addDeployment(deployer, deploymentA); assertNoClassLoader(unitA); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); Deployment deploymentB = createDeployment(NameB); addClassLoadingMetaData(deploymentB, null, B.class); DeploymentUnit unitB = assertDeploy(deployer, deploymentB); ClassLoader clB = unitB.getClassLoader(); assertLoadClass(clB, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); assertUndeploy(deployer, deploymentA); assertLoadClassIllegal(clA, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(XA, deployer2.undeployed); unitA = assertDeploy(deployer, deploymentA); clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); assertEquals(XBAA, deployer2.deployed); assertEquals(XA, deployer2.undeployed); } public void testADependsUponModuleBRedeployB() throws Exception { DeployerClient deployer = getMainDeployer(); Deployment deploymentA = createDeployment(NameA); ClassLoadingMetaData classLoaderMetaData = addClassLoadingMetaData(deploymentA, null, A.class); addRequireModule(classLoaderMetaData, "B", null); DeploymentUnit unitA = addDeployment(deployer, deploymentA); assertNoClassLoader(unitA); assertEquals(NONE, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); Deployment deploymentB = createDeployment(NameB); addClassLoadingMetaData(deploymentB, null, B.class); DeploymentUnit unitB = assertDeploy(deployer, deploymentB); ClassLoader clB = unitB.getClassLoader(); assertLoadClass(clB, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(NONE, deployer2.undeployed); ClassLoader clA = unitA.getClassLoader(); assertLoadClass(clA, B.class, clB); enableTrace("org.jboss.deployers"); enableTrace("org.jboss.dependency"); assertUndeploy(deployer, deploymentB); assertLoadClassIllegal(clA, B.class); assertEquals(XBA, deployer2.deployed); assertEquals(XAB, deployer2.undeployed); unitB = assertDeploy(deployer, deploymentB); clA = unitA.getClassLoader(); clB = unitB.getClassLoader(); assertLoadClass(clA, B.class, clB); assertEquals(XBABA, deployer2.deployed); assertEquals(XAB, deployer2.undeployed); } } ././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/ManifestClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001420411044122744033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.lang.reflect.Field; import junit.framework.Test; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; import org.jboss.test.deployers.vfs.classloader.support.a.A; import org.jboss.test.deployers.vfs.classloader.support.usea.UseA; import org.jboss.virtual.AssembledDirectory; /** * ManifestClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManifestClassLoaderUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(ManifestClassLoaderUnitTestCase.class); } public ManifestClassLoaderUnitTestCase(String name) { super(name); } public void testBasicManifest() throws Exception { AssembledDirectory topLevel = createTopLevelWithUtil(); AssembledDirectory sub = topLevel.mkdir("sub.jar"); addPackage(sub, UseA.class); addPath(sub, "/classloader/manifest/basic", "META-INF"); VFSDeploymentUnit unit = assertDeploy(topLevel); try { ClassLoader cl = getClassLoader(unit); Class expected = assertLoadClass(A.class, cl); Class actual = getUsedClass(UseA.class, cl); assertClassEquality(expected, actual); } finally { undeploy(unit); } } public void testScopedManifest() throws Exception { AssembledDirectory topLevel = createTopLevelWithUtil(); AssembledDirectory sub = topLevel.mkdir("sub.jar"); addPackage(sub, UseA.class); addPath(sub, "/classloader/manifest/scoped", "META-INF"); enableTrace("org.jboss.deployers"); VFSDeploymentUnit unit = assertDeploy(topLevel); try { ClassLoader cl = getClassLoader(unit); Class expected = assertLoadClass(A.class, cl); DeploymentUnit subUnit = assertChild(unit, "sub.jar"); ClassLoader clSub = getClassLoader(subUnit); Class actual = getUsedClass(UseA.class, clSub); assertClassEquality(expected, actual); } finally { undeploy(unit); } } public void testScopedManifests() throws Exception { AssembledDirectory topLevel = createTopLevelWithUtil(); AssembledDirectory sub1 = topLevel.mkdir("sub1.jar"); addPackage(sub1, UseA.class); addPath(sub1, "/classloader/manifest/scoped", "META-INF"); AssembledDirectory sub2 = topLevel.mkdir("sub2.jar"); addPackage(sub2, UseA.class); addPath(sub2, "/classloader/manifest/scoped", "META-INF"); VFSDeploymentUnit unit = assertDeploy(topLevel); try { ClassLoader cl = getClassLoader(unit); Class expected = assertLoadClass(A.class, cl); DeploymentUnit sub1Unit = assertChild(unit, "sub1.jar"); ClassLoader clSub1 = getClassLoader(sub1Unit); Class actual = getUsedClass(UseA.class, clSub1); assertClassEquality(expected, actual); DeploymentUnit sub2Unit = assertChild(unit, "sub2.jar"); ClassLoader clSub2 = getClassLoader(sub2Unit); actual = getUsedClass(UseA.class, clSub2); assertClassEquality(expected, actual); } finally { undeploy(unit); } } public void testScopedManifestNotParent() throws Exception { // Dummy parent to create a different parent domain AssembledDirectory dummyParent = createAssembledDirectory("dummyParent.jar"); addPath(dummyParent, "/classloader/manifest/dummyparent", "META-INF"); VFSDeploymentUnit dummy = assertDeploy(dummyParent); try { AssembledDirectory topLevel = createTopLevelWithUtil(); addPath(topLevel, "/classloader/manifest/topscoped", "META-INF"); AssembledDirectory sub = topLevel.mkdir("sub.jar"); addPackage(sub, UseA.class); addPath(sub, "/classloader/manifest/scopednotparent", "META-INF"); VFSDeploymentUnit unit = assertDeploy(topLevel); try { ClassLoader cl = getClassLoader(unit); Class expected = assertLoadClass(A.class, cl); DeploymentUnit subUnit = assertChild(unit, "sub.jar"); ClassLoader clSub = getClassLoader(subUnit); Class actual = getUsedClass(UseA.class, clSub); assertNoClassEquality(expected, actual); } finally { undeploy(unit); } } finally { undeploy(dummy); } } @SuppressWarnings("unchecked") protected Class getUsedClass(Class reference, ClassLoader start) throws Exception { Class user = assertLoadClass(reference, start); Field a = user.getField("used"); return (Class) a.get(null); } protected AssembledDirectory createTopLevelWithUtil() throws Exception { AssembledDirectory topLevel = createAssembledDirectory("top-level.jar"); AssembledDirectory util = topLevel.mkdir("util.jar"); addPackage(util, A.class); return topLevel; } } ././@LongLink0000000000000000000000000000023500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/VFSUndeployOrderClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000673310756575630033474 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import junit.framework.Test; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.version.Version; import org.jboss.classloading.spi.version.VersionRange; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.IncompleteDeploymentException; import org.jboss.deployers.spi.DeploymentException; import org.jboss.test.deployers.vfs.classloader.support.a.A; import org.jboss.test.deployers.vfs.classloader.support.b.B; /** * Undeploy order test case. * * @author Ales Justin */ public class VFSUndeployOrderClassLoaderUnitTestCase extends VFSClassLoaderDependenciesTest { public VFSUndeployOrderClassLoaderUnitTestCase(String name) { super(name); } public static Test suite() { return suite(VFSUndeployOrderClassLoaderUnitTestCase.class); } public void testUndeployOrder() throws Exception { DeployerClient mainDeployer = getMainDeployer(); Version v1 = Version.parseVersion("1"); Version v2 = Version.parseVersion("2"); Deployment ad = createDeployment("A"); addClassLoadingMetaData(ad, v1, true, A.class); assertDeploy(mainDeployer, ad); Deployment bd = createDeployment("B"); addClassLoadingMetaData(bd, v2, true, B.class); assertDeploy(mainDeployer, bd); mainDeployer.checkComplete(bd); Deployment cd = createDeployment("C"); ClassLoadingMetaData clmd = addClassLoadingMetaData(cd, null); addRequirePackage(clmd, A.class, new VersionRange(v1, true, v2, true)); addRequirePackage(clmd, B.class, new VersionRange(v1, true, v2, true)); assertDeploy(mainDeployer, cd); mainDeployer.checkComplete(); mainDeployer.undeploy(bd); try { mainDeployer.checkComplete(); fail("Should not be here!"); } catch (DeploymentException e) { checkThrowable(IncompleteDeploymentException.class, e); } mainDeployer.undeploy(ad); try { mainDeployer.checkComplete(); fail("Should not be here!"); } catch (DeploymentException e) { checkThrowable(IncompleteDeploymentException.class, e); } mainDeployer.undeploy(cd); mainDeployer.checkComplete(); } } ././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/SubDeploymentClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000707710761233255033464 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.util.List; import junit.framework.AssertionFailedError; import junit.framework.Test; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; /** * DeploymentDependsOnManualClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class SubDeploymentClassLoaderUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(SubDeploymentClassLoaderUnitTestCase.class); } public SubDeploymentClassLoaderUnitTestCase(String name) { super(name); } public void testNoSubDeploymentClassLoader() throws Exception { VFSDeploymentUnit top = assertDeploy("/classloader", "top-sub-no-classloader"); try { ClassLoader clTop = getClassLoader(top); assertGetResource("test-resource-top-no-classloader", clTop); assertGetResource("test-resource-sub-no-classloader", clTop); DeploymentUnit sub = assertChild(top, "sub/"); ClassLoader clSub = getClassLoader(sub); assertGetResource("test-resource-top-no-classloader", clSub); assertGetResource("test-resource-sub-no-classloader", clSub); assertEquals(clTop, clSub); } finally { undeploy(top); } } public void testSubDeploymentClassLoader() throws Exception { VFSDeploymentUnit top = assertDeploy("/classloader", "top-sub-classloader"); try { ClassLoader clTop = getClassLoader(top); assertGetResource("test-resource-top-classloader", clTop); assertNoResource("test-resource-sub-classloader", clTop); DeploymentUnit sub = assertChild(top, "sub/"); ClassLoader clSub = getClassLoader(sub); assertGetResource("test-resource-top-classloader", clSub); assertGetResource("test-resource-sub-classloader", clSub); assertNotSame(clTop, clSub); } finally { undeploy(top); } } protected DeploymentUnit assertChild(DeploymentUnit parent, String name) { name = parent.getName() + name; List children = parent.getChildren(); for (DeploymentUnit child : children) { if (name.equals(child.getName())) return child; } throw new AssertionFailedError("Child " + name + " not found in " + children); } } ././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/VFSClassLoaderDependenciesTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000002467011072370632033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jboss.classloader.plugins.jdk.AbstractJDKChecker; import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ParentPolicy; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.metadata.CapabilitiesMetaData; import org.jboss.classloading.spi.metadata.Capability; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory; import org.jboss.classloading.spi.metadata.Requirement; import org.jboss.classloading.spi.metadata.RequirementsMetaData; import org.jboss.classloading.spi.version.Version; import org.jboss.classloading.spi.version.VersionRange; import org.jboss.deployers.client.plugins.deployment.AbstractDeployment; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.plugins.classloading.AbstractClassLoaderDescribeDeployer; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory; import org.jboss.test.deployers.BaseDeployersVFSTest; import org.jboss.test.deployers.vfs.classloader.support.TestLevelClassLoaderSystemDeployer; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; /** * ClassLoadersDependencies test. * * @author Ales Justin */ public abstract class VFSClassLoaderDependenciesTest extends BaseDeployersVFSTest { private static ClassLoadingMetaDataFactory classLoadingMetaDataFactory = ClassLoadingMetaDataFactory.getInstance(); public static final String NameA = "A"; public static final String NameB = "B"; public static final List NONE = Collections.emptyList(); public static final List XA = makeList(NameA); public static final List XB = makeList(NameB); public static final List XAB = makeList(NameA, NameB); public static final List XBA = makeList(NameB, NameA); public static final List XBAA = makeList(NameB, NameA, NameA); public static final List XBABA = makeList(NameB, NameA, NameB, NameA); @SuppressWarnings("unchecked") protected static List makeList(T... objects) { List result = new ArrayList(); for (T object : objects) result.add(object); return result; } protected AbstractClassLoaderDescribeDeployer deployer1; protected TestLevelClassLoaderSystemDeployer deployer2; protected VFSClassLoaderDependenciesTest(String name) { super(name); } /** * Create a deployment * * @param name the name * @return the deployment * @throws Exception for any error */ protected VFSDeployment createDeployment(String name) throws Exception { URL url = getClass().getProtectionDomain().getCodeSource().getLocation(); VirtualFile file = VFS.getRoot(url); VFSDeployment deployment = VFSDeploymentFactory.getInstance().createVFSDeployment(file); DeploymentFactory factory = new DeploymentFactory(); factory.addContext(deployment, ""); ((AbstractDeployment) deployment).setName(name); return deployment; } protected Class assertLoadClass(ClassLoader start, Class reference) throws Exception { return assertLoadClass(start, reference, start); } protected Class assertLoadClass(ClassLoader start, Class reference, ClassLoader expected) throws Exception { Class clazz = start.loadClass(reference.getName()); if (expected != null) assertEquals(expected, clazz.getClassLoader()); return clazz; } protected void assertLoadClassFail(ClassLoader start, Class reference) throws Exception { try { start.loadClass(reference.getName()); fail("Should not be here!"); } catch (Exception e) { checkThrowable(ClassNotFoundException.class, e); } } protected void assertLoadClassIllegal(ClassLoader start, Class reference) throws Exception { try { start.loadClass(reference.getName()); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalStateException.class, e); } } protected void assertNoClassLoader(DeploymentUnit unit) throws Exception { try { unit.getClassLoader(); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalStateException.class, e); } } protected static ClassLoadingMetaData addClassLoadingMetaData(Deployment deployment, Version version, Class... packages) { return addClassLoadingMetaData(deployment, version, false, packages); } protected static ClassLoadingMetaData addClassLoadingMetaData(Deployment deployment, Version version, boolean useVersionOnPackages, Class... packages) { ClassLoadingMetaData classLoadingMetaData = createMetaData(deployment, version, useVersionOnPackages, packages); addMetaData(deployment, classLoadingMetaData); return classLoadingMetaData; } protected static ClassLoadingMetaData createMetaData(Deployment deployment, Version version, Class... packages) { return createMetaData(deployment, version, false, packages); } protected static ClassLoadingMetaData createMetaData(Deployment deployment, Version version, boolean useVersionOnPackages, Class... packages) { String name = deployment.getName(); ClassLoadingMetaData classLoadingMetaData = new ClassLoadingMetaData(); classLoadingMetaData.setName(name); classLoadingMetaData.setVersion(version); if (packages != null) { StringBuffer included = new StringBuffer(); boolean first = true; for (Class pkg : packages) { if (first) first = false; else included.append(","); included.append(pkg.getPackage().getName()); } classLoadingMetaData.setIncludedPackages(included.toString()); } CapabilitiesMetaData capabilities = classLoadingMetaData.getCapabilities(); Capability capability = classLoadingMetaDataFactory.createModule(name, version); capabilities.addCapability(capability); if (packages != null) { for (Class pkg : packages) { if (useVersionOnPackages) capability = classLoadingMetaDataFactory.createPackage(pkg.getPackage().getName(), version); else capability = classLoadingMetaDataFactory.createPackage(pkg.getPackage().getName()); capabilities.addCapability(capability); } } classLoadingMetaData.setCapabilities(capabilities); return classLoadingMetaData; } protected static void addRequireModule(ClassLoadingMetaData classLoadingMetaData, String moduleName, VersionRange versionRange) { RequirementsMetaData requirements = classLoadingMetaData.getRequirements(); Requirement requirement = classLoadingMetaDataFactory.createRequireModule(moduleName, versionRange); requirements.addRequirement(requirement); } protected static void addRequirePackage(ClassLoadingMetaData classLoadingMetaData, Class pck, VersionRange versionRange) { RequirementsMetaData requirements = classLoadingMetaData.getRequirements(); Requirement requirement = classLoadingMetaDataFactory.createRequirePackage(pck.getPackage().getName(), versionRange); requirements.addRequirement(requirement); } protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, ClassLoadingMetaData md) { MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects(); mutable.addAttachment(ClassLoadingMetaData.class, md); } protected DeployerClient getMainDeployer() { AbstractJDKChecker.getExcluded().add(VFSClassLoaderDependenciesTest.class); ClassLoading classLoading = new ClassLoading(); ClassLoaderSystem system = new DefaultClassLoaderSystem(); system.getDefaultDomain().setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY); deployer1 = new VFSClassLoaderDescribeDeployer(); deployer1.setClassLoading(classLoading); deployer2 = new TestLevelClassLoaderSystemDeployer(); deployer2.setClassLoading(classLoading); deployer2.setSystem(system); Deployer deployer3 = new VFSClassLoaderClassPathDeployer(); return createMainDeployer(deployer1, deployer2, deployer3); } } ././@LongLink0000000000000000000000000000024100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/ManagedObjectClassLoadingParserUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001254510761511660033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.util.Arrays; import java.util.List; import java.util.Set; import junit.framework.Test; import org.jboss.classloading.spi.metadata.CapabilitiesMetaData; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.metadata.ExportAll; import org.jboss.classloading.spi.metadata.RequirementsMetaData; import org.jboss.classloading.spi.version.Version; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.managed.api.ManagedDeployment; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.ManagedProperty; import org.jboss.metatype.api.types.MetaType; import org.jboss.metatype.api.types.MetaTypeFactory; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.MetaValueFactory; import org.jboss.test.deployers.BootstrapDeployersTest; /** * ManagedObjectClassLoadingParserUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ManagedObjectClassLoadingParserUnitTestCase extends BootstrapDeployersTest { private MetaTypeFactory mtFactory = MetaTypeFactory.getInstance(); private MetaValueFactory mvFactory = MetaValueFactory.getInstance(); public static Test suite() { return suite(ManagedObjectClassLoadingParserUnitTestCase.class); } public ManagedObjectClassLoadingParserUnitTestCase(String name) { super(name); } protected ManagedProperty assertManagedProperty(ManagedObject mo, String name, MetaType metaType, MetaValue metaValue) { ManagedProperty property = mo.getProperty(name); assertNotNull("No property " + name, property); assertEquals(metaType, property.getMetaType()); assertEquals(metaValue, property.getValue()); return property; } protected ManagedProperty assertManagedProperty(ManagedObject mo, String name, Class type, T value) { MetaType metaType = mtFactory.resolve(type); MetaValue metaValue = null; if (value != null) metaValue = mvFactory.create(value); return assertManagedProperty(mo, name, metaType, metaValue); } public void testManagedObject() throws Exception { VFSDeploymentUnit unit0 = addDeployment("/classloader", "deployment0"); try { ManagedDeployment managedDeployment = getDeployerClient().getManagedDeployment(unit0.getName()); assertNotNull(managedDeployment); ManagedObject mo = managedDeployment.getManagedObject(ClassLoadingMetaData.class.getName()); assertNotNull(mo); getLog().debug("ManagedObject: " + mo + " properties=" + mo.getProperties()); List expectedProperties = Arrays.asList("name", "version", "domain", "parentDomain", "exportAll", "included", "excluded", "excludedExport", "importAll", "parentFirst", "cache", "blackList", "capabilities", "requirements"); Set actualProperties = mo.getPropertyNames(); for (String expected : expectedProperties) { if (actualProperties.contains(expected) == false) fail("Expected property: " + expected); } for (String actual : actualProperties) { if (expectedProperties.contains(actual) == false) fail("Did not expect property: " + actual); } assertManagedProperty(mo, "name", String.class, "test"); assertManagedProperty(mo, "version", Version.class, Version.DEFAULT_VERSION); assertManagedProperty(mo, "domain", String.class, null); assertManagedProperty(mo, "parentDomain", String.class, null); assertManagedProperty(mo, "exportAll", ExportAll.class, null); assertManagedProperty(mo, "included", String.class, null); assertManagedProperty(mo, "excluded", String.class, null); assertManagedProperty(mo, "excludedExport", String.class, null); assertManagedProperty(mo, "importAll", Boolean.class, false); assertManagedProperty(mo, "parentFirst", Boolean.class, true); assertManagedProperty(mo, "capabilities", CapabilitiesMetaData.class, new CapabilitiesMetaData()); assertManagedProperty(mo, "requirements", RequirementsMetaData.class, new RequirementsMetaData()); } finally { undeploy(unit0); } } } ././@LongLink0000000000000000000000000000025200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/DeploymentDependsOnDeploymentClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001250410757303634033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import junit.framework.Test; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; /** * DeploymentDependsOnManualClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DeploymentDependsOnDeploymentClassLoaderUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(DeploymentDependsOnDeploymentClassLoaderUnitTestCase.class); } public DeploymentDependsOnDeploymentClassLoaderUnitTestCase(String name) { super(name); } public void testDependencyCorrectWay() throws Exception { VFSDeploymentUnit unit5 = assertDeploy("/classloader", "deployment5"); try { ClassLoader cl5 = getClassLoader(unit5); assertGetResource("a/b/c/test-resource-deployment5", cl5); VFSDeploymentUnit unit6 = assertDeploy("/classloader", "deployment6"); try { ClassLoader cl6 = getClassLoader(unit6); assertGetResource("a/b/c/test-resource-deployment5", cl6); } finally { undeploy(unit6); } } finally { undeploy(unit5); } } public void testDependencyWrongWay() throws Exception { VFSDeploymentUnit unit6 = addDeployment("/classloader", "deployment6"); try { assertNoClassLoader(unit6); VFSDeploymentUnit unit5 = assertDeploy("/classloader", "deployment5"); try { ClassLoader cl5 = getClassLoader(unit5); assertGetResource("a/b/c/test-resource-deployment5", cl5); ClassLoader cl6 = getClassLoader(unit6); assertGetResource("a/b/c/test-resource-deployment5", cl6); } finally { undeploy(unit5); } } finally { undeploy(unit6); } } public void testDependencyRedeploy5() throws Exception { VFSDeploymentUnit unit5 = assertDeploy("/classloader", "deployment5"); try { ClassLoader cl5 = getClassLoader(unit5); assertGetResource("a/b/c/test-resource-deployment5", cl5); VFSDeploymentUnit unit6 = assertDeploy("/classloader", "deployment6"); try { ClassLoader cl6 = getClassLoader(unit6); assertGetResource("a/b/c/test-resource-deployment5", cl6); undeploy(unit5); try { assertNoClassLoader(unit5); assertNoClassLoader(unit6); } finally { unit5 = assertDeploy("/classloader", "deployment5"); } cl5 = getClassLoader(unit5); assertGetResource("a/b/c/test-resource-deployment5", cl5); cl6 = getClassLoader(unit6); assertGetResource("a/b/c/test-resource-deployment5", cl6); } finally { undeploy(unit6); } } finally { undeploy(unit5); } } public void testDependencyRedeploy6() throws Exception { VFSDeploymentUnit unit5 = assertDeploy("/classloader", "deployment5"); try { ClassLoader cl5 = getClassLoader(unit5); assertGetResource("a/b/c/test-resource-deployment5", cl5); VFSDeploymentUnit unit6 = assertDeploy("/classloader", "deployment6"); try { ClassLoader cl6 = getClassLoader(unit6); assertGetResource("a/b/c/test-resource-deployment5", cl6); undeploy(unit6); try { cl5 = getClassLoader(unit5); assertGetResource("a/b/c/test-resource-deployment5", cl5); assertNoClassLoader(unit6); } finally { unit6 = assertDeploy("/classloader", "deployment6"); } cl5 = getClassLoader(unit5); assertGetResource("a/b/c/test-resource-deployment5", cl5); cl6 = getClassLoader(unit6); assertGetResource("a/b/c/test-resource-deployment5", cl6); } finally { undeploy(unit6); } } finally { undeploy(unit5); } } } ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/RequirementsIntegrationUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001540611072370632033454 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.util.Collections; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.classloader.plugins.ClassLoaderUtils; import org.jboss.classloader.plugins.jdk.AbstractJDKChecker; import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ParentPolicy; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.plugins.classloader.ModuleRequirementIntegrationDeployer; import org.jboss.deployers.vfs.plugins.classloader.PackageRequirementIntegrationDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer; import org.jboss.test.deployers.vfs.classloader.support.TestLevelClassLoaderSystemDeployer; import org.jboss.test.deployers.vfs.classloader.support.a.A; /** * RequirementsIntegrationUnitTestCase. * * @author Ales Justin */ public class RequirementsIntegrationUnitTestCase extends VFSClassLoaderDependenciesTest { public static Test suite() { return new TestSuite(RequirementsIntegrationUnitTestCase.class); } public RequirementsIntegrationUnitTestCase(String name) { super(name); } protected DeployerClient getMainDeployer() { AbstractJDKChecker.getExcluded().add(VFSClassLoaderDependenciesTest.class); ClassLoading classLoading = new ClassLoading(); ClassLoaderSystem system = new DefaultClassLoaderSystem(); system.getDefaultDomain().setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY); deployer1 = new VFSClassLoaderDescribeDeployer(); deployer1.setClassLoading(classLoading); deployer2 = new TestLevelClassLoaderSystemDeployer(); deployer2.setClassLoading(classLoading); deployer2.setSystem(system); Deployer deployer3 = new VFSClassLoaderClassPathDeployer(); ModuleRequirementIntegrationDeployer moduleRequirementDeployer = new ModuleRequirementIntegrationDeployer(Object.class); moduleRequirementDeployer.setModule("seam"); moduleRequirementDeployer.setIntegrationModuleName("jboss-seam-int"); PackageRequirementIntegrationDeployer packageRequirementDeployer = new PackageRequirementIntegrationDeployer(Object.class); String pck = ClassLoaderUtils.getClassPackageName(A.class.getName()); packageRequirementDeployer.setPackages(Collections.singleton(pck)); packageRequirementDeployer.setIntegrationModuleName("jboss-seam-int"); return createMainDeployer(deployer1, deployer2, deployer3, moduleRequirementDeployer, packageRequirementDeployer); } public void testModules() throws Exception { DeployerClient mainDeployer = getMainDeployer(); Deployment app = createDeployment("app"); ClassLoadingMetaData appCLMD = addClassLoadingMetaData(app, null); addRequireModule(appCLMD, "seam", null); DeploymentUnit appUnit = addDeployment(mainDeployer, app); try { assertDeploymentStage(appUnit, DeploymentStages.DESCRIBE); Deployment seam = createDeployment("seam"); try { addClassLoadingMetaData(seam, null); assertDeploy(mainDeployer, seam); // still in describe, since we depend on integration assertDeploymentStage(appUnit, DeploymentStages.DESCRIBE); Deployment integration = createDeployment("jboss-seam-int"); try { addClassLoadingMetaData(integration, null); assertDeploy(mainDeployer, integration); // should be installed now assertDeploymentStage(appUnit, DeploymentStages.INSTALLED); } finally { assertUndeploy(mainDeployer, integration); } } finally { assertUndeploy(mainDeployer, seam); } } finally { assertUndeploy(mainDeployer, app); } } public void testPackages() throws Exception { DeployerClient mainDeployer = getMainDeployer(); Deployment app = createDeployment("app"); ClassLoadingMetaData appCLMD = addClassLoadingMetaData(app, null); addRequirePackage(appCLMD, A.class, null); DeploymentUnit appUnit = addDeployment(mainDeployer, app); try { assertDeploymentStage(appUnit, DeploymentStages.DESCRIBE); Deployment pckgA = createDeployment("pckgA"); try { addClassLoadingMetaData(pckgA, null, A.class); assertDeploy(mainDeployer, pckgA); // still in describe, since we depend on integration assertDeploymentStage(appUnit, DeploymentStages.DESCRIBE); Deployment integration = createDeployment("jboss-seam-int"); try { addClassLoadingMetaData(integration, null); assertDeploy(mainDeployer, integration); // should be installed now assertDeploymentStage(appUnit, DeploymentStages.INSTALLED); } finally { assertUndeploy(mainDeployer, integration); } } finally { assertUndeploy(mainDeployer, pckgA); } } finally { assertUndeploy(mainDeployer, app); } } }././@LongLink0000000000000000000000000000023500000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/BootstrapDeployersSmokeTestUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001220611037647060033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.util.ArrayList; import java.util.List; import junit.framework.Test; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.metadata.ExportAll; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; import org.jboss.test.deployers.vfs.classloader.support.a.A; import org.jboss.test.deployers.vfs.classloader.support.b.B; import org.jboss.virtual.AssembledDirectory; /** * BootstrapDeployersSmokeTestUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class BootstrapDeployersSmokeTestUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(BootstrapDeployersSmokeTestUnitTestCase.class); } public BootstrapDeployersSmokeTestUnitTestCase(String name) { super(name); } public void testDeployerClient() throws Exception { assertNotNull(getDeployerClient()); } public void testMainDeployersStructure() throws Exception { assertNotNull(getMainDeployerStructure()); } public void testDeployBeans() throws Exception { VFSDeploymentUnit unit = assertDeploy("/bootstrap", "test"); try { List components = unit.getComponents(); assertNotNull(components); assertEquals(1, components.size()); DeploymentUnit component = components.get(0); assertEquals("Test", component.getName()); assertBean("Test", ArrayList.class); assertNoResource("META-INF/test-beans.xml", getClass().getClassLoader()); ClassLoader unitCl = getClassLoader(unit); assertGetResource("META-INF/test-beans.xml", unitCl); ClassLoader beanCl = getClassLoader("Test"); assertGetResource("META-INF/test-beans.xml", beanCl); ClassLoadingMetaData metaData = unit.getAttachment(ClassLoadingMetaData.class); assertEquals(unit.getSimpleName(), metaData.getName()); assertEquals(ExportAll.NON_EMPTY, metaData.getExportAll()); assertTrue(metaData.isImportAll()); } finally { undeploy(unit); } } public void testClassLoadingMetaData() throws Exception { VFSDeploymentUnit unit = assertDeploy("/bootstrap", "test-classloader"); try { ClassLoadingMetaData metaData = unit.getAttachment(ClassLoadingMetaData.class); assertEquals("test-classloading", metaData.getName()); assertNull(metaData.getExportAll()); assertFalse(metaData.isImportAll()); } finally { undeploy(unit); } } public void testAssembledDirectory() throws Exception { AssembledDirectory dirA = createAssembledDirectory("a"); addPackage(dirA, A.class); addPath(dirA, "/bootstrap/test-assembled", "META-INF"); VFSDeploymentUnit unitA = assertDeploy(dirA); try { ClassLoader clA = getClassLoader(unitA); assertLoadClass(A.class, clA); assertLoadClassFail(B.class, clA); assertNoResource("META-INF/test.xml", getClass().getClassLoader()); assertGetResource("META-INF/test.xml", clA); } finally { undeploy(unitA); } } public void testAssembledSubDirectory() throws Exception { AssembledDirectory dirA = createAssembledDirectory("a"); addPackage(dirA, A.class); AssembledDirectory dirB = dirA.mkdir("b"); addPackage(dirB, B.class); addPath(dirB, "/bootstrap/test-assembled", "META-INF"); VFSDeploymentUnit unitA = assertDeploy(dirA); try { ClassLoader clA = getClassLoader(unitA); assertLoadClass(A.class, clA); assertLoadClass(B.class, clA); assertNoResource("META-INF/test.xml", getClass().getClassLoader()); assertGetResource("META-INF/test.xml", clA); } finally { undeploy(unitA); } } } ././@LongLink0000000000000000000000000000024100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/test/SubDeploymentClassLoaderVisitorUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000001024111044122744033442 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.test; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import org.jboss.classloading.spi.dependency.Module; import org.jboss.classloading.spi.visitor.ResourceContext; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.visitor.ResourceVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; /** * DeploymentDependsOnManualClassLoaderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class SubDeploymentClassLoaderVisitorUnitTestCase extends BootstrapDeployersTest { public static Test suite() { return suite(SubDeploymentClassLoaderVisitorUnitTestCase.class); } public SubDeploymentClassLoaderVisitorUnitTestCase(String name) { super(name); } public void testNoSubDeploymentClassLoaderVisit() throws Exception { VFSDeploymentUnit top = assertDeploy("/classloader", "top-sub-no-classloader"); try { TestResourceVisitor test = visit(top); test.assertContains("test-resource-top-no-classloader"); test.assertContains("test-resource-sub-no-classloader"); } finally { undeploy(top); } } public void testSubDeploymentClassLoaderVisit() throws Exception { VFSDeploymentUnit top = assertDeploy("/classloader", "top-sub-classloader"); try { TestResourceVisitor test = visit(top); test.assertContains("test-resource-top-classloader"); test.assertNotContains("sub/test-resource-sub-classloader"); DeploymentUnit sub = assertChild(top, "sub/"); test = visit(sub); test.assertNotContains("test-resource-top-classloader"); test.assertContains("test-resource-sub-classloader"); } finally { undeploy(top); } } protected TestResourceVisitor visit(DeploymentUnit unit) throws Exception { Module module = unit.getAttachment(Module.class); if (module == null) fail("Expected " + unit + " to have a module"); TestResourceVisitor visitor = new TestResourceVisitor(); module.visit(visitor); getLog().debug(unit.getName() + " found: " + visitor.resources); return visitor; } public class TestResourceVisitor implements ResourceVisitor { private Set resources = new HashSet(); public void assertContains(String resourceName) { if (resources.contains(resourceName) == false) fail(resourceName + " not found in " + resources); } public void assertNotContains(String resourceName) { if (resources.contains(resourceName)) fail(resourceName + " unexpectedly found in " + resources); } public ResourceFilter getFilter() { return null; } public void visit(ResourceContext resource) { resources.add(resource.getResourceName()); } } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/ClassLoaderTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000734211072370632033454 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader; import org.jboss.test.deployers.vfs.classloader.test.BootstrapDeployersSmokeTestUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.DeploymentDependsOnDeploymentClassLoaderUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.DeploymentDependsOnManualClassLoaderUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.InMemoryClasesUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.ManagedObjectClassLoadingParserUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.ManifestClassLoaderUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.ManualDependsOnDeploymentClassLoaderUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.NotVFSClassLoaderUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.SubDeploymentClassLoaderUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.SubDeploymentClassLoaderVisitorUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.VFSClassLoaderDependenciesUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.VFSUndeployOrderClassLoaderUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.IntegrationDeployerUnitTestCase; import org.jboss.test.deployers.vfs.classloader.test.RequirementsIntegrationUnitTestCase; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; /** * BeanDeployerTestSuite. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ClassLoaderTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS ClassLoader Tests"); suite.addTest(BootstrapDeployersSmokeTestUnitTestCase.suite()); suite.addTest(VFSClassLoaderDependenciesUnitTestCase.suite()); suite.addTest(VFSUndeployOrderClassLoaderUnitTestCase.suite()); suite.addTest(InMemoryClasesUnitTestCase.suite()); suite.addTest(DeploymentDependsOnManualClassLoaderUnitTestCase.suite()); suite.addTest(ManualDependsOnDeploymentClassLoaderUnitTestCase.suite()); suite.addTest(DeploymentDependsOnDeploymentClassLoaderUnitTestCase.suite()); suite.addTest(ManagedObjectClassLoadingParserUnitTestCase.suite()); suite.addTest(SubDeploymentClassLoaderUnitTestCase.suite()); suite.addTest(SubDeploymentClassLoaderVisitorUnitTestCase.suite()); suite.addTest(NotVFSClassLoaderUnitTestCase.suite()); suite.addTest(ManifestClassLoaderUnitTestCase.suite()); suite.addTest(IntegrationDeployerUnitTestCase.suite()); suite.addTest(RequirementsIntegrationUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000755000175000017500000000000011620060444033440 5ustar twernertwerner././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/usea/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000755000175000017500000000000011620060444033440 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/usea/UseA.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000241211037647060033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.support.usea; import org.jboss.test.deployers.vfs.classloader.support.a.A; /** * UseA. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class UseA { public static Class used = A.class; } ././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestLevelClassLoaderSystemDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000365010761233255033455 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.support; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.plugins.classloading.AbstractLevelClassLoaderSystemDeployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestLevelClassLoaderSystemDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestLevelClassLoaderSystemDeployer extends AbstractLevelClassLoaderSystemDeployer { public List deployed = new ArrayList(); public List undeployed = new ArrayList(); public void deploy(DeploymentUnit unit) throws DeploymentException { deployed.add(unit.getName()); super.deploy(unit); } public void undeploy(DeploymentUnit unit) { undeployed.add(unit.getName()); super.undeploy(unit); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/a/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000755000175000017500000000000011620060444033440 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/a/A.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000223110756575630033461 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.support.a; /** * A. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class A { } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/b/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000755000175000017500000000000011620060444033440 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/b/B.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000223110756575630033461 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.support.b; /** * B. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class B { } ././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestPathUrlIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000334011042465226033447 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.support; import java.net.URL; import org.jboss.deployers.vfs.plugins.classloader.PathUrlIntegrationDeployer; import org.jboss.kernel.spi.deployment.KernelDeployment; import org.jboss.virtual.VFS; /** * @author Ales Justin */ public class TestPathUrlIntegrationDeployer extends PathUrlIntegrationDeployer { public TestPathUrlIntegrationDeployer() throws Exception { super(KernelDeployment.class); setFiles(new String[]{"data/path-touch-beans.xml"}); VFS.init(); URL dynamicClassRoot = new URL("vfsmemory", "integration-test", ""); setIntegrationURL(dynamicClassRoot); } }././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TryTouch.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000275711042465226033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.support; import java.lang.reflect.Method; /** * @author Ales Justin */ public class TryTouch { public void start() throws Throwable { ClassLoader cl = Thread.currentThread().getContextClassLoader(); Class clazz = cl.loadClass("Touch"); Object touch = clazz.newInstance(); Method method = clazz.getDeclaredMethod("touch"); method.invoke(touch); } } ././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestMetaDataUrlIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/class0000644000175000017500000000335711042465226033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.classloader.support; import java.net.URL; import org.jboss.deployers.vfs.plugins.classloader.MetaDataUrlIntegrationDeployer; import org.jboss.kernel.spi.deployment.KernelDeployment; import org.jboss.virtual.VFS; /** * @author Ales Justin */ public class TestMetaDataUrlIntegrationDeployer extends MetaDataUrlIntegrationDeployer { public TestMetaDataUrlIntegrationDeployer() throws Exception { super(KernelDeployment.class); setFiles(new String[]{"metadata-touch-beans.xml"}); VFS.init(); URL dynamicClassRoot = new URL("vfsmemory", "integration-test", ""); setIntegrationURL(dynamicClassRoot); } }././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deploymentfactory/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060443033435 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deploymentfactory/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060443033435 5ustar twernertwerner././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deploymentfactory/test/VFSDeploymentFactoryUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000621110640504614033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deploymentfactory.test; import java.io.IOException; import java.net.URL; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.vfs.plugins.client.AbstractVFSDeployment; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory; import org.jboss.test.deployers.deploymentfactory.AbstractDeploymentFactoryTest; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; /** * VFSDeploymentFactoryUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSDeploymentFactoryUnitTestCase extends AbstractDeploymentFactoryTest { public static Test suite() { return new TestSuite(VFSDeploymentFactoryUnitTestCase.class); } public VFSDeploymentFactoryUnitTestCase(String name) { super(name); } public void testConstruct() { VFSDeploymentFactory factory = createDeploymentFactory(); VirtualFile root = getVirtualFile("/dummy"); VFSDeployment deployment = factory.createVFSDeployment(root); assertEquals(root, deployment.getRoot()); } public void testConstructErrors() { VFSDeploymentFactory factory = createDeploymentFactory(); try { factory.createVFSDeployment(null); fail("Should not be here!"); } catch (Exception e) { checkThrowable(IllegalArgumentException.class, e); } } @Override protected VFSDeploymentFactory createDeploymentFactory() { return VFSDeploymentFactory.getInstance(); } @Override protected Deployment createDeployment() { return new AbstractVFSDeployment(getVirtualFile("/dummy")); } protected VirtualFile getVirtualFile(String resourceName) { URL resource = null; try { resource = getResource("/dummy"); assertNotNull(resource); return VFS.getRoot(resource); } catch (IOException e) { throw new RuntimeException("Failed to get resource: " + resource, e); } } } ././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deploymentfactory/VFSDeploymentFactoryTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000327210640504614033447 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deploymentfactory; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.deploymentfactory.test.VFSDeploymentFactoryUnitTestCase; /** * VFSDeploymentFactoryTestSuite. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSDeploymentFactoryTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Deployment Factory Tests"); suite.addTest(VFSDeploymentFactoryUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/metadata/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/metad0000755000175000017500000000000011620060441033422 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/metadata/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/metad0000755000175000017500000000000011620060441033422 5ustar twernertwerner././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/metadata/test/MetaDataUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/metad0000644000175000017500000002025310731616564033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.metadata.test; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Collections; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.BaseDeployersVFSTest; import org.jboss.virtual.VirtualFile; /** * MetaDataUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class MetaDataUnitTestCase extends BaseDeployersVFSTest { public static Test suite() { return new TestSuite(MetaDataUnitTestCase.class); } public MetaDataUnitTestCase(String name) { super(name); } public void testExactMatchTopLevel() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/exact/jboss-service.xml"); String expected = getVfsURL("/metadata/toplevel/exact/jboss-service.xml"); assertMetaDataMatch(context, expected, "jboss-service.xml"); } public void testNotExactMatchTopLevel() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/exact/jboss-service.xml"); assertNoMetaDataMatch(context, "not-correct.xml"); } public void testPartialMatchTopLevel() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/partial/mydb-ds.xml"); Set expected = new HashSet(); expected.add(getVfsURL("/metadata/toplevel/partial/mydb-ds.xml")); assertMetaDataMatch(context, expected, null, "-ds.xml"); } public void testNotPartialMatchTopLevel() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/partial/mydb-ds.xml"); assertNoMetaDataMatch(context, null, "-not.xml"); } public void testExactMatchMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); String expected = getVfsURL("/metadata/toplevel/metadata.jar/META-INF/jboss-service.xml"); assertMetaDataMatch(context, expected, "jboss-service.xml"); } public void testNotExactMatchMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, "not-correct.xml"); } public void testExactMatchNoMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, "jboss-service.xml"); } public void testNotExactMatchNoMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, "not-correct.xml"); } public void testPartialMatchMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); Set expected = new HashSet(); expected.add(getVfsURL("/metadata/toplevel/metadata.jar/META-INF/1-ds.xml")); expected.add(getVfsURL("/metadata/toplevel/metadata.jar/META-INF/2-ds.xml")); assertMetaDataMatch(context, expected, null, "-ds.xml"); } public void testNotPartialMatchMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, null, "-not.xml"); } public void testPartialMatchNoMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, null, "-ds.xml"); } public void testNotPartialMatchNoMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, null, "-not.xml"); } public void testExactAndPartialMatchMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); Set expected = new HashSet(); expected.add(getVfsURL("/metadata/toplevel/metadata.jar/META-INF/jboss-service.xml")); expected.add(getVfsURL("/metadata/toplevel/metadata.jar/META-INF/1-ds.xml")); expected.add(getVfsURL("/metadata/toplevel/metadata.jar/META-INF/2-ds.xml")); assertMetaDataMatch(context, expected, "jboss-service.xml", "-ds.xml"); } public void testNotExactAndPartialMatchMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, "not-correct.xml", "-not.xml"); } public void testExactAndPartialMatchNoMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, "jboss-service.xml", "-ds.xml"); } public void testNotExactAndPartialMatchNoMetaInf() throws Exception { VFSDeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar"); context.setMetaDataPath(Collections.singletonList("META-INF")); assertNoMetaDataMatch(context, "jboss-service.xml", "-not.xml"); } protected void assertMetaDataMatch(VFSDeploymentContext context, String expected, String name) throws Exception { VirtualFile file = context.getMetaDataFile(name); assertNotNull(file); assertEquals(expected, file.toURL().toString()); } protected void assertNoMetaDataMatch(VFSDeploymentContext context, String name) throws Exception { VirtualFile file = context.getMetaDataFile(name); assertNull(file); } protected void assertMetaDataMatch(VFSDeploymentContext context, Set expected, String name, String suffix) throws Exception { List files = context.getMetaDataFiles(name, suffix); Set actual = new HashSet(files.size()); for (VirtualFile file : files) actual.add(file.toURL().toString()); assertEquals(expected, actual); } protected void assertNoMetaDataMatch(VFSDeploymentContext context, String name, String suffix) throws Exception { List files = context.getMetaDataFiles(name, suffix); assertEmpty(files); } } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/metadata/VFSMetaDataTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/metad0000644000175000017500000000316610640504614033440 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.metadata; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.metadata.test.MetaDataUnitTestCase; /** * MetaDataTestSuite. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSMetaDataTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS MetaData Tests"); suite.addTest(MetaDataUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/test/WebBeanDiscoveryTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000001122511137607542033433 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.test; import java.util.HashSet; import java.util.Set; import java.util.Iterator; import java.net.URL; import junit.framework.Test; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.vfs.webbeans.support.WebBeanDiscovery; import org.jboss.test.deployers.vfs.webbeans.support.crm.CrmWebBean; import org.jboss.test.deployers.vfs.webbeans.support.ejb.BusinessInterface; import org.jboss.test.deployers.vfs.webbeans.support.ejb.MySLSBean; import org.jboss.test.deployers.vfs.webbeans.support.ext.ExternalWebBean; import org.jboss.test.deployers.vfs.webbeans.support.jar.PlainJavaBean; import org.jboss.test.deployers.vfs.webbeans.support.ui.UIWebBean; import org.jboss.test.deployers.vfs.webbeans.support.web.ServletWebBean; import org.jboss.virtual.VirtualFile; /** * WebBeanDiscoveryTestCase. * * @author Ales Justin */ public class WebBeanDiscoveryTestCase extends AbstractWebBeansTest { public WebBeanDiscoveryTestCase(String name) { super(name); } public static Test suite() { return suite(WebBeanDiscoveryTestCase.class); } public void testSimpleUsage() throws Exception { VirtualFile ear = createBasicEar(); VFSDeploymentUnit topUnit = assertDeploy(ear); try { WebBeanDiscovery wbDiscovery = topUnit.getAttachment(WebBeanDiscovery.class); assertNotNull(wbDiscovery); Set expected = new HashSet(); addExpectedResouorce(expected, "ejbs.jar"); addExpectedResouorce(expected, "ext.jar"); addExpectedResouorce(expected, "simple.jar"); addExpectedResouorce(expected, "ui.jar"); addExpectedResouorce(expected, "crm.jar"); addExpectedResource(expected, "simple.war", "/WEB-INF/web-beans.xml"); for (URL url : wbDiscovery.discoverWebBeansXml()) { boolean found = false; Iterator iter = expected.iterator(); while (iter.hasNext()) { String expectedURL = iter.next(); if (url.toExternalForm().contains(expectedURL)) { iter.remove(); found = true; break; } } assertTrue("Unexpected wb url: " + url, found); } assertEmpty("Should be emtpy, missing " + expected, expected); addExpectedClass(expected, BusinessInterface.class); addExpectedClass(expected, MySLSBean.class); addExpectedClass(expected, ExternalWebBean.class); addExpectedClass(expected, PlainJavaBean.class); addExpectedClass(expected, UIWebBean.class); addExpectedClass(expected, ServletWebBean.class); addExpectedClass(expected, CrmWebBean.class); for (Class clazz : wbDiscovery.discoverWebBeanClasses()) assertTrue(expected.remove(clazz.getName())); assertEmpty("Should be emtpy, missing " + expected, expected); } finally { undeploy(topUnit); } } private static void addExpectedResouorce(Set expected, String unit) { addExpectedResource(expected, unit, "/META-INF/web-beans.xml"); } private static void addExpectedResource(Set expected, String unit, String suffix) { expected.add(unit + suffix); } private static void addExpectedClass(Set expected, Class clazz) { expected.add(clazz.getName()); } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/test/AbstractWebBeansTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000001112411113261537033423 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.test; import org.jboss.deployers.vfs.deployer.kernel.BeanDeployer; import org.jboss.test.deployers.BootstrapDeployersTest; import org.jboss.test.deployers.vfs.webbeans.support.ejb.MySLSBean; import org.jboss.test.deployers.vfs.webbeans.support.ext.ExternalWebBean; import org.jboss.test.deployers.vfs.webbeans.support.jar.PlainJavaBean; import org.jboss.test.deployers.vfs.webbeans.support.jsf.NotWBJsfBean; import org.jboss.test.deployers.vfs.webbeans.support.ui.UIWebBean; import org.jboss.test.deployers.vfs.webbeans.support.util.SomeUtil; import org.jboss.test.deployers.vfs.webbeans.support.web.ServletWebBean; import org.jboss.test.deployers.vfs.webbeans.support.crm.CrmWebBean; import org.jboss.virtual.AssembledDirectory; /** * AbstractWebBeansTest. * * @author Ales Justin */ public abstract class AbstractWebBeansTest extends BootstrapDeployersTest { protected AbstractWebBeansTest(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); // fix bean deployer to take more restictive suffix // else it's gonna pick up our web-beans.xml BeanDeployer deployer = assertBean("BeanDeployer", BeanDeployer.class); deployer.setSuffix("-jboss-beans.xml"); } @Override protected void tearDown() throws Exception { // put the old suffix back BeanDeployer deployer = assertBean("BeanDeployer", BeanDeployer.class); deployer.setSuffix("-beans.xml"); super.tearDown(); } protected AssembledDirectory createBasicEar() throws Exception { AssembledDirectory ear = createTopLevelWithUtil(); AssembledDirectory jar = ear.mkdir("simple.jar"); addPackage(jar, PlainJavaBean.class); addPath(jar, "/webbeans/simple/jar", "META-INF"); AssembledDirectory ejbs = ear.mkdir("ejbs.jar"); addPackage(ejbs, MySLSBean.class); addPath(ejbs, "/webbeans/simple/ejb", "META-INF"); AssembledDirectory war = ear.mkdir("simple.war"); AssembledDirectory webinf = war.mkdir("WEB-INF"); AssembledDirectory classes = webinf.mkdir("classes"); addPackage(classes, ServletWebBean.class); addPath(war, "/webbeans/simple/web", "WEB-INF"); AssembledDirectory lib = webinf.mkdir("lib"); AssembledDirectory uijar = lib.mkdir("ui.jar"); addPackage(uijar, UIWebBean.class); addPath(uijar, "/webbeans/simple/ui", "META-INF"); // war w/o web-beans.xml war = ear.mkdir("crm.war"); webinf = war.mkdir("WEB-INF"); classes = webinf.mkdir("classes"); addPackage(classes, NotWBJsfBean.class); lib = webinf.mkdir("lib"); uijar = lib.mkdir("crm.jar"); addPackage(uijar, CrmWebBean.class); addPath(uijar, "/webbeans/simple/crm", "META-INF"); enableTrace("org.jboss.deployers"); return ear; } protected AssembledDirectory createTopLevelWithUtil() throws Exception { AssembledDirectory topLevel = createAssembledDirectory("top-level.ear", "top-level.ear"); addPath(topLevel, "/webbeans/simple", "META-INF"); AssembledDirectory earLib = topLevel.mkdir("lib"); AssembledDirectory util = earLib.mkdir("util.jar"); addPackage(util, SomeUtil.class); AssembledDirectory ext = earLib.mkdir("ext.jar"); addPackage(ext, ExternalWebBean.class); addPath(ext, "/webbeans/simple/ext", "META-INF"); return topLevel; } }././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/WebBeansTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000327411113261537033432 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.webbeans.test.WebBeanDiscoveryTestCase; /** * WebBeans features test suite. * * @author Ales Justin */ public class WebBeansTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS WebBeans Tests"); suite.addTest(WebBeanDiscoveryTestCase.suite()); return suite; } }././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/ext/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/ext/ExternalWebBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000231411113261537033424 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.ext; /** * @author Ales Justin */ public class ExternalWebBean { } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/jar/PlainJavaBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000231211113261537033422 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.jar; /** * @author Ales Justin */ public class PlainJavaBean { } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/util/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/util/SomeUtil.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000230611113261537033425 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.util; /** * @author Ales Justin */ public class SomeUtil { } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/ui/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/ui/UIWebBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000230511113261537033424 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.ui; /** * @author Ales Justin */ public class UIWebBean { } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/jsf/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/jsf/NotWBJsfBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000231111113261537033421 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.jsf; /** * @author Ales Justin */ public class NotWBJsfBean { } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/crm/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/crm/CrmWebBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000230711113261537033426 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.crm; /** * @author Ales Justin */ public class CrmWebBean { } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/ejb/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/ejb/BusinessInterface.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000235511113261537033431 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.ejb; /** * @author Ales Justin */ public interface BusinessInterface { int add(int x, int y); } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/ejb/MySLSBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000244511113261537033431 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.ejb; /** * @author Ales Justin */ public class MySLSBean implements BusinessInterface { public int add(int x, int y) { return x + y; } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/JBossWebBeansMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000330111113261537033421 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support; import java.io.Serializable; import java.net.URL; import org.jboss.virtual.VirtualFile; /** * JBoss WebBeans custom meta data * * @author Ales Justin */ public class JBossWebBeansMetaData implements Serializable { private static final long serialVersionUID = 1l; private VirtualFile file; public JBossWebBeansMetaData(VirtualFile file) { if (file == null) throw new IllegalArgumentException("Null file"); this.file = file; } public URL getURL() throws Exception { return file.toURL(); } }././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/WebBeanDiscoveryImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000341411113261537033426 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support; import java.net.URL; import java.util.Set; import java.util.HashSet; /** * WBD impl. * * @author Ales Justin */ public class WebBeanDiscoveryImpl implements WebBeanDiscovery { private Set> classes = new HashSet>(); private Set urls = new HashSet(); public void addWebBeanClass(Class clazz) { classes.add(clazz); } public void addWebBeansXmlURL(URL url) { urls.add(url); } public Iterable> discoverWebBeanClasses() { return classes; } public Iterable discoverWebBeansXml() { return urls; } }././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/WebBeanDiscovery.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000322311113261537033424 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support; import java.net.URL; /** * A container should implement this interface to allow the Web Beans RI to * discover the Web Beans to deploy * * @author Pete Muir * @author Ales Justin */ public interface WebBeanDiscovery { /** * @return A list of all classes in classpath archives with web-beans.xml files */ public Iterable> discoverWebBeanClasses(); /** * @return A list of all web-beans.xml files in the app classpath */ public Iterable discoverWebBeansXml(); }././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/WebBeanDiscoveryDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000001316111113261537033426 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jboss.classloading.spi.dependency.Module; import org.jboss.classloading.spi.visitor.ClassFilter; import org.jboss.classloading.spi.visitor.ResourceContext; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.visitor.ResourceVisitor; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.vfs.spi.deployer.AbstractOptionalVFSRealDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * WBD deployer. * * @author Ales Justin */ public class WebBeanDiscoveryDeployer extends AbstractOptionalVFSRealDeployer { public WebBeanDiscoveryDeployer() { super(JBossWebBeansMetaData.class); addOutput(WebBeanDiscovery.class); } public void deploy(VFSDeploymentUnit unit, JBossWebBeansMetaData deployment) throws DeploymentException { VFSDeploymentUnit topUnit = unit.getTopLevel(); WebBeanDiscoveryImpl wbdi = topUnit.getAttachment(WebBeanDiscovery.class.getName(), WebBeanDiscoveryImpl.class); if (wbdi == null) { wbdi = new WebBeanDiscoveryImpl(); topUnit.addAttachment(WebBeanDiscovery.class.getName(), wbdi); } List urls = new ArrayList(); try { if (deployment != null) { // do some custom stuff } Iterable classpaths = getClassPaths(unit); for (VirtualFile cp : classpaths) { VirtualFile wbXml = cp.getChild("META-INF/web-beans.xml"); if (wbXml != null) { // add url wbdi.addWebBeansXmlURL(wbXml.toURL()); // add classes urls.add(cp.toURL()); } } // handle war slightly different VirtualFile warWbXml = unit.getFile("WEB-INF/web-beans.xml"); if (warWbXml != null) { wbdi.addWebBeansXmlURL(warWbXml.toURL()); VirtualFile classes = unit.getFile("WEB-INF/classes"); if (classes != null) urls.add(classes.toURL()); } } catch (Exception e) { throw DeploymentException.rethrowAsDeploymentException("Cannot deploy WBD.", e); } if (urls.isEmpty() == false) { Module module = unit.getAttachment(Module.class); if (module == null) { VFSDeploymentUnit parent = unit.getParent(); while (parent != null && module == null) { module = parent.getAttachment(Module.class); parent = parent.getParent(); } if (module == null) throw new DeploymentException("No module in deployment unit's hierarchy: " + unit.getName()); } WBDiscoveryVisitor visitor = new WBDiscoveryVisitor(wbdi); module.visit(visitor, ClassFilter.INSTANCE, null, urls.toArray(new URL[urls.size()])); } } /** * Get the matching class paths that belong to this deployment unit. * * @param unit the deployment unit * @return matching class paths * @throws Exception for any error */ protected Iterable getClassPaths(VFSDeploymentUnit unit) throws Exception { List classpath = unit.getClassPath(); if (classpath != null && classpath.isEmpty() == false) { List matching = new ArrayList(); VirtualFile root = unit.getRoot(); for (VirtualFile cp : classpath) { VirtualFile check = cp; while (check != null && check.equals(root) == false) check = check.getParent(); if (check != null) matching.add(cp); } return matching; } return Collections.emptySet(); } private class WBDiscoveryVisitor implements ResourceVisitor { private WebBeanDiscoveryImpl wbdi; private WBDiscoveryVisitor(WebBeanDiscoveryImpl wbdi) { this.wbdi = wbdi; } public ResourceFilter getFilter() { return ClassFilter.INSTANCE; } public void visit(ResourceContext resource) { wbdi.addWebBeanClass(resource.loadClass()); } } }././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/web/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000755000175000017500000000000011620060443033416 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/web/ServletWebBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000231311113261537033423 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support.web; /** * @author Ales Justin */ public class ServletWebBean { } ././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbeans/support/JBossWebBeansMetaDataDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/webbe0000644000175000017500000000344611113261537033433 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.webbeans.support; import org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * JBoss WBD deployer. * * @author Ales Justin */ public class JBossWebBeansMetaDataDeployer extends AbstractVFSParsingDeployer { public JBossWebBeansMetaDataDeployer() { super(JBossWebBeansMetaData.class); setName("jboss-web-beans.xml"); } protected JBossWebBeansMetaData parse(VFSDeploymentUnit unit, VirtualFile file, JBossWebBeansMetaData root) throws Exception { return new JBossWebBeansMetaData(file); } }././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/parsing/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/parsi0000755000175000017500000000000011620060442033447 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/parsing/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/parsi0000755000175000017500000000000011620060442033447 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/parsing/test/ParsingTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/parsi0000644000175000017500000000265511037376316033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.parsing.test; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; public class ParsingTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Parsing Tests"); suite.addTest(DeployersAltDDTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/parsing/test/DeployersAltDDTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/parsi0000644000175000017500000001337111137607542033471 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.parsing.test; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.List; import junit.framework.Test; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentContext; import org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.BaseTestCase; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.spi.VFSContext; import org.jboss.virtual.spi.VirtualFileHandler; /** * alt-dd tests. * * @author Alexey Loubyansky */ public class DeployersAltDDTestCase extends BaseTestCase { public static Test suite() { return suite(DeployersAltDDTestCase.class); } public DeployersAltDDTestCase(String test) { super(test); } public void testAltDD() throws Exception { final VirtualFile altDD = getMockVF(); AbstractVFSDeploymentContext context = new AbstractVFSDeploymentContext(); DeploymentUnit unit = context.getDeploymentUnit(); unit.addAttachment(Object.class.getName() + ".altDD", altDD); final boolean pickedUpAltDD[] = new boolean[1]; AbstractVFSParsingDeployer deployer = new AbstractVFSParsingDeployer(Object.class) { @Override protected Object parse(VFSDeploymentUnit unit, VirtualFile file, Object root) throws Exception { if(file == altDD) pickedUpAltDD[0] = true; return null; } }; deployer.setName("dd"); deployer.deploy(unit); assertTrue("Picked up alt-dd", pickedUpAltDD[0]); } private static VirtualFile getMockVF() { VirtualFile altDD = new VirtualFile(new VirtualFileHandler() { private static final long serialVersionUID = 1L; public void close() { } public boolean exists() throws IOException { return false; } public VirtualFileHandler getChild(String arg0) throws IOException { return null; } public List getChildren(boolean arg0) throws IOException { return null; } public long getLastModified() throws IOException { return 0; } public String getName() { return null; } public VirtualFileHandler getParent() throws IOException { return null; } public String getPathName() { return null; } public long getSize() throws IOException { return 0; } public VFSContext getVFSContext() { return null; } public VirtualFile getVirtualFile() { return null; } public boolean hasBeenModified() throws IOException { return false; } public boolean isHidden() throws IOException { return false; } public boolean isLeaf() throws IOException { return false; } public String getLocalPathName() { return null; } public boolean isNested() throws IOException { return false; } public InputStream openStream() throws IOException { return null; } public URI toURI() throws URISyntaxException { return null; } public URL toURL() throws MalformedURLException, URISyntaxException { return null; } public URL toVfsUrl() throws MalformedURLException, URISyntaxException { return null; } public void replaceChild(VirtualFileHandler original, VirtualFileHandler replacement) { } public boolean removeChild(String name) throws IOException { return false; } public boolean delete(int gracePeriod) throws IOException { return false; } public URL getRealURL() throws IOException, URISyntaxException { return null; } public void cleanup() { } }); return altDD; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/BeanScanningUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001656411044122744033456 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.beans.metadata.api.annotations.Bean; import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder; import org.jboss.beans.metadata.spi.factory.BeanFactory; import org.jboss.classloader.plugins.filter.CombiningClassFilter; import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ParentPolicy; import org.jboss.classloader.spi.filter.ClassFilter; import org.jboss.classloader.spi.filter.PackageClassFilter; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.dependency.spi.ControllerContext; import org.jboss.deployers.plugins.annotations.GenericAnnotationDeployer; import org.jboss.deployers.plugins.classloading.AbstractLevelClassLoaderSystemDeployer; import org.jboss.deployers.plugins.classloading.ClassLoadingDefaultDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanScanningDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.kernel.Kernel; import org.jboss.kernel.spi.dependency.KernelController; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; /** * BeanScanningUnitTestCase. * * @author Ales Justin */ public class BeanScanningUnitTestCase extends AbstractDeployerUnitTest { public static Test suite() { return new TestSuite(BeanScanningUnitTestCase.class); } public BeanScanningUnitTestCase(String name) throws Throwable { super(name); } protected void addDeployers(Kernel kernel) { BeanDeployer beanDeployer = new BeanDeployer(); ClassLoadingDefaultDeployer cldd = new ClassLoadingDefaultDeployer(); ClassLoadingMetaData clmd = new ClassLoadingMetaData(); cldd.setDefaultMetaData(clmd); VFSClassLoaderClassPathDeployer vfscp = new VFSClassLoaderClassPathDeployer(); VFSClassLoaderDescribeDeployer vfsdd = new VFSClassLoaderDescribeDeployer(); ClassLoading classLoading = new ClassLoading(); KernelController controller = kernel.getController(); BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("ClassLoading", ClassLoading.class.getName()); builder.addMethodInstallCallback("addModule"); builder.addMethodUninstallCallback("removeModule"); try { controller.install(builder.getBeanMetaData(), classLoading); } catch (Throwable t) { throw new RuntimeException(t); } vfsdd.setClassLoading(classLoading); ClassLoaderSystem system = new DefaultClassLoaderSystem(); // allow MC annotations, so that both, deployer and tester see the same ClassFilter mcAnnFilter = new PackageClassFilter(new String[]{"org.jboss.beans.metadata.api.annotations"}); ClassFilter filter = new CombiningClassFilter(false, new ClassFilter[]{ClassFilter.JAVA_ONLY, mcAnnFilter}); ParentPolicy policy = new ParentPolicy(filter, ClassFilter.NOTHING); system.getDefaultDomain().setParentPolicy(policy); AbstractLevelClassLoaderSystemDeployer clsd = new AbstractLevelClassLoaderSystemDeployer(); clsd.setClassLoading(classLoading); clsd.setSystem(system); GenericAnnotationDeployer gad = new GenericAnnotationDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanScanningDeployer bsd = new BeanScanningDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); addDeployer(main, beanDeployer); addDeployer(main, cldd); addDeployer(main, vfsdd); addDeployer(main, vfscp); addDeployer(main, clsd); addDeployer(main, gad); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, bsd); addDeployer(main, beanMetaDataDeployer); } public void testNoOverride() throws Throwable { VFSDeployment context = createDeployment("/bean", "scan_no_override"); assertDeploy(context); ControllerContext testCC = controller.getInstalledContext("Test"); assertNotNull(testCC); Object testTarget = testCC.getTarget(); assertNotNull(testTarget); Class testClass = testTarget.getClass(); assertTrue(testClass.isAnnotationPresent(Bean.class)); ControllerContext testCCBF = controller.getInstalledContext("TestBF"); assertNotNull(testCCBF); Object target = testCCBF.getTarget(); assertInstanceOf(target, BeanFactory.class, false); BeanFactory bf = (BeanFactory)target; Object bfTarget = bf.createBean(); assertNotNull(bfTarget); Class bfTClass = bfTarget.getClass(); assertTrue(bfTClass.isAnnotationPresent(org.jboss.beans.metadata.api.annotations.BeanFactory.class)); assertUndeploy(context); assertNull(controller.getContext("TestBF", null)); assertNull(controller.getContext("Test", null)); } /* // TODO - uncomment when we know what to do with merge public void testWithOverride() throws Throwable { VFSDeployment context = createDeployment("/bean", "scan_w_override"); assertDeploy(context); ControllerContext testCC = controller.getInstalledContext("Test"); assertNotNull(testCC); assertInstanceOf(testCC.getTarget(), SimpleInjectee.class, false); ControllerContext testCCBF = controller.getInstalledContext("TestBF"); assertNotNull(testCCBF); Object target = testCCBF.getTarget(); assertInstanceOf(target, BeanFactory.class, false); BeanFactory bf = (BeanFactory)target; assertInstanceOf(bf.createBean(), SimpleInjectee.class, false); assertUndeploy(context); assertNull(controller.getContext("TestBF", null)); assertNull(controller.getContext("Test", null)); } */ }././@LongLink0000000000000000000000000000023700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/AbstractBeanMetaDataFactoryDeployerTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000434211015277063033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import org.jboss.dependency.spi.ControllerContext; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.bean.support.CustomBMDF; /** * AbstractBeanMetaDataFactoryDeployerTest. * * @author Ales Justin */ public abstract class AbstractBeanMetaDataFactoryDeployerTest extends AbstractDeployerUnitTest { protected AbstractBeanMetaDataFactoryDeployerTest(String name) throws Throwable { super(name); } public void testCustomBeanMetaData() throws Throwable { Deployment context = createSimpleDeployment(getClass().getName()); MutableAttachments attachments = (MutableAttachments)context.getPredeterminedManagedObjects(); attachments.addAttachment(CustomBMDF.class, new CustomBMDF("Test")); assertDeploy(context); ControllerContext testCC = controller.getInstalledContext("Test"); assertNotNull(testCC); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } }././@LongLink0000000000000000000000000000023700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/BeanMetaDataFactoryDeployerUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000474011104041440033435 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataFactoryDeployer; import org.jboss.kernel.Kernel; import org.jboss.test.deployers.vfs.deployer.bean.support.CustomBMDF; import org.jboss.test.deployers.vfs.deployer.bean.support.TestComponentCheckerDeployer; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; /** * BeanMetaDataFactoryDeployerUnitTestCase. * * @author Ales Justin */ public class BeanMetaDataFactoryDeployerUnitTestCase extends AbstractBeanMetaDataFactoryDeployerTest { public static Test suite() { return new TestSuite(BeanMetaDataFactoryDeployerUnitTestCase.class); } public BeanMetaDataFactoryDeployerUnitTestCase(String name) throws Throwable { super(name); } protected void addDeployers(Kernel kernel) { TestComponentCheckerDeployer tccd = new TestComponentCheckerDeployer("Test"); BeanMetaDataFactoryDeployer bmdfd = new BeanMetaDataFactoryDeployer(CustomBMDF.class); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, tccd); addDeployer(main, bmdfd); addDeployer(main, beanMetaDataDeployer); } }././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/BeanDeployerUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000676311104041440033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.deployer.kernel.BeanDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.kernel.Kernel; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; /** * BeanDeployerUnitTestCase. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class BeanDeployerUnitTestCase extends AbstractDeployerUnitTest { public static Test suite() { return new TestSuite(BeanDeployerUnitTestCase.class); } public BeanDeployerUnitTestCase(String name) throws Throwable { super(name); } protected void addDeployers(Kernel kernel) { BeanDeployer beanDeployer = new BeanDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, beanDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); } public void testTopLevelFile() throws Exception { VFSDeployment context = createDeployment("/bean", "toplevel/my-beans.xml"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test")); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } public void testMetaInfFile() throws Exception { VFSDeployment context = createDeployment("/bean", "toplevel/test.jar"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test")); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } public void testMultipleMatchingFiles() throws Exception { VFSDeployment context = createDeployment("/bean", "multiple/test.jar"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test1")); assertNotNull(controller.getInstalledContext("Test2")); assertUndeploy(context); assertNull(controller.getContext("Test2", null)); assertNull(controller.getContext("Test1", null)); } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/KernelScopeUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001266611104041440033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import java.util.Collection; import java.util.Collections; import java.util.Set; import java.util.HashSet; import junit.framework.Test; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ScopeInfo; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.main.MainDeployerStructure; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment; import org.jboss.metadata.spi.MetaData; import org.jboss.metadata.spi.scope.Scope; import org.jboss.metadata.spi.scope.ScopeKey; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.bean.support.Simple; import org.jboss.test.deployers.vfs.deployer.bean.support.TestInstanceMetaDataBeanDeployer; import org.jboss.test.deployers.vfs.deployer.bean.support.TestMetaDataBeanDeployer; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; /** * BeanDeployerUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class KernelScopeUnitTestCase extends AbstractDeployerUnitTest { public static Test suite() { return suite(KernelScopeUnitTestCase.class); } protected TestMetaDataBeanDeployer testMetaDataDeployer; protected TestInstanceMetaDataBeanDeployer testInstanceMetaDataDeployer; public KernelScopeUnitTestCase(String name) throws Throwable { super(name); } @SuppressWarnings("deprecation") protected void addDeployers(Kernel kernel) { testMetaDataDeployer = new TestMetaDataBeanDeployer(); testInstanceMetaDataDeployer = new TestInstanceMetaDataBeanDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, testMetaDataDeployer); addDeployer(main, testInstanceMetaDataDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); } public void testKernelScope() throws Exception { Deployment context = createSimpleDeployment("KernelDeployerTest"); AbstractKernelDeployment deployment = new AbstractKernelDeployment(); deployment.setName("KernelDeployerTest"); BeanMetaDataFactory metaData = new AbstractBeanMetaData("Test", Simple.class.getName()); deployment.setBeanFactories(Collections.singletonList(metaData)); MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment("KernelDeployerTest", deployment); assertDeploy(context); ControllerContext ctx = controller.getInstalledContext("Test"); ScopeInfo scopeInfo = ctx.getScopeInfo(); MainDeployerStructure mds = (MainDeployerStructure) main; DeploymentUnit unit = mds.getDeploymentUnit("KernelDeployerTest", true); DeploymentUnit component = unit.getComponent("Test"); assertScopeKeys(component.getScope(), scopeInfo.getScope()); assertScopeKeys(component.getMutableScope(), scopeInfo.getMutableScope()); MetaData md = ctx.getScopeInfo().getMetaData(); assertEquals(testMetaDataDeployer, md.getMetaData("test")); assertEquals(testInstanceMetaDataDeployer, md.getMetaData("instance")); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } /** * Component scopes should be subset of context scopes. * * @param component the component scope key * @param context the context scope key */ protected void assertScopeKeys(ScopeKey component, ScopeKey context) { Collection componentScopes = component.getScopes(); Collection contextScopes = context.getScopes(); Set first = new HashSet(componentScopes); Set second = new HashSet(contextScopes); second.retainAll(first); assertEquals(first, second); } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/AnnotatedBeansUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000511711050517102033437 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleAnnotatedAlias; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleAnnotatedConstructor; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleAnnotatedInjection; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleAnnotatedStart; /** * AnnotatedBeansUnitTestCase. * * @author Ales Justin */ public class AnnotatedBeansUnitTestCase extends AbstractAnnotationBeansTest { public static Test suite() { return new TestSuite(AnnotatedBeansUnitTestCase.class); } public AnnotatedBeansUnitTestCase(String name) throws Throwable { super(name); } protected BeanMetaDataFactory getConstructorTester() { return new AbstractBeanMetaData("Constructor", SimpleAnnotatedConstructor.class.getName()); } protected BeanMetaDataFactory getInjectionTester() { return new AbstractBeanMetaData("Injection", SimpleAnnotatedInjection.class.getName()); } protected BeanMetaDataFactory getStartTester() { return new AbstractBeanMetaData("Start", SimpleAnnotatedStart.class.getName()); } protected BeanMetaDataFactory getAliasTester() { return new AbstractBeanMetaData("SomeRandomName", SimpleAnnotatedAlias.class.getName()); } }././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/BeanManagedDeploymentUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001161611104173360033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import java.util.Map; import junit.framework.Test; import org.jboss.deployers.vfs.deployer.kernel.BeanDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.kernel.Kernel; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.api.factory.ManagedObjectFactory; import org.jboss.metatype.api.values.CollectionValue; import org.jboss.metatype.api.values.GenericValue; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; /** * Tests of bean deployment ManagedObject/ManagedDeployment creation. * * @author Scott.Stark@jboss.org * @version $Revision:$ */ public class BeanManagedDeploymentUnitTestCase extends AbstractDeployerUnitTest { public static Test suite() { return suite(BeanManagedDeploymentUnitTestCase.class); } public BeanManagedDeploymentUnitTestCase(String name) throws Throwable { super(name); } /** * Basic test of getting ManagedObject/ManagedProperty from a bean deployment. * TODO: the root ManagedObject for a KernelDeployment should be coming from a * custom {@linkplain org.jboss.managed.spi.factory.InstanceClassFactory} * @throws Exception for any error */ public void testBeanManagedObject() throws Exception { super.enableTrace("org.jboss.managed.plugins.factory"); VFSDeployment context = createDeployment("/managed", "annotated-beans.xml"); assertDeploy(context); ManagedObjectFactory.getInstance(); Map mos = main.getManagedObjects(context.getName()); log.info("annotated-beans.xml ManagedObjects: "+mos); assertEquals("annotated-beans.xml has 1 ManagedObject", 1, mos.size()); ManagedObject kdMO = mos.values().iterator().next(); log.info("KernelDeployment.ManagedProperties: "+kdMO.getProperties()); ManagedProperty beanFactories = kdMO.getProperty("beanFactories"); assertNotNull(beanFactories); CollectionValue beanFactoriesAV = CollectionValue.class.cast(beanFactories.getValue()); beanFactoriesAV.getMetaType(); assertEquals("BeanFactories size", 2, beanFactoriesAV.getSize()); GenericValue beanFactoriesGV = (GenericValue) beanFactoriesAV.getElements()[0]; log.info("BeanFactories[0].GV: "+beanFactoriesGV); ManagedObject beanFactoriesMO = (ManagedObject) beanFactoriesGV.getValue(); assertNotNull(beanFactoriesMO); log.info("beanFactories.ManagedProperties: "+beanFactoriesMO.getProperties()); ManagedProperty properties = beanFactoriesMO.getProperty("properties"); assertNotNull(properties); CollectionValue propertiesArray = CollectionValue.class.cast(properties.getValue()); assertNotNull(propertiesArray); } public void testBeanManagedDeployment() throws Exception { VFSDeployment context = createDeployment("/bean", "toplevel/my-beans.xml"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test")); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } protected void addDeployers(Kernel kernel) { BeanDeployer beanDeployer = new BeanDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, beanDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/KernelDeployerUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000754211104041440033440 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import java.util.Collections; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.bean.support.Simple; import org.jboss.test.deployers.vfs.deployer.bean.support.TestBeanDeployer; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; /** * BeanDeployerUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class KernelDeployerUnitTestCase extends AbstractDeployerUnitTest { public static Test suite() { return new TestSuite(KernelDeployerUnitTestCase.class); } public KernelDeployerUnitTestCase(String name) throws Throwable { super(name); } protected void addDeployers(Kernel kernel) { TestBeanDeployer testDeployer = new TestBeanDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, testDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); } public void testKernelDeployerPredetermined() throws Exception { Deployment context = createSimpleDeployment("KernelDeployerTest"); AbstractKernelDeployment deployment = new AbstractKernelDeployment(); deployment.setName("KernelDeployerTest"); BeanMetaDataFactory metaData = new AbstractBeanMetaData("Test", Simple.class.getName()); deployment.setBeanFactories(Collections.singletonList(metaData)); MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment("KernelDeployerTest", deployment); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test")); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } public void testKernelDeployerTransient() throws Exception { Deployment context = createSimpleDeployment("KernelDeployerTransient"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test")); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } } ././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/BeanDeployerClassLoaderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000611310774213506033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.deployer.kernel.BeanDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.kernel.Kernel; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.bean.support.Simple; import org.jboss.test.deployers.vfs.deployer.bean.support.TestClassLoaderDeployer; /** * BeanDeployerUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class BeanDeployerClassLoaderUnitTestCase extends AbstractDeployerUnitTest { public static Test suite() { return new TestSuite(BeanDeployerClassLoaderUnitTestCase.class); } public BeanDeployerClassLoaderUnitTestCase(String name) throws Throwable { super(name); } protected void addDeployers(Kernel kernel) { BeanDeployer beanDeployer = new BeanDeployer(); TestClassLoaderDeployer classLoaderDeployer = new TestClassLoaderDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); addDeployer(main, beanDeployer); addDeployer(main, classLoaderDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); } public void testClassLoader() throws Exception { VFSDeployment context = createDeployment("/bean", "toplevel/my-beans.xml"); assertDeploy(context); try { assertNotNull(controller.getInstalledContext("Test")); DeploymentUnit unit = assertDeploymentUnit(main, context.getName()); assertEquals(unit.getClassLoader(), Simple.getAndResetClassLoader()); } finally { assertUndeploy(context); } } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/BuilderBeansUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001023611050517102033435 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import java.lang.annotation.Annotation; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.beans.metadata.api.annotations.Aliases; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder; import org.jboss.dependency.spi.Controller; import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleAliasTester; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleConstructorTester; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleInjectionTester; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleStartTester; /** * BuilderBeansUnitTestCase. * * @author Ales Justin */ public class BuilderBeansUnitTestCase extends AbstractAnnotationBeansTest { public static Test suite() { return new TestSuite(BuilderBeansUnitTestCase.class); } public BuilderBeansUnitTestCase(String name) throws Throwable { super(name); } protected BeanMetaDataFactory getConstructorTester() { BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("Constructor", SimpleConstructorTester.class.getName()); builder.addConstructorParameter(Controller.class.getName(), builder.createInject(KernelConstants.KERNEL_CONTROLLER_NAME)); return builder.getBeanMetaDataFactory(); } protected BeanMetaDataFactory getInjectionTester() { BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("Injection", SimpleInjectionTester.class.getName()); builder.addPropertyMetaData("controller", builder.createInject(KernelConstants.KERNEL_CONTROLLER_NAME)); return builder.getBeanMetaDataFactory(); } protected BeanMetaDataFactory getStartTester() { BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("Start", SimpleStartTester.class.getName()); builder.setStart("onStart").addStartParameter(Controller.class.getName(), builder.createInject(KernelConstants.KERNEL_CONTROLLER_NAME)); return builder.getBeanMetaDataFactory(); } protected BeanMetaDataFactory getAliasTester() { BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("SomeRandomName", SimpleAliasTester.class.getName()); builder.setFactoryMethod("factory"); builder.addPropertyMetaData("controller", builder.createInject(KernelConstants.KERNEL_CONTROLLER_NAME)); builder.addAnnotation(new AliasesImpl("Alias")); return builder.getBeanMetaDataFactory(); } @SuppressWarnings({"ClassExplicitlyAnnotation"}) private class AliasesImpl implements Aliases { private String[] value; private AliasesImpl(String... aliases) { this.value = aliases; } public String[] value() { return value; } public boolean replace() { return false; } public Class annotationType() { return Aliases.class; } } }././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/AutowireAnnotationBeansTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001674211113261537033455 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import java.util.Arrays; import junit.framework.Test; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.plugins.AbstractConstructorMetaData; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerState; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.bean.support.DefaultXPCResolver; import org.jboss.test.deployers.vfs.deployer.bean.support.PUDeployment; /** * AutowireAnnotationBeansTestCase. * * @author Ales Justin */ public class AutowireAnnotationBeansTestCase extends AbstractDeployerUnitTest { public AutowireAnnotationBeansTestCase(String name) throws Throwable { super(name); } public static Test suite() { return suite(AutowireAnnotationBeansTestCase.class); } protected void addDeployers(Kernel kernel) { TCCLClassLoaderDeployer tcclDeployer = new TCCLClassLoaderDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel.getController()); addDeployer(main, tcclDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); } public void testAutowiredBeans() throws Exception { Deployment context = createSimpleDeployment("KernelDeployerTest1"); AbstractKernelDeployment deployment = new AbstractKernelDeployment(); deployment.setName("KernelDeployerTest1"); BeanMetaDataFactory md1 = new AbstractBeanMetaData("PUD", PUDeployment.class.getName()); BeanMetaDataFactory md2 = new AbstractBeanMetaData("XPC", DefaultXPCResolver.class.getName()); deployment.setBeanFactories(Arrays.asList(md1, md2)); MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment("KernelDeployerTest1", deployment); assertDeploy(context); try { ControllerContext pud = controller.getInstalledContext("PUD"); assertNotNull(pud); } finally { assertUndeploy(context); } assertNull(controller.getContext("PUD", null)); assertNull(controller.getContext("XPC", null)); } public void testMissingAutowireDependency() throws Exception { Deployment context = createSimpleDeployment("KernelDeployerTest2"); AbstractKernelDeployment deployment = new AbstractKernelDeployment(); deployment.setName("KernelDeployerTest2"); BeanMetaDataFactory md1 = new AbstractBeanMetaData("PUD", PUDeployment.class.getName()); deployment.setBeanFactories(Arrays.asList(md1)); MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment("KernelDeployerTest2", deployment); assertDeploy(context); try { ControllerContext pud = controller.getContext("PUD", null); assertNotNull(pud); assertEquals(ControllerState.INSTANTIATED, pud.getState()); } finally { assertUndeploy(context); } assertNull(controller.getContext("PUD", null)); } public void testDependencyOnExistingTarget() throws Exception { Deployment context = createSimpleDeployment("KernelDeployerTest3"); AbstractKernelDeployment deployment = new AbstractKernelDeployment(); deployment.setName("KernelDeployerTest3"); PUDeployment bean = new PUDeployment(); AbstractBeanMetaData md1 = new AbstractBeanMetaData("PUD", PUDeployment.class.getName()); AbstractConstructorMetaData acmd = new AbstractConstructorMetaData(); acmd.setValueObject(bean); md1.setConstructor(acmd); BeanMetaDataFactory md2 = new AbstractBeanMetaData("XPC", DefaultXPCResolver.class.getName()); deployment.setBeanFactories(Arrays.asList(md1, md2)); MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment("KernelDeployerTest3", deployment); assertDeploy(context); try { ControllerContext pud = controller.getInstalledContext("PUD"); assertNotNull(pud); ControllerContext xpc = controller.getInstalledContext("XPC"); assertNotNull(xpc); assertSame(bean.getResolver(), xpc.getTarget()); } finally { assertUndeploy(context); } assertNull(controller.getContext("PUD", null)); assertNull(controller.getContext("XPC", null)); } public void testExistingTargetWithMissingDependency() throws Exception { Deployment context = createSimpleDeployment("KernelDeployerTest4"); AbstractKernelDeployment deployment = new AbstractKernelDeployment(); deployment.setName("KernelDeployerTest4"); PUDeployment bean = new PUDeployment(); AbstractBeanMetaData md1 = new AbstractBeanMetaData("PUD", PUDeployment.class.getName()); AbstractConstructorMetaData acmd = new AbstractConstructorMetaData(); acmd.setValueObject(bean); md1.setConstructor(acmd); deployment.setBeanFactories(Arrays.asList((BeanMetaDataFactory)md1)); MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment("KernelDeployerTest4", deployment); assertDeploy(context); try { ControllerContext pud = controller.getContext("PUD", null); assertNotNull(pud); assertSame(bean, pud.getTarget()); assertNull(bean.getResolver()); assertEquals(ControllerState.INSTANTIATED, pud.getState()); } finally { assertUndeploy(context); } assertNull(controller.getContext("PUD", null)); } }././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/AbstractAnnotationBeansTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001060411104041440033431 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import java.util.Arrays; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.dependency.spi.ControllerContext; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.bean.support.SimpleAnnotated; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; /** * AbstractAnnotationBeansTest. * * @author Ales Justin */ public abstract class AbstractAnnotationBeansTest extends AbstractDeployerUnitTest { protected AbstractAnnotationBeansTest(String name) throws Throwable { super(name); } protected void addDeployers(Kernel kernel) { TCCLClassLoaderDeployer tcclDeployer = new TCCLClassLoaderDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel.getController()); addDeployer(main, tcclDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); } protected abstract BeanMetaDataFactory getConstructorTester(); protected abstract BeanMetaDataFactory getInjectionTester(); protected abstract BeanMetaDataFactory getStartTester(); protected abstract BeanMetaDataFactory getAliasTester(); public void testAnnotatedBeans() throws Exception { Deployment context = createSimpleDeployment("KernelDeployerTest"); AbstractKernelDeployment deployment = new AbstractKernelDeployment(); deployment.setName("KernelDeployerTest"); BeanMetaDataFactory md1 = getConstructorTester(); BeanMetaDataFactory md2 = getInjectionTester(); BeanMetaDataFactory md3 = getStartTester(); BeanMetaDataFactory md4 = getAliasTester(); deployment.setBeanFactories(Arrays.asList(md1, md2, md3, md4)); MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment("KernelDeployerTest", deployment); assertDeploy(context); try { assertSimpleAnnotated("Constructor"); assertSimpleAnnotated("Injection"); assertSimpleAnnotated("Start"); assertSimpleAnnotated("Alias"); } finally { assertUndeploy(context); } assertNull(controller.getContext("Constructor", null)); assertNull(controller.getContext("Injection", null)); assertNull(controller.getContext("Start", null)); assertNull(controller.getContext("SomeRandomName", null)); } protected void assertSimpleAnnotated(Object name) { ControllerContext context = controller.getInstalledContext(name); assertNotNull("No such context: " + name, context); Object target = context.getTarget(); SimpleAnnotated annotated = assertInstanceOf(target, SimpleAnnotated.class); assertSame(controller, annotated.getController()); } }././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/AliasDeployerUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000002060611104041440033434 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.dependency.spi.ControllerState; import org.jboss.deployers.vfs.deployer.kernel.AliasDeploymentDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.DeploymentAliasMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.kernel.Kernel; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; /** * AliasDeployerUnitTestCase. * * @author Ales Justin */ public class AliasDeployerUnitTestCase extends AbstractDeployerUnitTest { public static Test suite() { return new TestSuite(AliasDeployerUnitTestCase.class); } public AliasDeployerUnitTestCase(String name) throws Throwable { super(name); } protected void addDeployers(Kernel kernel) { BeanDeployer beanDeployer = new BeanDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); AliasDeploymentDeployer aliasDeploymentDeployer = new AliasDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); DeploymentAliasMetaDataDeployer aliasMetaDataDeployer = new DeploymentAliasMetaDataDeployer(kernel.getController()); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, beanDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, aliasDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); addDeployer(main, aliasMetaDataDeployer); } public void testAliasSuccessful() throws Exception { VFSDeployment context = createDeployment("/alias", "toplevel/my-beans.xml"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test")); VFSDeployment alias = createDeployment("/alias", "toplevel/aliases-beans.xml"); assertDeploy(alias); assertNotNull("Missing Test bean.", controller.getInstalledContext("MyAlias")); assertEquals(controller.getInstalledContext("MyAlias"), controller.getInstalledContext("Test")); assertNotNull("Missing Injectee bean.", controller.getInstalledContext("Injectee")); assertUndeploy(alias); assertNull(controller.getContext("Injectee", null)); assertUndeploy(context); assertNull(controller.getContext("Test", null)); assertNull(controller.getContext("MyAlias", null)); } public void testJoinedSuccessful() throws Exception { VFSDeployment context = createDeployment("/alias", "toplevel/joined-beans.xml"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test")); assertNotNull(controller.getInstalledContext("MyAlias")); assertEquals(controller.getInstalledContext("MyAlias"), controller.getInstalledContext("Test")); assertUndeploy(context); assertNull(controller.getContext("MyAlias", null)); assertNull(controller.getContext("Test", null)); } public void testAliasMissing() throws Exception { VFSDeployment context = createDeployment("/alias", "toplevel/aliases-beans.xml"); assertDeploy(context); assertNotNull(controller.getContext("Injectee", ControllerState.INSTANTIATED)); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } public void testJMXAlias() throws Exception { VFSDeployment context = createDeployment("/alias", "toplevel/mbean-beans.xml"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test")); VFSDeployment alias = createDeployment("/alias", "toplevel/jmx-beans.xml"); assertDeploy(alias); assertNotNull("Missing Injectee bean.", controller.getInstalledContext("Injectee")); assertUndeploy(alias); assertNull(controller.getContext("Injectee", null)); assertUndeploy(context); assertNull(controller.getContext("Test", null)); } public void testAliasDemand() throws Exception { VFSDeployment context = createDeployment("/alias", "toplevel/tomcat-beans.xml"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Tomcat")); VFSDeployment alias = createDeployment("/alias", "toplevel/servicex-beans.xml"); assertDeploy(alias); assertNotNull(controller.getInstalledContext("ServiceX")); assertUndeploy(context); assertNull(controller.getContext("Tomcat", null)); assertNull(controller.getContext("ServiceX", ControllerState.CREATE)); assertNotNull(controller.getContext("ServiceX", ControllerState.CONFIGURED)); assertUndeploy(alias); assertNull(controller.getContext("JBossWeb", null)); assertNull(controller.getContext("ServiceX", null)); } public void testAliasDependency() throws Exception { VFSDeployment alias = createDeployment("/alias", "toplevel/servicex-beans.xml"); assertDeploy(alias); assertNotNull(controller.getContext("ServiceX", ControllerState.CONFIGURED)); VFSDeployment context = createDeployment("/alias", "toplevel/tomcat-beans.xml"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Tomcat")); assertNotNull(controller.getInstalledContext("JBossWeb")); assertNotNull(controller.getInstalledContext("ServiceX")); assertUndeploy(context); assertNull(controller.getContext("Tomcat", null)); assertNull(controller.getContext("JBossWeb", null)); assertNull(controller.getContext("ServiceX", ControllerState.CREATE)); assertNotNull(controller.getContext("ServiceX", ControllerState.CONFIGURED)); assertUndeploy(alias); assertNull(controller.getContext("ServiceX", null)); } public void testRemovingAlias() throws Exception { VFSDeployment justx = createDeployment("/alias", "toplevel/justx-beans.xml"); assertDeploy(justx); assertNotNull(controller.getContext("ServiceX", ControllerState.CONFIGURED)); VFSDeployment alias = createDeployment("/alias", "toplevel/tcalias-beans.xml"); assertDeploy(alias); VFSDeployment context = createDeployment("/alias", "toplevel/tomcat-beans.xml"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Tomcat")); assertNotNull(controller.getInstalledContext("JBossWeb")); assertNotNull(controller.getInstalledContext("ServiceX")); assertUndeploy(alias); assertNull(controller.getInstalledContext("JBossWeb")); assertNotNull(controller.getInstalledContext("Tomcat")); assertNotNull(controller.getInstalledContext("ServiceX")); assertUndeploy(context); assertNull(controller.getContext("Tomcat", null)); assertNull(controller.getContext("ServiceX", ControllerState.CREATE)); assertNotNull(controller.getContext("ServiceX", ControllerState.CONFIGURED)); assertUndeploy(justx); assertNull(controller.getContext("JBossWeb", null)); assertNull(controller.getContext("ServiceX", null)); } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/BeanDeployerTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000615511113261537033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.deployer.bean.test.AliasDeployerUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.AnnotatedBeansUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.BeanDeployerClassLoaderUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.BeanDeployerUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.BeanManagedDeploymentUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.BeanMetaDataFactoryDeployerUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.BeanScanningUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.BuilderBeansUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.KernelDeployerUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.KernelScopeUnitTestCase; import org.jboss.test.deployers.vfs.deployer.bean.test.AutowireAnnotationBeansTestCase; /** * BeanDeployerTestSuite. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class BeanDeployerTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Bean Deployer Tests"); suite.addTest(BeanDeployerUnitTestCase.suite()); suite.addTest(KernelDeployerUnitTestCase.suite()); suite.addTest(AliasDeployerUnitTestCase.suite()); suite.addTest(BeanDeployerClassLoaderUnitTestCase.suite()); suite.addTest(BeanManagedDeploymentUnitTestCase.suite()); suite.addTest(BeanScanningUnitTestCase.suite()); suite.addTest(BeanMetaDataFactoryDeployerUnitTestCase.suite()); suite.addTest(KernelScopeUnitTestCase.suite()); suite.addTest(AnnotatedBeansUnitTestCase.suite()); suite.addTest(BuilderBeansUnitTestCase.suite()); suite.addTest(AutowireAnnotationBeansTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleConstructorTester.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000252011050517102033432 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.dependency.spi.Controller; /** * Simple constructor. * * @author Ales Justin */ public class SimpleConstructorTester extends SimpleAnnotated { public SimpleConstructorTester(Controller controller) { this.controller = controller; } }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/TestBeanDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000440710640504614033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import java.util.Collections; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment; /** * TestBeanDeployer.

* * This just creates some metadata for use by the KernelDeployer * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestBeanDeployer extends AbstractDeployer { public TestBeanDeployer() { setStage(DeploymentStages.PARSE); } public void deploy(DeploymentUnit unit) throws DeploymentException { AbstractKernelDeployment deployment = new AbstractKernelDeployment(); deployment.setName("KernelDeployerTest"); BeanMetaDataFactory metaData = new AbstractBeanMetaData("Test", Simple.class.getName()); deployment.setBeanFactories(Collections.singletonList(metaData)); unit.getTransientManagedObjects().addAttachment("KernelDeployerTest", deployment); } } ././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleAnnotatedConstructor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000312111047023141033431 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.beans.metadata.api.annotations.Constructor; import org.jboss.beans.metadata.api.annotations.Inject; import org.jboss.dependency.spi.Controller; import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants; /** * Simple annotated. * * @author Ales Justin */ public class SimpleAnnotatedConstructor extends SimpleAnnotated { @Constructor public SimpleAnnotatedConstructor(@Inject(bean = KernelConstants.KERNEL_CONTROLLER_NAME) Controller controller) { this.controller = controller; } }././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/PUDeployment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000267111113261537033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.beans.metadata.api.annotations.Inject; /** * @author Ales Justin */ public class PUDeployment { private XPCResolver resolver; public XPCResolver getResolver() { return resolver; } @Inject public void setResolver(XPCResolver resolver) { this.resolver = resolver; } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleAnnotatedAlias.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000337711050511244033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.beans.metadata.api.annotations.Aliases; import org.jboss.beans.metadata.api.annotations.FactoryMethod; import org.jboss.beans.metadata.api.annotations.Inject; import org.jboss.dependency.spi.Controller; import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants; /** * Simple annotated start. * * @author Ales Justin */ @Aliases({"Alias"}) public class SimpleAnnotatedAlias extends SimpleAnnotated { @FactoryMethod public static SimpleAnnotatedAlias factory(@Inject(bean = KernelConstants.KERNEL_CONTROLLER_NAME) Controller controller) { SimpleAnnotatedAlias alias = new SimpleAnnotatedAlias(); alias.controller = controller; return alias; } }././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/Simple.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000326710746226606033464 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.test.AbstractTestCaseWithSetup; /** * Simple. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class Simple { private static ClassLoader classLoader; public static ClassLoader getAndResetClassLoader() { ClassLoader result = classLoader; classLoader = null; return result; } public Simple() { SecurityManager sm = AbstractTestCaseWithSetup.suspendSecurity(); try { classLoader = Thread.currentThread().getContextClassLoader(); } finally { AbstractTestCaseWithSetup.resumeSecurity(sm); } } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/BeanAnnotationHolder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000257711014304527033453 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.beans.metadata.api.annotations.Bean; import org.jboss.beans.info.spi.BeanAccessMode; /** * @author Ales Justin */ @Bean( name = "Test", aliases = {"AT1", "AT2"}, accessMode = BeanAccessMode.ALL ) public class BeanAnnotationHolder { } ././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleAnnotatedInjection.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000277511047023141033447 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.beans.metadata.api.annotations.Inject; import org.jboss.dependency.spi.Controller; import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants; /** * Simple annotated. * * @author Ales Justin */ public class SimpleAnnotatedInjection extends SimpleAnnotated { @Inject(bean = KernelConstants.KERNEL_CONTROLLER_NAME) public void setController(Controller controller) { this.controller = controller; } }././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/TestInstanceMetaDataBeanDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000361111047026671033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestInstanceMetaDataBeanDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestInstanceMetaDataBeanDeployer extends AbstractDeployer { public TestInstanceMetaDataBeanDeployer() { setInput(BeanMetaData.class); setOutput(BeanMetaData.class); setStage(DeploymentStages.REAL); setComponentsOnly(true); } public void deploy(DeploymentUnit unit) throws DeploymentException { unit.getMutableMetaData().addMetaData("instance", this, TestInstanceMetaDataBeanDeployer.class); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/CustomBMDF.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000330211015277063033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import java.util.List; import java.util.Collections; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; /** * @author Ales Justin */ public class CustomBMDF implements BeanMetaDataFactory { private String name; public CustomBMDF(String name) { this.name = name; } public List getBeans() { BeanMetaData bmd = new AbstractBeanMetaData(name, Object.class.getName()); return Collections.singletonList(bmd); } } ././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/TestComponentCheckerDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000361711015277063033454 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * @author Ales Justin */ public class TestComponentCheckerDeployer extends AbstractDeployer { private String name; public TestComponentCheckerDeployer(String name) { setStage(DeploymentStages.PARSE); this.name = name; } public void deploy(DeploymentUnit unit) throws DeploymentException { } public void undeploy(DeploymentUnit unit) { boolean result = unit.removeComponent(name); if (result) throw new IllegalArgumentException("Someone forgot to clean-up component: " + name); } }././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleInjectionTester.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000251111050517102033432 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.dependency.spi.Controller; /** * Simple constructor. * * @author Ales Justin */ public class SimpleInjectionTester extends SimpleAnnotated { public void setController(Controller controller) { this.controller = controller; } }././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/AnnotatedBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000477410675614745033476 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectRef; import org.jboss.managed.api.annotation.ManagementProperty; /** * * @author Scott.Stark@jboss.org * @version $Revision:$ */ @ManagementObject public class AnnotatedBean { /** Should not be a ManagedProperty */ private String ignored; private String prop1; private int prop2; /** A ManagedProperty whose annotation should come from the deployment descriptor */ private int propWithXmlOverride; private Simple bean; @ManagementProperty(ignored=true) public String getIgnored() { return ignored; } public void setIgnored(String ignored) { this.ignored = ignored; } public String getProp1() { return prop1; } public void setProp1(String prop1) { this.prop1 = prop1; } public int getProp2() { return prop2; } public void setProp2(int prop2) { this.prop2 = prop2; } public int getPropWithXmlOverride() { return propWithXmlOverride; } public void setPropWithXmlOverride(int propWithXmlOverride) { this.propWithXmlOverride = propWithXmlOverride; } @ManagementObjectRef(name="Simple", type="MCBean") public Simple getBean() { return bean; } public void setBean(Simple bean) { this.bean = bean; } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleAnnotated.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000247511047023141033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.dependency.spi.Controller; /** * Simple annotated. * * @author Ales Justin */ public abstract class SimpleAnnotated { protected Controller controller; public Controller getController() { return controller; } }././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/TestClassLoaderDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000300610756604047033453 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.deployers.spi.deployer.helpers.AbstractTopLevelClassLoaderDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestClassLoaderDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestClassLoaderDeployer extends AbstractTopLevelClassLoaderDeployer { protected ClassLoader createTopLevelClassLoader(DeploymentUnit unit) throws Exception { return new TestClassLoader(); } } ././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/DefaultXPCResolver.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000240011113261537033437 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; /** * @author Ales Justin */ public class DefaultXPCResolver implements XPCResolver { public String getName() { return "Default"; } }././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/XPCResolver.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000227311113261537033447 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; /** * @author Ales Justin */ public interface XPCResolver { String getName(); }././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/BeanFactoryAnnotationHolder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000262111014304527033441 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.beans.info.spi.BeanAccessMode; import org.jboss.beans.metadata.api.annotations.BeanFactory; /** * @author Ales Justin */ @BeanFactory ( name = "TestBF", aliases = {"BFAT1", "BFAT2"}, accessMode = BeanAccessMode.ALL ) public class BeanFactoryAnnotationHolder { }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleAliasTester.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000264311113261537033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.dependency.spi.Controller; /** * Simple constructor. * * @author Ales Justin */ public class SimpleAliasTester extends SimpleAnnotated { public static SimpleAliasTester factory() { return new SimpleAliasTester(); } public void setController(Controller controller) { this.controller = controller; } }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleStartTester.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000247711050517102033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.dependency.spi.Controller; /** * Simple constructor. * * @author Ales Justin */ public class SimpleStartTester extends SimpleAnnotated { public void onStart(Controller controller) { this.controller = controller; } }././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/TestClassLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000244310746226606033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; /** * TestClassLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestClassLoader extends ClassLoader { public TestClassLoader() { super(TestClassLoader.class.getClassLoader()); } } ././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/TestMetaDataBeanDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000331711046301545033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * TestMetaDataBeanDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestMetaDataBeanDeployer extends AbstractDeployer { public TestMetaDataBeanDeployer() { setStage(DeploymentStages.PRE_REAL); } public void deploy(DeploymentUnit unit) throws DeploymentException { unit.getMutableMetaData().addMetaData("test", this, TestMetaDataBeanDeployer.class); } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleInjectee.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000255010644510077033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; /** * SimpleInjectee. * * @author Ales Justin */ public class SimpleInjectee { private Simple simple; public Simple getSimple() { return simple; } public void setSimple(Simple simple) { this.simple = simple; } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SimpleAnnotatedStart.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000310111047023141033427 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.bean.support; import org.jboss.beans.metadata.api.annotations.Inject; import org.jboss.beans.metadata.api.annotations.Start; import org.jboss.dependency.spi.Controller; import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants; /** * Simple annotated start. * * @author Ales Justin */ public class SimpleAnnotatedStart extends SimpleAnnotated { @Start public void startOnController(@Inject(bean = KernelConstants.KERNEL_CONTROLLER_NAME) Controller controller) { this.controller = controller; } }././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060441033433 5ustar twernertwerner././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/test/BeanMergeUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000557211104041440033441 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.kernel.Kernel; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.merge.support.TestBeanMergeDeployer; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; /** * BeanMergeUnitTestCase. * * @author Ales Justin */ public class BeanMergeUnitTestCase extends AbstractDeployerUnitTest { public static Test suite() { return new TestSuite(BeanMergeUnitTestCase.class); } public BeanMergeUnitTestCase(String name) throws Throwable { super(name); } protected void addDeployers(Kernel kernel) { TestBeanMergeDeployer beanDeployer = new TestBeanMergeDeployer(); KernelDeploymentDeployer kernelDeploymentDeployer = new KernelDeploymentDeployer(); BeanMetaDataDeployer beanMetaDataDeployer = new BeanMetaDataDeployer(kernel); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, beanDeployer); addDeployer(main, kernelDeploymentDeployer); addDeployer(main, beanMetaDataDeployer); } public void testMultipleMatchingFiles() throws Exception { VFSDeployment context = createDeployment("/bean", "multiple/test.jar"); assertDeploy(context); assertNotNull(controller.getInstalledContext("Test1")); assertNotNull(controller.getInstalledContext("Test2")); assertUndeploy(context); assertNull(controller.getContext("Test2", null)); assertNull(controller.getContext("Test1", null)); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/test/MockRarUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000732411104041440033436 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.test; import junit.framework.Test; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.merge.support.MockRarDeployer; import org.jboss.test.deployers.vfs.deployer.merge.support.RarDeploymentDeployer; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; import org.jboss.kernel.Kernel; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.dependency.spi.ControllerContext; /** * @author Ales Justin */ public class MockRarUnitTestCase extends AbstractDeployerUnitTest { private MockRarDeployer deployer = new MockRarDeployer(); public MockRarUnitTestCase(String name) throws Throwable { super(name); } public static Test suite() { return suite(MockRarUnitTestCase.class); } protected void addDeployers(Kernel kernel) { deployer.setUseSchemaValidation(false); try { controller.install(new AbstractBeanMetaData("rard", MockRarDeployer.class.getName()), deployer); } catch (Throwable t) { throw new RuntimeException(t); } addDeployer(main, deployer); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, new RarDeploymentDeployer()); addDeployer(main, new KernelDeploymentDeployer()); addDeployer(main, new BeanMetaDataDeployer(kernel)); } protected void testRarMerge(String name, boolean spec, boolean jboss, Class clazz) throws Exception { VFSDeployment deployment = createDeployment("/bean", "multiple/" + name + ".jar"); assertDeploy(deployment); assertEquals(spec, deployer.getSpec() != null); assertEquals(jboss, deployer.getJboss() != null); ControllerContext context = controller.getInstalledContext("Test"); assertNotNull(context); Object target = context.getTarget(); assertNotNull(target); assertEquals(clazz, target.getClass()); assertUndeploy(deployment); assertNull(controller.getContext("Test", null)); } public void testAllRar() throws Exception { testRarMerge("allrar", true, true, Object.class); } public void testSpecRar() throws Exception { testRarMerge("specrar", true, false, String.class); } public void testJarRar() throws Exception { testRarMerge("jbossrar", false, true, StringBuilder.class); } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/test/MultiFilesUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000637211104041440033440 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.test; import junit.framework.Test; import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer; import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.kernel.Kernel; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.merge.support.MultiRarDeployer; import org.jboss.test.deployers.vfs.deployer.merge.support.RarDeploymentDeployer; import org.jboss.test.deployers.support.TCCLClassLoaderDeployer; import org.jboss.dependency.spi.ControllerContext; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; /** * @author Ales Justin */ public class MultiFilesUnitTestCase extends AbstractDeployerUnitTest { public MultiFilesUnitTestCase(String name) throws Throwable { super(name); } public static Test suite() { return suite(MultiFilesUnitTestCase.class); } protected void addDeployers(Kernel kernel) { MultiRarDeployer deployer = new MultiRarDeployer(); deployer.setUseSchemaValidation(false); try { controller.install(new AbstractBeanMetaData("mrd", MultiRarDeployer.class.getName()), deployer); } catch (Throwable t) { throw new RuntimeException(t); } addDeployer(main, deployer); addDeployer(main, new TCCLClassLoaderDeployer()); addDeployer(main, new RarDeploymentDeployer()); addDeployer(main, new KernelDeploymentDeployer()); addDeployer(main, new BeanMetaDataDeployer(kernel)); } public void testMultipleNames() throws Exception { VFSDeployment deployment = createDeployment("/bean", "multiple/multirar.jar"); assertDeploy(deployment); ControllerContext context = controller.getInstalledContext("Test"); assertNotNull(context); context = controller.getInstalledContext("Alias1"); assertNotNull(context); context = controller.getInstalledContext("Alias2"); assertNotNull(context); assertUndeploy(deployment); assertNull(controller.getContext("Test", null)); } }././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/MergeDeployerTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000365311016755730033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.deployer.merge.test.BeanMergeUnitTestCase; import org.jboss.test.deployers.vfs.deployer.merge.test.MockRarUnitTestCase; import org.jboss.test.deployers.vfs.deployer.merge.test.MultiFilesUnitTestCase; /** * Merge deployers tests. * * @author Ales Justin */ public class MergeDeployerTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Merge Deployer Tests"); suite.addTest(BeanMergeUnitTestCase.suite()); suite.addTest(MockRarUnitTestCase.suite()); suite.addTest(MultiFilesUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/RarDeploymentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000401211016755730033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * @author Ales Justin */ public class RarDeploymentDeployer extends AbstractSimpleRealDeployer { public RarDeploymentDeployer() { super(RarDeploymentMetaData.class); setOutput(BeanMetaData.class); } public void deploy(DeploymentUnit unit, RarDeploymentMetaData deployment) throws DeploymentException { BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(deployment.getAttribute(), deployment.getElement()); builder.setAliases(deployment.getAliases()); unit.addAttachment(BeanMetaData.class, builder.getBeanMetaData()); } }././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/RarMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000301711037353520033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlRootElement; import org.jboss.xb.annotations.JBossXmlSchema; /** * @author Ales Justin */ @JBossXmlSchema(namespace="http://java.sun.com/xml/ns/j2ee", elementFormDefault=XmlNsForm.QUALIFIED) @XmlRootElement(name="connector") public class RarMetaData extends ConnectorMetaData { public static final long serialVersionUID = 1l; } ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/TestBeanMergeDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000502711015744127033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment; import org.jboss.kernel.spi.deployment.KernelDeployment; import org.jboss.virtual.VirtualFile; /** * @author Ales Justin */ public class TestBeanMergeDeployer extends SchemaResolverDeployer { public TestBeanMergeDeployer() { super(KernelDeployment.class); setNames(new HashSet(Arrays.asList("first-beans.xml", "snd-beans.xml"))); } protected KernelDeployment mergeFiles(VFSDeploymentUnit unit, KernelDeployment root, List files, Set missingFiles) throws Exception { AbstractKernelDeployment deployment = new AbstractKernelDeployment(); for (VirtualFile file : files) { KernelDeployment kd = parse(unit, file, root); List beans = deployment.getBeanFactories(); if (beans == null) { beans = new ArrayList(); deployment.setBeanFactories(beans); } beans.addAll(kd.getBeanFactories()); } return deployment; } } ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/RarDeploymentMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000356611037353520033454 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import java.io.Serializable; import java.util.Set; /** * @author Ales Justin */ public class RarDeploymentMetaData implements Serializable { public static final long serialVersionUID = 1l; private Set aliases; private String attribute; private String element; public String getAttribute() { return attribute; } public void setAttribute(String attribute) { this.attribute = attribute; } public String getElement() { return element; } public void setElement(String element) { this.element = element; } public Set getAliases() { return aliases; } public void setAliases(Set aliases) { this.aliases = aliases; } }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/MockRarDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000464611016052476033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import org.jboss.deployers.vfs.spi.deployer.JBossExtensionDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * @author Ales Justin */ public class MockRarDeployer extends JBossExtensionDeployer { private RarMetaData spec; private JBossRarMetaData jboss; public MockRarDeployer() { super(RarDeploymentMetaData.class, "rar.xml", RarMetaData.class, "jboss-rar.xml", JBossRarMetaData.class); } protected RarDeploymentMetaData mergeMetaData(VFSDeploymentUnit unit, RarMetaData spec, JBossRarMetaData jboss) throws Exception { this.spec = spec; this.jboss = jboss; RarDeploymentMetaData deployment = new RarDeploymentMetaData(); if (spec != null) { deployment.setAttribute(spec.getAttribute()); deployment.setElement(spec.getElement()); } if (jboss != null) { if (jboss.getAttribute() != null) deployment.setAttribute(jboss.getAttribute()); if (jboss.getElement() != null) deployment.setElement(jboss.getElement()); } return deployment; } public RarMetaData getSpec() { return spec; } public JBossRarMetaData getJboss() { return jboss; } }././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/ConnectorMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000434111037353520033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import java.io.Serializable; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; /** * @author Ales Justin */ public class ConnectorMetaData implements Serializable { public static final long serialVersionUID = 1l; private double version; private String attribute; private String description; private String element; public double getVersion() { return version; } @XmlAttribute public void setVersion(double version) { this.version = version; } public String getAttribute() { return attribute; } @XmlAttribute(name = "attrib") public void setAttribute(String attribute) { this.attribute = attribute; } public String getDescription() { return description; } @XmlElement public void setDescription(String description) { this.description = description; } public String getElement() { return element; } @XmlElement(name = "elt") public void setElement(String element) { this.element = element; } }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/MultiRarDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000616711016775645033471 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.HashSet; import org.jboss.deployers.vfs.spi.deployer.MultipleSchemaResolverDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * @author Ales Justin */ public class MultiRarDeployer extends MultipleSchemaResolverDeployer { private static Map> getCustomMappings() { Map> mappings = new HashMap>(); mappings.put("rar.xml", RarMetaData.class); mappings.put("jboss-rar.xml", JBossRarMetaData.class); mappings.put("alias.xml", AliasMetaData.class); mappings.put("alias-ext.xml", AliasMetaData.class); return mappings; } public MultiRarDeployer() { super(RarDeploymentMetaData.class, getCustomMappings()); } protected RarDeploymentMetaData mergeMetaData(VFSDeploymentUnit unit, Map, List> metadata) throws Exception { RarDeploymentMetaData deployment = new RarDeploymentMetaData(); RarMetaData spec = getInstance(metadata, RarMetaData.class); JBossRarMetaData jboss = getInstance(metadata, JBossRarMetaData.class); if (spec != null) { deployment.setAttribute(spec.getAttribute()); deployment.setElement(spec.getElement()); } if (jboss != null) { if (jboss.getAttribute() != null) deployment.setAttribute(jboss.getAttribute()); if (jboss.getElement() != null) deployment.setElement(jboss.getElement()); } List aliases = metadata.get(AliasMetaData.class); if (aliases != null) { Set strings = new HashSet(); for (Object md : aliases) { AliasMetaData amd = AliasMetaData.class.cast(md); strings.add(amd.getAlias()); } deployment.setAliases(strings); } return deployment; } } ././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/AliasMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000340711037353520033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import java.io.Serializable; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlRootElement; import org.jboss.xb.annotations.JBossXmlSchema; /** * @author Ales Justin */ @JBossXmlSchema(namespace="urn:jboss:alias:1.0", elementFormDefault=XmlNsForm.QUALIFIED) @XmlRootElement(name="aliases") public class AliasMetaData implements Serializable { public static final long serialVersionUID = 1l; private String alias; public String getAlias() { return alias; } @XmlElement public void setAlias(String alias) { this.alias = alias; } }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/merge/support/JBossRarMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000302711037353520033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.merge.support; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlRootElement; import org.jboss.xb.annotations.JBossXmlSchema; /** * @author Ales Justin */ @JBossXmlSchema(namespace="http://jboss.org/xml/ns/j2ee", elementFormDefault=XmlNsForm.QUALIFIED) @XmlRootElement(name="jboss-connector") public class JBossRarMetaData extends ConnectorMetaData { public static final long serialVersionUID = 1l; } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/facelets/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/facelets/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/facelets/test/FaceletsUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001204711072370632033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.facelets.test; import java.net.URL; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder; import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem; import org.jboss.classloader.spi.ClassLoaderSystem; import org.jboss.classloader.spi.ParentPolicy; import org.jboss.classloading.spi.dependency.ClassLoading; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.plugins.classloading.AbstractLevelClassLoaderSystemDeployer; import org.jboss.deployers.plugins.classloading.ClassLoadingDefaultDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer; import org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer; import org.jboss.deployers.vfs.plugins.structure.war.WARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.kernel.Kernel; import org.jboss.kernel.spi.dependency.KernelController; import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest; import org.jboss.test.deployers.vfs.deployer.facelets.support.SearchDeployer; /** * FaceletsUnitTestCase. * * @author Ales Justin */ public class FaceletsUnitTestCase extends AbstractDeployerUnitTest { private SearchDeployer deployer = new SearchDeployer("META-INF/", ".taglib.xml"); public static Test suite() { return new TestSuite(FaceletsUnitTestCase.class); } public FaceletsUnitTestCase(String name) throws Throwable { super(name); } protected void setUp() throws Exception { super.setUp(); // Uncomment this to test VFS nested jar copy handling //System.setProperty(VFSUtils.FORCE_COPY_KEY, "true"); addStructureDeployer(main, new WARStructure()); } protected void addDeployers(Kernel kernel) { ClassLoadingDefaultDeployer cldd = new ClassLoadingDefaultDeployer(); ClassLoadingMetaData clmd = new ClassLoadingMetaData(); cldd.setDefaultMetaData(clmd); VFSClassLoaderClassPathDeployer vfscp = new VFSClassLoaderClassPathDeployer(); VFSClassLoaderDescribeDeployer vfsdd = new VFSClassLoaderDescribeDeployer(); ClassLoading classLoading = new ClassLoading(); KernelController controller = kernel.getController(); BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("ClassLoading", ClassLoading.class.getName()); builder.addMethodInstallCallback("addModule"); builder.addMethodUninstallCallback("removeModule"); try { controller.install(builder.getBeanMetaData(), classLoading); } catch (Throwable t) { throw new RuntimeException(t); } vfsdd.setClassLoading(classLoading); ClassLoaderSystem system = new DefaultClassLoaderSystem(); system.getDefaultDomain().setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY); AbstractLevelClassLoaderSystemDeployer clsd = new AbstractLevelClassLoaderSystemDeployer(); clsd.setClassLoading(classLoading); clsd.setSystem(system); addDeployer(main, cldd); addDeployer(main, vfsdd); addDeployer(main, vfscp); addDeployer(main, clsd); addDeployer(main, deployer); } protected void testFacelets(String name, int size) throws Throwable { VFSDeployment context = createDeployment("/facelets", name); assertDeploy(context); try { URL[] urls = deployer.getUrls(); assertNotNull(urls); assertEquals(size, urls.length); } finally { assertUndeploy(context); } } public void testPackedFacelets() throws Throwable { testFacelets("packed.jar", 3); } public void testExplodedFacelets() throws Throwable { testFacelets("exploded.jar", 3); } public void testNumberguess() throws Throwable { testFacelets("numberguess.war", 5); } }././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/facelets/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/facelets/support/Classpath.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000002045111017747652033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.facelets.support; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.JarURLConnection; import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder; import java.util.Enumeration; import java.util.LinkedHashSet; import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** * Mock of Facelets's Classpath class. * * @author Ales Justin */ @SuppressWarnings("unchecked") public final class Classpath { public static URL[] search(ClassLoader cl, String prefix, String suffix) throws IOException { Enumeration[] e = new Enumeration[]{ cl.getResources(prefix), cl.getResources(prefix + "MANIFEST.MF") }; Set all = new LinkedHashSet(); URL url; URLConnection conn; JarFile jarFile; for (int i = 0, s = e.length; i < s; ++i) { while (e[i].hasMoreElements()) { url = (URL)e[i].nextElement(); conn = url.openConnection(); conn.setUseCaches(false); conn.setDefaultUseCaches(false); if (conn instanceof JarURLConnection) { jarFile = ((JarURLConnection)conn).getJarFile(); } else { jarFile = getAlternativeJarFile(url); } if (jarFile != null) { searchJar(cl, all, jarFile, prefix, suffix); } else { boolean searchDone = searchDir(all, new File(URLDecoder.decode(url.getFile(), "UTF-8")), suffix); if (searchDone == false) { searchFromURL(all, prefix, suffix, url); } } } } return (URL[])all.toArray(new URL[all.size()]); } private static boolean searchDir(Set result, File file, String suffix) throws IOException { if (file.exists() && file.isDirectory()) { File[] fc = file.listFiles(); String path; for (int i = 0; i < fc.length; i++) { path = fc[i].getAbsolutePath(); if (fc[i].isDirectory()) { searchDir(result, fc[i], suffix); } else if (path.endsWith(suffix)) { result.add(fc[i].toURL()); } } return true; } return false; } /** * Search from URL. * Fall back on prefix tokens if * not able to read from original url param. * * @param result the result urls * @param prefix the current prefix * @param suffix the suffix to match * @param url the current url to start search * @throws IOException for any error */ private static void searchFromURL(Set result, String prefix, String suffix, URL url) throws IOException { boolean done = false; InputStream is = getInputStream(url); if (is != null) { try { ZipInputStream zis; if (is instanceof ZipInputStream) zis = (ZipInputStream)is; else zis = new ZipInputStream(is); try { ZipEntry entry = zis.getNextEntry(); // initial entry should not be null // if we assume this is some inner jar done = (entry != null); while (entry != null) { String entryName = entry.getName(); if (entryName.endsWith(suffix)) { String urlString = url.toExternalForm(); result.add(new URL(urlString + entryName)); } entry = zis.getNextEntry(); } } finally { zis.close(); } } catch (Exception ignore) { } } if (done == false && prefix.length() > 0) { // we add '/' at the end since join adds it as well String urlString = url.toExternalForm() + "/"; String[] split = prefix.split("/"); prefix = join(split, true); String end = join(split, false); int p = urlString.lastIndexOf(end); url = new URL(urlString.substring(0, p)); searchFromURL(result, prefix, suffix, url); } } /** * Join tokens, exlude last if param equals true. * * @param tokens the tokens * @param excludeLast do we exclude last token * @return joined tokens */ private static String join(String[] tokens, boolean excludeLast) { StringBuffer join = new StringBuffer(); for (int i = 0; i < tokens.length - (excludeLast ? 1 : 0); i++) join.append(tokens[i]).append("/"); return join.toString(); } /** * Open input stream from url. * Ignore any errors. * * @param url the url to open * @return input stream or null if not possible */ private static InputStream getInputStream(URL url) { try { return url.openStream(); } catch (Throwable t) { return null; } } /** * For URLs to JARs that do not use JarURLConnection - allowed by * the servlet spec - attempt to produce a JarFile object all the same. * Known servlet engines that function like this include Weblogic * and OC4J. * This is not a full solution, since an unpacked WAR or EAR will not * have JAR "files" as such. */ private static JarFile getAlternativeJarFile(URL url) throws IOException { String urlFile = url.getFile(); // Trim off any suffix - which is prefixed by "!/" on Weblogic int separatorIndex = urlFile.indexOf("!/"); // OK, didn't find that. Try the less safe "!", used on OC4J if (separatorIndex == -1) { separatorIndex = urlFile.indexOf('!'); } if (separatorIndex != -1) { String jarFileUrl = urlFile.substring(0, separatorIndex); // And trim off any "file:" prefix. if (jarFileUrl.startsWith("file:")) { jarFileUrl = jarFileUrl.substring("file:".length()); } return new JarFile(jarFileUrl); } return null; } private static void searchJar(ClassLoader cl, Set result, JarFile file, String prefix, String suffix) throws IOException { Enumeration e = file.entries(); JarEntry entry; String name; while (e.hasMoreElements()) { try { entry = (JarEntry)e.nextElement(); } catch (Throwable t) { continue; } name = entry.getName(); if (name.startsWith(prefix) && name.endsWith(suffix)) { Enumeration e2 = cl.getResources(name); while (e2.hasMoreElements()) { result.add(e2.nextElement()); } } } } } ././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/facelets/support/SearchDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000505411072370632033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.facelets.support; import java.io.IOException; import java.net.URL; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * This deployer's purpose is to trigger * mock impl of Facelets's Classpath class. * * Better deployer examples could be found elsewhere. ;-) * * @author Ales Justin */ public class SearchDeployer extends AbstractDeployer { private String prefix; private String suffix; private URL[] urls; public SearchDeployer(String prefix, String suffix) { if (prefix == null) throw new IllegalArgumentException("Null prefix."); if (suffix == null) throw new IllegalArgumentException("Null suffix."); this.prefix = prefix; this.suffix = suffix; setStage(DeploymentStages.REAL); } public void deploy(DeploymentUnit unit) throws DeploymentException { try { urls = Classpath.search(unit.getClassLoader(), prefix, suffix); } catch (IOException e) { DeploymentException.rethrowAsDeploymentException("Error doing facelets search, prefix=" + prefix + ", suffix=" + suffix, e); } } public void undeploy(DeploymentUnit unit) { urls = null; } public URL[] getUrls() { return urls; } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/facelets/FaceletsTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000322511017016540033440 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.facelets; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.deployer.facelets.test.FaceletsUnitTestCase; /** * Facelets test suite. * * @author Ales Justin */ public class FaceletsTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Facelets Tests"); suite.addTest(FaceletsUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/DeployerClientTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000465510774213506033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer; import org.jboss.test.deployers.BaseDeployersVFSTest; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentState; /** * DeployerClientTestCase. * DeployerClient instance holder. * * @author Ales Justin */ public abstract class DeployerClientTest extends BaseDeployersVFSTest { protected DeployerClient main; public DeployerClientTest(String name) { super(name); } protected void assertDeploy(Deployment context) throws Exception { assertDeploy(context, DeploymentState.DEPLOYED); } protected void assertUndeploy(Deployment context) throws Exception { assertUndeploy(context, DeploymentState.UNDEPLOYED); } protected void assertDeploy(Deployment context, DeploymentState expectedState) throws Exception { main.addDeployment(context); main.process(); assertEquals("Should be Deployed " + context, expectedState, main.getDeploymentState(context.getName())); } protected void assertUndeploy(Deployment context, DeploymentState expectedState) throws Exception { main.removeDeployment(context.getName()); main.process(); assertEquals("Should be Undeployed " + context, expectedState, main.getDeploymentState(context.getName())); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/ValidateDeployerTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000340611032374535033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.validate; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.deployer.validate.test.DeployersValidateInputTestCase; import org.jboss.test.deployers.vfs.deployer.validate.test.ObjectMFDTestCase; /** * ValidateDeployerTestSuite. * * @author Ales Justin */ public class ValidateDeployerTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("Validate Deployers Tests"); suite.addTest(DeployersValidateInputTestCase.suite()); suite.addTest(ObjectMFDTestCase.suite()); return suite; } }././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/test/ObjectMFDTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000773211104043637033453 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.validate.test; import java.util.Collections; import junit.framework.Test; import org.jboss.deployers.spi.deployer.Deployer; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentContext; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BaseDeployersVFSTest; import org.jboss.test.deployers.vfs.deployer.validate.support.StructureOMFDeployer; import org.jboss.virtual.VirtualFile; /** * Validate omfd deployer. * * @author Ales Justin */ public class ObjectMFDTestCase extends BaseDeployersVFSTest { public ObjectMFDTestCase(String name) { super(name); } public static Test suite() { return suite(ObjectMFDTestCase.class); } public void testDeployer() throws Exception { VirtualFile file = getVirtualFile("/structure/explicit", "complex.deployer"); VFSDeploymentContext deployment = new AbstractVFSDeploymentContext(file, ""); deployment.setMetaDataPath(Collections.singletonList("META-INF")); VFSDeploymentUnit unit = new AbstractVFSDeploymentUnit(deployment); Deployer deployer = new StructureOMFDeployer(); deployer.deploy(unit); try { StructureMetaData metaData = unit.getAttachment(StructureMetaData.class); assertNotNull(metaData); } finally { deployer.undeploy(unit); } } public void testComparator() throws Exception { VirtualFile file = getVirtualFile("/structure/explicit", "comparator.jar"); VFSDeploymentContext deployment = new AbstractVFSDeploymentContext(file, ""); deployment.setMetaDataPath(Collections.singletonList("META-INF")); VFSDeploymentUnit unit = new AbstractVFSDeploymentUnit(deployment); Deployer deployer = new StructureOMFDeployer(); deployer.deploy(unit); try { StructureMetaData metaData = unit.getAttachment(StructureMetaData.class); assertNotNull(metaData); assertComparator(metaData, "", "org.jboss.test.deployment.test.SomeDeploymentComparatorTop"); assertComparator(metaData, "sub.jar", "org.jboss.test.deployment.test.SomeDeploymentComparatorSub"); assertComparator(metaData, "x.war", "org.jboss.test.deployment.test.SomeDeploymentComparatorX"); } finally { deployer.undeploy(unit); } } protected void assertComparator(StructureMetaData metaData, String path, String comparator) { ContextInfo ci = metaData.getContext(path); assertNotNull(ci); assertEquals(comparator, ci.getComparatorClassName()); } }././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/test/DeployersValidateInputTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000672511037077400033454 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.validate.test; import java.io.IOException; import junit.framework.Test; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.deployer.kernel.Properties2BeansDeployer; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentContext; import org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer; import org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer; import org.jboss.test.BaseTestCase; import org.jboss.test.deployers.vfs.deployer.nonmetadata.support.MockBshDeployer; import org.jboss.test.deployers.vfs.deployer.validate.support.MyVFSDeploymentContext; import org.jboss.test.deployers.vfs.deployer.validate.support.MyVirtualFile; import org.jboss.test.deployers.vfs.deployer.validate.support.TestXmlDeployer; import org.jboss.virtual.VirtualFile; /** * Validate deployers. * * @author Ales Justin */ public class DeployersValidateInputTestCase extends BaseTestCase { public DeployersValidateInputTestCase(String name) { super(name); } public static Test suite() { return suite(DeployersValidateInputTestCase.class); } public void testNullStream() throws Exception { // this one needs to be created first TestXmlDeployer xmlDeployer = new TestXmlDeployer(); xmlDeployer.create(); AbstractVFSParsingDeployer[] deployers = new AbstractVFSParsingDeployer[] { new Properties2BeansDeployer(), new MockBshDeployer(), // new TestJaxbDeployer(), xmlDeployer, new SchemaResolverDeployer(Object.class), }; VirtualFile root = new MyVirtualFile(); AbstractVFSDeploymentContext context = new MyVFSDeploymentContext(root, ""); DeploymentUnit unit = context.getDeploymentUnit(); for(AbstractVFSParsingDeployer deployer : deployers) { // set name to "" to match in deployment deployer.setName(""); try { deployer.deploy(unit); fail("Should not be here: " + deployer); } catch(Exception e) { assertInstanceOf(e, DeploymentException.class); assertInstanceOf(e.getCause(), IOException.class); } } } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/support/TestXmlDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000403610765457144033463 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.validate.support; import org.jboss.test.deployers.vfs.deployer.jaxp.support.SomeBean; import org.jboss.deployers.vfs.spi.deployer.JAXPDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; import org.w3c.dom.Document; /** * @author ales.justin@jboss.org */ public class TestXmlDeployer extends JAXPDeployer { private SomeBean lastBean; public TestXmlDeployer() { super(SomeBean.class); setSuffix(".jbean"); } public SomeBean getLastBean() { return lastBean; } @Override protected SomeBean parse(VFSDeploymentUnit unit, VirtualFile file, Document doc) throws Exception { String name = doc.getDocumentElement().getAttribute("name"); String version = doc.getDocumentElement().getAttribute("version"); SomeBean bean = new SomeBean(); bean.setName(name); bean.setVersion(version); lastBean = bean; return bean; } } ././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/support/StructureOMFDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000340711032374535033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.validate.support; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.vfs.spi.deployer.ObjectModelFactoryDeployer; import org.jboss.deployers.vfs.plugins.structure.explicit.StructureMetaDataObjectFactory; import org.jboss.xb.binding.ObjectModelFactory; /** * @author Ales Justin */ public class StructureOMFDeployer extends ObjectModelFactoryDeployer { public StructureOMFDeployer() { super(StructureMetaData.class); setName("jboss-structure.xml"); } protected ObjectModelFactory getObjectModelFactory(StructureMetaData root) { return new StructureMetaDataObjectFactory(); } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/support/TestJaxbDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000272310765457144033464 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.validate.support; import org.jboss.deployers.vfs.spi.deployer.JAXBDeployer; /** * @author Ales Justin */ public class TestJaxbDeployer extends JAXBDeployer { public TestJaxbDeployer() { super(Object.class); try { create(); } catch (Exception e) { throw new RuntimeException(e); } } } ././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/support/MyVFSDeploymentContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000343110765457144033461 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.validate.support; import java.util.List; import java.util.Collections; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentContext; import org.jboss.virtual.VirtualFile; /** * @author Ales Justin */ public class MyVFSDeploymentContext extends AbstractVFSDeploymentContext { public MyVFSDeploymentContext() { } public MyVFSDeploymentContext(VirtualFile root, String relativePath) { super(root, relativePath); } public VirtualFile getMetaDataFile(String name) { return getRoot(); } public List getMetaDataFiles(String name, String suffix) { return Collections.singletonList(getRoot()); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/validate/support/MyVirtualFile.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001134111137607542033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.validate.support; import java.net.URL; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URI; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.spi.VirtualFileHandler; import org.jboss.virtual.spi.VFSContext; /** * @author Ales Justin */ public class MyVirtualFile extends VirtualFile { /** * The serialVersionUID */ private static final long serialVersionUID = 1L; public MyVirtualFile() { super(getVirtualFileHandler()); } public String getName() { return ""; } public InputStream openStream() throws IOException { return null; } private static VirtualFileHandler getVirtualFileHandler() { return new VirtualFileHandler() { /** * The serialVersionUID */ private static final long serialVersionUID = 1L; public String getName() { return null; } public String getPathName() { return null; } public URL toVfsUrl() throws MalformedURLException, URISyntaxException { return null; } public URI toURI() throws URISyntaxException { return null; } public URL toURL() throws MalformedURLException, URISyntaxException { return null; } public long getLastModified() throws IOException { return 0; } public boolean hasBeenModified() throws IOException { return false; } public long getSize() throws IOException { return 0; } public boolean exists() throws IOException { return false; } public boolean isLeaf() throws IOException { return true; } public boolean isHidden() throws IOException { return false; } public String getLocalPathName() { return null; } public boolean isNested() throws IOException { return false; } public InputStream openStream() throws IOException { return null; } public VirtualFileHandler getParent() throws IOException { return null; } public List getChildren(boolean ignoreErrors) throws IOException { return null; } public VirtualFileHandler getChild(String path) throws IOException { return null; } public VFSContext getVFSContext() { return null; } public VirtualFile getVirtualFile() { return null; } public void close() { } public void replaceChild(VirtualFileHandler original, VirtualFileHandler replacement) { } public boolean removeChild(String name) throws IOException { return false; } public boolean delete(int gracePeriod) throws IOException { return false; } public URL getRealURL() throws IOException, URISyntaxException { return null; } public void cleanup() { } }; } } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/AbstractDeployerUnitTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000625411104173360033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer; import org.jboss.deployers.plugins.deployers.DeployersImpl; import org.jboss.deployers.spi.deployer.Deployers; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.bootstrap.basic.BasicBootstrap; import org.jboss.kernel.spi.dependency.KernelController; import org.jboss.metadata.spi.repository.MutableMetaDataRepository; import org.jboss.test.deployers.AbstractDeployerTest; /** * AbstractDeployerUnitTestCase. * * @author Ales Justin */ public abstract class AbstractDeployerUnitTest extends DeployerClientTest { protected KernelController controller; public AbstractDeployerUnitTest(String name) throws Throwable { super(name); } protected KernelController getController() { return controller; } protected void setUp() throws Exception { super.setUp(); try { BasicBootstrap bootstrap = new BasicBootstrap(); bootstrap.run(); Kernel kernel = bootstrap.getKernel(); controller = kernel.getController(); main = createMainDeployer(); addStructureDeployer(main, new JARStructure()); addStructureDeployer(main, new FileStructure()); addDeployers(kernel); } catch (Throwable t) { throw new RuntimeException(t); } } protected Deployers createDeployers() { System.err.println("AbstractDeployerUnitTest.CS: "+getClass().getProtectionDomain().getCodeSource()); System.err.println("AbstractDeployerTest.CS: "+AbstractDeployerTest.class.getProtectionDomain().getCodeSource()); DeployersImpl deployers = (DeployersImpl) super.createDeployers(); KernelController controller = getController(); MutableMetaDataRepository repository = controller.getKernel().getMetaDataRepository().getMetaDataRepository(); deployers.setRepository(repository); return deployers; } protected abstract void addDeployers(Kernel kernel); }././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/jaxp/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/jaxp/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/jaxp/test/JAXPDeployerUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000001036010774213506033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.jaxp.test; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.spi.DeploymentState; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.test.deployers.vfs.deployer.DeployerClientTest; import org.jboss.test.deployers.vfs.deployer.jaxp.support.SomeBean; import org.jboss.test.deployers.vfs.deployer.jaxp.support.TestXmlDeployer; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * Tests of the JAXPDeployer. * * @author Scott.Stark@jboss.org * @version $Revision: 60707 $ */ public class JAXPDeployerUnitTestCase extends DeployerClientTest { public static Test suite() { return new TestSuite(JAXPDeployerUnitTestCase.class); } private TestXmlDeployer deployer; public JAXPDeployerUnitTestCase(String name) throws Throwable { super(name); } protected void setUp() throws Exception { super.setUp(); try { main = createMainDeployer(); addStructureDeployer(main, new JARStructure()); addStructureDeployer(main, new FileStructure()); deployer = new TestXmlDeployer(); deployer.create(); addDeployer(main, deployer); } catch (Throwable t) { throw new RuntimeException(t); } } public void testDocOverride() throws Exception { enableTrace("org.jboss.deployers"); enableTrace("org.jboss.dependency"); VFSDeployment context = createDeployment("/jaxp", "somebean.jbean"); assertDeploy(context, null, null); SomeBean bean = deployer.getLastBean(); assertNotNull(bean); assertEquals("bean.name", bean.getName(), "bean1"); assertEquals("bean.version", bean.getVersion(), "1.0"); // Now deploy with an overriden Document DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); DOMImplementation dom = builder.getDOMImplementation(); Document doc = dom.createDocument(null, "somebean", null); Element root = doc.getDocumentElement(); root.setAttribute("name", "bean1.1"); root.setAttribute("version", "1.1"); assertDeploy(context, Document.class, doc); bean = deployer.getLastBean(); assertNotNull(bean); assertEquals("bean.name", bean.getName(), "bean1.1"); assertEquals("bean.version", bean.getVersion(), "1.1"); assertUndeploy(context); } protected void assertDeploy(VFSDeployment context, Class clazz, T mo) throws Exception { main.addDeployment(context); if (mo != null) { MutableAttachments attachments = (MutableAttachments) context.getPredeterminedManagedObjects(); attachments.addAttachment(clazz, mo); } main.process(); assertEquals("Should be Deployed " + context, DeploymentState.DEPLOYED, main.getDeploymentState(context.getName())); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/jaxp/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/jaxp/support/TestXmlDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000166310765457144033466 0ustar twernertwernerpackage org.jboss.test.deployers.vfs.deployer.jaxp.support; import org.jboss.deployers.vfs.spi.deployer.JAXPDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; import org.w3c.dom.Document; /** * @author adrian@jboss.org */ public class TestXmlDeployer extends JAXPDeployer { private SomeBean lastBean; public TestXmlDeployer() { super(SomeBean.class); setSuffix(".jbean"); } public SomeBean getLastBean() { return lastBean; } @Override protected SomeBean parse(VFSDeploymentUnit unit, VirtualFile file, Document doc) throws Exception { String name = doc.getDocumentElement().getAttribute("name"); String version = doc.getDocumentElement().getAttribute("version"); SomeBean bean = new SomeBean(); bean.setName(name); bean.setVersion(version); lastBean = bean; return bean; } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/jaxp/support/SomeBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000300710640504614033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.jaxp.support; /** * A bean created by the JAXPDeployer parse. * * @author Scott.Stark@jboss.org * @version $Revision: 60707 $ */ public class SomeBean { private String name; private String version; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/jaxp/JAXPDeployerTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000320211032374535033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.jaxp; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.deployer.jaxp.test.JAXPDeployerUnitTestCase; /** * JAXPDeployerTestSuite. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class JAXPDeployerTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("JAXP Deployer Tests"); suite.addTest(JAXPDeployerUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/nonmetadata/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/nonmetadata/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/nonmetadata/test/MockBshDeployerTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000646011104173360033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.nonmetadata.test; import junit.framework.Test; import org.jboss.dependency.plugins.AbstractController; import org.jboss.deployers.plugins.deployers.DeployersImpl; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.spi.deployer.helpers.DefaultManagedObjectCreator; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.test.deployers.BaseDeployersVFSTest; import org.jboss.test.deployers.vfs.deployer.nonmetadata.support.MockBshDeployer; import org.jboss.test.deployers.vfs.deployer.nonmetadata.support.BshScript; /** * Mock .bsh deploy. * * @author Ales Justin */ public class MockBshDeployerTestCase extends BaseDeployersVFSTest { public MockBshDeployerTestCase(String name) { super(name); } public static Test suite() { return suite(MockBshDeployerTestCase.class); } @Override protected void setUp() throws Exception { super.setUp(); enableTrace("org.jboss.deployers"); } public void testBshNonMetadataDeploy() throws Throwable { MainDeployerImpl main = new MainDeployerImpl(); main.setStructuralDeployers(createStructuralDeployers()); addStructureDeployer(main, new JARStructure()); MockBshDeployer bshDeployer = new MockBshDeployer(); FileStructure fileStructure = new FileStructure(); fileStructure.addFileMatcher(bshDeployer); addStructureDeployer(main, fileStructure); DeployersImpl deployers = new DeployersImpl(new AbstractController()); deployers.setMgtObjectCreator(new DefaultManagedObjectCreator()); deployers.addDeployer(bshDeployer); main.setDeployers(deployers); VFSDeployment deployment = createDeployment("/nonmetadata", "nmd.jar"); main.deploy(deployment); assertNotNull(bshDeployer.getScipts()); assertEquals(1, bshDeployer.getScipts().size()); BshScript script = bshDeployer.getScipts().iterator().next(); assertNotNull(script); assertNotNull(script.getProperties()); assertEquals("root", script.getName()); } } ././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/nonmetadata/NonMetadataDeployersTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000326610731620736033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.nonmetadata; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.deployer.nonmetadata.test.MockBshDeployerTestCase; /** * Non metadata deployers. * * @author Ales Justin */ public class NonMetadataDeployersTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Deployer Tests"); suite.addTest(MockBshDeployerTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/nonmetadata/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000755000175000017500000000000011620060442033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/nonmetadata/support/MockBshDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000442310765457144033463 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.nonmetadata.support; import java.io.InputStream; import java.util.Set; import java.util.HashSet; import org.jboss.deployers.vfs.spi.deployer.FileMatcher; import org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * Mock .bsh deployer. * * @author Ales Justin */ public class MockBshDeployer extends AbstractVFSParsingDeployer implements FileMatcher { private Set scipts = new HashSet(); public MockBshDeployer() { super(BshScript.class); setSuffix(".bsh"); } protected BshScript parse(VFSDeploymentUnit unit, VirtualFile file, BshScript root) throws Exception { InputStream inputStream = openStreamAndValidate(file); try { return new BshScript(inputStream); } finally { inputStream.close(); } } protected void init(VFSDeploymentUnit unit, BshScript metaData, VirtualFile file) throws Exception { scipts.add(metaData); } public Set getScipts() { return scipts; } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/nonmetadata/support/BshScript.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deplo0000644000175000017500000000324110731620736033450 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.deployer.nonmetadata.support; import java.util.Properties; import java.io.InputStream; import java.io.IOException; /** * @author Ales Justin */ public class BshScript { private Properties properties; private String name; public BshScript(InputStream in) throws IOException { this.properties = new Properties(); properties.load(in); } public Properties getProperties() { return properties; } public String getName() { if (name == null) name = properties.getProperty("name"); return name; } } libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/0000755000175000017500000000000011620060443033022 5ustar twernertwerner././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/te0000755000175000017500000000000011620060443033353 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/test/SchemaResolverXBTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/te0000644000175000017500000000343710772543652033403 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb.test; import junit.framework.Test; import org.jboss.test.deployers.vfs.xb.support.TestMetaData; /** * Schema resolver JBossXB test case. * * @author Ales Justin */ public class SchemaResolverXBTestCase extends AbstractSchemaResolverXBTest { public SchemaResolverXBTestCase(String name) { super(name); } public static Test suite() { return suite(SchemaResolverXBTestCase.class); } protected Class getOutput() { return TestMetaData.class; } protected String getSuffix() { return "-foobar.xml"; } protected String getName(TestMetaData metadata) { return metadata.getName(); } } ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/test/IncludeTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/te0000644000175000017500000000432411024202462033355 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb.test; import java.util.List; import junit.framework.Test; import org.jboss.test.deployers.vfs.xb.support.IncludeMetaData; import org.jboss.test.deployers.vfs.xb.support.TestMetaData; /** * Test include. * * @author Ales Justin */ public class IncludeTestCase extends AbstractSchemaResolverXBTest { public IncludeTestCase(String name) { super(name); } public static Test suite() { return suite(IncludeTestCase.class); } protected Class getOutput() { return IncludeMetaData.class; } protected String getSuffix() { return "-include.xml"; } protected String getName(IncludeMetaData metadata) { return metadata.getName(); } protected void assertMetaData(IncludeMetaData metaData) throws Exception { super.assertMetaData(metaData); List others = metaData.getOthers(); assertNotNull(others); int size = 2; assertEquals(size, others.size()); for(int i=0; i < size; i++) assertEquals("test" + (i+1), others.get(i).getName()); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/test/SchemaResolverXBPackageTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/te0000644000175000017500000000350410772543652033376 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb.test; import junit.framework.Test; import org.jboss.test.deployers.vfs.xb.support.other.OtherMetaData; /** * Schema resolver JBossXB package test case. * * @author Ales Justin */ public class SchemaResolverXBPackageTestCase extends AbstractSchemaResolverXBTest { public SchemaResolverXBPackageTestCase(String name) { super(name); } public static Test suite() { return suite(SchemaResolverXBPackageTestCase.class); } protected Class getOutput() { return OtherMetaData.class; } protected String getSuffix() { return "-other.xml"; } protected String getName(OtherMetaData metadata) { return metadata.getName(); } }././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/test/AbstractSchemaResolverXBTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/te0000644000175000017500000000614611023733714033371 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb.test; import java.net.URL; import java.util.Collections; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentContext; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentUnit; import org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.xb.XBDeployersTest; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; /** * Abstract schema resolver JBossXB test. * * @param exact output type * @author Ales Justin */ public abstract class AbstractSchemaResolverXBTest extends XBDeployersTest { public AbstractSchemaResolverXBTest(String name) { super(name); } protected abstract Class getOutput(); protected abstract String getSuffix(); protected abstract String getName(T metadata); public void testJBossXBParser() throws Throwable { SchemaResolverDeployer deployer = assertBean("deployer", SchemaResolverDeployer.class); assertEquals(getOutput(), deployer.getOutput()); assertEquals(getSuffix(), deployer.getSuffix()); assertTrue(deployer.isRegisterWithJBossXB()); String common = "/org/jboss/test/deployers/vfs/xb/test"; URL url = getClass().getResource(common); assertNotNull(url); VirtualFile file = VFS.getRoot(url); assertNotNull(file); VFSDeploymentContext context = new AbstractVFSDeploymentContext(file, ""); context.setMetaDataLocations(Collections.singletonList(file)); AbstractVFSDeploymentUnit unit = new AbstractVFSDeploymentUnit(context); deployer.deploy(unit); try { T metaData = unit.getAttachment(getOutput()); assertMetaData(metaData); } finally { deployer.undeploy(unit); } } protected void assertMetaData(T metaData) throws Exception { assertNotNull(metaData); assertEquals("mymetadata", getName(metaData)); } }././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/XBDeployersTestDelegate.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/XB0000644000175000017500000000327010772475367033306 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb; import java.net.URL; import org.jboss.test.kernel.junit.MicrocontainerTestDelegate; /** * @author Ales Justin */ public class XBDeployersTestDelegate extends MicrocontainerTestDelegate { protected XBDeployersTestDelegate(Class clazz) throws Exception { super(clazz); } protected void deploy() throws Exception { String common = "/org/jboss/test/deployers/vfs/xb/Common.xml"; URL url = getClass().getResource(common); if (url == null) throw new IllegalStateException(common + " not found"); deploy(url); super.deploy(); } }././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/XBDeployersTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/XB0000644000175000017500000000322510772475367033306 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb; import org.jboss.test.AbstractTestDelegate; import org.jboss.test.kernel.junit.MicrocontainerTest; /** * @author Ales Justin */ public abstract class XBDeployersTest extends MicrocontainerTest { public XBDeployersTest(String name) { super(name); } /** * Get the test delegate * * @param clazz the test class * @return the delegate * @throws Exception for any error */ public static AbstractTestDelegate getDelegate(Class clazz) throws Exception { return new XBDeployersTestDelegate(clazz); } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/JBossXBDeployersTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/JB0000644000175000017500000000362111023733714033247 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.xb.test.IncludeTestCase; import org.jboss.test.deployers.vfs.xb.test.SchemaResolverXBPackageTestCase; import org.jboss.test.deployers.vfs.xb.test.SchemaResolverXBTestCase; /** * JBossXB deployers extensions. * * @author Ales Justin */ public class JBossXBDeployersTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("JBossXB Deployers Tests"); suite.addTest(SchemaResolverXBTestCase.suite()); suite.addTest(SchemaResolverXBPackageTestCase.suite()); suite.addTest(IncludeTestCase.suite()); return suite; } }././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/su0000755000175000017500000000000011620060443033372 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/support/TestMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/su0000644000175000017500000000345510776436324033423 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb.support; import java.io.Serializable; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlAttribute; import org.jboss.xb.annotations.JBossXmlSchema; /** * @author Ales Justin */ @JBossXmlSchema(namespace="urn:jboss:mytest:1.0", elementFormDefault=XmlNsForm.QUALIFIED) @XmlRootElement(name="jboss-test") public class TestMetaData implements Serializable { /** The serialVersionUID */ private static final long serialVersionUID = 1L; private String name; public String getName() { return name; } @XmlAttribute(required = true) public void setName(String name) { this.name = name; } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/support/IncludeMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/su0000644000175000017500000000446311023733714033410 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb.support; import java.io.Serializable; import java.util.List; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import org.jboss.xb.annotations.JBossXmlSchema; /** * @author Ales Justin */ @JBossXmlSchema(namespace="urn:jboss:include:1.0", elementFormDefault=XmlNsForm.QUALIFIED) @XmlRootElement(name="jboss-include", namespace = "urn:jboss:include:1.0") @XmlType( name="includeType", namespace="urn:jboss:include:1.0", propOrder={"others"} ) public class IncludeMetaData implements Serializable { /** The serialVersionUID */ private static final long serialVersionUID = 1L; private String name; private List others; public String getName() { return name; } @XmlAttribute(required = true) public void setName(String name) { this.name = name; } public List getOthers() { return others; } @XmlElement(name = "jboss-test") public void setOthers(List others) { this.others = others; } }././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/support/other/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/su0000755000175000017500000000000011620060443033372 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/support/other/package-info.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/su0000644000175000017500000000235710772543652033422 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ @JBossXmlSchema(namespace="urn:jboss:myother:1.0", elementFormDefault=XmlNsForm.QUALIFIED) package org.jboss.test.deployers.vfs.xb.support.other; import javax.xml.bind.annotation.XmlNsForm; import org.jboss.xb.annotations.JBossXmlSchema; ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/support/other/OtherMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/xb/su0000644000175000017500000000317710776436324033424 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.xb.support.other; import java.io.Serializable; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; /** * @author Ales Justin */ @XmlRootElement(name="jboss-other") public class OtherMetaData implements Serializable { /** The serialVersionUID */ private static final long serialVersionUID = 1L; private String name; public String getName() { return name; } @XmlAttribute(required = true) public void setName(String name) { this.name = name; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/managed/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/manag0000755000175000017500000000000011620060444033416 5ustar twernertwerner././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/managed/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/manag0000755000175000017500000000000011620060444033416 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/managed/test/BeanMetaDataICFTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/manag0000644000175000017500000000632010705672350033431 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.managed.test; import junit.framework.Test; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData; import org.jboss.deployers.vfs.deployer.kernel.managed.BeanInstanceClassFactory; import org.jboss.managed.api.ManagedObject; import org.jboss.managed.api.factory.ManagedObjectFactory; import org.jboss.test.BaseTestCase; import org.jboss.test.deployers.vfs.managed.support.PlainMCBean; import org.jboss.test.deployers.vfs.managed.support.MCBeanWithRuntimeName; /** * Test bean meta data ICF. * * @author Ales Justin */ public class BeanMetaDataICFTestCase extends BaseTestCase { public BeanMetaDataICFTestCase(String name) { super(name); } public static Test suite() { return suite(BeanMetaDataICFTestCase.class); } public void testICF() throws Exception { ManagedObjectFactory factory = ManagedObjectFactory.getInstance(); BeanInstanceClassFactory instanceClassFactory = new BeanInstanceClassFactory(); factory.setInstanceClassFactory(AbstractBeanMetaData.class, instanceClassFactory); try { AbstractBeanMetaData plainMCBean = new AbstractBeanMetaData("plain", PlainMCBean.class.getName()); plainMCBean.addProperty(new AbstractPropertyMetaData("id", "PlainMCBean")); ManagedObject mo = factory.initManagedObject(plainMCBean, "PlainMCBean", "MC"); assertNotNull(mo); assertEquals("plain", mo.getComponentName()); AbstractBeanMetaData runtimeMCBean = new AbstractBeanMetaData("runtime", MCBeanWithRuntimeName.class.getName()); runtimeMCBean.addProperty(new AbstractPropertyMetaData("id", "RuntimeMCBean")); runtimeMCBean.addProperty(new AbstractPropertyMetaData("componentName", "FromObjectRuntime")); ManagedObject mo2 = factory.initManagedObject(runtimeMCBean, "RuntimeMCBean", "MC"); assertNotNull(mo2); assertEquals("FromObjectRuntime", mo2.getComponentName()); } finally { factory.setInstanceClassFactory(AbstractBeanMetaData.class, null); } } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/managed/VFSManagedTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/manag0000644000175000017500000000321610705672350033432 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.managed; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.managed.test.BeanMetaDataICFTestCase; /** * VFS managed testsuite. * * @author Ales Justin */ public class VFSManagedTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Managed Tests"); suite.addTest(BeanMetaDataICFTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/managed/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/manag0000755000175000017500000000000011620060444033416 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/managed/support/MCBeanWithRuntimeName.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/manag0000644000175000017500000000345510705672350033437 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.managed.support; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectID; import org.jboss.managed.api.annotation.ManagementRuntimeRef; /** * @author Ales Justin */ @ManagementObject public class MCBeanWithRuntimeName { private String id; private String componentName; @ManagementObjectID(type = "MCBean") public String getId() { return id; } public void setId(String id) { this.id = id; } @ManagementRuntimeRef public String getComponentName() { return componentName; } public void setComponentName(String componentName) { this.componentName = componentName; } } ././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/managed/support/PlainMCBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/manag0000644000175000017500000000275010705672350033434 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.managed.support; import org.jboss.managed.api.annotation.ManagementObject; import org.jboss.managed.api.annotation.ManagementObjectID; /** * @author Ales Justin */ @ManagementObject public class PlainMCBean { private String id; @ManagementObjectID(type = "MCBean") public String getId() { return id; } public void setId(String id) { this.id = id; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/dependency/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/depen0000755000175000017500000000000011620060444033426 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/dependency/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/depen0000755000175000017500000000000011620060444033426 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/dependency/test/DependenciesTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/depen0000644000175000017500000001213511137607542033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.dependency.test; import junit.framework.Test; import org.jboss.dependency.spi.ControllerContext; import org.jboss.dependency.spi.ControllerState; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; /** * DependenciesTestCase. * * @author Ales Justin */ public class DependenciesTestCase extends BootstrapDeployersTest { public DependenciesTestCase(String name) { super(name); } public static Test suite() { return suite(DependenciesTestCase.class); } protected void assertDeployment(DeploymentUnit unit, ControllerState state) { ControllerContext context = unit.getAttachment(ControllerContext.class); assertNotNull(context); assertEquals(state, context.getState()); } public void testBeanDependency() throws Throwable { DeploymentUnit du = addDeployment("/dependency", "bean"); try { assertDeployment(du, new ControllerState("PreReal")); DeploymentUnit tmDU = assertDeploy("/dependency", "support"); try { assertDeployment(du, ControllerState.INSTALLED); } finally { undeploy(tmDU); } } finally { undeploy(du); } } public void testModuleAndAliasDependency() throws Throwable { DeploymentUnit du = addDeployment("/dependency", "module"); try { assertDeployment(du, ControllerState.PRE_INSTALL); DeploymentUnit aliasDU = assertDeploy("/dependency", "alias"); try { assertDeployment(aliasDU, ControllerState.INSTALLED); assertDeployment(du, ControllerState.INSTALLED); } finally { undeploy(aliasDU); } } finally { undeploy(du); } } public void testNestedDependency() throws Throwable { DeploymentUnit du = addDeployment("/dependency", "nested"); try { assertDeployment(du, new ControllerState("PreReal")); DeploymentUnit tmDU = assertDeploy("/dependency", "support"); try { assertDeployment(du, ControllerState.INSTALLED); } finally { undeploy(tmDU); } } finally { undeploy(du); } } public void testBeanRedeploy() throws Throwable { DeploymentUnit du = addDeployment("/dependency", "bean"); try { assertDeployment(du, new ControllerState("PreReal")); DeploymentUnit tmDU = assertDeploy("/dependency", "support"); try { assertDeployment(du, ControllerState.INSTALLED); undeploy(tmDU); assertDeployment(du, new ControllerState("PreReal")); tmDU = assertDeploy("/dependency", "support"); assertDeployment(du, ControllerState.INSTALLED); } finally { undeploy(tmDU); } } finally { undeploy(du); } } public void testModuleAndAliasRedeploy() throws Throwable { DeploymentUnit du = addDeployment("/dependency", "module"); try { assertDeployment(du, ControllerState.PRE_INSTALL); DeploymentUnit aliasDU = assertDeploy("/dependency", "alias"); try { assertDeployment(aliasDU, ControllerState.INSTALLED); assertDeployment(du, ControllerState.INSTALLED); undeploy(aliasDU); assertDeployment(du, ControllerState.PRE_INSTALL); aliasDU = assertDeploy("/dependency", "alias"); assertDeployment(du, ControllerState.INSTALLED); } finally { undeploy(aliasDU); } } finally { undeploy(du); } } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/dependency/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/depen0000755000175000017500000000000011620060444033426 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/dependency/support/MockTM.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/depen0000644000175000017500000000230111113261537033427 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.dependency.support; /** * @author Ales Justin */ public class MockTM { } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/dependency/DependencyTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/depen0000644000175000017500000000327711113261537033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.dependency; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.dependency.test.DependenciesTestCase; /** * DependencyTestSuite. * * @author Ales Justin */ public class DependencyTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Dependency Scanning Tests"); suite.addTest(DependenciesTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/test/TerminateStructureTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000001157611046531125033510 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.test; import junit.framework.Test; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; /** * Terminate test case. * * @author Ales Justin */ public class TerminateStructureTestCase extends AbstractStructureTest { public TerminateStructureTestCase(String name) { super(name); } public static Test suite() { return suite(TerminateStructureTestCase.class); } protected StructureDeployer[] getStructureDeployers(int failNumber, int size, boolean checkCause) { StructureDeployer[] deployers = new StructureDeployer[size]; for(int i = 0; i < size; i++) { if (i == failNumber) { if (checkCause) deployers[i] = new REStructureDeployer(i); else deployers[i] = new FailStructureDeployer(i); } else deployers[i] = new PassStructureDeployer(i); } return deployers; } protected void checkFailedNumber(VFSDeployment deployment, int failNumber, int size, boolean checkCause) throws Exception { try { determineStructureWithStructureDeployers(deployment, getStructureDeployers(failNumber, size, checkCause)); fail("Should not be here."); } catch (Throwable t) { if (checkCause) t = t.getCause(); String msg = t.getMessage(); int number = Integer.parseInt(msg); assertEquals(failNumber, number); } } public void testTerminate() throws Exception { // some deployment VFSDeployment deployment = createDeployment("/structure/file", "simple"); checkFailedNumber(deployment, 0, 3, false); checkFailedNumber(deployment, 1, 3, false); checkFailedNumber(deployment, 2, 3, false); } public void testRuntimeTerminate() throws Exception { // some deployment VFSDeployment deployment = createDeployment("/structure/file", "simple"); checkFailedNumber(deployment, 0, 3, true); checkFailedNumber(deployment, 1, 3, true); checkFailedNumber(deployment, 2, 3, true); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { throw new UnsupportedOperationException("No use case."); } private class PassStructureDeployer extends AbstractVFSStructureDeployer { public PassStructureDeployer(int order) { setRelativeOrder(order); } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { return false; } } private class FailStructureDeployer extends AbstractVFSStructureDeployer { public FailStructureDeployer(int order) { setRelativeOrder(order); } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { throw new DeploymentException(String.valueOf(getRelativeOrder())); } } private class REStructureDeployer extends AbstractVFSStructureDeployer { public REStructureDeployer(int order) { setRelativeOrder(order); } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { throw new RuntimeException(String.valueOf(getRelativeOrder())); } } } ././@LongLink0000000000000000000000000000023700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/test/StructureDeployerContextClassLoaderTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000667610746226606033530 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.test; import junit.framework.Test; import org.jboss.deployers.vfs.plugins.structure.VFSStructuralDeployersImpl; import org.jboss.deployers.vfs.plugins.structure.VFSStructureBuilder; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; import org.jboss.test.deployers.vfs.structure.support.TestDummyClassLoader; import org.jboss.test.deployers.vfs.structure.support.TestDummyClassLoaderStructureDeployer; /** * StructureDeployerContextClassLoaderTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureDeployerContextClassLoaderTestCase extends AbstractStructureTest { public StructureDeployerContextClassLoaderTestCase(String name) { super(name); } public static Test suite() { return suite(StructureDeployerContextClassLoaderTestCase.class); } public void testContextClassLoader() throws Exception { TestDummyClassLoader dummy = new TestDummyClassLoader(); VFSStructuralDeployersImpl structuralDeployers = new VFSStructuralDeployersImpl(); VFSStructureBuilder builder = new VFSStructureBuilder(); structuralDeployers.setStructureBuilder(builder); structuralDeployers.addDeployer(new JARStructure()); structuralDeployers.addDeployer(new FileStructure()); ClassLoader previous = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(dummy); try { TestDummyClassLoaderStructureDeployer deployer = new TestDummyClassLoaderStructureDeployer(); structuralDeployers.addDeployer(deployer); } finally { Thread.currentThread().setContextClassLoader(previous); } VFSDeployment deployment = createDeployment("/structure/file", "simple"); structuralDeployers.determineStructure(deployment); assertEquals(dummy, TestDummyClassLoaderStructureDeployer.getAndResetClassLoader()); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { throw new UnsupportedOperationException("not used"); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/AbstractJARStructureTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000640711054516703033511 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.jar.test; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; /** * AbstractJARStructureTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractJARStructureTest extends AbstractStructureTest { public AbstractJARStructureTest(String name) { super(name); } public void testSimple() throws Throwable { assertDeployNoChildren("/structure/jar", "simple"); } public void testRootNotAnArchive() throws Throwable { assertNotValid("/structure/jar/notanarchive", "NotAnArchive.jar"); assertNotValid("/structure/jar/notanarchive", "NotAnArchive.zip"); } public void testSubdeploymentNotAnArchive() throws Throwable { assertDeployNoChildren("/structure/jar", "notanarchive"); } public void testJarAsRoot() throws Throwable { assertDeployNoChildren("/structure/jar/indirectory", "archive.jar"); assertDeployNoChildren("/structure/jar/indirectory", "archive.zip"); } public void testJarInDirectory() throws Throwable { VFSDeploymentContext context = assertDeploy("/structure/jar", "indirectory"); assertChildContexts(context, "archive.jar", "archive.zip"); } public void testSubdirectoryNotAJar() throws Throwable { assertDeployNoChildren("/structure/jar", "subdirnotajar"); } public void testSubdirectoryIsAJar() throws Throwable { VFSDeploymentContext context = assertDeploy("/structure/jar", "subdirisajar"); assertChildContexts(context, "sub.jar"); } public void testDirectoryHasMetaInf() throws Throwable { assertDeployNoChildren("/structure/jar/subdirhasmetainf", "sub"); } public void testSubdirectoryHasMetaInf() throws Throwable { VFSDeploymentContext context = assertDeploy("/structure/jar", "subdirhasmetainf"); assertChildContexts(context, "sub"); } public void testSubdeploymentIsKnownFile() throws Throwable { assertDeployNoChildren("/structure/file", "simple"); } public void testSubdeploymentIsUnknownFile() throws Throwable { assertDeployNoChildren("/structure/file", "unknown"); } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/JARStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000353210640504614033503 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.jar.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; /** * JARStructureUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class JARStructureUnitTestCase extends AbstractJARStructureTest { public static Test suite() { return new TestSuite(JARStructureUnitTestCase.class); } public JARStructureUnitTestCase(String name) { super(name); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithStructureDeployer(deployment, new JARStructure()); } } ././@LongLink0000000000000000000000000000024000000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/ConfiguredSuffixJARStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000620310741763423033510 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.jar.test; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.test.BaseTestCase; import org.jboss.virtual.plugins.context.jar.JarUtils; /** * ConfiguredSuffixJARStructureUnitTestCase. * * @author kabir@jboss.org * @author Adrian Brock * @version $Revision: 1.1 $ */ public class ConfiguredSuffixJARStructureUnitTestCase extends BaseTestCase { /** The file structure deployer */ private static final Set defaultSuffixes = JarUtils.getSuffixes(); public static Test suite() { return new TestSuite(ConfiguredSuffixJARStructureUnitTestCase.class); } public ConfiguredSuffixJARStructureUnitTestCase(String name) { super(name); } public void testDefaults() throws Exception { assertNotNull("default suffixes should not be null", defaultSuffixes); assertTrue("default suffixes size should be > 0", defaultSuffixes.size() > 0); } public void testNewUsingDefaults() throws Exception { JARStructure structure = new JARStructure(); Set suffixes = structure.getSuffixes(); assertNotNull(suffixes); assertEquals(defaultSuffixes + " != " + suffixes, defaultSuffixes.size(), suffixes.size()); for (String suff : defaultSuffixes) { suffixes.contains(suff); } } public void testOverwriteDefaults() throws Exception { try { Set newSuffixes = new HashSet(); newSuffixes.add(".bar"); newSuffixes.add(".tar"); newSuffixes.add(".far"); JARStructure structure = new JARStructure(newSuffixes); Set suffixes = structure.getSuffixes(); assertNotNull(suffixes); assertEquals(3, suffixes.size()); assertTrue(suffixes.contains(".bar")); assertTrue(suffixes.contains(".tar")); assertTrue(suffixes.contains(".far")); } finally { JarUtils.setJarSuffixes(defaultSuffixes); } } } ././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/CombinedJARStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000443411054516703033507 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.jar.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; /** * CombinedJARStructureUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class CombinedJARStructureUnitTestCase extends AbstractJARStructureTest { public static Test suite() { return new TestSuite(CombinedJARStructureUnitTestCase.class); } public CombinedJARStructureUnitTestCase(String name) { super(name); } public void testRootNotAnArchive() throws Throwable { assertNotValid("/structure/jar/notanarchive", "NotAnArchive.jar"); assertNotValid("/structure/jar/notanarchive", "NotAnArchive.zip"); } public void testSubdeploymentIsKnownFile() throws Throwable { // The file structure recognises the subdeployer for the combined test VFSDeploymentContext context = assertDeploy("/structure/file", "simple"); assertChildContexts(context, "simple-service.xml"); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithAllStructureDeployers(deployment); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/dir/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/dir/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/dir/test/DirStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000614611070140372033502 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.dir.test; import junit.framework.Test; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.plugins.structure.dir.DirectoryStructure; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; import org.jboss.test.deployers.vfs.structure.ear.support.MockEarStructureDeployer; /** * Legacy directory structure tests. * See JBAS-5900 for more information. * * @author Ales Justin */ public class DirStructureUnitTestCase extends AbstractStructureTest { public DirStructureUnitTestCase(String name) { super(name); } public static Test suite() { return suite(DirStructureUnitTestCase.class); } @SuppressWarnings("deprecation") protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithStructureDeployers(deployment, new MockEarStructureDeployer(), new JARStructure(), new DirectoryStructure()); } public void testSarWithLib() throws Throwable { VFSDeploymentContext context = assertDeploy("/structure/dir", "test-in-lib.sar"); assertChildContexts(context, "lib/test.jar"); } public void testSarWithNestedLib() throws Throwable { VFSDeploymentContext context = assertDeploy("/structure/dir", "test-in-lib-nested.sar"); assertChildContexts(context, "lib/nested/test.jar"); } public void testEarSarWithLib() throws Throwable { VFSDeploymentContext context = assertDeploy("/structure/dir", "simple.ear"); assertChildContexts(context, "test-in-lib.sar", "test-in-lib.sar/lib/test.jar"); } public void testEarSarWithNestedLib() throws Throwable { VFSDeploymentContext context = assertDeploy("/structure/dir", "nested.ear"); assertChildContexts(context, "test-in-lib-nested.sar", "test-in-lib-nested.sar/lib/nested/test.jar"); } } ././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/dir/test/RealDirStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000651011070140372033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.dir.test; import junit.framework.Test; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.deployers.vfs.plugins.structure.dir.DirectoryStructure; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.kernel.spi.dependency.KernelControllerContext; import org.jboss.test.deployers.BootstrapDeployersTest; import org.jboss.test.deployers.vfs.structure.ear.support.MockEarStructureDeployer; /** * Legacy directory structure tests. * See JBAS-5900 for more information. * * @author Ales Justin */ public class RealDirStructureUnitTestCase extends BootstrapDeployersTest { public RealDirStructureUnitTestCase(String name) { super(name); } public static Test suite() { return suite(RealDirStructureUnitTestCase.class); } @SuppressWarnings("deprecation") protected void assertDeploy(String file) throws Throwable { BeanMetaData earStructureBMD = new AbstractBeanMetaData("EarStructure", MockEarStructureDeployer.class.getName()); KernelControllerContext earContext = deploy(earStructureBMD); try { BeanMetaData dirStructureBMD = new AbstractBeanMetaData("DirStructure", DirectoryStructure.class.getName()); KernelControllerContext dirContext = deploy(dirStructureBMD); try { VFSDeploymentUnit unit = assertDeploy("/structure/dir", file); try { assertNotNull(getBean("test:service=TestMessage")); } finally { undeploy(unit); } } finally { undeploy(dirContext); } } finally { undeploy(earContext); } } public void testSarWithLib() throws Throwable { assertDeploy("test-in-lib.sar"); } public void testSarWithNestedLib() throws Throwable { assertDeploy("test-in-lib-nested.sar"); } public void testEarSarWithLib() throws Throwable { assertDeploy("simple.ear"); } public void testEarSarWithNestedLib() throws Throwable { assertDeploy("nested.ear"); } }././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/AbstractWARStructureTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000604111003605063033473 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.war.test; import java.util.List; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; import org.jboss.virtual.VirtualFile; /** * AbstractWARStructureTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractWARStructureTest extends AbstractStructureTest { public AbstractWARStructureTest(String name) { super(name); } public void testSimple() throws Throwable { assertDeployNoChildren("/structure/war/simple", "simple.war"); } public void testNotAnArchive() throws Throwable { assertNotValid("/structure/war/notanarchive", "notanarchive.war"); } public void testWarDirectory() throws Throwable { assertDeployNoChildren("/structure/war", "directory.war"); } public void testDirectoryNotAWar() throws Throwable { assertNotValid("/structure/war", "directorynotawar"); } public void testMetainfMetadata() throws Throwable { VFSDeploymentContext war = assertDeploy("/structure/war", "metainf.war"); VirtualFile persistence = war.getMetaDataFile("persistence.xml"); assertNotNull(persistence); } public void testDirectoryWithWebInf() throws Throwable { VFSDeploymentContext war = assertDeployNoChildren("/structure/war", "directorywithwebinf"); List classpath = war.getClassPath(); assertNotNull("classpath", classpath); assertEquals("classpath.size = 3", 3, classpath.size()); VirtualFile warFile = war.getRoot(); VirtualFile classes = warFile.findChild("WEB-INF/classes"); assertTrue("WEB-INF/classes in classpath", classpath.contains(classes)); VirtualFile j0 = warFile.findChild("WEB-INF/lib/j0.jar"); assertTrue("WEB-INF/lib/j0.jar in classpath", classpath.contains(j0)); VirtualFile j1 = warFile.findChild("WEB-INF/lib/j1.jar"); assertTrue("WEB-INF/lib/j1.jar in classpath", classpath.contains(j1)); } } ././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/WARUnpackUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000407611001632225033477 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.war.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; import org.jboss.test.deployers.vfs.structure.support.WarUnpackStructure; /** * WARUnpackUnitTestCase. * * @author Ales Justin */ public class WARUnpackUnitTestCase extends AbstractStructureTest { public static Test suite() { return new TestSuite(WARUnpackUnitTestCase.class); } public WARUnpackUnitTestCase(String name) { super(name); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithStructureDeployer(deployment, new WarUnpackStructure()); } public void testWarDeployerUnpack() throws Throwable { VFSDeploymentContext root = assertDeploy("/structure/war/simple", "simple.war"); assertUnpacked(root.getRoot()); } }././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/CombinedWARStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000416111054516703033504 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.war.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; /** * CombinedWARStructureUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class CombinedWARStructureUnitTestCase extends AbstractWARStructureTest { public static Test suite() { return new TestSuite(CombinedWARStructureUnitTestCase.class); } public CombinedWARStructureUnitTestCase(String name) { super(name); } public void testDirectoryNotAWar() throws Throwable { // The jar deployer recognises in the combined test assertDeployNoChildren("/structure/war", "directorynotawar"); } public void testNotAnArchive() throws Throwable { assertNotValid("/structure/war/notanarchive", "notanarchive.war"); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithAllStructureDeployers(deployment); } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/WARStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000353210640504614033503 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.war.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.plugins.structure.war.WARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; /** * WARStructureUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class WARStructureUnitTestCase extends AbstractWARStructureTest { public static Test suite() { return new TestSuite(WARStructureUnitTestCase.class); } public WARStructureUnitTestCase(String name) { super(name); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithStructureDeployer(deployment, new WARStructure()); } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/support/MockWarStructureDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000001763511113261537033514 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.war.support; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VirtualFileFilter; import org.jboss.virtual.VisitorAttributes; import org.jboss.virtual.plugins.vfs.helpers.SuffixMatchFilter; /** * MockWarStructure. * * @author Adrian Brock * @author Ales Justin */ public class MockWarStructureDeployer extends AbstractVFSStructureDeployer { /** The default filter which allows jars/jar directories */ public static final VirtualFileFilter DEFAULT_WEB_INF_LIB_FILTER = new SuffixMatchFilter(".jar", VisitorAttributes.DEFAULT); /** The web-inf/lib filter */ private VirtualFileFilter webInfLibFilter = DEFAULT_WEB_INF_LIB_FILTER; /** The web-inf/lib/[some-archive]/META-INF filter */ private VirtualFileFilter webInfLibMetaDataFilter; /** * Sets the default relative order 1000. * */ public MockWarStructureDeployer() { setRelativeOrder(1000); } /** * Get the webInfLibFilter. * * @return the webInfLibFilter. */ public VirtualFileFilter getWebInfLibFilter() { return webInfLibFilter; } /** * Set the webInfLibFilter. * * @param webInfLibFilter the webInfLibFilter. * @throws IllegalArgumentException for a null filter */ public void setWebInfLibFilter(VirtualFileFilter webInfLibFilter) { if (webInfLibFilter == null) throw new IllegalArgumentException("Null filter"); this.webInfLibFilter = webInfLibFilter; } /** * Get webInfLibMetaDataFilter * * @return the webInfLibMetaDataFilter */ public VirtualFileFilter getWebInfLibMetaDataFilter() { return webInfLibMetaDataFilter; } /** * Set the webInfLibMetaDataFilter. * * @param webInfLibMetaDataFilter the webInfLibFilter. */ public void setWebInfLibMetaDataFilter(VirtualFileFilter webInfLibMetaDataFilter) { this.webInfLibMetaDataFilter = webInfLibMetaDataFilter; } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { ContextInfo context = null; VirtualFile file = structureContext.getFile(); try { boolean trace = log.isTraceEnabled(); if (isLeaf(file) == false) { // We require either a WEB-INF or the name ends in .war if (file.getName().endsWith(".war") == false) { try { VirtualFile child = file.getChild("WEB-INF"); if (child != null) { if (trace) log.trace("... ok - directory has a WEB-INF subdirectory"); } else { if (trace) log.trace("... no - doesn't look like a war and no WEB-INF subdirectory."); return false; } } catch (IOException e) { log.warn("Exception while checking if file is a war: " + e); return false; } } else if (trace) { log.trace("... ok - name ends in .war."); } List metaDataLocations = new ArrayList(); metaDataLocations.add("WEB-INF"); // Check for WEB-INF/classes VirtualFile classes = null; try { // The classpath contains WEB-INF/classes classes = file.getChild("WEB-INF/classes"); // Check for a META-INF for metadata if (classes != null) metaDataLocations.add("WEB-INF/classes/META-INF"); } catch(IOException e) { log.warn("Exception while looking for classes, " + file.getPathName() + ", " + e); } // Check for jars in WEB-INF/lib List archives = null; try { VirtualFile webinfLib = file.getChild("WEB-INF/lib"); if (webinfLib != null) { archives = webinfLib.getChildren(webInfLibFilter); // Add the jars' META-INF for metadata for (VirtualFile jar : archives) { // either same as plain lib filter, null or accepts the jar if (webInfLibMetaDataFilter == null || webInfLibMetaDataFilter == webInfLibFilter || webInfLibMetaDataFilter.accepts(jar)) metaDataLocations.add("WEB-INF/lib/" + jar.getName() + "/META-INF"); } } } catch (IOException e) { log.warn("Exception looking for WEB-INF/lib, " + file.getPathName() + ", " + e); } // Create a context for this war file and all its metadata locations context = createContext(structureContext, metaDataLocations.toArray(new String[metaDataLocations.size()])); // Add the war manifest classpath entries addClassPath(structureContext, file, false, true, context); // Add WEB-INF/classes if present if (classes != null) addClassPath(structureContext, classes, true, false, context); else if (trace) log.trace("No WEB-INF/classes for: " + file.getPathName()); // and the top level jars in WEB-INF/lib if (archives != null) { for (VirtualFile jar : archives) addClassPath(structureContext, jar, true, true, context); } else if (trace) { log.trace("No WEB-INF/lib for: " + file.getPathName()); } // There are no subdeployments for wars return true; } else { if (trace) log.trace("... no - not a directory or an archive."); return false; } } catch (Exception e) { // Remove the invalid context if (context != null) structureContext.removeChild(context); throw DeploymentException.rethrowAsDeploymentException("Error determining structure: " + file.getName(), e); } } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/explicit/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/explicit/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/explicit/test/DeclaredStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000552310640504614033510 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.explicit.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.plugins.structure.explicit.DeclaredStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; /** * DeclaredStructure deployer unit tests. * * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public class DeclaredStructureUnitTestCase extends AbstractStructureTest { public static Test suite() { return new TestSuite(DeclaredStructureUnitTestCase.class); } public DeclaredStructureUnitTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); enableTrace("org.jboss.deployers"); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithStructureDeployer(deployment, new DeclaredStructure()); } public void testComplex() throws Throwable { VFSDeploymentContext root = assertDeploy("/structure/explicit", "complex.deployer"); assertChildContexts(root, "sub.jar", "x.war"); // Validate the root context info assertMetaData(root, "META-INF"); assertClassPath(root, "cp-mf.jar", "jar1.jar", "lib-dir/jar0.jar", "lib-dir/jar2.jar"); // Validate the sub.jar VFSDeploymentContext subJar = assertChildContext(root, "sub.jar"); assertMetaData(subJar, "META-INF"); assertClassPath(subJar, root, "cp-mf.jar"); // Validate the x.war context info VFSDeploymentContext xwar = assertChildContext(root, "x.war"); assertMetaData(xwar, "WEB-INF"); assertClassPath(xwar, "WEB-INF/classes", "WEB-INF/lib/w0.jar"); } } ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/explicit/test/ModificationTypeUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000531411050212001033461 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.explicit.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.plugins.structure.explicit.DeclaredStructure; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.plugins.structure.war.WARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; /** * MultipleMetadataStructure deployer unit tests. * * @author Ales Justin */ public class ModificationTypeUnitTestCase extends AbstractStructureTest { public static Test suite() { return new TestSuite(ModificationTypeUnitTestCase.class); } public ModificationTypeUnitTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); enableTrace("org.jboss.deployers"); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { // TODO - check serialization of modifed roots return determineStructureWithStructureDeployers(deployment, false, new DeclaredStructure(), new JARStructure(), new WARStructure(), new FileStructure()); } public void testExplicitInnerUnpack() throws Throwable { VFSDeploymentContext root = assertDeploy("/structure/explicit", "explicit.ear"); assertChildContexts(root, "inner.war"); assertUnpacked(root.getRoot().findChild("inner.war")); } }././@LongLink0000000000000000000000000000024200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/explicit/test/MultipleMetadataStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000634110731616564033515 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.explicit.test; import java.util.List; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.plugins.structure.explicit.DeclaredStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.virtual.VirtualFile; import junit.framework.Test; import junit.framework.TestSuite; /** * MultipleMetadataStructure deployer unit tests. * * @author Ales Justin */ public class MultipleMetadataStructureUnitTestCase extends AbstractStructureTest { public static Test suite() { return new TestSuite(MultipleMetadataStructureUnitTestCase.class); } public MultipleMetadataStructureUnitTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); enableTrace("org.jboss.deployers"); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithStructureDeployers(deployment, new DeclaredStructure(), new JARStructure(), new FileStructure()); } public void testMultipleMetadata() throws Throwable { VFSDeploymentContext root = assertDeploy("/structure/multiple", "metadata.deployer"); assertChildContexts(root, "jar1.jar"); // Validate the root context info assertMetaDatas(root, "META-INF", "jmx/interceptors", "jmx/interceptors/scripts"); assertClassPath(root, "jar1.jar"); VirtualFile bsh = root.getMetaDataFile("myscript.bsh"); assertNotNull(bsh); List bshs = root.getMetaDataFiles(null, ".bsh"); assertNotNull(bshs); assertEquals(1, bshs.size()); VirtualFile security = root.getMetaDataFile("security-config.xml"); assertNotNull(security); List cfgs = root.getMetaDataFiles(null, "-config.xml"); assertNotNull(cfgs); assertEquals(1, cfgs.size()); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/FileMatcherTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000001604011137607542033507 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.file.test; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.dependency.spi.ControllerState; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.bootstrap.basic.BasicBootstrap; import org.jboss.kernel.spi.dependency.KernelController; import org.jboss.kernel.spi.dependency.KernelControllerContext; import org.jboss.test.BaseTestCase; import org.jboss.test.deployers.vfs.structure.file.support.BshFileMatcher; import org.jboss.test.deployers.vfs.structure.file.support.TmpFileStructure; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.spi.VFSContext; import org.jboss.virtual.spi.VirtualFileHandler; /** * FileMatcherTestCase. * * @author Ales Justin */ public class FileMatcherTestCase extends BaseTestCase { public static Test suite() { return new TestSuite(FileMatcherTestCase.class); } public FileMatcherTestCase(String name) { super(name); } protected VirtualFile getVirtualFile() throws Throwable { return new MyVirtualFile(); } public void testMatcher() throws Throwable { BasicBootstrap bootstrap = new BasicBootstrap(); bootstrap.run(); Kernel kernel = bootstrap.getKernel(); KernelController controller = kernel.getController(); try { BeanMetaData fsMD = new AbstractBeanMetaData("fileStructure", TmpFileStructure.class.getName()); KernelControllerContext fsCC = controller.install(fsMD); assertEquals(fsCC.getState(), ControllerState.INSTALLED); TmpFileStructure fs = (TmpFileStructure)fsCC.getTarget(); assertNotNull(fs); VirtualFile file = getVirtualFile(); assertFalse(fs.checkFileMatchers(file)); BeanMetaData fmMD = new AbstractBeanMetaData("bshFileMatcher", BshFileMatcher.class.getName()); controller.install(fmMD); assertTrue(fs.checkFileMatchers(file)); controller.uninstall(fmMD.getName()); assertFalse(fs.checkFileMatchers(file)); } finally { controller.shutdown(); } } private static class MyVirtualFile extends VirtualFile { /** The serialVersionUID */ private static final long serialVersionUID = 1L; public MyVirtualFile() { super(getVirtualFileHandler()); } private static VirtualFileHandler getVirtualFileHandler() { return new VirtualFileHandler() { /** The serialVersionUID */ private static final long serialVersionUID = 1L; public String getName() { return null; } public String getPathName() { return null; } public URL toVfsUrl() throws MalformedURLException, URISyntaxException { return null; } public URI toURI() throws URISyntaxException { return null; } public URL toURL() throws MalformedURLException, URISyntaxException { return null; } public long getLastModified() throws IOException { return 0; } public boolean hasBeenModified() throws IOException { return false; } public long getSize() throws IOException { return 0; } public boolean exists() throws IOException { return false; } public boolean isLeaf() throws IOException { return false; } public boolean isHidden() throws IOException { return false; } public String getLocalPathName() { return null; } public boolean isNested() throws IOException { return false; } public InputStream openStream() throws IOException { return null; } public VirtualFileHandler getParent() throws IOException { return null; } public List getChildren(boolean ignoreErrors) throws IOException { return null; } public VirtualFileHandler getChild(String path) throws IOException { return null; } public VFSContext getVFSContext() { return null; } public VirtualFile getVirtualFile() { return null; } public void close() { } public void replaceChild(VirtualFileHandler original, VirtualFileHandler replacement) { } public boolean removeChild(String name) throws IOException { return false; } public boolean delete(int gracePeriod) throws IOException { return false; } public URL getRealURL() throws IOException, URISyntaxException { return null; } public void cleanup() { } }; } public String getName() { return "somefile.bsh"; } } } ././@LongLink0000000000000000000000000000024200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/ConfiguredSuffixFileStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000644210640504614033506 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.file.test; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.test.BaseTestCase; /** * FileStructureUnitTestCase. * * @author Kabir Khan * @version $Revision: 1.1 $ */ public class ConfiguredSuffixFileStructureUnitTestCase extends BaseTestCase { /** The file structure deployer */ private static final Set defaultSuffixes = new HashSet(new FileStructure().getSuffixes()); public static Test suite() { return new TestSuite(ConfiguredSuffixFileStructureUnitTestCase.class); } public ConfiguredSuffixFileStructureUnitTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); enableTrace("org.jboss.deployers"); } public void testDefaults() throws Exception { assertNotNull("default suffixes should not be null", defaultSuffixes); assertTrue("default suffixes size should be > 0", defaultSuffixes.size() > 0); } public void testNewUsingDefaults() throws Exception { FileStructure structure = new FileStructure(); Set suffixes = structure.getSuffixes(); assertNotNull(suffixes); assertEquals(defaultSuffixes.size(), suffixes.size()); for (String suff : defaultSuffixes) { suffixes.contains(suff); } } public void testOverwriteDefaults() throws Exception { try { Set newSuffixes = new HashSet(); newSuffixes = new HashSet(); newSuffixes.add("-ds.xml"); newSuffixes.add("-dd.xml"); newSuffixes.add("-service.xml"); FileStructure structure = new FileStructure(newSuffixes); Set suffixes = structure.getSuffixes(); assertNotNull(suffixes); assertEquals(3, suffixes.size()); assertTrue(suffixes.contains("-ds.xml")); assertTrue(suffixes.contains("-dd.xml")); assertTrue(suffixes.contains("-service.xml")); } finally { // Reset new FileStructure(defaultSuffixes); } } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/AbstractFileStructureTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000372710640504614033511 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.file.test; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; /** * AbstractFileStructureTest. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public abstract class AbstractFileStructureTest extends AbstractStructureTest { public AbstractFileStructureTest(String name) { super(name); } public void testSimple() throws Throwable { assertDeployNoChildren("/structure/file/simple", "simple-service.xml"); } public void testNotKnownButTopLevel() throws Throwable { assertDeployNoChildren("/structure/file/unknown", "test-unknown.xml"); assertDeployNoChildren("/structure/file/unknown", "unknown.xml"); } public void testNotKnownInSubdirectory() throws Throwable { assertNotValid("/structure/file", "unknown"); } public void testDirectory() throws Throwable { assertNotValid("/structure/file", "directory"); } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/FileStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000354310640504614033505 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.file.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; /** * FileStructureUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class FileStructureUnitTestCase extends AbstractFileStructureTest { public static Test suite() { return new TestSuite(FileStructureUnitTestCase.class); } public FileStructureUnitTestCase(String name) { super(name); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithStructureDeployer(deployment, new FileStructure()); } } ././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/CombinedFileStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000427210640504614033505 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.file.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; /** * CombinedFileStructureUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class CombinedFileStructureUnitTestCase extends AbstractFileStructureTest { public static Test suite() { return new TestSuite(CombinedFileStructureUnitTestCase.class); } public CombinedFileStructureUnitTestCase(String name) { super(name); } public void testDirectory() throws Throwable { // The jar deployer recognises the directory in the combined test assertDeployNoChildren("/structure/file", "directory"); } public void testNotKnownInSubdirectory() throws Throwable { // The jar deployer recognises the directory in the combined test assertDeployNoChildren("/structure/file", "unknown"); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { return determineStructureWithAllStructureDeployers(deployment); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/support/BshFileMatcher.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000305210757641060033506 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.file.support; import org.jboss.deployers.vfs.spi.deployer.FileMatcher; import org.jboss.virtual.VirtualFile; /** * @author Ales Justin */ public class BshFileMatcher implements FileMatcher { public boolean isDeployable(VirtualFile file) { try { String toString = file.getName(); return toString.endsWith(".bsh"); } catch (Exception e) { throw new RuntimeException(e); } } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/support/TmpFileStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000263610720063655033513 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.file.support; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.virtual.VirtualFile; /** * @author Ales Justin */ public class TmpFileStructure extends FileStructure { public boolean checkFileMatchers(VirtualFile file) { return super.checkFileMatchers(file); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/test/InnerModificationUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000521711050212001033463 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; import org.jboss.test.deployers.vfs.structure.support.WarUnpackStructure; /** * Inner unpack, with structure deployer * setting up the modification info. * * @author Ales Justin */ public class InnerModificationUnitTestCase extends AbstractStructureTest { public static Test suite() { return new TestSuite(InnerModificationUnitTestCase.class); } public InnerModificationUnitTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); enableTrace("org.jboss.deployers"); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { // TODO - check serialization of modifed roots return determineStructureWithStructureDeployers(deployment, false, new JARStructure(), new WarUnpackStructure(), new FileStructure()); } public void testExplicitInnerUnpack() throws Throwable { VFSDeploymentContext root = assertDeploy("/structure/explicit", "explicit.ear"); assertChildContexts(root, "inner.war"); assertUnpacked(root.getRoot().findChild("inner.war")); } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/test/EARStructureUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000001201711015514454033501 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free softeare; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Softeare Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This softeare is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied earranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this softeare; if not, write to the Free * Softeare Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; /** * Mock ear structure deployer tests * * @author Ales.Justin@jboss.org * @author Scott.Stark@jboss.org * @author adrian@jboss.org * @version $Revision: 61684 $ */ public class EARStructureUnitTestCase extends AbstractEARStructureTest { public static Test suite() { return new TestSuite(EARStructureUnitTestCase.class); } public EARStructureUnitTestCase(String name) { super(name); } /** * Validate packaged ear. * @throws Throwable for any error */ public void testPackedEAR() throws Throwable { VFSDeploymentContext ear = assertDeploy("/structure/ear", "archive.ear"); assertClassPath(ear, "lib/log5j.jar"); assertChildContexts(ear, "module-bean1ejb.jar"); } /** * Validate scanning of ear. * @throws Throwable for any error */ public void testScanEAR() throws Throwable { VFSDeploymentContext ear = assertDeploy("/structure/ear", "noappxml.ear"); assertChildContexts(ear, "client.jar", "foobar.sar", "known.jar", "ts.rar", "webapp.war"); } /** * Validate mixed ear. * @throws Throwable for any error */ public void testMixedEAR() throws Throwable { VFSDeploymentContext ear = assertDeploy("/structure/ear", "someappxml.ear"); assertChildContexts(ear, "client.jar", "foobar.sar", "known.jar", "ts.rar", "webapp.war"); } /** * Validate strict ear. * @throws Throwable for any error */ public void testStrictEAR() throws Throwable { VFSDeploymentContext ear = assertDeploy("/structure/ear", "strict.ear"); assertChildContexts(ear, "known.jar", "ts.rar"); } /** * Validate a basic ear with modules having no subdeployments * @throws Throwable for any problem */ public void testSimpleWithAppXml() throws Throwable { VFSDeploymentContext ear = assertDeploy("/structure/ear", "simplewithappxml.ear"); assertClassPath(ear, "lib/lib0.jar"); assertChildContexts(ear, "module-service.xml", "module-bean1ejb.jar", "module-bean2.ejb3", "module-client1.jar", "module-mbean1.sar", "module-mcf1-ds.xml", "module-mcf1.rar", "module-web1.war"); } /** * Validate a ear type of structure specified via the ear * META-INF/application.properties parsed by the MockEarStructureDeployer. * The ear modules having subdeployments * @throws Throwable for any problem */ public void testComplexWithAppXml() throws Throwable { VFSDeploymentContext ear = assertDeploy("/structure/ear", "complexwithappxml.ear"); assertClassPath(ear, "lib/lib0.jar"); assertChildContexts(ear, "module-service.xml", "module-bean1ejb.jar", "module-bean2.ejb3", "module-client1.jar", "module-mbean1.sar", "module-mcf1-ds.xml", "module-mcf1.rar", "module-web1.war", "subdir/relative.jar"); // Validate that the expected module subdeployments are there VFSDeploymentContext child = assertChildContext(ear, "module-mbean1.sar"); assertChildContexts(child, "extensions.aop", "submbean.sar", "submbean2-service.xml"); } /** * Basic getMetaDataFile/getFile tests. * * @throws Throwable for any problem */ public void testComplexWithAppFinds() throws Throwable { VFSDeploymentContext ear = assertDeploy("/structure/ear", "complexwithappxml.ear"); // META-INF/application.properties assertMetaDataFile(ear, "application.properties"); assertNoFile(ear, "application.properties"); // lib/lib0.jar assertNoMetaDataFile(ear, "lib/lib0.jar"); assertFile(ear, "lib/lib0.jar"); } /** * Validate annotation scanning. * * @throws Throwable for any problem */ public void testEARAnnotationScanning() throws Throwable { VFSDeploymentContext ear = assertDeploy("/structure/ear", "scanning.ear"); assertChildContexts(ear, "appc.jar", "ejbs.jar", "web.jar", "services.jar"); } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/test/AbstractEARStructureTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000663711046531125033512 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.test; import java.util.HashSet; import java.util.Set; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.plugins.structure.war.WARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structure.AbstractStructureTest; import org.jboss.test.deployers.vfs.structure.ear.support.AppClient; import org.jboss.test.deployers.vfs.structure.ear.support.MockEarStructureDeployer; import org.jboss.test.deployers.vfs.structure.ear.support.Service; import org.jboss.test.deployers.vfs.structure.ear.support.Servlet; import org.jboss.test.deployers.vfs.structure.ear.support.Stateless; import org.jboss.virtual.plugins.context.jar.JarUtils; /** * Abstract ear structure deployer tests * * @author ales.justin@jboss.org */ public abstract class AbstractEARStructureTest extends AbstractStructureTest { protected AbstractEARStructureTest(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); enableTrace("org.jboss.deployers"); } protected StructureDeployer createEarStructureDeployer() { return new MockEarStructureDeployer(); } protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception { Set defaultSuffixes = JarUtils.getSuffixes(); JARStructure jarStructure = new JARStructure(); jarStructure.setSupportsCandidateAnnotations(true); jarStructure.addCandidateAnnotation(Stateless.class); jarStructure.addCandidateAnnotation(Service.class); jarStructure.addCandidateAnnotation(AppClient.class); jarStructure.addCandidateAnnotation(Servlet.class); try { Set suffixes = new HashSet(jarStructure.getSuffixes()); suffixes.add(".ejb3"); jarStructure.setSuffixes(suffixes); return determineStructureWithStructureDeployers(deployment, new FileStructure(), new WARStructure(), jarStructure, createEarStructureDeployer()); } finally { jarStructure.setSuffixes(defaultSuffixes); } } } ././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/test/EARStructureRecognizeTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000531110765516061033507 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.test.deployers.vfs.structure.ear.support.WrapperMockEarStructureDeployer; /** * Mock ear structure deployer tests * * @author ales.justin@jboss.org */ public class EARStructureRecognizeTestCase extends AbstractEARStructureTest { private WrapperMockEarStructureDeployer earStructureDeployer; public static Test suite() { return new TestSuite(EARStructureRecognizeTestCase.class); } public EARStructureRecognizeTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); earStructureDeployer = new WrapperMockEarStructureDeployer(); } protected void tearDown() throws Exception { earStructureDeployer = null; super.tearDown(); } protected StructureDeployer createEarStructureDeployer() { return earStructureDeployer; } protected void reset() { if (earStructureDeployer != null) earStructureDeployer.reset(); } public void testNotAnEAR() throws Throwable { try { VFSDeploymentContext context = assertDeployNoChildren("/structure/ear", "notanear"); assertNoMetaDataFile(context, "META-INF"); assertClassPath(context, ""); assertTrue(earStructureDeployer.isTouched()); assertFalse(earStructureDeployer.isValid()); } finally { reset(); } } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/J2eeModuleMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000263210765747146033524 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; /** * @author Ales Justin */ public interface J2eeModuleMetaData { public static final int WEB = 1; public static final int CONNECTOR = 2; public static final int HAR = 3; public static final int SERVICE = 4; public static final int CLIENT = 5; public static final int EJB = 6; } ././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/TestService.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000225311015514454033502 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; /** * @author Ales Justin */ @Service public class TestService { }././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000003130311046531125033476 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; import java.io.IOException; import java.io.InputStream; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.jar.Attributes; import java.util.jar.Manifest; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.structure.CandidateAnnotationsCallback; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.logging.Logger; import org.jboss.virtual.VFSUtils; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VirtualFileFilter; import org.jboss.virtual.plugins.vfs.helpers.SuffixMatchFilter; /** * A mock ear structure deployer that illustrates concepts involved with an ear * type of deployer. * * @author Scott.Stark@jboss.org * @author Ales.Justin@jboss.org * @version $Revision:$ */ public class MockEarStructureDeployer extends AbstractVFSStructureDeployer { /** * The default ear/lib filter */ public static final VirtualFileFilter DEFAULT_EAR_LIB_FILTER = new SuffixMatchFilter(".jar"); /** * The ear/lib filter */ private VirtualFileFilter earLibFilter = DEFAULT_EAR_LIB_FILTER; @Override public int getRelativeOrder() { return 1000; } /** * Get the earLibFilter. * * @return the earLibFilter. */ public VirtualFileFilter getEarLibFilter() { return earLibFilter; } /** * Set the earLibFilter. * * @param earLibFilter the filter * @throws IllegalArgumentException for a null filter */ public void setEarLibFilter(VirtualFileFilter earLibFilter) { if (earLibFilter == null) throw new IllegalArgumentException("Null filter"); this.earLibFilter = earLibFilter; } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { ContextInfo context; boolean valid; VirtualFile file = structureContext.getFile(); try { if (file.isLeaf() == true || file.getName().endsWith(".ear") == false) return false; context = createContext(structureContext, "META-INF"); VirtualFile applicationProps = getMetaDataFile(file, "META-INF/application.properties"); VirtualFile jbossProps = getMetaDataFile(file, "META-INF/jboss-application.properties"); boolean scan = true; List modules = new ArrayList(); if (applicationProps != null) { scan = false; readAppXml(applicationProps, modules); } if (jbossProps != null) { readAppXml(jbossProps, modules); } // Add the ear lib contents to the classpath try { VirtualFile lib = file.getChild("lib"); if (lib != null) { List archives = lib.getChildren(earLibFilter); for (VirtualFile archive : archives) super.addClassPath(structureContext, archive, true, true, context); } } catch (IOException ignored) { // lib directory does not exist } // Add the ear manifest locations? addClassPath(structureContext, file, false, true, context); if (scan) scanEar(structureContext, file, modules); // Create subdeployments for the ear modules for (EarModule mod : modules) { String fileName = mod.getFileName(); if (fileName != null && (fileName = fileName.trim()).length() > 0) { try { VirtualFile module = file.getChild(fileName); if (module == null) { throw new RuntimeException(fileName + " module listed in application.xml does not exist within .ear " + file.getName()); } // Ask the deployers to analyze this if (structureContext.determineChildStructure(module) == false) { throw new RuntimeException(fileName + " module listed in application.xml is not a recognized deployment, .ear: " + file.getName()); } } catch (IOException e) { throw new RuntimeException(fileName + " module listed in application.xml does not exist within .ear " + file.getName(), e); } } } valid = true; } catch (Exception e) { throw new RuntimeException("Error determining structure: " + file.getName(), e); } return valid; } protected void readAppXml(VirtualFile file, List modules) throws IOException { InputStream in = file.openStream(); try { Properties props = new Properties(); props.load(in); for (Object key : props.keySet()) { String name = (String)key; String fileName = props.getProperty(name); EarModule module = new EarModule(name, fileName); modules.add(module); } } finally { in.close(); } } private void scanEar(StructureContext context, VirtualFile root, List modules) throws Exception { List archives = root.getChildren(); if (archives != null && archives.isEmpty() == false) { // enable candidate annotations context.setCandidateAnnotationScanning(true); EarCandidateAnnotationsCallback callback = new EarCandidateAnnotationsCallback(); context.addCallback(callback); String earPath = root.getPathName(); int counter = 0; for (VirtualFile vfArchive : archives) { String filename = earRelativePath(earPath, vfArchive.getPathName()); // Check if the module already exists, i.e. it is declared in jboss-app.xml EarModule moduleMetaData = getModule(modules, filename); if (moduleMetaData == null) { // reset callback result callback.reset(); int type = typeFromSuffix(context, filename, vfArchive); Integer callbackResult = null; if (type < 0) { callbackResult = callback.getResult(); if (callbackResult != null) type = callbackResult; } if (type >= 0) { String typeString = null; switch(type) { case J2eeModuleMetaData.EJB: typeString = "Ejb"; break; case J2eeModuleMetaData.CLIENT: typeString = "Java"; break; case J2eeModuleMetaData.CONNECTOR: typeString = "Connector"; break; case J2eeModuleMetaData.SERVICE: case J2eeModuleMetaData.HAR: typeString = "Service"; break; case J2eeModuleMetaData.WEB: typeString = "Web"; break; } // we didin't do full recognition yet if (callbackResult == null) { moduleMetaData = new EarModule(typeString + "Module" + counter, filename); modules.add(moduleMetaData); counter++; } } } } // reset candidate annotation scanning flag context.setCandidateAnnotationScanning(false); } } private EarModule getModule(List modules, String filename) { for(EarModule em : modules) if (filename.endsWith(em.getFileName())) return em; return null; } private int typeFromSuffix(StructureContext context, String path, VirtualFile archive) throws Exception { int type = -1; if (path.endsWith(".war")) type = J2eeModuleMetaData.WEB; else if (path.endsWith(".rar")) type = J2eeModuleMetaData.CONNECTOR; else if (path.endsWith(".har")) type = J2eeModuleMetaData.HAR; else if (path.endsWith(".sar")) type = J2eeModuleMetaData.SERVICE; else if (path.endsWith(".jar")) { // Look for a META-INF/application-client.xml VirtualFile mfFile = getMetaDataFile(archive, "META-INF/MANIFEST.MF"); VirtualFile clientXml = getMetaDataFile(archive, "META-INF/application-client.xml"); VirtualFile ejbXml = getMetaDataFile(archive, "META-INF/ejb-jar.xml"); VirtualFile jbossXml = getMetaDataFile(archive, "META-INF/jboss.xml"); if (clientXml != null) { type = J2eeModuleMetaData.CLIENT; } else if (mfFile != null) { Manifest mf = VFSUtils.readManifest(mfFile); Attributes attrs = mf.getMainAttributes(); if (attrs.containsKey(Attributes.Name.MAIN_CLASS)) { type = J2eeModuleMetaData.CLIENT; } else { determineType(context, archive); } } else if (ejbXml != null || jbossXml != null) { type = J2eeModuleMetaData.EJB; } else { determineType(context, archive); } } return type; } private void determineType(StructureContext context, VirtualFile archive) throws Exception { context.determineChildStructure(archive); } private String earRelativePath(String earPath, String pathName) { StringBuilder tmp = new StringBuilder(pathName); tmp.delete(0, earPath.length()); return tmp.toString(); } private VirtualFile getMetaDataFile(VirtualFile file, String path) { VirtualFile metaFile = null; try { metaFile = file.getChild(path); } catch (IOException ignored) { } return metaFile; } private static class EarCandidateAnnotationsCallback implements CandidateAnnotationsCallback { private static final Logger log = Logger.getLogger(EarCandidateAnnotationsCallback.class); private Integer result; private final static Map, Integer> map; static { map = new HashMap, Integer>(); map.put(Stateless.class, J2eeModuleMetaData.EJB); map.put(Service.class, J2eeModuleMetaData.SERVICE); map.put(AppClient.class, J2eeModuleMetaData.CLIENT); map.put(Servlet.class, J2eeModuleMetaData.WEB); } public void executeCallback(VirtualFile root, StructureContext currentContext, AnnotationEnvironment env, Class annotationClass) { if (result == null) { result = map.get(annotationClass); } else { log.warn("Result already set: " + result); } } public void reset() { result = null; } public Integer getResult() { return result; } } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/Connector.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000256211015514454033505 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; /** * @author Ales Justin */ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Connector { }././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/TestAppC.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000225211015514454033501 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; /** * @author Ales Justin */ @AppClient public class TestAppC { }././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/TestEJB.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000225311015514454033502 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; /** * @author Ales Justin */ @Stateless public class TestEJB { } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/SimpleVFSResourceLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000335511043313510033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; import java.net.URL; import org.jboss.virtual.VirtualFile; /** * @author Ales Justin */ public class SimpleVFSResourceLoader extends ClassLoader { private VirtualFile root; public SimpleVFSResourceLoader(ClassLoader parent, VirtualFile root) { super(parent); this.root = root; } public URL getResource(String name) { try { VirtualFile child = root.getChild(name); if (child != null) return child.toURL(); else return null; } catch (Exception e) { throw new RuntimeException(e); } } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/Stateless.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000256411015514454033507 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; /** * @author Ales Justin */ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Stateless { } ././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/Servlet.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000256011015514454033503 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; /** * @author Ales Justin */ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Servlet { }././@LongLink0000000000000000000000000000020600000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/TestServlet.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000225311015514454033502 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; /** * @author Ales Justin */ @Servlet public class TestServlet { }././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/EarModule.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000316010640504614033500 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; /** * Represent an ear module entry * * @author Scott.Stark@jboss.org * @version $Revision:$ */ public class EarModule { private String name; private String fileName; public EarModule(String name, String fileName) { this.name = name; this.fileName = fileName; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/AppClient.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000256211015514454033505 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; /** * @author Ales Justin */ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface AppClient { }././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/Service.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000256011015514454033503 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; /** * @author Ales Justin */ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Service { }././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/WrapperMockEarStructureDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000342711046056310033502 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.ear.support; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.vfs.spi.structure.StructureContext; /** * @author ales.justin@jboss.org */ public class WrapperMockEarStructureDeployer extends MockEarStructureDeployer { private boolean touched; private boolean valid; public boolean determineStructure(StructureContext structureContext) throws DeploymentException { touched = true; valid = super.determineStructure(structureContext); return valid; } public void reset() { touched = false; valid = false; } public boolean isTouched() { return touched; } public boolean isValid() { return valid; } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/support/WarUnpackStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000317611046056310033503 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.support; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.ModificationType; import org.jboss.deployers.vfs.plugins.structure.war.WARStructure; import org.jboss.deployers.vfs.spi.structure.StructureContext; /** * @author Ales Justin */ public class WarUnpackStructure extends WARStructure { protected void applyContextInfo(StructureContext context, ContextInfo result) { super.applyContextInfo(context, result); result.setModificationType(ModificationType.UNPACK); } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/support/TestDummyClassLoader.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000246310746226606033516 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.support; /** * TestDummyClassLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDummyClassLoader extends ClassLoader { public TestDummyClassLoader() { super(TestDummyClassLoader.class.getClassLoader()); } } ././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/support/TestDummyClassLoaderStructureDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000377211046531125033507 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure.support; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.structure.StructureContext; /** * TestDummyClassLoaderStructureDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class TestDummyClassLoaderStructureDeployer extends AbstractVFSStructureDeployer { private static ClassLoader classLoader; public static ClassLoader getAndResetClassLoader() { ClassLoader result = classLoader; classLoader = null; return result; } protected static void checkClassLoader() { classLoader = Thread.currentThread().getContextClassLoader(); } public TestDummyClassLoaderStructureDeployer() { setRelativeOrder(-1); } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { checkClassLoader(); return false; } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/VFSStructureTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000001041511070140372033474 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.structure.dir.test.DirStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.dir.test.RealDirStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.ear.test.EARStructureRecognizeTestCase; import org.jboss.test.deployers.vfs.structure.ear.test.EARStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.ear.test.InnerModificationUnitTestCase; import org.jboss.test.deployers.vfs.structure.explicit.test.DeclaredStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.explicit.test.ModificationTypeUnitTestCase; import org.jboss.test.deployers.vfs.structure.file.test.CombinedFileStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.file.test.ConfiguredSuffixFileStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.file.test.FileMatcherTestCase; import org.jboss.test.deployers.vfs.structure.file.test.FileStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.jar.test.CombinedJARStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.jar.test.ConfiguredSuffixJARStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.jar.test.JARStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.test.StructureDeployerContextClassLoaderTestCase; import org.jboss.test.deployers.vfs.structure.test.TerminateStructureTestCase; import org.jboss.test.deployers.vfs.structure.war.test.CombinedWARStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.war.test.WARStructureUnitTestCase; import org.jboss.test.deployers.vfs.structure.war.test.WARUnpackUnitTestCase; /** * VFSStructureTestSuite. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class VFSStructureTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Structure Tests"); suite.addTest(ConfiguredSuffixJARStructureUnitTestCase.suite()); suite.addTest(JARStructureUnitTestCase.suite()); suite.addTest(WARStructureUnitTestCase.suite()); suite.addTest(ConfiguredSuffixFileStructureUnitTestCase.suite()); suite.addTest(FileStructureUnitTestCase.suite()); suite.addTest(FileMatcherTestCase.suite()); suite.addTest(DeclaredStructureUnitTestCase.suite()); suite.addTest(EARStructureUnitTestCase.suite()); suite.addTest(EARStructureRecognizeTestCase.suite()); suite.addTest(CombinedJARStructureUnitTestCase.suite()); suite.addTest(CombinedWARStructureUnitTestCase.suite()); suite.addTest(CombinedFileStructureUnitTestCase.suite()); suite.addTest(TerminateStructureTestCase.suite()); suite.addTest(StructureDeployerContextClassLoaderTestCase.suite()); suite.addTest(WARUnpackUnitTestCase.suite()); suite.addTest(ModificationTypeUnitTestCase.suite()); suite.addTest(InnerModificationUnitTestCase.suite()); suite.addTest(DirStructureUnitTestCase.suite()); suite.addTest(RealDirStructureUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/AbstractStructureTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000002432311050212001033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structure; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.vfs.plugins.structure.VFSStructuralDeployersImpl; import org.jboss.deployers.vfs.plugins.structure.VFSStructureBuilder; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.plugins.structure.war.WARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.BaseTestCase; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VFSUtils; /** * AbstractStructureUnitTestCase. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public abstract class AbstractStructureTest extends BaseTestCase { public AbstractStructureTest(String name) { super(name); } protected void assertUnpacked(VirtualFile file) throws Exception { assertSame(file, VFSUtils.unpack(file)); } protected void assertNoChildContexts(VFSDeploymentContext context) { assertChildContexts(context); } protected void assertChildContexts(VFSDeploymentContext context, String... paths) { List expected = new ArrayList(); if (paths != null) { for (String path : paths) expected.add(path); } List children = context.getChildren(); assertNotNull(children); assertEquals("Expected " + expected + " got " + simplePrint(children), expected.size(), children.size()); for (String path : expected) { boolean found = false; for (DeploymentContext child : children) { if (path.equals(child.getRelativePath())) found = true; } if (found == false) fail("Expected " + path + " in " + children); } } protected String simplePrint(List children) { StringBuilder builder = new StringBuilder(); boolean first = false; builder.append("["); for (DeploymentContext child : children) { if (first == false) first = true; else builder.append(", "); builder.append(child.getRelativePath()); } builder.append("]"); return builder.toString(); } protected void assertMetaData(VFSDeploymentContext context, String metaDataPath) throws Exception { VirtualFile root = context.getRoot(); List metaDataLocation = context.getMetaDataLocations(); VirtualFile expected = root.findChild(metaDataPath); assertNotNull(metaDataLocation); assertEquals(1, metaDataLocation.size()); assertEquals(expected, metaDataLocation.get(0)); } protected void assertMetaDatas(VFSDeploymentContext context, String... metaDataPath) throws Exception { VirtualFile root = context.getRoot(); List metaDataLocations = context.getMetaDataLocations(); assertNotNull(metaDataLocations); int i = 0; for(String path : metaDataPath) { VirtualFile expected = root.findChild(path); assertEquals(expected, metaDataLocations.get(i++)); } } protected VFSDeploymentContext assertChildContext(VFSDeploymentContext context, String name) throws Exception { List children = context.getChildren(); if (children == null) fail("No children for " + context); for (DeploymentContext child : children) { if (name.equals(child.getSimpleName())) return (VFSDeploymentContext) child; } fail(name + " not found in " + children); throw new RuntimeException("unreachable"); } protected void assertClassPath(VFSDeploymentContext context, String... paths) throws Exception { assertClassPath(context, context, paths); } protected void assertClassPath(VFSDeploymentContext context, VFSDeploymentContext reference, String... paths) throws Exception { List classPath = context.getClassPath(); if (paths == null || paths.length == 0) { if (classPath != null) assertEmpty(classPath); return; } assertNotNull("Expected " + Arrays.asList(paths), classPath); assertEquals("Expected " + Arrays.asList(paths) + " got " + classPath, paths.length, classPath.size()); for (String path : paths) { VirtualFile ref = reference.getRoot(); VirtualFile expected = ref.findChild(path); assertTrue("Expected " + expected +" in " + classPath, classPath.contains(expected)); } } protected void assertMetaDataFile(VFSDeploymentContext context, String name) { assertNotNull("Should find metadata " + name, context.getMetaDataFile(name)); } protected void assertNoMetaDataFile(VFSDeploymentContext context, String name) { assertNull("Should not find metadata " + name, context.getMetaDataFile(name)); } protected void assertFile(VFSDeploymentContext context, String name) { assertNotNull("Should find file " + name, context.getFile(name)); } protected void assertNoFile(VFSDeploymentContext context, String name) { assertNull("Should not find file " + name, context.getFile(name)); } protected abstract VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception; protected VFSDeploymentContext determineStructureWithStructureDeployer(VFSDeployment deployment, StructureDeployer structureDeployer) throws Exception { return determineStructureWithStructureDeployers(deployment, structureDeployer); } protected VFSDeploymentContext determineStructureWithAllStructureDeployers(VFSDeployment deployment) throws Exception { return determineStructureWithStructureDeployers(deployment, new FileStructure(), new WARStructure(), new JARStructure()); } protected VFSDeploymentContext determineStructureWithStructureDeployers(VFSDeployment deployment, StructureDeployer... deployers) throws Exception { return determineStructureWithStructureDeployers(deployment, true, deployers); } protected VFSDeploymentContext determineStructureWithStructureDeployers(VFSDeployment deployment, boolean serialize, StructureDeployer... deployers) throws Exception { VFSStructuralDeployersImpl structuralDeployers = new VFSStructuralDeployersImpl(); VFSStructureBuilder builder = new VFSStructureBuilder(); structuralDeployers.setStructureBuilder(builder); for (StructureDeployer deployer : deployers) structuralDeployers.addDeployer(deployer); VFSDeploymentContext context = (VFSDeploymentContext)structuralDeployers.determineStructure(deployment); if (serialize) return serializeDeserialize(context, VFSDeploymentContext.class); else return context; } protected VFSDeploymentContext deploy(String context, String path) throws Throwable { VFSDeployment deployment = createDeployment(context, path); VFSDeploymentContext result = determineStructure(deployment); assertNotNull(result); if (result.getProblem() != null) throw result.getProblem(); return result; } protected VFSDeploymentContext assertDeploy(String context, String path) throws Throwable { VFSDeploymentContext result = deploy(context, path); assertEquals(path, result.getSimpleName()); return result; } protected VFSDeploymentContext assertDeployNoChildren(String context, String path) throws Throwable { VFSDeploymentContext result = assertDeploy(context, path); assertNoChildContexts(result); return result; } protected void assertNotValid(String context, String path) throws Throwable { try { deploy(context, path); fail("Should not be here!"); } catch (Exception e) { checkThrowable(DeploymentException.class, e); } } protected VFSDeployment createDeployment(String context, String path) throws Exception { VirtualFile root = getVirtualFile(context, path); VFSDeployment deployment = VFSDeploymentFactory.getInstance().createVFSDeployment(root); return serializeDeserialize(deployment, VFSDeployment.class); } protected VirtualFile getVirtualFile(String root, String path) throws Exception { URL url = getResource(root); return VFS.getVirtualFile(url, path); } @Override public URL getResource(String path) { URL result = super.getResource(path); if (result == null) fail("Unable to find resource " + path); return result; } @Override protected void setUp() throws Exception { super.setUp(); //enableTrace("org.jboss.deployers"); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000024100000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/test/AnnotationsScanningWithMetaDataUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000352011113261537033457 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.test; import junit.framework.Test; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * @author Ales Justin */ public class AnnotationsScanningWithMetaDataUnitTestCase extends AbstractAnnotationsScanningUnitTest { public AnnotationsScanningWithMetaDataUnitTestCase(String name) { super(name); } public static Test suite() { return suite(AnnotationsScanningWithMetaDataUnitTestCase.class); } protected void assertEar(DeploymentUnit ear) { assertAnnotations(ear, 1, 1, 1); } protected void assertJar(DeploymentUnit jar) { assertAnnotations(jar, 2, 0, 0); } protected void assertWar(DeploymentUnit war) { assertAnnotations(war, 2, 0, 0); } }././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/test/AnnotationsScanningUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000345611113261537033467 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.test; import junit.framework.Test; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * @author Ales Justin */ public class AnnotationsScanningUnitTestCase extends AbstractAnnotationsScanningUnitTest { public AnnotationsScanningUnitTestCase(String name) { super(name); } public static Test suite() { return suite(AnnotationsScanningUnitTestCase.class); } protected void assertEar(DeploymentUnit ear) { assertAnnotations(ear, 1, 1, 1); } protected void assertJar(DeploymentUnit jar) { assertAnnotations(jar, 4, 1, 1); } protected void assertWar(DeploymentUnit war) { assertAnnotations(war, 5, 1, 1); } } ././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/test/ScanningMetaDataTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000001063111113261537033460 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.test; import java.util.Collections; import java.util.List; import java.util.Set; import junit.framework.Test; import org.jboss.deployers.plugins.annotations.AbstractScanningMetaData; import org.jboss.deployers.spi.annotations.PathMetaData; import org.jboss.deployers.spi.annotations.ScanningMetaData; import org.jboss.deployers.spi.annotations.PathEntryMetaData; import org.jboss.deployers.vfs.plugins.annotations.ScanningMetaDataDeployer; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentContext; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentUnit; import org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.test.deployers.BaseDeployersVFSTest; import org.jboss.virtual.VirtualFile; /** * @author Ales Justin */ public class ScanningMetaDataTestCase extends BaseDeployersVFSTest { public ScanningMetaDataTestCase(String name) { super(name); } public static Test suite() { return suite(ScanningMetaDataTestCase.class); } public void testSMDRead() throws Exception { SchemaResolverDeployer deployer = new ScanningMetaDataDeployer(); deployer.create(); try { VirtualFile file = getVirtualFile("/scanning", "smoke"); VFSDeploymentContext deployment = new AbstractVFSDeploymentContext(file, ""); deployment.setMetaDataPath(Collections.singletonList("META-INF")); VFSDeploymentUnit unit = new AbstractVFSDeploymentUnit(deployment); deployer.deploy(unit); try { ScanningMetaData metaData = unit.getAttachment(ScanningMetaData.class); assertNotNull(metaData); List paths = metaData.getPaths(); assertNotNull(paths); assertEquals(2, paths.size()); PathMetaData pmd = paths.get(0); assertNotNull(pmd); assertEquals("myejbs.jar", pmd.getPathName()); Set includes = pmd.getIncludes(); assertNotNull(includes); assertEquals(1, includes.size()); PathEntryMetaData pemd = includes.iterator().next(); assertNotNull(pemd); assertEquals("com.acme.foo", pemd.getName()); Set excludes = pmd.getExcludes(); assertNotNull(excludes); pemd = excludes.iterator().next(); assertNotNull(pemd); assertEquals("com.acme.foo.bar", pemd.getName()); assertEquals(1, excludes.size()); pmd = paths.get(1); assertNotNull(pmd); assertEquals("my.war/WEB-INF/classes", pmd.getPathName()); includes = pmd.getIncludes(); assertNotNull(includes); assertEquals(1, includes.size()); pemd = includes.iterator().next(); assertNotNull(pemd); assertEquals("com.acme.foo", pemd.getName()); assertNull(pmd.getExcludes()); } finally { deployer.undeploy(unit); } } finally { deployer.destroy(); } } } ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/test/AbstractAnnotationsScanningUnitTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000001145511113261537033465 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.test; import java.util.Set; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.test.deployers.BootstrapDeployersTest; import org.jboss.test.deployers.vfs.annotations.support.ext.External; import org.jboss.test.deployers.vfs.annotations.support.jar.JarMarkOnClass; import org.jboss.test.deployers.vfs.annotations.support.jar.impl.JarMarkOnClassImpl; import org.jboss.test.deployers.vfs.annotations.support.util.Util; import org.jboss.test.deployers.vfs.annotations.support.war.WebMarkOnClass; import org.jboss.test.deployers.vfs.annotations.support.war.impl.WebMarkOnClassImpl; import org.jboss.test.deployers.vfs.annotations.support.warlib.SomeUIClass; import org.jboss.virtual.AssembledDirectory; /** * @author Ales Justin */ public abstract class AbstractAnnotationsScanningUnitTest extends BootstrapDeployersTest { protected AbstractAnnotationsScanningUnitTest(String name) { super(name); } public void testBasicScanning() throws Throwable { AssembledDirectory ear = createTopLevelWithUtil(); AssembledDirectory jar = ear.mkdir("simple.jar"); addPackage(jar, JarMarkOnClassImpl.class); addPackage(jar, JarMarkOnClass.class); addPath(jar, "/annotations/basic-scan/jar", "META-INF"); AssembledDirectory war = ear.mkdir("simple.war"); AssembledDirectory webinf = war.mkdir("WEB-INF"); AssembledDirectory classes = webinf.mkdir("classes"); addPackage(classes, WebMarkOnClassImpl.class); addPackage(classes, WebMarkOnClass.class); AssembledDirectory lib = webinf.mkdir("lib"); AssembledDirectory uijar = lib.mkdir("ui.jar"); addPackage(uijar, SomeUIClass.class); addPath(war, "/annotations/basic-scan/web", "WEB-INF"); enableTrace("org.jboss.deployers"); DeploymentUnit unit = assertDeploy(ear); assertEar(unit); try { DeploymentUnit jarUnit = assertChild(unit, "simple.jar"); assertJar(jarUnit); DeploymentUnit webUnit = assertChild(unit, "simple.war"); assertWar(webUnit); } finally { undeploy(unit); } } protected abstract void assertEar(DeploymentUnit ear); protected abstract void assertJar(DeploymentUnit jar); protected abstract void assertWar(DeploymentUnit war); @SuppressWarnings("unchecked") protected void assertAnnotations(DeploymentUnit unit, int onClass, int onMethod, int onFiled) { AnnotationEnvironment env = unit.getAttachment(AnnotationEnvironment.class); assertNotNull(env); Set classes = env.classIsAnnotatedWith("org.jboss.test.deployers.vfs.annotations.support.Marked"); assertNotNull(classes); assertEquals(onClass, classes.size()); Set methods = env.classHasMethodAnnotatedWith("org.jboss.test.deployers.vfs.annotations.support.Marked"); assertNotNull(methods); assertEquals(onMethod, methods.size()); Set fields = env.classHasFieldAnnotatedWith("org.jboss.test.deployers.vfs.annotations.support.Marked"); assertNotNull(fields); assertEquals(onFiled, fields.size()); } protected AssembledDirectory createTopLevelWithUtil() throws Exception { AssembledDirectory topLevel = createAssembledDirectory("top-level.ear", "top-level.ear"); addPath(topLevel, "/annotations/basic-scan", "META-INF"); AssembledDirectory earLib = topLevel.mkdir("lib"); AssembledDirectory util = earLib.mkdir("util.jar"); addPackage(util, Util.class); AssembledDirectory ext = earLib.mkdir("ext.jar"); addPackage(ext, External.class); return topLevel; } }././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/ext/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/ext/External.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000256111046044401033455 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.ext; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class External { @SuppressWarnings("unused") private @Marked Object foo; @Marked public int getInt() { return 0; } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/NoExtRecurseFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000276011045550671033470 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.visitor.ResourceContext; /** * @author Ales Justin */ public class NoExtRecurseFilter implements ResourceFilter { public boolean accepts(ResourceContext resource) { String urlString = resource.getUrl().toExternalForm(); return urlString.contains("ext.jar") == false; } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/JarMarkOnFiled.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000245311046044456033467 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.jar; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ public class JarMarkOnFiled { @SuppressWarnings("unused") private @Marked Object field; }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/JarMarkOnMethod.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000246611045550671033473 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.jar; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ public class JarMarkOnMethod { @Marked public String getJndiName() { return null; } }././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/JarMarkOnClassSuperAnnotated.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000240011104043637033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.jar; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class JarMarkOnClassSuperAnnotated { }././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/impl/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/impl/JarMarkOnClassExt.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000255011113261537033461 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.jar.impl; import org.jboss.test.deployers.vfs.annotations.support.Marked; import org.jboss.test.deployers.vfs.annotations.support.jar.JarMarkOnClassSuper; /** * @author Ales Justin */ @Marked public class JarMarkOnClassExt extends JarMarkOnClassSuper { }././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/impl/JarMarkOnClassImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000237511113261537033466 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.jar.impl; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class JarMarkOnClassImpl { } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/JarMarkOnClassSuper.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000245511113261537033465 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.jar; import org.jboss.test.deployers.vfs.annotations.support.jar.JarMarkOnClassSuperAnnotated; /** * @author Ales Justin */ public class JarMarkOnClassSuper extends JarMarkOnClassSuperAnnotated { }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/jar/JarMarkOnClass.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000241611113261537033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.jar; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class JarMarkOnClass extends JarMarkOnClassSuper { }././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/util/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/util/Util.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000256711046044474033475 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.util; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class Util { @SuppressWarnings("unused") private @Marked Object marked; @Marked public void setSomething(String something) { } } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/WebMarkOnClassSuperAnnotated.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000240011104043637033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.war; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class WebMarkOnClassSuperAnnotated { }././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/WebMarkOnClassSuper.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000245511113261537033465 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.war; import org.jboss.test.deployers.vfs.annotations.support.war.WebMarkOnClassSuperAnnotated; /** * @author Ales Justin */ public class WebMarkOnClassSuper extends WebMarkOnClassSuperAnnotated { }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/WebMarkOnFiled.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000245511046044513033463 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.war; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ public class WebMarkOnFiled { @SuppressWarnings("unused") private @Marked Object field; } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/WebMarkOnMethod.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000246611045550671033473 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.war; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ public class WebMarkOnMethod { @Marked public String getJndiName() { return null; } }././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/impl/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/impl/WebMarkOnClassExt.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000255011113261537033461 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.war.impl; import org.jboss.test.deployers.vfs.annotations.support.Marked; import org.jboss.test.deployers.vfs.annotations.support.war.WebMarkOnClassSuper; /** * @author Ales Justin */ @Marked public class WebMarkOnClassExt extends WebMarkOnClassSuper { }././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/impl/WebMarkOnClassImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000237511113261537033466 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.war.impl; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class WebMarkOnClassImpl { } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/war/WebMarkOnClass.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000241611113261537033462 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.war; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class WebMarkOnClass extends WebMarkOnClassSuper { }././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/warlib/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000755000175000017500000000000011620060444033452 5ustar twernertwerner././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/warlib/SomeUIClass.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000236411113261537033464 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support.warlib; import org.jboss.test.deployers.vfs.annotations.support.Marked; /** * @author Ales Justin */ @Marked public class SomeUIClass { } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/support/Marked.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000246611045550671033473 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations.support; import java.lang.annotation.Target; import java.lang.annotation.ElementType; /** * @author Ales Justin */ @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) public @interface Marked { } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annotations/AnnotationScanningTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/annot0000644000175000017500000000346311113261537033465 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.annotations; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.annotations.test.AnnotationsScanningUnitTestCase; import org.jboss.test.deployers.vfs.annotations.test.AnnotationsScanningWithMetaDataUnitTestCase; /** * AnnotationScanningTestSuite. * * @author Ales Justin */ public class AnnotationScanningTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Annotation Scanning Tests"); suite.addTest(AnnotationsScanningUnitTestCase.suite()); suite.addTest(AnnotationsScanningWithMetaDataUnitTestCase.suite()); return suite; } }././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structureprocessor/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structureprocessor/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000023600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structureprocessor/test/VFSStructureProcessorUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000001261511137607145033512 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structureprocessor.test; import java.util.Arrays; import java.util.Collection; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeployerClient; import org.jboss.deployers.plugins.main.MainDeployerImpl; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.StructureProcessor; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.plugins.structure.modify.FileModificationTypeMatcher; import org.jboss.deployers.vfs.plugins.structure.modify.ModificationTypeMatcher; import org.jboss.deployers.vfs.plugins.structure.modify.ModificationTypeStructureProcessor; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.spi.structure.ModificationType; import org.jboss.virtual.VFSUtils; import org.jboss.virtual.VirtualFile; /** * VFSStructureProcessorUnitTestCase. * * @author Ales Justin */ public class VFSStructureProcessorUnitTestCase extends StructureProcessorUnitTest { public static Test suite() { return new TestSuite(VFSStructureProcessorUnitTestCase.class); } public VFSStructureProcessorUnitTestCase(String name) { super(name); } protected StructureProcessor createStructureProcessor() { ModificationTypeStructureProcessor mtsp = new ModificationTypeStructureProcessor(); ModificationTypeMatcher topAndChildren = createTempMatcher(true, true, false, true, "child.xml"); ModificationTypeMatcher directTop = createTempMatcher(true, false, true, false, "top.xml"); ModificationTypeMatcher justChildren = createTempMatcher(true, false, false, true, "sub.xml"); mtsp.setMatchers(Arrays.asList(directTop, topAndChildren, justChildren)); return mtsp; } protected ModificationTypeMatcher createTempMatcher( boolean metadataOnly, boolean checkChildren, boolean topLevelOnly, boolean childrenOnly, String... paths) { FileModificationTypeMatcher matcher = new FileModificationTypeMatcher(paths); matcher.setModificationType(ModificationType.TEMP); matcher.setMetadataOnly(metadataOnly); matcher.setCheckChildren(checkChildren); matcher.setTopLevelOnly(topLevelOnly); matcher.setChildrenOnly(childrenOnly); return matcher; } protected VFSDeploymentContext getTopDeploymentContext(DeployerClient main, String name) { MainDeployerImpl mdi = (MainDeployerImpl)main; Collection all = mdi.getAll(); for (DeploymentContext dc : all) { if (dc.getSimpleName().equals(name)) return VFSDeploymentContext.class.cast(dc); } throw new IllegalArgumentException("No such deployment context: " + name + ", all: " + all); } protected void testTopModification(String path) throws Exception { DeployerClient main = createMainDeployer(); addStructureDeployer(main, new JARStructure()); VFSDeployment deployment = createDeployment("/structureprocessor", path); main.deploy(deployment); try { VFSDeploymentContext vdc = getTopDeploymentContext(main, path); VirtualFile root = vdc.getRoot(); assertTrue("Should be temp", VFSUtils.isTemporaryFile(root)); } finally { main.undeploy(deployment); } } public void testDirectTopLevelModification() throws Exception { testTopModification("directtop"); } public void testTopFromChildModification() throws Exception { testTopModification("topfromchild"); } public void testChildModification() throws Exception { DeployerClient main = createMainDeployer(); addStructureDeployer(main, new JARStructure()); VFSDeployment deployment = createDeployment("/structureprocessor", "childmod"); main.deploy(deployment); try { VFSDeploymentContext vdc = getTopDeploymentContext(main, "childmod"); VirtualFile root = vdc.getRoot(); VirtualFile file = root.getChild("tempchild"); try { assertTrue("Should be temp", VFSUtils.isTemporaryFile(file)); } finally { file.cleanup(); } } finally { main.undeploy(deployment); } } }././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structureprocessor/test/StructureProcessorUnitTest.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000426311137607145033512 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structureprocessor.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.structure.spi.StructureBuilder; import org.jboss.deployers.structure.spi.StructureProcessor; import org.jboss.deployers.structure.spi.helpers.AbstractStructureBuilder; import org.jboss.test.deployers.BaseDeployersVFSTest; /** * StructureProcessorUnitTest. * * @author Ales Justin */ public abstract class StructureProcessorUnitTest extends BaseDeployersVFSTest { public static Test suite() { return new TestSuite(StructureProcessorUnitTest.class); } public StructureProcessorUnitTest(String name) { super(name); } @Override protected StructureBuilder createStructureBuilder() { StructureBuilder structureBuilder = super.createStructureBuilder(); if (structureBuilder instanceof AbstractStructureBuilder) { AbstractStructureBuilder asb = AbstractStructureBuilder.class.cast(structureBuilder); asb.setStructureProcessor(createStructureProcessor()); } return structureBuilder; } protected abstract StructureProcessor createStructureProcessor(); }././@LongLink0000000000000000000000000000022600000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structureprocessor/VFSStructureProcessorTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000323711137607145033512 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structureprocessor; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.structureprocessor.test.VFSStructureProcessorUnitTestCase; /** * VFSStructureProcessorTestSuite. * * @author Ales Justin */ public class VFSStructureProcessorTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Structure Processor Tests"); suite.addTest(VFSStructureProcessorUnitTestCase.suite()); return suite; } }././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structureprocessor/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060441033470 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structurebuilder/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060443033472 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structurebuilder/test/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060443033472 5ustar twernertwerner././@LongLink0000000000000000000000000000023400000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structurebuilder/test/FilesStructureBuilderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000001064510766002755033516 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structurebuilder.test; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.vfs.plugins.structure.VFSStructuralDeployersImpl; import org.jboss.deployers.vfs.plugins.structure.VFSStructureBuilder; import org.jboss.deployers.vfs.plugins.structure.explicit.DeclaredStructure; import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.vfs.structurebuilder.support.ChildFileStructure; import org.jboss.test.deployers.vfs.structurebuilder.support.TestStructuralDeployers; /** * FilesStructureBuilderUnitTestCase. * * @author Ales Justin */ public class FilesStructureBuilderUnitTestCase extends VFSStructureBuilderUnitTestCase { public static Test suite() { return new TestSuite(FilesStructureBuilderUnitTestCase.class); } public FilesStructureBuilderUnitTestCase(String name) { super(name); } protected DeploymentContext build(Deployment deployment) throws DeploymentException { return deployment.getPredeterminedManagedObjects().getAttachment(DeploymentContext.class); } protected Deployment createDeployment(StructureDeployer... deployers) throws Exception { VFSDeployment deployment = createDeployment(); VFSDeploymentContext context = determineStructureWithStructureDeployers(deployment, deployers); ((MutableAttachments)deployment.getPredeterminedManagedObjects()).addAttachment(DeploymentContext.class, context); return deployment; } protected VFSDeploymentContext determineStructureWithStructureDeployers(VFSDeployment deployment, StructureDeployer... deployers) throws Exception { VFSStructuralDeployersImpl structuralDeployers = new TestStructuralDeployers(); VFSStructureBuilder builder = getStructureBuilder(); structuralDeployers.setStructureBuilder(builder); for (StructureDeployer deployer : deployers) structuralDeployers.addDeployer(deployer); return (VFSDeploymentContext) structuralDeployers.determineStructure(deployment); } protected Deployment createDefaultDeployment() throws Exception { return createDeployment(new DeclaredStructure(), new ChildFileStructure(), new JARStructure()); } protected Deployment createSimple() throws Exception { return createDefaultDeployment(); } protected Deployment createSimpleWithAttachment() throws Exception { return createDefaultDeployment(); } protected Deployment createOneChild() throws Exception { return createDefaultDeployment(); } protected Deployment createManyChildren() throws Exception { return createDefaultDeployment(); } protected Deployment createMetaDataLocation() throws Exception { return createDefaultDeployment(); } protected Deployment createClasspathEntries() throws Exception { return createDefaultDeployment(); } } ././@LongLink0000000000000000000000000000023200000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structurebuilder/test/VFSStructureBuilderUnitTestCase.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000001205511137607542033511 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structurebuilder.test; import java.io.IOException; import java.net.URL; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import org.jboss.deployers.client.spi.DeploymentFactory; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.vfs.plugins.client.AbstractVFSDeployment; import org.jboss.deployers.vfs.plugins.structure.VFSStructureBuilder; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.test.deployers.structure.structurebuilder.StructureBuilderTest; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; /** * VFSStructureBuilderUnitTestCase. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSStructureBuilderUnitTestCase extends StructureBuilderTest { public static Test suite() { return new TestSuite(VFSStructureBuilderUnitTestCase.class); } public VFSStructureBuilderUnitTestCase(String name) { super(name); } protected VFSStructureBuilder getStructureBuilder() { return new VFSStructureBuilder(); } protected VFSDeployment createDeployment() { URL url = getDeploymentURL(); try { VirtualFile file = VFS.getRoot(url); return new AbstractVFSDeployment(file); } catch (IOException e) { throw new RuntimeException("Failed to get virtual file " + url + " for " + getName()); } } protected DeploymentFactory getDeploymentFactory() { return VFSDeploymentFactory.getInstance(); } protected String getDeploymentName() { return getDeploymentURL().toString(); } protected URL getDeploymentURL() { String name = "/structurebuilder/predetermined/" + getName(); URL url = getResource(name); if (url == null) fail("Unable to find resource: " + name); return url; } protected void checkContextInfo(DeploymentContext context, ContextInfo contextInfo) throws Exception { VFSDeploymentContext vfsContext = (VFSDeploymentContext) context; checkMetaDataLocation(vfsContext, contextInfo); checkClassPath(vfsContext, contextInfo); } protected void checkMetaDataLocation(VFSDeploymentContext context, ContextInfo contextInfo) throws Exception { List metaDataPaths = contextInfo.getMetaDataPath(); assertNotNull(metaDataPaths); List metaDataLocations = context.getMetaDataLocations(); assertNotNull(metaDataLocations); if (metaDataPaths.isEmpty()) assertEmpty(metaDataLocations); else { VirtualFile root = context.getRoot(); VirtualFile expected = root.findChild(metaDataPaths.get(0)); assertEquals(1, metaDataLocations.size()); assertEquals(expected, metaDataLocations.get(0)); } } protected void checkClassPath(VFSDeploymentContext context, ContextInfo contextInfo) throws Exception { List classPathEntries = contextInfo.getClassPath(); List classPath = context.getClassPath(); if (classPathEntries == null) assertEmpty(classPath); else { int cpeSize = classPathEntries.size(); int cpSize = classPath != null ? classPath.size() : 0; assertTrue(cpeSize >= cpSize); for(int i = 0; i < cpeSize; i++) { ClassPathEntry entry = classPathEntries.get(i); VirtualFile file = (i < cpSize) ? classPath.get(i) : null; String path = entry.getPath(); if ("".equals(path)) assertTrue(file == null || "".equals(file.getPathName())); else { assertNotNull(file); assertEquals(path, file.getPathName()); } } } } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structurebuilder/VFSStructureBuilderTestSuite.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000351210766002755033511 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structurebuilder; import junit.framework.Test; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.jboss.test.deployers.vfs.structurebuilder.test.VFSStructureBuilderUnitTestCase; import org.jboss.test.deployers.vfs.structurebuilder.test.FilesStructureBuilderUnitTestCase; /** * VFSStructureBuilderTestSuite. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSStructureBuilderTestSuite extends TestSuite { public static void main(String[] args) { TestRunner.run(suite()); } public static Test suite() { TestSuite suite = new TestSuite("VFS Structure Builder Tests"); suite.addTest(VFSStructureBuilderUnitTestCase.suite()); suite.addTest(FilesStructureBuilderUnitTestCase.suite()); return suite; } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structurebuilder/support/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000755000175000017500000000000011620060443033472 5ustar twernertwerner././@LongLink0000000000000000000000000000022500000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structurebuilder/support/TestStructuralDeployers.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000341610766002755033514 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structurebuilder.support; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.vfs.plugins.structure.VFSStructuralDeployersImpl; /** * @author Ales Justin */ public class TestStructuralDeployers extends VFSStructuralDeployersImpl { @Override protected void determineStructure(Deployment deployment, StructureMetaData structure) throws Exception { super.determineStructure(deployment, structure); ((MutableAttachments)deployment.getPredeterminedManagedObjects()).addAttachment(StructureMetaData.class, structure); } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structurebuilder/support/ChildFileStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/struc0000644000175000017500000000265010766002755033513 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.vfs.structurebuilder.support; import org.jboss.deployers.vfs.plugins.structure.file.FileStructure; import org.jboss.virtual.VirtualFile; /** * @author Ales Justin */ public class ChildFileStructure extends FileStructure { protected boolean checkFileMatchers(VirtualFile file) { return file.getName().contains("child"); } } libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/support/0000755000175000017500000000000011620060441033325 5ustar twernertwerner././@LongLink0000000000000000000000000000020000000000000011555 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/support/TCCLClassLoaderDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/test/java/org/jboss/test/deployers/support/T0000644000175000017500000000274411104041440033455 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.deployers.support; import org.jboss.deployers.spi.deployer.helpers.AbstractClassLoaderDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * @author Ales Justin */ public class TCCLClassLoaderDeployer extends AbstractClassLoaderDeployer { public ClassLoader createClassLoader(DeploymentUnit unit) throws Exception { return Thread.currentThread().getContextClassLoader(); } } libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/0000755000175000017500000000000011620060460023742 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/resources/0000755000175000017500000000000011620060460025754 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/resources/schema/0000755000175000017500000000000011620060460027214 5ustar twernertwerner././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/resources/schema/jboss-deployers-2.0.xsdlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/resources/schema/jboss-deployers-2.0.xs0000644000175000017500000000433411137607542033230 0ustar twernertwerner ]]> libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/0000755000175000017500000000000011620060456024670 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/0000755000175000017500000000000011620060456025457 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/0000755000175000017500000000000011620060456026577 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/0000755000175000017500000000000011620060456030605 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/0000755000175000017500000000000011620060460031376 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/0000755000175000017500000000000011620060460033057 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000755000175000017500000000000011620060457033404 5ustar twernertwerner././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/ModuleRequirementIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000524211072370632033411 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import java.util.List; import org.jboss.classloading.spi.metadata.Requirement; import org.jboss.classloading.spi.metadata.RequirementsMetaData; import org.jboss.classloading.spi.metadata.helpers.AbstractRequirement; import org.jboss.classloading.plugins.metadata.ModuleRequirement; /** * Checks module requirements. * * @param exact output type * @author Ales Justin */ public class ModuleRequirementIntegrationDeployer extends RequirementIntegrationDeployer { private String module; public ModuleRequirementIntegrationDeployer(Class input) { super(input); } protected AbstractRequirement hasIntegrationModuleRequirement(RequirementsMetaData metadata) { if (metadata == null) return null; List requirements = metadata.getRequirements(); if (requirements != null && requirements.isEmpty() == false) { for (Requirement requirement : requirements) { if (requirement instanceof ModuleRequirement) { ModuleRequirement mr = (ModuleRequirement)requirement; if (mr.getName().equals(module)) return mr; } } } return null; } /** * Get the matching module name. * * @return the module name */ public String getModule() { return module; } /** * Set the matching module name. * * @param module the module name */ public void setModule(String module) { this.module = module; } }././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/RequirementIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000001546711072646724033433 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory; import org.jboss.classloading.spi.metadata.Requirement; import org.jboss.classloading.spi.metadata.RequirementsMetaData; import org.jboss.classloading.spi.metadata.helpers.AbstractRequirement; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.vfs.spi.deployer.AbstractOptionalVFSRealDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * Integration deployer. * Adds integration requirement to deployment classpath. * * @param exact output type * @author Adrian Brock * @author Ales Justin */ public abstract class RequirementIntegrationDeployer extends AbstractOptionalVFSRealDeployer { /** The jboss integration module names */ private Set integrationModuleNames; public RequirementIntegrationDeployer(Class input) { super(input); // We have to run before the classloading is setup setStage(DeploymentStages.DESCRIBE); // We modify the classloading imports/requirements addInput(ClassLoadingMetaData.class); setOutput(ClassLoadingMetaData.class); } /** * Get the integration module name. * * @return the integration modeule name */ public String getIntegrationModuleName() { if (integrationModuleNames == null || integrationModuleNames.isEmpty()) return null; else if (integrationModuleNames.size() == 1) return integrationModuleNames.iterator().next(); else throw new IllegalArgumentException("Multiple integration module names: " + integrationModuleNames); } /** * Set the intagration module name. * * @param integrationModuleName the integration module name */ public void setIntegrationModuleName(String integrationModuleName) { this.integrationModuleNames = Collections.singleton(integrationModuleName); } /** * Get integration module names. * * @return the integration module names */ public Set getIntegrationModuleNames() { return integrationModuleNames; } /** * Set integration module names * * @param integrationModuleNames the integration modeul names */ public void setIntegrationModuleNames(Set integrationModuleNames) { this.integrationModuleNames = integrationModuleNames; } /** * Check if integration urls exist. */ public void start() { if (integrationModuleNames == null || integrationModuleNames.isEmpty()) throw new IllegalArgumentException("No integration module names."); } @Override public void deploy(VFSDeploymentUnit unit, T metaData) throws DeploymentException { ClassLoadingMetaData clmd = unit.getAttachment(ClassLoadingMetaData.class); if (clmd == null) { log.warn("Missing ClassLoadingMetaData: " + unit); return; } RequirementsMetaData requirements = clmd.getRequirements(); AbstractRequirement integrationModule = hasIntegrationModuleRequirement(requirements); // If we are importing integration core then import the integration at the same version if (integrationModule != null) { ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance(); List added = new ArrayList(); try { for (String integrationModuleName : integrationModuleNames) { Requirement integrationRequirement = factory.createRequireModule(integrationModuleName, integrationModule.getVersionRange()); requirements.addRequirement(integrationRequirement); added.add(integrationModule); } } catch (Throwable t) { for (int i = added.size() - 1; i >=0; i--) { requirements.removeRequirement(added.get(i)); } throw DeploymentException.rethrowAsDeploymentException("Error adding integration requirement.", t); } } } @Override public void undeploy(VFSDeploymentUnit unit, T deployment) { ClassLoadingMetaData clmd = unit.getAttachment(ClassLoadingMetaData.class); if (clmd != null) { RequirementsMetaData requirements = clmd.getRequirements(); AbstractRequirement integrationModule = hasIntegrationModuleRequirement(requirements); if (integrationModule != null) { ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance(); for (String integrationModuleName : integrationModuleNames) { try { Requirement integrationRequirement = factory.createRequireModule(integrationModuleName, integrationModule.getVersionRange()); requirements.removeRequirement(integrationRequirement); } catch (Throwable t) { log.warn("Error during requirement removal: " + integrationModuleName, t); } } } } } /** * Do we have integration module requirements. * * @param requirements the current requirements * @return integration core requirement */ protected abstract AbstractRequirement hasIntegrationModuleRequirement(RequirementsMetaData requirements); }././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderDescribeDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000347210761233255033417 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import org.jboss.classloading.spi.dependency.policy.ClassLoaderPolicyModule; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.plugins.classloading.AbstractClassLoaderDescribeDeployer; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * VFSClassLoaderDescribeDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSClassLoaderDescribeDeployer extends AbstractClassLoaderDescribeDeployer { protected ClassLoaderPolicyModule createModule(DeploymentUnit unit, ClassLoadingMetaData metaData) throws DeploymentException { return new VFSDeploymentClassLoaderPolicyModule(unit); } } ././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/PathUrlIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000352311041342405033402 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * Checks path if matching integration deployment. * * @param exact output type * @author Ales Justin */ public class PathUrlIntegrationDeployer extends FilesUrlIntegrationDeployer { public PathUrlIntegrationDeployer(Class input) { super(input); } protected boolean isIntegrationDeployment(VFSDeploymentUnit unit) { String[] files = getFiles(); if (files == null || files.length == 0) return false; for(String path : files) { VirtualFile vf = unit.getFile(path); if (vf != null) return true; } return false; } }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/InMemoryClassesDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000001017111137607542033413 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import java.net.URL; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.vfs.spi.deployer.AbstractVFSRealDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.util.id.GUID; import org.jboss.virtual.MemoryFileFactory; import org.jboss.virtual.VirtualFile; /** * TempURLDeployer. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class InMemoryClassesDeployer extends AbstractVFSRealDeployer { /** The name of the dynamic class root */ public static final String DYNAMIC_CLASS_URL_KEY = "DYNAMIC_CLASS_URL_KEY"; /** The name of the dynamic class root */ public static final String DYNAMIC_CLASS_KEY = "DYNAMIC_CLASS_KEY"; /** The host name creator */ private HostNameCreator hostNameCreator; /** * Create a new TempURLDeployer. */ public InMemoryClassesDeployer() { // Make it run before the classloader describe deployer setStage(DeploymentStages.DESCRIBE); setOutput(ClassLoadingMetaData.class); setTopLevelOnly(true); } /** * Create host name. * * @param unit the deployment unit * @return the host name */ protected String createHost(VFSDeploymentUnit unit) { return (hostNameCreator != null) ? hostNameCreator.createHostName(unit) : GUID.asString(); } @Override public void deploy(VFSDeploymentUnit unit) throws DeploymentException { try { URL dynamicClassRoot = new URL("vfsmemory", createHost(unit), ""); VirtualFile classes = MemoryFileFactory.createRoot(dynamicClassRoot).getRoot(); unit.addAttachment(DYNAMIC_CLASS_URL_KEY, dynamicClassRoot); unit.addAttachment(DYNAMIC_CLASS_KEY, classes); unit.prependClassPath(classes); log.debug("Dynamic class root for " + unit.getName() + " is " + dynamicClassRoot); } catch (Exception e) { throw new DeploymentException("Error creating dynamic class root", e); } } @Override public void undeploy(VFSDeploymentUnit unit) { log.debug("Removing dynamic class root for " + unit.getName()); try { VirtualFile classes = unit.removeAttachment(DYNAMIC_CLASS_KEY, VirtualFile.class); if (classes != null) { unit.removeClassPath(classes); } } finally { try { URL root = unit.removeAttachment(DYNAMIC_CLASS_URL_KEY, URL.class); if (root != null) MemoryFileFactory.deleteRoot(root); } catch (Exception e) { log.warn("Error deleting dynamic class root for " + unit.getName(), e); } } } /** * Set host name creator. * * @param hostNameCreator the host name creator */ public void setHostNameCreator(HostNameCreator hostNameCreator) { this.hostNameCreator = hostNameCreator; } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/UrlIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000001402011137607542033410 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import java.security.ProtectionDomain; import java.security.CodeSource; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.vfs.spi.deployer.AbstractOptionalVFSRealDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; /** * Integration deployer. * Adds integration path to deployment classpath. * * @param exact output type * @author Adrian Brock * @author Ales Justin */ public abstract class UrlIntegrationDeployer extends AbstractOptionalVFSRealDeployer { /** Location of integration jar */ private Set integrationURLs; public UrlIntegrationDeployer(Class input) { super(input); // We have to run before the classloading is setup setStage(DeploymentStages.DESCRIBE); // Keep things simple having one attachment to control the classloader processing order setOutput(ClassLoadingMetaData.class); } /** * Get the integration url. * * @return the integration url */ public URL getIntegrationURL() { if (integrationURLs == null || integrationURLs.isEmpty()) return null; else if (integrationURLs.size() == 1) return integrationURLs.iterator().next(); else throw new IllegalArgumentException("Multiple integration urls: " + integrationURLs); } /** * Set integration url. * * @param url the integration url */ public void setIntegrationURL(URL url) { integrationURLs = Collections.singleton(url); } /** * Get integration urls. * * @return the integration urls */ public Set getIntegrationURLs() { return integrationURLs; } /** * Set integration urls. * * @param integrationURLs the integration urls */ public void setIntegrationURLs(Set integrationURLs) { this.integrationURLs = integrationURLs; } /** * Check if integration urls exist. */ public void start() { if (integrationURLs == null || integrationURLs.isEmpty()) throw new IllegalArgumentException("No integration urls."); } @Override public void deploy(VFSDeploymentUnit unit, T metaData) throws DeploymentException { if (isIntegrationDeployment(unit, metaData)) { List added = new ArrayList(); try { for (URL integrationURL : integrationURLs) { VirtualFile integration = VFS.getRoot(integrationURL); unit.addClassPath(integration); added.add(integration); } } catch (Throwable t) { List classPath = unit.getClassPath(); for (int i = added.size() - 1; i >=0; i--) { classPath.remove(added.get(i)); } throw DeploymentException.rethrowAsDeploymentException("Error adding integration path.", t); } } } @Override public void undeploy(VFSDeploymentUnit unit, T metaData) { if (isIntegrationDeployment(unit, metaData)) { List classPath = unit.getClassPath(); for (URL integrationURL : integrationURLs) { try { VirtualFile integration = VFS.getRoot(integrationURL); classPath.remove(integration); } catch (Throwable t) { log.warn("Error removing integration from classpath: " + integrationURL, t); } } } } /** * Get the deployer's location. * Might be useful for integration url creation. * * @return the deployer's location */ protected String getDeployerLocation() { ProtectionDomain pd = getClass().getProtectionDomain(); CodeSource cs = pd.getCodeSource(); URL location = cs.getLocation(); return location.toExternalForm(); } /** * Is unit integration deployment unit? * * @param unit the deployment unit * @param metaData the meta data * @return true if the unit is integration deployment */ protected boolean isIntegrationDeployment(VFSDeploymentUnit unit, T metaData) { return isIntegrationDeployment(unit); } /** * Is unit integration deployment unit? * * @param unit the deployment unit * @return true if the unit is integration deployment */ protected abstract boolean isIntegrationDeployment(VFSDeploymentUnit unit); }././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderClassPathDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000001166511044122744033415 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.jboss.classloading.spi.metadata.ClassLoadingMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.vfs.spi.deployer.AbstractOptionalVFSRealDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.deployers.vfs.spi.structure.helpers.ClassPathVisitor; import org.jboss.virtual.VirtualFile; /** * VFSClassLoaderClassPathDeployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSClassLoaderClassPathDeployer extends AbstractOptionalVFSRealDeployer { /** The vfs classpath */ public static String VFS_CLASS_PATH = "org.jboss.deployers.vfs.plugins.classloader.VFS_CLASS_PATH"; /** The vfs excluded */ public static String VFS_EXCLUDES = "org.jboss.deployers.vfs.plugins.classloader.VFS_EXCLUDES"; /** * Create a new VFSClassLoaderClassPathDeployer. */ public VFSClassLoaderClassPathDeployer() { super(ClassLoadingMetaData.class); setOutput(ClassLoadingMetaData.class); setStage(DeploymentStages.DESCRIBE); } @Override @SuppressWarnings("unchecked") public void deploy(VFSDeploymentUnit unit, ClassLoadingMetaData deployment) throws DeploymentException { // We aren't creating a classloader if (unit.isTopLevel() == false && deployment == null) return; // Locate the parent class path List parentClassPath = null; Set parentExcludes = null; VFSDeploymentUnit parent = unit.getParent(); while (parent != null) { parentClassPath = parent.getAttachment(VFS_CLASS_PATH, List.class); if (parentClassPath != null) { parentExcludes = parent.getAttachment(VFS_EXCLUDES, Set.class); break; } else parent = parent.getParent(); } // Get our classpath ClassPathVisitor visitor = new ClassPathVisitor(unit); unit.visit(visitor); Set rawClassPath = visitor.getClassPath(); // We're creating the classpath List vfsClassPath = new ArrayList(); unit.addAttachment(VFS_CLASS_PATH, vfsClassPath, List.class); Set vfsExcludes = new HashSet(); unit.addAttachment(VFS_EXCLUDES, vfsExcludes, Set.class); // Whether our classloader can see the parent boolean canSeeParent = parentClassPath != null && deployment.getParentDomain() == null; // Add all the classpath elements unless we can see the parent and its already in the parent if (rawClassPath != null) { for (VirtualFile file : rawClassPath) { if (vfsClassPath.contains(file) == false) { if (canSeeParent == false || (canSeeParent && parentClassPath.contains(file) == false)) vfsClassPath.add(file); } } } // Exclude those elements from the parent that it doesn't explicitly have if (parentClassPath != null) { VirtualFile root = unit.getRoot(); if (root != null && parentClassPath.contains(root) == false) parentExcludes.add(root); for (VirtualFile file : vfsClassPath) { if (parentClassPath.contains(file) == false) { parentExcludes.add(file); } } } } @Override public void undeploy(VFSDeploymentUnit unit, ClassLoadingMetaData deployment) { unit.removeAttachment(VFS_CLASS_PATH); unit.removeAttachment(VFS_EXCLUDES); } } ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/HostNameCreator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000276211113261537033414 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * Create host name for in-memory url. * * @author Ales Justin */ public interface HostNameCreator { /** * Create host name. * * It should not contain any '/' due to VFS Memory context limitations. * See JBDEPLOY-75. * * @param unit the vfs deployment unit * @return host name */ String createHostName(VFSDeploymentUnit unit); }././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/FilesUrlIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000333311041342405033401 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; /** * Checks files if matching integration deployment. * * @param exact output type * @author Ales Justin */ public abstract class FilesUrlIntegrationDeployer extends UrlIntegrationDeployer { private String[] files; protected FilesUrlIntegrationDeployer(Class input) { super(input); } /** * Get the matching files. * * @return the files */ public String[] getFiles() { return files; } /** * Set the matching files. * * @param files the files */ public void setFiles(String[] files) { this.files = files; } }././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/VFSDeploymentClassLoaderPolicyModule.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000001406111044573564033420 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import java.net.URL; import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import org.jboss.classloader.spi.filter.ClassFilter; import org.jboss.classloading.plugins.vfs.PackageVisitor; import org.jboss.classloading.plugins.vfs.VFSResourceVisitor; import org.jboss.classloading.spi.metadata.Capability; import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory; import org.jboss.classloading.spi.metadata.ExportAll; import org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.classloading.spi.visitor.ResourceVisitor; import org.jboss.deployers.plugins.classloading.AbstractDeploymentClassLoaderPolicyModule; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.virtual.VirtualFile; /** * VFSDeploymentClassLoaderPolicyModule. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSDeploymentClassLoaderPolicyModule extends AbstractDeploymentClassLoaderPolicyModule { /** The serialVersionUID */ private static final long serialVersionUID = 1L; /** No roots */ private static final VirtualFile[] NO_ROOTS = new VirtualFile[0]; /** The cached roots */ private VirtualFile[] vfsRoots; /** The excluded roots */ private VirtualFile[] excludedRoots; /** * Create a new VFSDeploymentClassLoaderPolicyModule. * * @param unit the deployment unit * @throws IllegalArgumentException for a null deployment unit */ @SuppressWarnings("unchecked") public VFSDeploymentClassLoaderPolicyModule(DeploymentUnit unit) { super(unit); List vfsClassPath = unit.getAttachment(VFSClassLoaderClassPathDeployer.VFS_CLASS_PATH, List.class); if (vfsClassPath == null) vfsRoots = NO_ROOTS; else vfsRoots = vfsClassPath.toArray(new VirtualFile[vfsClassPath.size()]); Set vfsExcludes = unit.getAttachment(VFSClassLoaderClassPathDeployer.VFS_EXCLUDES, Set.class); if (vfsExcludes != null) excludedRoots = vfsExcludes.toArray(new VirtualFile[vfsExcludes.size()]); } @Override protected List determineCapabilities() { // While we are here, check the roots VirtualFile[] roots = vfsRoots; List capabilities = super.determineCapabilities(); if (capabilities != null) return capabilities; // We need to work it out ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance(); capabilities = new CopyOnWriteArrayList(); // We have a module capability Object version = getVersion(); Capability capability = factory.createModule(getName(), version); capabilities.add(capability); // Do we determine package capabilities ClassFilter included = getIncluded(); ClassFilter excluded = getExcluded(); ClassFilter excludedExport = getExcludedExport(); ExportAll exportAll = getExportAll(); if (exportAll != null) { Set exportedPackages = PackageVisitor.determineAllPackages(roots, excludedRoots, exportAll, included, excluded, excludedExport); for (String packageName : exportedPackages) { capability = factory.createPackage(packageName, version); capabilities.add(capability); } } return capabilities; } @Override public VFSClassLoaderPolicy getPolicy() { return (VFSClassLoaderPolicy) super.getPolicy(); } @Override protected VFSClassLoaderPolicy determinePolicy() { VFSClassLoaderPolicy policy = VFSClassLoaderPolicy.createVFSClassLoaderPolicy(getContextName(), vfsRoots, excludedRoots); String[] packageNames = getPackageNames(); policy.setExportedPackages(packageNames); policy.setIncluded(getIncluded()); policy.setExcluded(getExcluded()); policy.setExcludedExport(getExcludedExport()); policy.setExportAll(getExportAll()); policy.setImportAll(isImportAll()); policy.setCacheable(isCacheable()); policy.setBlackListable(isBlackListable()); policy.setDelegates(getDelegates()); return policy; } @Override public URL getDynamicClassRoot() { return getDeploymentUnit().getAttachment(InMemoryClassesDeployer.DYNAMIC_CLASS_URL_KEY, URL.class); } @Override public void visit(ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter, URL... urls) { ClassLoader classLoader = getClassLoader(); if (classLoader == null) throw new IllegalStateException("ClassLoader has not been constructed for " + getContextName()); VirtualFile[] roots = vfsRoots; if (roots != null && roots.length > 0) { ClassFilter included = getIncluded(); ClassFilter excluded = getExcluded(); VFSResourceVisitor.visit(roots, excludedRoots, included, excluded, classLoader, visitor, filter, recurseFilter, urls); } } } ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/PackageRequirementIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000543611072370632033416 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import java.util.List; import java.util.Set; import org.jboss.classloading.plugins.metadata.PackageRequirement; import org.jboss.classloading.spi.metadata.Requirement; import org.jboss.classloading.spi.metadata.RequirementsMetaData; import org.jboss.classloading.spi.metadata.helpers.AbstractRequirement; /** * Checks package requirements. * * @param exact output type * @author Ales Justin */ public class PackageRequirementIntegrationDeployer extends RequirementIntegrationDeployer { private Set packages; public PackageRequirementIntegrationDeployer(Class input) { super(input); } protected AbstractRequirement hasIntegrationModuleRequirement(RequirementsMetaData metadata) { if (metadata == null) return null; List requirements = metadata.getRequirements(); if (requirements != null && requirements.isEmpty() == false && packages != null && packages.isEmpty() == false) { for (Requirement requirement : requirements) { if (requirement instanceof PackageRequirement) { PackageRequirement pr = (PackageRequirement)requirement; if (packages.contains(pr.getName())) return pr; } } } return null; } /** * Get the matching package names. * * @return the package names */ public Set getPackages() { return packages; } /** * Set the matching package names. * * @param packages the package names */ public void setPackages(Set packages) { this.packages = packages; } }././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/DeploymentHostNameCreator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000342711113261537033413 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * Join all deployment names. * * @author Ales Justin */ public class DeploymentHostNameCreator implements HostNameCreator { /**The prefix */ private String prefix = "in-memory"; public String createHostName(VFSDeploymentUnit unit) { StringBuilder builder = new StringBuilder(prefix); VFSDeploymentUnit vdu = unit; while (vdu != null) { builder.append("-").append(vdu.getSimpleName()); vdu = vdu.getParent(); } return builder.toString(); } /** * Set prefix. * * @param prefix the prefix */ public void setPrefix(String prefix) { this.prefix = prefix; } }././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/MetaDataUrlIntegrationDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000354711041342405033410 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.classloader; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * Checks metadata if matching integration deployment. * * @param exact output type * @author Ales Justin */ public class MetaDataUrlIntegrationDeployer extends FilesUrlIntegrationDeployer { public MetaDataUrlIntegrationDeployer(Class input) { super(input); } protected boolean isIntegrationDeployment(VFSDeploymentUnit unit) { String[] files = getFiles(); if (files == null || files.length == 0) return false; for(String file : files) { VirtualFile vf = unit.getMetaDataFile(file); if (vf != null) return true; } return false; } }././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/client/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000755000175000017500000000000011620060457033404 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/client/AbstractVFSDeployment.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000773511050535747033430 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.client; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import org.jboss.deployers.client.plugins.deployment.AbstractDeployment; import org.jboss.deployers.vfs.plugins.vfs.VirtualFileSerializator; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.virtual.VirtualFile; /** * AbstractVFSDeployment. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class AbstractVFSDeployment extends AbstractDeployment implements VFSDeployment { /** The serialVersionUID */ private static final long serialVersionUID = 2L; /** The flag to do direct VF serialization */ private boolean directRootSerialization; /** The root */ private transient VirtualFile root; /** * Get the vfs file name safely * * @param root the virutal file * @return the name */ static final String safeVirtualFileName(VirtualFile root) { if (root == null) throw new IllegalArgumentException("Null root"); try { return root.toURI().toString(); } catch (Exception e) { return root.getName(); } } /** * For serialization */ public AbstractVFSDeployment() { } /** * Create a new VFSDeployment. * * @param root the root * @throws IllegalArgumentException for a null root */ public AbstractVFSDeployment(VirtualFile root) { super(safeVirtualFileName(root)); this.root = root; } public VirtualFile getRoot() { return root; } @Override public String getSimpleName() { return getRoot().getName(); } @Override public String toString() { return "AbstractVFSDeployment(" + getSimpleName() + ")"; } /** * Should we serialize root directly. * e.g. the root is memory virtual file instance * @see org.jboss.virtual.plugins.context.memory.MemoryContextHandler * * @param directRootSerialization the direct root serialization flag */ public void setDirectRootSerialization(boolean directRootSerialization) { this.directRootSerialization = directRootSerialization; } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); directRootSerialization = in.readBoolean(); if (directRootSerialization) root = (VirtualFile)in.readObject(); else { VirtualFileSerializator serializator = (VirtualFileSerializator)in.readObject(); root = serializator.getFile(); } } public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); out.writeBoolean(directRootSerialization); if (directRootSerialization) out.writeObject(root); else out.writeObject(new VirtualFileSerializator(root)); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/client/DefaultVFSDeploymentFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/cl0000644000175000017500000000304610731616564033421 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.client; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory; import org.jboss.virtual.VirtualFile; /** * DefaultVFSDeploymentFactory. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class DefaultVFSDeploymentFactory extends VFSDeploymentFactory { @Override protected VFSDeployment newVFSDeployment(VirtualFile root) { return new AbstractVFSDeployment(root); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/xb/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/xb0000755000175000017500000000000011620060457033417 5ustar twernertwerner././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/xb/SchemaResolverDeployerMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/xb0000644000175000017500000001334110772475367033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.xb; import java.io.Serializable; import java.util.Collections; import java.util.List; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlTransient; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder; import org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer; import org.jboss.xb.annotations.JBossXmlSchema; /** * Shortcut for defining new schema resolver deployer. * * @author Ales Justin */ @JBossXmlSchema(namespace="urn:jboss:deployers:2.0", elementFormDefault=XmlNsForm.QUALIFIED) @XmlRootElement(name="jbossxb-parser") @XmlType(name="parserType") public class SchemaResolverDeployerMetaData implements Serializable, BeanMetaDataFactory { /** The serialVersionUID */ private static final long serialVersionUID = 1L; private String name; private String metadata; private String suffix; private String fileName; private boolean useSchemaValidation = true; private boolean useValidation = true; private boolean registerWithJBossXB; private String jarExtension; private boolean includeDeploymentFile; private boolean buildManagedObject; @XmlTransient public List getBeans() { if (getSuffix() == null && getFileName() == null) throw new IllegalArgumentException("Both suffix and file-name are null!"); BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(getName(), SchemaResolverDeployer.class.getName()); builder.addConstructorParameter(Class.class.getName(), getMetadata()); builder.addPropertyMetaData("suffix", getSuffix()); builder.addPropertyMetaData("name", getFileName()); builder.addPropertyMetaData("useSchemaValidation", isUseSchemaValidation()); builder.addPropertyMetaData("useValidation", isUseValidation()); builder.addPropertyMetaData("registerWithJBossXB", isRegisterWithJBossXB()); builder.addPropertyMetaData("includeDeploymentFile", isIncludeDeploymentFile()); builder.addPropertyMetaData("buildManagedObject", isBuildManagedObject()); return Collections.singletonList(builder.getBeanMetaData()); } public String getName() { return name; } @XmlAttribute(required = true) public void setName(String name) { this.name = name; } public String getMetadata() { return metadata; } @XmlAttribute(required = true) public void setMetadata(String metadata) { this.metadata = metadata; } public String getSuffix() { return suffix; } @XmlAttribute public void setSuffix(String suffix) { this.suffix = suffix; } public String getFileName() { return fileName; } @XmlAttribute(name = "file-name") public void setFileName(String fileName) { this.fileName = fileName; } public boolean isUseSchemaValidation() { return useSchemaValidation; } @XmlAttribute(name = "use-schema-validation") public void setUseSchemaValidation(boolean useSchemaValidation) { this.useSchemaValidation = useSchemaValidation; } public boolean isUseValidation() { return useValidation; } @XmlAttribute(name = "use-validation") public void setUseValidation(boolean useValidation) { this.useValidation = useValidation; } public boolean isRegisterWithJBossXB() { return registerWithJBossXB; } @XmlAttribute(name = "register-with-jbossxb") public void setRegisterWithJBossXB(boolean registerWithJBossXB) { this.registerWithJBossXB = registerWithJBossXB; } public String getJarExtension() { return jarExtension; } @XmlAttribute(name = "jar-extension") public void setJarExtension(String jarExtension) { this.jarExtension = jarExtension; } public boolean isIncludeDeploymentFile() { return includeDeploymentFile; } @XmlAttribute(name = "include-deployment-file") public void setIncludeDeploymentFile(boolean includeDeploymentFile) { this.includeDeploymentFile = includeDeploymentFile; } public boolean isBuildManagedObject() { return buildManagedObject; } @XmlAttribute(name = "build-managed-object") public void setBuildManagedObject(boolean buildManagedObject) { this.buildManagedObject = buildManagedObject; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000755000175000017500000000000011620060460033370 5ustar twernertwerner././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DeploymentDependencyDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000613311113262533033377 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import org.jboss.dependency.spi.DependencyItem; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractDeploymentVisitor; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * DeploymentDependencyDeployer. * * @author Ales Justin */ public class DeploymentDependencyDeployer extends AbstractRealDeployerWithInput { public DeploymentDependencyDeployer() { setStage(DeploymentStages.POST_PARSE); setDeploymentVisitor(new DependencyItemComponentVisitor()); } private class DependencyItemComponentVisitor extends AbstractDeploymentVisitor { @Override protected void addComponent(DeploymentUnit unit, DependencyItem attachment) { unit.addIDependOn(attachment); } @Override protected void removeComponent(DeploymentUnit unit, DependencyItem attachment) { unit.removeIDependOn(attachment); } protected List getComponents(DeploymentDependencies deployment) { Set items = deployment.getDependencies(); if (items != null && items.isEmpty() == false) return new ArrayList(items); else return Collections.emptyList(); } protected Class getComponentType() { return DependencyItem.class; } protected String getComponentName(DependencyItem attachment) { throw new UnsupportedOperationException("No component name."); } public Class getVisitorType() { return DeploymentDependencies.class; } } } ././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DependenciesMetaDataDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000442211137607542033407 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import org.jboss.dependency.spi.ControllerContext; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * DependenciesMetaDataDeployer. * * @author Ales Justin */ public class DependenciesMetaDataDeployer extends AbstractSimpleRealDeployer { public DependenciesMetaDataDeployer() { super(DependenciesMetaData.class); addOutput(DeploymentDependencies.class); setStage(DeploymentStages.POST_PARSE); } public void deploy(DeploymentUnit unit, DependenciesMetaData deployment) throws DeploymentException { ControllerContext context = unit.getTopLevel().getAttachment(ControllerContext.class); if (context == null) throw new DeploymentException("Missing deployment controller context: " + unit.getName()); Object contextName = context.getName(); unit.addAttachment(DeploymentDependencies.class, new DeploymentDependenciesImpl(contextName, deployment)); } }././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DependenciesParserDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000303111113261537033374 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer; /** * DependenciesParserDeployer. * * @author Ales Justin */ public class DependenciesParserDeployer extends SchemaResolverDeployer { public DependenciesParserDeployer() { super(DependenciesMetaData.class); setName("jboss-dependency.xml"); setRegisterWithJBossXB(true); } }././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/package-info.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000263111113261537033401 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ @JBossXmlAdaptedTypes ({ @JBossXmlAdaptedType(type=ControllerState.class, valueAdapter=ControllerStateValueAdapter.class) }) package org.jboss.deployers.vfs.plugins.dependency; import org.jboss.beans.metadata.plugins.ControllerStateValueAdapter; import org.jboss.dependency.spi.ControllerState; import org.jboss.xb.annotations.JBossXmlAdaptedType; import org.jboss.xb.annotations.JBossXmlAdaptedTypes; ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/AliasesParserDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000535611114012063033375 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import java.io.InputStream; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.HashSet; import java.util.Set; import org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * AliasesParserDeployer. * * @author Ales Justin */ public class AliasesParserDeployer extends AbstractVFSParsingDeployer { public AliasesParserDeployer() { super(DeploymentAliases.class); setName("aliases.txt"); setTopLevelOnly(true); } protected DeploymentAliases parse(VFSDeploymentUnit unit, VirtualFile file, DeploymentAliases root) throws Exception { Set alises = new HashSet(); InputStream is = file.openStream(); try { BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { alises.add(line); } } finally { try { is.close(); } catch (IOException ignored) { } } return new DepoymentAliasesImpl(alises); } private class DepoymentAliasesImpl implements DeploymentAliases { private Set aliases; private DepoymentAliasesImpl(Set aliases) { this.aliases = aliases; } public Set getAliases() { return aliases; } } }././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DependenciesMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000450311113261537033401 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import java.io.Serializable; import java.util.List; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import org.jboss.xb.annotations.JBossXmlSchema; /** * DependenciesMetaData. * * @author Ales Justin */ @JBossXmlSchema(namespace="urn:jboss:dependency:1.0", elementFormDefault=XmlNsForm.QUALIFIED) @XmlRootElement(name="dependency") @XmlType(name="dependencyType", propOrder={"items"}) public class DependenciesMetaData implements Serializable { private static final long serialVersionUID = 1; /** The dependency items metadata */ private List items; /** * Get dependency metadata items. * * @return the dependency metadata items */ public List getItems() { return items; } /** * Set dependency metadata items. * * @param items the dependency metadata items */ @XmlElement(name = "item", type = DependencyItemMetaData.class) public void setItems(List items) { this.items = items; } } ././@LongLink0000000000000000000000000000021500000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DeploymentDependenciesImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000542111113261537033401 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.HashSet; import org.jboss.dependency.plugins.AbstractDependencyItem; import org.jboss.dependency.spi.DependencyItem; /** * DeploymentDependenciesimpl. * * @author Ales Justin */ public class DeploymentDependenciesImpl implements DeploymentDependencies { private Object name; private DependenciesMetaData dmd; private Set dependencies; public DeploymentDependenciesImpl(Object name, DependenciesMetaData dmd) { if (name == null) throw new IllegalArgumentException("Null name"); if (dmd == null) throw new IllegalArgumentException("Null dmd"); this.name = name; this.dmd = dmd; } /** * Create dependency item. * * @param dimd the dependency metadata item * @return new dependency item */ protected DependencyItem createDependencyItem(DependencyItemMetaData dimd) { return new AbstractDependencyItem(name, dimd.getValue(), dimd.getWhenRequired(), dimd.getDependentState()); } public Set getDependencies() { if (dependencies == null) { List dimds = dmd.getItems(); if (dimds != null && dimds.isEmpty() == false) { dependencies = new HashSet(); for (DependencyItemMetaData dimd : dimds) dependencies.add(createDependencyItem(dimd)); } else { dependencies = Collections.emptySet(); } } return dependencies; } }././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DependencyItemMetaData.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000566311113261537033411 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import java.io.Serializable; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; import org.jboss.dependency.spi.ControllerState; /** * DependencyItemMetaData. * * @author Ales Justin */ @XmlRootElement(name="item") @XmlType(name="itemType") public class DependencyItemMetaData implements Serializable { private static final long serialVersionUID = 1; private Object value; private ControllerState whenRequired = ControllerState.DESCRIBED; private ControllerState dependentState; /** * Get the value. * * @return the value */ public Object getValue() { return value; } /** * Set the value. * * @param value the value */ @XmlValue public void setValue(Object value) { this.value = value; } /** * Get when required state. * * @return the when required state */ public ControllerState getWhenRequired() { return whenRequired; } /** * Set when required state. * * @param whenRequired the when required state */ @XmlAttribute(name = "whenRequired") public void setWhenRequired(ControllerState whenRequired) { this.whenRequired = whenRequired; } /** * Get dependent state. * * @return the dependent state */ public ControllerState getDependentState() { return dependentState; } /** * Set dependent state. * * @param dependentState the dependent state */ @XmlAttribute(name = "dependentState") public void setDependentState(ControllerState dependentState) { this.dependentState = dependentState; } }././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DeploymentAliases.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000256411113261537033406 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import java.util.Set; /** * DeploymentAliases. * * @author Ales Justin */ public interface DeploymentAliases { /** * Get a set of dependencies. * * @return the dependencies */ Set getAliases(); }././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DeploymentDependencies.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000267711113261537033413 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import java.util.Set; import org.jboss.dependency.spi.DependencyItem; /** * DeploymentDependencies. * * @author Ales Justin */ public interface DeploymentDependencies { /** * Get a set of dependencies. * * @return the dependencies */ Set getDependencies(); }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/dependency/DeploymentAliasesDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/de0000644000175000017500000000725011114012063033370 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.dependency; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import org.jboss.dependency.spi.Controller; import org.jboss.dependency.spi.ControllerContext; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.spi.deployer.helpers.AbstractDeploymentVisitor; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; import org.jboss.deployers.structure.spi.DeploymentUnit; /** * DeploymentAliasesDeployer. * * @author Ales Justin */ public class DeploymentAliasesDeployer extends AbstractRealDeployerWithInput { private Controller controller; public DeploymentAliasesDeployer(Controller controller) { if (controller == null) throw new IllegalArgumentException("Null controller"); this.controller = controller; setStage(DeploymentStages.POST_PARSE); setDeploymentVisitor(new DeploymentAliasDeploymentVisitor()); setTopLevelOnly(true); } private class DeploymentAliasDeploymentVisitor extends AbstractDeploymentVisitor { @Override protected void addComponent(DeploymentUnit unit, Object attachment) { ControllerContext context = unit.getAttachment(ControllerContext.class); if (context == null) throw new IllegalArgumentException("Missing deployment controller context: " + unit.getName()); Object contextName = context.getName(); try { controller.addAlias(attachment, contextName); } catch (Throwable t) { throw new RuntimeException(t); } } @Override protected void removeComponent(DeploymentUnit unit, Object attachment) { controller.removeAlias(attachment); } protected List getComponents(DeploymentAliases deployment) { Set aliases = deployment.getAliases(); if (aliases != null && aliases.isEmpty() == false) return new ArrayList(aliases); else return Collections.emptyList(); } protected Class getComponentType() { return Object.class; } protected String getComponentName(Object attachment) { throw new UnsupportedOperationException("No component name."); } public Class getVisitorType() { return DeploymentAliases.class; } } }././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/vfs/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/vf0000755000175000017500000000000011620060460033413 5ustar twernertwerner././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/vfs/VirtualFileSerializator.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/vf0000644000175000017500000001126411050212001033404 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.vfs; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.ObjectStreamField; import java.io.Serializable; import java.net.URISyntaxException; import java.net.URL; import java.util.Collections; import java.util.List; import java.util.ArrayList; import org.jboss.virtual.VFS; import org.jboss.virtual.VirtualFile; /** * A minimal way of serializing VirtualFiles. * * @author Ales Justin */ public class VirtualFileSerializator implements Serializable { private static final long serialVersionUID = 1L; private static final ObjectStreamField[] serialPersistentFields = { new ObjectStreamField("rootUrl", URL.class), new ObjectStreamField("path", String.class), }; /** Minimal info to get full vfs file structure */ private URL rootUrl; private String path; /** The root */ private transient VirtualFile file; public VirtualFileSerializator() { } public VirtualFileSerializator(VirtualFile file) { this.file = file; } /** * Transform VirtualFileSerializators to VirtualFiles. * * @param serializators the serializators * @return virtual files * @throws IOException for any error */ public static List toVirtualFiles(List serializators) throws IOException { if (serializators == null) return null; if (serializators.isEmpty()) return Collections.emptyList(); List files = new ArrayList(serializators.size()); for (VirtualFileSerializator serializator : serializators) files.add(serializator.getFile()); return files; } /** * Transform VirtualFiles to VirtualFileSerializators. * * @param files the virtual files * @return serializators * @throws IOException for any error */ public static List toVirtualFileSerializators(List files) throws IOException { if (files == null) return null; if (files.isEmpty()) return Collections.emptyList(); List serializators = new ArrayList(files.size()); for (VirtualFile file : files) serializators.add(new VirtualFileSerializator(file)); return serializators; } /** * Get the virtual file. * * @return virtual file instance * @throws IOException for any error */ @SuppressWarnings("deprecation") public VirtualFile getFile() throws IOException { if (file == null) { VirtualFile root = VFS.getRoot(rootUrl); file = root.findChild(path); } return file; } // write just url and path private void writeObject(ObjectOutputStream out) throws IOException, URISyntaxException { URL url = rootUrl; if (url == null) { VFS vfs = getFile().getVFS(); url = vfs.getRoot().toURL(); } String pathName = path; if (pathName == null) pathName = getFile().getPathName(); ObjectOutputStream.PutField fields = out.putFields(); fields.put("rootUrl", url); fields.put("path", pathName); out.writeFields(); } // read url and path private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { ObjectInputStream.GetField fields = in.readFields(); rootUrl = (URL) fields.get("rootUrl", null); path = (String) fields.get("path", null); } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000000000011620060457033434 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/SecurityActions.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000001120310746226606033443 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import java.io.IOException; import java.lang.reflect.UndeclaredThrowableException; import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import org.jboss.virtual.VirtualFile; /** * @author Scott.Stark@jboss.org * @version $Revision: 60921 $ */ public class SecurityActions { /** * Actions for File access */ interface FileActions { FileActions PRIVILEGED = new FileActions() { public Boolean isLeaf(final VirtualFile f) throws IOException { try { return AccessController.doPrivileged(new PrivilegedExceptionAction() { public Boolean run() throws Exception { return f.isLeaf(); } }); } catch(PrivilegedActionException e) { Exception ex = e.getException(); if( ex instanceof IOException ) throw (IOException) ex; else if( ex instanceof RuntimeException ) throw (RuntimeException) ex; else throw new UndeclaredThrowableException(ex); } } }; FileActions NON_PRIVILEGED = new FileActions() { public Boolean isLeaf(VirtualFile f) throws IOException { return f.isLeaf(); } }; public Boolean isLeaf(VirtualFile f) throws IOException; } static boolean isLeaf(VirtualFile f) throws IOException { SecurityManager sm = System.getSecurityManager(); if( sm != null ) return FileActions.PRIVILEGED.isLeaf(f); else return FileActions.NON_PRIVILEGED.isLeaf(f); } static ClassLoader getContextClassLoader() { if (System.getSecurityManager() == null) { return Thread.currentThread().getContextClassLoader(); } else { return AccessController.doPrivileged(GetContextClassLoader.INSTANCE); } } static class GetContextClassLoader implements PrivilegedAction { static GetContextClassLoader INSTANCE = new GetContextClassLoader(); public ClassLoader run() { return Thread.currentThread().getContextClassLoader(); } } static ClassLoader setContextClassLoader(final ClassLoader classLoader) { if (System.getSecurityManager() == null) { ClassLoader previous = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); return previous; } else { return AccessController.doPrivileged(new PrivilegedAction() { public ClassLoader run() { ClassLoader previous = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); return previous; } }); } } static void resetContextClassLoader(final ClassLoader classLoader) { if (System.getSecurityManager() == null) { Thread.currentThread().setContextClassLoader(classLoader); } else { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { Thread.currentThread().setContextClassLoader(classLoader); return null; } }); } } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/MetaDataMatchFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000566110640504614033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VirtualFileFilterWithAttributes; import org.jboss.virtual.VisitorAttributes; /** * Matches meta data * * @author adrian@jboss.org * @version $Revision: 44223 $ */ public class MetaDataMatchFilter implements VirtualFileFilterWithAttributes { /** The name */ private String name; /** The suffix */ private String suffix; /** The attributes */ private VisitorAttributes attributes; /** * Create a new MetaDataMatchFilter. * using {@link VisitorAttributes#LEAVES_ONLY} * * @param name the name to exactly match * @param suffix the suffix to partially match * @throws IllegalArgumentException if both the name and suffix are null */ public MetaDataMatchFilter(String name, String suffix) { this(name, suffix, null); } /** * Create a new MetaDataMatchFilter. * * @param name the name to exactly match * @param suffix the suffix to partially match * @param attributes the attributes, pass null to use {@link VisitorAttributes#LEAVES_ONLY} * @throws IllegalArgumentException if both the name and suffix are null */ public MetaDataMatchFilter(String name, String suffix, VisitorAttributes attributes) { if (name == null && suffix == null) throw new IllegalArgumentException("Null name and suffix"); this.name = name; this.suffix = suffix; if (attributes == null) attributes = VisitorAttributes.LEAVES_ONLY; this.attributes = attributes; } public VisitorAttributes getAttributes() { return attributes; } public boolean accepts(VirtualFile file) { String fileName = file.getName(); if (name != null && fileName.equals(name)) return true; if (suffix != null) return fileName.endsWith(suffix); return false; } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/jar/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000000000011620060457033434 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/jar/JARStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000001375311046532706033452 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.jar; import java.io.IOException; import java.util.Set; import org.jboss.beans.metadata.api.annotations.Install; import org.jboss.beans.metadata.api.annotations.Uninstall; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.matchers.JarExtensionProvider; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.plugins.context.jar.JarUtils; /** * JARStructure. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class JARStructure extends AbstractVFSStructureDeployer { /** * Create a new JARStructure. with the default suffixes */ public JARStructure() { this(null); } /** * Sets the default relative order 10000. * * @param suffixes the suffixes */ public JARStructure(Set suffixes) { if (suffixes != null) setSuffixes(suffixes); setRelativeOrder(10000); } /** * Gets the set of suffixes recognised as jars * * @return the set of suffixes */ public Set getSuffixes() { return JarUtils.getSuffixes(); } /** * Gets the set of suffixes recognised as jars * * @param suffixes - the set of suffixes */ public void setSuffixes(Set suffixes) { JarUtils.setJarSuffixes(suffixes); } @Install public void addJarExtension(JarExtensionProvider provider) { String extension = provider.getJarExtension(); if (extension != null) JarUtils.addJarSuffix(extension); } @Uninstall public void removeJarExtension(JarExtensionProvider provider) { String extension = provider.getJarExtension(); if (extension != null) JarUtils.removeJarSuffix(extension); } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { ContextInfo context = null; VirtualFile file = structureContext.getFile(); try { boolean trace = log.isTraceEnabled(); if (isLeaf(file) == false) { // For non top level directories that don't look like jars // we require a META-INF otherwise each subdirectory would be a subdeployment if (JarUtils.isArchive(file.getName()) == false) { if (structureContext.isTopLevel() == false) { try { VirtualFile child = file.getChild("META-INF"); if (child != null) { if (trace) log.trace("... ok - non top level directory has a META-INF subdirectory"); } else { if (trace) log.trace("... no - doesn't look like a jar and no META-INF subdirectory."); return false; } } catch (IOException e) { log.warn("Exception while checking if file is a jar: " + e); return false; } } else if (trace) { log.trace("... ok - doesn't look like a jar but it is a top level directory."); } } } else if (JarUtils.isArchive(file.getName())) { if (trace) log.trace("... ok - its an archive or at least pretending to be."); } else { if (trace) log.trace("... no - not a directory or an archive."); return false; } boolean valid = true; if (isSupportsCandidateAnnotations()) { StructureContext parentContext = structureContext.getParentContext(); if (parentContext != null && parentContext.isCandidateAnnotationScanning()) valid = checkCandidateAnnotations(structureContext, file); } if (valid) { // Create a context for this jar file with META-INF as the location for metadata context = createContext(structureContext, "META-INF"); // The classpath is the root addClassPath(structureContext, file, true, true, context); // We try all the children as potential subdeployments addAllChildren(structureContext); } return valid; } catch (Exception e) { // Remove the invalid context if(context != null) structureContext.removeChild(context); throw DeploymentException.rethrowAsDeploymentException("Error determining structure: " + file.getName(), e); } } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/dir/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000000000011620060457033434 5ustar twernertwerner././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/dir/DirectoryStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000752211070140372033436 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.dir; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.deployers.vfs.spi.structure.VFSStructuralDeployers; import org.jboss.deployers.vfs.spi.structure.helpers.AbstractStructureDeployer; import org.jboss.virtual.VirtualFile; /** * Legacy directory structure. * See JBAS-5900 for more details. * * @author Ales Justin */ @Deprecated public class DirectoryStructure extends AbstractVFSStructureDeployer { public DirectoryStructure() { setRelativeOrder(Integer.MAX_VALUE); } public boolean determineStructure(StructureContext context) throws DeploymentException { try { VirtualFile file = context.getFile(); // jar structure should already handle top level dirs if (context.isTopLevel() == false && isLeaf(file) == false && isMetadataPath(context) == false) { List children = file.getChildren(); if (children != null && children.isEmpty() == false) { VFSStructuralDeployers structuralDeployers = context.getDeployers(); // get top while (context.getParentContext() != null) context = context.getParentContext(); for (VirtualFile child : children) structuralDeployers.determineStructure(child, context); } } return false; } catch (Exception e) { throw DeploymentException.rethrowAsDeploymentException("Error determining structure.", e); } } /** * Is the current context already part of metadata path. * * @param context the current structure context * @return true if already part of parent's context metadata path */ protected boolean isMetadataPath(StructureContext context) { StructureContext parentContext = context.getParentContext(); if (parentContext == null) return false; StructureMetaData smd = parentContext.getMetaData(); ContextInfo info = smd.getContext(""); List metadataPaths = info.getMetaDataPath(); if (metadataPaths != null && metadataPaths.isEmpty() == false) { String relativePath = AbstractStructureDeployer.getRelativePath(context.getParent(), context.getFile()); for (String path : metadataPaths) if (relativePath.equalsIgnoreCase(path)) return true; } return false; } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000000000011620060457033434 5ustar twernertwerner././@LongLink0000000000000000000000000000022400000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/FileModificationTypeMatcher.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000713111137607542033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import java.util.Collections; import java.util.List; import java.util.ArrayList; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.virtual.VirtualFile; /** * File modification type matcher. * * @author Ales Justin */ public class FileModificationTypeMatcher extends AbstractModificationTypeMatcher { private String[] paths; private boolean metadataOnly; public FileModificationTypeMatcher(String... paths) { if (paths == null || paths.length == 0) throw new IllegalArgumentException("Null or empty paths"); this.paths = paths; } protected boolean isModificationDetermined(VirtualFile root, ContextInfo contextInfo) { for (String path : paths) { for (VirtualFile file : getStartingFiles(root, contextInfo)) { try { if (file.getChild(path) != null) return true; } catch (Exception e) { log.debug("Cannot determine modification type, cause: " + e); } } } return false; } /** * Get starting files for path check. * * @param file the current file * @param contextInfo the context info * @return list of starting files */ protected List getStartingFiles(VirtualFile file, ContextInfo contextInfo) { if (metadataOnly) { List metadataPaths = contextInfo.getMetaDataPath(); if (metadataPaths == null || metadataPaths.isEmpty()) { return Collections.emptyList(); } else { List result = new ArrayList(metadataPaths.size()); for (String metadataPath : metadataPaths) { try { VirtualFile child = file.getChild(metadataPath); if (child != null) result.add(child); } catch (Exception ignored) { } } return result; } } else { return Collections.singletonList(file); } } /** * Should we check metadata only. * * @param metadataOnly the metadata only flag */ public void setMetadataOnly(boolean metadataOnly) { this.metadataOnly = metadataOnly; } }././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/ModificationTypeMatcher.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000374211137607542033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.virtual.VirtualFile; /** * Determine if we need some modification. * * @author Ales Justin */ public interface ModificationTypeMatcher { /** * Should we modify the file. * * @param root the deployment root * @param structureMetaData the current structure metadata * @return true if we determined modification */ boolean determineModification(VirtualFile root, StructureMetaData structureMetaData); /** * Should we modify the file. * * @param root the deployment root * @param contextInfo the current context info * @return true if we determined modification */ boolean determineModification(VirtualFile root, ContextInfo contextInfo); }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/ModificationAction.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000317111022205021033420 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import java.io.IOException; import java.net.URISyntaxException; import org.jboss.virtual.VirtualFile; /** * Execute modification on file. * * @author Ales Justin */ public interface ModificationAction { /** * Modify file. * * @param original the original file * @return modified file, if not already * @throws IOException for any error * @throws URISyntaxException for any URI syntax error */ VirtualFile modify(VirtualFile original) throws IOException, URISyntaxException; } ././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/TempTopModificationTypeMatcher.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000306211137607542033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import org.jboss.deployers.spi.structure.ModificationType; /** * Temp top modification type matcher. * * @author Ales Justin */ public class TempTopModificationTypeMatcher extends FileModificationTypeMatcher { public TempTopModificationTypeMatcher(String... paths) { super(paths); setCheckChildren(true); setModificationType(ModificationType.TEMP); setTopLevelOnly(true); } }././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/TempModificationAction.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000300211022205021033411 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import java.io.IOException; import java.net.URISyntaxException; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VFSUtils; /** * Temp modification action. * * @author Ales Justin */ class TempModificationAction implements ModificationAction { public VirtualFile modify(VirtualFile original) throws IOException, URISyntaxException { return VFSUtils.temp(original); } }././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/UnpackModificationAction.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000301211022205021033412 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import java.io.IOException; import java.net.URISyntaxException; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VFSUtils; /** * Unpack modification action. * * @author Ales Justin */ class UnpackModificationAction implements ModificationAction { public VirtualFile modify(VirtualFile original) throws IOException, URISyntaxException { return VFSUtils.unpack(original); } } ././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/ExplodeModificationAction.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000301311022205021033413 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import java.io.IOException; import java.net.URISyntaxException; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VFSUtils; /** * Explode modification action. * * @author Ales Justin */ class ExplodeModificationAction implements ModificationAction { public VirtualFile modify(VirtualFile original) throws IOException, URISyntaxException { return VFSUtils.explode(original); } }././@LongLink0000000000000000000000000000023300000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/ModificationTypeStructureProcessor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000001200011137607542033434 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import java.util.ArrayList; import java.util.List; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.structure.spi.StructureProcessor; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.virtual.VirtualFile; /** * Determine if we need some modification. * * @author Ales Justin */ public class ModificationTypeStructureProcessor implements StructureProcessor { private List matchers; public void prepareStructureMetaData(Deployment deployment, StructureMetaData structureMetaData) { if (deployment instanceof VFSDeployment == false) return; VFSDeployment vfsDeployment = VFSDeployment.class.cast(deployment); VirtualFile root = vfsDeployment.getRoot(); checkForModification(root, structureMetaData); } public void prepareContextInfo(DeploymentContext parentDeploymentContext, ContextInfo contextInfo) { if (parentDeploymentContext instanceof VFSDeploymentContext == false || contextInfo == null) return; VFSDeploymentContext vfsParentDeploymentContext = VFSDeploymentContext.class.cast(parentDeploymentContext); VirtualFile root = vfsParentDeploymentContext.getFile(contextInfo.getPath()); checkForModification(root, contextInfo); } public void applyStructureMetaData(DeploymentContext deploymentContext, StructureMetaData structureMetaData) { } public void applyContextInfo(DeploymentContext deploymentContext, ContextInfo contextInfo) { } /** * Check for modification. * * @param root the deployment root * @param structureMetaData the structure metadata */ protected void checkForModification(VirtualFile root, StructureMetaData structureMetaData) { ContextInfo contex = structureMetaData.getContext(""); if (contex == null || contex.getModificationType() != null) return; if (matchers != null && matchers.isEmpty() == false) { for (ModificationTypeMatcher matcher : matchers) { if (matcher.determineModification(root, structureMetaData)) { break; } } } } /** * Check for modification. * * @param root the deployment root * @param contextInfo the context info */ protected void checkForModification(VirtualFile root, ContextInfo contextInfo) { if (root == null || contextInfo == null || contextInfo.getModificationType() != null) return; if (matchers != null && matchers.isEmpty() == false) { for (ModificationTypeMatcher matcher : matchers) { if (matcher.determineModification(root, contextInfo)) { break; } } } } /** * Set modification type matchers. * * @param matchers the modification type matchers. */ public void setMatchers(List matchers) { this.matchers = matchers; } /** * Add modification type matcher. * * @param matcher the modification type matcher */ public void addMatcher(ModificationTypeMatcher matcher) { if (matchers == null) matchers = new ArrayList(); matchers.add(matcher); } /** * Remove modification type matcher. * * @param matcher the modification type matcher */ public void removeMatcher(ModificationTypeMatcher matcher) { if (matchers != null) { matchers.remove(matcher); } } } ././@LongLink0000000000000000000000000000023000000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/AbstractModificationTypeMatcher.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000001147011137607542033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import java.util.List; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.ModificationType; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.logging.Logger; import org.jboss.virtual.VirtualFile; /** * Abstract modification type matcher. * * @author Ales Justin */ public abstract class AbstractModificationTypeMatcher implements ModificationTypeMatcher { protected Logger log = Logger.getLogger(getClass()); private boolean checkChildren; private boolean topLevelOnly; private boolean childrenOnly; private ModificationType modificationType; public boolean determineModification(VirtualFile root, StructureMetaData structureMetaData) { ContextInfo contextInfo = structureMetaData.getContext(""); if (childrenOnly == false) { boolean result = isModificationDetermined(root, contextInfo); if (result) { contextInfo.setModificationType(modificationType); return true; } } if (checkChildren) { List contexts = structureMetaData.getContexts(); if (contexts != null && contexts.isEmpty() == false) { for (ContextInfo child : contexts) { String path = child.getPath(); // Only process the child contexts if ("".equals(path) == false) { try { VirtualFile file = root.getChild(path); if (file != null && isModificationDetermined(file, child)) { contextInfo.setModificationType(modificationType); return true; } } catch (Exception e) { log.debug("Exception checking child context (" + child + ") for modification, cause: " + e); } } } } } return false; } public boolean determineModification(VirtualFile root, ContextInfo contextInfo) { boolean result = false; if (topLevelOnly == false) { result = isModificationDetermined(root, contextInfo); if (result) { contextInfo.setModificationType(modificationType); } } return result; } /** * Is modification determined. * * @param file the file * @param contextInfo the context info * @return true if we should apply modification type, false otherwise */ protected abstract boolean isModificationDetermined(VirtualFile file, ContextInfo contextInfo); /** * Do we apply modification to the top structure context. * * @param checkChildren the apply to top flag */ public void setCheckChildren(boolean checkChildren) { this.checkChildren = checkChildren; } /** * Is this matcher top level only. * * @param topLevelOnly the top level only flag */ public void setTopLevelOnly(boolean topLevelOnly) { this.topLevelOnly = topLevelOnly; } /** * Is this matcher children only. * * @param childrenOnly the children only flag */ public void setChildrenOnly(boolean childrenOnly) { this.childrenOnly = childrenOnly; } /** * Set the modification type. * * @param modificationType the modification type */ public void setModificationType(ModificationType modificationType) { this.modificationType = modificationType; } }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/modify/ModificationActions.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000370311022205021033421 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.modify; import java.util.HashMap; import java.util.Map; import org.jboss.deployers.spi.structure.ModificationType; /** * @author Ales Justin */ public class ModificationActions { private static final Map actions; static { actions = new HashMap(); actions.put(ModificationType.UNPACK, new UnpackModificationAction()); actions.put(ModificationType.EXPLODE, new ExplodeModificationAction()); actions.put(ModificationType.TEMP, new TempModificationAction()); } /** * Get the modification action. * * @param type the modification type * @return modification action or null if it not supported */ public static ModificationAction getAction(ModificationType type) { return actions.get(type); } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/war/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000000000011620060457033434 5ustar twernertwerner././@LongLink0000000000000000000000000000020200000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/war/WARStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000001425311046531125033440 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.war; import java.io.IOException; import java.util.List; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VirtualFileFilter; import org.jboss.virtual.VisitorAttributes; import org.jboss.virtual.plugins.vfs.helpers.SuffixMatchFilter; /** * WARStructure. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class WARStructure extends AbstractVFSStructureDeployer { /** The default filter which allows jars/jar directories */ public static final VirtualFileFilter DEFAULT_WEB_INF_LIB_FILTER = new SuffixMatchFilter(".jar", VisitorAttributes.DEFAULT); /** The web-inf/lib filter */ private VirtualFileFilter webInfLibFilter = DEFAULT_WEB_INF_LIB_FILTER; /** * Sets the default relative order 1000. * */ public WARStructure() { setRelativeOrder(1000); } /** * Get the webInfLibFilter. * * @return the webInfLibFilter. */ public VirtualFileFilter getWebInfLibFilter() { return webInfLibFilter; } /** * Set the webInfLibFilter. * * @param webInfLibFilter the webInfLibFilter. * @throws IllegalArgumentException for a null filter */ public void setWebInfLibFilter(VirtualFileFilter webInfLibFilter) { if (webInfLibFilter == null) throw new IllegalArgumentException("Null filter"); this.webInfLibFilter = webInfLibFilter; } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { ContextInfo context = null; VirtualFile file = structureContext.getFile(); try { boolean trace = log.isTraceEnabled(); if (isLeaf(file) == false) { // We require either a WEB-INF or the name ends in .war if (file.getName().endsWith(".war") == false) { try { VirtualFile child = file.getChild("WEB-INF"); if (child != null) { if (trace) log.trace("... ok - directory has a WEB-INF subdirectory"); } else { if (trace) log.trace("... no - doesn't look like a war and no WEB-INF subdirectory."); return false; } } catch (IOException e) { log.warn("Exception while checking if file is a war: " + e); return false; } } else if (trace) { log.trace("... ok - name ends in .war."); } // Create a context for this war file with WEB-INF as the location for metadata // Some wars also might have metadata in WEB-INF/classes/META-INF, e.g. persistence.xml context = createContext(structureContext, new String[]{"WEB-INF", "WEB-INF/classes/META-INF"}); // Add the war manifest classpath entries addClassPath(structureContext, file, false, true, context); try { // The classpath is WEB-INF/classes VirtualFile classes = file.getChild("WEB-INF/classes"); // Add the war manifest classpath entries if (classes != null) addClassPath(structureContext, classes, true, false, context); else if (trace) log.trace("No WEB-INF/classes for: " + file.getPathName()); } catch(IOException e) { log.warn("Exception while looking for classes, " + file.getPathName() + ", " + e); } // and the top level jars in WEB-INF/lib try { VirtualFile webinfLib = file.getChild("WEB-INF/lib"); if (webinfLib != null) { List archives = webinfLib.getChildren(webInfLibFilter); for (VirtualFile jar : archives) addClassPath(structureContext, jar, true, true, context); } else if (trace) log.trace("No WEB-INF/lib for: " + file.getPathName()); } catch (IOException e) { log.warn("Exception looking for WEB-INF/lib, " + file.getPathName() + ", " + e); } // There are no subdeployments for wars return true; } else { if (trace) log.trace("... no - not a directory or an archive."); return false; } } catch (Exception e) { // Remove the invalid context if (context != null) structureContext.removeChild(context); throw DeploymentException.rethrowAsDeploymentException("Error determining structure: " + file.getName(), e); } } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/explicit/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000000000011620060456033433 5ustar twernertwerner././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/explicit/StructureMetaDataObjectFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000001165311104043637033445 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.explicit; import java.util.ArrayList; import java.util.LinkedHashSet; import org.jboss.deployers.plugins.structure.ClassPathEntryImpl; import org.jboss.deployers.plugins.structure.ContextInfoImpl; import org.jboss.deployers.plugins.structure.StructureMetaDataImpl; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ModificationType; import org.jboss.xb.binding.ObjectModelFactory; import org.jboss.xb.binding.UnmarshallingContext; import org.xml.sax.Attributes; /** * An ObjectModelFactory for the jboss-structure.xml descriptor. * * @author Scott.Stark@jboss.org * @author Ales.Justin@jboss.org * @version $Revision:$ */ public class StructureMetaDataObjectFactory implements ObjectModelFactory { public StructureMetaDataImpl newRoot(Object root, UnmarshallingContext navigator, String namespaceURI, String localName, Attributes attrs) { StructureMetaDataImpl metaData; if (root != null) metaData = (StructureMetaDataImpl) root; else metaData = new StructureMetaDataImpl(); return metaData; } public Object completeRoot(Object root, UnmarshallingContext ctx, String uri, String name) { return root; } public Object newChild(StructureMetaDataImpl parent, UnmarshallingContext navigator, String namespaceURI, String localName, Attributes attrs) { if (localName.equals("context")) { ContextInfoImpl child = new ContextInfoImpl("", null); String modificationType = attrs.getValue("modification"); if (modificationType != null) child.setModificationType(ModificationType.getModificationType(modificationType)); String comparator = attrs.getValue("comparator"); if (comparator != null) child.setComparatorClassName(comparator); return child; } return null; } public Object newChild(ContextInfoImpl parent, UnmarshallingContext navigator, String namespaceURI, String localName, Attributes attrs) { Object child = null; if("path".equals(localName)) { String path = attrs.getValue("name"); parent.setPath(path); } else if ("metaDataPath".equals(localName)) child = new LinkedHashSet(); else if (localName.equals("classpath")) child = new ArrayList(); return child; } public Object newChild(LinkedHashSet parent, UnmarshallingContext navigator, String namespaceURI, String localName, Attributes attrs) { Object child = null; if("path".equals(localName)) { String path = attrs.getValue("name"); parent.add(path); } return child; } public Object newChild(ArrayList parent, UnmarshallingContext navigator, String namespaceURI, String localName, Attributes attrs) { Object child = null; if("path".equals(localName)) { String name = attrs.getValue("name"); String suffixes = attrs.getValue("suffixes"); ClassPathEntry path = new ClassPathEntryImpl(name, suffixes); parent.add(path); } return child; } public void addChild(StructureMetaDataImpl parent, ContextInfoImpl context, UnmarshallingContext navigator, String namespaceURI, String localName) { parent.addContext(context); } public void addChild(ContextInfoImpl context, LinkedHashSet metaDataPath, UnmarshallingContext navigator, String namespaceURI, String localName) { context.setMetaDataPath(new ArrayList(metaDataPath)); } public void addChild(ContextInfoImpl context, ArrayList classpath, UnmarshallingContext navigator, String namespaceURI, String localName) { context.setClassPath(classpath); } } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/explicit/DeclaredStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000000660411137607542033454 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.explicit; import java.io.IOException; import java.net.URL; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.virtual.VirtualFile; import org.jboss.xb.binding.Unmarshaller; import org.jboss.xb.binding.UnmarshallerFactory; /** * A structural deployer that looks for a jboss-structure.xml descriptor as * the defining structure. * * @author Scott.Stark@jboss.org * @version $Revision: 1.1 $ */ public class DeclaredStructure extends AbstractVFSStructureDeployer { /** * Set the relative order to 0 by default. */ public DeclaredStructure() { setRelativeOrder(0); } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { VirtualFile file = structureContext.getFile(); try { boolean trace = log.isTraceEnabled(); if (isLeaf(file) == false) { boolean isJBossStructure = false; if (trace) log.trace(file + " is not a leaf"); try { VirtualFile jbossStructure = file.getChild("META-INF/jboss-structure.xml"); if (jbossStructure != null) { if (trace) log.trace("... context has a META-INF/jboss-structure.xml"); URL url = jbossStructure.toURL(); UnmarshallerFactory factory = UnmarshallerFactory.newInstance(); Unmarshaller unmarshaller = factory.newUnmarshaller(); StructureMetaDataObjectFactory ofactory = new StructureMetaDataObjectFactory(); unmarshaller.unmarshal(url.toString(), ofactory, structureContext.getMetaData()); isJBossStructure = true; } } catch (IOException e) { log.warn("Exception while looking for META-INF/jboss-structure.xml: " + e); } if (trace) log.trace(file + " isJBossStructure: " + isJBossStructure); return isJBossStructure; } } catch (Exception e) { throw DeploymentException.rethrowAsDeploymentException("Error determining structure: " + file.getName(), e); } return false; } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/AbstractVFSDeploymentUnit.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000001132411137607542033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import java.util.List; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentResourceLoader; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.virtual.VirtualFile; /** * AbstractVFSDeploymentUnit. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class AbstractVFSDeploymentUnit extends AbstractDeploymentUnit implements VFSDeploymentUnit { /** The serialVersionUID */ private static final long serialVersionUID = -3300229322654319315L; /** * For serialization */ public AbstractVFSDeploymentUnit() { } /** * Create a new AbstractVFSDeploymentUnit. * * @param deploymentContext the deployment context * @throws IllegalArgumentException for a null deployment context */ public AbstractVFSDeploymentUnit(VFSDeploymentContext deploymentContext) { super(deploymentContext); } public VirtualFile getMetaDataFile(String name) { return getDeploymentContext().getMetaDataFile(name); } public List getMetaDataFiles(String name, String suffix) { return getDeploymentContext().getMetaDataFiles(name, suffix); } public void prependMetaDataLocation(VirtualFile... locations) { getDeploymentContext().prependMetaDataLocation(locations); } public void appendMetaDataLocation(VirtualFile... locations) { getDeploymentContext().appendMetaDataLocation(locations); } public void removeMetaDataLocation(VirtualFile... locations) { getDeploymentContext().removeMetaDataLocation(locations); } @Override public VFSDeploymentResourceLoader getResourceLoader() { return getDeploymentContext().getResourceLoader(); } public VirtualFile getFile(String path) { return getDeploymentContext().getFile(path); } public VirtualFile getRoot() { return getDeploymentContext().getRoot(); } public List getClassPath() { return getDeploymentContext().getClassPath(); } public void setClassPath(List classPath) { getDeploymentContext().setClassPath(classPath); } public void prependClassPath(List files) { getDeploymentContext().prependClassPath(files); } public void prependClassPath(VirtualFile... files) { getDeploymentContext().prependClassPath(files); } public void appendClassPath(List files) { getDeploymentContext().appendClassPath(files); } public void appendClassPath(VirtualFile... files) { getDeploymentContext().appendClassPath(files); } public void addClassPath(List files) { getDeploymentContext().appendClassPath(files); } public void addClassPath(VirtualFile... files) { getDeploymentContext().appendClassPath(files); } public void removeClassPath(VirtualFile... files) { getDeploymentContext().removeClassPath(files); } @Override public VFSDeploymentUnit getParent() { return (VFSDeploymentUnit) super.getParent(); } @Override public VFSDeploymentUnit getTopLevel() { return (VFSDeploymentUnit) super.getTopLevel(); } @SuppressWarnings("unchecked") public List getVFSChildren() { return (List) super.getChildren(); } @Override protected VFSDeploymentContext getDeploymentContext() { return (VFSDeploymentContext) super.getDeploymentContext(); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/file/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000755000175000017500000000000011620060456033433 5ustar twernertwerner././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/file/FileStructure.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000001461011046531125033435 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure.file; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import org.jboss.beans.metadata.api.annotations.Install; import org.jboss.beans.metadata.api.annotations.Uninstall; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer; import org.jboss.deployers.vfs.spi.deployer.FileMatcher; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.virtual.VirtualFile; /** * FileStructure is a simple suffix recognition structure deployer. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class FileStructure extends AbstractVFSStructureDeployer { /** The file suffixes */ private static Set fileSuffixes = new CopyOnWriteArraySet(); /** The file matchers */ private Set fileMatchers = new CopyOnWriteArraySet(); // Initialise known suffixes static { fileSuffixes.add("-service.xml"); fileSuffixes.add("-beans.xml"); fileSuffixes.add("-ds.xml"); fileSuffixes.add("-aop.xml"); } /** * Create a new FileStructure. */ public FileStructure() { } /** * Create a new FileStructure. * * @param suffixes the recognised suffixes * @throws IllegalArgumentException for null suffixes */ public FileStructure(Set suffixes) { if (suffixes == null) throw new IllegalArgumentException("Null suffixes"); fileSuffixes.clear(); fileSuffixes.addAll(suffixes); } /** * Gets the list of suffixes recognised as files * * @return the list of suffixes */ public Set getSuffixes() { return fileSuffixes; } /** * Add a file suffix * * @param suffix the suffix * @return true when added * @throws IllegalArgumentException for a null suffix */ public static boolean addFileSuffix(String suffix) { if (suffix == null) throw new IllegalArgumentException("Null suffix"); return fileSuffixes.add(suffix); } /** * Remove a file suffix * * @param suffix the suffix * @return true when removed * @throws IllegalArgumentException for a null suffix */ public static boolean removeFileSuffix(String suffix) { if (suffix == null) throw new IllegalArgumentException("Null suffix"); return fileSuffixes.remove(suffix); } @Install public boolean addFileMatcher(FileMatcher fm) { return fileMatchers.add(fm); } @Uninstall public boolean removeFileMatcher(FileMatcher fm) { return fileMatchers.remove(fm); } /** * Whether this is an archive * * @param name the name * @return true when an archive * @throws IllegalArgumentException for a null name */ public static boolean isKnownFile(String name) { if (name == null) throw new IllegalArgumentException("Null name"); for(String suffix : fileSuffixes) { if (name.endsWith(suffix)) return true; } return false; } /** * Check is some file matcher recognizes the file. * * @param file the virtual file * @return true if recognized, false otherwise */ protected boolean checkFileMatchers(VirtualFile file) { for(FileMatcher fm : fileMatchers) { if (fm.isDeployable(file)) return true; } return false; } public boolean determineStructure(StructureContext structureContext) throws DeploymentException { ContextInfo context = null; VirtualFile file = structureContext.getFile(); try { boolean trace = log.isTraceEnabled(); if (isLeaf(file) == true) { boolean isFile = false; if( trace ) log.trace(file + " is a leaf"); // See if this is a top-level by checking the parent if (structureContext.isTopLevel() == false) { if (isKnownFile(file.getName()) == false && checkFileMatchers(file) == false) { if (trace) log.trace("... no - it is not a top level file and not a known name"); } else { if (trace) log.trace("... ok - not a top level file but it is a known name"); isFile = true; } } else { if (trace) log.trace("... ok - it is a top level file"); isFile = true; } // Create a context info for this file if (isFile) context = createContext(structureContext); // There are no subdeployments for files if (trace) log.trace(file + " isFile: " + isFile); return isFile; } else { if (trace) log.trace("... no - not a file."); return false; } } catch (Exception e) { if (context != null) structureContext.removeChild(context); throw DeploymentException.rethrowAsDeploymentException("Error determining structure: " + file.getName(), e); } } } ././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/AbstractVFSStructureDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000657311046531125033446 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import org.jboss.classloader.spi.filter.ClassFilter; import org.jboss.classloading.plugins.vfs.VFSResourceVisitor; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.deployers.plugins.annotations.GenericAnnotationResourceVisitor; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.structure.spi.DeploymentResourceLoader; import org.jboss.deployers.structure.spi.helpers.DeploymentResourceClassLoader; import org.jboss.deployers.vfs.spi.structure.helpers.AbstractStructureDeployer; import org.jboss.virtual.VirtualFile; /** * VFS aware structure deployer. * * @author Ales Justin */ public abstract class AbstractVFSStructureDeployer extends AbstractStructureDeployer { private ClassFilter included; private ClassFilter excluded; private ResourceFilter filter; private ResourceFilter recurseFilter; protected AnnotationEnvironment createAnnotationEnvironment(VirtualFile root) { DeploymentResourceLoader loader = new VFSDeploymentResourceLoaderImpl(root); ClassLoader classLoader = new DeploymentResourceClassLoader(loader); GenericAnnotationResourceVisitor visitor = new GenericAnnotationResourceVisitor(classLoader); ResourceFilter filter = this.filter; if (filter == null) filter = visitor.getFilter(); VFSResourceVisitor.visit(new VirtualFile[]{root}, null, included, excluded, classLoader, visitor, filter, recurseFilter); return visitor.getEnv(); } /** * Set the included class filter. * * @param included the included class filter */ public void setIncluded(ClassFilter included) { this.included = included; } /** * Set the excluded class filter. * * @param excluded the excluded class filter */ public void setExcluded(ClassFilter excluded) { this.excluded = excluded; } /** * Set the filter. * * @param filter the filter */ public void setFilter(ResourceFilter filter) { this.filter = filter; } /** * Set the recurse filter. * * @param recurseFilter the recurse filter */ public void setRecurseFilter(ResourceFilter recurseFilter) { this.recurseFilter = recurseFilter; } } ././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/VFSDeploymentResourceLoaderImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000603210743742275033451 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import java.io.IOException; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import java.util.Enumeration; import java.util.Vector; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentResourceLoader; import org.jboss.virtual.VirtualFile; /** * VFSDeploymentResourceLoader. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSDeploymentResourceLoaderImpl implements VFSDeploymentResourceLoader { /** The deployment resource loader */ private VirtualFile root; /** * Create a new VFSDeploymentResourceLoader. * * @param root the root * @throws IllegalArgumentException for a null root */ public VFSDeploymentResourceLoaderImpl(VirtualFile root) { if (root == null) throw new IllegalArgumentException("Null root"); this.root = root; } public VirtualFile getFile(String path) { try { return root.getChild(path); } catch (IOException e) { return null; } } public URL getResource(String name) { try { VirtualFile child = root.getChild(name); return child != null ? child.toURL() : null; } catch (URISyntaxException e) { return null; } catch (MalformedURLException e) { return null; } catch (IOException e) { return null; } } public Enumeration getResources(String name) throws IOException { try { VirtualFile child = root.getChild(name); if (child != null) { Vector vector = new Vector(); vector.add(child.toURL()); return vector.elements(); } else return null; } catch (URISyntaxException e) { return null; } catch (MalformedURLException e) { return null; } } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/StructureDeployerWrapper.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000740011046531125033434 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.logging.Logger; /** * StructureDeployerWrapper.

* * To avoid any problems with error handling by the deployers. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class StructureDeployerWrapper implements StructureDeployer { /** The log */ private Logger log; /** The structure deployer */ private StructureDeployer deployer; /** The context classloader of the person registering the deployer */ private ClassLoader classLoader; /** * Create a new StructureDeployerWrapper. * * @param deployer the deployer */ public StructureDeployerWrapper(StructureDeployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); this.deployer = deployer; log = Logger.getLogger(deployer.getClass()); this.classLoader = SecurityActions.getContextClassLoader(); } public boolean determineStructure(StructureContext context) throws DeploymentException { if (context == null) throw new IllegalArgumentException("Null context"); if (context.isCandidateAnnotationScanning() && deployer.isSupportsCandidateAnnotations() == false) return false; ClassLoader previous = SecurityActions.setContextClassLoader(classLoader); try { boolean result = deployer.determineStructure(context); if (log.isTraceEnabled()) { if (result == false) log.trace("Not recognised: " + context.getName()); else log.trace("Recognised: " + context.getName()); } return result; } finally { SecurityActions.resetContextClassLoader(previous); } } public boolean isSupportsCandidateAnnotations() { return deployer.isSupportsCandidateAnnotations(); } public int getRelativeOrder() { return deployer.getRelativeOrder(); } public void setRelativeOrder(int order) { deployer.setRelativeOrder(order); } @Override public boolean equals(Object obj) { if (obj == this) return true; if (obj == null || obj instanceof StructureDeployer == false) return false; if (obj instanceof StructureDeployerWrapper) obj = ((StructureDeployerWrapper) obj).deployer; return deployer.equals(obj); } @Override public int hashCode() { return deployer.hashCode(); } @Override public String toString() { return deployer.toString(); } } ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/VFSStructureBuilder.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000002104711022205157033434 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.structure.ClassPathEntry; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.ModificationType; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.structure.spi.DeploymentContext; import org.jboss.deployers.structure.spi.helpers.AbstractStructureBuilder; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.vfs.plugins.structure.modify.ModificationAction; import org.jboss.deployers.vfs.plugins.structure.modify.ModificationActions; import org.jboss.logging.Logger; import org.jboss.virtual.VFSUtils; import org.jboss.virtual.VirtualFile; import org.jboss.virtual.VisitorAttributes; import org.jboss.virtual.plugins.vfs.helpers.SuffixMatchFilter; /** * VFSStructureBuilder. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class VFSStructureBuilder extends AbstractStructureBuilder { /** The log */ private static final Logger log = Logger.getLogger(VFSStructureBuilder.class); protected DeploymentContext createRootDeploymentContext(Deployment deployment, StructureMetaData metaData) throws Exception { if (deployment instanceof VFSDeployment) { VFSDeployment vfsDeployment = (VFSDeployment) deployment; String name = deployment.getName(); String simpleName = deployment.getSimpleName(); VirtualFile root = applyModification(vfsDeployment.getRoot(), metaData.getContext("")); if (name == null) { return new AbstractVFSDeploymentContext(root, ""); } else { if (simpleName == null) return new AbstractVFSDeploymentContext(name, name, root, ""); else return new AbstractVFSDeploymentContext(name, simpleName, root, ""); } } return super.createRootDeploymentContext(deployment); } protected DeploymentContext createChildDeploymentContext(DeploymentContext parent, ContextInfo child) throws Exception { if (parent instanceof VFSDeploymentContext) { VFSDeploymentContext vfsParent = (VFSDeploymentContext) parent; String path = child.getPath(); try { VirtualFile parentFile = vfsParent.getRoot(); VirtualFile file = parentFile.findChild(path); // leaving the findChild usage return new AbstractVFSDeploymentContext(applyModification(file, child), path); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Unable to determine child " + path + " from parent " + vfsParent.getRoot().getName(), t); } } return super.createChildDeploymentContext(parent, child); } /** * Apply modification if it exists. * * @param file the file * @param contextInfo the context info * @return the modified file * @throws Exception for any error */ protected VirtualFile applyModification(VirtualFile file, ContextInfo contextInfo) throws Exception { if (contextInfo == null) return file; VirtualFile modified = file; ModificationType modificationType = contextInfo.getModificationType(); if (modificationType != null) { ModificationAction action = ModificationActions.getAction(modificationType); if (action != null) { boolean trace = log.isTraceEnabled(); if (trace) log.trace("Modifying file: " + file + ", modification type: " + modificationType); modified = action.modify(file); if (trace) { if (modified != file) log.trace("Modified file: " + modified); else log.trace("File already modified: " + modified); } } else { log.info("Modification " + modificationType + " is not yet supported: " + file); } } return modified; } protected void applyContextInfo(DeploymentContext context, ContextInfo contextInfo) throws Exception { super.applyContextInfo(context, contextInfo); if (context instanceof VFSDeploymentContext) { boolean trace = log.isTraceEnabled(); if (trace) log.trace("Apply context: " + context.getName() + " " + contextInfo); VFSDeploymentContext vfsContext = (VFSDeploymentContext) context; List metaDataPath = contextInfo.getMetaDataPath(); if (metaDataPath != null && metaDataPath.isEmpty() == false) vfsContext.setMetaDataPath(contextInfo.getMetaDataPath()); boolean classPathHadVF = false; List classPathEntries = contextInfo.getClassPath(); VFSDeploymentContext top = vfsContext.getTopLevel(); VirtualFile root = top.getRoot(); List classPath = new ArrayList(); if (classPathEntries != null) { for (ClassPathEntry entry : classPathEntries) { if (trace) log.trace("Resolving classpath entry " + entry + " for " + context.getName()); String suffixes = entry.getSuffixes(); VirtualFile child; if (entry.getPath().length() == 0) child = root; else { try { child = root.findChild(entry.getPath()); // leaving the findChild } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Unable to find class path entry " + entry + " from " + root.getName(), t); } } if (suffixes == null) { classPath.add(child); if (classPathHadVF == false) classPathHadVF = child.equals(root); } else { String[] suffs = suffixes.split(","); SuffixMatchFilter filter = new SuffixMatchFilter(Arrays.asList(suffs), VisitorAttributes.DEFAULT); List matches = child.getChildren(filter); if( matches != null ) { classPath.addAll(matches); if (trace) log.trace("Added classpath matches: " + matches); // Process any Manifest Class-Path refs for (VirtualFile file : matches) { VFSUtils.addManifestLocations(file, classPath); if (classPathHadVF == false) classPathHadVF = file.equals(root); } } } } } VirtualFile file = vfsContext.getRoot(); if (classPathHadVF == false && SecurityActions.isLeaf(file) == false) VFSUtils.addManifestLocations(file, classPath); if (classPath.isEmpty() == false) vfsContext.setClassPath(classPath); } } } ././@LongLink0000000000000000000000000000022300000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/AbstractVFSDeploymentContextMBean.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000000336511113261537033444 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import java.util.List; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContextMBean; import org.jboss.virtual.VirtualFile; /** * AbstractVFSDeploymentContextMBean. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public interface AbstractVFSDeploymentContextMBean extends AbstractDeploymentContextMBean { /** * Get the root file * * @return the root */ VirtualFile getRoot(); /** * Get the meta data locations * * @return the meta data locations */ List getMetaDataLocations(); /** * Get the class path * * @return the class path */ List getClassPath(); } ././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/VFSStructuralDeployersImpl.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000002054611061532302033435 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; import java.util.List; import org.jboss.deployers.client.spi.Deployment; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.Ordered; import org.jboss.deployers.spi.attachments.MutableAttachments; import org.jboss.deployers.spi.structure.ContextInfo; import org.jboss.deployers.spi.structure.StructureMetaData; import org.jboss.deployers.spi.structure.StructureMetaDataFactory; import org.jboss.deployers.structure.spi.helpers.AbstractStructuralDeployers; import org.jboss.deployers.vfs.spi.client.VFSDeployment; import org.jboss.deployers.vfs.spi.structure.StructureContext; import org.jboss.deployers.vfs.spi.structure.StructureDeployer; import org.jboss.deployers.vfs.spi.structure.VFSStructuralDeployers; import org.jboss.deployers.vfs.spi.structure.helpers.AbstractStructureDeployer; import org.jboss.logging.Logger; import org.jboss.virtual.VirtualFile; /** * VFSStructuralDeployersImpl. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class VFSStructuralDeployersImpl extends AbstractStructuralDeployers implements VFSStructuralDeployers { /** The log */ private static final Logger log = Logger.getLogger(VFSStructuralDeployersImpl.class); /** The deployers */ private Set structureDeployers = new TreeSet(Ordered.COMPARATOR); /** * Create a new VFSStructuralDeployers. */ public VFSStructuralDeployersImpl() { } /** * Create a new VFSStructurealDeployers. * * @param structureDeployers the given deployers * @throws IllegalArgumentException for null deployers */ public VFSStructuralDeployersImpl(Set structureDeployers) { setDeployers(structureDeployers); } /** * Get the structureDeployers. * * @return the structureDeployers. */ public Set getDeployers() { return structureDeployers; } /** * Set the structureDeployers. * * @param deployers the structureDeployers. * @throws IllegalArgumentException for null deployers */ public void setDeployers(Set deployers) { if (deployers == null) throw new IllegalArgumentException("Null deployers"); // Remove all the old deployers that are not in the new set HashSet oldDeployers = new HashSet(structureDeployers); oldDeployers.removeAll(deployers); for (StructureDeployer deployer : oldDeployers) removeDeployer(deployer); // Add all the new deployers that were not already present HashSet newDeployers = new HashSet(deployers); newDeployers.removeAll(structureDeployers); for (StructureDeployer deployer : newDeployers) addDeployer(deployer); } /** * Add a structure deployer * * @param deployer the deployer */ public synchronized void addDeployer(StructureDeployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); structureDeployers.add(new StructureDeployerWrapper(deployer)); log.debug("Added structure deployer " + deployer); } /** * Remove a structure deployer * * @param deployer the deployer */ public synchronized void removeDeployer(StructureDeployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); structureDeployers.remove(deployer); log.debug("Removed structure deployer " + deployer); } public boolean determineStructure(VirtualFile file, StructureContext parentContext) throws DeploymentException { StructureMetaData structure = StructureMetaDataFactory.createStructureMetaData(); StructureContext context = new StructureContext(file, structure, parentContext); boolean result = doDetermineStructure(context); if (result) { String relativePath = AbstractStructureDeployer.getRelativePath(context.getParent(), file); // Something said it recognised it ContextInfo recognised = structure.getContext(""); if (recognised == null) throw new IllegalStateException("Something recognised the deployment, but there is no context? " + file); // Create the context in the parent structure ContextInfo parentContextInfo; List metaDataPath = recognised.getMetaDataPath(); if (metaDataPath == null || metaDataPath.isEmpty()) parentContextInfo = StructureMetaDataFactory.createContextInfo(relativePath, recognised.getClassPath()); else parentContextInfo = StructureMetaDataFactory.createContextInfo(relativePath, metaDataPath, recognised.getClassPath()); // copy the modification type information parentContextInfo.setModificationType(recognised.getModificationType()); StructureMetaData structureMetaData = parentContext.getMetaData(); structureMetaData.addContext(parentContextInfo); MutableAttachments attachments = (MutableAttachments) parentContextInfo.getPredeterminedManagedObjects(); attachments.addAttachment(StructureMetaData.class, structure); } return result; } /** * Determine the structure * * @param context the structure context * @return true when recognised * @throws DeploymentException for any error */ protected boolean doDetermineStructure(StructureContext context) throws DeploymentException { StructureDeployer[] theDeployers; synchronized (this) { if (structureDeployers.isEmpty()) throw new IllegalStateException("No structure deployers"); theDeployers = structureDeployers.toArray(new StructureDeployer[structureDeployers.size()]); } boolean trace = log.isTraceEnabled(); if (trace) log.trace("Determining structure for " + context.getName() + " deployers=" + Arrays.asList(theDeployers)); boolean result = false; for (StructureDeployer deployer : theDeployers) { if (deployer.determineStructure(context)) { if (trace) log.trace(context.getName() + " recognised by " + deployer); result = true; break; } } if (result == false && trace) log.trace(context.getName() + " not recognised"); return result; } @Override protected void determineStructure(Deployment deployment, StructureMetaData structure) throws Exception { if (deployment instanceof VFSDeployment == false) throw new DeploymentException("Structure can only be determined for VFSDeployments " + deployment); VFSDeployment vfsDeployment = (VFSDeployment) deployment; VirtualFile root = vfsDeployment.getRoot(); if (root == null) throw new IllegalStateException("Deployment has no root " + deployment); StructureContext context = new StructureContext(root, structure, this); if (doDetermineStructure(context) == false) throw new DeploymentException("No deployer recognised the structure of " + deployment.getName()); } } ././@LongLink0000000000000000000000000000021600000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/AbstractVFSDeploymentContext.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/st0000644000175000017500000003503311137607542033447 0ustar twernertwerner/* * JBoss, Home of Professional Open Source. * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.structure; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentContext; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentResourceLoader; import org.jboss.logging.Logger; import org.jboss.virtual.VFSUtils; import org.jboss.virtual.VirtualFile; /** * AbstractVFSDeploymentContext. * * @author Adrian Brock * @author Ales Justin * @version $Revision: 1.1 $ */ public class AbstractVFSDeploymentContext extends AbstractDeploymentContext implements VFSDeploymentContext, AbstractVFSDeploymentContextMBean { /** The serialVersionUID */ private static final long serialVersionUID = 4474515937180482776L; /** The log */ private static final Logger log = Logger.getLogger(AbstractVFSDeploymentContext.class); /** The root virtual file */ private VirtualFile root; /** The meta data locations */ private List metaDataLocations; /** The class paths */ private List classPath; /** The loader */ private transient VFSDeploymentResourceLoader loader; /** * Get the vfs file name safely * * @param root the virutal file * @return the name */ static final String safeVirtualFileName(VirtualFile root) { if (root == null) throw new IllegalArgumentException("Null root"); try { return root.toURI().toString(); } catch (Exception e) { return root.getName(); } } /** * For serialization */ public AbstractVFSDeploymentContext() { } /** * Create a new AbstractVFSDeploymentContext. * * @param name the name * @param simpleName the simple name * @param root the virtual file * @param relativePath the relative path */ public AbstractVFSDeploymentContext(String name, String simpleName, VirtualFile root, String relativePath) { super(name, simpleName, relativePath); this.root = root; } /** * Create a new AbstractVFSDeploymentContext. * * @param root the virtual file * @param relativePath the relative path */ public AbstractVFSDeploymentContext(VirtualFile root, String relativePath) { super(safeVirtualFileName(root), root.getName(), relativePath); this.root = root; } public VirtualFile getRoot() { return root; } public void setMetaDataPath(List paths) { if (paths == null) { setMetaDataLocations(null); return; } try { List locations = new ArrayList(); for (String path : paths) { if (path == null) throw new IllegalArgumentException("Null path in paths: " + paths); VirtualFile child = root.getChild(path); if (child != null) locations.add(child); else log.debug("Meta data path does not exist: root=" + root.getPathName() + " path=" + path); } setMetaDataLocations(locations); } catch (IOException e) { log.warn("Exception while applying paths: root=" + root.getPathName() + " paths=" + paths); } } /** * Get mutable metadata locations. * * @return the mutable metadata locations */ protected List getMutableMetaDataLocations() { return metaDataLocations; } public List getMetaDataLocations() { if (metaDataLocations == null || metaDataLocations.isEmpty()) { return Collections.emptyList(); } else { return Collections.unmodifiableList(metaDataLocations); } } public void setMetaDataLocations(List locations) { this.metaDataLocations = locations; } public VirtualFile getMetaDataFile(String name) { if (name == null) throw new IllegalArgumentException("Null name"); try { // There isn't a metadata locations so let's see whether the root matches. if (metaDataLocations == null || metaDataLocations.isEmpty()) { // It has to be a plain file if (root != null && SecurityActions.isLeaf(root)) { String fileName = root.getName(); if (fileName.equals(name)) return root; } // No match return null; } // Look in the meta data locations return searchMetaDataLocations(name); } catch (Exception e) { if (log.isTraceEnabled()) log.trace("Error retrieving meta data: " + name + " reason=" + e); return null; } } /** * Search the metadata locations. * In this impl the first one matching is returned. * * @param name the file name to find * @return found file or null if not found */ protected VirtualFile searchMetaDataLocations(String name) { VirtualFile result = null; for(VirtualFile location : getMetaDataLocations()) { try { result = location.getChild(name); if (result != null) { if (log.isTraceEnabled()) log.trace("Found " + name + " in " + location.getName()); deployed(); break; } } catch (IOException e) { log.debug("Search exception invocation for metafile " + name + " in " + location.getName() + ", reason: " + e); } } return result; } public List getMetaDataFiles(String name, String suffix) { if (name == null && suffix == null) throw new IllegalArgumentException("Null name and suffix"); try { // There isn't a metadata location so let's see whether the root matches. // i.e. the top level is an xml if (metaDataLocations == null || metaDataLocations.isEmpty()) { // It has to be a plain file if (root != null && SecurityActions.isLeaf(root)) { String fileName = root.getName(); if (name != null && fileName.equals(name)) return Collections.singletonList(root); if (suffix != null && fileName.endsWith(suffix)) return Collections.singletonList(root); } // No match return Collections.emptyList(); } // Look in the meta data location List results = new ArrayList(); for (VirtualFile location : metaDataLocations) { List result = location.getChildren(new MetaDataMatchFilter(name, suffix)); if (result != null && result.isEmpty() == false) { if (log.isTraceEnabled()) log.trace("Found name=" + name + ", suffix=" + suffix + " in " + location.getName()); results.addAll(result); deployed(); } } return results; } catch (Exception e) { log.debug("Error retrieving meta data: name=" + name + " suffix=" + suffix, e); return Collections.emptyList(); } } public void prependMetaDataLocation(VirtualFile... locations) { if (locations == null) throw new IllegalArgumentException("Null locations"); List metadataLocations = getMutableMetaDataLocations(); if (metadataLocations == null) metadataLocations = new ArrayList(); for (int i = locations.length-1; i >= 0; --i) { VirtualFile location = locations[i]; if (location == null) throw new IllegalArgumentException("Null virtual file in " + Arrays.toString(locations)); metadataLocations.add(0, location); } setMetaDataLocations(metadataLocations); } public void appendMetaDataLocation(VirtualFile... locations) { if (locations == null) throw new IllegalArgumentException("Null location"); List metaDataLocations = getMutableMetaDataLocations(); if (metaDataLocations == null) metaDataLocations = new ArrayList(); for (VirtualFile location : locations) { if (location == null) throw new IllegalArgumentException("Null virtual file in " + Arrays.toString(locations)); metaDataLocations.add(location); } setMetaDataLocations(metaDataLocations); } public void removeMetaDataLocation(VirtualFile... locations) { if (locations == null || locations.length == 0) return; for (VirtualFile location : locations) { metaDataLocations.remove(location); } } public VirtualFile getFile(String name) { return getResourceLoader().getFile(name); } /** * Get mutable classpath. * * @return the mutable classpath */ protected List getMutableClassPath() { return classPath; } public List getClassPath() { if (classPath == null || classPath.isEmpty()) { return Collections.emptyList(); } else { return Collections.unmodifiableList(classPath); } } public void setClassPath(List paths) { this.classPath = paths; if (log.isTraceEnabled() && paths != null) log.trace("ClassPath for " + root.getPathName() + " is " + VFSUtils.getPathsString(paths)); } public void appendClassPath(List files) { if (files == null) throw new IllegalArgumentException("Null files"); List classPath = getMutableClassPath(); if (classPath == null) classPath = new ArrayList(); for (VirtualFile file : files) { if (file == null) throw new IllegalArgumentException("Null virtual file in " + files); classPath.add(file); } setClassPath(classPath); } public void prependClassPath(VirtualFile... files) { if (files == null) throw new IllegalArgumentException("Null files"); List classPath = getMutableClassPath(); if (classPath == null) classPath = new ArrayList(); for (int i = files.length-1; i >= 0; --i) { VirtualFile file = files[i]; if (file == null) throw new IllegalArgumentException("Null virtual file in " + Arrays.toString(files)); classPath.add(0, file); } setClassPath(classPath); } public void prependClassPath(List files) { if (files == null) throw new IllegalArgumentException("Null files"); List classPath = getMutableClassPath(); if (classPath == null) classPath = new ArrayList(); for (int i = files.size()-1; i >= 0; --i) { VirtualFile file = files.get(i); if (file == null) throw new IllegalArgumentException("Null virtual file in " + files); classPath.add(0, file); } setClassPath(classPath); } public void appendClassPath(VirtualFile... files) { if (files == null) throw new IllegalArgumentException("Null files"); List classPath = getMutableClassPath(); if (classPath == null) classPath = new ArrayList(); for (VirtualFile file : files) { if (file == null) throw new IllegalArgumentException("Null virtual file in " + Arrays.toString(files)); classPath.add(file); } setClassPath(classPath); } public void removeClassPath(VirtualFile... files) { if (files == null || files.length == 0) return; for (VirtualFile file : files) { classPath.remove(file); } } @Override public VFSDeploymentContext getTopLevel() { return (VFSDeploymentContext) super.getTopLevel(); } @Override public VFSDeploymentResourceLoader getResourceLoader() { if (loader != null) return loader; loader = new VFSDeploymentResourceLoaderImpl(getRoot()); return loader; } protected DeploymentUnit createDeploymentUnit() { return new AbstractVFSDeploymentUnit(this); } @Override public void cleanup() { try { root.cleanup(); } finally { super.cleanup(); } } @SuppressWarnings("unchecked") public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); root = (VirtualFile) in.readObject(); boolean isNullOrEmpty = in.readBoolean(); if (isNullOrEmpty == false) metaDataLocations = (List) in.readObject(); classPath = (List) in.readObject(); } public void writeExternal(ObjectOutput out) throws IOException { super.writeExternal(out); out.writeObject(root); boolean isNullOrEmpty = metaDataLocations == null || metaDataLocations.isEmpty(); out.writeBoolean(isNullOrEmpty); if (isNullOrEmpty == false) out.writeObject(metaDataLocations); out.writeObject(classPath); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/annotations/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/an0000755000175000017500000000000011620060457033404 5ustar twernertwerner././@LongLink0000000000000000000000000000022700000000000011566 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/annotations/ScopedAnnotationEnvironmentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/an0000644000175000017500000000454111104043637033410 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.annotations; import javassist.ClassPool; import javassist.scopedpool.ScopedClassPoolRepository; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; /** * Scoped class pool usage annotation environment deployer. * * @author Ales Justin */ public class ScopedAnnotationEnvironmentDeployer extends AnnotationEnvironmentDeployer { private ScopedClassPoolRepository repository; public ScopedAnnotationEnvironmentDeployer() { } public ScopedAnnotationEnvironmentDeployer(ScopedClassPoolRepository repository) { this.repository = repository; } /** * Set scoped class pool repository. * * @param repository the scoped class pool repository */ public void setRepository(ScopedClassPoolRepository repository) { this.repository = repository; } @Deprecated protected ClassPool createClassPool(ClassLoader classLoader) { if (repository != null) return repository.findClassPool(classLoader); return super.createClassPool(classLoader); } protected ClassPool createClassPool(VFSDeploymentUnit unit) { if (repository != null) return repository.findClassPool(unit.getClassLoader()); return super.createClassPool(unit); } }././@LongLink0000000000000000000000000000022200000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/annotations/ScanningMetaDataResourceFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/an0000644000175000017500000001005411113261537033405 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.annotations; import java.net.URL; import java.util.List; import java.util.Set; import org.jboss.classloader.spi.filter.ClassFilter; import org.jboss.classloader.spi.filter.PackageClassFilter; import org.jboss.classloading.spi.visitor.ResourceContext; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.deployers.spi.annotations.PathEntryMetaData; import org.jboss.deployers.spi.annotations.PathMetaData; import org.jboss.deployers.spi.annotations.ScanningMetaData; import org.jboss.deployers.plugins.annotations.FilterablePathEntry; /** * ScanningMetaDataResourceFilter * * @author Ales Justin */ public class ScanningMetaDataResourceFilter implements ResourceFilter { private ScanningMetaData smd; public ScanningMetaDataResourceFilter(ScanningMetaData smd) { this.smd = smd; } public boolean accepts(ResourceContext resource) { if (resource.isClass() == false) return false; URL url = resource.getUrl(); String urlString = url.toExternalForm(); List paths = smd.getPaths(); if (paths != null && paths.isEmpty() == false) { for (PathMetaData pmda : paths) { String name = pmda.getPathName(); // url contains path + we need some include or exclude if (urlString.contains(name)) { String resourceName = resource.getResourceName(); boolean explicitInclude = false; // do we have an explicit include Set includes = pmda.getIncludes(); if (includes != null && includes.isEmpty() == false) { explicitInclude = true; for (PathEntryMetaData pemda : includes) { ClassFilter filter = getClassFilter(pemda); if (filter.matchesResourcePath(resourceName)) return true; } } Set excludes = pmda.getExcludes(); if (excludes != null && excludes.isEmpty() == false) { for (PathEntryMetaData pemda : excludes) { ClassFilter filter = getClassFilter(pemda); if (filter.matchesResourcePath(resourceName)) return false; } } return (explicitInclude == false); } } } return false; } /** * Get class filter from path entry meta data. * * @param pemd the path entry meta data * @return class filter */ protected ClassFilter getClassFilter(PathEntryMetaData pemd) { if (pemd instanceof FilterablePathEntry) return ((FilterablePathEntry) pemd).getFilter(); else return PackageClassFilter.createPackageClassFilter(pemd.getName()); } }././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/annotations/DeploymentUnitClassPath.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/an0000644000175000017500000001014111104043637033401 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.annotations; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Collections; import java.util.List; import java.util.Map; import javassist.ClassPath; import javassist.NotFoundException; import org.jboss.classloader.plugins.ClassLoaderUtils; import org.jboss.classloader.spi.filter.ClassFilter; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.util.collection.SoftValueHashMap; import org.jboss.virtual.VirtualFile; /** * Javassist ClassPath impl based on deployment unit * * @author Ales Justin */ public class DeploymentUnitClassPath implements ClassPath { private VFSDeploymentUnit unit; @SuppressWarnings("unchecked") private Map cache = Collections.synchronizedMap(new SoftValueHashMap()); /** By default exclude jdk classes */ private ClassFilter excludeFilter = ClassFilter.JAVA_ONLY; public DeploymentUnitClassPath(VFSDeploymentUnit unit) { if (unit == null) throw new IllegalArgumentException("Null deployment unit."); this.unit = unit; } /** * Set exclude filter. * * @param excludeFilter the exclude filter */ public void setExcludeFilter(ClassFilter excludeFilter) { this.excludeFilter = excludeFilter; } /** * Find file. * * @param className the classname we're looking for * @return virtual file or null if not found * @throws IOException for any exception */ protected VirtualFile findFile(String className) throws IOException { if (excludeFilter != null && excludeFilter.matchesClassName(className)) return null; VirtualFile file = cache.get(className); if (file != null) return file; List classPath = unit.getClassPath(); if (classPath != null && classPath.isEmpty() == false) { String path = ClassLoaderUtils.classNameToPath(className); for (VirtualFile cp : classPath) { file = cp.getChild(path); if (file != null) { cache.put(className, file); return file; } } } return null; } public InputStream openClassfile(String className) throws NotFoundException { try { VirtualFile file = findFile(className); if (file != null) return file.openStream(); } catch (IOException e) { throw new NotFoundException("Exception finding file: " + className, e); } throw new NotFoundException("ClassName '" + className + "' not found in deployment unit: " + unit); } public URL find(String className) { try { VirtualFile file = findFile(className); if (file != null) return file.toURL(); } catch (Exception ignored) { } return null; } public void close() { cache.clear(); } }././@LongLink0000000000000000000000000000021400000000000011562 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/annotations/ScanningMetaDataDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/an0000644000175000017500000000375611113261537033420 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.annotations; import org.jboss.deployers.plugins.annotations.AbstractScanningMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.annotations.ScanningMetaData; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer; /** * ScanningMetaDataDeployer. * * @author Ales Justin */ public class ScanningMetaDataDeployer extends SchemaResolverDeployer { public ScanningMetaDataDeployer() { super(AbstractScanningMetaData.class); setName("jboss-scanning.xml"); setRegisterWithJBossXB(true); addOutput(ScanningMetaData.class); } @Override protected void createMetaData(DeploymentUnit unit, String name, String suffix) throws DeploymentException { createMetaData(unit, name, suffix, ScanningMetaData.class.getName()); } } ././@LongLink0000000000000000000000000000023100000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/annotations/FilteredAnnotationEnvironmentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/an0000644000175000017500000001024411070176555033415 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.annotations; import org.jboss.classloading.spi.dependency.Module; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.deployers.plugins.annotations.GenericAnnotationResourceVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.deployers.spi.DeploymentException; /** * Filtered annotation environment deployer. * * It first checks if there are some filters present * in deployment unit as attachment, * else falls back to deployers filters. * * @author Ales Justin */ public class FilteredAnnotationEnvironmentDeployer extends ScopedAnnotationEnvironmentDeployer { private ResourceFilter resourceFilter; private ResourceFilter recurseFilter; public FilteredAnnotationEnvironmentDeployer() { addInput(ResourceFilter.class.getName() + ".resource"); addInput(ResourceFilter.class.getName() + ".recurse"); } /** * Get filter. * Try attachment first, then deployer's filter. * * @param the expected class type * @param unit the deployment unit * @param expectedClass the expected class * @param suffix the suffix * @param defaultValue the default value * @return found filter or null */ protected T getFilter(DeploymentUnit unit, Class expectedClass, String suffix, T defaultValue) { String name = expectedClass.getName() + "." + (suffix != null ? suffix : ""); T result = unit.getAttachment(name, expectedClass); if (result == null) result = defaultValue; return result; } /** * We look for filter attachments: * * org.jboss.classloading.spi.visitor.ResourceFilter.resource - plain resource filter * * org.jboss.classloading.spi.visitor.ResourceFilter.recurse - recurse resource filter * * @param unit the deployment unit * @param module the underlying module * @param visitor the current generic annotation resource visitor */ protected void visitModule(VFSDeploymentUnit unit, Module module, GenericAnnotationResourceVisitor visitor) throws DeploymentException { ResourceFilter filter = getFilter(unit, ResourceFilter.class, "resource", resourceFilter); if (filter == null) filter = visitor.getFilter(); ResourceFilter recurse = getFilter(unit, ResourceFilter.class, "recurse", recurseFilter); try { module.visit(visitor, filter, recurse, getUrls(unit)); } catch (Exception e) { throw DeploymentException.rethrowAsDeploymentException("Exception visiting module", e); } } /** * Set resource filter. * * @param resourceFilter the resource filter */ public void setResourceFilter(ResourceFilter resourceFilter) { this.resourceFilter = resourceFilter; } /** * Set recurse filter. * * @param recurseFilter the recurse filter */ public void setRecurseFilter(ResourceFilter recurseFilter) { this.recurseFilter = recurseFilter; } }././@LongLink0000000000000000000000000000022100000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/annotations/AnnotationEnvironmentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/an0000644000175000017500000002044211113261537033407 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.annotations; import java.net.URL; import java.util.ArrayList; import java.util.List; import javassist.ClassPath; import javassist.ClassPool; import javassist.LoaderClassPath; import org.jboss.classloading.spi.dependency.Module; import org.jboss.deployers.plugins.annotations.GenericAnnotationResourceVisitor; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.annotations.AnnotationEnvironment; import org.jboss.deployers.spi.annotations.ScanningMetaData; import org.jboss.deployers.spi.deployer.DeploymentStages; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.deployers.vfs.spi.deployer.AbstractOptionalVFSRealDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnitFilter; import org.jboss.virtual.VirtualFile; /** * A POST_CLASSLOADER deployer which creates AnnotationEnvironment for sub-deployments. * * @author Ales Justin */ public class AnnotationEnvironmentDeployer extends AbstractOptionalVFSRealDeployer { private boolean forceAnnotations; private boolean keepAnnotations; private boolean checkInterfaces; private VFSDeploymentUnitFilter filter; public AnnotationEnvironmentDeployer() { super(Module.class); setStage(DeploymentStages.POST_CLASSLOADER); addInput(ScanningMetaData.class); setOutput(AnnotationEnvironment.class); checkInterfaces = true; } /** * Should we force all annotations to be available. * * @param forceAnnotations the force annotations flag */ public void setForceAnnotations(boolean forceAnnotations) { this.forceAnnotations = forceAnnotations; } /** * Set the keep annotations flag. * * @param keepAnnotations the keep annotations flag */ public void setKeepAnnotations(boolean keepAnnotations) { this.keepAnnotations = keepAnnotations; } /** * Should we check interfaces for annotations as well. * * @param checkInterfaces the check interfaces flag */ public void setCheckInterfaces(boolean checkInterfaces) { this.checkInterfaces = checkInterfaces; } /** * Set vfs deployment filter. * * @param filter the vfs deployment filter. */ public void setFilter(VFSDeploymentUnitFilter filter) { this.filter = filter; } /** * Create GenericAnnotationResourceVisitor. * * Can be used change existing GARV's filter. * Or determin if we need to force/keep annotations. * * @param unit the deployment unit * @param pool the class pool * @param classLoader the classloader * @return new generic annotation visitor */ protected GenericAnnotationResourceVisitor createGenericAnnotationResourceVisitor(DeploymentUnit unit, ClassPool pool, ClassLoader classLoader) { GenericAnnotationResourceVisitor visitor = new GenericAnnotationResourceVisitor(pool, classLoader); visitor.setForceAnnotations(forceAnnotations); visitor.setKeepAnnotations(keepAnnotations); visitor.setCheckInterfaces(checkInterfaces); return visitor; } /** * Create class pool. * * @param classLoader the class loader * @return javassist class pool */ @Deprecated protected ClassPool createClassPool(ClassLoader classLoader) { ClassPool pool = new ClassPool(); ClassPath classPath = new LoaderClassPath(classLoader); pool.insertClassPath(classPath); return pool; } /** * Create class pool. * * @param unit the deployment unit * @return javassist class pool */ protected ClassPool createClassPool(VFSDeploymentUnit unit) { ClassPool pool = new ClassPool(); ClassPath deploymentPath = new DeploymentUnitClassPath(unit); pool.appendClassPath(deploymentPath); // fall back to classloader classpath ClassPath classPath = new LoaderClassPath(unit.getClassLoader()); pool.appendClassPath(classPath); return pool; } /** * Visit module. * * Util method to add some behavior to Module * before we visit it. * * @param unit the deployment unit * @param module the module * @param visitor the resource visitor * @throws DeploymentException for any error */ protected void visitModule(VFSDeploymentUnit unit, Module module, GenericAnnotationResourceVisitor visitor) throws DeploymentException { try { module.visit(visitor, visitor.getFilter(), null, getUrls(unit)); } catch (Exception e) { throw DeploymentException.rethrowAsDeploymentException("Exception visiting module", e); } } /** * Get the matching urls. * * @param unit the deployment unit * @return matching urls * @throws Exception for any error */ protected URL[] getUrls(VFSDeploymentUnit unit) throws Exception { List classpath = unit.getClassPath(); if (classpath != null && classpath.isEmpty() == false) { List urls = new ArrayList(); VirtualFile root = unit.getRoot(); for (VirtualFile cp : classpath) { VirtualFile check = cp; while(check != null && check.equals(root) == false) check = check.getParent(); if (check != null) urls.add(cp.toURL()); } if (urls.isEmpty() == false) { if (log.isTraceEnabled()) log.trace("Explicit urls: " + urls); return urls.toArray(new URL[urls.size()]); } } return new URL[0]; } public void deploy(VFSDeploymentUnit unit, Module module) throws DeploymentException { // running this deployer is costly, check if it should be run if (filter != null && filter.accepts(unit) == false) return; if (module == null) { VFSDeploymentUnit parent = unit.getParent(); while(parent != null && module == null) { module = parent.getAttachment(Module.class); parent = parent.getParent(); } if (module == null) throw new IllegalArgumentException("No module in deployment unit's hierarchy: " + unit.getName()); } if (log.isTraceEnabled()) log.trace("Creating AnnotationEnvironment for " + unit.getName() + ", module: " + module + ", force annotations: " + forceAnnotations); ClassLoader classLoader = unit.getClassLoader(); ClassPool pool = createClassPool(unit); GenericAnnotationResourceVisitor visitor = createGenericAnnotationResourceVisitor(unit, pool, classLoader); // something in javassist uses TCL ClassLoader tcl = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); try { visitModule(unit, module, visitor); } finally { Thread.currentThread().setContextClassLoader(tcl); } unit.addAttachment(AnnotationEnvironment.class, visitor.getEnv()); } } ././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/annotations/ScanningDeploymentUnitFilter.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/an0000644000175000017500000001024511113261537033407 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.plugins.annotations; import java.net.URL; import java.util.List; import org.jboss.classloading.spi.visitor.ResourceContext; import org.jboss.classloading.spi.visitor.ResourceFilter; import org.jboss.deployers.spi.annotations.PathMetaData; import org.jboss.deployers.spi.annotations.ScanningMetaData; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnitFilter; import org.jboss.logging.Logger; /** * ScanningDeploymentUnitFilter * * @author Ales Justin */ public class ScanningDeploymentUnitFilter implements VFSDeploymentUnitFilter { private Logger log = Logger.getLogger(getClass()); public boolean accepts(VFSDeploymentUnit unit) { ScanningMetaData smd = unit.getAttachment(ScanningMetaData.class); if (smd != null) { // recurse ResourceFilter recurse = createRecurseFilter(smd); if (recurse != null) { ResourceFilter previousRecurse = unit.addAttachment(ResourceFilter.class.getName() + ".recurse", recurse, ResourceFilter.class); if (previousRecurse != null) log.debug("Overridding previous recurse filter: " + previousRecurse); } // resource ResourceFilter filter = createResourceFilter(smd); if (filter != null) { ResourceFilter previousFilter = unit.addAttachment(ResourceFilter.class.getName() + ".resource", filter, ResourceFilter.class); if (previousFilter != null) log.debug("Overridding previous resource filter: " + previousFilter); } } return true; } /** * Create recurse filter. * * @param smd the scanning metadata * @return recurse filter */ protected ResourceFilter createRecurseFilter(ScanningMetaData smd) { return new ScanningMetaDataRecurseFilter(smd); } /** * Create resource filter. * * @param smd the scanning metadata * @return resource filter */ protected ResourceFilter createResourceFilter(ScanningMetaData smd) { return new ScanningMetaDataResourceFilter(smd); } /** * Simple recurse filter. * It searches for path substring in url string. */ private class ScanningMetaDataRecurseFilter implements ResourceFilter { private ScanningMetaData smd; private ScanningMetaDataRecurseFilter(ScanningMetaData smd) { this.smd = smd; } public boolean accepts(ResourceContext resource) { URL url = resource.getUrl(); String urlString = url.toExternalForm(); List paths = smd.getPaths(); if (paths != null && paths.isEmpty() == false) { for (PathMetaData pmd : paths) { String name = pmd.getPathName(); // url contains path if (urlString.contains(name)) { return true; } } } return false; } } } libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/0000755000175000017500000000000011620060460033221 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000755000175000017500000000000011620060460033374 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000000407211104173360033402 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.kernel.spi.deployment.KernelDeployment; import org.jboss.virtual.VirtualFile; /** * BeanDeployer.

* * This deployer is responsible for looking for -beans.xml * and creating the metadata object. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class BeanDeployer extends SchemaResolverDeployer { /** * Create a new BeanDeployer. */ public BeanDeployer() { super(KernelDeployment.class); setSuffix("-beans.xml"); setJarExtension(".beans"); // Enable ManagedObject creation based on annotations by default setBuildManagedObject(true); setAllowMultipleFiles(true); } @Override protected void init(VFSDeploymentUnit unit, KernelDeployment metaData, VirtualFile file) throws Exception { String name = file.toURI().toString(); metaData.setName(name); } } ././@LongLink0000000000000000000000000000021200000000000011560 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanMetaDataFactoryVisitor.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000001102711104041440033371 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import java.util.ArrayList; import java.util.List; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.logging.Logger; import org.jboss.metadata.spi.scope.CommonLevels; /** * BeanMetaDataVisitor.

* * @param exact attachment type * @author Ales Justin */ public abstract class BeanMetaDataFactoryVisitor implements DeploymentVisitor { private Logger log = Logger.getLogger(getClass()); /** * Add bean component. * * @param unit the deployment unit * @param bean the bean metadata */ protected static void addBeanComponent(DeploymentUnit unit, BeanMetaData bean) { DeploymentUnit component = unit.addComponent(bean.getName()); component.addAttachment(BeanMetaData.class.getName(), bean); String className = bean.getBean(); if (className != null) { Object qualifier; if (bean.getClassLoader() == null) { ClassLoader cl = unit.getClassLoader(); try { qualifier = cl.loadClass(className); } catch (Exception e) { throw new IllegalArgumentException("Exception loading class for ScopeKey addition.", e); } } else { qualifier = className; } component.getScope().addScope(CommonLevels.CLASS, qualifier); } } /** * Remove bean component. * * @param unit the deployment unit * @param bean the bean metadata */ protected static void removeBeanComponent(DeploymentUnit unit, BeanMetaData bean) { unit.removeComponent(bean.getName()); } /** * Ignore all error during component removal. * * @param unit the deployment unit * @param bean the bean metadata */ protected void safeRemoveBeanComponent(DeploymentUnit unit, BeanMetaData bean) { try { removeBeanComponent(unit, bean); } catch (Throwable ignored) { log.warn("Error during component removal: " + unit.getName(), ignored); } } /** * Get beans from deployment. * * @param deployment the deployment * @return list of beans */ protected abstract List getBeans(T deployment); public void deploy(DeploymentUnit unit, T deployment) throws DeploymentException { List beans = getBeans(deployment); if (beans != null && beans.isEmpty() == false) { List visited = new ArrayList(); try { for (BeanMetaData bean : beans) { addBeanComponent(unit, bean); visited.add(bean); } } catch (Throwable t) { for (int i = visited.size()-1; i >= 0; --i) { safeRemoveBeanComponent(unit, visited.get(i)); } throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + unit.getName(), t); } } } public void undeploy(DeploymentUnit unit, T deployment) { List beans = getBeans(deployment); if (beans != null && beans.isEmpty() == false) { for (BeanMetaData bean : beans) { safeRemoveBeanComponent(unit, bean); } } } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/KernelDeploymentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000000625211104173360033404 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractComponentDeployer; import org.jboss.deployers.spi.deployer.managed.ManagedObjectCreator; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.kernel.spi.deployment.KernelDeployment; import org.jboss.managed.api.ManagedObject; public class KernelDeploymentDeployer extends AbstractComponentDeployer implements ManagedObjectCreator { private ManagedObjectCreator mgtObjectCreator; /** * Create a new KernelDeploymentDeployer. */ public KernelDeploymentDeployer() { setDeploymentVisitor(new KernelDeploymentVisitor()); setComponentVisitor(new BeanMetaDataVisitor()); } /** * KernelDeploymentVisitor. */ public static class KernelDeploymentVisitor extends BeanMetaDataFactoryVisitor { public Class getVisitorType() { return KernelDeployment.class; } protected List getBeans(KernelDeployment deployment) { return deployment.getBeans(); } } /** * BeanMetaDataVisitor. */ public static class BeanMetaDataVisitor extends BeanMetaDataFactoryVisitor { public Class getVisitorType() { return BeanMetaData.class; } protected List getBeans(BeanMetaData deployment) { return Collections.singletonList(deployment); } } public ManagedObjectCreator getMgtObjectCreator() { return mgtObjectCreator; } public void setMgtObjectCreator(ManagedObjectCreator mgtObjectCreator) { this.mgtObjectCreator = mgtObjectCreator; } public void build(DeploymentUnit unit, Set attachmentNames, Map managedObjects) throws DeploymentException { if(mgtObjectCreator != null) mgtObjectCreator.build(unit, attachmentNames, managedObjects); } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanScanningDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000001104111021237653033400 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.jboss.beans.metadata.api.annotations.Bean; import org.jboss.beans.metadata.api.annotations.BeanFactory; import org.jboss.beans.metadata.plugins.AbstractAliasMetaData; import org.jboss.beans.metadata.spi.AliasMetaData; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder; import org.jboss.beans.metadata.spi.factory.GenericBeanFactoryMetaData; import org.jboss.deployers.spi.deployer.helpers.AbstractAnnotationDeployer; import org.jboss.deployers.spi.deployer.helpers.AbstractAnnotationProcessor; /** * BeanScanningDeployer.

*

* This deployer is responsible for looking for @Bean(Factory) * and creating the metadata object. * * @author Ales Justin */ public class BeanScanningDeployer extends AbstractAnnotationDeployer { public BeanScanningDeployer() { super(new BeanAnnotationProcessor(), new BeanFactoryAnnotationProcessor()); } private static class BeanAnnotationProcessor extends AbstractAnnotationProcessor { public Class getAnnotation() { return Bean.class; } public Class getOutput() { return BeanMetaData.class; } protected BeanMetaData createMetaDataFromClass(Class clazz, Bean bean) { String name = bean.name(); if (name == null) throw new IllegalArgumentException("Null bean name: " + clazz); BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(name, clazz.getName()); String[] aliases = bean.aliases(); if (aliases != null && aliases.length > 0) builder.setAliases(new HashSet(Arrays.asList(aliases))); builder.setMode(bean.mode()) .setAccessMode(bean.accessMode()) .setAutowireType(bean.autowireType()) .setErrorHandlingMode(bean.errorHandlingMode()) .setAutowireCandidate(bean.autowireCandidate()); return builder.getBeanMetaData(); } } private static class BeanFactoryAnnotationProcessor extends AbstractAnnotationProcessor { public Class getAnnotation() { return BeanFactory.class; } public Class getOutput() { return BeanMetaData.class; } protected BeanMetaData createMetaDataFromClass(Class clazz, BeanFactory factory) { String name = factory.name(); if (name == null) throw new IllegalArgumentException("Null bean name: " + factory); GenericBeanFactoryMetaData gbfmd = new GenericBeanFactoryMetaData(name, clazz.getName()); Class factoryClass = factory.getFactoryClass(); if (void.class.equals(factoryClass) == false) gbfmd.setFactoryClass(factoryClass.getName()); String[] aliases = factory.aliases(); if (aliases != null && aliases.length > 0) { Set aliasesMD = new HashSet(); for (String alias : aliases) { AbstractAliasMetaData aamd = new AbstractAliasMetaData(); aamd.setAlias(alias); aliasesMD.add(aamd); } gbfmd.setAliases(aliasesMD); } gbfmd.setMode(factory.mode()); gbfmd.setAccessMode(factory.accessMode()); return gbfmd.getBeanMetaData(); } } }././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/managed/libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000755000175000017500000000000011620060460033374 5ustar twernertwerner././@LongLink0000000000000000000000000000022000000000000011557 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/managed/BeanInstanceClassFactory.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000001365111104173360033405 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel.managed; import java.io.Serializable; import java.lang.reflect.UndeclaredThrowableException; import java.util.Set; import org.jboss.beans.info.spi.BeanInfo; import org.jboss.beans.info.spi.PropertyInfo; import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData; import org.jboss.beans.metadata.plugins.AbstractValueMetaData; import org.jboss.beans.metadata.plugins.AbstractBeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.beans.metadata.spi.PropertyMetaData; import org.jboss.beans.metadata.spi.ValueMetaData; import org.jboss.kernel.plugins.config.Configurator; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.spi.factory.InstanceClassFactory; import org.jboss.metadata.spi.MetaData; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.MetaValueFactory; /** * The InstanceClassFactory implementation for BeanMetaData. * * @author Ales Justin * @author Scott.Stark@jboss.org * @version $Revision:$ */ public class BeanInstanceClassFactory implements InstanceClassFactory { /** The meta value factory */ private MetaValueFactory metaValueFactory = MetaValueFactory.getInstance(); /** * Get the classloader. * * @param beanMetaData the bean meta data * @return meta data's classloader * @throws UndeclaredThrowableException for any error */ protected ClassLoader getClassLoader(BeanMetaData beanMetaData) { try { return Configurator.getClassLoader(beanMetaData); } catch (Throwable t) { throw new UndeclaredThrowableException(t); } } public Class getType() { return AbstractBeanMetaData.class; } @SuppressWarnings("unchecked") public Class getManagedObjectClass(AbstractBeanMetaData attachment) throws ClassNotFoundException { return (Class)getClassLoader(attachment).loadClass(attachment.getBean()); } /** * Get the property meta data. * * @param attachment bean meta data * @param name property name * @return property meta data or null if no match */ protected PropertyMetaData getPropertyMetaData(AbstractBeanMetaData attachment, String name) { PropertyMetaData propertyMetaData = null; Set properties = attachment.getProperties(); if (properties != null && properties.isEmpty() == false) { for(PropertyMetaData pmd : properties) { if (name.equals(pmd.getName())) { propertyMetaData = pmd; break; } } } return propertyMetaData; } /** * Get the property meta data. * * @param attachment bean meta data * @param name property name * @return property meta data or exception if no match * @throws IllegalArgumentException for no matching property meta data */ protected PropertyMetaData getExactPropertyMetaData(AbstractBeanMetaData attachment, String name) { PropertyMetaData propertyMetaData = getPropertyMetaData(attachment, name); if (propertyMetaData == null) throw new IllegalArgumentException("No matching property meta data: " + name + "/" + attachment); return propertyMetaData; } public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property, MetaData metaData, AbstractBeanMetaData attachment) { String name = property.getName(); PropertyMetaData pmd = getExactPropertyMetaData(attachment, name); PropertyInfo propertyInfo = beanInfo.getProperty(name); ValueMetaData valueMetaData = pmd.getValue(); try { Object value = valueMetaData.getValue(propertyInfo.getType(), getClassLoader(attachment)); return metaValueFactory.create(value, propertyInfo.getType()); } catch (Throwable t) { throw new UndeclaredThrowableException(t); } } public void setValue(BeanInfo beanInfo, ManagedProperty property, AbstractBeanMetaData attachment, MetaValue value) { String name = property.getName(); PropertyMetaData pmd = getExactPropertyMetaData(attachment, name); PropertyInfo propertyInfo = beanInfo.getProperty(name); if (pmd instanceof AbstractPropertyMetaData) { AbstractPropertyMetaData apmd = (AbstractPropertyMetaData)pmd; apmd.setValue(new AbstractValueMetaData(metaValueFactory.unwrap(value, propertyInfo.getType()))); } } public Object getComponentName(BeanInfo beanInfo, ManagedProperty property, AbstractBeanMetaData attachment, MetaValue value) { return (beanInfo == null || property == null || value == null) ? attachment.getName() : null; } } ././@LongLink0000000000000000000000000000021000000000000011556 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/Properties2BeansDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000000553310774162175033423 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import java.util.Properties; import java.io.InputStream; import java.io.IOException; import org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer; import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit; import org.jboss.kernel.spi.deployment.KernelDeployment; import org.jboss.kernel.plugins.deployment.props.DeploymentBuilder; import org.jboss.virtual.VirtualFile; /** * Properties2BeansDeployer.

* * This deployer is responsible for looking for -beans.properties * and creating the metadata object. * * @author Ales Justin */ public class Properties2BeansDeployer extends AbstractVFSParsingDeployer { /** * Create a new Properties2BeansDeployer. */ public Properties2BeansDeployer() { super(KernelDeployment.class); setSuffix("-beans.properties"); // Enable ManagedObject creation based on annotations by default setBuildManagedObject(true); setAllowMultipleFiles(true); } @Override protected void init(VFSDeploymentUnit unit, KernelDeployment metaData, VirtualFile file) throws Exception { String name = file.toURI().toString(); metaData.setName(name); } protected KernelDeployment parse(VFSDeploymentUnit unit, VirtualFile file, KernelDeployment root) throws Exception { Properties properties = new Properties(); InputStream is = openStreamAndValidate(file); try { properties.load(is); DeploymentBuilder deploymentBuilder = new DeploymentBuilder(properties); return deploymentBuilder.build(); } finally { try { is.close(); } catch (IOException ignored) { } } } } ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanMetaDataDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000001373511113261537033414 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import java.util.Collection; import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData; import org.jboss.beans.metadata.plugins.AbstractValueMetaData; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.beans.metadata.spi.ClassLoaderMetaData; import org.jboss.beans.metadata.spi.ValueMetaData; import org.jboss.dependency.spi.Controller; import org.jboss.dependency.spi.ScopeInfo; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.kernel.Kernel; import org.jboss.kernel.plugins.dependency.AbstractKernelControllerContext; import org.jboss.kernel.spi.dependency.KernelControllerContext; import org.jboss.metadata.spi.scope.Scope; import org.jboss.metadata.spi.scope.ScopeKey; /** * BeanMetaDataDeployer.

* * This deployer is responsible for deploying all metadata of * type {@link org.jboss.beans.metadata.spi.BeanMetaData}. * * @author Adrian Brock * @version $Revision: 1.1 $ */ public class BeanMetaDataDeployer extends AbstractSimpleRealDeployer { /** The controller */ private Controller controller; /** * Create a new BeanDeployer. * * @param kernel the kernel * @throws IllegalArgumentException for a null kernel * @deprecated use other constructor */ public BeanMetaDataDeployer(Kernel kernel) { super(BeanMetaData.class); if (kernel == null) throw new IllegalArgumentException("Null kernel"); init(kernel.getController()); } /** * Create a new BeanDeployer. * * @param controller the controller * @throws IllegalArgumentException for a null controller */ public BeanMetaDataDeployer(Controller controller) { super(BeanMetaData.class); init(controller); } /** * Simple init. * * @param controller the controller */ protected void init(Controller controller) { if (controller == null) throw new IllegalArgumentException("Null controller"); this.controller = controller; setComponentsOnly(true); setUseUnitName(true); } @Override public void deploy(DeploymentUnit unit, BeanMetaData deployment) throws DeploymentException { // No explicit classloader, use the deployment's classloader if (deployment.getClassLoader() == null) { try { // Check the unit has a classloader unit.getClassLoader(); // TODO clone the metadata? deployment.setClassLoader(new DeploymentClassLoaderMetaData(unit)); } catch (Exception e) { log.debug("Unable to retrieve classloader for deployment: " + unit.getName() + " reason=" + e.toString()); } } KernelControllerContext context = new AbstractKernelControllerContext(null, deployment, null); ScopeInfo scopeInfo = context.getScopeInfo(); scopeInfo.setScope(unit.getScope()); scopeInfo.setMutableScope(unit.getMutableScope()); try { controller.install(context); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment.getName(), t); } } /** * Merge scope keys. * * @param contextKey the context key * @param unitKey the unit key */ protected static void mergeScopes(ScopeKey contextKey, ScopeKey unitKey) { if (contextKey == null) return; if (unitKey == null) return; Collection unitScopes = unitKey.getScopes(); if (unitScopes == null || unitScopes.isEmpty()) return; for (Scope scope : unitScopes) contextKey.addScope(scope); } @Override public void undeploy(DeploymentUnit unit, BeanMetaData deployment) { controller.uninstall(deployment.getName()); // Remove any classloader metadata we added (not necessary if we clone above) ClassLoaderMetaData classLoader = deployment.getClassLoader(); if (classLoader instanceof DeploymentClassLoaderMetaData) deployment.setClassLoader(null); } /** * DeploymentClassLoaderMetaData. */ private class DeploymentClassLoaderMetaData extends AbstractClassLoaderMetaData { /** The serialVersionUID */ private static final long serialVersionUID = 1L; /** The deployment unit */ private DeploymentUnit unit; /** * Create a new DeploymentClassLoaderMetaData. * * @param unit the deployment unit */ public DeploymentClassLoaderMetaData(DeploymentUnit unit) { if (unit == null) throw new IllegalArgumentException("Null unit"); this.unit = unit; } @Override public ValueMetaData getClassLoader() { return new AbstractValueMetaData(unit.getClassLoader()); } } } ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanMetaDataFactoryDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000000413711021237653033410 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import java.util.List; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.beans.metadata.spi.BeanMetaDataFactory; import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput; /** * BeanMetaDataFactoryDeployer.

* * @param exact attachment type * @author Ales Justin */ public class BeanMetaDataFactoryDeployer extends AbstractRealDeployerWithInput { public BeanMetaDataFactoryDeployer(Class clazz) { super(clazz); setDeploymentVisitor(new BeanMetaDataFactoryDeployerVisitor(clazz)); setOutput(BeanMetaData.class); } private class BeanMetaDataFactoryDeployerVisitor extends BeanMetaDataFactoryVisitor { private Class clazz; private BeanMetaDataFactoryDeployerVisitor(Class clazz) { this.clazz = clazz; } public Class getVisitorType() { return clazz; } protected List getBeans(T deployment) { return deployment.getBeans(); } } }././@LongLink0000000000000000000000000000021700000000000011565 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/DeploymentAliasMetaDataDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000000645311032523500033402 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import org.jboss.beans.metadata.spi.BeanMetaData; import org.jboss.beans.metadata.spi.NamedAliasMetaData; import org.jboss.dependency.spi.Controller; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.kernel.Kernel; /** * DeploymentAliasMetaDataDeployer.

* * @author Ales Justin */ public class DeploymentAliasMetaDataDeployer extends AbstractSimpleRealDeployer { /** The controller */ private Controller controller; /** * Create a new AliasDeployer. * * @param controller the controller * @throws IllegalArgumentException for a null controller */ public DeploymentAliasMetaDataDeployer(Controller controller) { super(NamedAliasMetaData.class); init(controller); } /** * Create a new AliasDeployer. * * @param kernel the kernel * @throws IllegalArgumentException for a null kernel * @deprecated use other constructor */ public DeploymentAliasMetaDataDeployer(Kernel kernel) { super(NamedAliasMetaData.class); if (kernel == null) throw new IllegalArgumentException("Null kernel"); init(kernel.getController()); } /** * Simple init. * * @param controller the controller */ protected void init(Controller controller) { if (controller == null) throw new IllegalArgumentException("Null controller"); this.controller = controller; addInput(BeanMetaData.class); setComponentsOnly(true); } @Override public void deploy(DeploymentUnit unit, NamedAliasMetaData deployment) throws DeploymentException { try { controller.addAlias(deployment.getAliasValue(), deployment.getName()); } catch (Throwable t) { throw DeploymentException.rethrowAsDeploymentException("Error deploying alias: " + deployment.getName(), t); } } @Override public void undeploy(DeploymentUnit unit, NamedAliasMetaData deployment) { controller.removeAlias(deployment.getAliasValue()); } } ././@LongLink0000000000000000000000000000020700000000000011564 Lustar rootrootlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/AliasDeploymentDeployer.javalibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/k0000644000175000017500000000756210774162175033427 0ustar twernertwerner/* * JBoss, Home of Professional Open Source * Copyright 2006, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.deployers.vfs.deployer.kernel; import java.util.Set; import org.jboss.beans.metadata.spi.NamedAliasMetaData; import org.jboss.deployers.spi.DeploymentException; import org.jboss.deployers.spi.deployer.helpers.AbstractComponentDeployer; import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.kernel.spi.deployment.KernelDeployment; /** * Handle alias components. * * @author Ales Justin */ public class AliasDeploymentDeployer extends AbstractComponentDeployer { /** * Create a new AliasDeploymentDeployer. */ public AliasDeploymentDeployer() { setDeploymentVisitor(new KernelDeploymentVisitor()); setComponentVisitor(new AliasMetaDataVisitor()); } protected static void addAliasComponent(DeploymentUnit unit, NamedAliasMetaData alias) { DeploymentUnit component = unit.addComponent(alias.getAliasValue().toString()); component.addAttachment(NamedAliasMetaData.class.getName(), alias); } protected static void removeAliasComponent(DeploymentUnit unit, NamedAliasMetaData alias) { unit.removeComponent(alias.getAliasValue().toString()); } /** * KernelDeploymentVisitor. */ public static class KernelDeploymentVisitor implements DeploymentVisitor { public Class getVisitorType() { return KernelDeployment.class; } public void deploy(DeploymentUnit unit, KernelDeployment deployment) throws DeploymentException { Set aliases = deployment.getAliases(); if (aliases != null && aliases.isEmpty() == false) { for (NamedAliasMetaData alias : aliases) addAliasComponent(unit, alias); } } public void undeploy(DeploymentUnit unit, KernelDeployment deployment) { Set aliases = deployment.getAliases(); if (aliases != null && aliases.isEmpty() == false) { for (NamedAliasMetaData alias : aliases) removeAliasComponent(unit, alias); } } } /** * AliasMetaDataVisitor. */ public static class AliasMetaDataVisitor implements DeploymentVisitor { public Class getVisitorType() { return NamedAliasMetaData.class; } public void deploy(DeploymentUnit unit, NamedAliasMetaData deployment) throws DeploymentException { addAliasComponent(unit, deployment); } public void undeploy(DeploymentUnit unit, NamedAliasMetaData deployment) { removeAliasComponent(unit, deployment); } } } libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/.settings/0000755000175000017500000000000011620060460024145 5ustar twernertwernerlibjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/.settings/org.eclipse.jdt.core.prefs0000644000175000017500000000032010674774740031147 0ustar twernertwerner#Fri Sep 21 17:50:45 BST 2007 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 libjboss-deployers-java-2.0.4.GA.orig/deployers-vfs/.project0000644000175000017500000000131611071370224023701 0ustar twernertwerner jboss-deployers-vfs JBoss Deployers VFS jboss-deployers-client jboss-deployers-client-spi jboss-deployers-core jboss-deployers-core-spi jboss-deployers-impl jboss-deployers-spi jboss-deployers-structure-spi jboss-deployers-vfs-spi org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature